mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
						commit
						a17d480fc2
					
				| @ -89,6 +89,9 @@ void InlineModifier::operator()(ForLoop& _loop) | ||||
| 
 | ||||
| void InlineModifier::operator()(Block& _block) | ||||
| { | ||||
| 	vector<Statement> saved; | ||||
| 	saved.swap(m_statementsToPrefix); | ||||
| 
 | ||||
| 	// This is only used if needed to minimize the number of move operations.
 | ||||
| 	vector<Statement> modifiedStatements; | ||||
| 	for (size_t i = 0; i < _block.statements.size(); ++i) | ||||
| @ -110,6 +113,8 @@ void InlineModifier::operator()(Block& _block) | ||||
| 	} | ||||
| 	if (!modifiedStatements.empty()) | ||||
| 		_block.statements = std::move(modifiedStatements); | ||||
| 
 | ||||
| 	saved.swap(m_statementsToPrefix); | ||||
| } | ||||
| 
 | ||||
| void InlineModifier::visit(Expression& _expression) | ||||
|  | ||||
| @ -342,5 +342,40 @@ BOOST_AUTO_TEST_CASE(pop_result) | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(inside_condition) | ||||
| { | ||||
| 	// This tests that breaking the expression inside the condition works properly.
 | ||||
| 	BOOST_CHECK_EQUAL( | ||||
| 		fullInline("{" | ||||
| 			"if gt(f(mload(1)), mload(0)) {" | ||||
| 				"sstore(0, 2)" | ||||
| 			"}" | ||||
| 			"function f(a) -> r {" | ||||
| 				"a := mload(a)" | ||||
| 				"r := add(a, calldatasize())" | ||||
| 			"}" | ||||
| 		"}", false), | ||||
| 		format("{" | ||||
| 			"{" | ||||
| 				"let _1 := mload(0)" | ||||
| 				"let f_a := mload(1)" | ||||
| 				"let f_r" | ||||
| 				"{" | ||||
| 					"f_a := mload(f_a)" | ||||
| 					"f_r := add(f_a, calldatasize())" | ||||
| 				"}" | ||||
| 				"if gt(f_r, _1)" | ||||
| 				"{" | ||||
| 					"sstore(0, 2)" | ||||
| 				"}" | ||||
| 			"}" | ||||
| 			"function f(a) -> r" | ||||
| 			"{" | ||||
| 				"a := mload(a)" | ||||
| 				"r := add(a, calldatasize())" | ||||
| 			"}" | ||||
| 		"}", false) | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_SUITE_END() | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user