From 15b4d4def23bcf0feb93c67dccc137baa59d5102 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 5 May 2017 18:35:40 +0100 Subject: Support multiple variables in a variable declaration in inline assembly --- libsolidity/inlineasm/AsmParser.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'libsolidity/inlineasm/AsmParser.cpp') diff --git a/libsolidity/inlineasm/AsmParser.cpp b/libsolidity/inlineasm/AsmParser.cpp index a96984f5..53954a49 100644 --- a/libsolidity/inlineasm/AsmParser.cpp +++ b/libsolidity/inlineasm/AsmParser.cpp @@ -258,11 +258,25 @@ assembly::VariableDeclaration Parser::parseVariableDeclaration() { VariableDeclaration varDecl = createWithLocation(); expectToken(Token::Let); - varDecl.variable = parseTypedName(); + while (true) + { + varDecl.variables.push_back(parseTypedName()); + if (m_scanner->currentToken() == Token::Comma) + expectToken(Token::Comma); + else + break; + } expectToken(Token::Colon); expectToken(Token::Assign); - varDecl.value.reset(new Statement(parseExpression())); - varDecl.location.end = locationOf(*varDecl.value).end; + while (true) + { + varDecl.values.emplace_back(new Statement(parseExpression())); + if (m_scanner->currentToken() == Token::Comma) + expectToken(Token::Comma); + else + break; + } + varDecl.location.end = locationOf(varDecl.values.back()).end; return varDecl; } -- cgit v1.2.3 From cb4966046d9871b63084ddcf0ff6fac8a4c322aa Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 5 May 2017 18:56:29 +0100 Subject: Enable a single right hand item on let --- libsolidity/inlineasm/AsmParser.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'libsolidity/inlineasm/AsmParser.cpp') diff --git a/libsolidity/inlineasm/AsmParser.cpp b/libsolidity/inlineasm/AsmParser.cpp index 53954a49..73f70e3f 100644 --- a/libsolidity/inlineasm/AsmParser.cpp +++ b/libsolidity/inlineasm/AsmParser.cpp @@ -268,15 +268,8 @@ assembly::VariableDeclaration Parser::parseVariableDeclaration() } expectToken(Token::Colon); expectToken(Token::Assign); - while (true) - { - varDecl.values.emplace_back(new Statement(parseExpression())); - if (m_scanner->currentToken() == Token::Comma) - expectToken(Token::Comma); - else - break; - } - varDecl.location.end = locationOf(varDecl.values.back()).end; + varDecl.value.reset(new Statement(parseExpression())); + varDecl.location.end = locationOf(*varDecl.value).end; return varDecl; } -- cgit v1.2.3