about summary refs log tree commit diff
path: root/pkg/lang
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang')
-rw-r--r--pkg/lang/ast/ast.go4
-rw-r--r--pkg/lang/ast/expr.go22
-rw-r--r--pkg/lang/ast/nodes.go5
-rw-r--r--pkg/lang/ast/stmt.go19
4 files changed, 29 insertions, 21 deletions
diff --git a/pkg/lang/ast/ast.go b/pkg/lang/ast/ast.go
index 43d0c28..4171801 100644
--- a/pkg/lang/ast/ast.go
+++ b/pkg/lang/ast/ast.go
@@ -1,5 +1,5 @@
 package ast
 
 type Program struct {
-	Stmts []Stmt[any]
-}
\ No newline at end of file
+	Stmts []Stmt
+}
diff --git a/pkg/lang/ast/expr.go b/pkg/lang/ast/expr.go
index a4d6f56..ab6578a 100644
--- a/pkg/lang/ast/expr.go
+++ b/pkg/lang/ast/expr.go
@@ -22,35 +22,37 @@ const (
 	ExprKindThis
 )
 
-type Expr[T any] struct {
+type Expr ExprT[any]
+
+type ExprT[T any] struct {
 	At    token.Loc
 	Kind  ExprKind
 	Value T
 }
 
 type ExprBinary struct {
-	Left  Expr[any]
+	Left  Expr
 	Op    BinOp
-	Right Expr[any]
+	Right Expr
 }
 
 type ExprUnary struct {
 	Op    UnOp
-	Value Expr[any]
+	Value Expr
 }
 
 type ExprCall struct {
-	Callee Expr[any]
-	Args   []Expr[any]
+	Callee Expr
+	Args   []Expr
 }
 
 type ExprSubscription struct {
-	Obj Expr[any]
-	Key Expr[any]
+	Obj Expr
+	Key Expr
 }
 
 type ExprGroup struct {
-	Value Expr[any]
+	Value Expr
 }
 
 type ExprFnLit struct {
@@ -59,7 +61,7 @@ type ExprFnLit struct {
 }
 
 type ExprArrayLit struct {
-	Values []Expr[any]
+	Values []Expr
 }
 
 type ExprIdent struct {
diff --git a/pkg/lang/ast/nodes.go b/pkg/lang/ast/nodes.go
index 699d025..55dbb5b 100644
--- a/pkg/lang/ast/nodes.go
+++ b/pkg/lang/ast/nodes.go
@@ -9,10 +9,11 @@ type IdentNode struct {
 
 type BlockNode struct {
 	At    token.Loc
-	Stmts []Stmt[any]
+	Stmts []Stmt
 }
 
 type CondNode struct {
-	Cond Expr[any]
+	At   token.Loc
+	Cond Expr
 	Then BlockNode
 }
diff --git a/pkg/lang/ast/stmt.go b/pkg/lang/ast/stmt.go
index e924f8c..4f24cc5 100644
--- a/pkg/lang/ast/stmt.go
+++ b/pkg/lang/ast/stmt.go
@@ -5,7 +5,8 @@ import "jinx/pkg/lang/scanner/token"
 type StmtKind int
 
 const (
-	StmtKindUse StmtKind = iota
+	StmtKindEmpty StmtKind = iota
+	StmtKindUse
 	StmtKindFnDecl
 	StmtKindObjectDecl
 	StmtKindVarDecl
@@ -18,7 +19,9 @@ const (
 	StmtKindExpr
 )
 
-type Stmt[T any] struct {
+type Stmt StmtT[any]
+
+type StmtT[T any] struct {
 	At    token.Loc
 	Kind  StmtKind
 	Value T
@@ -40,11 +43,11 @@ type StmtObjectDecl struct{}
 
 type StmtVarDecl struct {
 	Name  IdentNode
-	Value Expr[any]
+	Value Expr
 }
 
 type StmtIf struct {
-	Cond  Expr[any]
+	Cond  Expr
 	Then  BlockNode
 	Elifs []CondNode
 	Else  BlockNode
@@ -58,7 +61,7 @@ type StmtTry struct {
 }
 
 type StmtReturn struct {
-	Value Expr[any]
+	Value Expr
 }
 
 type StmtContinue struct{}
@@ -66,9 +69,11 @@ type StmtContinue struct{}
 type StmtBreak struct{}
 
 type StmtThrow struct {
-	Value Expr[any]
+	Value Expr
 }
 
 type StmtExpr struct {
-	Value Expr[any]
+	Value Expr
 }
+
+type StmtEmpty struct{}