summaryrefslogtreecommitdiff
path: root/parser
diff options
context:
space:
mode:
Diffstat (limited to 'parser')
-rw-r--r--parser/interpreter_test.go6
-rw-r--r--parser/parse.go31
2 files changed, 6 insertions, 31 deletions
diff --git a/parser/interpreter_test.go b/parser/interpreter_test.go
index d73d282..42223d4 100644
--- a/parser/interpreter_test.go
+++ b/parser/interpreter_test.go
@@ -130,7 +130,8 @@ func TestSwitch(t *testing.T) {
switch a {
default: a = 0
case 1,2: a = a+1
- case 3: a = a+2
+ case 3: a = a+2; break; a = 3
+ case 4: a = 10
}
return a
}
@@ -148,7 +149,8 @@ func TestSwitch(t *testing.T) {
{src: src0 + "f(1)", res: "2"},
{src: src0 + "f(2)", res: "3"},
{src: src0 + "f(3)", res: "5"},
- {src: src0 + "f(4)", res: "0"},
+ {src: src0 + "f(4)", res: "10"},
+ {src: src0 + "f(5)", res: "0"},
{src: src1 + "f(1)", res: "2"},
{src: src1 + "f(4)", res: "5"},
diff --git a/parser/parse.go b/parser/parse.go
index be8b31a..40cec5b 100644
--- a/parser/parse.go
+++ b/parser/parse.go
@@ -85,32 +85,6 @@ func (p *Parser) Parse(src string) (out Tokens, err error) {
return out, err
}
return p.ParseStmts(in)
- /*
- log.Println("Parse in:", in)
- for len(in) > 0 {
- endstmt := in.Index(lang.Semicolon)
- if endstmt == -1 {
- return out, scanner.ErrBlock
- }
- // Skip over simple init statements for some tokens (if, for, ...)
- if lang.HasInit[in[0].Id] {
- for in[endstmt-1].Id != lang.BraceBlock {
- e2 := in[endstmt+1:].Index(lang.Semicolon)
- if e2 == -1 {
- return out, scanner.ErrBlock
- }
- endstmt += 1 + e2
- }
- }
- o, err := p.ParseStmt(in[:endstmt])
- if err != nil {
- return out, err
- }
- out = append(out, o...)
- in = in[endstmt+1:]
- }
- return out, err
- */
}
func (p *Parser) ParseStmts(in Tokens) (out Tokens, err error) {
@@ -387,12 +361,11 @@ func (p *Parser) ParseSwitch(in Tokens) (out Tokens, err error) {
p.labelCount[p.scope]++
breakLabel := p.breakLabel
p.pushScope(label)
- p.breakLabel = p.scope
+ p.breakLabel = p.scope + "e"
defer func() {
p.breakLabel = breakLabel
p.popScope()
}()
- log.Println("### ic:", initcond, "#init:", init, "#cond:", cond)
if len(init) > 0 {
if init, err = p.ParseStmt(init); err != nil {
return nil, err
@@ -427,7 +400,7 @@ func (p *Parser) ParseSwitch(in Tokens) (out Tokens, err error) {
}
out = append(out, co...)
}
- out = append(out, scanner.Token{Id: lang.Label, Str: p.scope + "e"})
+ out = append(out, scanner.Token{Id: lang.Label, Str: p.breakLabel})
return out, err
}