cc-haxe/src/macros/DCEHack.hx
2023-07-30 15:55:22 +02:00

45 lines
898 B
Haxe

package macros;
import haxe.macro.Context;
import haxe.macro.Expr;
using Lambda;
class DCEHack {
public static final classes:Array<haxe.macro.Type> = [];
macro static public function dceInclude():Array<Field> {
#if !display
var localClass = Context.getLocalClass();
if (localClass == null) {
return Context.getBuildFields();
}
// Ignore abstract classes
if (localClass.get().isAbstract) {
return Context.getBuildFields();
}
classes.push(Context.getLocalType());
#end
return Context.getBuildFields();
}
macro static public function dceGenerateCreate() {
var exprs = [];
for (c in classes) {
switch (c) {
case TInst(_.get() => t, _):
var path:TypePath = {pack: t.pack, name: t.name};
exprs.push(macro new $path());
default:
Context.error("Unknown type: " + c, Context.currentPos());
}
}
return macro return $a{exprs};
}
}