diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-10-15 17:08:48 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-10-15 17:08:48 -0400 |
| commit | e0bbb1b7ea5c7bc24763d1863a94ef74f0966ccb (patch) | |
| tree | a0ecd28f399a4fd08e6a44aa4c134e2f95feea52 /src | |
| parent | 9f7ba16c9c9afeb49f2a8b1729141afe5011bc88 (diff) | |
Format matrix comp lits that use ranges
Diffstat (limited to 'src')
| -rw-r--r-- | src/odin/printer/visit.odin | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin index 734a3a3..8c820d4 100644 --- a/src/odin/printer/visit.odin +++ b/src/odin/printer/visit.odin @@ -1808,13 +1808,13 @@ visit_expr :: proc( document = cons_with_nopl(document, group(visit_expr(p, v.type))) if matrix_type, ok := v.type.derived.(^ast.Matrix_Type); - ok && len(v.elems) > 0 && is_matrix_type_constant(matrix_type) { + ok && is_matrix_type_constant(matrix_type) && is_matrix_filled_comp_lit(matrix_type, v) { document = cons(document, visit_begin_brace(p, v.pos, .Comp_Lit)) set_source_position(p, v.open) document = cons( document, - nest(cons(newline_position(p, 1, v.elems[0].pos), visit_matrix_comp_lit(p, v, matrix_type))), + nest(cons(newline_position(p, 1, v.elems[0].pos), visit_matrix_comp_lit(p, matrix_type, v))), ) set_source_position(p, v.end) @@ -1911,7 +1911,6 @@ visit_expr :: proc( case ^ast.Tag_Expr: document = cons( text(v.op.text), - break_with_no_newline(), text(v.name), break_with_no_newline(), visit_expr(p, v.expr), @@ -1945,14 +1944,24 @@ is_matrix_type_constant :: proc(matrix_type: ^ast.Matrix_Type) -> bool { } @(private) -visit_matrix_comp_lit :: proc(p: ^Printer, comp_lit: ^ast.Comp_Lit, matrix_type: ^ast.Matrix_Type) -> ^Document { - document := empty() - +is_matrix_filled_comp_lit :: proc(matrix_type: ^ast.Matrix_Type, comp_lit: ^ast.Comp_Lit) -> bool { //these values have already been validated row_count, _ := strconv.parse_int(matrix_type.row_count.derived.(^ast.Basic_Lit).tok.text) column_count, _ := strconv.parse_int(matrix_type.column_count.derived.(^ast.Basic_Lit).tok.text) if row_count * column_count > len(comp_lit.elems) { + return false + } + return true +} + +@(private) +visit_matrix_comp_lit :: proc(p: ^Printer, matrix_type: ^ast.Matrix_Type, comp_lit: ^ast.Comp_Lit) -> ^Document { + document := empty() + row_count, _ := strconv.parse_int(matrix_type.row_count.derived.(^ast.Basic_Lit).tok.text) + column_count, _ := strconv.parse_int(matrix_type.column_count.derived.(^ast.Basic_Lit).tok.text) + + if row_count * column_count > len(comp_lit.elems) { p.errored_out = true return document } |