mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-22 17:48:01 +02:00
'var' improvements, fixed cast issues with typed prim & constraint check
This commit is contained in:
parent
1b9e97a65c
commit
5267e18783
3 changed files with 108 additions and 41 deletions
|
@ -1209,7 +1209,7 @@ void BfModule::TryInitVar(BfAstNode* checkNode, BfLocalVariable* localVar, BfTyp
|
|||
|
||||
if (CanCast(initValue, varType))
|
||||
{
|
||||
if ((!varType->IsPointer()) && (!varType->IsObjectOrInterface()))
|
||||
if ((!varType->IsPointer()) && (!varType->IsObjectOrInterface()) && (!varType->IsVar()))
|
||||
{
|
||||
if (!IsInSpecializedSection())
|
||||
{
|
||||
|
@ -1260,7 +1260,11 @@ void BfModule::TryInitVar(BfAstNode* checkNode, BfLocalVariable* localVar, BfTyp
|
|||
mBfIRBuilder->CreateAlignedStore(initValue.mValue, localVar->mAddr, initValue.mType->mAlign);
|
||||
}
|
||||
|
||||
if ((varType->IsPointer()) || (varType->IsObjectOrInterface()))
|
||||
if (varType->IsVar())
|
||||
{
|
||||
checkResult = GetDefaultTypedValue(boolType, false, BfDefaultValueKind_Undef);
|
||||
}
|
||||
else if ((varType->IsPointer()) || (varType->IsObjectOrInterface()))
|
||||
{
|
||||
checkResult = BfTypedValue(mBfIRBuilder->CreateIsNotNull(initValue.mValue), boolType);
|
||||
}
|
||||
|
@ -1841,8 +1845,12 @@ BfLocalVariable* BfModule::HandleVariableDeclaration(BfVariableDeclaration* varD
|
|||
{
|
||||
exprEvaluator->mResult = BfTypedValue(mBfIRBuilder->CreateIsNotNull(initValue.mValue), boolType);
|
||||
}
|
||||
else
|
||||
else if (resolvedType->IsVar())
|
||||
{
|
||||
exprEvaluator->mResult = GetDefaultTypedValue(GetPrimitiveType(BfTypeCode_Boolean), false, BfDefaultValueKind_Undef);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Always true
|
||||
if ((!IsInSpecializedSection()) && (!resolvedType->IsGenericParam()))
|
||||
Warn(BfWarning_CS0472_ValueTypeNullCompare, StrFormat("Variable declaration is always 'true' since a value of type '%s' can never be null",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue