MCPcopy Create free account
hub / github.com/beefytech/Beef / ValidateTypeWildcard

Method ValidateTypeWildcard

IDEHelper/Compiler/BfModuleTypeUtils.cpp:10828–10938  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10826}
10827
10828bool BfModule::ValidateTypeWildcard(BfAstNode* typeRef, bool isAttributeRef)
10829{
10830 if (typeRef == NULL)
10831 return false;
10832
10833 if (auto wildcardTypeRef = BfNodeDynCast<BfWildcardTypeReference>(typeRef))
10834 return true;
10835
10836 StringT<128> nameStr;
10837 typeRef->ToString(nameStr);
10838 if (isAttributeRef)
10839 nameStr.Append("Attribute");
10840 auto typeDef = mSystem->FindTypeDef(nameStr, (BfProject*)NULL);
10841 if ((typeDef != NULL) && (typeDef->mGenericParamDefs.IsEmpty()))
10842 return true;
10843
10844 if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(typeRef))
10845 {
10846 if (qualifiedTypeRef->mLeft == NULL)
10847 return false;
10848
10849 if (auto wildcardTypeRef = BfNodeDynCast<BfWildcardTypeReference>(qualifiedTypeRef->mRight))
10850 {
10851 StringT<128> leftNameStr;
10852
10853 BfType* leftType = NULL;
10854 BfAtomCompositeT<16> leftComposite;
10855
10856 qualifiedTypeRef->mLeft->ToString(leftNameStr);
10857 if (!mSystem->ParseAtomComposite(leftNameStr, leftComposite))
10858 return false;
10859
10860 if (mSystem->ContainsNamespace(leftComposite, NULL))
10861 return true;
10862
10863 return ValidateTypeWildcard(qualifiedTypeRef->mLeft, false);
10864 }
10865 }
10866
10867 if (!BfNodeIsA<BfGenericInstanceTypeRef>(typeRef))
10868 {
10869 if (auto elementedTypeRef = BfNodeDynCast<BfElementedTypeRef>(typeRef))
10870 {
10871 return ValidateTypeWildcard(elementedTypeRef->mElementType, false);
10872 }
10873 }
10874
10875 BfAstNode* origTypeRef = typeRef;
10876
10877 String name;
10878 String nameEx;
10879 int genericCount = 0;
10880 std::function<bool(BfAstNode*, bool)> _ToString = [&](BfAstNode* typeRef, bool isLast)
10881 {
10882 if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(typeRef))
10883 {
10884 _ToString(qualifiedTypeRef->mLeft, false);
10885 name.Append(".");

Callers 1

Calls 8

AppendMethod · 0.80
ParseAtomCompositeMethod · 0.80
ContainsNamespaceMethod · 0.80
ToStringMethod · 0.45
FindTypeDefMethod · 0.45
IsEmptyMethod · 0.45
TryGetMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected