From 1de928df7844e2244774cab2b42c70bddfa8698f Mon Sep 17 00:00:00 2001 From: Daniel Gavin Date: Wed, 14 Apr 2021 18:43:04 +0200 Subject: [PATCH] fixed bug in parser on when --- core/odin/parser/parser.odin | 2 ++ core/odin/printer/printer.odin | 19 +++++++++---------- core/odin/printer/visit.odin | 9 ++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index 2b657f76f..35fd91465 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -2226,6 +2226,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr { p.expr_level = -1; where_clauses = parse_rhs_expr_list(p); p.expr_level = prev_level; + tags = parse_proc_tags(p); } if p.allow_type && p.expr_level < 0 { if where_token.kind != .Invalid { @@ -3152,6 +3153,7 @@ parse_simple_stmt :: proc(p: ^Parser, flags: Stmt_Allow_Flags) -> ^ast.Stmt { case ast.For_Stmt: n.label = label; case ast.Switch_Stmt: n.label = label; case ast.Type_Switch_Stmt: n.label = label; + case ast.Range_Stmt: n.label = label; } } diff --git a/core/odin/printer/printer.odin b/core/odin/printer/printer.odin index 6d591a6ae..21765f6f0 100644 --- a/core/odin/printer/printer.odin +++ b/core/odin/printer/printer.odin @@ -256,12 +256,14 @@ align_switch_smt :: proc(p: ^Printer, index: int) { length += len(format_token.text) + format_token.spaces_before; } - if case_count > brace_token.parameter_count { + if case_count >= brace_token.parameter_count { break; } } + fmt.println(case_count, brace_token); + case_count = 0; for line, line_index in p.lines[brace_line+1:] { @@ -291,10 +293,10 @@ align_switch_smt :: proc(p: ^Printer, index: int) { length += len(format_token.text) + format_token.spaces_before; - if case_count > brace_token.parameter_count { - break; - } + } + if case_count >= brace_token.parameter_count { + break; } } @@ -331,8 +333,6 @@ align_struct :: proc(p: ^Printer, index: int) { largest := 0; colon_count := 0; - - for line, line_index in p.lines[brace_line+1:] { length := 0; @@ -352,7 +352,7 @@ align_struct :: proc(p: ^Printer, index: int) { length += len(format_token.text) + format_token.spaces_before; } - if colon_count > brace_token.parameter_count { + if colon_count >= brace_token.parameter_count { break; } } @@ -371,19 +371,18 @@ align_struct :: proc(p: ^Printer, index: int) { if format_token.kind == .Colon { colon_count += 1; - line.format_tokens[i+1].spaces_before += (largest - length) - 1; + line.format_tokens[i+1].spaces_before = largest - length + 1; break; } length += len(format_token.text) + format_token.spaces_before; } - if colon_count > brace_token.parameter_count { + if colon_count >= brace_token.parameter_count { break; } } - } align_blocks :: proc(p: ^Printer) { diff --git a/core/odin/printer/visit.odin b/core/odin/printer/visit.odin index 5e54368bb..a00c8ec7c 100644 --- a/core/odin/printer/visit.odin +++ b/core/odin/printer/visit.odin @@ -1259,14 +1259,13 @@ visit_field_list :: proc(p: ^Printer, list: ^ast.Field_List, add_comma := false, visit_exprs(p, field.names, true); - if len(field.names) != 0 { - push_generic_token(p, .Colon, 0); - } - if field.type != nil { + if len(field.names) != 0 { + push_generic_token(p, .Colon, 0); + } visit_expr(p, field.type); } else { - push_generic_token(p, .Colon, 0); + push_generic_token(p, .Colon, 1); push_generic_token(p, .Eq, 0); visit_expr(p, field.default_value); }