From 330071e59d5ffba653dc5d08f07695ce47cddcf1 Mon Sep 17 00:00:00 2001 From: Jay Phelps Date: Fri, 13 May 2016 14:18:14 -0700 Subject: [PATCH] also visit ClassProperty's for rest param deopt check, fixes #T7311 (#3481) --- .../src/rest.js | 2 +- .../test/fixtures/parameters/options.json | 2 +- .../parameters/rest-arrow-functions/actual.js | 7 +++++++ .../parameters/rest-arrow-functions/expected.js | 13 +++++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/babel-plugin-transform-es2015-parameters/src/rest.js b/packages/babel-plugin-transform-es2015-parameters/src/rest.js index 5522c36310..d0868536b2 100644 --- a/packages/babel-plugin-transform-es2015-parameters/src/rest.js +++ b/packages/babel-plugin-transform-es2015-parameters/src/rest.js @@ -30,7 +30,7 @@ let memberExpressionOptimisationVisitor = { path.skip(); }, - Function(path, state) { + "Function|ClassProperty": function (path, state) { // Detect whether any reference to rest is contained in nested functions to // determine if deopt is necessary. let oldNoOptimise = state.noOptimise; diff --git a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/options.json b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/options.json index 67f00862a7..107c109587 100644 --- a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/options.json +++ b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/options.json @@ -1,3 +1,3 @@ { - "plugins": ["external-helpers", "syntax-flow", "transform-es2015-parameters", "transform-es2015-block-scoping", "transform-es2015-spread", "transform-es2015-classes", "transform-es2015-destructuring", "transform-es2015-arrow-functions", "syntax-async-functions", "transform-es2015-for-of"] + "plugins": ["transform-class-properties", "external-helpers", "syntax-flow", "transform-es2015-parameters", "transform-es2015-block-scoping", "transform-es2015-spread", "transform-es2015-classes", "transform-es2015-destructuring", "transform-es2015-arrow-functions", "syntax-async-functions", "transform-es2015-for-of"] } diff --git a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-arrow-functions/actual.js b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-arrow-functions/actual.js index 71e7259277..80988d02b6 100644 --- a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-arrow-functions/actual.js +++ b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-arrow-functions/actual.js @@ -27,3 +27,10 @@ var x = (...rest) => { if (noNeedToWork) return 0; return rest; }; + +var innerclassproperties = (...args) => ( + class { + static args = args; + args = args; + } +); \ No newline at end of file diff --git a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-arrow-functions/expected.js b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-arrow-functions/expected.js index 322e79dc7e..83e4df00b8 100644 --- a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-arrow-functions/expected.js +++ b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-arrow-functions/expected.js @@ -37,3 +37,16 @@ var x = function () { if (noNeedToWork) return 0; return rest; }; + +var innerclassproperties = function () { + var _class, _temp; + + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + return _temp = _class = function _class() { + babelHelpers.classCallCheck(this, _class); + this.args = args; + }, _class.args = args, _temp; +};