From b8e8fc8b6e64a393c1ca7b5395b28486c3f833f9 Mon Sep 17 00:00:00 2001 From: tijani Date: Thu, 26 May 2022 16:35:08 +0000 Subject: [PATCH] Stubborn bug, could not figure out what causing it. Will just re-write the entire thing. ```panic: runtime error: invalid memory address or nil pointer dereference [recovered] panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x10 pc=0xbcf660] goroutine 6 [running]: testing.tRunner.func1.2({0xbe4c60, 0xce2c10}) C:/Program Files/Go/src/testing/testing.go:1389 +0x24e testing.tRunner.func1() C:/Program Files/Go/src/testing/testing.go:1392 +0x39f panic({0xbe4c60, 0xce2c10}) C:/Program Files/Go/src/runtime/panic.go:838 +0x207 monkey/ast.(*LetStatement).TokenLiteral(0xc000022940?) D:/monkey/ast/ast.go:37 monkey/parser.testLetStatement(0xc000132000, {0xc32638, 0x0}, {0xc0106a, 0x1}) D:/monkey/parser/parser_test.go:43 +0x49 monkey/parser.TestLetStatements(0xc000132000) D:/monkey/parser/parser_test.go:36 +0x1ba testing.tRunner(0xc000132000, 0xc0d940) C:/Program Files/Go/src/testing/testing.go:1439 +0x102 created by testing.(*T).Run C:/Program Files/Go/src/testing/testing.go:1486 +0x35f FAIL monkey/parser 0.180s FAIL ``` git-svn-id: https://svn.tlawal.org/svn/monkey@16 f6afcba9-9ef1-4bdd-9b72-7484f5705bac --- parser/parser.go | 35 ----------------------- parser/parser_test.go | 64 ------------------------------------------- 2 files changed, 99 deletions(-) delete mode 100644 parser/parser.go delete mode 100644 parser/parser_test.go diff --git a/parser/parser.go b/parser/parser.go deleted file mode 100644 index 24a2412..0000000 --- a/parser/parser.go +++ /dev/null @@ -1,35 +0,0 @@ -package parser - -import ( - "monkey/ast" - "monkey/lexer" - "monkey/token" -) - -type Parser struct { - lexer *lexer.Lexer - - current_token token.Token - peek_token token.Token -} - -func New(l_lexer *lexer.Lexer) *Parser { - l_parser := &Parser{lexer: l_lexer} - - // Read two tokens, one for curren_token and another for peek_token - l_parser.next_token() - l_parser.next_token() - - return l_parser -} - -// When this is first called, current_token and peek_token should point to the same -// token -func (l_parser *Parser) next_token() { - l_parser.current_token = l_parser.peek_token - l_parser.peek_token = l_parser.lexer.NextToken() -} - -func (l_parser *Parser) ParseProgram() *ast.Program { - return nil -} diff --git a/parser/parser_test.go b/parser/parser_test.go deleted file mode 100644 index 7b78698..0000000 --- a/parser/parser_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package parser - -import ( - "monkey/ast" - "monkey/lexer" - "testing" -) - -func TestLetStatements(t *testing.T) { - input := ` - let x = 5; - let y = 10; - let foobar = 839893; - ` - - l_lexer := lexer.New(input) - l_parser := New(l_lexer) - - program := l_parser.ParseProgram() - if program == nil { - t.Fatalf("ParseProgram() returned nil") - } - - if len(program.Statements) != 3 { - t.Fatalf("program.Statements does not contail 3 statements, got=%d", len(program.Statements)) - } - - tests := []struct { - expectedIdentifier string - }{ - {"x"}, {"y"}, {"foobar"}, - } - - for i, tt := range tests { - stmt := program.Statements[i] - if !testLetStatement(t, stmt, tt.expectedIdentifier) { - return - } - } -} - -func testLetStatement(t *testing.T, s ast.Statement, name string) bool { - if s.TokenLiteral() != "let" { - t.Errorf("s.TokenLiteral not 'let', got=%q", s.TokenLiteral()) - return false - } - - letStmt, ok := s.(*ast.LetStatement) - if !ok { - t.Errorf("s not *ast.LetStatement, got=%T", s) - return false - } - - if letStmt.Name.TokenLiteral() != name { - t.Errorf("letStmt.Name.TokenLiteral() not '%s', got =%s", name, letStmt.Name.TokenLiteral()) - return false - } - - if letStmt.Name.Value != name { - t.Errorf("letStmt.Name.Value not '%s', got =%s", name, letStmt.Name.Value) - return false - } - return true -}