line |
true |
false |
branch |
18
|
6135 |
5289019 |
for (; mg; mg = mg->mg_moremagic) { |
19
|
6128 |
7 |
if (mg->mg_virtual && mg->mg_virtual->svt_copy == backref_marker) { |
|
18 |
6110 |
if (mg->mg_virtual && mg->mg_virtual->svt_copy == backref_marker) { |
20
|
7 |
11 |
if (mg->mg_virtual->svt_local(aTHX_ sv, mg)) return TRUE; |
23
|
0 |
5289019 |
if (orig_destroy_hook) return orig_destroy_hook(aTHX_ sv); |
28
|
36 |
0 |
Stash stash("XS::Framework", GV_ADD); |
30
|
36 |
0 |
fake_dtor = newCONSTSUB(stash, "__FAKE_DTOR", newSViv(0)); |
|
36 |
0 |
fake_dtor = newCONSTSUB(stash, "__FAKE_DTOR", newSViv(0)); |
33
|
0 |
36 |
if (PL_destroyhook != &Perl_sv_destroyable) orig_destroy_hook = PL_destroyhook; |
40
|
24 |
0 |
char* class_name = abi::__cxa_demangle(ti.name(), nullptr, nullptr, &status); |
41
|
0 |
24 |
if (status != 0) { |
42
|
0 |
0 |
r += "[abi::__cxa_demangle error] "; |
43
|
0 |
0 |
r += ti.name(); |
46
|
24 |
0 |
r += class_name; |
54
|
0 |
0 |
exc += type_details(ti); |
|
0 |
0 |
exc += type_details(ti); |
55
|
0 |
0 |
exc += "', either define it or explicitly bless PROTO on output"; |
56
|
0 |
0 |
throw exc; |
62
|
0 |
24 |
if (!arg) { arg_type = "NULL"; } |
|
0 |
0 |
if (!arg) { arg_type = "NULL"; } |
65
|
0 |
24 |
if (!sv.is_object() && !sv.is_object_ref()) { |
|
0 |
0 |
if (!sv.is_object() && !sv.is_object_ref()) { |
|
0 |
24 |
if (!sv.is_object() && !sv.is_object_ref()) { |
66
|
0 |
0 |
arg_type = "not an object"; |
69
|
24 |
0 |
Object obj(sv); |
70
|
24 |
0 |
arg_type = obj.stash().name(); |
|
24 |
0 |
arg_type = obj.stash().name(); |
74
|
24 |
0 |
ex_details += arg_type; |
75
|
24 |
0 |
ex_details += "' to expected '"; |
76
|
24 |
0 |
ex_details += package; |
77
|
24 |
0 |
ex_details += "' (C++ type '" + type_details(expected) + "')"; |
|
24 |
0 |
ex_details += "' (C++ type '" + type_details(expected) + "')"; |
|
24 |
0 |
ex_details += "' (C++ type '" + type_details(expected) + "')"; |
|
24 |
0 |
ex_details += "' (C++ type '" + type_details(expected) + "')"; |
78
|
24 |
0 |
throw ex_details; |