diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index b55fd53e0cc..45723de983d 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -757,6 +757,9 @@ module ts { Debug.assert(base !== 2 || base !== 8, "Expected either base 2 or base 8"); var value = 0; + // For counting number of digits; Valid binaryIntegerLiteral must have at least one binary digit following B or b. + // Similarly valid octalIntegerLiteral must have at least one octal digit following o or O. + var numberOfDigits = 0; while (true) { var ch = text.charCodeAt(pos); var valueOfCh = ch - CharacterCodes._0; @@ -765,6 +768,11 @@ module ts { } value = value * base + valueOfCh; pos++; + numberOfDigits++; + } + // Invalid binaryIntegerLiteral or octalIntegerLiteral + if (numberOfDigits === 0) { + return -1; } return value; } diff --git a/tests/cases/conformance/es6/binaryAndOctalIntegerLiteral/invalidBinaryIntegerLiteralAndOctalIntegerLiteral.ts b/tests/cases/conformance/es6/binaryAndOctalIntegerLiteral/invalidBinaryIntegerLiteralAndOctalIntegerLiteral.ts new file mode 100644 index 00000000000..850b71c6702 --- /dev/null +++ b/tests/cases/conformance/es6/binaryAndOctalIntegerLiteral/invalidBinaryIntegerLiteralAndOctalIntegerLiteral.ts @@ -0,0 +1,5 @@ +// Error +var binary = 0b21010; +var binary1 = 0B21010; +var octal = 0o81010; +var octal = 0O91010; \ No newline at end of file