EXPR_REFERENCE,
EXPR_CONST,
EXPR_STRING_LITERAL,
+ EXPR_WIDE_STRING_LITERAL,
EXPR_CALL,
EXPR_UNARY,
EXPR_BINARY,
const char *value;
};
+struct wide_string_literal_expression_t {
+ expression_base_t expression;
+ wide_string_t value;
+};
+
struct builtin_symbol_expression_t {
expression_base_t expression;
symbol_t *symbol;
UNEXPR_POSTFIX_DECREMENT,
UNEXPR_PREFIX_INCREMENT,
UNEXPR_PREFIX_DECREMENT,
- UNEXPR_CAST
+ UNEXPR_CAST,
+ UNEXPR_CAST_IMPLICIT /* compiler generated cast */
} unary_expression_type_t;
struct unary_expression_t {
};
union expression_t {
- expression_type_t type;
- expression_base_t base;
- const_expression_t conste;
- string_literal_expression_t string;
- builtin_symbol_expression_t builtin_symbol;
- reference_expression_t reference;
- call_expression_t call;
- unary_expression_t unary;
- binary_expression_t binary;
- select_expression_t select;
- array_access_expression_t array_access;
- sizeof_expression_t sizeofe;
- offsetof_expression_t offsetofe;
- va_arg_expression_t va_arge;
- conditional_expression_t conditional;
- statement_expression_t statement;
- classify_type_expression_t classify_type;
+ expression_type_t type;
+ expression_base_t base;
+ const_expression_t conste;
+ string_literal_expression_t string;
+ wide_string_literal_expression_t wide_string;
+ builtin_symbol_expression_t builtin_symbol;
+ reference_expression_t reference;
+ call_expression_t call;
+ unary_expression_t unary;
+ binary_expression_t binary;
+ select_expression_t select;
+ array_access_expression_t array_access;
+ sizeof_expression_t sizeofe;
+ offsetof_expression_t offsetofe;
+ va_arg_expression_t va_arge;
+ conditional_expression_t conditional;
+ statement_expression_t statement;
+ classify_type_expression_t classify_type;
};
typedef enum {
INITIALIZER_VALUE,
INITIALIZER_LIST,
INITIALIZER_STRING,
- INITIALIZER_COUNT
+ INITIALIZER_WIDE_STRING
} initializer_type_t;
struct initializer_base_t {
const char *string;
};
+struct initializer_wide_string_t {
+ initializer_base_t initializer;
+ wide_string_t string;
+};
+
union initializer_t {
- initializer_type_t type;
- initializer_base_t base;
- initializer_value_t value;
- initializer_list_t list;
- initializer_string_t string;
+ initializer_type_t type;
+ initializer_base_t base;
+ initializer_value_t value;
+ initializer_list_t list;
+ initializer_string_t string;
+ initializer_wide_string_t wide_string;
};
struct declaration_t {