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

Method CreateValueFromExpression

IDEHelper/Compiler/BfModule.cpp:9376–9546  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9374}
9375
9376BfTypedValue BfModule::CreateValueFromExpression(BfExprEvaluator& exprEvaluator, BfExpression* expr, BfType* wantTypeRef, BfEvalExprFlags flags, BfType** outOrigType)
9377{
9378 //
9379 {
9380 BP_ZONE("CreateValueFromExpression:CheckStack");
9381
9382 StackHelper stackHelper;
9383 if (!stackHelper.CanStackExpand(128 * 1024))
9384 {
9385 BfTypedValue result;
9386 if (!stackHelper.Execute([&]()
9387 {
9388 result = CreateValueFromExpression(exprEvaluator, expr, wantTypeRef, flags, outOrigType);
9389 }))
9390 {
9391 Fail("Expression too complex to compile", expr);
9392 }
9393 return result;
9394 }
9395 }
9396
9397 BP_ZONE("BfModule::CreateValueFromExpression");
9398
9399 if (outOrigType != NULL)
9400 *outOrigType = NULL;
9401
9402 exprEvaluator.mExpectingType = wantTypeRef;
9403 exprEvaluator.mBfEvalExprFlags = (BfEvalExprFlags)(exprEvaluator.mBfEvalExprFlags | flags);
9404 exprEvaluator.mExplicitCast = (flags & BfEvalExprFlags_ExplicitCast) != 0;
9405
9406 if ((flags & BfEvalExprFlags_CreateConditionalScope) != 0)
9407 {
9408 if ((mCurMethodState == NULL) || (mCurMethodState->mCurScope->mScopeKind != BfScopeKind_StatementTarget_Conditional))
9409 {
9410 EvaluateWithNewConditionalScope(exprEvaluator, expr, flags);
9411 }
9412 else
9413 {
9414 SetAndRestoreValue<bool> prevIsConditional(mCurMethodState->mCurScope->mIsConditional, true);
9415 exprEvaluator.Evaluate(expr, (flags & BfEvalExprFlags_PropogateNullConditional) != 0, (flags & BfEvalExprFlags_IgnoreNullConditional) != 0, true);
9416 }
9417 }
9418 else
9419 exprEvaluator.Evaluate(expr, (flags & BfEvalExprFlags_PropogateNullConditional) != 0, (flags & BfEvalExprFlags_IgnoreNullConditional) != 0, true);
9420
9421 if (!exprEvaluator.mResult)
9422 {
9423 if ((flags & BfEvalExprFlags_InferReturnType) != 0)
9424 return exprEvaluator.mResult;
9425 if (!mCompiler->mPassInstance->HasFailed())
9426 {
9427 if (PreFail())
9428 Fail("INTERNAL ERROR: No expression result returned but no error caught in expression evaluator", expr);
9429 }
9430 return BfTypedValue();
9431 }
9432 auto typedVal = exprEvaluator.mResult;
9433 if (typedVal.mKind == BfTypedValueKind_GenericConstValue)

Callers 15

DoObjectCreateMethod · 0.45
ResolveArgTypedValueMethod · 0.45
HandleFixitsMethod · 0.45
DoCaseExpressionMethod · 0.45
VisitMethod · 0.45
FinishDeferredEvalsMethod · 0.45
CreateCallMethod · 0.45
ResolveArgValueMethod · 0.45
CheckEnumCreationMethod · 0.45
MatchMethodMethod · 0.45
DoImplicitArgCaptureMethod · 0.45

Calls 15

FailFunction · 0.85
BfTypedValueClass · 0.85
CanStackExpandMethod · 0.80
HasFailedMethod · 0.80
GetUndefConstValueMethod · 0.80
MapTypeMethod · 0.80
CheckResultForReadingMethod · 0.80
CheckResultMethod · 0.80
ExecuteMethod · 0.45
EvaluateMethod · 0.45
IsGenericParamMethod · 0.45
IsBoxedMethod · 0.45

Tested by

no test coverage detected