From afd5376c8d7380e0d29f227597501d4be177deab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alu=C3=ADsio=20Augusto=20Silva=20Gon=C3=A7alves?= Date: Mon, 12 Jan 2015 12:29:37 -0200 Subject: [PATCH] Whitelist constructors aliasable to core-js Expand the list of identifiers for which we substitute `_core.` for ``. Also an alternative fix for #421. --- .../transformers/optional-core-aliasing.js | 14 ++++++++++++-- .../aliased-constructors/actual.js | 7 +++++++ .../expected.js | 7 ++++++- .../ignore-natives/actual.js | 1 - .../ignore-natives/expected.js | 9 --------- .../optional-core-aliasing/map-symbol/actual.js | 2 -- 6 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 test/fixtures/transformation/optional-core-aliasing/aliased-constructors/actual.js rename test/fixtures/transformation/optional-core-aliasing/{map-symbol => aliased-constructors}/expected.js (70%) delete mode 100644 test/fixtures/transformation/optional-core-aliasing/ignore-natives/actual.js delete mode 100644 test/fixtures/transformation/optional-core-aliasing/ignore-natives/expected.js delete mode 100644 test/fixtures/transformation/optional-core-aliasing/map-symbol/actual.js diff --git a/lib/6to5/transformation/transformers/optional-core-aliasing.js b/lib/6to5/transformation/transformers/optional-core-aliasing.js index 806ddb5cfb..6f97bd2c99 100644 --- a/lib/6to5/transformation/transformers/optional-core-aliasing.js +++ b/lib/6to5/transformation/transformers/optional-core-aliasing.js @@ -8,6 +8,16 @@ var coreHas = function (node) { return node.name !== "_" && _.has(core, node.name); }; +var ALIASABLE_CONSTRUCTORS = [ + "Symbol", + "Promise", + "Map", + "WeakMap", + "Set", + "WeakSet", + "Dict", +]; + exports.optional = true; exports.ast = { @@ -31,8 +41,8 @@ exports.ast = { this.skip(); return t.prependToMemberExpression(node, file._coreId); } - } else if (t.isIdentifier(node) && !t.isMemberExpression(parent) && t.isReferenced(node, parent) && node.name === "Symbol") { - // new Symbol -> new _core.Symbol + } else if (t.isIdentifier(node) && !t.isMemberExpression(parent) && t.isReferenced(node, parent) && _.contains(ALIASABLE_CONSTRUCTORS, node.name)) { + // Symbol() -> _core.Symbol(); new Promise -> new _core.Promise return t.memberExpression(file._coreId, node); } else if (t.isCallExpression(node)) { // arr[Symbol.iterator]() -> _core.$for.getIterator(arr) diff --git a/test/fixtures/transformation/optional-core-aliasing/aliased-constructors/actual.js b/test/fixtures/transformation/optional-core-aliasing/aliased-constructors/actual.js new file mode 100644 index 0000000000..b7c61b92b0 --- /dev/null +++ b/test/fixtures/transformation/optional-core-aliasing/aliased-constructors/actual.js @@ -0,0 +1,7 @@ +obj.constructor === Object; +obj.constructor === Promise; + +Symbol(); +Symbol("test"); + +new Map(); diff --git a/test/fixtures/transformation/optional-core-aliasing/map-symbol/expected.js b/test/fixtures/transformation/optional-core-aliasing/aliased-constructors/expected.js similarity index 70% rename from test/fixtures/transformation/optional-core-aliasing/map-symbol/expected.js rename to test/fixtures/transformation/optional-core-aliasing/aliased-constructors/expected.js index d67311567b..7c6e3f9ba2 100644 --- a/test/fixtures/transformation/optional-core-aliasing/map-symbol/expected.js +++ b/test/fixtures/transformation/optional-core-aliasing/aliased-constructors/expected.js @@ -6,5 +6,10 @@ var _interopRequire = function (obj) { var _core = _interopRequire(require("core-js/library")); -_core.Symbol("test"); +obj.constructor === Object; +obj.constructor === _core.Promise; + _core.Symbol(); +_core.Symbol("test"); + +new _core.Map(); diff --git a/test/fixtures/transformation/optional-core-aliasing/ignore-natives/actual.js b/test/fixtures/transformation/optional-core-aliasing/ignore-natives/actual.js deleted file mode 100644 index 60fe1ccd57..0000000000 --- a/test/fixtures/transformation/optional-core-aliasing/ignore-natives/actual.js +++ /dev/null @@ -1 +0,0 @@ -obj.constructor === Object; diff --git a/test/fixtures/transformation/optional-core-aliasing/ignore-natives/expected.js b/test/fixtures/transformation/optional-core-aliasing/ignore-natives/expected.js deleted file mode 100644 index 9ce5ba07b1..0000000000 --- a/test/fixtures/transformation/optional-core-aliasing/ignore-natives/expected.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -var _interopRequire = function (obj) { - return obj && (obj["default"] || obj); -}; - -var _core = _interopRequire(require("core-js/library")); - -obj.constructor === Object; diff --git a/test/fixtures/transformation/optional-core-aliasing/map-symbol/actual.js b/test/fixtures/transformation/optional-core-aliasing/map-symbol/actual.js deleted file mode 100644 index 5ebaadcd41..0000000000 --- a/test/fixtures/transformation/optional-core-aliasing/map-symbol/actual.js +++ /dev/null @@ -1,2 +0,0 @@ -Symbol("test"); -Symbol();