mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Provide easy way to update source location expectation.
This commit is contained in:
		
							parent
							
								
									00692a4ff6
								
							
						
					
					
						commit
						7f4cf00f1b
					
				| @ -86,23 +86,59 @@ eth::AssemblyItems compileContract(const string& _sourceCode) | ||||
| 	return AssemblyItems(); | ||||
| } | ||||
| 
 | ||||
| void printAssemblyLocations(AssemblyItems const& _items) | ||||
| { | ||||
| 	auto printRepeated = [](SourceLocation const& _loc, size_t _repetitions) | ||||
| 	{ | ||||
| 		cout << | ||||
| 			"\t\tvector<SourceLocation>(" << | ||||
| 			_repetitions << | ||||
| 			", SourceLocation(" << | ||||
| 			_loc.start << | ||||
| 			", " << | ||||
| 			_loc.end << | ||||
| 			", make_shared<string>(\"" << | ||||
| 			*_loc.sourceName << | ||||
| 			"\"))) +" << endl; | ||||
| 	}; | ||||
| 
 | ||||
| 	vector<SourceLocation> locations; | ||||
| 	for (auto const& item: _items) | ||||
| 		locations.push_back(item.location()); | ||||
| 	size_t repetitions = 0; | ||||
| 	SourceLocation const* previousLoc = nullptr; | ||||
| 	for (size_t i = 0; i < locations.size(); ++i) | ||||
| 	{ | ||||
| 		SourceLocation& loc = locations[i]; | ||||
| 		if (previousLoc && *previousLoc == loc) | ||||
| 			repetitions++; | ||||
| 		else | ||||
| 		{ | ||||
| 			if (previousLoc) | ||||
| 				printRepeated(*previousLoc, repetitions); | ||||
| 			previousLoc = &loc; | ||||
| 			repetitions = 1; | ||||
| 		} | ||||
| 	} | ||||
| 	if (previousLoc) | ||||
| 		printRepeated(*previousLoc, repetitions); | ||||
| } | ||||
| 
 | ||||
| void checkAssemblyLocations(AssemblyItems const& _items, vector<SourceLocation> const& _locations) | ||||
| { | ||||
| 	BOOST_CHECK_EQUAL(_items.size(), _locations.size()); | ||||
| 	for (size_t i = 0; i < min(_items.size(), _locations.size()); ++i) | ||||
| 	{ | ||||
| 		BOOST_CHECK_MESSAGE( | ||||
| 			_items[i].location() == _locations[i], | ||||
| 			"Location mismatch for assembly item " + to_string(i) + ". Found: " + | ||||
| 					(_items[i].location().sourceName ? *_items[i].location().sourceName + ":" : "(null source name)") + | ||||
| 					to_string(_items[i].location().start) + "-" + | ||||
| 					to_string(_items[i].location().end) + ", expected: " + | ||||
| 					(_locations[i].sourceName ? *_locations[i].sourceName + ":" : "(null source name)") + | ||||
| 					to_string(_locations[i].start) + "-" + | ||||
| 					to_string(_locations[i].end)); | ||||
| 		if (_items[i].location() != _locations[i]) | ||||
| 		{ | ||||
| 			BOOST_CHECK_MESSAGE(false, "Location mismatch for item " + to_string(i) + ". Found the following locations:"); | ||||
| 			printAssemblyLocations(_items); | ||||
| 			return; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| } // end anonymous namespace
 | ||||
| 
 | ||||
| BOOST_AUTO_TEST_SUITE(Assembly) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user