1
0
Fork 0
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:
Brian Fiete 2022-01-19 10:38:20 -05:00
parent 1b9e97a65c
commit 5267e18783
3 changed files with 108 additions and 41 deletions

View file

@ -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",