about summary refs log tree commit diff
path: root/pkg/lang/parser/stmts.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-07-03 18:11:55 +0200
committerMel <einebeere@gmail.com>2022-07-03 18:11:55 +0200
commited9a0c8f0f3c1eed3582d722935cd1df1d055afd (patch)
treede68dd7510f03457693593d7dbd8636804f89ded /pkg/lang/parser/stmts.go
parent4774f6373d3e41acba54cb4c63ca51f1b3de2ddd (diff)
downloadjinx-ed9a0c8f0f3c1eed3582d722935cd1df1d055afd.tar.zst
jinx-ed9a0c8f0f3c1eed3582d722935cd1df1d055afd.zip
Compile If Stmts
Diffstat (limited to 'pkg/lang/parser/stmts.go')
-rw-r--r--pkg/lang/parser/stmts.go28
1 files changed, 18 insertions, 10 deletions
diff --git a/pkg/lang/parser/stmts.go b/pkg/lang/parser/stmts.go
index 52e590c..4b1077e 100644
--- a/pkg/lang/parser/stmts.go
+++ b/pkg/lang/parser/stmts.go
@@ -151,7 +151,9 @@ func (p *Parser) parseIfStmt() (ast.Stmt, error) {
 		return ast.Stmt{}, err
 	}
 
-	cond, err := p.parseExpr()
+	conds := []ast.CondNode{}
+
+	ifCond, err := p.parseExpr()
 	if err != nil {
 		return ast.Stmt{}, err
 	}
@@ -161,7 +163,11 @@ func (p *Parser) parseIfStmt() (ast.Stmt, error) {
 		return ast.Stmt{}, err
 	}
 
-	elifs := []ast.CondNode{}
+	conds = append(conds, ast.CondNode{
+		At:   ifTok.At,
+		Cond: ifCond,
+		Then: then,
+	})
 
 	for p.peek().Kind == token.KwElif {
 		elifTok, err := p.expect(token.KwElif)
@@ -179,35 +185,37 @@ func (p *Parser) parseIfStmt() (ast.Stmt, error) {
 			return ast.Stmt{}, err
 		}
 
-		elifs = append(elifs, ast.CondNode{
+		conds = append(conds, ast.CondNode{
 			At:   elifTok.At,
 			Cond: elifCond,
 			Then: elifThen,
 		})
 	}
 
-	elseThen := ast.BlockNode{}
 
 	if p.peek().Kind == token.KwElse {
-		_, err := p.expect(token.KwElse)
+		elseTok, err := p.expect(token.KwElse)
 		if err != nil {
 			return ast.Stmt{}, err
 		}
 
-		elseThen, err = p.parseBlock()
+		elseThen, err := p.parseBlock()
 		if err != nil {
 			return ast.Stmt{}, err
 		}
+
+		conds = append(conds, ast.CondNode{
+			At: elseTok.At,
+			Cond: ast.Expr{},
+			Then: elseThen,
+		})
 	}
 
 	return ast.Stmt{
 		At:   ifTok.At,
 		Kind: ast.StmtKindIf,
 		Value: ast.StmtIf{
-			Cond:  cond,
-			Then:  then,
-			Elifs: elifs,
-			Else:  elseThen,
+			Conds: conds,
 		},
 	}, nil
 }