mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Handle not unique operators for user-defined type.
This commit is contained in:
@@ -384,9 +384,8 @@ vector<UsingForDirective const*> usingForDirectivesForType(Type const& _type, AS
|
||||
|
||||
}
|
||||
|
||||
FunctionDefinition const* Type::userDefinedOperator(Token _token, ASTNode const& _scope, bool _unaryOperation) const
|
||||
FunctionDefinitionResult Type::userDefinedOperator(Token _token, ASTNode const& _scope, bool _unaryOperation) const
|
||||
{
|
||||
// Check if it is a user-defined type.
|
||||
if (!typeDefinition())
|
||||
return nullptr;
|
||||
|
||||
@@ -409,11 +408,12 @@ FunctionDefinition const* Type::userDefinedOperator(Token _token, ASTNode const&
|
||||
seenFunctions.insert(&function);
|
||||
}
|
||||
|
||||
// TODO proper error handling.
|
||||
if (seenFunctions.size() == 1)
|
||||
return *seenFunctions.begin();
|
||||
else if (seenFunctions.size() == 0)
|
||||
return FunctionDefinitionResult::err("A user-defined operator not found.");
|
||||
else
|
||||
return nullptr;
|
||||
return FunctionDefinitionResult::err("A user-defined operator not unique.");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ using TypePointers = std::vector<Type const*>;
|
||||
using rational = boost::rational<bigint>;
|
||||
using TypeResult = util::Result<Type const*>;
|
||||
using BoolResult = util::Result<bool>;
|
||||
using FunctionDefinitionResult = util::Result<FunctionDefinition const*>;
|
||||
|
||||
}
|
||||
|
||||
@@ -377,7 +378,7 @@ public:
|
||||
/// Clears all internally cached values (if any).
|
||||
virtual void clearCache() const;
|
||||
|
||||
FunctionDefinition const* userDefinedOperator(Token _token, ASTNode const& _scope, bool _unaryOperation) const;
|
||||
FunctionDefinitionResult userDefinedOperator(Token _token, ASTNode const& _scope, bool _unaryOperation) const;
|
||||
|
||||
private:
|
||||
/// @returns a member list containing all members added to this type by `using for` directives.
|
||||
|
||||
Reference in New Issue
Block a user