mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Use a secondary location for function override errors
This commit is contained in:
		
							parent
							
								
									a6949851f3
								
							
						
					
					
						commit
						d4997dd9a3
					
				| @ -306,39 +306,30 @@ void TypeChecker::checkFunctionOverride(FunctionDefinition const& function, Func | ||||
| 		return; | ||||
| 
 | ||||
| 	if (function.visibility() != super.visibility()) | ||||
| 		m_errorReporter.typeError( | ||||
| 			function.location(), | ||||
| 			"Overriding function visibility differs from " + super.fullyQualifiedName() + "." | ||||
| 		); | ||||
| 		overrideError(function, super, "Overriding function visibility differs."); | ||||
| 
 | ||||
| 	if (function.isDeclaredConst() && !super.isDeclaredConst()) | ||||
| 		m_errorReporter.typeError( | ||||
| 			function.location(), | ||||
| 			"Overriding function should not be declared constant." | ||||
| 		); | ||||
| 		overrideError(function, super, "Overriding function should not be declared constant."); | ||||
| 
 | ||||
| 	if (!function.isDeclaredConst() && super.isDeclaredConst()) | ||||
| 		m_errorReporter.typeError( | ||||
| 			function.location(), | ||||
| 			"Overriding function should be declared constant." | ||||
| 		); | ||||
| 		overrideError(function, super, "Overriding function should be declared constant."); | ||||
| 
 | ||||
| 	if (function.isPayable() && !super.isPayable()) | ||||
| 		m_errorReporter.typeError( | ||||
| 			function.location(), | ||||
| 			"Overriding function should not be declared payable." | ||||
| 		); | ||||
| 		overrideError(function, super, "Overriding function should not be declared payable."); | ||||
| 
 | ||||
| 	if (!function.isPayable() && super.isPayable()) | ||||
| 		m_errorReporter.typeError( | ||||
| 			function.location(), | ||||
| 			"Overriding function should be declared payable." | ||||
| 		); | ||||
| 		overrideError(function, super, "Overriding function should be declared payable."); | ||||
| 
 | ||||
| 	if (functionType != superType) | ||||
| 		overrideError(function, super, "Overriding function return types differ."); | ||||
| } | ||||
| 
 | ||||
| void TypeChecker::overrideError(FunctionDefinition const& function, FunctionDefinition const& super, string message) | ||||
| { | ||||
| 	m_errorReporter.typeError( | ||||
| 		function.location(), | ||||
| 			"Overriding function return types differ from " + super.fullyQualifiedName() + "." | ||||
| 		SecondarySourceLocation().append("Overriden function is here:", super.location()), | ||||
| 		message | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -64,6 +64,7 @@ private: | ||||
| 	void checkContractIllegalOverrides(ContractDefinition const& _contract); | ||||
| 	/// Reports a type error with an appropiate message if overriden function signature differs.
 | ||||
| 	void checkFunctionOverride(FunctionDefinition const& function, FunctionDefinition const& super); | ||||
| 	void overrideError(FunctionDefinition const& function, FunctionDefinition const& super, std::string message); | ||||
| 	void checkContractAbstractFunctions(ContractDefinition const& _contract); | ||||
| 	void checkContractAbstractConstructors(ContractDefinition const& _contract); | ||||
| 	/// Checks that different functions with external visibility end up having different
 | ||||
|  | ||||
| @ -75,8 +75,8 @@ public: | ||||
| 
 | ||||
| 	void typeError( | ||||
| 		SourceLocation const& _location, | ||||
| 		SecondarySourceLocation const& _secondaryLocation, | ||||
| 		std::string const& _description | ||||
| 		SecondarySourceLocation const& _secondaryLocation = SecondarySourceLocation(), | ||||
| 		std::string const& _description = std::string() | ||||
| 	); | ||||
| 
 | ||||
| 	void typeError(SourceLocation const& _location, std::string const& _description); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user