Skip to content

Commit ec2ef0b

Browse files
committed
fix receiver of imported and exported functions
fixes: #35420
1 parent 0f5ddd2 commit ec2ef0b

File tree

94 files changed

+220
-192
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+220
-192
lines changed

src/compiler/transformers/module/module.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ namespace ts {
3232
context.onEmitNode = onEmitNode;
3333
context.enableSubstitution(SyntaxKind.Identifier); // Substitutes expression identifiers with imported/exported symbols.
3434
context.enableSubstitution(SyntaxKind.BinaryExpression); // Substitutes assignments to exported symbols.
35+
context.enableSubstitution(SyntaxKind.CallExpression); // Substitutes expression identifiers with imported/exported symbols.
36+
context.enableSubstitution(SyntaxKind.TaggedTemplateExpression); // Substitutes expression identifiers with imported/exported symbols.
3537
context.enableSubstitution(SyntaxKind.PrefixUnaryExpression); // Substitutes updates to exported symbols.
3638
context.enableSubstitution(SyntaxKind.PostfixUnaryExpression); // Substitutes updates to exported symbols.
3739
context.enableSubstitution(SyntaxKind.ShorthandPropertyAssignment); // Substitutes shorthand property assignments for imported/exported symbols.
@@ -1654,6 +1656,10 @@ namespace ts {
16541656
return substituteExpressionIdentifier(<Identifier>node);
16551657
case SyntaxKind.BinaryExpression:
16561658
return substituteBinaryExpression(<BinaryExpression>node);
1659+
case SyntaxKind.CallExpression:
1660+
return substituteCallExpression(<CallExpression>node);
1661+
case SyntaxKind.TaggedTemplateExpression:
1662+
return substituteTaggedTemplateExpression(<TaggedTemplateExpression>node);
16571663
case SyntaxKind.PostfixUnaryExpression:
16581664
case SyntaxKind.PrefixUnaryExpression:
16591665
return substituteUnaryExpression(<PrefixUnaryExpression | PostfixUnaryExpression>node);
@@ -1662,6 +1668,28 @@ namespace ts {
16621668
return node;
16631669
}
16641670

1671+
function substituteCallExpression(node: CallExpression) {
1672+
if (!isIdentifier(node.expression)) {
1673+
return node;
1674+
}
1675+
const newExpression = substituteExpressionIdentifier(node.expression);
1676+
if (newExpression !== node.expression) {
1677+
return updateCall(node, setTextRange(createBinary(createNumericLiteral("0"), SyntaxKind.CommaToken, newExpression), node.expression), /*typeArguments*/ undefined, node.arguments);
1678+
}
1679+
return node;
1680+
}
1681+
1682+
function substituteTaggedTemplateExpression(node: TaggedTemplateExpression) {
1683+
if (!isIdentifier(node.tag)) {
1684+
return node;
1685+
}
1686+
const newTag = substituteExpressionIdentifier(node.tag);
1687+
if (newTag !== node.tag) {
1688+
return updateTaggedTemplate(node, setTextRange(createBinary(createNumericLiteral("0"), SyntaxKind.CommaToken, newTag), node.tag), /*typeArguments*/ undefined, node.template);
1689+
}
1690+
return node;
1691+
}
1692+
16651693
/**
16661694
* Substitution for an Identifier expression that may contain an imported or exported
16671695
* symbol.

src/testRunner/unittests/tsserver/projectReferenceCompileOnSave.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,8 @@ exports.fn3 = fn3;`;
238238
content: `"use strict";
239239
exports.__esModule = true;
240240
var fns_1 = require("../decls/fns");
241-
fns_1.fn1();
242-
fns_1.fn2();
241+
(0, fns_1.fn1)();
242+
(0, fns_1.fn2)();
243243
${appendJs}`
244244
}]
245245
};

tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ exports.vextend = extend;
2828
exports.__esModule = true;
2929
var func_1 = require("./func");
3030
// hover on vextend
31-
exports.a = func_1.vextend({
31+
exports.a = (0, func_1.vextend)({
3232
watch: {
3333
data1: function (val) {
3434
this.data2 = 1;

tests/baselines/reference/allowSyntheticDefaultImportsCanPaintCrossModuleDeclaration.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ exports.__esModule = true;
2222
"use strict";
2323
exports.__esModule = true;
2424
var file1_1 = require("./file1");
25-
exports.A = file1_1.styled();
25+
exports.A = (0, file1_1.styled)();
2626

2727

2828
//// [color.d.ts]

tests/baselines/reference/ambientDeclarationsPatterns.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ foo(fileText);
3737
exports.__esModule = true;
3838
///<reference path="declarations.d.ts" />
3939
var foobarbaz_1 = require("foobarbaz");
40-
foobarbaz_1.foo(foobarbaz_1.baz);
40+
(0, foobarbaz_1.foo)(foobarbaz_1.baz);
4141
var foosball_1 = require("foosball");
42-
foobarbaz_1.foo(foosball_1.foos);
42+
(0, foobarbaz_1.foo)(foosball_1.foos);
4343
// Works with relative file name
4444
var file_text_1 = require("./file!text");
45-
foobarbaz_1.foo(file_text_1["default"]);
45+
(0, foobarbaz_1.foo)(file_text_1["default"]);

tests/baselines/reference/ambientShorthand.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ exports.__esModule = true;
2020
var jquery_1 = require("jquery");
2121
var baz = require("fs");
2222
var boom = require("jquery");
23-
jquery_1["default"](jquery_1.bar, baz, boom);
23+
(0, jquery_1["default"])(jquery_1.bar, baz, boom);

tests/baselines/reference/ambientShorthand_reExport.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ exports.__esModule = true;
3434
var reExportX_1 = require("./reExportX");
3535
var $ = require("./reExportAll");
3636
// '$' is not callable, it is an object.
37-
reExportX_1.x($);
37+
(0, reExportX_1.x)($);

tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ define("Class", ["require", "exports", "Configurable"], function (require, expor
6868
return _super !== null && _super.apply(this, arguments) || this;
6969
}
7070
return ActualClass;
71-
}(Configurable_1.Configurable(HiddenClass)));
71+
}((0, Configurable_1.Configurable)(HiddenClass)));
7272
exports.ActualClass = ActualClass;
7373
});
7474

tests/baselines/reference/anonClassDeclarationEmitIsAnon.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ var __extends = (this && this.__extends) || (function () {
9090
})();
9191
exports.__esModule = true;
9292
var wrapClass_1 = require("./wrapClass");
93-
exports["default"] = wrapClass_1.wrapClass(0);
93+
exports["default"] = (0, wrapClass_1.wrapClass)(0);
9494
// Simple class
9595
var User = /** @class */ (function () {
9696
function User() {
@@ -106,7 +106,7 @@ var TimestampedUser = /** @class */ (function (_super) {
106106
return _super.call(this) || this;
107107
}
108108
return TimestampedUser;
109-
}(wrapClass_1.Timestamped(User)));
109+
}((0, wrapClass_1.Timestamped)(User)));
110110
exports.TimestampedUser = TimestampedUser;
111111

112112

tests/baselines/reference/commonjsSafeImport.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ exports.Foo = Foo;
1818
"use strict";
1919
Object.defineProperty(exports, "__esModule", { value: true });
2020
var _10_lib_1 = require("./10_lib");
21-
_10_lib_1.Foo();
21+
(0, _10_lib_1.Foo)();
2222

2323

2424
//// [10_lib.d.ts]

0 commit comments

Comments
 (0)