From 9cc0442db9e4fe18b6b8f4c473b418796fc1ca35 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Fri, 24 Jul 2015 22:34:14 +0100 Subject: [PATCH] make class container shadowed --- .../transformation/transformers/es6/classes/vanilla.js | 7 +++---- .../src/transformation/transformers/other/strict.js | 2 +- .../es6.classes-exec/shadow-container.js | 10 ++++++++++ 3 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 packages/babel/test/fixtures/transformation/es6.classes-exec/shadow-container.js diff --git a/packages/babel/src/transformation/transformers/es6/classes/vanilla.js b/packages/babel/src/transformation/transformers/es6/classes/vanilla.js index eb3e05e20a..3425d1a1ee 100644 --- a/packages/babel/src/transformation/transformers/es6/classes/vanilla.js +++ b/packages/babel/src/transformation/transformers/es6/classes/vanilla.js @@ -216,10 +216,9 @@ export default class ClassTransformer { // body.push(t.returnStatement(this.classRef)); - return t.callExpression( - t.functionExpression(null, closureParams, t.blockStatement(body)), - closureArgs - ); + var container = t.functionExpression(null, closureParams, t.blockStatement(body)); + container.shadow = true; + return t.callExpression(container, closureArgs); } /** diff --git a/packages/babel/src/transformation/transformers/other/strict.js b/packages/babel/src/transformation/transformers/other/strict.js index 07ed970025..2887f42dbf 100644 --- a/packages/babel/src/transformation/transformers/other/strict.js +++ b/packages/babel/src/transformation/transformers/other/strict.js @@ -4,7 +4,7 @@ export var metadata = { group: "builtin-pre" }; -const THIS_BREAK_KEYS = ["FunctionExpression", "FunctionDeclaration", "ClassExpression", "ClassDeclaration"]; +const THIS_BREAK_KEYS = ["FunctionExpression", "FunctionDeclaration", "ClassProperty"]; function isUseStrict(node) { if (!t.isLiteral(node)) return false; diff --git a/packages/babel/test/fixtures/transformation/es6.classes-exec/shadow-container.js b/packages/babel/test/fixtures/transformation/es6.classes-exec/shadow-container.js new file mode 100644 index 0000000000..5fe6288481 --- /dev/null +++ b/packages/babel/test/fixtures/transformation/es6.classes-exec/shadow-container.js @@ -0,0 +1,10 @@ +function build(val) { + return class { + [this.key]() { + return val; + } + }; +} + +var Class = build.call({ key: "foo" }, "bar"); +assert.equal(new Class().foo(), "bar");