aboutsummaryrefslogtreecommitdiff
path: root/parser/parser.go
diff options
context:
space:
mode:
authorBobby <[email protected]>2023-11-02 22:28:15 -0400
committerBobby <[email protected]>2023-11-02 22:28:15 -0400
commit895fd381cc3867bb362f1abf19ffc26c41cbdbe7 (patch)
tree832f369d6558dbb9fd3fbd178955234fe5272053 /parser/parser.go
parent3c98969220c0f3c6372aef3207a98e4cbcc9a135 (diff)
downloadmana-895fd381cc3867bb362f1abf19ffc26c41cbdbe7.tar.xz
mana-895fd381cc3867bb362f1abf19ffc26c41cbdbe7.zip
parser:return
Diffstat (limited to 'parser/parser.go')
-rw-r--r--parser/parser.go20
1 files changed, 19 insertions, 1 deletions
diff --git a/parser/parser.go b/parser/parser.go
index 6e8bba6..bd587de 100644
--- a/parser/parser.go
+++ b/parser/parser.go
@@ -66,6 +66,8 @@ func (p *Parser) parseStatement() ast.Statement {
switch p.curToken.Type {
case tokens.LET:
return p.parseLetStatement()
+ case tokens.RETURN:
+ return p.parseReturnStatement()
default:
return nil
}
@@ -95,6 +97,22 @@ func (p *Parser) parseLetStatement() *ast.LetStatement {
return stmt
}
+// parseReturnStatement parses a return statement.
+func (p *Parser) parseReturnStatement() *ast.ReturnStatement {
+ var stmt *ast.ReturnStatement = &ast.ReturnStatement{Token: p.curToken}
+
+ p.nextToken()
+
+ // TODO: We're skipping the expressions until we
+ // encounter a semicolon.
+
+ for !p.curTokenIs(tokens.SEMICOLON) {
+ p.nextToken()
+ }
+
+ return stmt
+}
+
// curTokenIs returns true if the current token is of the given type.
func (p *Parser) curTokenIs(t tokens.TokenType) bool {
return p.curToken.Type == t
@@ -113,7 +131,7 @@ func (p *Parser) expectPeek(t tokens.TokenType) bool {
return true
} else {
p.peekError(t)
-
+
return false
}
}