Lines Matching defs:signatures

590 Signature *ETSChecker::CollectParameterlessConstructor(ArenaVector<Signature *> &signatures,
596 for (auto *sig : signatures) {
605 if (signatures.size() == 1) {
659 ArenaVector<Signature *> ETSChecker::CollectSignatures(ArenaVector<Signature *> &signatures,
669 for (auto *sig : signatures) {
690 if (signatures.size() == 1) {
730 Signature *ETSChecker::ValidateSignatures(ArenaVector<Signature *> &signatures,
736 auto compatibleSignatures = CollectSignatures(signatures, typeArguments, arguments, pos, resolveFlags);
741 if ((resolveFlags & TypeRelationFlag::NO_THROW) == 0 && !arguments.empty() && !signatures.empty()) {
744 if (signatures[0]->Function()->IsConstructor()) {
745 ss << util::Helpers::GetClassDefiniton(signatures[0]->Function())->PrivateId().Mutf8();
747 ss << signatures[0]->Function()->Id()->Name().Mutf8();
778 Signature *ETSChecker::FindMostSpecificSignature(const ArenaVector<Signature *> &signatures,
784 for (auto *sig : signatures) {
815 static void InitMostSpecificType(const ArenaVector<Signature *> &signatures, [[maybe_unused]] Type *&mostSpecificType,
818 for (auto *sig : signatures) {
858 const std::vector<bool> &argTypeInferenceRequired, size_t paramCount, ArenaVector<Signature *> &signatures,
861 // Collect which signatures are most specific for each parameter.
869 for (auto *sig : signatures) {
875 Type *mostSpecificType = signatures.front()->Params().at(i)->TsType();
876 Signature *prevSig = signatures.front();
878 InitMostSpecificType(signatures, mostSpecificType, prevSig, i);
879 for (auto *sig : signatures) {
883 for (auto *sig : signatures) {
888 for (auto *sig : signatures) {
898 Signature *ETSChecker::ChooseMostSpecificSignature(ArenaVector<Signature *> &signatures,
902 ASSERT(signatures.empty() == false);
904 if (signatures.size() == 1) {
905 return signatures.front();
908 size_t paramCount = signatures.front()->Params().size();
912 // Multiple signatures with zero parameter because of inheritance.
915 auto zeroParamSignature = std::find_if(signatures.begin(), signatures.end(),
918 if (zeroParamSignature != signatures.end()) {
921 // If there are multiple rest parameter signatures with different argument types, throw error
922 if (signatures.size() > 1 && std::any_of(signatures.begin(), signatures.end(), [signatures](const auto *param) {
923 return param->RestVar()->TsType() != signatures.front()->RestVar()->TsType();
925 ThrowTypeError({"Call to `", signatures.front()->Function()->Id()->Name(), "` is ambiguous "}, pos);
928 auto restParamSignature = std::find_if(signatures.begin(), signatures.end(),
934 GetSuitableSignaturesForParameter(argTypeInferenceRequired, paramCount, signatures, pos, argumentsSize);
936 Signature *mostSpecificSignature = FindMostSpecificSignature(signatures, bestSignaturesForParameter, paramCount);
941 Signature *ETSChecker::ResolveCallExpressionAndTrailingLambda(ArenaVector<Signature *> &signatures,
948 for (auto it : signatures) {
956 sig = ValidateSignatures(signatures, callExpr->TypeParams(), callExpr->Arguments(), pos, "call", reportFlag);
962 sig = ValidateSignatures(signatures, callExpr->TypeParams(), arguments, pos, "call",
971 sig = ValidateSignatures(signatures, callExpr->TypeParams(), callExpr->Arguments(), pos, "call", reportFlag);