Main.hx 954 B

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