minor clean ups from previous commit
This commit is contained in:
parent
3266585606
commit
c7852bd596
8
.vscode/settings.json
vendored
8
.vscode/settings.json
vendored
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"files.associations": {
|
||||
"*.zig": "c",
|
||||
"type_traits": "cpp",
|
||||
"*.inc": "cpp",
|
||||
"thread": "cpp"
|
||||
}
|
||||
}
|
41
src/ir.cpp
41
src/ir.cpp
|
@ -5827,12 +5827,25 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, IrInstruction *instruc
|
|||
return true;
|
||||
}
|
||||
} else if ((other_type->id == TypeTableEntryIdNumLitFloat && const_val->data.x_bignum.kind == BigNumKindFloat) ||
|
||||
(other_type->id == TypeTableEntryIdNumLitInt && const_val->data.x_bignum.kind == BigNumKindInt )) {
|
||||
return true;
|
||||
} else if ((other_type->id == TypeTableEntryIdMaybe &&
|
||||
other_type->data.maybe.child_type->id == TypeTableEntryIdInt &&
|
||||
const_val->data.x_bignum.kind == BigNumKindInt)) {
|
||||
(other_type->id == TypeTableEntryIdNumLitInt && const_val->data.x_bignum.kind == BigNumKindInt ))
|
||||
{
|
||||
return true;
|
||||
} else if (other_type->id == TypeTableEntryIdMaybe) {
|
||||
TypeTableEntry *child_type = other_type->data.maybe.child_type;
|
||||
if ((child_type->id == TypeTableEntryIdNumLitFloat && const_val->data.x_bignum.kind == BigNumKindFloat) ||
|
||||
(child_type->id == TypeTableEntryIdNumLitInt && const_val->data.x_bignum.kind == BigNumKindInt ))
|
||||
{
|
||||
return true;
|
||||
} else if (child_type->id == TypeTableEntryIdInt && const_val->data.x_bignum.kind == BigNumKindInt) {
|
||||
if (bignum_fits_in_bits(&const_val->data.x_bignum,
|
||||
child_type->data.integral.bit_count,
|
||||
child_type->data.integral.is_signed))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
} else if (child_type->id == TypeTableEntryIdFloat && const_val->data.x_bignum.kind == BigNumKindFloat) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
const char *num_lit_str = (const_val->data.x_bignum.kind == BigNumKindFloat) ? "float" : "integer";
|
||||
|
@ -5898,11 +5911,9 @@ static ImplicitCastMatchResult ir_types_match_with_implicit_cast(IrAnalyze *ira,
|
|||
// implicit conversion from T to %?T
|
||||
if (expected_type->id == TypeTableEntryIdErrorUnion &&
|
||||
expected_type->data.error.child_type->id == TypeTableEntryIdMaybe &&
|
||||
ir_types_match_with_implicit_cast(
|
||||
ira,
|
||||
ir_types_match_with_implicit_cast(ira,
|
||||
expected_type->data.error.child_type->data.maybe.child_type,
|
||||
actual_type,
|
||||
value))
|
||||
actual_type, value))
|
||||
{
|
||||
return ImplicitCastMatchResultYes;
|
||||
}
|
||||
|
@ -7083,10 +7094,14 @@ static IrInstruction *ir_analyze_cast(IrAnalyze *ira, IrInstruction *source_inst
|
|||
// explicit cast from T to %?T
|
||||
if (wanted_type->id == TypeTableEntryIdErrorUnion &&
|
||||
wanted_type->data.error.child_type->id == TypeTableEntryIdMaybe &&
|
||||
actual_type->id != TypeTableEntryIdMaybe) {
|
||||
if (types_match_const_cast_only(wanted_type->data.error.child_type->data.maybe.child_type, actual_type) ||
|
||||
actual_type->id != TypeTableEntryIdMaybe)
|
||||
{
|
||||
TypeTableEntry *wanted_child_type = wanted_type->data.error.child_type->data.maybe.child_type;
|
||||
if (types_match_const_cast_only(wanted_child_type, actual_type) ||
|
||||
actual_type->id == TypeTableEntryIdNullLit ||
|
||||
actual_type->id == TypeTableEntryIdNumLitInt ) {
|
||||
actual_type->id == TypeTableEntryIdNumLitInt ||
|
||||
actual_type->id == TypeTableEntryIdNumLitFloat)
|
||||
{
|
||||
IrInstruction *cast1 = ir_analyze_cast(ira, source_instr, wanted_type->data.error.child_type, value);
|
||||
if (type_is_invalid(cast1->value.type))
|
||||
return ira->codegen->invalid_instruction;
|
||||
|
@ -7094,7 +7109,7 @@ static IrInstruction *ir_analyze_cast(IrAnalyze *ira, IrInstruction *source_inst
|
|||
IrInstruction *cast2 = ir_analyze_cast(ira, source_instr, wanted_type, cast1);
|
||||
if (type_is_invalid(cast2->value.type))
|
||||
return ira->codegen->invalid_instruction;
|
||||
|
||||
|
||||
return cast2;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user