package ; import haxe.macro.Expr; /** * ... * @author deep */ class ElseMacros { /** * ElseMacros.build( for (i in 0...10) trace(i), trace("empty loop") ); // no trace * * ElseMacros.build( for (i in 0...0) trace(i), trace("empty loop 2") ); // empty loop 2 */ macro static public function build(eLoop:Expr, eElse:Expr):Expr { var pre = macro var __flag__ = true; var body = macro __flag__ = false; var pos = macro if (__flag__) $eElse; return switch (eLoop.expr) { case EFor(it, expr): macro { $pre; for ($it) { $body; $expr; } $pos; } case EWhile(econd, expr, true): macro { $pre; while ($econd) { $body; $expr; } $pos; } case _: throw "unsupported loop"; } return eLoop; } }