47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
var _ = require("lodash");
|
|
|
|
var build = function (type, keys) {
|
|
return function () {
|
|
var args = arguments;
|
|
var node = { type: type };
|
|
_.each(keys, function (key, i) {
|
|
node[key] = args[i];
|
|
});
|
|
return node;
|
|
};
|
|
};
|
|
|
|
exports.identifier = build("Identifier", ["name"]);
|
|
|
|
exports.literal = build("Literal", ["value"]);
|
|
|
|
exports.functionExpression = build("FunctionExpression", ["id", "params", "body"]);
|
|
|
|
exports.returnStatement = build("ReturnStatement", ["argument"]);
|
|
|
|
exports.assignmentExpression = build("AssignmentExpression", ["operator", "left", "right"]);
|
|
|
|
exports.ifStatement = build("IfStatement", ["test", "consequent", "alternate"]);
|
|
|
|
exports.callExpression = build("CallExpression", ["callee", "arguments"]);
|
|
|
|
exports.blockStatement = build("BlockStatement", ["body"]);
|
|
|
|
exports.memberExpression = build("MemberExpression", ["object", "property", "computed"]);
|
|
|
|
exports.variableDeclaration = build("VariableDeclaration", ["kind", "declarations"]);
|
|
|
|
exports.variableDeclarator = build("VariableDeclarator", ["id", "init"]);
|
|
|
|
exports.arrayExpression = build("ArrayExpression", ["elements"]);
|
|
|
|
exports.binaryExpression = build("BinaryExpression", ["operator", "left", "right"]);
|
|
|
|
exports.expressionStatement = build("ExpressionStatement", ["expression"]);
|
|
|
|
exports.thisExpression = build("ThisExpression");
|
|
|
|
exports.objectExpression = build("ObjectExpression", ["properties"]);
|
|
|
|
exports.property = build("Property", ["kind", "key", "value"]);
|