EXPR_ARRAY_ACCESS,
EXPR_SIZEOF,
EXPR_CLASSIFY_TYPE,
+ EXPR_ALIGNOF,
EXPR_FUNCTION,
EXPR_PRETTY_FUNCTION,
EXPR_BUILTIN_SYMBOL,
+ EXPR_BUILTIN_CONSTANT_P,
+ EXPR_BUILTIN_PREFETCH,
EXPR_OFFSETOF,
EXPR_VA_START,
EXPR_VA_ARG,
EXPR_UNARY_CAST,
EXPR_UNARY_CAST_IMPLICIT, /**< compiler generated cast */
EXPR_UNARY_ASSUME, /**< MS __assume() */
- EXPR_UNARY_LAST = EXPR_UNARY_ASSUME,
+ EXPR_UNARY_BITFIELD_EXTRACT,
+ EXPR_UNARY_LAST = EXPR_UNARY_BITFIELD_EXTRACT,
EXPR_BINARY_FIRST,
EXPR_BINARY_ADD = EXPR_BINARY_FIRST,
case EXPR_UNARY_PREFIX_DECREMENT: \
case EXPR_UNARY_CAST: \
case EXPR_UNARY_CAST_IMPLICIT: \
- case EXPR_UNARY_ASSUME:
+ case EXPR_UNARY_ASSUME: \
+ case EXPR_UNARY_BITFIELD_EXTRACT:
struct context_t {
- declaration_t *declarations;
+ declaration_t *declarations; /**< List of declarations in this context. */
};
struct expression_base_t {
symbol_t *symbol;
};
+struct builtin_constant_expression_t {
+ expression_base_t expression;
+ expression_t *value;
+};
+
+struct builtin_prefetch_expression_t {
+ expression_base_t expression;
+ expression_t *adr;
+ expression_t *rw;
+ expression_t *locality;
+};
+
struct reference_expression_t {
expression_base_t expression;
symbol_t *symbol;
expression_t *size_expression;
};
+struct alignof_expression_t {
+ expression_base_t expression;
+ type_t *type;
+};
+
struct designator_t {
symbol_t *symbol;
expression_t *array_access;
string_literal_expression_t string;
wide_string_literal_expression_t wide_string;
builtin_symbol_expression_t builtin_symbol;
+ builtin_constant_expression_t builtin_constant;
+ builtin_prefetch_expression_t builtin_prefetch;
reference_expression_t reference;
call_expression_t call;
unary_expression_t unary;
conditional_expression_t conditional;
statement_expression_t statement;
classify_type_expression_t classify_type;
+ alignof_expression_t alignofe;
};
typedef enum {
struct declaration_t {
unsigned char namespc;
unsigned char storage_class;
- decl_modifiers_t decl_modifiers;
+ decl_modifiers_t modifiers;
unsigned int address_taken : 1;
unsigned int is_inline : 1;
type_t *type;
declaration_t *symbol_next;
/* the following fields are used in ast2firm module */
- unsigned char declaration_type;
+ unsigned char declaration_kind;
union {
unsigned int value_number;
ir_entity *entity;