1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

mCurMethodState null check for RestoreScoreState_LocalVariables

This commit is contained in:
Brian Fiete 2022-10-18 12:52:21 -04:00
parent 1a5af42338
commit 3122839ea8

View file

@ -5353,7 +5353,7 @@ BfTypedValue BfExprEvaluator::LoadField(BfAstNode* targetSrc, BfTypedValue targe
resolvedFieldType, target.IsReadOnly() ? BfTypedValueKind_ReadOnlyAddr : BfTypedValueKind_Addr); resolvedFieldType, target.IsReadOnly() ? BfTypedValueKind_ReadOnlyAddr : BfTypedValueKind_Addr);
} }
} }
if (typeInstance->mIsUnion) if (typeInstance->mIsUnion)
{ {
auto unionInnerType = typeInstance->GetUnionInnerType(); auto unionInnerType = typeInstance->GetUnionInnerType();
@ -5364,7 +5364,7 @@ BfTypedValue BfExprEvaluator::LoadField(BfAstNode* targetSrc, BfTypedValue targe
BfIRType llvmPtrType = mModule->mBfIRBuilder->GetPointerTo(mModule->mBfIRBuilder->MapType(resolvedFieldType)); BfIRType llvmPtrType = mModule->mBfIRBuilder->GetPointerTo(mModule->mBfIRBuilder->MapType(resolvedFieldType));
retVal.mValue = mModule->mBfIRBuilder->CreateBitCast(retVal.mValue, llvmPtrType); retVal.mValue = mModule->mBfIRBuilder->CreateBitCast(retVal.mValue, llvmPtrType);
} }
} }
if ((fieldDef->mIsVolatile) && (retVal.IsAddr())) if ((fieldDef->mIsVolatile) && (retVal.IsAddr()))
retVal.mKind = BfTypedValueKind_VolatileAddr; retVal.mKind = BfTypedValueKind_VolatileAddr;
@ -5541,7 +5541,7 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
bool isBaseLookup = false; bool isBaseLookup = false;
while (curCheckType != NULL) while (curCheckType != NULL)
{ {
if (((flags & BfLookupFieldFlag_CheckingOuter) != 0) && ((mBfEvalExprFlags & BfEvalExprFlags_Comptime) != 0)) if (((flags & BfLookupFieldFlag_CheckingOuter) != 0) && ((mBfEvalExprFlags & BfEvalExprFlags_Comptime) != 0))
{ {
// Don't fully populateType for CheckingOuter - it carries a risk of an inadvertent data cycle // Don't fully populateType for CheckingOuter - it carries a risk of an inadvertent data cycle
@ -6124,9 +6124,9 @@ void BfExprEvaluator::ResolveArgValues(BfResolvedArgs& resolvedArgs, BfResolveAr
if ((resolvedArg.mArgFlags & BfArgFlag_StringInterpolateFormat) != 0) if ((resolvedArg.mArgFlags & BfArgFlag_StringInterpolateFormat) != 0)
exprEvaluator.mBfEvalExprFlags = (BfEvalExprFlags)(exprEvaluator.mBfEvalExprFlags | BfEvalExprFlags_StringInterpolateFormat); exprEvaluator.mBfEvalExprFlags = (BfEvalExprFlags)(exprEvaluator.mBfEvalExprFlags | BfEvalExprFlags_StringInterpolateFormat);
int lastLocalVarIdx = mModule->mCurMethodState->mLocals.mSize; int lastLocalVarIdx = (mModule->mCurMethodState != NULL) ? mModule->mCurMethodState->mLocals.mSize : 0;
exprEvaluator.Evaluate(argExpr, false, false, true); exprEvaluator.Evaluate(argExpr, false, false, true);
if ((deferParamValues) && (mModule->mCurMethodState->mLocals.mSize > lastLocalVarIdx)) if ((deferParamValues) && (mModule->mCurMethodState != NULL) && (mModule->mCurMethodState->mLocals.mSize > lastLocalVarIdx))
{ {
// Remove any ignored locals // Remove any ignored locals
mModule->RestoreScoreState_LocalVariables(lastLocalVarIdx); mModule->RestoreScoreState_LocalVariables(lastLocalVarIdx);
@ -7465,7 +7465,7 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, const BfTypedValu
{ {
returnType = methodInstance->GetOwner(); returnType = methodInstance->GetOwner();
BF_ASSERT(returnType->IsInterface()); BF_ASSERT(returnType->IsInterface());
}*/ }*/
Array<BfTypedValue> argCascades; Array<BfTypedValue> argCascades;
BfTypedValue target = inTarget; BfTypedValue target = inTarget;
@ -8782,7 +8782,7 @@ BfTypedValue BfExprEvaluator::MatchConstructor(BfAstNode* targetSrc, BfMethodBou
} }
methodMatcher.mArguments.Insert(0, resolvedArg); methodMatcher.mArguments.Insert(0, resolvedArg);
} }
} }
if (isFailurePass) if (isFailurePass)
mModule->Fail(StrFormat("'%s' is inaccessible due to its protection level", mModule->MethodToString(moduleMethodInstance.mMethodInstance).c_str()), targetSrc); mModule->Fail(StrFormat("'%s' is inaccessible due to its protection level", mModule->MethodToString(moduleMethodInstance.mMethodInstance).c_str()), targetSrc);
@ -18684,7 +18684,7 @@ void BfExprEvaluator::DoInvocation(BfAstNode* target, BfMethodBoundExpression* m
if (thisValue.mType->IsAllocType()) if (thisValue.mType->IsAllocType())
thisValue.mType = thisValue.mType->GetUnderlyingType(); thisValue.mType = thisValue.mType->GetUnderlyingType();
checkTypeInst = thisValue.mType->ToTypeInstance(); checkTypeInst = thisValue.mType->ToTypeInstance();
} }
else if (allowImplicitThis) else if (allowImplicitThis)
{ {
@ -23236,7 +23236,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfExpression* leftExpression, BfExp
BF_ASSERT_REL(indexType->mBaseType->mBaseType != NULL); BF_ASSERT_REL(indexType->mBaseType->mBaseType != NULL);
rightTypedValueExpr.mRefNode = opToken; rightTypedValueExpr.mRefNode = opToken;
auto valueTypeEmpty = mModule->mBfIRBuilder->CreateConstAgg(mModule->mBfIRBuilder->MapType(indexType->mBaseType->mBaseType), {}); auto valueTypeEmpty = mModule->mBfIRBuilder->CreateConstAgg(mModule->mBfIRBuilder->MapType(indexType->mBaseType->mBaseType), {});
SizedArray<BfIRValue, 8> enumMembers; SizedArray<BfIRValue, 8> enumMembers;
enumMembers.Add(valueTypeEmpty); enumMembers.Add(valueTypeEmpty);