|
|
@ -34,7 +34,7 @@ |
|
|
|
|
|
|
|
#define DO_C_PROTOS() \ |
|
|
|
_DO(Comment) _DO(Token) \ |
|
|
|
_DO(C_declaration) \ |
|
|
|
_DO(C_declaration) _DO(C_string) \ |
|
|
|
_DO(C_if) _DO(C_int) _DO(C_float) _DO(C_char) _DO(C_id) _DO(C_while) _DO(C_do) _DO(C_for) \ |
|
|
|
_DO(C_binary) _DO(C_initializer) _DO(C_range) _DO(C_conditional) _DO(C_index) \ |
|
|
|
_DO(C_designation) _DO(C_attribution) _DO(C_deref) _DO(C_block) _DO(C_call) _DO(C_subexpr) \ |
|
|
@ -359,7 +359,7 @@ oop new_C_switch(oop switchTok, oop lParen, oop expression, oop rParen, oop stat |
|
|
|
map_set(object, switchTok_symbol, switchTok); |
|
|
|
map_set(object, lparen_symbol, lParen); |
|
|
|
map_set(object, expression_symbol, expression); |
|
|
|
map_set(object, rParen, rParen); |
|
|
|
map_set(object, rparen_symbol, rParen); |
|
|
|
map_set(object, statements_symbol, statement); |
|
|
|
return object; |
|
|
|
} |
|
|
@ -486,11 +486,10 @@ char *unescape(char *s) |
|
|
|
return t; |
|
|
|
} |
|
|
|
|
|
|
|
oop newString(oop str) |
|
|
|
{ assert(is(String, str)); |
|
|
|
oop string = newObject(String_proto); |
|
|
|
map_set(string, value_symbol, str); |
|
|
|
return string; |
|
|
|
oop new_C_string(oop str) { |
|
|
|
oop object = newObject(C_string_proto); |
|
|
|
map_set(object, text_symbol, str); |
|
|
|
return object; |
|
|
|
} |
|
|
|
|
|
|
|
oop new_C_char(char *s) { |
|
|
@ -972,7 +971,6 @@ oop new_C_attributeSpec(oop attributeTok, oop llParen, oop lrParen, oop attribut |
|
|
|
map_set(object, attributeL_symbol, attributeList); |
|
|
|
map_set(object, rlparen_symbol, rlParen); |
|
|
|
map_set(object, rrparen_symbol, rrParen); |
|
|
|
printf("Fin\n"); |
|
|
|
return object; |
|
|
|
} |
|
|
|
|
|
|
@ -981,7 +979,7 @@ oop new_C_aggregate(oop lParen, oop typeName, oop rParen, oop leftCurly, oop ini |
|
|
|
map_set(object, lparen_symbol, lParen); |
|
|
|
map_set(object, typeName_symbol, typeName); |
|
|
|
map_set(object, rparen_symbol, rParen); |
|
|
|
map_set(object, leftCurly_symbol, leftCurly_symbol); |
|
|
|
map_set(object, leftCurly_symbol, leftCurly); |
|
|
|
map_set(object, initList_symbol, initList); |
|
|
|
map_set(object, comma_symbol, comma); |
|
|
|
map_set(object, rightCurly_symbol, rightCurly); |
|
|
@ -1235,7 +1233,7 @@ hexadecimalEscapeSequence = '\\x' hexadecimalDigit+ |
|
|
|
|
|
|
|
stringLiteral = { listBegin(); } |
|
|
|
( s:stringLiteralPart { listAppend(s) } |
|
|
|
)+ { $$= newString(listEnd()) } |
|
|
|
)+ { $$= new_C_string(listEnd()) } |
|
|
|
|
|
|
|
stringLiteralPart = < '"' sCharSequence '"' > { $$= new_C_char(yytext) } - |
|
|
|
| < 'L''"' sCharSequence '"' > { $$= new_C_char(yytext) } - |
|
|
@ -3066,6 +3064,9 @@ void outputNode(oop node) |
|
|
|
case t_C_float: |
|
|
|
outputNode(map_get(node, text_symbol)); |
|
|
|
break; |
|
|
|
case t_C_string: |
|
|
|
outputNode(map_get(node, text_symbol)); |
|
|
|
break; |
|
|
|
case t_C_char: |
|
|
|
outputNode(map_get(node, value_symbol)); |
|
|
|
break; |
|
|
@ -3247,13 +3248,13 @@ void outputNode(oop node) |
|
|
|
outputNode(map_get(node, lparen_symbol)); |
|
|
|
outputNode(map_get(node, text_symbol)); |
|
|
|
outputNode(map_get(node, element_symbol)); |
|
|
|
outputNode(map_get(node, lparen_symbol)); |
|
|
|
outputNode(map_get(node, rparen_symbol)); |
|
|
|
break; |
|
|
|
case t_C_asmExprArg: |
|
|
|
outputNode(map_get(node, text_symbol)); |
|
|
|
outputNode(map_get(node, lparen_symbol)); |
|
|
|
outputNode(map_get(node, expression_symbol)); |
|
|
|
outputNode(map_get(node, lparen_symbol)); |
|
|
|
outputNode(map_get(node, rparen_symbol)); |
|
|
|
break; |
|
|
|
case t_C_declaration: |
|
|
|
outputNode(map_get(node, specifiers_symbol)); |
|
|
@ -3431,6 +3432,9 @@ void outputTree(oop node, int depth) |
|
|
|
CASE(float) |
|
|
|
OUT(text); |
|
|
|
break; |
|
|
|
CASE(string) |
|
|
|
OUT(text); |
|
|
|
break; |
|
|
|
CASE(char) |
|
|
|
OUT(value); |
|
|
|
break; |
|
|
|