diff options
| author | Bobby <[email protected]> | 2023-11-02 22:28:15 -0400 |
|---|---|---|
| committer | Bobby <[email protected]> | 2023-11-02 22:28:15 -0400 |
| commit | 895fd381cc3867bb362f1abf19ffc26c41cbdbe7 (patch) | |
| tree | 832f369d6558dbb9fd3fbd178955234fe5272053 /parser/parser.go | |
| parent | 3c98969220c0f3c6372aef3207a98e4cbcc9a135 (diff) | |
| download | mana-895fd381cc3867bb362f1abf19ffc26c41cbdbe7.tar.xz mana-895fd381cc3867bb362f1abf19ffc26c41cbdbe7.zip | |
parser:return
Diffstat (limited to 'parser/parser.go')
| -rw-r--r-- | parser/parser.go | 20 |
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 } } |
