abstract Ref({ v : T }) { @:from macro static function from(v) { return macro new Ref($v); } public function new(v:T) { this = { v : v } } } class MainSuccess { static function main() { #if !macro var r : Ref = 10; trace(r); #end } }