mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-14 14:24:10 +02:00
Fixed some flashing-errors with var returns
This commit is contained in:
parent
8eedd0f9f1
commit
3875fbcb2f
1 changed files with 7 additions and 4 deletions
|
@ -4930,6 +4930,8 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, BfMethodInstance*
|
||||||
|
|
||||||
auto _GetDefaultReturnValue = [&]()
|
auto _GetDefaultReturnValue = [&]()
|
||||||
{
|
{
|
||||||
|
if ((returnType->IsVar()) && (mExpectingType != NULL))
|
||||||
|
returnType = mExpectingType;
|
||||||
if (returnType->IsRef())
|
if (returnType->IsRef())
|
||||||
{
|
{
|
||||||
auto result = mModule->GetDefaultTypedValue(returnType->GetUnderlyingType(), true, BfDefaultValueKind_Addr);
|
auto result = mModule->GetDefaultTypedValue(returnType->GetUnderlyingType(), true, BfDefaultValueKind_Addr);
|
||||||
|
@ -5009,9 +5011,12 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, BfMethodInstance*
|
||||||
return BfTypedValue(mModule->mBfIRBuilder->GetUndefConstValue(mModule->mBfIRBuilder->MapType(mExpectingType)), mExpectingType);
|
return BfTypedValue(mModule->mBfIRBuilder->GetUndefConstValue(mModule->mBfIRBuilder->MapType(mExpectingType)), mExpectingType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
auto returnType = methodInstance->mReturnType;
|
||||||
|
if ((returnType->IsVar()) && (mExpectingType != NULL))
|
||||||
|
returnType = mExpectingType;
|
||||||
if (methodInstance->mReturnType->IsValuelessType())
|
if (methodInstance->mReturnType->IsValuelessType())
|
||||||
return BfTypedValue(mModule->mBfIRBuilder->GetFakeVal(), methodInstance->mReturnType);
|
return BfTypedValue(mModule->mBfIRBuilder->GetFakeVal(), returnType);
|
||||||
return BfTypedValue(mModule->mBfIRBuilder->GetUndefConstValue(mModule->mBfIRBuilder->MapType(methodInstance->mReturnType)), methodInstance->mReturnType);
|
return BfTypedValue(mModule->mBfIRBuilder->GetUndefConstValue(mModule->mBfIRBuilder->MapType(returnType)), returnType);
|
||||||
}
|
}
|
||||||
|
|
||||||
BfTypedValue result;
|
BfTypedValue result;
|
||||||
|
@ -6749,8 +6754,6 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, const BfTypedValu
|
||||||
|
|
||||||
auto func = moduleMethodInstance.mFunc;
|
auto func = moduleMethodInstance.mFunc;
|
||||||
BfTypedValue result = CreateCall(targetSrc, methodInstance, func, bypassVirtual, irArgs);
|
BfTypedValue result = CreateCall(targetSrc, methodInstance, func, bypassVirtual, irArgs);
|
||||||
if ((result.mType != NULL) && (result.mType->IsVar()) && (mModule->mCompiler->mIsResolveOnly))
|
|
||||||
mModule->Fail("Method return type reference failed to resolve", targetSrc);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue