| line | true | false | branch | 
 
| 27 | 5 | 50 | PANDA_GLOBAL_MEMBER_PTR(TypemapMarker, svt_clear_t, get, &func); | 
 
| 61 | 32 | 0 | return mg ? mg->mg_ptr : NULL; | 
 
| 65 | 23 | 0 | auto marker = xs::Sv::PayloadMarker::get(); | 
 
| 66 | 23 | 0 | marker->svt_clear = typemap::object::TypemapMarker::get(); | 
 
| 71 | 23 | 0 | Newx(mg, 1, MAGIC); | 
 
| 89 | 23 | 0 | static Sv out (const TYPE& var, const Sv& proto) { return _out(var, proto, BACKREF()); } | 
 
| 95 | 32 | 0 | for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) if (mg->mg_virtual && mg->mg_virtual->svt_clear == marker) return mg; | 
 
|  | 32 | 0 | for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) if (mg->mg_virtual && mg->mg_virtual->svt_clear == marker) return mg; | 
 
|  | 32 | 0 | for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) if (mg->mg_virtual && mg->mg_virtual->svt_clear == marker) return mg; | 
 
| 202 | 23 | 0 | TYPE var = Typemap::template cast(downgraded); | 
 
| 203 | 0 | 23 | if (!var) throw "TYPEMAP PANIC: bad object in sv"; | 
 
| 204 | 23 | 0 | Typemap::dispose(var, sv); | 
 
| 206 | 23 | 0 | });} | 
 
| 302 | 32 | 0 | if (!SvOBJECT(arg)) { | 
 
| 303 | 32 | 0 | if (SvROK(arg)) { | 
 
| 305 | 0 | 32 | if (!SvOBJECT(arg)) throw "arg is a reference to non-object"; | 
 
| 307 | 0 | 0 | else if (!SvOK(arg)) return TYPE(); | 
 
|  | 0 | 0 | else if (!SvOK(arg)) return TYPE(); | 
 
|  | 0 | 0 | else if (!SvOK(arg)) return TYPE(); | 
 
| 311 | 32 | 0 | auto ptr = IStorage::get(arg); | 
 
| 312 | 32 | 0 | if (ptr) { | 
 
| 314 | 32 | 0 | TYPE ret = cast(downgraded); | 
 
| 315 | 32 | 0 | if (ret) { | 
 
| 316 | 0 | 32 | if (!std::is_const::value && SvREADONLY(arg)) throw "cannot modify read-only object"; | 
 
| 344 | 0 | 23 | if (!var) return &PL_sv_undef; | 
 
| 347 | 0 | 23 | if (proto) { | 
 
| 348 | 0 | 0 | if (SvROK(proto)) { // ref to object/base | 
 
| 349 | 0 | 0 | rv = proto; | 
 
| 352 | 0 | 0 | else if (proto.type() <= SVt_PVMG) { // class name | 
 
| 353 | 0 | 0 | if (SvOBJECT(proto)) { | 
 
| 355 | 0 | 0 | rv = Sv::noinc(newRV_noinc(base)); | 
 
| 357 | 0 | 0 | base = newSV_type(SVt_PVMG); | 
 
| 358 | 0 | 0 | rv = Sv::noinc(newRV_noinc(base)); | 
 
| 359 | 0 | 0 | sv_bless(rv, gv_stashsv(proto, GV_ADD)); | 
 
|  | 0 | 0 | sv_bless(rv, gv_stashsv(proto, GV_ADD)); | 
 
| 363 | 0 | 0 | else if (proto.type() == SVt_PVHV && HvNAME(proto)) { // stash | 
 
|  | 0 | 0 | else if (proto.type() == SVt_PVHV && HvNAME(proto)) { // stash | 
 
|  | 0 | 0 | else if (proto.type() == SVt_PVHV && HvNAME(proto)) { // stash | 
 
|  | 0 | 0 | else if (proto.type() == SVt_PVHV && HvNAME(proto)) { // stash | 
 
|  | 0 | 0 | else if (proto.type() == SVt_PVHV && HvNAME(proto)) { // stash | 
 
|  | 0 | 0 | else if (proto.type() == SVt_PVHV && HvNAME(proto)) { // stash | 
 
|  | 0 | 0 | else if (proto.type() == SVt_PVHV && HvNAME(proto)) { // stash | 
 
|  | 0 | 0 | else if (proto.type() == SVt_PVHV && HvNAME(proto)) { // stash | 
 
|  | 0 | 0 | else if (proto.type() == SVt_PVHV && HvNAME(proto)) { // stash | 
 
| 364 | 0 | 0 | base = newSV_type(SVt_PVMG); | 
 
| 365 | 0 | 0 | rv = Sv::noinc(newRV_noinc(base)); | 
 
| 366 | 0 | 0 | sv_bless(rv, proto.get()); | 
 
| 370 | 0 | 0 | rv = Sv::noinc(newRV(proto)); | 
 
| 375 | 23 | 0 | base = newSV_type(SVt_PVMG); | 
 
| 376 | 23 | 0 | rv = Sv::noinc(newRV_noinc(base)); | 
 
| 380 | 0 | 0 | if (!SvOBJECT(base)) { // not blessed -> bless to default typemap's class | 
 
| 382 | 5 | 18 | static PERL_THREAD_LOCAL HV* stash = gv_stashpvn(Typemap::package().data(), Typemap::package().length(), GV_ADD); | 
 
|  | 5 | 0 | static PERL_THREAD_LOCAL HV* stash = gv_stashpvn(Typemap::package().data(), Typemap::package().length(), GV_ADD); | 
 
|  | 5 | 0 | static PERL_THREAD_LOCAL HV* stash = gv_stashpvn(Typemap::package().data(), Typemap::package().length(), GV_ADD); | 
 
|  | 0 | 0 | static PERL_THREAD_LOCAL HV* stash = gv_stashpvn(Typemap::package().data(), Typemap::package().length(), GV_ADD); | 
 
| 383 | 23 | 0 | sv_bless(rv, stash); // TODO: custom faster bless | 
 
| 387 | 23 | 0 | IStorage::set(base, const_cast(IType::out(IType::template cast(var)))); | 
 
| 405 | 55 | 0 | template  static inline TO cast (FROM v) { return _cast(v, CastType()); } |