diff --git a/src/text/scanner/scanner.go b/src/text/scanner/scanner.go index 8db0ed28d3..fa5a0cd70d 100644 --- a/src/text/scanner/scanner.go +++ b/src/text/scanner/scanner.go @@ -59,16 +59,16 @@ func (pos Position) String() string { // "foo" is scanned as the token sequence '"' Ident '"'. // const ( - ScanIdents = 1 << -Ident - ScanInts = 1 << -Int - ScanFloats = 1 << -Float // includes Ints and hexadecimal floats - ScanChars = 1 << -Char - ScanStrings = 1 << -String - ScanRawStrings = 1 << -RawString - ScanComments = 1 << -Comment - SkipComments = 1 << -skipComment // if set with ScanComments, comments become white space - AllowNumberbars = 1 << -allowNumberbars // if set, number literals may contain underbars as digit separators - GoTokens = ScanIdents | ScanFloats | ScanChars | ScanStrings | ScanRawStrings | ScanComments | SkipComments | AllowNumberbars + ScanIdents = 1 << -Ident + ScanInts = 1 << -Int + ScanFloats = 1 << -Float // includes Ints and hexadecimal floats + ScanChars = 1 << -Char + ScanStrings = 1 << -String + ScanRawStrings = 1 << -RawString + ScanComments = 1 << -Comment + SkipComments = 1 << -skipComment // if set with ScanComments, comments become white space + AllowDigitSeparators = 1 << -allowDigitSeparators // if set, number literals may contain underscores as digit separators + GoTokens = ScanIdents | ScanFloats | ScanChars | ScanStrings | ScanRawStrings | ScanComments | SkipComments | AllowDigitSeparators ) // The result of Scan is one of these tokens or a Unicode character. @@ -84,7 +84,7 @@ const ( // internal use only skipComment - allowNumberbars + allowDigitSeparators ) var tokenString = map[rune]string{ @@ -363,8 +363,8 @@ func lower(ch rune) rune { return ('a' - 'A') | ch } // returns lower-case c func isDecimal(ch rune) bool { return '0' <= ch && ch <= '9' } func isHex(ch rune) bool { return '0' <= ch && ch <= '9' || 'a' <= lower(ch) && lower(ch) <= 'f' } -// digits accepts the sequence { digit } (if AllowNumberbars is not set) -// or { digit | '_' } (if AllowNumberbars is set), starting with ch0. +// digits accepts the sequence { digit } (if AllowDigitSeparators is not set) +// or { digit | '_' } (if AllowDigitSeparators is set), starting with ch0. // If base <= 10, digits accepts any decimal digit but records // the first invalid digit >= base in *invalid if *invalid == 0. // digits returns the first rune that is not part of the sequence @@ -374,7 +374,7 @@ func (s *Scanner) digits(ch0 rune, base int, invalid *rune) (ch rune, digsep int ch = ch0 if base <= 10 { max := rune('0' + base) - for isDecimal(ch) || ch == '_' && s.Mode&AllowNumberbars != 0 { + for isDecimal(ch) || ch == '_' && s.Mode&AllowDigitSeparators != 0 { ds := 1 if ch == '_' { ds = 2 @@ -385,7 +385,7 @@ func (s *Scanner) digits(ch0 rune, base int, invalid *rune) (ch rune, digsep int ch = s.next() } } else { - for isHex(ch) || ch == '_' && s.Mode&AllowNumberbars != 0 { + for isHex(ch) || ch == '_' && s.Mode&AllowDigitSeparators != 0 { ds := 1 if ch == '_' { ds = 2 diff --git a/src/text/scanner/scanner_test.go b/src/text/scanner/scanner_test.go index 6ae8fd9a08..fb68106c16 100644 --- a/src/text/scanner/scanner_test.go +++ b/src/text/scanner/scanner_test.go @@ -887,7 +887,7 @@ func TestIssue30320(t *testing.T) { {"foo0/12/0/5.67", "0 12 0 5 67", ScanInts}, {"xxx1e0yyy", "1 0", ScanInts}, {"1_2", "1 2", ScanInts}, // don't consume _ as part of a number if not explicitly enabled - {"1_2", "1_2", ScanInts | AllowNumberbars}, + {"1_2", "1_2", ScanInts | AllowDigitSeparators}, {"xxx1.0yyy2e3ee", "1 0 2 3", ScanInts}, {"xxx1.0yyy2e3ee", "1.0 2e3", ScanFloats}, } {