inherit temporary computed property closure name from AssignmentExpressions and VariableDeclarators - #56

This commit is contained in:
Sebastian McKenzie 2014-10-13 12:25:40 +11:00
parent c28e78ecff
commit f7a84c36cd
14 changed files with 61 additions and 34 deletions

View File

@ -1,3 +0,0 @@
(function (KEY) {
return KEY;
}).call(this, OBJECT)

View File

@ -11,7 +11,7 @@ function transform(code, opts) {
code = (code || "") + "";
var file = new File(opts);
return util.parse(code);
return file.parse(code);
}
transform.test = function (task, assert) {

View File

@ -5,7 +5,6 @@ var _ = require("lodash");
exports.ObjectExpression = function (node, parent, file) {
var hasComputed = false;
var hasThis = false;
var computed = [];
@ -13,7 +12,6 @@ exports.ObjectExpression = function (node, parent, file) {
if (prop.computed) {
hasComputed = true;
computed.unshift(prop);
hasThis = hasThis || traverse.hasType(prop, "ThisExpression");
return false;
} else {
return true;
@ -22,22 +20,32 @@ exports.ObjectExpression = function (node, parent, file) {
if (!hasComputed) return;
var templateName = "function-return-obj";
if (hasThis) templateName += "-this";
var objIdNode;
var objId = b.identifier(file.generateUid("ref"));
if (parent.type === "AssignmentExpression") {
objIdNode = parent.left;
} else if (parent.type === "VariableDeclarator") {
objIdNode = parent.id;
}
var container = util.template(templateName, {
var objId = "ref";
if (objIdNode && objIdNode.type === "Identifier") {
objId = objIdNode.name;
}
objId = b.identifier(file.generateUid(objId));
var container = util.template("function-return-obj", {
KEY: objId,
OBJECT: node
});
var containerBody;
if (templateName === "function-return-obj") {
containerBody = container.callee.body.body;
} else {
containerBody = container.callee.object.body.body;
}
var containerCallee = container.callee;
var containerBody = containerCallee.body.body;
containerCallee._aliasFunction = true;
containerCallee._aliasFunctionStopNonArrowFunctions = true;
_.each(computed, function (prop) {
containerBody.unshift(util.template("obj-key-set", {

View File

@ -0,0 +1,3 @@
foo({
[bar]: "foobar"
});

View File

@ -0,0 +1,4 @@
foo(function(_ref) {
_ref[bar] = "foobar";
return _ref;
}({}));

View File

@ -0,0 +1,3 @@
foo = {
[bar]: "foobar"
};

View File

@ -0,0 +1,4 @@
foo = function(_foo) {
_foo[bar] = "foobar";
return _foo;
}({});

View File

@ -1,6 +1,6 @@
var obj = function (_ref) {
_ref[foobar] = function () {
var obj = function (_obj) {
_obj[foobar] = function () {
return "foobar";
};
return _ref;
return _obj;
}({});

View File

@ -1,7 +1,7 @@
var obj = function (_ref) {
_ref["x" + foo] = "heh";
_ref["y" + bar] = "noo";
return _ref;
var obj = function (_obj) {
_obj["x" + foo] = "heh";
_obj["y" + bar] = "noo";
return _obj;
}({
foo: "foo",
bar: "bar"

View File

@ -1,5 +1,5 @@
var obj = function (_ref) {
_ref["x" + foo] = "heh";
_ref["y" + bar] = "noo";
return _ref;
var obj = function (_obj) {
_obj["x" + foo] = "heh";
_obj["y" + bar] = "noo";
return _obj;
}({});

View File

@ -1,4 +1,4 @@
var obj = function (_ref) {
_ref["x" + foo] = "heh";
return _ref;
var obj = function (_obj) {
_obj["x" + foo] = "heh";
return _obj;
}({});

View File

@ -1,4 +1,5 @@
var obj = function (_ref) {
_ref["x" + this.foo] = "heh";
return _ref;
}.call(this, {});
var _this = this;
var obj = function (_obj) {
_obj["x" + _this.foo] = "heh";
return _obj;
}({});

View File

@ -0,0 +1,3 @@
var foo = {
[bar]: "foobar"
};

View File

@ -0,0 +1,4 @@
var foo = function(_foo) {
_foo[bar] = "foobar";
return _foo;
}({});