fix corner cases in parse & unused (#5000)

This commit is contained in:
Alex Lam S.L
2021-06-12 17:10:01 +01:00
committed by GitHub
parent 70ceda5398
commit f8b2215145
5 changed files with 42 additions and 43 deletions

View File

@@ -56,35 +56,31 @@ function DEFNODE(type, props, methods, base) {
code.push("this.", prop, "=props.", prop, ";");
});
code.push("}");
var proto = base && new base;
if (proto && proto.initialize || methods && methods.initialize) code.push("this.initialize();");
code.push("}");
var proto = Object.create(base && base.prototype);
if (methods.initialize || proto.initialize) code.push("this.initialize();");
code.push("};");
var ctor = new Function(code.join(""))();
if (proto) {
ctor.prototype = proto;
ctor.BASE = base;
}
if (base) base.SUBCLASSES.push(ctor);
ctor.prototype = proto;
ctor.prototype.CTOR = ctor;
ctor.PROPS = props || null;
ctor.SELF_PROPS = self_props;
ctor.SUBCLASSES = [];
if (type) {
ctor.prototype.TYPE = ctor.TYPE = type;
}
if (methods) for (var name in methods) if (HOP(methods, name)) {
if (/^\$/.test(name)) {
ctor[name.substr(1)] = methods[name];
} else {
ctor.prototype[name] = methods[name];
}
ctor.prototype.TYPE = ctor.TYPE = type;
if (base) {
ctor.BASE = base;
base.SUBCLASSES.push(ctor);
}
ctor.DEFMETHOD = function(name, method) {
this.prototype[name] = method;
};
if (typeof exports !== "undefined") {
exports["AST_" + type] = ctor;
ctor.PROPS = props;
ctor.SELF_PROPS = self_props;
ctor.SUBCLASSES = [];
for (var name in methods) if (HOP(methods, name)) {
if (/^\$/.test(name)) {
ctor[name.substr(1)] = methods[name];
} else {
ctor.DEFMETHOD(name, methods[name]);
}
}
if (typeof exports !== "undefined") exports["AST_" + type] = ctor;
return ctor;
}