Allow implicit selector expressions in switch statements

This commit is contained in:
gingerBill
2019-03-06 16:23:50 +00:00
parent 1b3ec66fa2
commit 15d3f4c190
2 changed files with 9 additions and 11 deletions

View File

@@ -468,11 +468,10 @@ _fmt_int :: proc(fi: ^Info, u: u64, base: int, is_signed: bool, bit_size: int, d
buf: [256]byte;
start := 0;
using strconv.Int_Flag;
flags: strconv.Int_Flags;
if fi.hash && !fi.zero do flags |= {Prefix};
if fi.plus do flags |= {Plus};
if fi.space do flags |= {Space};
if fi.hash && !fi.zero do flags |= {.Prefix};
if fi.plus do flags |= {.Plus};
if fi.space do flags |= {.Space};
s := strconv.append_bits(buf[start:], u, base, is_signed, bit_size, digits, flags);
if fi.hash && fi.zero {
@@ -746,11 +745,10 @@ fmt_bit_set :: proc(fi: ^Info, v: any, name: string = "") {
ti = runtime.type_info_base(ti);
switch info in ti.variant {
case runtime.Type_Info_Integer:
using runtime.Type_Info_Endianness;
switch info.endianness {
case Platform: return false;
case Little: return ODIN_ENDIAN != "little";
case Big: return ODIN_ENDIAN != "big";
case .Platform: return false;
case .Little: return ODIN_ENDIAN != "little";
case .Big: return ODIN_ENDIAN != "big";
}
}
return false;

View File

@@ -686,14 +686,14 @@ void check_switch_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags) {
ast_node(ie, BinaryExpr, expr);
Operand lhs = {};
Operand rhs = {};
check_expr(ctx, &lhs, ie->left);
check_expr_with_type_hint(ctx, &lhs, ie->left, x.type);
if (x.mode == Addressing_Invalid) {
continue;
}
if (lhs.mode == Addressing_Invalid) {
continue;
}
check_expr(ctx, &rhs, ie->right);
check_expr_with_type_hint(ctx, &rhs, ie->right, x.type);
if (rhs.mode == Addressing_Invalid) {
continue;
}
@@ -732,7 +732,7 @@ void check_switch_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags) {
if (is_type_typeid(x.type)) {
check_expr_or_type(ctx, &y, expr, x.type);
} else {
check_expr(ctx, &y, expr);
check_expr_with_type_hint(ctx, &y, expr, x.type);
}
if (x.mode == Addressing_Invalid ||