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