authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-03-07 10:39:32+01:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-03-07 10:39:32+01:00
logbb80daf509b7afd84fe3076347e69e8f39f586d6
tree6ea153cf05a6c0c24474a1c350849cbed2cc4ede
parentd96dd5bc329b69c410ef4d4def763ddb2bab13f0

Ast Render no longer outputs erroneous semicolon

closes #813

4 files changed, 22 insertions(+), 17 deletions(-)

src/ast_render.cpp+4-1
...@@ -490,7 +490,10 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {...@@ -490,7 +490,10 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
490 AstNode *statement = node->data.block.statements.at(i);490 AstNode *statement = node->data.block.statements.at(i);
491 print_indent(ar);491 print_indent(ar);
492 render_node_grouped(ar, statement);492 render_node_grouped(ar, statement);
493 fprintf(ar->f, ";");493
494 if (!statement_terminates_without_semicolon(statement))
495 fprintf(ar->f, ";");
496
494 fprintf(ar->f, "\n");497 fprintf(ar->f, "\n");
495 }498 }
496 ar->indent -= ar->indent_size;499 ar->indent -= ar->indent_size;
src/parser.cpp+1-1
...@@ -2315,7 +2315,7 @@ static AstNode *ast_parse_expression(ParseContext *pc, size_t *token_index, bool...@@ -2315,7 +2315,7 @@ static AstNode *ast_parse_expression(ParseContext *pc, size_t *token_index, bool
2315 return nullptr;2315 return nullptr;
2316}2316}
23172317
2318static bool statement_terminates_without_semicolon(AstNode *node) {2318bool statement_terminates_without_semicolon(AstNode *node) {
2319 switch (node->type) {2319 switch (node->type) {
2320 case NodeTypeIfBoolExpr:2320 case NodeTypeIfBoolExpr:
2321 if (node->data.if_bool_expr.else_node)2321 if (node->data.if_bool_expr.else_node)
src/parser.hpp+2
...@@ -23,4 +23,6 @@ void ast_print(AstNode *node, int indent);...@@ -23,4 +23,6 @@ void ast_print(AstNode *node, int indent);
2323
24void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *context), void *context);24void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *context), void *context);
2525
26bool statement_terminates_without_semicolon(AstNode *node);
27
26#endif28#endif
test/translate_c.zig+15-15
...@@ -351,7 +351,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -351,7 +351,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
351 \\ var i: c_int = 0;351 \\ var i: c_int = 0;
352 \\ while (a > c_uint(0)) {352 \\ while (a > c_uint(0)) {
353 \\ a >>= @import("std").math.Log2Int(c_uint)(1);353 \\ a >>= @import("std").math.Log2Int(c_uint)(1);
354 \\ };354 \\ }
355 \\ return i;355 \\ return i;
356 \\}356 \\}
357 );357 );
...@@ -498,7 +498,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -498,7 +498,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
498 \\ var i: c_int = 0;498 \\ var i: c_int = 0;
499 \\ while (a > c_uint(0)) {499 \\ while (a > c_uint(0)) {
500 \\ a >>= u5(1);500 \\ a >>= u5(1);
501 \\ };501 \\ }
502 \\ return i;502 \\ return i;
503 \\}503 \\}
504 );504 );
...@@ -867,12 +867,12 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -867,12 +867,12 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
867 \\ while (true) {867 \\ while (true) {
868 \\ a -= 1;868 \\ a -= 1;
869 \\ if (!(a != 0)) break;869 \\ if (!(a != 0)) break;
870 \\ };870 \\ }
871 \\ var b: c_int = 2;871 \\ var b: c_int = 2;
872 \\ while (true) {872 \\ while (true) {
873 \\ b -= 1;873 \\ b -= 1;
874 \\ if (!(b != 0)) break;874 \\ if (!(b != 0)) break;
875 \\ };875 \\ }
876 \\}876 \\}
877 );877 );
878878
...@@ -962,8 +962,8 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -962,8 +962,8 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
962 \\pub fn foo() void {962 \\pub fn foo() void {
963 \\ {963 \\ {
964 \\ var i: c_int = 0;964 \\ var i: c_int = 0;
965 \\ while (i < 10) : (i += 1) {};965 \\ while (i < 10) : (i += 1) {}
966 \\ };966 \\ }
967 \\}967 \\}
968 );968 );
969969
...@@ -973,7 +973,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -973,7 +973,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
973 \\}973 \\}
974 ,974 ,
975 \\pub fn foo() void {975 \\pub fn foo() void {
976 \\ while (true) {};976 \\ while (true) {}
977 \\}977 \\}
978 );978 );
979979
...@@ -987,7 +987,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -987,7 +987,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
987 \\pub fn foo() void {987 \\pub fn foo() void {
988 \\ while (true) {988 \\ while (true) {
989 \\ break;989 \\ break;
990 \\ };990 \\ }
991 \\}991 \\}
992 );992 );
993993
...@@ -1001,7 +1001,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -1001,7 +1001,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
1001 \\pub fn foo() void {1001 \\pub fn foo() void {
1002 \\ while (true) {1002 \\ while (true) {
1003 \\ continue;1003 \\ continue;
1004 \\ };1004 \\ }
1005 \\}1005 \\}
1006 );1006 );
10071007
...@@ -1058,7 +1058,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -1058,7 +1058,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
1058 \\ {1058 \\ {
1059 \\ var x_0: c_int = 2;1059 \\ var x_0: c_int = 2;
1060 \\ x_0 += 1;1060 \\ x_0 += 1;
1061 \\ };1061 \\ }
1062 \\ return x;1062 \\ return x;
1063 \\}1063 \\}
1064 );1064 );
...@@ -1147,7 +1147,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -1147,7 +1147,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
1147 \\ return 0;1147 \\ return 0;
1148 \\ } else {1148 \\ } else {
1149 \\ return 1;1149 \\ return 1;
1150 \\ };1150 \\ }
1151 \\}1151 \\}
1152 );1152 );
11531153
...@@ -1164,7 +1164,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -1164,7 +1164,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
1164 \\ break :__to_bool_expr @bitCast(@IntType(false, @sizeOf(@typeOf(_tmp)) * 8), _tmp) != 0;1164 \\ break :__to_bool_expr @bitCast(@IntType(false, @sizeOf(@typeOf(_tmp)) * 8), _tmp) != 0;
1165 \\ }) {1165 \\ }) {
1166 \\ return 0;1166 \\ return 0;
1167 \\ };1167 \\ }
1168 \\}1168 \\}
1169 );1169 );
11701170
...@@ -1185,7 +1185,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -1185,7 +1185,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
1185 \\ break :__to_bool_expr @bitCast(@IntType(false, @sizeOf(@typeOf(_tmp)) * 8), _tmp) != 0;1185 \\ break :__to_bool_expr @bitCast(@IntType(false, @sizeOf(@typeOf(_tmp)) * 8), _tmp) != 0;
1186 \\ }) {1186 \\ }) {
1187 \\ return 0;1187 \\ return 0;
1188 \\ };1188 \\ }
1189 \\ {1189 \\ {
1190 \\ var j: c_int = 4;1190 \\ var j: c_int = 4;
1191 \\ while (__to_bool_expr: {1191 \\ while (__to_bool_expr: {
...@@ -1193,8 +1193,8 @@ pub fn addCases(cases: &tests.TranslateCContext) void {...@@ -1193,8 +1193,8 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
1193 \\ break :__to_bool_expr @bitCast(@IntType(false, @sizeOf(@typeOf(_tmp)) * 8), _tmp) != 0;1193 \\ break :__to_bool_expr @bitCast(@IntType(false, @sizeOf(@typeOf(_tmp)) * 8), _tmp) != 0;
1194 \\ }) : (j -= 1) {1194 \\ }) : (j -= 1) {
1195 \\ return 0;1195 \\ return 0;
1196 \\ };1196 \\ }
1197 \\ };1197 \\ }
1198 \\}1198 \\}
1199 );1199 );
1200}1200}