Handle not unique operators for user-defined type.

This commit is contained in:
wechman
2022-09-28 12:10:27 +02:00
parent 8272da0aea
commit 8307b670cb
4 changed files with 35 additions and 16 deletions
+4 -4
View File
@@ -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.");
}
+2 -1
View File
@@ -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.