Pārlūkot izejas kodu

fixed bug in parser on when

Daniel Gavin 4 gadi atpakaļ
vecāks
revīzija
1de928df78

+ 2 - 0
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;
 					}
 				}
 

+ 9 - 10
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) {

+ 4 - 5
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);
 		}