diff options
Diffstat (limited to 'libsolidity')
-rw-r--r-- | libsolidity/inlineasm/AsmAnalysis.cpp | 18 | ||||
-rw-r--r-- | libsolidity/parsing/Parser.cpp | 13 |
2 files changed, 22 insertions, 9 deletions
diff --git a/libsolidity/inlineasm/AsmAnalysis.cpp b/libsolidity/inlineasm/AsmAnalysis.cpp index 7bcbde91..630e0abf 100644 --- a/libsolidity/inlineasm/AsmAnalysis.cpp +++ b/libsolidity/inlineasm/AsmAnalysis.cpp @@ -447,17 +447,25 @@ void AsmAnalyzer::expectValidType(string const& type, SourceLocation const& _loc void AsmAnalyzer::warnOnFutureInstruction(solidity::Instruction _instr, SourceLocation const& _location) { + string instr; switch (_instr) { + case solidity::Instruction::CREATE2: + instr = "create2"; + break; case solidity::Instruction::RETURNDATASIZE: + instr = "returndatasize"; + break; case solidity::Instruction::RETURNDATACOPY: - m_errorReporter.warning( - _location, - "The RETURNDATASIZE/RETURNDATACOPY instructions are only available after " - "the Metropolis hard fork. Before that they act as an invalid instruction." - ); + instr = "returndatacopy"; break; default: break; } + if (!instr.empty()) + m_errorReporter.warning( + _location, + "The \"" + instr + "\" instruction is only available after " + + "the Metropolis hard fork. Before that it acts as an invalid instruction." + ); } diff --git a/libsolidity/parsing/Parser.cpp b/libsolidity/parsing/Parser.cpp index ec27f89b..7c439211 100644 --- a/libsolidity/parsing/Parser.cpp +++ b/libsolidity/parsing/Parser.cpp @@ -1328,16 +1328,21 @@ pair<vector<ASTPointer<Expression>>, vector<ASTPointer<ASTString>>> Parser::pars { // call({arg1 : 1, arg2 : 2 }) expectToken(Token::LBrace); + + bool first = true; while (m_scanner->currentToken() != Token::RBrace) { + if (!first) + expectToken(Token::Comma); + + if (m_scanner->currentToken() == Token::RBrace) + fatalParserError("Unexpected trailing comma."); + ret.second.push_back(expectIdentifierToken()); expectToken(Token::Colon); ret.first.push_back(parseExpression()); - if (m_scanner->currentToken() == Token::Comma) - expectToken(Token::Comma); - else - break; + first = false; } expectToken(Token::RBrace); } |