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.
36 lines
961 B
JavaScript
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();
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|