mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 19:48:20 +02:00
Made dot-constructors work with nullables
This commit is contained in:
parent
73de7b1fd0
commit
3c40f80f6d
1 changed files with 12 additions and 4 deletions
|
@ -14035,15 +14035,23 @@ void BfExprEvaluator::DoInvocation(BfAstNode* target, BfMethodBoundExpression* m
|
|||
BfResolveArgFlags resolveArgsFlags = BfResolveArgFlag_DeferParamEval;
|
||||
ResolveArgValues(argValues, resolveArgsFlags);
|
||||
|
||||
if ((mReceivingValue != NULL) && (mReceivingValue->mType == mExpectingType) && (mReceivingValue->IsAddr()))
|
||||
auto expectingType = mExpectingType;
|
||||
if (expectingType->IsNullable())
|
||||
{
|
||||
auto underlyingType = expectingType->GetUnderlyingType();
|
||||
if (underlyingType->IsTypeInstance())
|
||||
expectingType = underlyingType;
|
||||
}
|
||||
|
||||
if ((mReceivingValue != NULL) && (mReceivingValue->mType == expectingType) && (mReceivingValue->IsAddr()))
|
||||
{
|
||||
mResult = *mReceivingValue;
|
||||
mReceivingValue = NULL;
|
||||
}
|
||||
else
|
||||
mResult = BfTypedValue(mModule->CreateAlloca(mExpectingType), mExpectingType, BfTypedValueKind_TempAddr);
|
||||
MatchConstructor(target, methodBoundExpr, mResult, mExpectingType->ToTypeInstance(), argValues, false, false);
|
||||
mModule->ValidateAllocation(mExpectingType, invocationExpr->mTarget);
|
||||
mResult = BfTypedValue(mModule->CreateAlloca(expectingType), expectingType, BfTypedValueKind_TempAddr);
|
||||
MatchConstructor(target, methodBoundExpr, mResult, expectingType->ToTypeInstance(), argValues, false, false);
|
||||
mModule->ValidateAllocation(expectingType, invocationExpr->mTarget);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue