fix #1003 by removing AST_ObjectSymbol and using AST_ObjectKeyVal for the same effect

This commit is contained in:
Fábio Santos
2016-03-12 15:53:57 +00:00
committed by Richard van Velzen
parent accca2445f
commit 6d2f77c180
6 changed files with 32 additions and 48 deletions

View File

@@ -395,9 +395,9 @@ var AST_ArrowParametersOrSeq = DEFNODE("ArrowParametersOrSeq", "expressions", {
default: default_seen_above, default: default_seen_above,
names: ex.properties.map(to_fun_args) names: ex.properties.map(to_fun_args)
}); });
} else if (ex instanceof AST_ObjectSymbol) { } else if (ex instanceof AST_ObjectKeyVal && ex.shorthand) {
return new AST_SymbolFunarg({ return new AST_SymbolFunarg({
name: ex.symbol.name, name: ex.key,
start: ex.start, start: ex.start,
end: ex.end end: ex.end
}); });
@@ -981,10 +981,11 @@ var AST_ObjectProperty = DEFNODE("ObjectProperty", "key value", {
} }
}); });
var AST_ObjectKeyVal = DEFNODE("ObjectKeyVal", "quote", { var AST_ObjectKeyVal = DEFNODE("ObjectKeyVal", "quote shorthand", {
$documentation: "A key: value object property", $documentation: "A key: value object property",
$propdoc: { $propdoc: {
quote: "[string] the original quote character" quote: "[string] the original quote character",
shorthand: "[boolean] whether this is a shorthand key:value pair, expressed as just the key."
} }
}, AST_ObjectProperty); }, AST_ObjectProperty);
@@ -998,18 +999,6 @@ var AST_ObjectComputedKeyVal = DEFNODE("ObjectComputedKeyVal", null, {
} }
}, AST_ObjectProperty); }, AST_ObjectProperty);
var AST_ObjectSymbol = DEFNODE("ObjectSymbol", "symbol", {
$propdoc: {
symbol: "[AST_SymbolRef] what symbol it is"
},
$documentation: "A symbol in an object",
_walk: function (visitor) {
return visitor._visit(this, function(){
this.symbol._walk(visitor);
});
}
}, AST_ObjectProperty);
var AST_ObjectSetter = DEFNODE("ObjectSetter", "static", { var AST_ObjectSetter = DEFNODE("ObjectSetter", "static", {
$propdoc: { $propdoc: {
static: "[boolean] whether this is a static setter (classes only)" static: "[boolean] whether this is a static setter (classes only)"

View File

@@ -1301,6 +1301,14 @@ function OutputStream(options) {
DEFPRINT(AST_ObjectKeyVal, function(self, output){ DEFPRINT(AST_ObjectKeyVal, function(self, output){
var key = self.key; var key = self.key;
var quote = self.quote; var quote = self.quote;
var print_as_shorthand = self.shorthand &&
self.value instanceof AST_Symbol &&
self.key == self.value.print_to_string();
if (print_as_shorthand) {
output.print_name(key);
return;
}
if (output.option("quote_keys")) { if (output.option("quote_keys")) {
output.print_string(key + ""); output.print_string(key + "");
} else if ((typeof key == "number" } else if ((typeof key == "number"
@@ -1359,23 +1367,6 @@ function OutputStream(options) {
self.default.print(output) self.default.print(output)
} }
}); });
DEFPRINT(AST_ObjectSymbol, function(self, output){
var name = self.mangled_key || self.symbol.name;
var def = self.symbol.definition();
if (def && def.mangled_name) {
output.print(name);
output.print(':');
output.space();
output.print(def.mangled_name);
} else if (!(def && def.mangled_name) && self.mangled_key) {
output.print(name);
output.print(':');
output.space();
output.print(def.name);
} else {
output.print(name);
}
});
DEFPRINT(AST_Undefined, function(self, output){ DEFPRINT(AST_Undefined, function(self, output){
output.print("void 0"); output.print("void 0");
}); });

View File

@@ -1514,14 +1514,16 @@ function parse($TEXT, options) {
})); }));
} else if (!is("punc", ":")) { } else if (!is("punc", ":")) {
// It's one of those object destructurings, the value is its own name // It's one of those object destructurings, the value is its own name
a.push(new AST_ObjectSymbol({ a.push(new AST_ObjectKeyVal({
start: start, start: start,
end: start, end: start,
symbol: new AST_SymbolRef({ key: name,
value: new AST_SymbolRef({
start: start, start: start,
end: start, end: start,
name: name name: name
}) }),
shorthand: true,
})); }));
} else { } else {
expect(":"); expect(":");

View File

@@ -90,9 +90,6 @@ function mangle_properties(ast, options) {
if (node instanceof AST_ObjectKeyVal) { if (node instanceof AST_ObjectKeyVal) {
add(node.key); add(node.key);
} }
else if (node instanceof AST_ObjectSymbol) {
add(node.symbol.name);
}
else if (node instanceof AST_ObjectProperty) { else if (node instanceof AST_ObjectProperty) {
// setter or getter, since KeyVal is handled above // setter or getter, since KeyVal is handled above
add(node.key.name); add(node.key.name);
@@ -117,11 +114,6 @@ function mangle_properties(ast, options) {
if (node instanceof AST_ObjectKeyVal) { if (node instanceof AST_ObjectKeyVal) {
node.key = mangle(node.key); node.key = mangle(node.key);
} }
else if (node instanceof AST_ObjectSymbol) {
if (should_mangle(node.symbol.name)) {
node.mangled_key = mangle(node.symbol.name)
}
}
else if (node instanceof AST_ObjectProperty) { else if (node instanceof AST_ObjectProperty) {
// setter or getter // setter or getter
node.key.name = mangle(node.key.name); node.key.name = mangle(node.key.name);

View File

@@ -219,10 +219,6 @@ TreeTransformer.prototype = new TreeWalker;
self.properties = do_list(self.properties, tw); self.properties = do_list(self.properties, tw);
}); });
_(AST_ObjectSymbol, function(self, tw){
self.symbol = self.symbol.transform(tw);
});
_(AST_ObjectProperty, function(self, tw){ _(AST_ObjectProperty, function(self, tw){
self.value = self.value.transform(tw); self.value = self.value.transform(tw);
}); });

View File

@@ -54,6 +54,20 @@ computed_property_names: {
expect_exact: 'obj({["x"+"x"]:6});' expect_exact: 'obj({["x"+"x"]:6});'
} }
shorthand_properties: {
mangle = true;
input: (function() {
var prop = 1;
const value = {prop};
return value;
})();
expect: (function() {
var a = 1;
const b = {prop:a};
return b;
})();
}
typeof_arrow_functions: { typeof_arrow_functions: {
options = { options = {
evaluate: true evaluate: true