Main.hx 693 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import haxe.macro.Compiler;
  2. import haxe.macro.Context;
  3. import haxe.macro.Expr;
  4. import haxe.macro.Expr.Field;
  5. class Main {
  6. static function main() OldClass.define();
  7. }
  8. #if !macro
  9. @:build(OldClass.build())
  10. #end
  11. @:native("NewClass")
  12. class OldClass {
  13. #if !macro
  14. public function new() {};
  15. #end
  16. macro public static function define():Expr return macro new OldClass();
  17. macro static function build():Array<Field>
  18. {
  19. var defined = false;
  20. Context.onAfterTyping(_ -> {
  21. if (defined) return;
  22. Context.defineType(
  23. macro class NewClass {
  24. public function new() {}
  25. }
  26. );
  27. defined = true;
  28. });
  29. Context.onGenerate(_ -> Compiler.exclude('OldClass'));
  30. return null;
  31. }
  32. }