1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-23 01:58:00 +02:00

Allow explicit bool-to-number casts

This commit is contained in:
Brian Fiete 2020-08-23 10:31:56 -07:00
parent 5c2e0d86c0
commit d4c78c0799
3 changed files with 10 additions and 8 deletions

View file

@ -466,6 +466,8 @@ BfTypeCode BfIRCodeGen::GetTypeCode(llvm::Type* type, bool isSigned)
{
switch (type->getIntegerBitWidth())
{
case 1:
return BfTypeCode_Boolean;
case 8:
return isSigned ? BfTypeCode_Int8 : BfTypeCode_UInt8;
case 16:
@ -1510,7 +1512,7 @@ void BfIRCodeGen::HandleNextCmd()
if (BfIRBuilder::IsInt(typeCode))
{
// Int -> Int
if (BfIRBuilder::IsInt(valTypeCode))
if ((BfIRBuilder::IsInt(valTypeCode)) || (valTypeCode == BfTypeCode_Boolean))
{
retVal = mIRBuilder->CreateIntCast(val, toLLVMType, toSigned && valIsSigned);
}
@ -1525,7 +1527,7 @@ void BfIRCodeGen::HandleNextCmd()
else
{
// Int -> Float
if (BfIRBuilder::IsInt(valTypeCode))
if ((BfIRBuilder::IsInt(valTypeCode)) || (valTypeCode == BfTypeCode_Boolean))
{
if (BfIRBuilder::IsSigned(valTypeCode))
retVal = mIRBuilder->CreateSIToFP(val, toLLVMType);

View file

@ -10343,7 +10343,7 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
if (explicitCast)
{
if (((fromPrimType->IsIntegral()) || (fromPrimType->IsFloat())) &&
if (((fromPrimType->IsIntegral()) || (fromPrimType->IsFloat()) || (fromPrimType->IsBoolean())) &&
((toType->IsIntegral()) || (toType->IsFloat())))
allowCast = true;
}