Files
babel/src/babel/transformation/transformers/playground/method-binding.js
Sebastian McKenzie 98ca541fde restructure types
2015-03-11 00:04:06 +11:00

44 lines
1.1 KiB
JavaScript

import * as t from "../../../types";
export var playground = true;
export function BindMemberExpression(node, parent, scope) {
var object = node.object;
var prop = node.property;
var temp = scope.generateTempBasedOnNode(node.object);
if (temp) object = temp;
var call = t.callExpression(
t.memberExpression(t.memberExpression(object, prop), t.identifier("bind")),
[object, ...node.arguments]
);
if (temp) {
return t.sequenceExpression([
t.assignmentExpression("=", temp, node.object),
call
]);
} else {
return call;
}
}
export function BindFunctionExpression(node, parent, scope) {
var buildCall = function (args) {
var param = scope.generateUidIdentifier("val");
return t.functionExpression(null, [param], t.blockStatement([
t.returnStatement(t.callExpression(t.memberExpression(param, node.callee), args))
]));
};
var temp = scope.generateTemp("args");
return t.sequenceExpression([
t.assignmentExpression("=", temp, t.arrayExpression(node.arguments)),
buildCall(node.arguments.map(function (node, i) {
return t.memberExpression(temp, t.literal(i), true);
}))
]);
}