From 09d35401908979eda874814a0da6da2265577f31 Mon Sep 17 00:00:00 2001 From: Martin Sajti Date: Wed, 7 May 2025 11:45:11 +0200 Subject: [PATCH] Fix overloading most specific type Signed-off-by: Martin Sajti --- ets2panda/checker/ets/function.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ets2panda/checker/ets/function.cpp b/ets2panda/checker/ets/function.cpp index 2e5149daf..9ad18a0a1 100644 --- a/ets2panda/checker/ets/function.cpp +++ b/ets2panda/checker/ets/function.cpp @@ -875,10 +875,17 @@ void ETSChecker::SearchAmongMostSpecificTypes(Type *&mostSpecificType, Signature } if (isClassType && sigType->AsETSObjectType()->IsBoxedPrimitive() && mostSpecificType->IsETSObjectType() && mostSpecificType->AsETSObjectType()->IsBoxedPrimitive()) { + // NOTE (smartin): when a param with type int is available, make it more specific than other primitive + // types. The making of correct rules for this is still in progress in spec, so this is a temp solution. + if (mostSpecificType->AsETSObjectType()->HasObjectFlag(ETSObjectFlags::BUILTIN_INT)) { + return; + } + TypeRelationFlag flags = TypeRelationFlag::NO_THROW | TypeRelationFlag::UNBOXING | TypeRelationFlag::BOXING | TypeRelationFlag::WIDENING; Relation()->SetFlags(flags); - if (Relation()->IsLegalBoxedPrimitiveConversion(mostSpecificType, sigType)) { + if (sigType->AsETSObjectType()->HasObjectFlag(ETSObjectFlags::BUILTIN_INT) || + Relation()->IsLegalBoxedPrimitiveConversion(mostSpecificType, sigType)) { Relation()->Result(true); mostSpecificType = sigType; prevSig = sig; -- Gitee