From 0900667401415a0914b8a1510543c7c7eaf32e53 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sat, 24 Oct 2026 18:01:36 +0000 Subject: feat(overload): select overloads by return type as well as parameters Co-Authored-By: Claude Opus 5.5 --- lib/CodeGen/Designator.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'lib/CodeGen/Designator.cc') diff --git a/lib/CodeGen/Designator.cc b/lib/CodeGen/Designator.cc index 6737937..d790d27 100644 --- a/lib/CodeGen/Designator.cc +++ b/lib/CodeGen/Designator.cc @@ -96,16 +96,17 @@ bool CodeGen::isRegisteredMethod(const std::string &Class, const PrototypeAST *M } const FuncSig *CodeGen::resolveMethod(const std::string &Class, const std::string &Name, - const std::vector> &Args) { + const std::vector> &Args, + const ResultContext *Context) { const auto *Methods = findMethod(Class, Name); if (!Methods) { reportError("Type %s has no method %s", Class.c_str(), Name.c_str()); return nullptr; } - return resolveCall(Methods->front()->getProto()->getLinkName(), Args); + return resolveCall(Methods->front()->getProto()->getLinkName(), Args, nullptr, Context); } -Value *CodeGen::emitMemberCall(MemberCallExprAST *Call) { +Value *CodeGen::emitMemberCall(MemberCallExprAST *Call, const ResultContext *Context) { SaveAndRestore Location(DiagnosticLine, Call->getLine()); LValueInfo Receiver; if (isObjectLValue(Call->getReceiver())) { @@ -120,14 +121,15 @@ Value *CodeGen::emitMemberCall(MemberCallExprAST *Call) { if (!Receiver.Addr) return nullptr; } return emitMethodCall(Receiver.TypeName, Receiver.Addr, Call->getMethod(), - Call->getArgs(), Call->getLine()); + Call->getArgs(), Call->getLine(), Context); } Value *CodeGen::emitMethodCall(const std::string &Class, Value *Receiver, const std::string &Name, - const std::vector> &ArgExprs, int Line) { + const std::vector> &ArgExprs, int Line, + const ResultContext *Context) { SaveAndRestore Location(DiagnosticLine, Line); - const FuncSig *Sig = resolveMethod(Class, Name, ArgExprs); + const FuncSig *Sig = resolveMethod(Class, Name, ArgExprs, Context); if (!Sig) return nullptr; const PrototypeAST *Method = Sig->Prototype; if (!Method->isPublic() && !sameIdentifier(CurrentClass, Class)) { -- cgit v1.3.1-4-g156e