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

Method EvaluateWithNewConditionalScope

IDEHelper/Compiler/BfModule.cpp:9347–9374  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9345}
9346
9347BF_NOINLINE void BfModule::EvaluateWithNewConditionalScope(BfExprEvaluator& exprEvaluator, BfExpression* expr, BfEvalExprFlags flags)
9348{
9349 BfDeferredLocalAssignData deferredLocalAssignData(mCurMethodState->mCurScope);
9350 SetAndRestoreValue<BfDeferredLocalAssignData*> prevDLA(mCurMethodState->mDeferredLocalAssignData);
9351 if (mCurMethodState != NULL)
9352 {
9353 deferredLocalAssignData.mIsIfCondition = true;
9354 deferredLocalAssignData.mIfMayBeSkipped = true;
9355 deferredLocalAssignData.ExtendFrom(mCurMethodState->mDeferredLocalAssignData, false);
9356 deferredLocalAssignData.mVarIdBarrier = mCurMethodState->GetRootMethodState()->mCurLocalVarId;
9357 mCurMethodState->mDeferredLocalAssignData = &deferredLocalAssignData;
9358 }
9359
9360 BfScopeData newScope;
9361 newScope.mOuterIsConditional = true;
9362 newScope.mAllowTargeting = false;
9363 if (mCurMethodState != NULL)
9364 {
9365 mCurMethodState->AddScope(&newScope);
9366 NewScopeState(true, false);
9367 }
9368
9369 exprEvaluator.mBfEvalExprFlags = (BfEvalExprFlags)(exprEvaluator.mBfEvalExprFlags | flags);
9370 exprEvaluator.Evaluate(expr, (flags & BfEvalExprFlags_PropogateNullConditional) != 0, (flags & BfEvalExprFlags_IgnoreNullConditional) != 0, (flags & BfEvalExprFlags_AllowSplat) != 0);
9371
9372 if (mCurMethodState != NULL)
9373 RestoreScopeState();
9374}
9375
9376BfTypedValue BfModule::CreateValueFromExpression(BfExprEvaluator& exprEvaluator, BfExpression* expr, BfType* wantTypeRef, BfEvalExprFlags flags, BfType** outOrigType)
9377{

Callers

nothing calls this directly

Calls 4

ExtendFromMethod · 0.80
GetRootMethodStateMethod · 0.80
AddScopeMethod · 0.80
EvaluateMethod · 0.45

Tested by

no test coverage detected