All of our static evaluation & dead-code elimination transforms need to
happen in post-order, transforming inner nodes first. This is so that
in complex nested cases all transforms see the simplified version of
their inner nodes.
For example:
async getNimbusExperimentData() {
if (!PDFJSDev.test("GECKOVIEW")) { return null; }
// other code
}
-> [evaluation of PDFJSDev.*]
async getNimbusExperimentData() {
if (!false) { return null; }
// other code
}
-> [!false -> true]
async getNimbusExperimentData() {
if (true) { return null; }
// other code
}
-> [if (true) -> replace with the if branch]
async getNimbusExperimentData() {
return null;
// other code
}
-> [early return -> remove dead code]
async getNimbusExperimentData() {
return null;
// other code
}
This was done correctly in all cases except for our `UnaryExpression`
transform, which was happening in pre-order.
22 lines
221 B
JavaScript
22 lines
221 B
JavaScript
var a = false;
|
|
var b = true;
|
|
var c = true;
|
|
var d = false;
|
|
var e = true;
|
|
var f = "text";
|
|
var g = {
|
|
obj: {
|
|
i: 1
|
|
},
|
|
j: 2
|
|
};
|
|
var h = {
|
|
test: "test"
|
|
};
|
|
var i = '0';
|
|
var j = {
|
|
i: 1
|
|
};
|
|
var k = false;
|
|
var l = true;
|