# HG changeset patch # User lbessard # Date 1207671697 -7200 # Node ID d4cf7ea933a4081d27da652b04428b1926a0640c # Parent 550c3bd2df16ea658575697292f05f0dbfadcda7 Problem with negated literals while compiling generated C file on 32bits systems fixed diff -r 550c3bd2df16 -r d4cf7ea933a4 absyntax/absyntax.def --- a/absyntax/absyntax.def Thu Apr 03 18:29:14 2008 +0200 +++ b/absyntax/absyntax.def Tue Apr 08 18:21:37 2008 +0200 @@ -81,6 +81,8 @@ SYM_TOKEN(signed_real_c) */ +SYM_REF1(neg_literal_c, exp) + SYM_REF2(numeric_literal_c, type, value) SYM_REF2(integer_literal_c, type, value) SYM_REF2(real_literal_c, type, value) diff -r 550c3bd2df16 -r d4cf7ea933a4 stage1_2/iec.y --- a/stage1_2/iec.y Thu Apr 03 18:29:14 2008 +0200 +++ b/stage1_2/iec.y Tue Apr 08 18:21:37 2008 +0200 @@ -1687,7 +1687,7 @@ signed_integer: integer | '+' integer {$$ = $2;} -| '-' integer {$$ = new neg_expression_c($2, locloc(@$));} +| '-' integer {$$ = new neg_literal_c($2, locloc(@$));} ; /* a helper symbol for non_negative_constant */ @@ -1716,7 +1716,7 @@ signed_real: real | '+' real {$$ = $2;} -| '-' real {$$ = new neg_expression_c($2, locloc(@2));} +| '-' real {$$ = new neg_literal_c($2, locloc(@2));} ; /* helper symbol for non_negative_real_literal */ diff -r 550c3bd2df16 -r d4cf7ea933a4 stage4/generate_c/generate_c_base.cc --- a/stage4/generate_c/generate_c_base.cc Thu Apr 03 18:29:14 2008 +0200 +++ b/stage4/generate_c/generate_c_base.cc Tue Apr 08 18:21:37 2008 +0200 @@ -254,6 +254,12 @@ void *visit(boolean_true_c *symbol) {s4o.print("TRUE"); return NULL;} void *visit(boolean_false_c *symbol) {s4o.print("FALSE"); return NULL;} + void *visit(neg_literal_c *symbol) { + s4o.print("-"); + symbol->exp->accept(*this); + return NULL; + } + void *visit(neg_expression_c *symbol) { s4o.print("-"); symbol->exp->accept(*this); diff -r 550c3bd2df16 -r d4cf7ea933a4 stage4/generate_iec/generate_iec.cc --- a/stage4/generate_iec/generate_iec.cc Thu Apr 03 18:29:14 2008 +0200 +++ b/stage4/generate_iec/generate_iec.cc Tue Apr 08 18:21:37 2008 +0200 @@ -154,6 +154,8 @@ void *visit(real_literal_c *symbol) {return print_literal(symbol->type, symbol->value);} void *visit(bit_string_literal_c *symbol) {return print_literal(symbol->type, symbol->value);} void *visit(boolean_literal_c *symbol) {return print_literal(symbol->type, symbol->value);} +void *visit(neg_literal_c *symbol) {return print_unary_expression(symbol->exp, "-");} + /* helper class for boolean_literal_c */ void *visit(boolean_true_c *symbol) {s4o.print(/*"TRUE"*/"1"); return NULL;}