mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #2362 from ethereum/lowercase_instructions
Use lowercase when reporting instruction error.
This commit is contained in:
		
						commit
						fe3b46554a
					
				| @ -206,6 +206,20 @@ std::map<string, dev::solidity::Instruction> const& Parser::instructions() | ||||
| 	return s_instructions; | ||||
| } | ||||
| 
 | ||||
| std::map<dev::solidity::Instruction, string> const& Parser::instructionNames() | ||||
| { | ||||
| 	static map<dev::solidity::Instruction, string> s_instructionNames; | ||||
| 	if (s_instructionNames.empty()) | ||||
| 	{ | ||||
| 		for (auto const& instr: instructions()) | ||||
| 			s_instructionNames[instr.second] = instr.first; | ||||
| 		// set the ambiguous instructions to a clear default
 | ||||
| 		s_instructionNames[solidity::Instruction::SELFDESTRUCT] = "selfdestruct"; | ||||
| 		s_instructionNames[solidity::Instruction::KECCAK256] = "keccak256"; | ||||
| 	} | ||||
| 	return s_instructionNames; | ||||
| } | ||||
| 
 | ||||
| assembly::Statement Parser::parseElementaryOperation(bool _onlySinglePusher) | ||||
| { | ||||
| 	Statement ret; | ||||
| @ -233,7 +247,7 @@ assembly::Statement Parser::parseElementaryOperation(bool _onlySinglePusher) | ||||
| 			{ | ||||
| 				InstructionInfo info = dev::solidity::instructionInfo(instr); | ||||
| 				if (info.ret != 1) | ||||
| 					fatalParserError("Instruction " + info.name + " not allowed in this context."); | ||||
| 					fatalParserError("Instruction \"" + literal + "\" not allowed in this context."); | ||||
| 			} | ||||
| 			ret = Instruction{location(), instr}; | ||||
| 		} | ||||
| @ -363,9 +377,9 @@ assembly::Statement Parser::parseCall(assembly::Statement&& _instruction) | ||||
| 			/// check for premature closing parentheses
 | ||||
| 			if (currentToken() == Token::RParen) | ||||
| 				fatalParserError(string( | ||||
| 					"Expected expression (" + | ||||
| 					instrInfo.name + | ||||
| 					" expects " + | ||||
| 					"Expected expression (\"" + | ||||
| 					instructionNames().at(instr) + | ||||
| 					"\" expects " + | ||||
| 					boost::lexical_cast<string>(args) + | ||||
| 					" arguments)" | ||||
| 				)); | ||||
| @ -375,9 +389,9 @@ assembly::Statement Parser::parseCall(assembly::Statement&& _instruction) | ||||
| 			{ | ||||
| 				if (currentToken() != Token::Comma) | ||||
| 					fatalParserError(string( | ||||
| 						"Expected comma (" + | ||||
| 						instrInfo.name + | ||||
| 						" expects " + | ||||
| 						"Expected comma (\"" + | ||||
| 						instructionNames().at(instr) + | ||||
| 						"\" expects " + | ||||
| 						boost::lexical_cast<string>(args) + | ||||
| 						" arguments)" | ||||
| 					)); | ||||
| @ -387,9 +401,13 @@ assembly::Statement Parser::parseCall(assembly::Statement&& _instruction) | ||||
| 		} | ||||
| 		ret.location.end = endPosition(); | ||||
| 		if (currentToken() == Token::Comma) | ||||
| 			fatalParserError( | ||||
| 				string("Expected ')' (" + instrInfo.name + " expects " + boost::lexical_cast<string>(args) + " arguments)") | ||||
| 			); | ||||
| 			fatalParserError(string( | ||||
| 				"Expected ')' (\"" + | ||||
| 				instructionNames().at(instr) + | ||||
| 				"\" expects " + | ||||
| 				boost::lexical_cast<string>(args) + | ||||
| 				" arguments)" | ||||
| 			)); | ||||
| 		expectToken(Token::RParen); | ||||
| 		return ret; | ||||
| 	} | ||||
|  | ||||
| @ -65,7 +65,8 @@ protected: | ||||
| 	Case parseCase(); | ||||
| 	/// Parses a functional expression that has to push exactly one stack element
 | ||||
| 	Statement parseExpression(); | ||||
| 	std::map<std::string, dev::solidity::Instruction> const& instructions(); | ||||
| 	static std::map<std::string, dev::solidity::Instruction> const& instructions(); | ||||
| 	static std::map<dev::solidity::Instruction, std::string> const& instructionNames(); | ||||
| 	Statement parseElementaryOperation(bool _onlySinglePusher = false); | ||||
| 	VariableDeclaration parseVariableDeclaration(); | ||||
| 	FunctionDefinition parseFunctionDefinition(); | ||||
|  | ||||
| @ -330,13 +330,13 @@ BOOST_AUTO_TEST_CASE(invalid_tuple_assignment) | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(instruction_too_few_arguments) | ||||
| { | ||||
| 	CHECK_PARSE_ERROR("{ mul() }", ParserError, "Expected expression (MUL expects 2 arguments)"); | ||||
| 	CHECK_PARSE_ERROR("{ mul(1) }", ParserError, "Expected comma (MUL expects 2 arguments)"); | ||||
| 	CHECK_PARSE_ERROR("{ mul() }", ParserError, "Expected expression (\"mul\" expects 2 arguments)"); | ||||
| 	CHECK_PARSE_ERROR("{ mul(1) }", ParserError, "Expected comma (\"mul\" expects 2 arguments)"); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(instruction_too_many_arguments) | ||||
| { | ||||
| 	CHECK_PARSE_ERROR("{ mul(1, 2, 3) }", ParserError, "Expected ')' (MUL expects 2 arguments)"); | ||||
| 	CHECK_PARSE_ERROR("{ mul(1, 2, 3) }", ParserError, "Expected ')' (\"mul\" expects 2 arguments)"); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_SUITE_END() | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user