quamvoluptatem
Version:
JavaScript Obfuscation Tool.
52 lines (42 loc) • 1.32 kB
text/typescript
import { ObfuscateOrder } from "../order";
import { walk } from "../traverse";
import { isLoop } from "../util/compare";
import { Identifier } from "../util/gen";
import { clone } from "../util/insert";
import Transform from "./transform";
export default class RenameLabels extends Transform {
gen: any;
constructor(o) {
super(o, ObfuscateOrder.RenameLabels);
this.gen = this.getGenerator();
}
match(object, parents) {
return object.type == "LabeledStatement";
}
transform(object, parents) {
return () => {
var newName = null;
walk(object, parents, (o, p) => {
if (o.type == "BreakStatement" || o.type == "ContinueStatement") {
var labelStatement = p.find((x) => isLoop(x));
if (o.label && o.label.name == object.label.name) {
if (object.body == labelStatement) {
// In same loop
o.label = null;
} else {
if (!newName) {
newName = this.gen.generate();
}
o.label = Identifier(newName);
}
}
}
});
if (newName) {
object.label = Identifier(newName);
} else {
this.replace(object, clone(object.body));
}
};
}
}