Move octal checks to the grammar checker.
This commit is contained in:
parent
385fdd5eb2
commit
75977add21
5 changed files with 71 additions and 18 deletions
|
@ -1403,16 +1403,11 @@ module ts {
|
|||
// never get a token like this. Instead, we would get 00 and 9 as two separate tokens.
|
||||
// We also do not need to check for negatives because any prefix operator would be part of a
|
||||
// parent unary expression.
|
||||
if (node.kind === SyntaxKind.NumericLiteral
|
||||
&& sourceText.charCodeAt(tokenPos) === CharacterCodes._0
|
||||
&& isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) {
|
||||
if (node.kind === SyntaxKind.NumericLiteral &&
|
||||
sourceText.charCodeAt(tokenPos) === CharacterCodes._0 &&
|
||||
isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) {
|
||||
|
||||
if (isInStrictMode) {
|
||||
grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode);
|
||||
}
|
||||
else if (languageVersion >= ScriptTarget.ES5) {
|
||||
grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher);
|
||||
}
|
||||
node.flags |= NodeFlags.OctalLiteral;
|
||||
}
|
||||
|
||||
return node;
|
||||
|
@ -3764,6 +3759,7 @@ module ts {
|
|||
case SyntaxKind.ModuleDeclaration: return visitModuleDeclaration(<ModuleDeclaration>node);
|
||||
case SyntaxKind.NewExpression: return visitNewExpression(<NewExpression>node);
|
||||
case SyntaxKind.ObjectLiteral: return visitObjectLiteral(<ObjectLiteral>node);
|
||||
case SyntaxKind.NumericLiteral: return visitNumericLiteral(<LiteralExpression>node);
|
||||
case SyntaxKind.Parameter: return visitParameter(<ParameterDeclaration>node);
|
||||
case SyntaxKind.PostfixOperator: return visitPostfixOperator(<UnaryExpression>node);
|
||||
case SyntaxKind.PrefixOperator: return visitPrefixOperator(<UnaryExpression>node);
|
||||
|
@ -4262,6 +4258,17 @@ module ts {
|
|||
});
|
||||
}
|
||||
|
||||
function visitNumericLiteral(node: LiteralExpression): void {
|
||||
if (node.flags & NodeFlags.OctalLiteral) {
|
||||
if (node.flags & NodeFlags.ParsedInStrictMode) {
|
||||
grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode);
|
||||
}
|
||||
else if (languageVersion >= ScriptTarget.ES5) {
|
||||
grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function visitParameter(node: ParameterDeclaration): void {
|
||||
checkParameterName(node);
|
||||
}
|
||||
|
|
|
@ -273,6 +273,7 @@ module ts {
|
|||
// Set if this node was parsed in strict mode. Used for grammar error checks, as well as
|
||||
// checking if the node can be reused in incremental settings.
|
||||
ParsedInStrictMode = 0x00002000,
|
||||
OctalLiteral = 0x00004000,
|
||||
|
||||
Modifier = Export | Ambient | Public | Private | Protected | Static,
|
||||
AccessibilityModifier = Public | Private | Protected,
|
||||
|
|
|
@ -1,5 +1,22 @@
|
|||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(17,19): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(23,22): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(24,23): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(25,22): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(26,25): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(27,23): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(28,22): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(29,24): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(30,24): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(31,24): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(32,25): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,25): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,23): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,23): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,23): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,23): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(38,27): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,26): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(40,46): error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(3,12): error TS2300: Duplicate identifier 'a'.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(3,18): error TS2300: Duplicate identifier 'a'.
|
||||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(4,12): error TS2300: Duplicate identifier 'a'.
|
||||
|
@ -79,7 +96,7 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,12)
|
|||
tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51): error TS2380: 'get' and 'set' accessor must have the same type.
|
||||
|
||||
|
||||
==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (79 errors) ====
|
||||
==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (96 errors) ====
|
||||
|
||||
// Multiple properties with the same name
|
||||
var e1 = { a: 0, a: 0 };
|
||||
|
@ -177,71 +194,99 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51)
|
|||
|
||||
// Accessor and property with the same name
|
||||
var f1 = { a: 0, get a() { return 0; } };
|
||||
~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
var f2 = { a: '', get a() { return ''; } };
|
||||
~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
var f3 = { a: 0, get a() { return ''; } };
|
||||
~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
var f4 = { a: true, get a() { return false; } };
|
||||
~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
var f5 = { a: {}, get a() { return {}; } };
|
||||
~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
var f6 = { a: 0, get 'a'() { return 0; } };
|
||||
~~~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier ''a''.
|
||||
var f7 = { 'a': 0, get a() { return 0; } };
|
||||
~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier ''a''.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
var f8 = { 'a': 0, get "a"() { return 0; } };
|
||||
~~~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier ''a''.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier '"a"'.
|
||||
var f9 = { 'a': 0, get 'a'() { return 0; } };
|
||||
~~~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier ''a''.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier ''a''.
|
||||
var f10 = { "a": 0, get 'a'() { return 0; } };
|
||||
~~~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier '"a"'.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier ''a''.
|
||||
var f11 = { 1.0: 0, get '1'() { return 0; } };
|
||||
~~~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier '1.0'.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier ''1''.
|
||||
var f12 = { 0: 0, get 0() { return 0; } };
|
||||
~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier '0'.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier '0'.
|
||||
var f13 = { 0: 0, get 0() { return 0; } };
|
||||
~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier '0'.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier '0'.
|
||||
var f14 = { 0: 0, get 0x0() { return 0; } };
|
||||
~~~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier '0'.
|
||||
~~~
|
||||
|
@ -254,16 +299,22 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51)
|
|||
~~~
|
||||
!!! error TS2300: Duplicate identifier '000'.
|
||||
var f15 = { "100": 0, get 1e2() { return 0; } };
|
||||
~~~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~~~~~
|
||||
!!! error TS2300: Duplicate identifier '"100"'.
|
||||
~~~
|
||||
!!! error TS2300: Duplicate identifier '1e2'.
|
||||
var f16 = { 0x20: 0, get 3.2e1() { return 0; } };
|
||||
~~~~~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~~~~
|
||||
!!! error TS2300: Duplicate identifier '0x20'.
|
||||
~~~~~
|
||||
!!! error TS2300: Duplicate identifier '3.2e1'.
|
||||
var f17 = { a: 0, get b() { return 1; }, get a() { return 0; } };
|
||||
~
|
||||
!!! error TS1119: An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! error TS2300: Duplicate identifier 'a'.
|
||||
~
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral3.ts(1,1): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher.
|
||||
tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral3.ts(1,3): error TS1005: ';' expected.
|
||||
|
||||
|
||||
==== tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral3.ts (2 errors) ====
|
||||
==== tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral3.ts (1 errors) ====
|
||||
01.0
|
||||
~~
|
||||
!!! error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher.
|
||||
~~
|
||||
!!! error TS1005: ';' expected.
|
|
@ -1,10 +1,7 @@
|
|||
tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral9.ts(1,1): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher.
|
||||
tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral9.ts(1,3): error TS1005: ';' expected.
|
||||
|
||||
|
||||
==== tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral9.ts (2 errors) ====
|
||||
==== tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral9.ts (1 errors) ====
|
||||
009
|
||||
~~
|
||||
!!! error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher.
|
||||
~
|
||||
!!! error TS1005: ';' expected.
|
Loading…
Reference in a new issue