From 78ece7bfb1c81207568a83c60cd76d7e61b71482 Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Tue, 2 May 2017 12:02:12 +0900 Subject: [PATCH] direct isInAmbientContext --- src/compiler/binder.ts | 21 +------ .../collisionArgumentsFunction.errors.txt | 15 ++--- .../reference/collisionArgumentsFunction.js | 19 ++----- .../reference/collisionArgumentsInType.js | 2 - .../collisionArgumentsInType.symbols | 57 +++++++++---------- .../reference/collisionArgumentsInType.types | 3 - .../collisionArgumentsInterfaceMembers.js | 2 - ...collisionArgumentsInterfaceMembers.symbols | 51 ++++++++--------- .../collisionArgumentsInterfaceMembers.types | 3 - .../compiler/collisionArgumentsFunction.ts | 15 ++--- .../compiler/collisionArgumentsInType.ts | 1 - .../collisionArgumentsInterfaceMembers.ts | 1 - 12 files changed, 72 insertions(+), 118 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 759e56d449c..562a650a7f0 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -2503,27 +2503,8 @@ namespace ts { } } - function needParameterStrictModeCheck(node: Node) { - if (node.parent.kind === SyntaxKind.ConstructorType || node.parent.kind === SyntaxKind.FunctionType) { - return false; - } - - if (node.parent.parent && ( - node.parent.parent.kind === SyntaxKind.InterfaceDeclaration || - node.parent.parent.kind === SyntaxKind.TypeLiteral - )) { - return false; - } - - if (isDeclarationFile(file) || isInAmbientContext(node)) { - return false; - } - - return true; - } - function bindParameter(node: ParameterDeclaration) { - if (inStrictMode && needParameterStrictModeCheck(node)) { + if (inStrictMode && !isInAmbientContext(node)) { // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) checkStrictModeEvalOrArguments(node, node.name); diff --git a/tests/baselines/reference/collisionArgumentsFunction.errors.txt b/tests/baselines/reference/collisionArgumentsFunction.errors.txt index f5388af6a14..a557e9cbcba 100644 --- a/tests/baselines/reference/collisionArgumentsFunction.errors.txt +++ b/tests/baselines/reference/collisionArgumentsFunction.errors.txt @@ -51,12 +51,9 @@ tests/cases/compiler/collisionArgumentsFunction.ts(30,22): error TS2396: Duplica var arguments: any; // No error } - namespace strict { - "use strict"; - declare function f5(arguments: number, ...rest); // no codegen no error - declare function f5(arguments: string, ...rest); // no codegen no error - declare function f52(i: number, ...arguments); // no codegen no error - declare function f52(i: string, ...arguments); // no codegen no error - declare function f6(arguments: number); // no codegen no error - declare function f6(arguments: string); // no codegen no error - } \ No newline at end of file + declare function f5(arguments: number, ...rest); // no codegen no error + declare function f5(arguments: string, ...rest); // no codegen no error + declare function f52(i: number, ...arguments); // no codegen no error + declare function f52(i: string, ...arguments); // no codegen no error + declare function f6(arguments: number); // no codegen no error + declare function f6(arguments: string); // no codegen no error \ No newline at end of file diff --git a/tests/baselines/reference/collisionArgumentsFunction.js b/tests/baselines/reference/collisionArgumentsFunction.js index 64cd2682a4a..c6a26baa495 100644 --- a/tests/baselines/reference/collisionArgumentsFunction.js +++ b/tests/baselines/reference/collisionArgumentsFunction.js @@ -37,15 +37,12 @@ function f4NoError(arguments: any) { // no error var arguments: any; // No error } -namespace strict { - "use strict"; - declare function f5(arguments: number, ...rest); // no codegen no error - declare function f5(arguments: string, ...rest); // no codegen no error - declare function f52(i: number, ...arguments); // no codegen no error - declare function f52(i: string, ...arguments); // no codegen no error - declare function f6(arguments: number); // no codegen no error - declare function f6(arguments: string); // no codegen no error -} +declare function f5(arguments: number, ...rest); // no codegen no error +declare function f5(arguments: string, ...rest); // no codegen no error +declare function f52(i: number, ...arguments); // no codegen no error +declare function f52(i: string, ...arguments); // no codegen no error +declare function f6(arguments: number); // no codegen no error +declare function f6(arguments: string); // no codegen no error //// [collisionArgumentsFunction.js] // Functions @@ -93,7 +90,3 @@ function f42(i) { function f4NoError(arguments) { var arguments; // No error } -var strict; -(function (strict) { - "use strict"; -})(strict || (strict = {})); diff --git a/tests/baselines/reference/collisionArgumentsInType.js b/tests/baselines/reference/collisionArgumentsInType.js index e9ff629f76e..4db7c930775 100644 --- a/tests/baselines/reference/collisionArgumentsInType.js +++ b/tests/baselines/reference/collisionArgumentsInType.js @@ -1,5 +1,4 @@ //// [collisionArgumentsInType.ts] -"use strict"; var v1: (i: number, ...arguments) => void; // no error - no code gen var v12: (arguments: number, ...restParameters) => void; // no error - no code gen var v2: { @@ -16,7 +15,6 @@ var v21: { } //// [collisionArgumentsInType.js] -"use strict"; var v1; // no error - no code gen var v12; // no error - no code gen var v2; diff --git a/tests/baselines/reference/collisionArgumentsInType.symbols b/tests/baselines/reference/collisionArgumentsInType.symbols index d2ec9ce6705..94c9374c7cd 100644 --- a/tests/baselines/reference/collisionArgumentsInType.symbols +++ b/tests/baselines/reference/collisionArgumentsInType.symbols @@ -1,54 +1,53 @@ === tests/cases/compiler/collisionArgumentsInType.ts === -"use strict"; var v1: (i: number, ...arguments) => void; // no error - no code gen ->v1 : Symbol(v1, Decl(collisionArgumentsInType.ts, 1, 3)) ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 1, 9)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 1, 19)) +>v1 : Symbol(v1, Decl(collisionArgumentsInType.ts, 0, 3)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 0, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 0, 19)) var v12: (arguments: number, ...restParameters) => void; // no error - no code gen ->v12 : Symbol(v12, Decl(collisionArgumentsInType.ts, 2, 3)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 2, 10)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 2, 28)) +>v12 : Symbol(v12, Decl(collisionArgumentsInType.ts, 1, 3)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 1, 10)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 1, 28)) var v2: { ->v2 : Symbol(v2, Decl(collisionArgumentsInType.ts, 3, 3)) +>v2 : Symbol(v2, Decl(collisionArgumentsInType.ts, 2, 3)) (arguments: number, ...restParameters); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 4, 5)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 4, 23)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 3, 5)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 3, 23)) new (arguments: number, ...restParameters); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 5, 9)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 5, 27)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 4, 9)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 4, 27)) foo(arguments: number, ...restParameters); // no error - no code gen ->foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 5, 47)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 6, 8)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 6, 26)) +>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 4, 47)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 5, 8)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 5, 26)) prop: (arguments: number, ...restParameters) => void; // no error - no code gen ->prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 6, 46)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 7, 11)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 7, 29)) +>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 5, 46)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 6, 11)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 6, 29)) } var v21: { ->v21 : Symbol(v21, Decl(collisionArgumentsInType.ts, 9, 3)) +>v21 : Symbol(v21, Decl(collisionArgumentsInType.ts, 8, 3)) (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 10, 5)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 10, 15)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 9, 5)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 9, 15)) new (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 11, 9)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 11, 19)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 10, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 10, 19)) foo(i: number, ...arguments); // no error - no code gen ->foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 11, 34)) ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 12, 8)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 12, 18)) +>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 10, 34)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 11, 8)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 11, 18)) prop: (i: number, ...arguments) => void; // no error - no code gen ->prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 12, 33)) ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 13, 11)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 13, 21)) +>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 11, 33)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 12, 11)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 12, 21)) } diff --git a/tests/baselines/reference/collisionArgumentsInType.types b/tests/baselines/reference/collisionArgumentsInType.types index 7b4c8983b4c..a8096e2e7f5 100644 --- a/tests/baselines/reference/collisionArgumentsInType.types +++ b/tests/baselines/reference/collisionArgumentsInType.types @@ -1,7 +1,4 @@ === tests/cases/compiler/collisionArgumentsInType.ts === -"use strict"; ->"use strict" : "use strict" - var v1: (i: number, ...arguments) => void; // no error - no code gen >v1 : (i: number, ...arguments: any[]) => void >i : number diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.js b/tests/baselines/reference/collisionArgumentsInterfaceMembers.js index 34530ca2c72..a55e112b603 100644 --- a/tests/baselines/reference/collisionArgumentsInterfaceMembers.js +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.js @@ -1,5 +1,4 @@ //// [collisionArgumentsInterfaceMembers.ts] -"use strict"; // call interface i1 { (i: number, ...arguments); // no error - no code gen @@ -30,4 +29,3 @@ interface i3 { } //// [collisionArgumentsInterfaceMembers.js] -"use strict"; diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols b/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols index a7e14b5959e..f0a82bec521 100644 --- a/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols @@ -1,64 +1,63 @@ === tests/cases/compiler/collisionArgumentsInterfaceMembers.ts === -"use strict"; // call interface i1 { ->i1 : Symbol(i1, Decl(collisionArgumentsInterfaceMembers.ts, 0, 13)) +>i1 : Symbol(i1, Decl(collisionArgumentsInterfaceMembers.ts, 0, 0)) (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 3, 5)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 3, 15)) +>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 2, 5)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 2, 15)) } interface i12 { ->i12 : Symbol(i12, Decl(collisionArgumentsInterfaceMembers.ts, 4, 1)) +>i12 : Symbol(i12, Decl(collisionArgumentsInterfaceMembers.ts, 3, 1)) (arguments: number, ...rest); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 6, 5)) ->rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 6, 23)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 5, 5)) +>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 5, 23)) } interface i1NoError { ->i1NoError : Symbol(i1NoError, Decl(collisionArgumentsInterfaceMembers.ts, 7, 1)) +>i1NoError : Symbol(i1NoError, Decl(collisionArgumentsInterfaceMembers.ts, 6, 1)) (arguments: number); // no error ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 9, 5)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 8, 5)) } // new interface i2 { ->i2 : Symbol(i2, Decl(collisionArgumentsInterfaceMembers.ts, 10, 1)) +>i2 : Symbol(i2, Decl(collisionArgumentsInterfaceMembers.ts, 9, 1)) new (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 14, 9)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 14, 19)) +>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 13, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 13, 19)) } interface i21 { ->i21 : Symbol(i21, Decl(collisionArgumentsInterfaceMembers.ts, 15, 1)) +>i21 : Symbol(i21, Decl(collisionArgumentsInterfaceMembers.ts, 14, 1)) new (arguments: number, ...rest); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 17, 9)) ->rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 17, 27)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 16, 9)) +>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 16, 27)) } interface i2NoError { ->i2NoError : Symbol(i2NoError, Decl(collisionArgumentsInterfaceMembers.ts, 18, 1)) +>i2NoError : Symbol(i2NoError, Decl(collisionArgumentsInterfaceMembers.ts, 17, 1)) new (arguments: number); // no error ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 20, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 19, 9)) } // method interface i3 { ->i3 : Symbol(i3, Decl(collisionArgumentsInterfaceMembers.ts, 21, 1)) +>i3 : Symbol(i3, Decl(collisionArgumentsInterfaceMembers.ts, 20, 1)) foo(i: number, ...arguments); // no error - no code gen ->foo : Symbol(i3.foo, Decl(collisionArgumentsInterfaceMembers.ts, 24, 14)) ->i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 25, 8)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 25, 18)) +>foo : Symbol(i3.foo, Decl(collisionArgumentsInterfaceMembers.ts, 23, 14)) +>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 24, 8)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 24, 18)) foo1(arguments: number, ...rest); // no error - no code gen ->foo1 : Symbol(i3.foo1, Decl(collisionArgumentsInterfaceMembers.ts, 25, 33)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 26, 9)) ->rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 26, 27)) +>foo1 : Symbol(i3.foo1, Decl(collisionArgumentsInterfaceMembers.ts, 24, 33)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 25, 9)) +>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 25, 27)) fooNoError(arguments: number); // no error ->fooNoError : Symbol(i3.fooNoError, Decl(collisionArgumentsInterfaceMembers.ts, 26, 37)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 27, 15)) +>fooNoError : Symbol(i3.fooNoError, Decl(collisionArgumentsInterfaceMembers.ts, 25, 37)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 26, 15)) } diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.types b/tests/baselines/reference/collisionArgumentsInterfaceMembers.types index 3563a25b0bd..6edb0a7ebed 100644 --- a/tests/baselines/reference/collisionArgumentsInterfaceMembers.types +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.types @@ -1,7 +1,4 @@ === tests/cases/compiler/collisionArgumentsInterfaceMembers.ts === -"use strict"; ->"use strict" : "use strict" - // call interface i1 { >i1 : i1 diff --git a/tests/cases/compiler/collisionArgumentsFunction.ts b/tests/cases/compiler/collisionArgumentsFunction.ts index d5136d9169a..b90dee9ec11 100644 --- a/tests/cases/compiler/collisionArgumentsFunction.ts +++ b/tests/cases/compiler/collisionArgumentsFunction.ts @@ -36,12 +36,9 @@ function f4NoError(arguments: any) { // no error var arguments: any; // No error } -namespace strict { - "use strict"; - declare function f5(arguments: number, ...rest); // no codegen no error - declare function f5(arguments: string, ...rest); // no codegen no error - declare function f52(i: number, ...arguments); // no codegen no error - declare function f52(i: string, ...arguments); // no codegen no error - declare function f6(arguments: number); // no codegen no error - declare function f6(arguments: string); // no codegen no error -} \ No newline at end of file +declare function f5(arguments: number, ...rest); // no codegen no error +declare function f5(arguments: string, ...rest); // no codegen no error +declare function f52(i: number, ...arguments); // no codegen no error +declare function f52(i: string, ...arguments); // no codegen no error +declare function f6(arguments: number); // no codegen no error +declare function f6(arguments: string); // no codegen no error \ No newline at end of file diff --git a/tests/cases/compiler/collisionArgumentsInType.ts b/tests/cases/compiler/collisionArgumentsInType.ts index 13785ef669d..c9354ba0bae 100644 --- a/tests/cases/compiler/collisionArgumentsInType.ts +++ b/tests/cases/compiler/collisionArgumentsInType.ts @@ -1,4 +1,3 @@ -"use strict"; var v1: (i: number, ...arguments) => void; // no error - no code gen var v12: (arguments: number, ...restParameters) => void; // no error - no code gen var v2: { diff --git a/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts b/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts index 87b6b4503ac..bfb280116e4 100644 --- a/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts +++ b/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts @@ -1,4 +1,3 @@ -"use strict"; // call interface i1 { (i: number, ...arguments); // no error - no code gen