Skip to content

Commit 21b70b4

Browse files
committed
Refactoring
1 parent e69a9b4 commit 21b70b4

File tree

1 file changed

+11
-37
lines changed

1 file changed

+11
-37
lines changed

pm/pm.go

+11-37
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,7 @@ func (st *MatchData) setCapture(s, pos int) uint32 {
6464
return v
6565
}
6666

67-
func (st *MatchData) restoreCapture(s int, pos uint32) {
68-
st.captures[s] = pos
69-
}
67+
func (st *MatchData) restoreCapture(s int, pos uint32) { st.captures[s] = pos }
7068

7169
func (st *MatchData) CaptureLength() int { return len(st.captures) }
7270

@@ -81,7 +79,6 @@ func (st *MatchData) Capture(idx int) int { return int(st.captures[idx] >> 1) }
8179
type scannerState struct {
8280
Pos int
8381
started bool
84-
blace int
8582
}
8683

8784
type scanner struct {
@@ -96,7 +93,6 @@ func newScanner(src []byte) *scanner {
9693
State: scannerState{
9794
Pos: 0,
9895
started: false,
99-
blace: 0,
10096
},
10197
saved: scannerState{},
10298
}
@@ -151,21 +147,6 @@ func (sc *scanner) Peek() int {
151147
return ch
152148
}
153149

154-
func (sc *scanner) OpenBlace() {
155-
sc.State.blace++
156-
}
157-
158-
func (sc *scanner) HasUnfinishedBlace() bool {
159-
return sc.State.blace > 0
160-
}
161-
162-
func (sc *scanner) CloseBlace() {
163-
sc.State.blace--
164-
if sc.State.blace < 0 {
165-
panic(newError(sc.State.Pos, "too many ')'"))
166-
}
167-
}
168-
169150
func (sc *scanner) Save() { sc.saved = sc.State }
170151

171152
func (sc *scanner) Restore() { sc.State = sc.saved }
@@ -287,8 +268,7 @@ func (pn *rangeClass) Matches(ch int) bool {
287268

288269
// patterns {{{
289270

290-
type pattern interface {
291-
}
271+
type pattern interface{}
292272

293273
type singlePattern struct {
294274
Class class
@@ -325,26 +305,22 @@ type bracePattern struct {
325305
/* parse {{{ */
326306

327307
func parseClass(sc *scanner, allowset bool) class {
328-
ch := sc.Peek()
308+
ch := sc.Next()
329309
switch ch {
330310
case '%':
331-
sc.Next()
332311
return &singleClass{sc.Next()}
333312
case '.':
334-
sc.Next()
335313
return &dotClass{}
336314
case '[':
337315
if !allowset {
338316
panic(newError(sc.CurrentPos(), "invalid '['"))
339317
}
340-
sc.Next()
341318
return parseClassSet(sc)
342319
//case '^' '$', '(', ')', ']', '*', '+', '-', '?':
343320
// panic(newError(sc.CurrentPos(), "invalid %c", ch))
344321
case _EOS:
345322
panic(newError(sc.CurrentPos(), "unexpected EOS"))
346323
default:
347-
sc.Next()
348324
return &charClass{ch}
349325
}
350326
}
@@ -421,19 +397,23 @@ func parsePattern(sc *scanner, toplevel bool) *seqPattern {
421397
case '.', '[':
422398
pat.Patterns = append(pat.Patterns, &singlePattern{parseClass(sc, true)})
423399
case ']':
424-
panic(newError(sc.CurrentPos(), "invalid '%c'", ch))
400+
panic(newError(sc.CurrentPos(), "invalid ']'"))
425401
case ')':
426-
sc.CloseBlace()
427-
sc.Next()
402+
if toplevel {
403+
panic(newError(sc.CurrentPos(), "invalid ')'"))
404+
}
428405
return pat
429406
case '(':
430407
sc.Next()
431408
if sc.Peek() == ')' {
432409
sc.Next()
433410
pat.Patterns = append(pat.Patterns, &posCapPattern{})
434411
} else {
435-
sc.OpenBlace()
436412
ret := &capPattern{parsePattern(sc, false)}
413+
if sc.Peek() != ')' {
414+
panic(newError(sc.CurrentPos(), "unfinished capture"))
415+
}
416+
sc.Next()
437417
pat.Patterns = append(pat.Patterns, ret)
438418
}
439419
case '*', '+', '-', '?':
@@ -463,12 +443,6 @@ func parsePattern(sc *scanner, toplevel bool) *seqPattern {
463443
}
464444
}
465445
exit:
466-
if toplevel {
467-
if sc.HasUnfinishedBlace() {
468-
panic(newError(sc.CurrentPos(), "unfinished capture"))
469-
}
470-
}
471-
472446
return pat
473447
}
474448

0 commit comments

Comments
 (0)