Code coverage report for 6to5/transformation/transformers/playground-object-getter-memoization.js

Statements: 95.45% (21 / 22)      Branches: 91.67% (11 / 12)      Functions: 100% (2 / 2)      Lines: 100% (20 / 20)      Ignored: none     

All files » 6to5/transformation/transformers/ » playground-object-getter-memoization.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 401 1   1   241 4   4 4   4 4   4 2   2     4 4   4   32   32 4           4     4    
var traverse = require("../../traverse");
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 = "_" + key.name;
  } else {
    key = file.generateUid("memo", scope);
  }
 
  var memoId = t.memberExpression(t.thisExpression(), t.identifier(key));
  var doneId = t.memberExpression(t.thisExpression(), t.identifier(key + "Done"));
 
  traverse(value, {
    enter: function (node) {
      Iif (t.isFunction(node)) return;
 
      if (t.isReturnStatement(node) && node.argument) {
        node.argument = t.assignmentExpression("=", memoId, node.argument);
      }
    }
  });
 
  // this._barDone = true;
  body.unshift(t.expressionStatement(t.assignmentExpression("=", doneId, t.literal(true))));
 
  // if (this._barDone) return this._bar;
  body.unshift(t.ifStatement(doneId, t.returnStatement(memoId)));
};