From a6050e06b30fb37983afb9c935abf5af09b3e00c Mon Sep 17 00:00:00 2001 From: uhyo Date: Mon, 24 Aug 2020 23:29:22 +0900 Subject: [PATCH 1/2] Add a super test --- .../test/fixtures/function-bind/super/input.js | 5 +++++ .../test/fixtures/function-bind/super/output.js | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/input.js create mode 100644 packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/output.js diff --git a/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/input.js b/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/input.js new file mode 100644 index 000000000000..b7b3cacb093f --- /dev/null +++ b/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/input.js @@ -0,0 +1,5 @@ +class C { + foo() { + ::super.bar; + } +} diff --git a/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/output.js b/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/output.js new file mode 100644 index 000000000000..0994ed31272a --- /dev/null +++ b/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/output.js @@ -0,0 +1,5 @@ +class C { + foo() { + super.bar.bind(this); + } +} From 955aa091c78d63d727b485bd6cc1501639464d6f Mon Sep 17 00:00:00 2001 From: uhyo Date: Mon, 24 Aug 2020 23:40:36 +0900 Subject: [PATCH 2/2] emit 'this' as context when bind object is super --- packages/babel-plugin-proposal-function-bind/src/index.js | 5 ++++- .../test/fixtures/function-bind/super/input.js | 1 + .../test/fixtures/function-bind/super/output.js | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/babel-plugin-proposal-function-bind/src/index.js b/packages/babel-plugin-proposal-function-bind/src/index.js index 0dea27804a15..4a26c705cf2f 100644 --- a/packages/babel-plugin-proposal-function-bind/src/index.js +++ b/packages/babel-plugin-proposal-function-bind/src/index.js @@ -15,7 +15,10 @@ export default declare(api => { function getStaticContext(bind, scope) { const object = bind.object || bind.callee.object; - return scope.isStatic(object) && object; + return ( + scope.isStatic(object) && + (t.isSuper(object) ? t.thisExpression() : object) + ); } function inferBindContext(bind, scope) { diff --git a/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/input.js b/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/input.js index b7b3cacb093f..5faf8f6f93c3 100644 --- a/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/input.js +++ b/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/input.js @@ -1,5 +1,6 @@ class C { foo() { ::super.bar; + ::super.baz(123); } } diff --git a/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/output.js b/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/output.js index 0994ed31272a..b249ce7a39bc 100644 --- a/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/output.js +++ b/packages/babel-plugin-proposal-function-bind/test/fixtures/function-bind/super/output.js @@ -1,5 +1,7 @@ class C { foo() { super.bar.bind(this); + super.baz.call(this, 123); } + }