Let the lexer produce preprocessor numbers T_NUMBER instead of T_INTEGER and T_FLOATI...
[cparser] / ast.c
diff --git a/ast.c b/ast.c
index e3e4bea..cb40c3f 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -67,13 +67,6 @@ void print_indent(void)
                print_char('\t');
 }
 
-static void print_stringrep(const string_t *string)
-{
-       for (size_t i = 0; i < string->size; ++i) {
-               print_char(string->begin[i]);
-       }
-}
-
 /**
  * Returns 1 if a given precedence level has right-to-left
  * associativity, else 0.
@@ -197,6 +190,8 @@ static unsigned get_expression_precedence(expression_kind_t kind)
  */
 static void print_quoted_string(const string_t *const string, char border)
 {
+       print_string(get_string_encoding_prefix(string->encoding));
+
        print_char(border);
        const char *end = string->begin + string->size;
        for (const char *c = string->begin; c != end; ++c) {
@@ -233,7 +228,6 @@ static void print_quoted_string(const string_t *const string, char border)
 
 static void print_string_literal(string_literal_expression_t const *const literal, char const delimiter)
 {
-       print_string(get_string_encoding_prefix(literal->encoding));
        print_quoted_string(&literal->value, delimiter);
 }
 
@@ -247,8 +241,7 @@ static void print_literal(const literal_expression_t *literal)
        case EXPR_LITERAL_BOOLEAN:
        case EXPR_LITERAL_FLOATINGPOINT:
        case EXPR_LITERAL_INTEGER:
-               print_stringrep(&literal->value);
-               print_stringrep(&literal->suffix);
+               print_string(literal->value.begin);
                return;
 
        default:
@@ -1181,11 +1174,11 @@ void print_initializer(const initializer_t *initializer)
        }
 
        switch (initializer->kind) {
-       case INITIALIZER_VALUE: {
-               const initializer_value_t *value = &initializer->value;
-               print_assignment_expression(value->value);
+       case INITIALIZER_STRING:
+       case INITIALIZER_VALUE:
+               print_assignment_expression(initializer->value.value);
                return;
-       }
+
        case INITIALIZER_LIST: {
                print_string("{ ");
                const initializer_list_t *list = &initializer->list;
@@ -1202,10 +1195,6 @@ void print_initializer(const initializer_t *initializer)
                return;
        }
 
-       case INITIALIZER_STRING:
-               print_string_literal(get_init_string(initializer), '"');
-               return;
-
        case INITIALIZER_DESIGNATOR:
                print_designator(initializer->designator.designator);
                print_string(" = ");