1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
import haxe.macro.Expr;
import haxe.macro.*;
class Base {}
class Extended extends Base {}
class Builder {
#if macro
static public function checkUnify():Void {
var baseType = ComplexTypeTools.toType(macro:Base);
var extendedType = ComplexTypeTools.toType(macro:Extended);
var unify = Context.unify(extendedType, baseType);
Sys.stderr().writeString("Extended unifies Base? " + unify + "\n");
}
#end
macro static public function build():Array<Field> {
Sys.stderr().writeString("in @:build\n");
checkUnify();
var fields = Context.getBuildFields();
return fields;
}
}
#if !macro
@:build(Builder.build())
#end
class Main {
var extended:Extended;
macro static function checkUnify() {
Sys.stderr().writeString("in macro function\n");
Builder.checkUnify();
return macro {};
}
static function main() {
checkUnify();
}
}
|