copy universal character parsing from lexer
[cparser] / ast_t.h
diff --git a/ast_t.h b/ast_t.h
index 58d6750..10a96b8 100644 (file)
--- a/ast_t.h
+++ b/ast_t.h
@@ -69,10 +69,8 @@ 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_WIDE_STRING_LITERAL,
        EXPR_COMPOUND_LITERAL,
        EXPR_CALL,
        EXPR_CONDITIONAL,
@@ -230,8 +228,6 @@ typedef enum funcname_kind_t {
             EXPR_LITERAL_BOOLEAN:                   \
        case EXPR_LITERAL_INTEGER:                   \
        case EXPR_LITERAL_FLOATINGPOINT:             \
-       case EXPR_LITERAL_CHARACTER:                 \
-       case EXPR_LITERAL_WIDE_CHARACTER:            \
        case EXPR_LITERAL_MS_NOOP
 
 /**
@@ -253,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 {
@@ -359,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 {
@@ -425,7 +423,6 @@ typedef enum initializer_kind_t {
        INITIALIZER_VALUE,
        INITIALIZER_LIST,
        INITIALIZER_STRING,
-       INITIALIZER_WIDE_STRING,
        INITIALIZER_DESIGNATOR
 } initializer_kind_t;
 
@@ -444,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;
@@ -464,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.
  */