diff --git a/packages/babel-plugin-transform-es2015-spread/test/fixtures/regression/T6761/actual.js b/packages/babel-plugin-transform-es2015-spread/test/fixtures/regression/T6761/actual.js new file mode 100644 index 0000000000..8641a5d631 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-spread/test/fixtures/regression/T6761/actual.js @@ -0,0 +1,10 @@ +function fn(){} + +var args = [1, 2, 3]; +var obj = {obj: {fn}}; + +switch (true){ + case true: + obj.obj.fn(...args); + break; +} diff --git a/packages/babel-plugin-transform-es2015-spread/test/fixtures/regression/T6761/expected.js b/packages/babel-plugin-transform-es2015-spread/test/fixtures/regression/T6761/expected.js new file mode 100644 index 0000000000..52e8b2e803 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-spread/test/fixtures/regression/T6761/expected.js @@ -0,0 +1,12 @@ +var _obj$obj; + +function fn() {} + +var args = [1, 2, 3]; +var obj = { obj: { fn } }; + +switch (true) { + case true: + (_obj$obj = obj.obj).fn.apply(_obj$obj, args); + break; +} diff --git a/packages/babel-plugin-transform-es2015-spread/test/fixtures/regression/options.json b/packages/babel-plugin-transform-es2015-spread/test/fixtures/regression/options.json new file mode 100644 index 0000000000..d61e7807eb --- /dev/null +++ b/packages/babel-plugin-transform-es2015-spread/test/fixtures/regression/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers-2", "transform-es2015-spread", "transform-es2015-parameters"] +} diff --git a/packages/babel-traverse/src/scope/index.js b/packages/babel-traverse/src/scope/index.js index 955f068496..6478ce08cc 100644 --- a/packages/babel-traverse/src/scope/index.js +++ b/packages/babel-traverse/src/scope/index.js @@ -741,14 +741,14 @@ export default class Scope { }) { let path = this.path; - if (path.isSwitchStatement()) { - path = this.getFunctionParent().path; - } - if (!path.isBlockStatement() && !path.isProgram()) { path = this.getBlockParent().path; } + if (path.isSwitchStatement()) { + path = this.getFunctionParent().path; + } + if (path.isLoop() || path.isCatchClause() || path.isFunction()) { t.ensureBlock(path.node); path = path.get("body");