authorgravatar for evan@lagerdata.comEvan Haas <evan@lagerdata.com> 2021-04-18 20:56:00-07:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2021-04-20 11:33:01+03:00
log63304a871e3837f407943ac8eb63073fdc89f0fd
tree050534d8cfa8b7fd37f4280f21e7eab834016259
parent55e6bd10fe49614cd54eb02dd44c50d0643804c3

translate-c: group LHS of array access if necessary


2 files changed, 10 insertions(+), 1 deletions(-)

src/translate_c/ast.zig+1-1
...@@ -1665,7 +1665,7 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex {...@@ -1665,7 +1665,7 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex {
1665 },1665 },
1666 .array_access => {1666 .array_access => {
1667 const payload = node.castTag(.array_access).?.data;1667 const payload = node.castTag(.array_access).?.data;
1668 const lhs = try renderNode(c, payload.lhs);1668 const lhs = try renderNodeGrouped(c, payload.lhs);
1669 const l_bracket = try c.addToken(.l_bracket, "[");1669 const l_bracket = try c.addToken(.l_bracket, "[");
1670 const index_expr = try renderNode(c, payload.rhs);1670 const index_expr = try renderNode(c, payload.rhs);
1671 _ = try c.addToken(.r_bracket, "]");1671 _ = try c.addToken(.r_bracket, "]");
test/run_translated_c.zig+9
...@@ -1467,4 +1467,13 @@ pub fn addCases(cases: *tests.RunTranslatedCContext) void {...@@ -1467,4 +1467,13 @@ pub fn addCases(cases: *tests.RunTranslatedCContext) void {
1467 \\ return 0;1467 \\ return 0;
1468 \\}1468 \\}
1469 , "");1469 , "");
1470
1471 cases.add("Render array LHS as grouped node if necessary",
1472 \\#include <stdlib.h>
1473 \\int main(void) {
1474 \\ int arr[] = {40, 41, 42, 43};
1475 \\ if ((arr + 1)[1] != 42) abort();
1476 \\ return 0;
1477 \\}
1478 , "");
1470}1479}