From 6787b671525e773357caf9ba094123020516a4b1 Mon Sep 17 00:00:00 2001 From: Joshua Carp Date: Mon, 3 Oct 2016 22:43:22 -0400 Subject: [PATCH] Factor advance logic into helper function. h/t @brendandburns --- pkg/util/jsonpath/parser.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/pkg/util/jsonpath/parser.go b/pkg/util/jsonpath/parser.go index 2883f7897fb..fd13affdfbc 100644 --- a/pkg/util/jsonpath/parser.go +++ b/pkg/util/jsonpath/parser.go @@ -382,16 +382,7 @@ Loop: // parseField scans a field until a terminator func (p *Parser) parseField(cur *ListNode) error { p.consumeText() -Loop: - for { - switch r := p.next(); { - case r == '\\': - p.next() - case isTerminator(r): - p.backup() - break Loop - } - } + for p.advance() {} value := p.consumeText() if value == "*" { cur.append(newWildcard()) @@ -401,6 +392,18 @@ Loop: return p.parseInsideAction(cur) } +// advance scans until next non-escaped terminator +func (p *Parser) advance() bool { + r := p.next() + if r == '\\' { + p.next() + } else if isTerminator(r) { + p.backup() + return false + } + return true +} + // isTerminator reports whether the input is at valid termination character to appear after an identifier. func isTerminator(r rune) bool { if isSpace(r) || isEndOfLine(r) {