From cd74cdfdaf5157704b836c8de1c32b5a03dddcae Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 8 Aug 2023 14:57:25 +0100 Subject: [PATCH] Remove `switch in` in favour of `switch _ in` --- core/net/addr.odin | 4 ++-- core/net/dns.odin | 6 +++--- core/odin/ast/clone.odin | 2 +- core/odin/parser/parser.odin | 2 +- examples/demo/demo.odin | 4 ++-- src/parser.cpp | 5 ++++- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/core/net/addr.odin b/core/net/addr.odin index e6b503aaf..be04be15e 100644 --- a/core/net/addr.odin +++ b/core/net/addr.odin @@ -471,7 +471,7 @@ join_port :: proc(address_or_host: string, port: int, allocator := context.alloc // hostname fmt.sbprintf(&b, "%v:%v", addr_or_host, port) } else { - switch in addr { + switch _ in addr { case IP4_Address: fmt.sbprintf(&b, "%v:%v", address_to_string(addr), port) case IP6_Address: @@ -606,7 +606,7 @@ to_string :: proc{address_to_string, endpoint_to_string} family_from_address :: proc(addr: Address) -> Address_Family { - switch in addr { + switch _ in addr { case IP4_Address: return .IP4 case IP6_Address: return .IP6 case: diff --git a/core/net/dns.odin b/core/net/dns.odin index 6afa844fe..27713d790 100644 --- a/core/net/dns.odin +++ b/core/net/dns.odin @@ -96,7 +96,7 @@ resolve :: proc(hostname_and_maybe_port: string) -> (ep4, ep6: Endpoint, err: Ne switch t in target { case Endpoint: // NOTE(tetra): The hostname was actually an IP address; nothing to resolve, so just return it. - switch in t.address { + switch _ in t.address { case IP4_Address: ep4 = t case IP6_Address: ep6 = t case: unreachable() @@ -122,7 +122,7 @@ resolve_ip4 :: proc(hostname_and_maybe_port: string) -> (ep4: Endpoint, err: Net switch t in target { case Endpoint: // NOTE(tetra): The hostname was actually an IP address; nothing to resolve, so just return it. - switch in t.address { + switch _ in t.address { case IP4_Address: return t, nil case IP6_Address: @@ -149,7 +149,7 @@ resolve_ip6 :: proc(hostname_and_maybe_port: string) -> (ep6: Endpoint, err: Net switch t in target { case Endpoint: // NOTE(tetra): The hostname was actually an IP address; nothing to resolve, so just return it. - switch in t.address { + switch _ in t.address { case IP4_Address: err = .Unable_To_Resolve return diff --git a/core/odin/ast/clone.odin b/core/odin/ast/clone.odin index b8c0b8087..407ddf2cc 100644 --- a/core/odin/ast/clone.odin +++ b/core/odin/ast/clone.odin @@ -77,7 +77,7 @@ clone_node :: proc(node: ^Node) -> ^Node { align = elem.align } - #partial switch in node.derived { + #partial switch _ in node.derived { case ^Package, ^File: panic("Cannot clone this node type") } diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index 32154aff7..122e73b9c 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -1091,7 +1091,7 @@ parse_attribute :: proc(p: ^Parser, tok: tokenizer.Token, open_kind, close_kind: parse_foreign_block_decl :: proc(p: ^Parser) -> ^ast.Stmt { decl := parse_stmt(p) - #partial switch in decl.derived_stmt { + #partial switch _ in decl.derived_stmt { case ^ast.Empty_Stmt, ^ast.Bad_Stmt, ^ast.Bad_Decl: // Ignore return nil diff --git a/examples/demo/demo.odin b/examples/demo/demo.odin index e9e0a8d63..94aafe8b2 100644 --- a/examples/demo/demo.odin +++ b/examples/demo/demo.odin @@ -1354,13 +1354,13 @@ partial_switch :: proc() { { // union Foo :: union {int, bool} f: Foo = 123 - switch in f { + switch _ in f { case int: fmt.println("int") case bool: fmt.println("bool") case: } - #partial switch in f { + #partial switch _ in f { case bool: fmt.println("bool") } } diff --git a/src/parser.cpp b/src/parser.cpp index bfbd7b32a..a2de85d84 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -4382,7 +4382,10 @@ gb_internal Ast *parse_switch_stmt(AstFile *f) { f->expr_level = -1; defer (f->expr_level = prev_level); - if (allow_token(f, Token_in)) { + if (f->curr_token.kind == Token_in) { + Token in_token = expect_token(f, Token_in); + syntax_error(in_token, "Prefer 'switch _ in' over 'switch in'"); + auto lhs = array_make(heap_allocator(), 0, 1); auto rhs = array_make(heap_allocator(), 0, 1); Token blank_ident = token;