test that names used in destructurings don't get hoisted

This commit is contained in:
Fábio Santos
2015-01-15 13:27:30 +00:00
committed by Richard van Velzen
parent 4644becb9b
commit 96b89e34a3
2 changed files with 67 additions and 1 deletions

View File

@@ -1280,7 +1280,6 @@ merge(Compressor.prototype, {
// collect only vars which don't show up in self's arguments list
var defs = [];
vars.each(function(def, name){
// TODO test this too
if (self instanceof AST_Lambda
&& find_if(function(x){ return x.name == def.name.name },
self.args_as_names())) {

67
test/compress/hoist.js Normal file
View File

@@ -0,0 +1,67 @@
hoist_vars: {
options = {
hoist_vars: true
}
input: {
function a() {
bar();
var var1;
var var2;
}
function b(anArg) {
bar();
var var1;
var anArg;
}
}
expect: {
function a() {
var var1, var2; // Vars go up and are joined
bar();
}
function b(anArg) {
var var1;
bar();
// But vars named like arguments go away!
}
}
}
hoist_funs: {
options = {
hoist_funs: true
}
input: {
function a() {
bar();
function foo() {}
}
}
expect: {
function a() {
function foo() {} // Funs go up
bar();
}
}
}
hoist_no_destructurings: {
options = {
hoist_vars: true,
hoist_funs: true
}
input: {
function a([anArg]) {
bar();
var var1;
var anArg; // Because anArg is already declared, this goes away!
}
}
expect: {
function a([anArg]) {
var var1;
bar();
}
}
}