From 57d2323ae91d3bc3887acefd7ce74e34f8784743 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 28 Jul 2015 01:19:59 +0100 Subject: [PATCH 1/6] deopt on binding identifiers with same rest name - fixes #2091 --- .../transformers/es6/parameters/rest.js | 12 ++++++++++++ .../rest-binding-deoptimisation/actal.js | 1 + .../rest-binding-deoptimisation/expected.js | 9 +++++++++ 3 files changed, 22 insertions(+) create mode 100644 packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actal.js create mode 100644 packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/expected.js diff --git a/packages/babel/src/transformation/transformers/es6/parameters/rest.js b/packages/babel/src/transformation/transformers/es6/parameters/rest.js index 963e070d17..5388a37a8e 100644 --- a/packages/babel/src/transformation/transformers/es6/parameters/rest.js +++ b/packages/babel/src/transformation/transformers/es6/parameters/rest.js @@ -78,6 +78,18 @@ var memberExpressionOptimisationVisitor = { state.references.push(this); } + }, + + /** + * Deopt on use of a binding identifier with the same name as our rest param. + * + * See https://github.com/babel/babel/issues/2091 + */ + + BindingIdentifier(node, parent, scope, state) { + if (node.name === state.name) { + state.deopted = true; + } } }; diff --git a/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actal.js b/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actal.js new file mode 100644 index 0000000000..43adbba736 --- /dev/null +++ b/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actal.js @@ -0,0 +1 @@ +const deepAssign = (...args) => args = []; diff --git a/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/expected.js b/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/expected.js new file mode 100644 index 0000000000..b5288257f7 --- /dev/null +++ b/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/expected.js @@ -0,0 +1,9 @@ +"use strict"; + +var deepAssign = function deepAssign() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return args = []; +}; From 27c068874265a1a0ad47c52ad5332c2bf1593d8b Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 28 Jul 2015 01:21:23 +0100 Subject: [PATCH 2/6] check if options are nully instead of falsy - fixes #2079 --- packages/babel/src/transformation/modules/_default.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/babel/src/transformation/modules/_default.js b/packages/babel/src/transformation/modules/_default.js index 48c9af8331..940e10e3ef 100644 --- a/packages/babel/src/transformation/modules/_default.js +++ b/packages/babel/src/transformation/modules/_default.js @@ -333,14 +333,14 @@ export default class DefaultFormatter { getModuleName() { var opts = this.file.opts; // moduleId is n/a if a `getModuleId()` is provided - if (opts.moduleId && !opts.getModuleId) { + if (opts.moduleId != null && !opts.getModuleId) { return opts.moduleId; } var filenameRelative = opts.filenameRelative; var moduleName = ""; - if (opts.moduleRoot) { + if (opts.moduleRoot != null) { moduleName = opts.moduleRoot + "/"; } @@ -348,7 +348,7 @@ export default class DefaultFormatter { return moduleName + opts.filename.replace(/^\//, ""); } - if (opts.sourceRoot) { + if (opts.sourceRoot != null) { // remove sourceRoot from filename var sourceRootRegEx = new RegExp("^" + opts.sourceRoot + "\/?"); filenameRelative = filenameRelative.replace(sourceRootRegEx, ""); From a66470d821a77c2249329055f1091b80780feda0 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 28 Jul 2015 01:25:00 +0100 Subject: [PATCH 3/6] fix es6 parameter tests --- packages/babel/src/types/retrievers.js | 1 - .../rest-binding-deoptimisation/{actal.js => actual.js} | 0 2 files changed, 1 deletion(-) rename packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/{actal.js => actual.js} (100%) diff --git a/packages/babel/src/types/retrievers.js b/packages/babel/src/types/retrievers.js index fd8c4caf4f..8b5fcd9504 100644 --- a/packages/babel/src/types/retrievers.js +++ b/packages/babel/src/types/retrievers.js @@ -65,7 +65,6 @@ getBindingIdentifiers.keys = { ClassDeclaration: "id", ClassExpression: "id", - SpreadElement: "argument", RestElement: "argument", UpdateExpression: "argument", diff --git a/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actal.js b/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actual.js similarity index 100% rename from packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actal.js rename to packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actual.js From 65c5c0acfda0cdfca76f850f9a7637254f950c9a Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 28 Jul 2015 01:28:44 +0100 Subject: [PATCH 4/6] v5.8.10 --- VERSION | 2 +- packages/babel/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 3303dc1e62..62a874f883 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.8.9 \ No newline at end of file +5.8.10 \ No newline at end of file diff --git a/packages/babel/package.json b/packages/babel/package.json index b4701628f6..3c9cb0e5bd 100644 --- a/packages/babel/package.json +++ b/packages/babel/package.json @@ -1,6 +1,6 @@ { "name": "babel-core", - "version": "5.8.9", + "version": "5.8.10", "description": "A compiler for writing next generation JavaScript", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", From 1d023d98f775ea8da20f6e7faf2336450c3d8386 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 28 Jul 2015 01:37:05 +0100 Subject: [PATCH 5/6] v5.8.11 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 62a874f883..e90751c61a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.8.10 \ No newline at end of file +5.8.11 \ No newline at end of file From 770e89d5378cc3a80ead911afa6b710ebacbe9d8 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 28 Jul 2015 01:38:31 +0100 Subject: [PATCH 6/6] v5.8.12 --- VERSION | 2 +- packages/babel-cli/package.json | 2 +- packages/babel-runtime/package.json | 2 +- packages/babel/package.json | 4 ++-- packages/babylon/package.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/VERSION b/VERSION index e90751c61a..f0937ee638 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.8.11 \ No newline at end of file +5.8.12 \ No newline at end of file diff --git a/packages/babel-cli/package.json b/packages/babel-cli/package.json index ed7178ede4..69b3c8f2df 100644 --- a/packages/babel-cli/package.json +++ b/packages/babel-cli/package.json @@ -1,6 +1,6 @@ { "name": "babel", - "version": "5.8.9", + "version": "5.8.12", "description": "Turn ES6 code into readable vanilla ES5 with source maps", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", diff --git a/packages/babel-runtime/package.json b/packages/babel-runtime/package.json index dbece90bf8..52de34f260 100644 --- a/packages/babel-runtime/package.json +++ b/packages/babel-runtime/package.json @@ -1,6 +1,6 @@ { "name": "babel-runtime", - "version": "5.8.9", + "version": "5.8.12", "description": "babel selfContained runtime", "license": "MIT", "repository": "babel/babel", diff --git a/packages/babel/package.json b/packages/babel/package.json index 3c9cb0e5bd..58f9d78740 100644 --- a/packages/babel/package.json +++ b/packages/babel/package.json @@ -1,6 +1,6 @@ { "name": "babel-core", - "version": "5.8.10", + "version": "5.8.12", "description": "A compiler for writing next generation JavaScript", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", @@ -42,7 +42,7 @@ "babel-plugin-runtime": "^1.0.7", "babel-plugin-undeclared-variables-check": "^1.0.2", "babel-plugin-undefined-to-void": "^1.1.6", - "babylon": "^5.8.9", + "babylon": "^5.8.12", "bluebird": "^2.9.33", "chalk": "^1.0.0", "convert-source-map": "^1.1.0", diff --git a/packages/babylon/package.json b/packages/babylon/package.json index 335a72163c..d46625f92a 100644 --- a/packages/babylon/package.json +++ b/packages/babylon/package.json @@ -1,6 +1,6 @@ { "name": "babylon", - "version": "5.8.9", + "version": "5.8.12", "description": "", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/",