minor clean ups from previous commit

This commit is contained in:
Andrew Kelley 2017-04-17 20:15:19 -04:00
parent 3266585606
commit c7852bd596
2 changed files with 28 additions and 21 deletions

View File

@ -1,8 +0,0 @@
{
"files.associations": {
"*.zig": "c",
"type_traits": "cpp",
"*.inc": "cpp",
"thread": "cpp"
}
}

View File

@ -5827,12 +5827,25 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, IrInstruction *instruc
return true; return true;
} }
} else if ((other_type->id == TypeTableEntryIdNumLitFloat && const_val->data.x_bignum.kind == BigNumKindFloat) || } else if ((other_type->id == TypeTableEntryIdNumLitFloat && const_val->data.x_bignum.kind == BigNumKindFloat) ||
(other_type->id == TypeTableEntryIdNumLitInt && const_val->data.x_bignum.kind == BigNumKindInt )) { (other_type->id == TypeTableEntryIdNumLitInt && const_val->data.x_bignum.kind == BigNumKindInt ))
{
return true; return true;
} else if ((other_type->id == TypeTableEntryIdMaybe && } else if (other_type->id == TypeTableEntryIdMaybe) {
other_type->data.maybe.child_type->id == TypeTableEntryIdInt && TypeTableEntry *child_type = other_type->data.maybe.child_type;
const_val->data.x_bignum.kind == BigNumKindInt)) { 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; 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"; 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 // implicit conversion from T to %?T
if (expected_type->id == TypeTableEntryIdErrorUnion && if (expected_type->id == TypeTableEntryIdErrorUnion &&
expected_type->data.error.child_type->id == TypeTableEntryIdMaybe && expected_type->data.error.child_type->id == TypeTableEntryIdMaybe &&
ir_types_match_with_implicit_cast( ir_types_match_with_implicit_cast(ira,
ira,
expected_type->data.error.child_type->data.maybe.child_type, expected_type->data.error.child_type->data.maybe.child_type,
actual_type, actual_type, value))
value))
{ {
return ImplicitCastMatchResultYes; return ImplicitCastMatchResultYes;
} }
@ -7083,10 +7094,14 @@ static IrInstruction *ir_analyze_cast(IrAnalyze *ira, IrInstruction *source_inst
// explicit cast from T to %?T // explicit cast from T to %?T
if (wanted_type->id == TypeTableEntryIdErrorUnion && if (wanted_type->id == TypeTableEntryIdErrorUnion &&
wanted_type->data.error.child_type->id == TypeTableEntryIdMaybe && wanted_type->data.error.child_type->id == TypeTableEntryIdMaybe &&
actual_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) || {
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 == 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); IrInstruction *cast1 = ir_analyze_cast(ira, source_instr, wanted_type->data.error.child_type, value);
if (type_is_invalid(cast1->value.type)) if (type_is_invalid(cast1->value.type))
return ira->codegen->invalid_instruction; return ira->codegen->invalid_instruction;