diff --git a/ccmeta.leg b/ccmeta.leg index 00b00a2..e189c0c 100644 --- a/ccmeta.leg +++ b/ccmeta.leg @@ -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;