diff --git a/scalameta/tokenizers/shared/src/main/scala/scala/meta/internal/tokenizers/LegacyScanner.scala b/scalameta/tokenizers/shared/src/main/scala/scala/meta/internal/tokenizers/LegacyScanner.scala index 43da6f3d0e..0610ba3849 100644 --- a/scalameta/tokenizers/shared/src/main/scala/scala/meta/internal/tokenizers/LegacyScanner.scala +++ b/scalameta/tokenizers/shared/src/main/scala/scala/meta/internal/tokenizers/LegacyScanner.scala @@ -765,12 +765,12 @@ class LegacyScanner(input: Input, dialect: Dialect) { putChar(ch) nextChar() readDigits(base) - } else if (wasSeparator) { - val pos = if (ch == SU) begCharOffset else begCharOffset - 1 - syntaxError("trailing number separator", at = pos) } else if (isNumberSeparator()) { nextChar() readDigits(base, true) + } else if (wasSeparator) { + val pos = if (ch == SU) begCharOffset else begCharOffset - 1 + syntaxError("trailing number separator", at = pos) } /** diff --git a/tests/shared/src/test/scala/scala/meta/tests/tokenizers/TokenizerSuite.scala b/tests/shared/src/test/scala/scala/meta/tests/tokenizers/TokenizerSuite.scala index acf7822859..48e56d9e24 100644 --- a/tests/shared/src/test/scala/scala/meta/tests/tokenizers/TokenizerSuite.scala +++ b/tests/shared/src/test/scala/scala/meta/tests/tokenizers/TokenizerSuite.scala @@ -1136,7 +1136,17 @@ class TokenizerSuite extends BaseTokenizerSuite { } } - Seq("1_024", "1_024L", "3_14e-2", "3_14E-2_1").foreach { value => + Seq( + "1_024", + "1_024L", + "3_14e-2", + "3_14E-2_1", + "3_14E-1__2", + "0x_1234", + "0b_0101", + "123_456__789", + "0x__123_456__789" + ).foreach { value => test(s"numeric literal separator ok scala213: $value") { dialects.Scala213(value).tokenize.get // no exception } @@ -1191,12 +1201,6 @@ class TokenizerSuite extends BaseTokenizerSuite { |3_14ef | ^""".stripMargin ), - ( - "3_14E-1__2", - """|:1: error: trailing number separator - |3_14E-1__2 - | ^""".stripMargin - ), ( "3_14E-2_", """|:1: error: trailing number separator