about summary refs log tree commit diff
path: root/pkg/lang/ast/stmt.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/ast/stmt.go')
-rw-r--r--pkg/lang/ast/stmt.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/pkg/lang/ast/stmt.go b/pkg/lang/ast/stmt.go
new file mode 100644
index 0000000..e924f8c
--- /dev/null
+++ b/pkg/lang/ast/stmt.go
@@ -0,0 +1,74 @@
+package ast
+
+import "jinx/pkg/lang/scanner/token"
+
+type StmtKind int
+
+const (
+	StmtKindUse StmtKind = iota
+	StmtKindFnDecl
+	StmtKindObjectDecl
+	StmtKindVarDecl
+	StmtKindIf
+	StmtKindTry
+	StmtKindReturn
+	StmtKindContinue
+	StmtKindBreak
+	StmtKindThrow
+	StmtKindExpr
+)
+
+type Stmt[T any] struct {
+	At    token.Loc
+	Kind  StmtKind
+	Value T
+}
+
+type StmtUse struct {
+	Globals []IdentNode
+	Modules []IdentNode
+	Author  IdentNode
+}
+
+type StmtFnDecl struct {
+	Name IdentNode
+	Args []IdentNode
+	Body BlockNode
+}
+
+type StmtObjectDecl struct{}
+
+type StmtVarDecl struct {
+	Name  IdentNode
+	Value Expr[any]
+}
+
+type StmtIf struct {
+	Cond  Expr[any]
+	Then  BlockNode
+	Elifs []CondNode
+	Else  BlockNode
+}
+
+type StmtTry struct {
+	Try         BlockNode
+	CatchedName IdentNode
+	Catch       BlockNode
+	Finally     BlockNode
+}
+
+type StmtReturn struct {
+	Value Expr[any]
+}
+
+type StmtContinue struct{}
+
+type StmtBreak struct{}
+
+type StmtThrow struct {
+	Value Expr[any]
+}
+
+type StmtExpr struct {
+	Value Expr[any]
+}