diff --git a/packages/babel-plugin-transform-function-bind/test/fixtures/regression/T6984/actual.js b/packages/babel-plugin-transform-function-bind/test/fixtures/regression/T6984/actual.js new file mode 100644 index 0000000000..8d3b2bed42 --- /dev/null +++ b/packages/babel-plugin-transform-function-bind/test/fixtures/regression/T6984/actual.js @@ -0,0 +1,12 @@ +function one(){} +function two(){} + +class Test1 { + one(){ + one::two(1, 2) + } + + two(){ + one::two(1, 2) + } +} diff --git a/packages/babel-plugin-transform-function-bind/test/fixtures/regression/T6984/expected.js b/packages/babel-plugin-transform-function-bind/test/fixtures/regression/T6984/expected.js new file mode 100644 index 0000000000..b020b4cf39 --- /dev/null +++ b/packages/babel-plugin-transform-function-bind/test/fixtures/regression/T6984/expected.js @@ -0,0 +1,26 @@ +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _one() {} +function _two() {} + +let Test1 = function () { + function Test1() { + _classCallCheck(this, Test1); + } + + _createClass(Test1, [{ + key: "one", + value: function one() { + _two.call(_one, 1, 2); + } + }, { + key: "two", + value: function two() { + _two.call(_one, 1, 2); + } + }]); + + return Test1; +}(); diff --git a/packages/babel-plugin-transform-function-bind/test/fixtures/regression/T6984/options.json b/packages/babel-plugin-transform-function-bind/test/fixtures/regression/T6984/options.json new file mode 100644 index 0000000000..be4f696be2 --- /dev/null +++ b/packages/babel-plugin-transform-function-bind/test/fixtures/regression/T6984/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-function-bind", "transform-es2015-classes"] +} diff --git a/packages/babel-types/src/validators.js b/packages/babel-types/src/validators.js index cee738b7ab..b403239e0c 100644 --- a/packages/babel-types/src/validators.js +++ b/packages/babel-types/src/validators.js @@ -32,12 +32,16 @@ export function isBinding(node: Object, parent: Object): boolean { export function isReferenced(node: Object, parent: Object): boolean { switch (parent.type) { + // yes: object::NODE + // yes: NODE::callee + case "BindExpression": + return parent.object === node || parent.callee === node; + // yes: PARENT[NODE] // yes: NODE.child // no: parent.NODE case "MemberExpression": case "JSXMemberExpression": - case "BindExpression": if (parent.property === node && parent.computed) { return true; } else if (parent.object === node) {