From cfda7df900568c38e82dddec8b4cff17352f9f05 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Tue, 31 Mar 2015 17:35:26 -0700 Subject: [PATCH] revert fix for #2456 'Import namespace exports should be immutable' --- src/compiler/checker.ts | 21 ---- ...externalModuleImmutableBindings.errors.txt | 104 ++---------------- .../externalModuleImmutableBindings.js | 3 + .../externalModuleImmutableBindings.ts | 2 + 4 files changed, 16 insertions(+), 114 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f59aaa6449..c0b5fe6669 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7354,23 +7354,6 @@ module ts { } } - function isImportedNameFromExternalModule(n: Node): boolean { - switch (n.kind) { - case SyntaxKind.ElementAccessExpression: - case SyntaxKind.PropertyAccessExpression: { - // all bindings for external module should be immutable - // so attempt to use a.b or a[b] as lhs will always fail - // no matter what b is - let symbol = findSymbol((n).expression); - return symbol && symbol.flags & SymbolFlags.Alias && isExternalModuleSymbol(resolveAlias(symbol)); - } - case SyntaxKind.ParenthesizedExpression: - return isImportedNameFromExternalModule((n).expression); - default: - return false; - } - } - if (!isReferenceOrErrorExpression(n)) { error(n, invalidReferenceMessage); return false; @@ -7381,10 +7364,6 @@ module ts { return false; } - if (isImportedNameFromExternalModule(n)) { - error(n, invalidReferenceMessage); - } - return true; } diff --git a/tests/baselines/reference/externalModuleImmutableBindings.errors.txt b/tests/baselines/reference/externalModuleImmutableBindings.errors.txt index 09cc7b3329..8ab07c2685 100644 --- a/tests/baselines/reference/externalModuleImmutableBindings.errors.txt +++ b/tests/baselines/reference/externalModuleImmutableBindings.errors.txt @@ -1,164 +1,82 @@ -tests/cases/compiler/f2.ts(5,1): error TS2364: Invalid left-hand side of assignment expression. -tests/cases/compiler/f2.ts(6,1): error TS2364: Invalid left-hand side of assignment expression. -tests/cases/compiler/f2.ts(7,1): error TS2364: Invalid left-hand side of assignment expression. -tests/cases/compiler/f2.ts(7,7): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. -tests/cases/compiler/f2.ts(8,1): error TS2364: Invalid left-hand side of assignment expression. -tests/cases/compiler/f2.ts(10,1): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. -tests/cases/compiler/f2.ts(11,1): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. -tests/cases/compiler/f2.ts(12,1): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. -tests/cases/compiler/f2.ts(13,1): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. -tests/cases/compiler/f2.ts(15,1): error TS2364: Invalid left-hand side of assignment expression. -tests/cases/compiler/f2.ts(16,1): error TS2364: Invalid left-hand side of assignment expression. -tests/cases/compiler/f2.ts(17,1): error TS2364: Invalid left-hand side of assignment expression. -tests/cases/compiler/f2.ts(17,8): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. -tests/cases/compiler/f2.ts(18,1): error TS2364: Invalid left-hand side of assignment expression. -tests/cases/compiler/f2.ts(20,1): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. -tests/cases/compiler/f2.ts(21,1): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. -tests/cases/compiler/f2.ts(22,1): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. -tests/cases/compiler/f2.ts(23,1): error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. -tests/cases/compiler/f2.ts(25,6): error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. -tests/cases/compiler/f2.ts(26,6): error TS2487: Invalid left-hand side in 'for...of' statement. +tests/cases/compiler/f2.ts(9,7): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. +tests/cases/compiler/f2.ts(19,8): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. tests/cases/compiler/f2.ts(27,6): error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. -tests/cases/compiler/f2.ts(28,6): error TS2487: Invalid left-hand side in 'for...of' statement. -tests/cases/compiler/f2.ts(29,6): error TS2406: Invalid left-hand side in 'for...in' statement. -tests/cases/compiler/f2.ts(29,12): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. -tests/cases/compiler/f2.ts(30,6): error TS2487: Invalid left-hand side in 'for...of' statement. -tests/cases/compiler/f2.ts(30,12): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. -tests/cases/compiler/f2.ts(31,6): error TS2406: Invalid left-hand side in 'for...in' statement. -tests/cases/compiler/f2.ts(32,6): error TS2487: Invalid left-hand side in 'for...of' statement. -tests/cases/compiler/f2.ts(34,6): error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. -tests/cases/compiler/f2.ts(35,6): error TS2487: Invalid left-hand side in 'for...of' statement. +tests/cases/compiler/f2.ts(29,6): error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. +tests/cases/compiler/f2.ts(31,12): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. +tests/cases/compiler/f2.ts(32,12): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. tests/cases/compiler/f2.ts(36,6): error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. -tests/cases/compiler/f2.ts(37,6): error TS2487: Invalid left-hand side in 'for...of' statement. -tests/cases/compiler/f2.ts(38,6): error TS2406: Invalid left-hand side in 'for...in' statement. -tests/cases/compiler/f2.ts(38,13): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. -tests/cases/compiler/f2.ts(39,6): error TS2487: Invalid left-hand side in 'for...of' statement. -tests/cases/compiler/f2.ts(39,13): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. -tests/cases/compiler/f2.ts(40,6): error TS2406: Invalid left-hand side in 'for...in' statement. -tests/cases/compiler/f2.ts(41,6): error TS2487: Invalid left-hand side in 'for...of' statement. +tests/cases/compiler/f2.ts(38,6): error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. +tests/cases/compiler/f2.ts(40,13): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. +tests/cases/compiler/f2.ts(41,13): error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. ==== tests/cases/compiler/f1.ts (0 errors) ==== export var x = 1; -==== tests/cases/compiler/f2.ts (38 errors) ==== +==== tests/cases/compiler/f2.ts (10 errors) ==== + + // all mutations below are illegal and should be fixed import * as stuff from 'f1'; var n = 'baz'; stuff.x = 0; - ~~~~~~~ -!!! error TS2364: Invalid left-hand side of assignment expression. stuff['x'] = 1; - ~~~~~~~~~~ -!!! error TS2364: Invalid left-hand side of assignment expression. stuff.blah = 2; - ~~~~~~~~~~ -!!! error TS2364: Invalid left-hand side of assignment expression. ~~~~ !!! error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. stuff[n] = 3; - ~~~~~~~~ -!!! error TS2364: Invalid left-hand side of assignment expression. stuff.x++; - ~~~~~~~ -!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. stuff['x']++; - ~~~~~~~~~~ -!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. stuff['blah']++; - ~~~~~~~~~~~~~ -!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. stuff[n]++; - ~~~~~~~~ -!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. (stuff.x) = 0; - ~~~~~~~~~ -!!! error TS2364: Invalid left-hand side of assignment expression. (stuff['x']) = 1; - ~~~~~~~~~~~~ -!!! error TS2364: Invalid left-hand side of assignment expression. (stuff.blah) = 2; - ~~~~~~~~~~~~ -!!! error TS2364: Invalid left-hand side of assignment expression. ~~~~ !!! error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. (stuff[n]) = 3; - ~~~~~~~~~~ -!!! error TS2364: Invalid left-hand side of assignment expression. (stuff.x)++; - ~~~~~~~~~ -!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. (stuff['x'])++; - ~~~~~~~~~~~~ -!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. (stuff['blah'])++; - ~~~~~~~~~~~~~~~ -!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. (stuff[n])++; - ~~~~~~~~~~ -!!! error TS2357: The operand of an increment or decrement operator must be a variable, property or indexer. for (stuff.x in []) {} ~~~~~~~ !!! error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. for (stuff.x of []) {} - ~~~~~~~ -!!! error TS2487: Invalid left-hand side in 'for...of' statement. for (stuff['x'] in []) {} ~~~~~~~~~~ !!! error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. for (stuff['x'] of []) {} - ~~~~~~~~~~ -!!! error TS2487: Invalid left-hand side in 'for...of' statement. for (stuff.blah in []) {} - ~~~~~~~~~~ -!!! error TS2406: Invalid left-hand side in 'for...in' statement. ~~~~ !!! error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. for (stuff.blah of []) {} - ~~~~~~~~~~ -!!! error TS2487: Invalid left-hand side in 'for...of' statement. ~~~~ !!! error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. for (stuff[n] in []) {} - ~~~~~~~~ -!!! error TS2406: Invalid left-hand side in 'for...in' statement. for (stuff[n] of []) {} - ~~~~~~~~ -!!! error TS2487: Invalid left-hand side in 'for...of' statement. for ((stuff.x) in []) {} ~~~~~~~~~ !!! error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. for ((stuff.x) of []) {} - ~~~~~~~~~ -!!! error TS2487: Invalid left-hand side in 'for...of' statement. for ((stuff['x']) in []) {} ~~~~~~~~~~~~ !!! error TS2405: The left-hand side of a 'for...in' statement must be of type 'string' or 'any'. for ((stuff['x']) of []) {} - ~~~~~~~~~~~~ -!!! error TS2487: Invalid left-hand side in 'for...of' statement. for ((stuff.blah) in []) {} - ~~~~~~~~~~~~ -!!! error TS2406: Invalid left-hand side in 'for...in' statement. ~~~~ !!! error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. for ((stuff.blah) of []) {} - ~~~~~~~~~~~~ -!!! error TS2487: Invalid left-hand side in 'for...of' statement. ~~~~ !!! error TS2339: Property 'blah' does not exist on type 'typeof "tests/cases/compiler/f1"'. for ((stuff[n]) in []) {} - ~~~~~~~~~~ -!!! error TS2406: Invalid left-hand side in 'for...in' statement. for ((stuff[n]) of []) {} - ~~~~~~~~~~ -!!! error TS2487: Invalid left-hand side in 'for...of' statement. \ No newline at end of file diff --git a/tests/baselines/reference/externalModuleImmutableBindings.js b/tests/baselines/reference/externalModuleImmutableBindings.js index ed9b4c00af..5e5ba6c229 100644 --- a/tests/baselines/reference/externalModuleImmutableBindings.js +++ b/tests/baselines/reference/externalModuleImmutableBindings.js @@ -4,6 +4,8 @@ export var x = 1; //// [f2.ts] + +// all mutations below are illegal and should be fixed import * as stuff from 'f1'; var n = 'baz'; @@ -52,6 +54,7 @@ for ((stuff[n]) of []) {} //// [f1.js] exports.x = 1; //// [f2.js] +// all mutations below are illegal and should be fixed var stuff = require('f1'); var n = 'baz'; stuff.x = 0; diff --git a/tests/cases/compiler/externalModuleImmutableBindings.ts b/tests/cases/compiler/externalModuleImmutableBindings.ts index 9ed3d278a3..2321961f6f 100644 --- a/tests/cases/compiler/externalModuleImmutableBindings.ts +++ b/tests/cases/compiler/externalModuleImmutableBindings.ts @@ -3,6 +3,8 @@ export var x = 1; // @Filename: f2.ts + +// all mutations below are illegal and should be fixed import * as stuff from 'f1'; var n = 'baz';