From 6cf9a410d06bd633a9cf49220d3fd4f0fd4c2ecb Mon Sep 17 00:00:00 2001 From: Houtan Bastani <houtan@dynare.org> Date: Mon, 24 Jun 2019 11:58:55 +0200 Subject: [PATCH] macro processor: oblige parens for tuple passed as variable in for loop --- src/macro/Parser.yy | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/macro/Parser.yy b/src/macro/Parser.yy index e1d7f6d7..8629cf7a 100644 --- a/src/macro/Parser.yy +++ b/src/macro/Parser.yy @@ -152,10 +152,19 @@ directive_multiline : for { $$ = $1; } ; -for : FOR { driver.pushContext(); } comma_name IN expr EOL statements ENDFOR +for : FOR { driver.pushContext(); } NAME IN expr EOL statements ENDFOR + { + vector<VariablePtr> vvnp = {make_shared<Variable>($3, driver.env, @3)}; + auto vdp = driver.popContext(); + vdp.emplace_back(make_shared<TextNode>("\n", driver.env, @8)); + $$ = make_shared<For>(vvnp, $5, vdp, driver.env, @$); + } + ; + +for : FOR { driver.pushContext(); } LPAREN comma_name RPAREN IN expr EOL statements ENDFOR { vector<VariablePtr> vvnp; - for (auto & it : $3) + for (auto & it : $4) { auto vnp = dynamic_pointer_cast<Variable>(it); if (!vnp) @@ -163,8 +172,8 @@ for : FOR { driver.pushContext(); } comma_name IN expr EOL statements ENDFOR vvnp.push_back(vnp); } auto vdp = driver.popContext(); - vdp.emplace_back(make_shared<TextNode>("\n", driver.env, @8)); - $$ = make_shared<For>(vvnp, $5, vdp, driver.env, @$); + vdp.emplace_back(make_shared<TextNode>("\n", driver.env, @10)); + $$ = make_shared<For>(vvnp, $7, vdp, driver.env, @$); } ; -- GitLab