preprocessor: implement stringify operation '#'
[cparser] / ast_t.h
diff --git a/ast_t.h b/ast_t.h
index 10ed251..10a96b8 100644 (file)
--- a/ast_t.h
+++ b/ast_t.h
@@ -69,7 +69,6 @@ typedef enum expression_kind_t {
        EXPR_LITERAL_INTEGER,
        EXPR_LITERAL_FLOATINGPOINT,
        EXPR_LITERAL_CHARACTER,
-       EXPR_LITERAL_WIDE_CHARACTER,
        EXPR_LITERAL_MS_NOOP, /**< MS __noop extension */
        EXPR_STRING_LITERAL,
        EXPR_COMPOUND_LITERAL,
@@ -253,27 +252,25 @@ struct expression_base_t {
  * 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_encoding_t  encoding;
-       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 {
@@ -426,7 +423,6 @@ typedef enum initializer_kind_t {
        INITIALIZER_VALUE,
        INITIALIZER_LIST,
        INITIALIZER_STRING,
-       INITIALIZER_WIDE_STRING,
        INITIALIZER_DESIGNATOR
 } initializer_kind_t;
 
@@ -445,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;
@@ -465,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.
  */