| 9345 | } |
| 9346 | |
| 9347 | BF_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 | |
| 9376 | BfTypedValue BfModule::CreateValueFromExpression(BfExprEvaluator& exprEvaluator, BfExpression* expr, BfType* wantTypeRef, BfEvalExprFlags flags, BfType** outOrigType) |
| 9377 | { |
nothing calls this directly
no test coverage detected