Remove TODO's
git-svn-id: https://svn.tlawal.org/svn/monkey@40 f6afcba9-9ef1-4bdd-9b72-7484f5705bac
This commit is contained in:
parent
7e34164019
commit
e5d2851c2e
@ -175,7 +175,9 @@ func (l_parser *Parser) parse_statement() ast.Statement {
|
|||||||
|
|
||||||
func (l_parser *Parser) parse_let_statement() *ast.LetStatement {
|
func (l_parser *Parser) parse_let_statement() *ast.LetStatement {
|
||||||
defer untrace(trace("parse_let_statement"))
|
defer untrace(trace("parse_let_statement"))
|
||||||
|
|
||||||
statement := &ast.LetStatement{ Token: l_parser.current_token }
|
statement := &ast.LetStatement{ Token: l_parser.current_token }
|
||||||
|
|
||||||
if !l_parser.expect_peek(token.IDENT){
|
if !l_parser.expect_peek(token.IDENT){
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -185,8 +187,10 @@ func (l_parser *Parser) parse_let_statement() *ast.LetStatement {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(tijani): Skipping the expressins until there is a semicolon
|
l_parser.next_token()
|
||||||
for !l_parser.current_token_is(token.SEMICOLON) {
|
statement.Value = l_parser.parse_expression(LOWEST)
|
||||||
|
|
||||||
|
if l_parser.peek_token_is(token.SEMICOLON){
|
||||||
l_parser.next_token()
|
l_parser.next_token()
|
||||||
}
|
}
|
||||||
return statement
|
return statement
|
||||||
@ -194,11 +198,13 @@ func (l_parser *Parser) parse_let_statement() *ast.LetStatement {
|
|||||||
|
|
||||||
func (l_parser *Parser) parse_return_statement() *ast.ReturnStatement {
|
func (l_parser *Parser) parse_return_statement() *ast.ReturnStatement {
|
||||||
defer untrace(trace("parse_return_statement"))
|
defer untrace(trace("parse_return_statement"))
|
||||||
|
|
||||||
statement := &ast.ReturnStatement{Token: l_parser.current_token}
|
statement := &ast.ReturnStatement{Token: l_parser.current_token}
|
||||||
l_parser.next_token()
|
l_parser.next_token()
|
||||||
|
|
||||||
// TODO(tijani): Skipping the expression until there is semicolon
|
statement.ReturnValue = l_parser.parse_expression(LOWEST)
|
||||||
for !l_parser.current_token_is(token.SEMICOLON) {
|
|
||||||
|
if l_parser.peek_token_is(token.SEMICOLON) {
|
||||||
l_parser.next_token()
|
l_parser.next_token()
|
||||||
}
|
}
|
||||||
return statement
|
return statement
|
||||||
|
@ -624,6 +624,40 @@ func TestCallExpressionParameterParsing(l_test *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLetStatements(l_test *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
input string
|
||||||
|
expected_identifier string
|
||||||
|
expected_value interface{}
|
||||||
|
}{
|
||||||
|
{"let x = 5;", "x", 5},
|
||||||
|
{"let y = true;", "y", true},
|
||||||
|
{"let foobar = y;", "foobar", "y"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
l_lexer := lexer.New(tt.input)
|
||||||
|
l_parser := New(l_lexer)
|
||||||
|
program := l_parser.ParseProgram()
|
||||||
|
check_parser_errors(l_test, l_parser)
|
||||||
|
|
||||||
|
if len(program.Statements) != 1 {
|
||||||
|
l_test.Fatalf("program.Statements does not contain 1 statements, got=%d",
|
||||||
|
len(program.Statements))
|
||||||
|
}
|
||||||
|
|
||||||
|
statement := program.Statements[0]
|
||||||
|
if !testLetStatement(l_test, statement, tt.expected_identifier){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val := statement.(*ast.LetStatement).Value
|
||||||
|
if !testLiteralExpression(l_test, val, tt.expected_value){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Helpers
|
// Helpers
|
||||||
|
|
||||||
func check_parser_errors(l_test *testing.T, l_parser *Parser) {
|
func check_parser_errors(l_test *testing.T, l_parser *Parser) {
|
||||||
|
Loading…
Reference in New Issue
Block a user