Support matrix type in core:odin

This commit is contained in:
gingerBill
2021-10-27 23:49:37 +01:00
parent 793a6479ef
commit 90d587df13
5 changed files with 84 additions and 20 deletions
+17
View File
@@ -224,6 +224,15 @@ Slice_Expr :: struct {
close: tokenizer.Pos,
}
Matrix_Index_Expr :: struct {
using node: Expr,
expr: ^Expr,
open: tokenizer.Pos,
row_index: ^Expr,
column_index: ^Expr,
close: tokenizer.Pos,
}
Call_Expr :: struct {
using node: Expr,
inlining: Proc_Inlining,
@@ -739,3 +748,11 @@ Relative_Type :: struct {
tag: ^Expr,
type: ^Expr,
}
Matrix_Type :: struct {
using node: Expr,
tok_pos: tokenizer.Pos,
row_count: ^Expr,
column_count: ^Expr,
elem: ^Expr,
}
+8 -1
View File
@@ -117,6 +117,10 @@ clone_node :: proc(node: ^Node) -> ^Node {
case Index_Expr:
r.expr = clone(r.expr)
r.index = clone(r.index)
case Matrix_Index_Expr:
r.expr = clone(r.expr)
r.row_index = clone(r.row_index)
r.column_index = clone(r.column_index)
case Deref_Expr:
r.expr = clone(r.expr)
case Slice_Expr:
@@ -275,7 +279,10 @@ clone_node :: proc(node: ^Node) -> ^Node {
case Map_Type:
r.key = clone(r.key)
r.value = clone(r.value)
case Matrix_Type:
r.row_count = clone(r.row_count)
r.column_count = clone(r.column_count)
r.elem = clone(r.elem)
case:
fmt.panicf("Unhandled node kind: %T", r)
}
+8
View File
@@ -110,6 +110,10 @@ walk :: proc(v: ^Visitor, node: ^Node) {
case Index_Expr:
walk(v, n.expr)
walk(v, n.index)
case Matrix_Index_Expr:
walk(v, n.expr)
walk(v, n.row_index)
walk(v, n.column_index)
case Deref_Expr:
walk(v, n.expr)
case Slice_Expr:
@@ -398,6 +402,10 @@ walk :: proc(v: ^Visitor, node: ^Node) {
case Relative_Type:
walk(v, n.tag)
walk(v, n.type)
case Matrix_Type:
walk(v, n.row_count)
walk(v, n.column_count)
walk(v, n.elem)
case:
fmt.panicf("ast.walk: unexpected node type %T", n)