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) {
490490 AstNode *statement = node->data.block.statements.at(i);
491491 print_indent(ar);
492492 render_node_grouped(ar, statement);
493 fprintf(ar->f, ";");
493
494 if (!statement_terminates_without_semicolon(statement))
495 fprintf(ar->f, ";");
496
494497 fprintf(ar->f, "\n");
495498 }
496499 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
23152315 return nullptr;
23162316}
23172317
2318static bool statement_terminates_without_semicolon(AstNode *node) {
2318bool statement_terminates_without_semicolon(AstNode *node) {
23192319 switch (node->type) {
23202320 case NodeTypeIfBoolExpr:
23212321 if (node->data.if_bool_expr.else_node)
src/parser.hpp+2
......@@ -23,4 +23,6 @@ void ast_print(AstNode *node, int indent);
2323
2424void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *context), void *context);
2525
26bool statement_terminates_without_semicolon(AstNode *node);
27
2628#endif
test/translate_c.zig+15-15
......@@ -351,7 +351,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
351351 \\ var i: c_int = 0;
352352 \\ while (a > c_uint(0)) {
353353 \\ a >>= @import("std").math.Log2Int(c_uint)(1);
354 \\ };
354 \\ }
355355 \\ return i;
356356 \\}
357357 );
......@@ -498,7 +498,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
498498 \\ var i: c_int = 0;
499499 \\ while (a > c_uint(0)) {
500500 \\ a >>= u5(1);
501 \\ };
501 \\ }
502502 \\ return i;
503503 \\}
504504 );
......@@ -867,12 +867,12 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
867867 \\ while (true) {
868868 \\ a -= 1;
869869 \\ if (!(a != 0)) break;
870 \\ };
870 \\ }
871871 \\ var b: c_int = 2;
872872 \\ while (true) {
873873 \\ b -= 1;
874874 \\ if (!(b != 0)) break;
875 \\ };
875 \\ }
876876 \\}
877877 );
878878
......@@ -962,8 +962,8 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
962962 \\pub fn foo() void {
963963 \\ {
964964 \\ var i: c_int = 0;
965 \\ while (i < 10) : (i += 1) {};
966 \\ };
965 \\ while (i < 10) : (i += 1) {}
966 \\ }
967967 \\}
968968 );
969969
......@@ -973,7 +973,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
973973 \\}
974974 ,
975975 \\pub fn foo() void {
976 \\ while (true) {};
976 \\ while (true) {}
977977 \\}
978978 );
979979
......@@ -987,7 +987,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
987987 \\pub fn foo() void {
988988 \\ while (true) {
989989 \\ break;
990 \\ };
990 \\ }
991991 \\}
992992 );
993993
......@@ -1001,7 +1001,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
10011001 \\pub fn foo() void {
10021002 \\ while (true) {
10031003 \\ continue;
1004 \\ };
1004 \\ }
10051005 \\}
10061006 );
10071007
......@@ -1058,7 +1058,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
10581058 \\ {
10591059 \\ var x_0: c_int = 2;
10601060 \\ x_0 += 1;
1061 \\ };
1061 \\ }
10621062 \\ return x;
10631063 \\}
10641064 );
......@@ -1147,7 +1147,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
11471147 \\ return 0;
11481148 \\ } else {
11491149 \\ return 1;
1150 \\ };
1150 \\ }
11511151 \\}
11521152 );
11531153
......@@ -1164,7 +1164,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
11641164 \\ break :__to_bool_expr @bitCast(@IntType(false, @sizeOf(@typeOf(_tmp)) * 8), _tmp) != 0;
11651165 \\ }) {
11661166 \\ return 0;
1167 \\ };
1167 \\ }
11681168 \\}
11691169 );
11701170
......@@ -1185,7 +1185,7 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
11851185 \\ break :__to_bool_expr @bitCast(@IntType(false, @sizeOf(@typeOf(_tmp)) * 8), _tmp) != 0;
11861186 \\ }) {
11871187 \\ return 0;
1188 \\ };
1188 \\ }
11891189 \\ {
11901190 \\ var j: c_int = 4;
11911191 \\ while (__to_bool_expr: {
......@@ -1193,8 +1193,8 @@ pub fn addCases(cases: &tests.TranslateCContext) void {
11931193 \\ break :__to_bool_expr @bitCast(@IntType(false, @sizeOf(@typeOf(_tmp)) * 8), _tmp) != 0;
11941194 \\ }) : (j -= 1) {
11951195 \\ return 0;
1196 \\ };
1197 \\ };
1196 \\ }
1197 \\ }
11981198 \\}
11991199 );
12001200}