mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Support matrix type in core:odin
This commit is contained in:
@@ -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,
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user