From fd33451b04cf954310845ca7b43730c19e14693b Mon Sep 17 00:00:00 2001 From: Victor Starodub Date: Sat, 2 Apr 2016 19:39:25 +0300 Subject: [PATCH] Fix opening brace in string literal w/SkipRecursive. --- jlexer/lexer.go | 2 +- jlexer/lexer_test.go | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/jlexer/lexer.go b/jlexer/lexer.go index 4611094..d4f5392 100644 --- a/jlexer/lexer.go +++ b/jlexer/lexer.go @@ -482,7 +482,7 @@ func (r *Lexer) SkipRecursive() { for i, c := range r.Data[r.pos:] { switch { - case c == start: + case c == start && !inQuotes: level++ case c == end && !inQuotes: level-- diff --git a/jlexer/lexer_test.go b/jlexer/lexer_test.go index 0f3833e..900ab61 100644 --- a/jlexer/lexer_test.go +++ b/jlexer/lexer_test.go @@ -112,13 +112,22 @@ func TestSkipRecursive(t *testing.T) { }{ {toParse: "5, 4", left: ", 4"}, {toParse: "[5, 6], 4", left: ", 4"}, + {toParse: "[5, [7,8]]: 4", left: ": 4"}, + + {toParse: `{"a":1}, 4`, left: ", 4"}, + {toParse: `{"a":1, "b":{"c": 5}, "e":[12,15]}, 4`, left: ", 4"}, + + // array start/end chars in a string {toParse: `[5, "]"], 4`, left: ", 4"}, {toParse: `[5, "\"]"], 4`, left: ", 4"}, - {toParse: "[5, [7,8]]: 4", left: ": 4"}, - {toParse: `{"a":1}, 4`, left: ", 4"}, + {toParse: `[5, "["], 4`, left: ", 4"}, + {toParse: `[5, "\"["], 4`, left: ", 4"}, + + // object start/end chars in a string {toParse: `{"a}":1}, 4`, left: ", 4"}, {toParse: `{"a\"}":1}, 4`, left: ", 4"}, - {toParse: `{"a":1, "b":{"c": 5}, "e":[12,15]}, 4`, left: ", 4"}, + {toParse: `{"a{":1}, 4`, left: ", 4"}, + {toParse: `{"a\"{":1}, 4`, left: ", 4"}, } { l := Lexer{Data: []byte(test.toParse)}