33 lines
783 B
JavaScript
33 lines
783 B
JavaScript
var traverse = require("../../traverse");
|
|
var util = require("../../util");
|
|
var t = require("../../types");
|
|
|
|
exports.Property =
|
|
exports.MethodDefinition = function (node, parent, file, scope) {
|
|
if (node.kind !== "memo") return;
|
|
node.kind = "get";
|
|
|
|
var value = node.value;
|
|
t.ensureBlock(value);
|
|
|
|
var body = value.body.body;
|
|
var key = node.key;
|
|
|
|
if (t.isIdentifier(key) && !node.computed) {
|
|
key = t.literal(key.name);
|
|
}
|
|
|
|
traverse(value, {
|
|
enter: function (node) {
|
|
if (t.isFunction(node)) return;
|
|
|
|
if (t.isReturnStatement(node) && node.argument) {
|
|
node.argument = t.memberExpression(util.template("object-getter-memoization", {
|
|
KEY: key,
|
|
VALUE: node.argument
|
|
}), key, true);
|
|
}
|
|
}
|
|
});
|
|
};
|