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

Method GetFieldInitializerValue

IDEHelper/Compiler/BfModule.cpp:4666–4794  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4664}
4665
4666BfTypedValue BfModule::GetFieldInitializerValue(BfFieldInstance* fieldInstance, BfExpression* initializer, BfFieldDef* fieldDef, BfType* fieldType, bool doStore)
4667{
4668 if (fieldDef == NULL)
4669 fieldDef = fieldInstance->GetFieldDef();
4670 if (fieldType == NULL)
4671 fieldType = fieldInstance->GetResolvedType();
4672 if (initializer == NULL)
4673 {
4674 if (fieldDef == NULL)
4675 return BfTypedValue();
4676 initializer = fieldDef->GetInitializer();
4677 }
4678
4679 BfTypedValue staticVarRef;
4680
4681 BfTypedValue result;
4682 if (initializer == NULL)
4683 {
4684 result = GetDefaultTypedValue(fieldInstance->mResolvedType);
4685 }
4686 else
4687 {
4688 if (mCompiler->mIsResolveOnly)
4689 {
4690 if (auto sourceClassifier = mCompiler->mResolvePassData->GetSourceClassifier(initializer))
4691 {
4692 sourceClassifier->SetElementType(initializer, BfSourceElementType_Normal);
4693 sourceClassifier->VisitChildNoRef(initializer);
4694 }
4695 }
4696
4697 if ((mCurTypeInstance->IsPayloadEnum()) && (fieldDef->IsEnumCaseEntry()))
4698 {
4699 Fail("Enums with payloads cannot have explicitly-defined discriminators", initializer);
4700 BfConstResolver constResolver(this);
4701 constResolver.Resolve(initializer);
4702 return GetDefaultTypedValue(fieldType);
4703 }
4704 else if (mCurTypeInstance->IsUnspecializedTypeVariation())
4705 {
4706 return GetDefaultTypedValue(fieldType);
4707 }
4708 else if (fieldDef->mIsConst)
4709 {
4710 int ceExecuteId = -1;
4711 if (mCompiler->mCeMachine != NULL)
4712 ceExecuteId = mCompiler->mCeMachine->mExecuteId;
4713
4714 BfTypeState typeState;
4715 typeState.mType = mCurTypeInstance;
4716 typeState.mCurTypeDef = fieldDef->mDeclaringType;
4717 typeState.mCurFieldDef = fieldDef;
4718 SetAndRestoreValue<BfTypeState*> prevTypeState(mContext->mCurTypeState, &typeState);
4719
4720 BfConstResolver constResolver(this);
4721 if (fieldType->IsVar())
4722 return constResolver.Resolve(initializer);
4723 else

Callers

nothing calls this directly

Calls 15

BfTypedValueClass · 0.85
FailFunction · 0.85
GetFieldDefMethod · 0.80
GetResolvedTypeMethod · 0.80
GetInitializerMethod · 0.80
GetSourceClassifierMethod · 0.80
IsEnumCaseEntryMethod · 0.80
CheckResultMethod · 0.80
IsDeletingMethod · 0.80
RequestExtraCompileMethod · 0.80
SetElementTypeMethod · 0.45
VisitChildNoRefMethod · 0.45

Tested by

no test coverage detected