From f90bc00af2b36242a1c0b133fd2e6db51c4a7a56 Mon Sep 17 00:00:00 2001 From: Adrian Lee <295157867@qq.com> Date: Sun, 23 Apr 2023 14:37:59 +0800 Subject: [PATCH] bugfix: parse expect error when mis match braces (#421) * bugfix: parse expect error when mis match braces Change-Id: Iba1ad456d5b020375bb0416f44fb54bc2e346d62 * fix wrong test case in vm_test Change-Id: Idcdaf7ecc93eb61d374249d11282b8286557d30d --------- Co-authored-by: lihongyuan --- parser/parser.go | 1 + parser/parser_test.go | 14 ++++++++++++++ vm_test.go | 4 ++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/parser/parser.go b/parser/parser.go index eaa9dc93..a12af614 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -143,6 +143,7 @@ func (p *Parser) ParseFile() (file *File, err error) { } stmts := p.parseStmtList() + p.expect(token.EOF) if p.errors.Len() > 0 { return nil, p.errors.Err() } diff --git a/parser/parser_test.go b/parser/parser_test.go index 8c2c530a..b0aaa874 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -1631,6 +1631,20 @@ func TestParseFloat(t *testing.T) { } } +func TestMismatchBrace(t *testing.T) { + expectParseError(t, ` +fmt := import("fmt") +out := 0 +if 3 == 1 { + out = 1 +} +} else { + out = 2 +} +fmt.println(out) + `) +} + func TestParseNumberExpressions(t *testing.T) { expectParse(t, `0x15e+2`, func(p pfn) []Stmt { return stmts( diff --git a/vm_test.go b/vm_test.go index dcde5ec3..8c98b5a3 100644 --- a/vm_test.go +++ b/vm_test.go @@ -2754,10 +2754,10 @@ export func(a) { Opts().Module("mod0", `if 1 { } else { export true }`), tengo.UndefinedValue) expectRun(t, `out = import("mod0")`, - Opts().Module("mod0", `for v:=0;;v++ { if v == 3 { export true } } }`), + Opts().Module("mod0", `for v:=0;;v++ { if v == 3 { export true } }`), true) expectRun(t, `out = import("mod0")`, - Opts().Module("mod0", `for v:=0;;v++ { if v == 3 { break } } }`), + Opts().Module("mod0", `for v:=0;;v++ { if v == 3 { break } }`), tengo.UndefinedValue) // duplicate compiled functions