diff --git a/core/odin/ast/walk.odin b/core/odin/ast/walk.odin index eff6faa61..09580d9a7 100644 --- a/core/odin/ast/walk.odin +++ b/core/odin/ast/walk.odin @@ -22,7 +22,7 @@ inspect :: proc(node: ^Node, f: proc(^Node) -> bool) { if f(node) { return v; } - return nil + return nil; }, data = rawptr(f), }; diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index 2d8f31cbb..7bd20c699 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -2599,7 +2599,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr { case .Asm: tok := expect_token(p, .Asm); - param_types: [dynamic]^ast.Expr + param_types: [dynamic]^ast.Expr; return_type: ^ast.Expr; if allow_token(p, .Open_Paren) { for p.curr_tok.kind != .Close_Paren && p.curr_tok.kind != .EOF { diff --git a/core/odin/tokenizer/token.odin b/core/odin/tokenizer/token.odin index 169aca72b..731e375c9 100644 --- a/core/odin/tokenizer/token.odin +++ b/core/odin/tokenizer/token.odin @@ -34,122 +34,120 @@ Token_Kind :: enum u32 { Comment, B_Literal_Begin, - Ident, - Integer, - Float, - Imag, - Rune, - String, + Ident, // main + Integer, // 12345 + Float, // 123.45 + Imag, // 123.45i + Rune, // 'a' + String, // "abc" B_Literal_End, B_Operator_Begin, - Eq, - Not, - Hash, - At, - Dollar, - Pointer, - Question, - Add, - Sub, - Mul, - Quo, - Mod, - Mod_Mod, - And, - Or, - Xor, - And_Not, - Shl, - Shr, + Eq, // = + Not, // ! + Hash, // # + At, // @ + Dollar, // $ + Pointer, // ^ + Question, // ? + Add, // + + Sub, // - + Mul, // * + Quo, // / + Mod, // % + Mod_Mod, // %% + And, // & + Or, // | + Xor, // ~ + And_Not, // &~ + Shl, // << + Shr, // >> - Cmp_And, - Cmp_Or, + Cmp_And, // && + Cmp_Or, // || B_Assign_Op_Begin, - Add_Eq, - Sub_Eq, - Mul_Eq, - Quo_Eq, - Mod_Eq, - Mod_Mod_Eq, - And_Eq, - Or_Eq, - Xor_Eq, - And_Not_Eq, - Shl_Eq, - Shr_Eq, - Cmp_And_Eq, - Cmp_Or_Eq, + Add_Eq, // += + Sub_Eq, // -= + Mul_Eq, // *= + Quo_Eq, // /= + Mod_Eq, // %= + Mod_Mod_Eq, // %%= + And_Eq, // &= + Or_Eq, // |= + Xor_Eq, // ~= + And_Not_Eq, // &~= + Shl_Eq, // <<= + Shr_Eq, // >>= + Cmp_And_Eq, // &&= + Cmp_Or_Eq, // ||= B_Assign_Op_End, - Arrow_Right, - Arrow_Left, - Double_Arrow_Right, - Undef, + Arrow_Right, // -> + Undef, // --- B_Comparison_Begin, - Cmp_Eq, - Not_Eq, - Lt, - Gt, - Lt_Eq, - Gt_Eq, + Cmp_Eq, // == + Not_Eq, // != + Lt, // < + Gt, // > + Lt_Eq, // <= + Gt_Eq, // >= B_Comparison_End, - Open_Paren, - Close_Paren, - Open_Bracket, - Close_Bracket, - Open_Brace, - Close_Brace, - Colon, - Semicolon, - Period, - Comma, - Ellipsis, - Range_Half, - Back_Slash, + Open_Paren, // ( + Close_Paren, // ) + Open_Bracket, // [ + Close_Bracket, // ] + Open_Brace, // { + Close_Brace, // } + Colon, // : + Semicolon, // ; + Period, // . + Comma, // , + Ellipsis, // .. + Range_Half, // ..< + Back_Slash, // \ B_Operator_End, B_Keyword_Begin, - Import, - Foreign, - Package, - Typeid, - When, - Where, - If, - Else, - For, - Switch, - In, - Not_In, - Do, - Case, - Break, - Continue, - Fallthrough, - Defer, - Return, - Proc, - Struct, - Union, - Enum, - Bit_Field, - Bit_Set, - Map, - Dynamic, - Auto_Cast, - Cast, - Transmute, - Distinct, - Opaque, - Using, - Inline, - No_Inline, - Context, - Asm, + Import, // import + Foreign, // foreign + Package, // package + Typeid, // typeid + When, // when + Where, // where + If, // if + Else, // else + For, // for + Switch, // switch + In, // in + Not_In, // not_in + Do, // do + Case, // case + Break, // break + Continue, // continue + Fallthrough, // fallthrough + Defer, // defer + Return, // return + Proc, // proc + Struct, // struct + Union, // union + Enum, // enum + Bit_Field, // bit_field + Bit_Set, // bit_set + Map, // map + Dynamic, // dynamic + Auto_Cast, // auto_cast + Cast, // cast + Transmute, // transmute + Distinct, // distinct + Opaque, // opaque + Using, // using + Inline, // inline + No_Inline, // no_inline + Context, // context + Asm, // asm B_Keyword_End, COUNT, @@ -214,8 +212,6 @@ tokens := [Token_Kind.COUNT]string { "", "->", - "<-", - "=>", "---", "", diff --git a/core/odin/tokenizer/tokenizer.odin b/core/odin/tokenizer/tokenizer.odin index 3df65e49b..d8fedf5fd 100644 --- a/core/odin/tokenizer/tokenizer.odin +++ b/core/odin/tokenizer/tokenizer.odin @@ -563,13 +563,7 @@ scan :: proc(t: ^Tokenizer) -> Token { insert_semicolon = true; kind = .String; lit = scan_raw_string(t); - case '=': - if t.ch == '>' { - advance_rune(t); - kind = .Double_Arrow_Right; - } else { - kind = switch2(t, .Eq, .Cmp_Eq); - } + case '=': kind = switch2(t, .Eq, .Cmp_Eq); case '!': kind = switch2(t, .Not, .Not_Eq); case '#': kind = .Hash; @@ -615,13 +609,7 @@ scan :: proc(t: ^Tokenizer) -> Token { } case '|': kind = switch3(t, .Or, .Or_Eq, '|', .Cmp_Or); case '~': kind = .Xor; - case '<': - if t.ch == '-' { - advance_rune(t); - kind = .Arrow_Left; - } else { - kind = switch4(t, .Lt, .Lt_Eq, '<', .Shl, .Shl_Eq); - } + case '<': kind = switch4(t, .Lt, .Lt_Eq, '<', .Shl, .Shl_Eq); case '>': kind = switch4(t, .Gt, .Gt_Eq, '>', .Shr,.Shr_Eq); case '.': diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index bef82633f..0ef92eb21 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -52,8 +52,6 @@ TOKEN_KIND(Token__AssignOpBegin, ""), \ TOKEN_KIND(Token_CmpOrEq, "||="), \ TOKEN_KIND(Token__AssignOpEnd, ""), \ TOKEN_KIND(Token_ArrowRight, "->"), \ - TOKEN_KIND(Token_ArrowLeft, "<-"), \ - TOKEN_KIND(Token_DoubleArrowRight, "=>"), \ TOKEN_KIND(Token_Undef, "---"), \ \ TOKEN_KIND(Token__ComparisonBegin, ""), \ @@ -1160,10 +1158,7 @@ void tokenizer_get_token(Tokenizer *t, Token *token) { break; case '=': token->kind = Token_Eq; - if (t->curr_rune == '>') { - advance_to_next_rune(t); - token->kind = Token_DoubleArrowRight; - } else if (t->curr_rune == '=') { + if (t->curr_rune == '=') { advance_to_next_rune(t); token->kind = Token_CmpEq; } @@ -1259,10 +1254,7 @@ void tokenizer_get_token(Tokenizer *t, Token *token) { case '<': token->kind = Token_Lt; - if (t->curr_rune == '-') { - advance_to_next_rune(t); - token->kind = Token_ArrowLeft; - } else if (t->curr_rune == '=') { + if (t->curr_rune == '=') { token->kind = Token_LtEq; advance_to_next_rune(t); } else if (t->curr_rune == '<') {