about summary refs log tree commit diff
path: root/pkg/lang/ast/stmt.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-04-20 02:48:45 +0200
committerMel <einebeere@gmail.com>2022-04-20 02:48:45 +0200
commit20bc0c2243888900d2f04328e57ad2d7ca0a2403 (patch)
tree6f0fc535fd8a74eb8f91c4a35fa3c32f012f0a59 /pkg/lang/ast/stmt.go
parentdb3dd28cdf9009880c1ab5f12c47b673dd00bc43 (diff)
downloadjinx-20bc0c2243888900d2f04328e57ad2d7ca0a2403.tar.zst
jinx-20bc0c2243888900d2f04328e57ad2d7ca0a2403.zip
Basic AST for lang
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]
+}