Remove the (mostly) unnecessary distinction between EXPR_LITERAL_INTEGER, EXPR_LITERA...
authorChristoph Mallon <christoph.mallon@gmx.de>
Sun, 6 May 2012 17:17:51 +0000 (19:17 +0200)
committerChristoph Mallon <christoph.mallon@gmx.de>
Sun, 6 May 2012 17:17:51 +0000 (19:17 +0200)
- Just keep EXPR_LITERAL_INTEGER.
- Only in create_integer_tarval() it is necessary to know, whether an integer constant ist decimal, but this test is easy (first char != '0').

ast.c
ast2firm.c
ast_t.h
parser.c
wrappergen/write_jna.c

diff --git a/ast.c b/ast.c
index 63d3726..945e085 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -105,8 +105,6 @@ static unsigned get_expression_precedence(expression_kind_t kind)
                [EXPR_REFERENCE]                         = PREC_PRIMARY,
                [EXPR_ENUM_CONSTANT]                     = PREC_PRIMARY,
                [EXPR_LITERAL_INTEGER]                   = PREC_PRIMARY,
-               [EXPR_LITERAL_INTEGER_OCTAL]             = PREC_PRIMARY,
-               [EXPR_LITERAL_INTEGER_HEXADECIMAL]       = PREC_PRIMARY,
                [EXPR_LITERAL_FLOATINGPOINT]             = PREC_PRIMARY,
                [EXPR_LITERAL_FLOATINGPOINT_HEXADECIMAL] = PREC_PRIMARY,
                [EXPR_LITERAL_CHARACTER]                 = PREC_PRIMARY,
@@ -257,8 +255,6 @@ static void print_literal(const literal_expression_t *literal)
        case EXPR_LITERAL_FLOATINGPOINT:
        case EXPR_LITERAL_FLOATINGPOINT_HEXADECIMAL:
        case EXPR_LITERAL_INTEGER:
-       case EXPR_LITERAL_INTEGER_HEXADECIMAL:
-       case EXPR_LITERAL_INTEGER_OCTAL:
                print_stringrep(&literal->value);
                print_stringrep(&literal->suffix);
                return;
index 26f613b..0e9950a 100644 (file)
@@ -1207,7 +1207,7 @@ static bool try_create_integer(literal_expression_t *literal, type_t *type)
 static void create_integer_tarval(literal_expression_t *literal)
 {
        /* -1: signed only, 0: any, 1: unsigned only */
-       int             sign   = literal->base.kind == EXPR_LITERAL_INTEGER ? -1 : 0;
+       int             sign   = literal->value.begin[0] != '0' /* decimal */ ? -1 : 0;
        unsigned        ls     = 0;
        const string_t *suffix = &literal->suffix;
        /* parse suffix */
@@ -1255,8 +1255,6 @@ void determine_literal_type(literal_expression_t *literal)
 {
        switch (literal->base.kind) {
        case EXPR_LITERAL_INTEGER:
-       case EXPR_LITERAL_INTEGER_OCTAL:
-       case EXPR_LITERAL_INTEGER_HEXADECIMAL:
                create_integer_tarval(literal);
                return;
        default:
@@ -1305,8 +1303,6 @@ static ir_node *literal_to_firm(const literal_expression_t *literal)
        }
 
        case EXPR_LITERAL_INTEGER:
-       case EXPR_LITERAL_INTEGER_OCTAL:
-       case EXPR_LITERAL_INTEGER_HEXADECIMAL:
                assert(literal->target_value != NULL);
                tv = literal->target_value;
                break;
diff --git a/ast_t.h b/ast_t.h
index 4b94ca2..a473ba1 100644 (file)
--- a/ast_t.h
+++ b/ast_t.h
@@ -67,8 +67,6 @@ 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,
@@ -232,8 +230,6 @@ 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:                 \
index e50693b..77a2772 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -330,8 +330,6 @@ static size_t get_expression_struct_size(expression_kind_t kind)
                [EXPR_ENUM_CONSTANT]              = sizeof(reference_expression_t),
                [EXPR_LITERAL_BOOLEAN]            = sizeof(literal_expression_t),
                [EXPR_LITERAL_INTEGER]            = sizeof(literal_expression_t),
-               [EXPR_LITERAL_INTEGER_OCTAL]      = sizeof(literal_expression_t),
-               [EXPR_LITERAL_INTEGER_HEXADECIMAL]= sizeof(literal_expression_t),
                [EXPR_LITERAL_FLOATINGPOINT]      = sizeof(literal_expression_t),
                [EXPR_LITERAL_FLOATINGPOINT_HEXADECIMAL] = sizeof(literal_expression_t),
                [EXPR_LITERAL_CHARACTER]          = sizeof(literal_expression_t),
@@ -5858,20 +5856,13 @@ static expression_t *parse_number_literal(void)
 
        switch (token.kind) {
        case T_INTEGER:
-               kind = EXPR_LITERAL_INTEGER;
-               check_integer_suffix();
-               type = type_int;
-               break;
        case T_INTEGER_OCTAL:
-               kind = EXPR_LITERAL_INTEGER_OCTAL;
-               check_integer_suffix();
-               type = type_int;
-               break;
        case T_INTEGER_HEXADECIMAL:
-               kind = EXPR_LITERAL_INTEGER_HEXADECIMAL;
+               kind = EXPR_LITERAL_INTEGER;
                check_integer_suffix();
                type = type_int;
                break;
+
        case T_FLOATINGPOINT:
                kind = EXPR_LITERAL_FLOATINGPOINT;
                type = check_floatingpoint_suffix();
@@ -8428,8 +8419,6 @@ static bool expression_has_effect(const expression_t *const expr)
                case EXPR_LITERAL_CHARACTER:
                case EXPR_LITERAL_WIDE_CHARACTER:
                case EXPR_LITERAL_INTEGER:
-               case EXPR_LITERAL_INTEGER_OCTAL:
-               case EXPR_LITERAL_INTEGER_HEXADECIMAL:
                case EXPR_LITERAL_FLOATINGPOINT:
                case EXPR_LITERAL_FLOATINGPOINT_HEXADECIMAL: return false;
                case EXPR_STRING_LITERAL:             return false;
index c5735f8..d4d7d1b 100644 (file)
@@ -308,8 +308,6 @@ static void write_expression(const expression_t *expression)
        /* TODO */
        switch(expression->kind) {
        case EXPR_LITERAL_INTEGER:
-       case EXPR_LITERAL_INTEGER_HEXADECIMAL:
-       case EXPR_LITERAL_INTEGER_OCTAL:
                fprintf(out, "%s", expression->literal.value.begin);
                break;