mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Fix source location of yul multi-assignemnt.
This commit is contained in:
parent
d19aa2e51b
commit
b00014c51d
@ -11,6 +11,7 @@ Compiler Features:
|
|||||||
Bugfixes:
|
Bugfixes:
|
||||||
* NatSpec: Do not consider ``////`` and ``/***`` as NatSpec comments.
|
* NatSpec: Do not consider ``////`` and ``/***`` as NatSpec comments.
|
||||||
* Type Checker: Fix internal error related to ``using for`` applied to non-libraries.
|
* Type Checker: Fix internal error related to ``using for`` applied to non-libraries.
|
||||||
|
* Yul: Fix source location of variable multi-assignment.
|
||||||
|
|
||||||
|
|
||||||
### 0.6.10 (2020-06-11)
|
### 0.6.10 (2020-06-11)
|
||||||
|
@ -175,7 +175,8 @@ Statement Parser::parseStatement()
|
|||||||
case Token::Comma:
|
case Token::Comma:
|
||||||
case Token::AssemblyAssign:
|
case Token::AssemblyAssign:
|
||||||
{
|
{
|
||||||
std::vector<Identifier> variableNames;
|
Assignment assignment;
|
||||||
|
assignment.location = locationOf(elementary);
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
@ -197,7 +198,7 @@ Statement Parser::parseStatement()
|
|||||||
if (m_dialect.builtin(identifier.name))
|
if (m_dialect.builtin(identifier.name))
|
||||||
fatalParserError(6272_error, "Cannot assign to builtin function \"" + identifier.name.str() + "\".");
|
fatalParserError(6272_error, "Cannot assign to builtin function \"" + identifier.name.str() + "\".");
|
||||||
|
|
||||||
variableNames.emplace_back(identifier);
|
assignment.variableNames.emplace_back(identifier);
|
||||||
|
|
||||||
if (currentToken() != Token::Comma)
|
if (currentToken() != Token::Comma)
|
||||||
break;
|
break;
|
||||||
@ -207,10 +208,6 @@ Statement Parser::parseStatement()
|
|||||||
elementary = parseElementaryOperation();
|
elementary = parseElementaryOperation();
|
||||||
}
|
}
|
||||||
|
|
||||||
Assignment assignment;
|
|
||||||
assignment.location = std::get<Identifier>(elementary).location;
|
|
||||||
assignment.variableNames = std::move(variableNames);
|
|
||||||
|
|
||||||
expectToken(Token::AssemblyAssign);
|
expectToken(Token::AssemblyAssign);
|
||||||
|
|
||||||
assignment.value = make_unique<Expression>(parseExpression());
|
assignment.value = make_unique<Expression>(parseExpression());
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
contract C {
|
||||||
|
function f() pure public {
|
||||||
|
uint x; uint y;
|
||||||
|
assembly { x, y := 7 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// DeclarationError: (87-96): Variable count does not match number of values (2 vs. 1)
|
Loading…
Reference in New Issue
Block a user