X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ast_t.h;h=10a96b83ef13af1fa1b0054deecf99ccb25d9b12;hb=516b4ed5ac675f2d94becf9fa0815ddc65f637ac;hp=dfe84facff8428c2a44643bdf012da336b61cacb;hpb=57b2bd82de1bc4d81969d7d7446ed54d3bffdcd6;p=cparser diff --git a/ast_t.h b/ast_t.h index dfe84fa..10a96b8 100644 --- a/ast_t.h +++ b/ast_t.h @@ -67,15 +67,10 @@ typedef enum expression_kind_t { EXPR_ENUM_CONSTANT, EXPR_LITERAL_BOOLEAN, EXPR_LITERAL_INTEGER, - EXPR_LITERAL_INTEGER_OCTAL, - EXPR_LITERAL_INTEGER_HEXADECIMAL, EXPR_LITERAL_FLOATINGPOINT, - EXPR_LITERAL_FLOATINGPOINT_HEXADECIMAL, EXPR_LITERAL_CHARACTER, - EXPR_LITERAL_WIDE_CHARACTER, EXPR_LITERAL_MS_NOOP, /**< MS __noop extension */ EXPR_STRING_LITERAL, - EXPR_WIDE_STRING_LITERAL, EXPR_COMPOUND_LITERAL, EXPR_CALL, EXPR_CONDITIONAL, @@ -232,12 +227,7 @@ typedef enum funcname_kind_t { #define EXPR_LITERAL_CASES \ EXPR_LITERAL_BOOLEAN: \ case EXPR_LITERAL_INTEGER: \ - case EXPR_LITERAL_INTEGER_OCTAL: \ - case EXPR_LITERAL_INTEGER_HEXADECIMAL: \ case EXPR_LITERAL_FLOATINGPOINT: \ - case EXPR_LITERAL_FLOATINGPOINT_HEXADECIMAL: \ - case EXPR_LITERAL_CHARACTER: \ - case EXPR_LITERAL_WIDE_CHARACTER: \ case EXPR_LITERAL_MS_NOOP /** @@ -259,26 +249,28 @@ struct expression_base_t { }; /** - * integer/float constants, character and string literals + * integer, float and boolean constants */ struct literal_expression_t { - expression_base_t base; - string_t value; - string_t suffix; + expression_base_t base; + string_t value; + char const *suffix; /**< Start of the suffix in value. */ /* ast2firm data */ - ir_tarval *target_value; + ir_tarval *target_value; }; +/** + * string and character literals + */ struct string_literal_expression_t { - expression_base_t base; - string_t value; + expression_base_t base; + string_t value; }; struct funcname_expression_t { expression_base_t base; funcname_kind_t kind; - string_t value; /**< the value once assigned. */ }; struct compound_literal_expression_t { @@ -365,7 +357,7 @@ struct offsetof_expression_t { struct va_start_expression_t { expression_base_t base; expression_t *ap; - variable_t *parameter; + expression_t *parameter; }; struct va_arg_expression_t { @@ -431,7 +423,6 @@ typedef enum initializer_kind_t { INITIALIZER_VALUE, INITIALIZER_LIST, INITIALIZER_STRING, - INITIALIZER_WIDE_STRING, INITIALIZER_DESIGNATOR } initializer_kind_t; @@ -450,16 +441,6 @@ struct initializer_list_t { initializer_t *initializers[]; }; -struct initializer_string_t { - initializer_base_t base; - string_t string; -}; - -struct initializer_wide_string_t { - initializer_base_t base; - string_t string; -}; - struct initializer_designator_t { initializer_base_t base; designator_t *designator; @@ -470,11 +451,16 @@ union initializer_t { initializer_base_t base; initializer_value_t value; initializer_list_t list; - initializer_string_t string; - initializer_wide_string_t wide_string; initializer_designator_t designator; }; +static inline string_literal_expression_t const *get_init_string(initializer_t const *const init) +{ + assert(init->kind == INITIALIZER_STRING); + assert(init->value.value->kind == EXPR_STRING_LITERAL); + return &init->value.value->string_literal; +} + /** * The statement kinds. */ @@ -535,6 +521,7 @@ struct declaration_statement_t { struct if_statement_t { statement_base_t base; + scope_t scope; expression_t *condition; statement_t *true_statement; statement_t *false_statement; @@ -542,6 +529,7 @@ struct if_statement_t { struct switch_statement_t { statement_base_t base; + scope_t scope; expression_t *expression; statement_t *body; case_label_statement_t *first_case, *last_case; /**< List of all cases, including default. */ @@ -586,23 +574,25 @@ struct expression_statement_t { struct while_statement_t { statement_base_t base; + scope_t scope; expression_t *condition; statement_t *body; }; struct do_while_statement_t { statement_base_t base; + scope_t scope; expression_t *condition; statement_t *body; }; struct for_statement_t { statement_base_t base; + scope_t scope; expression_t *initialisation; expression_t *condition; expression_t *step; statement_t *body; - scope_t scope; bool condition_reachable:1; bool step_reachable:1; };