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

Method AddDependency

IDEHelper/Compiler/BfModule.cpp:3737–3948  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3735}
3736
3737void BfModule::AddDependency(BfType* usedType, BfType* userType, BfDependencyMap::DependencyFlags flags, BfDepContext* depContext)
3738{
3739 if (usedType == userType)
3740 return;
3741
3742 if (((flags & BfDependencyMap::DependencyFlag_ConstValue) != 0) && (mContext->mCurTypeState != NULL) && (mContext->mCurTypeState->mResolveKind == BfTypeState::ResolveKind_FieldType))
3743 {
3744 // This can be an `int32[UsedType.cVal]` type reference
3745 flags = (BfDependencyMap::DependencyFlags)(flags | BfDependencyMap::DependencyFlag_ValueTypeSizeDep);
3746 }
3747
3748 if ((mCurMethodInstance != NULL) && (mCurMethodInstance->mIsAutocompleteMethod))
3749 {
3750 if (userType->IsMethodRef())
3751 {
3752 // We cannot short-circuit dependencies because of method group ref counting
3753 }
3754 else
3755 return;
3756 }
3757
3758 if (usedType->IsSpecializedByAutoCompleteMethod())
3759 {
3760 if ((flags & (BfDependencyMap::DependencyFlag_TypeGenericArg | BfDependencyMap::DependencyFlag_MethodGenericArg |
3761 BfDependencyMap::DependencyFlag_OuterType | BfDependencyMap::DependencyFlag_DerivedFrom)) == 0)
3762 return;
3763 }
3764
3765// if (usedType->IsBoxed())
3766// {
3767// NOP;
3768// auto underlyingType = usedType->GetUnderlyingType()->ToTypeInstance();
3769// if ((underlyingType != NULL) && (underlyingType->IsInstanceOf(mCompiler->mSizedArrayTypeDef)))
3770// {
3771// BfLogSysM("AddDependency UsedType:%p UserType:%p Method:%p\n", usedType, userType, mCurMethodInstance);
3772// }
3773// }
3774
3775 // TODO: It seems this was bogus - it kept the root array from being marked as a dependency (for example)
3776// BfType* origUsedType = usedType;
3777 bool isDataAccess = ((flags & (BfDependencyMap::DependencyFlag_ReadFields | BfDependencyMap::DependencyFlag_LocalUsage | BfDependencyMap::DependencyFlag_Allocates)) != 0);
3778// if (isDataAccess)
3779// {
3780// while (true)
3781// {
3782// if ((usedType->IsPointer()) || (usedType->IsRef()) || (usedType->IsSizedArray()))
3783// usedType = usedType->GetUnderlyingType();
3784// else if (usedType->IsArray())
3785// {
3786// usedType = ((BfTypeInstance*)usedType)->mGenericTypeInfo->mTypeGenericArguments[0];
3787// }
3788// else
3789// break;
3790// }
3791// }
3792
3793 if ((mCurMethodState != NULL) && (mCurMethodState->mHotDataReferenceBuilder != NULL) && (usedType != mCurTypeInstance) && (isDataAccess))
3794 {

Callers 15

PopulateReifiedMethod · 0.80
GetCallTableIdxMethod · 0.80
AddTypeSigRebuildMethod · 0.80
CallMethod · 0.80
QueueMethodMethod · 0.80
ResolveArgTypedValueMethod · 0.80
TryDevirtualizeCallMethod · 0.80
LoadFieldMethod · 0.80
CreateCallMethod · 0.80
AddCallDependenciesMethod · 0.80

Calls 15

GetLatestVersionMethod · 0.80
MarkAsReferencedMethod · 0.80
AddUsedByMethod · 0.80
IsMethodRefMethod · 0.45
IsValuelessTypeMethod · 0.45
IsPrimitiveTypeMethod · 0.45
ToTypeInstanceMethod · 0.45
IsCompositeMethod · 0.45
AddMethod · 0.45
GetModuleMethod · 0.45
IsFunctionMethod · 0.45

Tested by

no test coverage detected