change obj references to a unique identifier

This commit is contained in:
Sebastian McKenzie
2014-10-12 00:23:13 +11:00
parent 4c2e7ddb9e
commit 0f7da020e3
16 changed files with 48 additions and 38 deletions

View File

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

View File

@@ -1,3 +1,3 @@
(function (obj) {
return obj;
(function (KEY) {
return KEY;
})(OBJECT)

View File

@@ -1 +1 @@
obj[KEY] = VALUE;
OBJECT_KEY[KEY] = VALUE;

View File

@@ -1,4 +1,4 @@
(function (obj) {
(function (KEY) {
CONTENT;
return obj;
return KEY;
})(OBJECT);

View File

@@ -1,8 +1,9 @@
var traverse = require("../traverse");
var util = require("../util");
var b = require("ast-types").builders;
var _ = require("lodash");
exports.ObjectExpression = function (node) {
exports.ObjectExpression = function (node, parent, opts, generateUid) {
var hasComputed = false;
var hasThis = false;
@@ -24,7 +25,10 @@ exports.ObjectExpression = function (node) {
var templateName = "function-return-obj";
if (hasThis) templateName += "-this";
var objId = b.identifier(generateUid("ref"));
var container = util.template(templateName, {
KEY: objId,
OBJECT: node
});
@@ -37,6 +41,7 @@ exports.ObjectExpression = function (node) {
_.each(computed, function (prop) {
containerBody.unshift(util.template("obj-key-set", {
OBJECT_KEY: objId,
KEY: prop.key,
VALUE: prop.value
}, true));

View File

@@ -22,7 +22,7 @@ exports.ForOfStatement = function (node, parent, opts, generateUid) {
util.ensureBlock(node);
var block = node2.body;
block.body = block.body.concat(node.body.body || []);
block.body = block.body.concat(node.body.body);
var declar = block.body[0];
declar.kind = declar.kind;

View File

@@ -6,7 +6,7 @@ exports.Property = function (node) {
if (node.method) node.method = false;
};
exports.ObjectExpression = function (node) {
exports.ObjectExpression = function (node, parent, opts, generateUid) {
var mutatorMap = {};
node.properties = node.properties.filter(function (prop) {
@@ -20,8 +20,11 @@ exports.ObjectExpression = function (node) {
if (_.isEmpty(mutatorMap)) return;
var objId = b.identifier(generateUid("ref"))
return util.template("object-define-properties-closure", {
KEY: objId,
OBJECT: node,
CONTENT: util.buildDefineProperties(mutatorMap, b.identifier("obj")).expression
CONTENT: util.buildDefineProperties(mutatorMap, objId).expression
});
};

View File

@@ -11,7 +11,9 @@ var traverse = module.exports = function (parent, callbacks, blacklistTypes) {
return;
}
var keys = VISITOR_KEYS[parent.type] || [];
var keys = VISITOR_KEYS[parent.type];
if (!keys) return;
blacklistTypes = blacklistTypes || [];
if (_.isFunction(callbacks)) {