• Home
  • Raw
  • Download

Lines Matching full:signature

186 bool ETSChecker::ProcessUntypedParameter(ir::AstNode *declNode, size_t paramIndex, Signature *param…  in ProcessUntypedParameter()
187 Signature *argSig, Substitution *substitution) in ProcessUntypedParameter()
355 Signature *ETSChecker::ValidateParameterlessConstructor(Signature *signature, const lexer::SourcePo… in ValidateParameterlessConstructor() argument
358 if (signature->MinArgCount() != 0) { in ValidateParameterlessConstructor()
360 LogError(diagnostic::NO_SUCH_PARAMLESS_CTOR_2, {signature->MinArgCount()}, pos); in ValidateParameterlessConstructor()
364 return signature; in ValidateParameterlessConstructor()
368 bool ETSChecker::CheckOptionalLambdaFunction(ir::Expression *argument, Signature *substitutedSig, s… in CheckOptionalLambdaFunction()
411 bool ETSChecker::ValidateSignatureRequiredParams(Signature *substitutedSig, in ValidateSignatureRequiredParams()
480 bool ETSChecker::ValidateSignatureInvocationContext(Signature *substitutedSig, ir::Expression *argu… in ValidateSignatureInvocationContext()
496 bool ETSChecker::IsValidRestArgument(ir::Expression *const argument, Signature *const substitutedSi… in IsValidRestArgument()
523 bool ETSChecker::ValidateSignatureRestParams(Signature *substitutedSig, const ArenaVector<ir::Expre… in ValidateSignatureRestParams()
553 // backing out of check that results in a signature mismatch would be difficult in ValidateSignatureRestParams()
554 // so only attempt it if there is only one candidate signature in ValidateSignatureRestParams()
575 Signature *ETSChecker::ValidateSignature( in ValidateSignature()
576 std::tuple<Signature *, const ir::TSTypeParameterInstantiation *, TypeRelationFlag> info, in ValidateSignature() argument
583 …// So handle substitution arguments only in the case of unique function or collecting signature ph… in ValidateSignature()
584 Signature *const signature = in ValidateSignature() local
586 if (signature == nullptr) { in ValidateSignature()
591 auto const hasRestParameter = signature->RestVar() != nullptr; in ValidateSignature()
594 if ((flags & TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA) != 0 && !signature->Params().empty() && in ValidateSignature()
595signature->Params().back()->Declaration()->Node()->AsETSParameterExpression()->IsOptional()) { in ValidateSignature()
599 …if (compareCount < signature->MinArgCount() || (argCount > signature->ArgCount() && !hasRestParame… in ValidateSignature()
601 LogError(diagnostic::PARAM_COUNT_MISMATCH, {signature->MinArgCount(), argCount}, pos); in ValidateSignature()
606 …if (argCount > signature->ArgCount() && hasRestParameter && (flags & TypeRelationFlag::IGNORE_REST… in ValidateSignature()
610 auto count = std::min(signature->ArgCount(), argCount); in ValidateSignature()
613 …if (!ValidateSignatureRequiredParams(signature, arguments, flags, argTypeInferenceRequired, report… in ValidateSignature()
618 …if (!hasRestParameter || (count >= argCount && !signature->RestVar()->TsType()->IsETSTupleType()))… in ValidateSignature()
619 return signature; in ValidateSignature()
621 if (!ValidateSignatureRestParams(signature, arguments, flags, reportError, unique)) { in ValidateSignature()
625 return signature; in ValidateSignature()
628 Signature *ETSChecker::CollectParameterlessConstructor(ArenaVector<Signature *> &signatures, in CollectParameterlessConstructor()
642 bool IsSignatureAccessible(Signature *sig, ETSObjectType *containingClass, TypeRelation *relation) in IsSignatureAccessible()
644 …// NOTE(vivienvoros): this check can be removed if signature is implicitly declared as public acco… in IsSignatureAccessible()
682 ArenaVector<Signature *> ETSChecker::CollectSignatures(ArenaVector<Signature *> &signatures, in CollectSignatures()
687 ArenaVector<Signature *> compatibleSignatures(ProgramAllocator()->Adapter()); in CollectSignatures()
689 Signature *notVisibleSignature = nullptr; in CollectSignatures()
712 // If there's only one signature, we don't need special checks for boxing/unboxing/widening. in CollectSignatures()
734 static void ClearUnboxingFlags(TypeRelation *relation, Signature *sig, ir::Expression *argument, si… in ClearUnboxingFlags()
738 // unnecessary for the most specific signature. in ClearUnboxingFlags()
748 static void UpdateArrayArgsAndUnboxingFlags(ETSChecker *checker, Signature *sig, in UpdateArrayArgsAndUnboxingFlags()
762 Signature *ETSChecker::GetMostSpecificSignature(ArenaVector<Signature *> &compatibleSignatures, in GetMostSpecificSignature()
767 Signature *mostSpecificSignature = in GetMostSpecificSignature()
780 // revalidate signature for arrays in GetMostSpecificSignature()
786 void ETSChecker::ThrowSignatureMismatch(ArenaVector<Signature *> &signatures, in ThrowSignatureMismatch()
827 Signature *ETSChecker::ValidateSignatures(ArenaVector<Signature *> &signatures, in ValidateSignatures()
847 Signature *ETSChecker::FindMostSpecificSignature(const ArenaVector<Signature *> &signatures, in FindMostSpecificSignature()
848 … const ArenaMultiMap<size_t, Signature *> &bestSignaturesForParameter, in FindMostSpecificSignature()
851 auto isMostSpecificForAllParams = [&](const Signature *sig) { in FindMostSpecificSignature()
861 Signature *result = nullptr; in FindMostSpecificSignature()
899 static Type *GetParatmeterTypeOrRestAtIdx(checker::ETSChecker *checker, Signature *sig, const size_… in GetParatmeterTypeOrRestAtIdx()
905 static void InitMostSpecificType(checker::ETSChecker *checker, const ArenaVector<Signature *> &sign… in InitMostSpecificType()
906 … [[maybe_unused]] Type *&mostSpecificType, [[maybe_unused]] Signature *&prevSig, in InitMostSpecificType()
919 void ETSChecker::SearchAmongMostSpecificTypes(Type *&mostSpecificType, Signature *&prevSig, in SearchAmongMostSpecificTypes()
920 … std::tuple<const lexer::SourcePosition &, size_t, Signature *> info, in SearchAmongMostSpecificTypes()
943 size_t paramIdx, ArenaVector<Signature *> &signatures, in CollectSuitableSignaturesForTypeInference()
944 …ArenaMultiMap<size_t, Signature *> &bestSignaturesForParameter, const ArenaVector<ir::Expression *… in CollectSuitableSignaturesForTypeInference()
946 …// For lambda parameters, attempt to obtain the most matching signature through the number of lamb… in CollectSuitableSignaturesForTypeInference()
989 ArenaMultiMap<size_t, Signature *> ETSChecker::GetSuitableSignaturesForParameter( in GetSuitableSignaturesForParameter()
990 …const std::vector<bool> &argTypeInferenceRequired, size_t paramCount, ArenaVector<Signature *> &si… in GetSuitableSignaturesForParameter()
994 …ArenaMultiMap<size_t /* parameter index */, Signature *> bestSignaturesForParameter(ProgramAllocat… in GetSuitableSignaturesForParameter()
1012 Signature *prevSig = signatures.front(); in GetSuitableSignaturesForParameter()
1032 Signature *ETSChecker::ChooseMostSpecificSignature(ArenaVector<Signature *> &signatures, in ChooseMostSpecificSignature()
1044 [](Signature *sig1, Signature *sig2) { return sig1->ArgCount() > sig2->ArgCount(); }); in ChooseMostSpecificSignature()
1054 … [](auto *signature) { return signature->RestVar() == nullptr; }); in ChooseMostSpecificSignature() argument
1055 // If there is a zero parameter signature, return that in ChooseMostSpecificSignature()
1070 // Else return the signature with the rest parameter in ChooseMostSpecificSignature()
1072 … [](auto *signature) { return signature->RestVar() != nullptr; }); in ChooseMostSpecificSignature() argument
1076 ArenaMultiMap<size_t /* parameter index */, Signature *> bestSignaturesForParameter = in ChooseMostSpecificSignature()
1078 // Find the signature that are most specific for all parameters. in ChooseMostSpecificSignature()
1079Signature *mostSpecificSignature = FindMostSpecificSignature(signatures, bestSignaturesForParamete… in ChooseMostSpecificSignature()
1084 static bool IsLastParameterLambdaWithReceiver(Signature *sig) in IsLastParameterLambdaWithReceiver()
1093 Signature *ETSChecker::ResolvePotentialTrailingLambdaWithReceiver(ir::CallExpression *callExpr, in ResolvePotentialTrailingLambdaWithReceiver()
1094 … ArenaVector<Signature *> const &signatures, in ResolvePotentialTrailingLambdaWithReceiver()
1098 ArenaVector<Signature *> normalSig(ProgramAllocator()->Adapter()); in ResolvePotentialTrailingLambdaWithReceiver()
1099 ArenaVector<Signature *> sigContainLambdaWithReceiverAsParam(ProgramAllocator()->Adapter()); in ResolvePotentialTrailingLambdaWithReceiver()
1100 Signature *signature = nullptr; in ResolvePotentialTrailingLambdaWithReceiver() local
1117signature = ValidateSignatures(sigContainLambdaWithReceiverAsParam, callExpr->TypeParams(), argume… in ResolvePotentialTrailingLambdaWithReceiver()
1120 if (signature != nullptr) { in ResolvePotentialTrailingLambdaWithReceiver()
1121 return signature; in ResolvePotentialTrailingLambdaWithReceiver()
1131 …ETSChecker::UpdateDeclarationFromSignature(ir::CallExpression *expr, checker::Signature *signature) in UpdateDeclarationFromSignature() argument
1133 if (signature == nullptr) { in UpdateDeclarationFromSignature()
1147 !signature->HasFunction() || signature->Function()->IsDynamic()) { in UpdateDeclarationFromSignature()
1151 auto sigName = signature->Function()->Id()->Name(); in UpdateDeclarationFromSignature()
1156 ir::AstNode *declNode = signature->Function(); in UpdateDeclarationFromSignature()
1167 Signature *ETSChecker::ResolveCallExpressionAndTrailingLambda(ArenaVector<Signature *> &signatures, in ResolveCallExpressionAndTrailingLambda()
1204 Signature *ETSChecker::ResolveConstructExpression(ETSObjectType *type, const ArenaVector<ir::Expres… in ResolveConstructExpression()
1215 void ETSChecker::CheckObjectLiteralArguments(Signature *signature, ArenaVector<ir::Expression *> co… in CheckObjectLiteralArguments() argument
1223 if (index >= signature->Params().size()) { in CheckObjectLiteralArguments()
1224 ES2PANDA_ASSERT(signature->RestVar()); in CheckObjectLiteralArguments()
1226 tp = GetElementTypeOfArray(signature->RestVar()->TsType()); in CheckObjectLiteralArguments()
1229 tp = GetNonNullishType(signature->Params()[index]->TsType()); in CheckObjectLiteralArguments()
1249 if (currentFunc->Function()->Signature() == nullptr) { in CollectOverload()
1260 auto overloadSig = currentFunc->Function()->Signature(); in CollectOverload()
1269 … ldInfo.minArg = std::min(ldInfo.minArg, currentFunc->Function()->Signature()->MinArgCount()); in CollectOverload()
1270 ldInfo.maxArg = std::max(ldInfo.maxArg, currentFunc->Function()->Signature()->ArgCount()); in CollectOverload()
1271 ldInfo.hasRestVar |= (currentFunc->Function()->Signature()->RestVar() != nullptr); in CollectOverload()
1272 ldInfo.returnVoid |= currentFunc->Function()->Signature()->ReturnType()->IsETSVoidType(); in CollectOverload()
1297 if (method->Function()->Signature() == nullptr) { in BuildMethodSignature()
1348 Signature *ETSChecker::ComposeSignature(ir::ScriptFunction *func, SignatureInfo *signatureInfo, Typ… in ComposeSignature()
1351 auto *signature = CreateSignature(signatureInfo, returnType, func); in ComposeSignature() local
1352 if (signature == nullptr) { // #23134 in ComposeSignature()
1356 signature->SetOwner(Context().ContainingClass()); in ComposeSignature()
1357 signature->SetOwnerVar(nameVar); in ComposeSignature()
1361 signature->AddSignatureFlag(SignatureFlags::NEED_RETURN_TYPE); in ComposeSignature()
1365 // #22951: the original signature retains the arbitrary this type in ComposeSignature()
1367 signature->AddSignatureFlag(SignatureFlags::THIS_RETURN_TYPE); in ComposeSignature()
1370 if (signature->Owner() != nullptr && signature->Owner()->GetDeclNode()->IsFinal()) { in ComposeSignature()
1371 signature->AddSignatureFlag(SignatureFlags::FINAL); in ComposeSignature()
1373 return signature; in ComposeSignature()
1517 auto *signature = ComposeSignature(func, signatureInfo, returnType, nameVar); in BuildFunctionSignature() local
1518 if (signature == nullptr) { // #23134 in BuildFunctionSignature()
1523 func->SetSignature(signature); in BuildFunctionSignature()
1526 signature->AddSignatureFlag(SignatureFlags::CONSTRUCT); in BuildFunctionSignature()
1528 signature->AddSignatureFlag(SignatureFlags::CALL); in BuildFunctionSignature()
1550 …funcType = CreateETSDynamicMethodType(nameVar->Name(), {{func->Signature()}, ProgramAllocator()->A… in BuildMethodType()
1553 …funcType = CreateETSMethodType(nameVar->Name(), {{func->Signature()}, ProgramAllocator()->Adapter(… in BuildMethodType()
1559 Signature *ETSChecker::CheckEveryAbstractSignatureIsOverridden(ETSFunctionType *target, ETSFunction… in CheckEveryAbstractSignatureIsOverridden()
1585 bool ETSChecker::IsOverridableIn(Signature *signature) in IsOverridableIn() argument
1587 if (signature->HasSignatureFlag(SignatureFlags::PRIVATE)) { in IsOverridableIn()
1592 if (signature->HasSignatureFlag(SignatureFlags::PUBLIC | SignatureFlags::INTERNAL)) { in IsOverridableIn()
1596 return signature->HasSignatureFlag(SignatureFlags::PROTECTED); in IsOverridableIn()
1599 bool ETSChecker::IsMethodOverridesOther(Signature *base, Signature *derived) in IsMethodOverridesOther()
1629 OverrideErrorCode ETSChecker::CheckOverride(Signature *signature, Signature *other) in CheckOverride() argument
1632 ES2PANDA_ASSERT(signature->HasSignatureFlag(SignatureFlags::STATIC)); in CheckOverride()
1640 auto *ownerNode = signature->Owner()->GetDeclNode(); in CheckOverride()
1643 … superNode->IsClassDefinition() && signature->Owner()->HasObjectFlag(ETSObjectFlags::CLASS) && in CheckOverride()
1645 if (bothRealClasses && signature->HasSignatureFlag(SignatureFlags::ABSTRACT) && in CheckOverride()
1651 if (!IsReturnTypeSubstitutable(signature, other)) { in CheckOverride()
1657 if (!signature->ReturnType()->IsETSReferenceType()) { in CheckOverride()
1662 if (signature->ProtectionFlag() > other->ProtectionFlag()) { in CheckOverride()
1665 if (signature->HasProtectionFlagInternal() != other->HasProtectionFlagInternal()) { in CheckOverride()
1672 Signature *ETSChecker::AdjustForTypeParameters(Signature *source, Signature *target) in AdjustForTypeParameters()
1692 void ETSChecker::ReportOverrideError(Signature *signature, Signature *overriddenSignature, in ReportOverrideError() argument
1731 {signature->Function()->Id()->Name(), signature, signature->Owner(), in ReportOverrideError()
1733 signature->Function()->Start()); in ReportOverrideError()
1754 bool ETSChecker::CheckOverride(Signature *signature, ETSObjectType *site) in CheckOverride() argument
1758 auto *target = site->GetProperty(signature->Function()->Id()->Name(), flags); in CheckOverride()
1767 if (!CheckTypeParameterConstraints(signature->TypeParams(), it->TypeParams(), Relation())) { in CheckOverride()
1771 auto *itSubst = AdjustForTypeParameters(signature, it); in CheckOverride()
1778 if ((itSubst->Function()->IsSetter() && !signature->Function()->IsSetter()) || in CheckOverride()
1779 (itSubst->Function()->IsGetter() && !signature->Function()->IsGetter())) { in CheckOverride()
1784 if (!IsMethodOverridesOther(itSubst, signature)) { in CheckOverride()
1789 ReportOverrideError(signature, it, OverrideErrorCode::INCOMPATIBLE_TYPEPARAM); in CheckOverride()
1793 if (auto err = CheckOverride(signature, itSubst); err != OverrideErrorCode::NO_ERROR) { in CheckOverride()
1794 ReportOverrideError(signature, it, err); in CheckOverride()
1804 void ETSChecker::CheckOverride(Signature *signature) in CheckOverride() argument
1806 ES2PANDA_ASSERT(signature != nullptr); in CheckOverride()
1807 auto *owner = signature->Owner(); in CheckOverride()
1816 isOverriding |= CheckInterfaceOverride(this, interface, signature); in CheckOverride()
1821 isOverriding |= CheckOverride(signature, iter); in CheckOverride()
1824 isOverriding |= CheckInterfaceOverride(this, interface, signature); in CheckOverride()
1829 lexer::SourcePosition ownerPos = signature->Owner()->GetDeclNode()->Start(); in CheckOverride()
1830 lexer::SourcePosition signaturePos = signature->Function()->Start(); in CheckOverride()
1832 if (!isOverriding && signature->Function()->IsOverride()) { in CheckOverride()
1834 {signature->Function()->Id()->Name(), signature, signature->Owner()}, pos); in CheckOverride()
1838 Signature *ETSChecker::GetSignatureFromMethodDefinition(const ir::MethodDefinition *methodDef) in GetSignatureFromMethodDefinition()
1853 bool ETSChecker::NeedToVerifySignatureVisibility(Signature *signature, const lexer::SourcePosition … in NeedToVerifySignatureVisibility() argument
1855 if (signature == nullptr) { in NeedToVerifySignatureVisibility()
1861 (signature->HasSignatureFlag(SignatureFlags::PRIVATE) || in NeedToVerifySignatureVisibility()
1862 signature->HasSignatureFlag(SignatureFlags::PROTECTED)); in NeedToVerifySignatureVisibility()
1865 void ETSChecker::ValidateSignatureAccessibility(ETSObjectType *callee, Signature *signature, in ValidateSignatureAccessibility() argument
1869 if (!NeedToVerifySignatureVisibility(signature, pos)) { in ValidateSignatureAccessibility()
1874 bool isContainingSignatureInherited = containingClass->IsSignatureInherited(signature); in ValidateSignatureAccessibility()
1886 bool isSignatureInherited = callee->IsSignatureInherited(signature); in ValidateSignatureAccessibility()
1888 if (!signature->HasSignatureFlag(SignatureFlags::PRIVATE) && in ValidateSignatureAccessibility()
1889 …((signature->HasSignatureFlag(SignatureFlags::PROTECTED) && containingClass->IsDescendantOf(callee… in ValidateSignatureAccessibility()
1896 LogError(diagnostic::SIG_INVISIBLE, {signature->Function()->Id()->Name(), signature}, pos); in ValidateSignatureAccessibility()
1959 bool ETSChecker::AreOverrideCompatible(Signature *const s1, Signature *const s2) in AreOverrideCompatible()
1961 // Two functions, methods or constructors M and N have the same signature if in AreOverrideCompatible()
1973 bool ETSChecker::IsReturnTypeSubstitutable(Signature *const s1, Signature *const s2) in IsReturnTypeSubstitutable()
1984 …: void type leaks into type arguments, so we have to check the original signature if the return ty… in IsReturnTypeSubstitutable()
1986 auto const hasPrimitiveReturnType = [](Signature *s) { in IsReturnTypeSubstitutable()
1987 bool origIsRef = s->Function()->Signature()->ReturnType()->IsETSReferenceType(); in IsReturnTypeSubstitutable()
1996 auto const hasThisReturnType = [](Signature *s) { in IsReturnTypeSubstitutable()
2163 void ETSChecker::TransformTraillingLambda(ir::CallExpression *callExpr, Signature *sig) in TransformTraillingLambda()
2311 bool ETSChecker::CmpAssemblerTypesWithRank(Signature const *const sig1, Signature const *const sig2… in CmpAssemblerTypesWithRank()
2326 bool ETSChecker::HasSameAssemblySignature(Signature const *const sig1, Signature const *const sig2)… in HasSameAssemblySignature()