abstract Ref({ v : T }) { #if !macro @:from static public function fromV(v:{v:T}):Ref { return [v]; } #end @:from macro static function from(v) { return macro { v : $v }; } } class Main5 { static function main() { #if !macro var r : Ref = 10; #end } }