diff --git a/VERSION b/VERSION index 3303dc1e62..f0937ee638 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.8.9 \ 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 b4701628f6..58f9d78740 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.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/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, ""); 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/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/actual.js b/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actual.js new file mode 100644 index 0000000000..43adbba736 --- /dev/null +++ b/packages/babel/test/fixtures/transformation/es6.parameters/rest-binding-deoptimisation/actual.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 = []; +}; 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/",