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 {
struct string_literal_expression_t {
expression_base_t expression;
- const char *value;
+ string_t value;
};
struct wide_string_literal_expression_t {
};
struct initializer_string_t {
- initializer_base_t initializer;
- const char *string;
+ initializer_base_t initializer;
+ string_t string;
};
struct initializer_wide_string_t {
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;
};
struct switch_statement_t {
- statement_base_t statement;
- expression_t *expression;
- statement_t *body;
+ statement_base_t statement;
+ expression_t *expression;
+ statement_t *body;
+ case_label_statement_t *first_case, *last_case;
};
struct goto_statement_t {
statement_base_t statement;
declaration_t *label;
+ goto_statement_t *next; /**< link all goto statements in a function */
};
struct case_label_statement_t {
- statement_base_t statement;
- expression_t *expression;
- statement_t *label_statement;
+ statement_base_t statement;
+ expression_t *expression;
+ statement_t *label_statement;
+ case_label_statement_t *next; /**< link to the next case label in the switch */
};
struct label_statement_t {
};
struct asm_constraint_t {
- const char *constraints;
+ string_t constraints;
expression_t *expression;
symbol_t *symbol;
asm_constraint_t *next;
};
struct asm_clobber_t {
- const char *clobber;
+ string_t clobber;
asm_clobber_t *next;
};
struct asm_statement_t {
statement_base_t statement;
- const char *asm_text;
+ string_t asm_text;
asm_constraint_t *inputs;
asm_constraint_t *outputs;
asm_clobber_t *clobbers;