we spent like 5 hours

Co-authored-by: Ne_Eo <NeeEoo@users.noreply.github.com>
This commit is contained in:
lunarcleint
2024-04-28 18:11:43 -07:00
co-authored by Ne_Eo
parent cb645d6bb1
commit d6d6e7a45e
11 changed files with 891 additions and 425 deletions
-105
View File
@@ -144,109 +144,4 @@ class Preprocessor {
}
return isStringFromCharCodeFixed;
}
public static function processvars(e:Expr, vars:Array<String>) {
getvars(e, vars);
e = Tools.map(e, function(e) {
return switch (expr(e)) {
case EIdent(v, _):
return mk(EIdent(v, vars.indexOf(v)), e);
case EVar(n, t, e, p, s, _):
return mk(EVar(n, t, e, p, s, vars.indexOf(n)), e);
case EFunction(args, e, n, r, p, s, o, _):
return mk(EFunction(args, e, n, r, p, s, o, vars.indexOf(n)), e);
case ENew(cl, p, _):
return mk(ENew(cl, p, vars.indexOf(cl)), e);
case EClass(n, fls, extnd, i, _):
return mk(EClass(n, fls, extnd, i, vars.indexOf(n)), e);
default: e;
};
});
return e;
}
public static function getvars(e:Expr, vars:Array<String>) {
// TODO: Use a Tools function to make this cleaner (im too lazy rn) -lunar
switch (expr(e)) {
case EIdent(v):
if (!vars.contains(v))
vars.push(v);
case EBlock(e):
for (expr in e)
getvars(expr, vars);
case EFunction(_,e,name,_,_,_,_):
getvars(e, vars);
if (!vars.contains(name))
vars.push(name);
case ESwitch(e,cases,de):
for (c in cases)
getvars(c.expr, vars);
getvars(de, vars);
case EObject(fls):
for (fl in fls) getvars(fl.e, vars);
case EVar(n, t, e, _,_):
if (!vars.contains(n))
vars.push(n);
getvars(e, vars);
case EIf(c,e1,e2):
getvars(c, vars);
getvars(e1, vars);
getvars(e2, vars);
case EBinop(_,e1,e2):
getvars(e1, vars);
getvars(e2, vars);
case EUnop(_,_,e): getvars(e, vars);
case EWhile(c,e):
getvars(c, vars);
getvars(e, vars);
case EDoWhile(e1,e2):
getvars(e1, vars);
getvars(e2, vars);
case EFor(_,it,e):
getvars(it, vars);
getvars(e, vars);
case EForKeyValue(_,it,e,_):
getvars(it, vars);
getvars(e, vars);
case EReturn(e): getvars(e, vars);
case ETry(e, _, _, ec):
getvars(e, vars);
getvars(ec, vars);
case ECall(e, params):
getvars(e, vars);
for (e in params) getvars(e, vars);
case EParent(e, _): getvars(e, vars);
case EArray(e, indx):
getvars(e, vars);
getvars(indx, vars);
case EMapDecl(_, keys, values):
for (k in keys) getvars(k, vars);
for (v in values) getvars(v, vars);
case EArrayDecl(list):
for (e in list) getvars(e, vars);
case ENew(cl, params):
if (!vars.contains(cl))
vars.push(cl);
for (e in params) getvars(e, vars);
case EThrow(e):
getvars(e, vars);
case ETernary(e, e1, e2):
getvars(e1, vars);
getvars(e2, vars);
getvars(e, vars);
case EMeta(_, args, e):
for (a in args) getvars(a, vars);
getvars(e, vars);
case ECheckType(e, _):
getvars(e, vars);
case EField(e, _, _):
getvars(e, vars);
case EClass(name, fls,_,_):
if (!vars.contains(name))
vars.push(name);
for (fl in fls) getvars(fl, vars);
default:
}
}
}