* typedef float foo;
* is like creating a 'float foo', foo serving as the type's name.
*/
+typedef union {
+ double vfloat;
+ int vint;
+ vector vvec;
+ const char *vstring;
+ int ventity;
+ ast_function *vfunc;
+ ast_value *vfield;
+} basic_value_t;
struct ast_value_s
{
ast_expression_common expression;
int cvq; /* const/var qualifier */
bool isfield; /* this declares a field */
+ bool isimm; /* an immediate, not just const */
bool hasvalue;
- union {
- double vfloat;
- int vint;
- vector vvec;
- const char *vstring;
- int ventity;
- ast_function *vfunc;
- ast_value *vfield;
- } constval;
+ basic_value_t constval;
+ /* for TYPE_ARRAY we have an optional vector
+ * of constants when an initializer list
+ * was provided.
+ */
+ basic_value_t *initlist;
/* usecount for the parser */
size_t uses;
union ast_expression_u
{
ast_expression_common expression;
-
- ast_value value;
- ast_binary binary;
- ast_block block;
- ast_ternary ternary;
- ast_ifthen ifthen;
- ast_store store;
- ast_entfield entfield;
};
/* Node union
union ast_node_u
{
ast_node_common node;
- ast_expression expression;
};
#endif