From 7ce12d1632f42cbf8b7916230f7a61b587f2106a Mon Sep 17 00:00:00 2001 From: Maurice Makaay Date: Sun, 23 Jun 2019 12:06:31 +0000 Subject: [PATCH] A few small changes used for TOML support. --- parse/api.go | 4 ++-- parse/callerinfo.go | 4 ++-- tokenize/callerinfo.go | 4 ++-- tokenize/handlers_builtin.go | 4 +++- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/parse/api.go b/parse/api.go index ab0a3f8..e92712d 100644 --- a/parse/api.go +++ b/parse/api.go @@ -191,10 +191,10 @@ func (p *API) Stop() { // After setting an error, no more calls to API methods are allowed. // Calling a method in this state will result in a panic. // TODO ... wait how do I read the error? I don't I guess, I just return it. Is Error() a good name or SetError() better for example? -func (p *API) Error(format string, args ...interface{}) { +func (p *API) Error(format string, data ...interface{}) { // No call to p.panicWhenStoppedOrInError(), to allow a parser to // set a different error message when needed. - message := fmt.Sprintf(format, args...) + message := fmt.Sprintf(format, data...) p.err = fmt.Errorf("%s at %s", message, *p.tokenAPI.Result().Cursor()) } diff --git a/parse/callerinfo.go b/parse/callerinfo.go index bf06282..cb877ba 100644 --- a/parse/callerinfo.go +++ b/parse/callerinfo.go @@ -30,9 +30,9 @@ func callerFilepos(depth int) string { return fmt.Sprintf("%s:%d", file, line) } -func callerPanic(name, f string, args ...interface{}) { +func callerPanic(name, f string, data ...interface{}) { filepos := callerBefore(name) - m := fmt.Sprintf(f, args...) + m := fmt.Sprintf(f, data...) m = strings.Replace(m, "{caller}", filepos, -1) m = strings.Replace(m, "{name}", name, -1) panic(m) diff --git a/tokenize/callerinfo.go b/tokenize/callerinfo.go index adf650e..bf3cb9e 100644 --- a/tokenize/callerinfo.go +++ b/tokenize/callerinfo.go @@ -6,9 +6,9 @@ import ( "strings" ) -func callerPanic(name, f string, args ...interface{}) { +func callerPanic(name, f string, data ...interface{}) { filepos := callerBefore(name) - m := fmt.Sprintf(f, args...) + m := fmt.Sprintf(f, data...) m = strings.Replace(m, "{caller}", filepos, -1) m = strings.Replace(m, "{name}", name, -1) panic(m) diff --git a/tokenize/handlers_builtin.go b/tokenize/handlers_builtin.go index d01e4dd..d4111f9 100644 --- a/tokenize/handlers_builtin.go +++ b/tokenize/handlers_builtin.go @@ -128,6 +128,7 @@ var A = struct { Digit Handler DigitNotZero Handler Digits Handler + Zero Handler Float Handler Boolean Handler Integer Handler @@ -211,6 +212,7 @@ var A = struct { Digit: MatchDigit(), DigitNotZero: MatchDigitNotZero(), Digits: MatchDigits(), + Zero: MatchRune('0'), Integer: MatchInteger(), Signed: MatchSigned, IntegerBetween: MatchIntegerBetween, @@ -324,7 +326,7 @@ func MatchRune(expected rune) Handler { } // MatchRunes creates a Handler function that checks if the input matches -// one of the provided runes. +// one of the provided runes. The first match counts. func MatchRunes(expected ...rune) Handler { s := string(expected) return MatchRuneByCallback(func(r rune) bool { return strings.ContainsRune(s, r) })