mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Adapted tests due to more precise Yul source locations.
Also added support for -1 source index, referencing original scanner's source location.
This commit is contained in:
		
							parent
							
								
									132fa46faa
								
							
						
					
					
						commit
						5e4868d5d6
					
				| @ -131,11 +131,13 @@ void Parser::fetchSourceLocationFromComment() | |||||||
| 		m_locationOverride = SourceLocation{}; | 		m_locationOverride = SourceLocation{}; | ||||||
| 		if (!sourceIndex || !start || !end) | 		if (!sourceIndex || !start || !end) | ||||||
| 			m_errorReporter.syntaxError(6367_error, commentLocation, "Invalid value in source location mapping. Could not parse location specification."); | 			m_errorReporter.syntaxError(6367_error, commentLocation, "Invalid value in source location mapping. Could not parse location specification."); | ||||||
| 		else if (!((start < 0 && end < 0) || (start >= 0 && *start <= *end))) | 		else if (!((*start < 0 && *end < 0) || (*start >= 0 && *start <= *end))) | ||||||
| 			m_errorReporter.syntaxError(5798_error, commentLocation, "Invalid value in source location mapping. Start offset larger than end offset."); | 			m_errorReporter.syntaxError(5798_error, commentLocation, "Invalid value in source location mapping. Start offset larger than end offset."); | ||||||
|  | 		else if (sourceIndex == -1 && (0 <= *start && *start <= *end)) // Use source index -1 to indicate original source.
 | ||||||
|  | 			m_locationOverride = SourceLocation{*start, *end, ParserBase::currentLocation().source}; | ||||||
| 		else if (!(sourceIndex >= 0 && m_charStreamMap->count(static_cast<unsigned>(*sourceIndex)))) | 		else if (!(sourceIndex >= 0 && m_charStreamMap->count(static_cast<unsigned>(*sourceIndex)))) | ||||||
| 			m_errorReporter.syntaxError(2674_error, commentLocation, "Invalid source mapping. Source index not defined via @use-src."); | 			m_errorReporter.syntaxError(2674_error, commentLocation, "Invalid source mapping. Source index not defined via @use-src."); | ||||||
| 		else if (sourceIndex >= 0) | 		else | ||||||
| 		{ | 		{ | ||||||
| 			shared_ptr<CharStream> charStream = m_charStreamMap->at(static_cast<unsigned>(*sourceIndex)); | 			shared_ptr<CharStream> charStream = m_charStreamMap->at(static_cast<unsigned>(*sourceIndex)); | ||||||
| 			solAssert(charStream, ""); | 			solAssert(charStream, ""); | ||||||
|  | |||||||
| @ -556,6 +556,28 @@ BOOST_AUTO_TEST_CASE(customSourceLocations_ensure_last_match) | |||||||
| 	CHECK_LOCATION(varDecl.debugData->location, sourceText, 30, 40); | 	CHECK_LOCATION(varDecl.debugData->location, sourceText, 30, 40); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | BOOST_AUTO_TEST_CASE(customSourceLocations_reference_original_sloc) | ||||||
|  | { | ||||||
|  | 	ErrorList errorList; | ||||||
|  | 	ErrorReporter reporter(errorList); | ||||||
|  | 	auto const sourceText = R"( | ||||||
|  | 		/// @src 1:2:3
 | ||||||
|  | 		{ | ||||||
|  | 			/// @src -1:10:20
 | ||||||
|  | 			let x:bool := true | ||||||
|  | 		} | ||||||
|  | 	)"; | ||||||
|  | 	EVMDialectTyped const& dialect = EVMDialectTyped::instance(EVMVersion{}); | ||||||
|  | 	shared_ptr<Block> result = parse(sourceText, dialect, reporter); | ||||||
|  | 	BOOST_REQUIRE(!!result); | ||||||
|  | 	BOOST_REQUIRE(holds_alternative<VariableDeclaration>(result->statements.at(0))); | ||||||
|  | 	VariableDeclaration const& varDecl = get<VariableDeclaration>(result->statements.at(0)); | ||||||
|  | 
 | ||||||
|  | 	// -1 points to original source code, which in this case is `sourceText` (which is also
 | ||||||
|  | 	// available via `0`, that's why the first @src is set to `1` instead.)
 | ||||||
|  | 	CHECK_LOCATION(varDecl.debugData->location, sourceText, 10, 20); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| BOOST_AUTO_TEST_SUITE_END() | BOOST_AUTO_TEST_SUITE_END() | ||||||
| 
 | 
 | ||||||
| } // end namespaces
 | } // end namespaces
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user