Browse Source

core/odin: support `#type_assert` and `#no_type_assert`

Laytan Laats 11 months ago
parent
commit
6ef49d4f24
2 changed files with 11 additions and 0 deletions
  1. 2 0
      core/odin/ast/ast.odin
  2. 9 0
      core/odin/parser/parser.odin

+ 2 - 0
core/odin/ast/ast.odin

@@ -27,6 +27,8 @@ Proc_Calling_Convention :: union {
 Node_State_Flag :: enum {
 Node_State_Flag :: enum {
 	Bounds_Check,
 	Bounds_Check,
 	No_Bounds_Check,
 	No_Bounds_Check,
+	Type_Assert,
+	No_Type_Assert,
 }
 }
 Node_State_Flags :: distinct bit_set[Node_State_Flag]
 Node_State_Flags :: distinct bit_set[Node_State_Flag]
 
 

+ 9 - 0
core/odin/parser/parser.odin

@@ -1438,6 +1438,15 @@ parse_stmt :: proc(p: ^Parser) -> ^ast.Stmt {
 				stmt.state_flags += {.No_Bounds_Check}
 				stmt.state_flags += {.No_Bounds_Check}
 			}
 			}
 			return stmt
 			return stmt
+		case "type_assert", "no_type_assert":
+			stmt := parse_stmt(p)
+			switch name {
+			case "type_assert":
+				stmt.state_flags += {.Type_Assert}
+			case "no_type_assert":
+				stmt.state_flags += {.No_Type_Assert}
+			}
+			return stmt
 		case "partial":
 		case "partial":
 			stmt := parse_stmt(p)
 			stmt := parse_stmt(p)
 			#partial switch s in stmt.derived_stmt {
 			#partial switch s in stmt.derived_stmt {