Sebastian McKenzie ae7d5367f1 6.0.0
I'm extremely stupid and didn't commit as I go. To anyone reading this
I'm extremely sorry. A lot of these changes are very broad and I plan on
releasing Babel 6.0.0 today live on stage at Ember Camp London so I'm
afraid I couldn't wait. If you're ever in London I'll buy you a beer
(or assorted beverage!) to make up for it, also I'll kiss your feet and
give you a back massage, maybe.
2015-10-29 17:51:24 +00:00

36 lines
961 B
JavaScript

export default function ({ types: t }) {
return {
visitor: {
ArrowFunctionExpression(path, state) {
if (state.opts.spec) {
let { node } = path;
if (node.shadow) return;
node.shadow = { this: false };
node.type = "FunctionExpression";
let boundThis = t.thisExpression();
boundThis._forceShadow = path;
// make sure that arrow function won't be instantiated
path.ensureBlock();
path.get("body").unshiftContainer(
"body",
t.expressionStatement(t.callExpression(state.addHelper("newArrowCheck"), [
t.thisExpression(),
boundThis
]))
);
path.replaceWith(t.callExpression(
t.memberExpression(node, t.identifier("bind")),
[t.thisExpression()]
));
} else {
path.arrowFunctionToShadowed();
}
}
}
};
}