Branch Coverage

object.c
Criterion Covered Total %
branch 1140 2096 54.3


line true false branch
170 3293 1048 if (len == 3 && strEQ(type_str, "Str")) return TYPE_STR;
3140 153 if (len == 3 && strEQ(type_str, "Str")) return TYPE_STR;
171 153 1048 if (len == 3 && strEQ(type_str, "Int")) return TYPE_INT;
83 70 if (len == 3 && strEQ(type_str, "Int")) return TYPE_INT;
172 70 1048 if (len == 3 && strEQ(type_str, "Num")) return TYPE_NUM;
13 57 if (len == 3 && strEQ(type_str, "Num")) return TYPE_NUM;
173 57 1048 if (len == 3 && strEQ(type_str, "Any")) return TYPE_ANY;
57 0 if (len == 3 && strEQ(type_str, "Any")) return TYPE_ANY;
174 5 1043 if (len == 4 && strEQ(type_str, "Bool")) return TYPE_BOOL;
5 0 if (len == 4 && strEQ(type_str, "Bool")) return TYPE_BOOL;
175 8 1035 if (len == 6 && strEQ(type_str, "Object")) return TYPE_OBJECT;
7 1 if (len == 6 && strEQ(type_str, "Object")) return TYPE_OBJECT;
176 7 1029 if (len == 7 && strEQ(type_str, "Defined")) return TYPE_DEFINED;
1 6 if (len == 7 && strEQ(type_str, "Defined")) return TYPE_DEFINED;
177 6 1029 if (len == 7 && strEQ(type_str, "CodeRef")) return TYPE_CODEREF;
1 5 if (len == 7 && strEQ(type_str, "CodeRef")) return TYPE_CODEREF;
178 5 1029 if (len == 7 && strEQ(type_str, "HashRef")) return TYPE_HASHREF;
5 0 if (len == 7 && strEQ(type_str, "HashRef")) return TYPE_HASHREF;
179 14 1015 if (len == 8 && strEQ(type_str, "ArrayRef")) return TYPE_ARRAYREF;
14 0 if (len == 8 && strEQ(type_str, "ArrayRef")) return TYPE_ARRAYREF;
190 2 3 return SvOK(val) || SvIOK(val) || SvNOK(val) || SvPOK(val);
2 0 return SvOK(val) || SvIOK(val) || SvNOK(val) || SvPOK(val);
2 0 return SvOK(val) || SvIOK(val) || SvNOK(val) || SvPOK(val);
0 2 return SvOK(val) || SvIOK(val) || SvNOK(val) || SvPOK(val);
192 15627 3 return SvOK(val) && !SvROK(val); /* defined non-ref */
15622 5 return SvOK(val) && !SvROK(val); /* defined non-ref */
194 10922 15 if (SvIOK(val)) return true;
195 14 1 if (SvPOK(val)) {
200 0 14 if (len == 0) return false;
203 14 0 return errno == 0 && endp == pv + len && *pv != '\0';
3 11 return errno == 0 && endp == pv + len && *pv != '\0';
3 0 return errno == 0 && endp == pv + len && *pv != '\0';
207 3222 2 if (SvNIOK(val)) return true;
208 2 0 if (SvPOK(val)) {
213 0 2 if (len == 0) return false;
216 2 0 return errno == 0 && endp == pv + len && *pv != '\0';
1 1 return errno == 0 && endp == pv + len && *pv != '\0';
1 0 return errno == 0 && endp == pv + len && *pv != '\0';
221 5 3 if (SvIOK(val)) {
223 3 2 return iv == 0 || iv == 1;
2 1 return iv == 0 || iv == 1;
225 1 2 return SvTRUE(val) || !SvOK(val) || (SvPOK(val) && SvCUR(val) == 0);
1 0 return SvTRUE(val) || !SvOK(val) || (SvPOK(val) && SvCUR(val) == 0);
1 0 return SvTRUE(val) || !SvOK(val) || (SvPOK(val) && SvCUR(val) == 0);
1 0 return SvTRUE(val) || !SvOK(val) || (SvPOK(val) && SvCUR(val) == 0);
227 3005 0 return SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVAV;
3004 1 return SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVAV;
229 2006 0 return SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVHV;
2005 1 return SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVHV;
231 1 1 return SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVCV;
1 0 return SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVCV;
233 9 1 return SvROK(val) && sv_isobject(val);
7 2 return SvROK(val) && sv_isobject(val);
260 0 17 if (spec->has_coerce && spec->coerce_cb) {
0 0 if (spec->has_coerce && spec->coerce_cb) {
262 0 0 PUSHMARK(SP);
263 0 0 XPUSHs(val);
271 17 0 if (spec->type_id == TYPE_CUSTOM && spec->registered && spec->registered->coerce) {
17 0 if (spec->type_id == TYPE_CUSTOM && spec->registered && spec->registered->coerce) {
0 17 if (spec->type_id == TYPE_CUSTOM && spec->registered && spec->registered->coerce) {
275 17 0 if (spec->type_id == TYPE_CUSTOM && spec->registered && spec->registered->perl_coerce) {
17 0 if (spec->type_id == TYPE_CUSTOM && spec->registered && spec->registered->perl_coerce) {
4 13 if (spec->type_id == TYPE_CUSTOM && spec->registered && spec->registered->perl_coerce) {
277 0 4 PUSHMARK(SP);
278 0 4 XPUSHs(val);
290 34910 0 if (!spec || !spec->has_type) return true;
0 34910 if (!spec || !spec->has_type) return true;
292 34893 17 if (spec->type_id != TYPE_CUSTOM) {
296 0 17 if (!spec->registered) return true;
299 0 17 if (spec->registered->check) {
304 17 0 if (spec->registered->perl_check) {
311 0 17 PUSHMARK(SP);
312 0 17 XPUSHs(val);
316 17 0 if (count > 0) {
321 17 0 FREETMPS;
344 2848 152 while (p < end && *p != ':') p++;
2505 343 while (p < end && *p != ':') p++;
353 560 495 while (p < end) {
361 560 0 if (*p == ':') p++; /* Skip separator */
362 0 560 if (p >= end) break;
367 3059 224 while (p < end && *p != ':' && *p != '(') p++;
2863 196 while (p < end && *p != ':' && *p != '(') p++;
2723 140 while (p < end && *p != ':' && *p != '(') p++;
371 336 224 if (p < end && *p == '(') {
140 196 if (p < end && *p == '(') {
376 974 119 while (p < end && paren_depth > 0) {
953 21 while (p < end && paren_depth > 0) {
377 0 953 if (*p == '(') paren_depth++;
378 140 813 else if (*p == ')') paren_depth--;
384 107 33 if (mod_len == 7 && strncmp(mod_start, "default", 7) == 0) {
80 27 if (mod_len == 7 && strncmp(mod_start, "default", 7) == 0) {
389 80 0 if (arg_len > 0) {
396 79 1 if (arg_copy[0] >= '0' && arg_copy[0] <= '9') {
48 31 if (arg_copy[0] >= '0' && arg_copy[0] <= '9') {
397 4 44 if (strchr(arg_copy, '.')) {
402 0 32 } else if (arg_copy[0] == '-' && arg_len > 1) {
0 0 } else if (arg_copy[0] == '-' && arg_len > 1) {
403 0 0 if (strchr(arg_copy, '.')) {
408 32 0 } else if (arg_copy[0] == '\'' || arg_copy[0] == '"') {
1 31 } else if (arg_copy[0] == '\'' || arg_copy[0] == '"') {
410 1 0 if (arg_len >= 2) {
415 1 30 } else if (strncmp(arg_copy, "undef", 5) == 0) {
417 6 24 } else if (strncmp(arg_copy, "[]", 2) == 0) {
419 2 22 } else if (strncmp(arg_copy, "{}", 2) == 0) {
427 27 33 } else if (mod_len == 7 && strncmp(mod_start, "trigger", 7) == 0) {
4 23 } else if (mod_len == 7 && strncmp(mod_start, "trigger", 7) == 0) {
432 4 0 if (arg_len > 0) {
441 21 35 } else if (mod_len == 6 && strncmp(mod_start, "coerce", 6) == 0) {
0 21 } else if (mod_len == 6 && strncmp(mod_start, "coerce", 6) == 0) {
444 0 0 if (arg_len > 0) {
452 23 33 } else if (mod_len == 7 && strncmp(mod_start, "builder", 7) == 0) {
20 3 } else if (mod_len == 7 && strncmp(mod_start, "builder", 7) == 0) {
455 18 2 if (arg_len > 0) {
468 3 33 } else if (mod_len == 7 && strncmp(mod_start, "clearer", 7) == 0) {
3 0 } else if (mod_len == 7 && strncmp(mod_start, "clearer", 7) == 0) {
471 3 0 if (arg_len > 0) {
479 3 30 } else if (mod_len == 9 && strncmp(mod_start, "predicate", 9) == 0) {
3 0 } else if (mod_len == 9 && strncmp(mod_start, "predicate", 9) == 0) {
482 3 0 if (arg_len > 0) {
490 21 9 } else if (mod_len == 6 && strncmp(mod_start, "reader", 6) == 0) {
10 11 } else if (mod_len == 6 && strncmp(mod_start, "reader", 6) == 0) {
492 10 0 if (arg_len > 0) {
500 11 9 } else if (mod_len == 6 && strncmp(mod_start, "writer", 6) == 0) {
11 0 } else if (mod_len == 6 && strncmp(mod_start, "writer", 6) == 0) {
502 11 0 if (arg_len > 0) {
510 9 0 } else if (mod_len == 3 && strncmp(mod_start, "arg", 3) == 0) {
9 0 } else if (mod_len == 3 && strncmp(mod_start, "arg", 3) == 0) {
512 9 0 if (arg_len > 0) {
523 61 359 if (mod_len == 8 && strncmp(mod_start, "required", 8) == 0) {
34 27 if (mod_len == 8 && strncmp(mod_start, "required", 8) == 0) {
525 27 359 } else if (mod_len == 8 && strncmp(mod_start, "readonly", 8) == 0) {
13 14 } else if (mod_len == 8 && strncmp(mod_start, "readonly", 8) == 0) {
527 26 347 } else if (mod_len == 4 && strncmp(mod_start, "lazy", 4) == 0) {
14 12 } else if (mod_len == 4 && strncmp(mod_start, "lazy", 4) == 0) {
529 12 347 } else if (mod_len == 4 && strncmp(mod_start, "weak", 4) == 0) {
7 5 } else if (mod_len == 4 && strncmp(mod_start, "weak", 4) == 0) {
531 18 334 } else if (mod_len == 7 && strncmp(mod_start, "clearer", 7) == 0) {
11 7 } else if (mod_len == 7 && strncmp(mod_start, "clearer", 7) == 0) {
534 10 331 } else if (mod_len == 9 && strncmp(mod_start, "predicate", 9) == 0) {
10 0 } else if (mod_len == 9 && strncmp(mod_start, "predicate", 9) == 0) {
547 323 8 if (type_id != TYPE_NONE) {
552 8 0 if (g_type_registry) {
554 7 1 if (svp) {
592 0 43220 if (!SvROK(obj)) return NULL;
594 6225 36995 while (mg) {
595 6225 0 if (mg->mg_virtual == &object_magic_vtbl) return mg;
639 47 19 if (src->default_sv) dst->default_sv = SvREFCNT_inc(src->default_sv);
640 0 66 if (src->trigger_cb) dst->trigger_cb = SvREFCNT_inc(src->trigger_cb);
641 0 66 if (src->coerce_cb) dst->coerce_cb = SvREFCNT_inc(src->coerce_cb);
642 1 65 if (src->builder_name) dst->builder_name = SvREFCNT_inc(src->builder_name);
643 0 66 if (src->clearer_name) dst->clearer_name = SvREFCNT_inc(src->clearer_name);
644 0 66 if (src->predicate_name) dst->predicate_name = SvREFCNT_inc(src->predicate_name);
645 1 65 if (src->reader_name) dst->reader_name = SvREFCNT_inc(src->reader_name);
646 1 65 if (src->writer_name) dst->writer_name = SvREFCNT_inc(src->writer_name);
647 1 65 if (src->init_arg) dst->init_arg = SvREFCNT_inc(src->init_arg);
660 0 11 if (override->has_type) {
667 9 2 if (override->has_default) {
668 8 1 if (merged->default_sv) SvREFCNT_dec(merged->default_sv);
669 9 0 merged->default_sv = override->default_sv ? SvREFCNT_inc(override->default_sv) : NULL;
674 1 10 if (override->has_trigger) {
675 0 1 if (merged->trigger_cb) SvREFCNT_dec(merged->trigger_cb);
676 1 0 merged->trigger_cb = override->trigger_cb ? SvREFCNT_inc(override->trigger_cb) : NULL;
681 0 11 if (override->has_coerce) {
682 0 0 if (merged->coerce_cb) SvREFCNT_dec(merged->coerce_cb);
683 0 0 merged->coerce_cb = override->coerce_cb ? SvREFCNT_inc(override->coerce_cb) : NULL;
688 1 10 if (override->has_builder) {
689 0 1 if (merged->builder_name) SvREFCNT_dec(merged->builder_name);
690 1 0 merged->builder_name = override->builder_name ? SvREFCNT_inc(override->builder_name) : NULL;
695 0 11 if (override->is_required) merged->is_required = 1;
696 1 10 if (override->is_readonly) merged->is_readonly = 1;
697 0 11 if (override->is_lazy) merged->is_lazy = 1;
698 0 11 if (override->is_weak) merged->is_weak = 1;
701 0 11 if (override->has_clearer) {
703 0 0 if (override->clearer_name) {
704 0 0 if (merged->clearer_name) SvREFCNT_dec(merged->clearer_name);
708 0 11 if (override->has_predicate) {
710 0 0 if (override->predicate_name) {
711 0 0 if (merged->predicate_name) SvREFCNT_dec(merged->predicate_name);
717 0 11 if (override->reader_name) {
718 0 0 if (merged->reader_name) SvREFCNT_dec(merged->reader_name);
721 0 11 if (override->writer_name) {
722 0 0 if (merged->writer_name) SvREFCNT_dec(merged->writer_name);
725 0 11 if (override->init_arg) {
726 0 0 if (merged->init_arg) SvREFCNT_dec(merged->init_arg);
753 0 27824 if (!g_class_registry) return NULL;
755 21569 6255 if (svp && SvIOK(*svp)) {
21569 0 if (svp && SvIOK(*svp)) {
762 0 249 if (!g_class_registry) {
793 0 0 if (is_named) {
795 0 0 if (!meta->has_any_types && !meta->has_any_defaults && !meta->has_any_required) {
0 0 if (!meta->has_any_types && !meta->has_any_defaults && !meta->has_any_required) {
0 0 if (!meta->has_any_types && !meta->has_any_defaults && !meta->has_any_required) {
798 0 0 Zero(&ary[1], slot_count - 1, SV*);
800 0 0 for (i = 0; i < items; i += 2) {
802 0 0 SV *val_sv = (i + 1 < items) ? MARK[i + 2] : &PL_sv_undef;
806 0 0 if (idx_svp) {
813 0 0 for (i = 1; i < slot_count; i++) {
814 0 0 if (!ary[i]) ary[i] = newSV(0);
819 0 0 Zero(&ary[1], slot_count - 1, SV*);
821 0 0 for (i = 0; i < items; i += 2) {
823 0 0 SV *val_sv = (i + 1 < items) ? MARK[i + 2] : &PL_sv_undef;
827 0 0 if (idx_svp) {
830 0 0 if (meta->has_any_types && meta->slots[idx] && meta->slots[idx]->has_type) {
0 0 if (meta->has_any_types && meta->slots[idx] && meta->slots[idx]->has_type) {
0 0 if (meta->has_any_types && meta->slots[idx] && meta->slots[idx]->has_type) {
832 0 0 if (spec->type_id != TYPE_CUSTOM) {
833 0 0 if (!check_builtin_type(aTHX_ val_sv, spec->type_id)) {
837 0 0 } else if (spec->registered && spec->registered->check) {
0 0 } else if (spec->registered && spec->registered->check) {
838 0 0 if (!spec->registered->check(aTHX_ val_sv)) {
849 0 0 for (i = 1; i < slot_count; i++) {
850 0 0 if (!ary[i] || !SvOK(ary[i])) {
0 0 if (!ary[i] || !SvOK(ary[i])) {
853 0 0 if (spec && spec->is_required) {
0 0 if (spec && spec->is_required) {
857 0 0 if (spec && spec->has_default && spec->default_sv) {
0 0 if (spec && spec->has_default && spec->default_sv) {
0 0 if (spec && spec->has_default && spec->default_sv) {
858 0 0 if (SvROK(spec->default_sv)) {
859 0 0 if (ary[i]) SvREFCNT_dec(ary[i]);
860 0 0 if (SvTYPE(SvRV(spec->default_sv)) == SVt_PVAV) {
862 0 0 } else if (SvTYPE(SvRV(spec->default_sv)) == SVt_PVHV) {
868 0 0 if (ary[i]) { sv_setsv(ary[i], spec->default_sv); }
871 0 0 } else if (!ary[i]) {
880 0 0 if (provided > slot_count - 1) provided = slot_count - 1;
882 0 0 if (!meta->has_any_types) {
883 0 0 for (i = 0; i < provided; i++) {
887 0 0 for (i = 0; i < provided; i++) {
891 0 0 if (meta->slots[idx] && meta->slots[idx]->has_type) {
0 0 if (meta->slots[idx] && meta->slots[idx]->has_type) {
893 0 0 if (spec->type_id != TYPE_CUSTOM) {
894 0 0 if (!check_builtin_type(aTHX_ val_sv, spec->type_id)) {
898 0 0 } else if (spec->registered && spec->registered->check) {
0 0 } else if (spec->registered && spec->registered->check) {
899 0 0 if (!spec->registered->check(aTHX_ val_sv)) {
910 0 0 for (i = provided + 1; i < slot_count; i++) {
915 0 0 if (meta->has_any_defaults || meta->has_any_required) {
0 0 if (meta->has_any_defaults || meta->has_any_required) {
916 0 0 for (i = 1; i < slot_count; i++) {
917 0 0 if (!SvOK(ary[i])) {
920 0 0 if (spec && spec->is_required) {
0 0 if (spec && spec->is_required) {
924 0 0 if (spec && spec->has_default && spec->default_sv) {
0 0 if (spec && spec->has_default && spec->default_sv) {
0 0 if (spec && spec->has_default && spec->default_sv) {
925 0 0 if (SvROK(spec->default_sv)) {
926 0 0 if (SvTYPE(SvRV(spec->default_sv)) == SVt_PVAV) {
929 0 0 } else if (SvTYPE(SvRV(spec->default_sv)) == SVt_PVHV) {
949 0 0 if (meta->has_any_builders) {
950 0 0 for (i = 1; i < slot_count; i++) {
952 0 0 if (spec && spec->has_builder && !spec->is_lazy && !SvOK(ary[i])) {
0 0 if (spec && spec->has_builder && !spec->is_lazy && !SvOK(ary[i])) {
0 0 if (spec && spec->has_builder && !spec->is_lazy && !SvOK(ary[i])) {
0 0 if (spec && spec->has_builder && !spec->is_lazy && !SvOK(ary[i])) {
958 0 0 PUSHMARK(SP);
959 0 0 XPUSHs(obj_sv);
963 0 0 if (count > 0) {
967 0 0 if (spec->has_type) {
968 0 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
0 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
970 0 0 if (!check_slot_type(aTHX_ built_val, spec)) {
971 0 0 const char *type_name = (spec->type_id == TYPE_CUSTOM && spec->registered)
973 0 0 : type_id_to_name(spec->type_id);
982 0 0 FREETMPS;
989 0 0 if (meta->has_any_weak) {
990 0 0 for (i = 1; i < slot_count; i++) {
992 0 0 if (spec && spec->is_weak && SvROK(ary[i])) {
0 0 if (spec && spec->is_weak && SvROK(ary[i])) {
0 0 if (spec && spec->is_weak && SvROK(ary[i])) {
1000 0 0 if (meta->has_build == 0) {
1002 0 0 if (gv && GvCV(gv)) {
0 0 if (gv && GvCV(gv)) {
1009 0 0 if (meta->has_build == 1) {
1013 0 0 PUSHMARK(SP);
1014 0 0 XPUSHs(obj_sv);
1017 0 0 FREETMPS;
1022 0 0 XPUSHs(obj_sv);
1042 45621 0 while (av && depth < MAX_PROTOTYPE_DEPTH) {
45621 0 while (av && depth < MAX_PROTOTYPE_DEPTH) {
1044 35 45620 for (i = 0; i < depth; i++) {
1045 1 34 if (visited[i] == av) {
1053 45620 0 if (idx <= AvFILLp(av)) {
1055 45620 0 if (slot && SvOK(slot)) return slot;
37760 7860 if (slot && SvOK(slot)) return slot;
1059 0 7860 if (AvFILLp(av) < 0) break;
1062 7860 0 if (!proto_sv || !SvROK(proto_sv) || SvTYPE(SvRV(proto_sv)) != SVt_PVAV) break;
26 7834 if (!proto_sv || !SvROK(proto_sv) || SvTYPE(SvRV(proto_sv)) != SVt_PVAV) break;
26 0 if (!proto_sv || !SvROK(proto_sv) || SvTYPE(SvRV(proto_sv)) != SVt_PVAV) break;
1068 0 7834 if (depth >= MAX_PROTOTYPE_DEPTH) {
1086 0 0 if (!SvROK(obj) || SvTYPE(SvRV(obj)) != SVt_PVAV) {
0 0 if (!SvROK(obj) || SvTYPE(SvRV(obj)) != SVt_PVAV) {
1093 0 0 if (idx <= AvFILLp(av)) {
1095 0 0 if (sv && SvOK(sv)) {
0 0 if (sv && SvOK(sv)) {
1105 0 0 if (proto_sv && SvROK(proto_sv) && SvTYPE(SvRV(proto_sv)) == SVt_PVAV) {
0 0 if (proto_sv && SvROK(proto_sv) && SvTYPE(SvRV(proto_sv)) == SVt_PVAV) {
0 0 if (proto_sv && SvROK(proto_sv) && SvTYPE(SvRV(proto_sv)) == SVt_PVAV) {
1129 0 0 if (!SvROK(obj) || SvTYPE(rv) != SVt_PVAV) {
0 0 if (!SvROK(obj) || SvTYPE(rv) != SVt_PVAV) {
1136 0 0 if (SvMAGICAL(rv)) {
1138 0 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
0 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
1144 0 0 if (idx <= AvFILLp(av)) {
1146 0 0 if (slot) {
1178 8 89 if (g_func_accessor_count >= g_func_accessor_capacity) {
1179 0 8 IV new_capacity = g_func_accessor_capacity ? g_func_accessor_capacity * 2 : 64;
1180 0 8 Renew(g_func_accessor_registry, new_capacity, FuncAccessorData*);
1203 0 0 if (!SvROK(obj) || SvTYPE(SvRV(obj)) != SVt_PVAV) {
0 0 if (!SvROK(obj) || SvTYPE(SvRV(obj)) != SVt_PVAV) {
1210 0 0 if (SvMAGICAL(av)) {
1212 0 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
0 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
1218 0 0 if (spec->has_checks) {
1219 0 0 if (spec->is_readonly) {
1222 0 0 if (spec->is_required && !SvOK(val)) {
0 0 if (spec->is_required && !SvOK(val)) {
1225 0 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM) {
0 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM) {
1231 0 0 if (spec->has_type) {
1232 0 0 if (!check_slot_type(aTHX_ val, spec)) {
1233 0 0 const char *type_name = (spec->type_id == TYPE_CUSTOM && spec->registered)
1235 0 0 : type_id_to_name(spec->type_id);
1242 0 0 if (spec->has_trigger && spec->trigger_cb) {
0 0 if (spec->has_trigger && spec->trigger_cb) {
1244 0 0 PUSHMARK(SP);
1245 0 0 XPUSHs(obj);
1246 0 0 XPUSHs(val);
1251 0 0 if (!spec->is_weak) {
1253 0 0 if (idx <= AvFILLp(av)) {
1255 0 0 if (slot) {
1265 0 0 if (SvROK(stored)) sv_rvweaken(stored);
1283 0 0 if (!OpHAS_SIBLING(pushop)) {
1287 0 0 selfop = OpSIBLING(pushop);
1290 0 0 while (OpHAS_SIBLING(cvop)) {
1292 0 0 cvop = OpSIBLING(cvop);
1296 0 0 if (argop != selfop) {
1298 0 0 OP *valop = OpSIBLING(selfop);
1345 5127 0 if (items > 0 && SvPOK(ST(0)) && !SvROK(ST(0))) {
5127 0 if (items > 0 && SvPOK(ST(0)) && !SvROK(ST(0))) {
5127 0 if (items > 0 && SvPOK(ST(0)) && !SvROK(ST(0))) {
1353 4059 1068 if (arg_count > 0 && (arg_count % 2) == 0 && SvPOK(ST(start_arg))) {
3865 194 if (arg_count > 0 && (arg_count % 2) == 0 && SvPOK(ST(start_arg))) {
3807 58 if (arg_count > 0 && (arg_count % 2) == 0 && SvPOK(ST(start_arg))) {
1356 70 3737 if (hv_exists(meta->prop_to_idx, pv, len) || hv_exists(meta->arg_to_idx, pv, len)) {
8 62 if (hv_exists(meta->prop_to_idx, pv, len) || hv_exists(meta->arg_to_idx, pv, len)) {
1372 10633 5127 for (i = 1; i < slot_count; i++) {
1374 10633 0 if (spec && spec->has_default && spec->default_sv) {
2384 8249 if (spec && spec->has_default && spec->default_sv) {
2384 0 if (spec && spec->has_default && spec->default_sv) {
1375 33 2351 if (SvROK(spec->default_sv)) {
1376 30 3 if (SvTYPE(SvRV(spec->default_sv)) == SVt_PVAV) {
1378 3 0 } else if (SvTYPE(SvRV(spec->default_sv)) == SVt_PVHV) {
1395 3745 1382 if (is_named) {
1397 4716 3732 for (i = start_arg; i < items; i += 2) {
1399 4716 0 SV *val_sv = (i + 1 < items) ? ST(i + 1) : &PL_sv_undef;
1403 4713 3 if (idx_svp) {
1408 4713 0 if (spec && spec->has_type) {
4673 40 if (spec && spec->has_type) {
1409 4673 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
11 4662 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
1411 13 4660 if (!check_slot_type(aTHX_ val_sv, spec)) {
1412 3 0 const char *type_name = (spec->type_id == TYPE_CUSTOM && spec->registered)
1414 3 10 : type_id_to_name(spec->type_id);
1421 4700 0 if (spec && spec->has_trigger && spec->trigger_cb) {
3 4697 if (spec && spec->has_trigger && spec->trigger_cb) {
3 0 if (spec && spec->has_trigger && spec->trigger_cb) {
1423 0 3 PUSHMARK(SP);
1424 0 3 XPUSHs(obj_sv);
1425 0 3 XPUSHs(val_sv);
1436 1 1381 if (provided > slot_count - 1) provided = slot_count - 1;
1438 798 1380 for (i = 0; i < provided; i++) {
1444 798 0 if (spec && spec->has_type) {
309 489 if (spec && spec->has_type) {
1445 309 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
0 309 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
1447 2 307 if (!check_slot_type(aTHX_ val_sv, spec)) {
1448 0 0 const char *type_name = (spec->type_id == TYPE_CUSTOM && spec->registered)
1450 0 2 : type_id_to_name(spec->type_id);
1457 796 0 if (spec && spec->has_trigger && spec->trigger_cb) {
0 796 if (spec && spec->has_trigger && spec->trigger_cb) {
0 0 if (spec && spec->has_trigger && spec->trigger_cb) {
1459 0 0 PUSHMARK(SP);
1460 0 0 XPUSHs(obj_sv);
1461 0 0 XPUSHs(val_sv);
1471 3234 1878 if (meta->has_any_builders) {
1472 6470 3234 for (i = 1; i < slot_count; i++) {
1474 6470 0 if (spec && spec->has_builder && !spec->is_lazy && !SvOK(ary[i])) {
3234 3236 if (spec && spec->has_builder && !spec->is_lazy && !SvOK(ary[i])) {
8 3226 if (spec && spec->has_builder && !spec->is_lazy && !SvOK(ary[i])) {
7 1 if (spec && spec->has_builder && !spec->is_lazy && !SvOK(ary[i])) {
1480 0 7 PUSHMARK(SP);
1481 0 7 XPUSHs(obj_sv);
1485 7 0 if (count > 0) {
1489 7 0 if (spec->has_type) {
1490 7 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
0 7 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
1492 0 7 if (!check_slot_type(aTHX_ built_val, spec)) {
1493 0 0 const char *type_name = (spec->type_id == TYPE_CUSTOM && spec->registered)
1495 0 0 : type_id_to_name(spec->type_id);
1504 7 0 FREETMPS;
1511 2283 2829 if (meta->has_any_required) {
1512 4657 2274 for (i = 1; i < slot_count; i++) {
1514 4657 0 if (spec && spec->is_required && !SvOK(ary[i])) {
2292 2365 if (spec && spec->is_required && !SvOK(ary[i])) {
9 2283 if (spec && spec->is_required && !SvOK(ary[i])) {
1521 6 5097 if (meta->has_any_weak) {
1522 6 6 for (i = 1; i < slot_count; i++) {
1524 6 0 if (spec && spec->is_weak && SvROK(ary[i])) {
6 0 if (spec && spec->is_weak && SvROK(ary[i])) {
3 3 if (spec && spec->is_weak && SvROK(ary[i])) {
1532 212 4891 if (meta->has_build == 0) {
1534 12 200 if (gv && GvCV(gv)) {
12 0 if (gv && GvCV(gv)) {
1541 25 5078 if (meta->has_build == 1) {
1545 0 25 PUSHMARK(SP);
1546 0 25 XPUSHs(obj_sv);
1549 25 0 FREETMPS;
1566 204 0 if (!SvROK(self) || SvTYPE(rv) != SVt_PVAV) {
0 204 if (!SvROK(self) || SvTYPE(rv) != SVt_PVAV) {
1571 32 172 if (items > 1) {
1573 1 31 if (SvMAGICAL(rv)) {
1575 1 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
1 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
1580 31 0 if (idx <= AvFILLp(av)) {
1582 31 0 if (slot) {
1593 172 0 if (idx <= AvFILLp(av)) {
1595 172 0 if (sv && SvOK(sv)) {
149 23 if (sv && SvOK(sv)) {
1603 23 0 if (proto && SvROK(*proto) && SvTYPE(SvRV(*proto)) == SVt_PVAV) {
20 3 if (proto && SvROK(*proto) && SvTYPE(SvRV(*proto)) == SVt_PVAV) {
20 0 if (proto && SvROK(*proto) && SvTYPE(SvRV(*proto)) == SVt_PVAV) {
1645 0 80297 if (!SvROK(obj)) croak("Not an object");
1647 0 80297 if (SvTYPE(rv) != SVt_PVAV) croak("Not an object");
1651 0 80297 if (data->expected_class && SvSTASH(rv) != data->expected_class->stash) {
0 0 if (data->expected_class && SvSTASH(rv) != data->expected_class->stash) {
1652 0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
1658 80297 0 if (idx <= AvFILLp(av)) {
1660 80297 0 if (sv) {
1679 0 4053 if (!SvROK(obj)) croak("Not an object");
1681 0 4053 if (SvTYPE(rv) != SVt_PVAV) croak("Not an object");
1685 0 4053 if (data->expected_class && SvSTASH(rv) != data->expected_class->stash) {
0 0 if (data->expected_class && SvSTASH(rv) != data->expected_class->stash) {
1686 0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
1692 4053 0 if (idx <= AvFILLp(av)) {
1694 4053 0 if (slot) {
1708 0 346 if (!op) return false;
1710 238 108 switch (op->op_type) {
1735 0 286 if (!data) {
1740 286 0 if (!OpHAS_SIBLING(pushop)) {
1745 286 0 objop = OpSIBLING(pushop);
1748 356 286 while (OpHAS_SIBLING(cvop)) {
1750 356 0 cvop = OpSIBLING(cvop);
1754 70 216 if (argop != objop) {
1756 70 0 OP *valop = OpSIBLING(objop);
1759 70 0 if (valop && OpSIBLING(valop) == cvop &&
70 0 if (valop && OpSIBLING(valop) == cvop &&
1760 30 30 is_simple_op(objop) && is_simple_op(valop)) {
1778 68 148 if (!is_simple_op(objop)) {
1801 20340 0 if (!SvROK(obj) || SvTYPE(SvRV(obj)) != SVt_PVAV) {
0 20340 if (!SvROK(obj) || SvTYPE(SvRV(obj)) != SVt_PVAV) {
1807 0 20340 if (data->expected_class && SvSTASH(SvRV(obj)) != data->expected_class->stash) {
0 0 if (data->expected_class && SvSTASH(SvRV(obj)) != data->expected_class->stash) {
1808 0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
0 0 croak("Expected object of class '%s', got '%s'",
1813 4136 16204 if (items > 1) {
1815 4136 0 if (idx <= AvFILLp(av)) {
1817 4136 0 if (slot) {
1827 16204 0 if (idx <= AvFILLp(av)) {
1829 16204 0 ST(0) = (sv && SvOK(sv)) ? sv : &PL_sv_undef;
16204 0 ST(0) = (sv && SvOK(sv)) ? sv : &PL_sv_undef;
1849 42 55 if (cv) {
1850 0 42 if (!force) {
1857 42 0 if (stash) {
1885 0 27 if (items < 1) croak("Usage: Object::Proto::import_accessors($class [, $package])");
1889 11 16 if (items > 1) {
1893 16 0 pkg_pv = CopSTASHPV(PL_curcop);
16 0 pkg_pv = CopSTASHPV(PL_curcop);
16 0 pkg_pv = CopSTASHPV(PL_curcop);
0 16 pkg_pv = CopSTASHPV(PL_curcop);
0 0 pkg_pv = CopSTASHPV(PL_curcop);
16 0 pkg_pv = CopSTASHPV(PL_curcop);
0 16 pkg_pv = CopSTASHPV(PL_curcop);
1898 0 27 if (!meta) {
1903 6 21 is_same_class = (class_len == pkg_len && strEQ(class_pv, pkg_pv));
5 1 is_same_class = (class_len == pkg_len && strEQ(class_pv, pkg_pv));
1906 82 27 for (i = 1; i < meta->slot_count; i++) {
1907 82 0 if (meta->idx_to_prop[i]) {
1927 0 15 if (items < 2) croak("Usage: Object::Proto::import_accessor($class, $prop [, $alias [, $package]])");
1933 15 0 if (items > 2 && SvOK(ST(2))) {
15 0 if (items > 2 && SvOK(ST(2))) {
1940 3 12 if (items > 3) {
1943 12 0 pkg_pv = CopSTASHPV(PL_curcop);
12 0 pkg_pv = CopSTASHPV(PL_curcop);
12 0 pkg_pv = CopSTASHPV(PL_curcop);
0 12 pkg_pv = CopSTASHPV(PL_curcop);
0 0 pkg_pv = CopSTASHPV(PL_curcop);
12 0 pkg_pv = CopSTASHPV(PL_curcop);
0 12 pkg_pv = CopSTASHPV(PL_curcop);
1948 0 15 if (!meta) {
1954 0 15 if (!idx_svp) {
1960 0 15 is_same_class = (class_len == pkg_len && strEQ(class_pv, pkg_pv));
0 0 is_same_class = (class_len == pkg_len && strEQ(class_pv, pkg_pv));
1980 57 0 caller_pkg = CopSTASHPV(PL_curcop);
57 0 caller_pkg = CopSTASHPV(PL_curcop);
57 0 caller_pkg = CopSTASHPV(PL_curcop);
0 57 caller_pkg = CopSTASHPV(PL_curcop);
0 0 caller_pkg = CopSTASHPV(PL_curcop);
57 0 caller_pkg = CopSTASHPV(PL_curcop);
0 57 caller_pkg = CopSTASHPV(PL_curcop);
1984 0 57 if (!define_cv) croak("Object::Proto::define not found");
1991 57 0 if (GvCV(gv) == NULL) {
2003 57 0 if (before_cv) {
2006 57 0 if (GvCV(gv) == NULL) {
2014 57 0 if (after_cv) {
2017 57 0 if (GvCV(gv) == NULL) {
2025 57 0 if (around_cv) {
2028 57 0 if (GvCV(gv) == NULL) {
2040 171 57 for (i = 0; i < 3; i++) {
2044 171 0 if (cv) {
2047 171 0 if (GvCV(gv) == NULL) {
2073 0 154 if (cv) {
2094 71673 0 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
0 71673 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
2099 26098 45575 if (items > 1) {
2103 1 26097 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
1 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
2107 7 26090 if (spec->is_readonly) {
2112 1008 25082 if (spec->is_required && !SvOK(val)) {
2 1006 if (spec->is_required && !SvOK(val)) {
2117 26088 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
6 26082 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
2121 26088 0 if (spec->has_type) {
2122 19 26069 if (!check_slot_type(aTHX_ val, spec)) {
2123 2 0 const char *type_name = (spec->type_id == TYPE_CUSTOM && spec->registered)
2125 2 17 : type_id_to_name(spec->type_id);
2132 3 26066 if (spec->has_trigger && spec->trigger_cb) {
3 0 if (spec->has_trigger && spec->trigger_cb) {
2134 0 3 PUSHMARK(SP);
2135 0 3 XPUSHs(self);
2136 0 3 XPUSHs(val);
2145 1 26068 if (spec->is_weak && SvROK(stored)) {
1 0 if (spec->is_weak && SvROK(stored)) {
2156 7424 38151 if (spec->is_lazy && !SvOK(result)) {
3822 3602 if (spec->is_lazy && !SvOK(result)) {
2159 3822 0 if (spec->has_builder && spec->builder_name) {
3822 0 if (spec->has_builder && spec->builder_name) {
2167 0 3822 PUSHMARK(SP);
2168 0 3822 XPUSHs(self);
2174 3822 0 if (count > 0) {
2181 3822 0 FREETMPS;
2183 0 0 } else if (spec->has_default && spec->default_sv) {
0 0 } else if (spec->has_default && spec->default_sv) {
2185 0 0 if (SvROK(spec->default_sv)) {
2188 0 0 if (SvTYPE(inner) == SVt_PVAV) {
2190 0 0 } else if (SvTYPE(inner) == SVt_PVHV) {
2200 3822 0 if (built_val) {
2202 3822 0 if (spec->has_type && SvOK(built_val)) {
3822 0 if (spec->has_type && SvOK(built_val)) {
2203 0 3822 if (!check_slot_type(aTHX_ built_val, spec)) {
2204 0 0 const char *type_name = (spec->type_id == TYPE_CUSTOM && spec->registered)
2206 0 0 : type_id_to_name(spec->type_id);
2233 0 0 if (!OpHAS_SIBLING(pushop)) {
2237 0 0 selfop = OpSIBLING(pushop);
2240 0 0 while (OpHAS_SIBLING(cvop)) {
2242 0 0 cvop = OpSIBLING(cvop);
2246 0 0 if (argop != selfop) {
2248 0 0 OP *valop = OpSIBLING(selfop);
2286 13 0 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
0 13 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
2292 13 0 if (spec && spec->is_lazy && spec->has_builder && spec->builder_name) {
1 12 if (spec && spec->is_lazy && spec->has_builder && spec->builder_name) {
1 0 if (spec && spec->is_lazy && spec->has_builder && spec->builder_name) {
1 0 if (spec && spec->is_lazy && spec->has_builder && spec->builder_name) {
2293 1 0 if (idx <= AvFILLp(av)) {
2295 1 0 if (!slot || !SvOK(slot)) {
1 0 if (!slot || !SvOK(slot)) {
2301 0 1 PUSHMARK(SP);
2302 0 1 XPUSHs(self);
2306 1 0 if (count > 0) {
2310 1 0 if (spec->has_type) {
2311 1 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
0 1 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
2313 0 1 if (!check_slot_type(aTHX_ built_val, spec)) {
2314 0 0 const char *type_name = (spec->type_id == TYPE_CUSTOM && spec->registered)
2316 0 0 : type_id_to_name(spec->type_id);
2325 1 0 FREETMPS;
2332 13 0 if (idx <= AvFILLp(av)) {
2334 13 0 if (sv && SvOK(sv)) {
13 0 if (sv && SvOK(sv)) {
2342 0 0 if (proto && SvROK(*proto) && SvTYPE(SvRV(*proto)) == SVt_PVAV) {
0 0 if (proto && SvROK(*proto) && SvTYPE(SvRV(*proto)) == SVt_PVAV) {
0 0 if (proto && SvROK(*proto) && SvTYPE(SvRV(*proto)) == SVt_PVAV) {
2363 14 0 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
0 14 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
2368 1 13 if (items < 2) {
2374 1 12 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
1 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
2379 12 0 if (spec && spec->is_readonly) {
1 11 if (spec && spec->is_readonly) {
2387 11 0 if (spec && spec->is_required && !SvOK(val)) {
1 10 if (spec && spec->is_required && !SvOK(val)) {
1 0 if (spec && spec->is_required && !SvOK(val)) {
2392 10 0 if (spec && spec->has_type) {
10 0 if (spec && spec->has_type) {
2393 10 0 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
0 10 if (spec->has_coerce || spec->type_id == TYPE_CUSTOM)
2395 1 9 if (!check_slot_type(aTHX_ val, spec)) {
2396 0 0 const char *type_name = (spec->type_id == TYPE_CUSTOM && spec->registered)
2398 0 1 : type_id_to_name(spec->type_id);
2405 9 0 if (spec && spec->has_trigger && spec->trigger_cb) {
1 8 if (spec && spec->has_trigger && spec->trigger_cb) {
1 0 if (spec && spec->has_trigger && spec->trigger_cb) {
2407 0 1 PUSHMARK(SP);
2408 0 1 XPUSHs(self);
2409 0 1 XPUSHs(val);
2415 9 0 if (idx <= AvFILLp(av)) {
2417 9 0 if (slot) {
2420 9 0 if (spec && spec->is_weak && SvROK(slot)) {
1 8 if (spec && spec->is_weak && SvROK(slot)) {
1 0 if (spec && spec->is_weak && SvROK(slot)) {
2431 0 0 if (spec && spec->is_weak && SvROK(stored)) {
0 0 if (spec && spec->is_weak && SvROK(stored)) {
0 0 if (spec && spec->is_weak && SvROK(stored)) {
2450 0 11 if (cv) {
2472 0 12 if (cv) {
2495 13 383 if (cv) {
2498 13 0 if (data) {
2528 9820 0 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
0 9820 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
2535 1 9819 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
1 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
2552 3 13 if (custom_name && SvOK(custom_name)) {
3 0 if (custom_name && SvOK(custom_name)) {
2560 1 15 if (cv) {
2583 10232 0 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
0 10232 if (!SvROK(self) || SvTYPE(SvRV(self)) != SVt_PVAV) {
2590 10232 0 if (svp && SvOK(*svp)) {
6220 4012 if (svp && SvOK(*svp)) {
2604 3 12 if (custom_name && SvOK(custom_name)) {
3 0 if (custom_name && SvOK(custom_name)) {
2612 1 14 if (cv) {
2636 4 0 if (meta && meta->demolish_cv) {
4 0 if (meta && meta->demolish_cv) {
2640 0 4 PUSHMARK(SP);
2641 0 4 XPUSHs(self);
2646 4 0 if (SvTRUE(ERRSV)) {
0 4 if (SvTRUE(ERRSV)) {
2647 0 0 warn("Error in DEMOLISH: %s", SvPV_nolen(ERRSV));
2649 0 4 FREETMPS;
2665 0 2 if (cv) {
2679 2 18 if (!g_role_registry) return NULL;
2681 13 5 if (svp && SvIOK(*svp)) {
13 0 if (svp && SvIOK(*svp)) {
2688 2 5 if (!g_role_registry) {
2702 4 0 if (!from_gv || !(cv = GvCV(from_gv))) {
0 4 if (!from_gv || !(cv = GvCV(from_gv))) {
2708 0 4 if (to_gv && GvCV(to_gv)) {
0 0 if (to_gv && GvCV(to_gv)) {
2713 4 0 snprintf(full_name, sizeof(full_name), "%s::%s", HvNAME(to_stash), method_name);
4 0 snprintf(full_name, sizeof(full_name), "%s::%s", HvNAME(to_stash), method_name);
0 4 snprintf(full_name, sizeof(full_name), "%s::%s", HvNAME(to_stash), method_name);
0 0 snprintf(full_name, sizeof(full_name), "%s::%s", HvNAME(to_stash), method_name);
4 0 snprintf(full_name, sizeof(full_name), "%s::%s", HvNAME(to_stash), method_name);
0 4 snprintf(full_name, sizeof(full_name), "%s::%s", HvNAME(to_stash), method_name);
2715 4 0 if (to_gv) {
2728 5 9 for (i = 0; i < role_meta->required_count; i++) {
2731 3 2 if (!gv || !GvCV(gv)) {
0 3 if (!gv || !GvCV(gv)) {
2738 10 8 for (i = 0; i < role_meta->slot_count; i++) {
2745 1 9 if (existing) {
2752 0 9 Renew(class_meta->slots, class_meta->slot_count, SlotSpec*);
2753 0 9 Renew(class_meta->idx_to_prop, class_meta->slot_count, char*);
2762 0 9 if (role_slot->init_arg) {
2772 9 0 if (role_slot->has_type) {
2775 4 5 if (role_slot->has_default) {
2778 0 9 if (role_slot->has_trigger) {
2781 0 9 if (role_slot->is_required) {
2784 0 9 if (role_slot->is_lazy) {
2787 1 8 if (role_slot->has_builder) {
2790 0 9 if (role_slot->is_weak) {
2795 0 9 if (role_slot->has_type || role_slot->has_trigger || role_slot->has_coerce ||
0 0 if (role_slot->has_type || role_slot->has_trigger || role_slot->has_coerce ||
0 0 if (role_slot->has_type || role_slot->has_trigger || role_slot->has_coerce ||
2796 0 0 role_slot->is_readonly || role_slot->is_lazy || role_slot->is_required || role_slot->is_weak) {
0 0 role_slot->is_readonly || role_slot->is_lazy || role_slot->is_required || role_slot->is_weak) {
0 0 role_slot->is_readonly || role_slot->is_lazy || role_slot->is_required || role_slot->is_weak) {
0 0 role_slot->is_readonly || role_slot->is_lazy || role_slot->is_required || role_slot->is_weak) {
2802 0 9 if (role_slot->has_clearer) {
2805 0 9 if (role_slot->has_predicate) {
2808 0 9 if (role_slot->reader_name) {
2811 0 9 if (role_slot->writer_name) {
2817 8 0 if (role_meta->stash) {
2819 4 8 while ((entry = hv_iternext(role_meta->stash))) {
2820 0 4 const char *name = HePV(entry, PL_na);
2822 0 4 if (name[0] != '_' || strncmp(name, "_build_", 7) == 0) {
0 0 if (name[0] != '_' || strncmp(name, "_build_", 7) == 0) {
2829 0 8 Renew(class_meta->consumed_roles, class_meta->role_count + 1, RoleMeta*);
2843 4 6 if (!meta->modified_methods) {
2848 6 4 if (svp && SvIOK(*svp)) {
6 0 if (svp && SvIOK(*svp)) {
2858 4 0 if (gv && GvCV(gv)) {
4 0 if (gv && GvCV(gv)) {
2882 10 7 for (i = 0; i < items; i++) {
2887 8 7 for (m = mod->before_chain; m; m = m->next) {
2891 0 8 PUSHMARK(SP);
2892 12 8 for (i = 0; i <= av_len(saved_args); i++) {
2894 0 12 XPUSHs(svp ? *svp : &PL_sv_undef);
12 0 XPUSHs(svp ? *svp : &PL_sv_undef);
2898 0 8 FREETMPS;
2907 2 5 if (mod->around_chain) {
2914 0 2 PUSHMARK(SP);
2915 0 2 XPUSHs(sv_2mortal(newRV_inc((SV*)mod->original_cv)));
2916 3 2 for (i = 0; i <= av_len(saved_args); i++) {
2918 0 3 XPUSHs(svp ? *svp : &PL_sv_undef);
3 0 XPUSHs(svp ? *svp : &PL_sv_undef);
2921 0 2 count = call_sv(m->callback, gimme == G_ARRAY ? G_LIST : G_SCALAR);
2924 2 2 for (i = 0; i < count; i++) {
2927 2 0 FREETMPS;
2930 5 0 } else if (mod->original_cv) {
2935 0 5 PUSHMARK(SP);
2936 7 5 for (i = 0; i <= av_len(saved_args); i++) {
2938 0 7 XPUSHs(svp ? *svp : &PL_sv_undef);
7 0 XPUSHs(svp ? *svp : &PL_sv_undef);
2941 0 5 count = call_sv((SV*)mod->original_cv, gimme == G_ARRAY ? G_LIST : G_SCALAR);
2944 5 5 for (i = 0; i < count; i++) {
2947 5 0 FREETMPS;
2952 5 7 for (m = mod->after_chain; m; m = m->next) {
2956 0 5 PUSHMARK(SP);
2957 7 5 for (i = 0; i <= av_len(saved_args); i++) {
2959 0 7 XPUSHs(svp ? *svp : &PL_sv_undef);
7 0 XPUSHs(svp ? *svp : &PL_sv_undef);
2963 0 5 FREETMPS;
2970 7 7 for (i = count - 1; i >= 0; i--) {
2973 7 0 ST(count - 1 - i) = sv_mortalcopy(svp ? *svp : &PL_sv_undef);
2990 10 0 if (existing_cv && CvXSUB(existing_cv) == xs_modified_method_wrapper) {
6 4 if (existing_cv && CvXSUB(existing_cv) == xs_modified_method_wrapper) {
3000 4 0 if (GvCV(gv)) {
3026 3 1 if (!mod->after_chain) {
3030 0 1 while (last->next) last = last->next;
3061 0 251 if (items < 1) croak("Usage: Object::Proto::define($class, @properties)");
3066 252 228 for (i = 1; i < items - 1; i++) {
3069 31 221 if (klen == 7 && memEQ(kpv, "extends", 7)) {
23 8 if (klen == 7 && memEQ(kpv, "extends", 7)) {
3071 3 20 if (SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVAV) {
3 0 if (SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVAV) {
3076 0 3 Newx(parent_metas, plen, ClassMeta*);
3078 6 2 for (p = 0; p < plen; p++) {
3080 6 0 if (elem && SvPOK(*elem)) {
6 0 if (elem && SvPOK(*elem)) {
3084 1 5 if (!pmeta) {
3096 1 19 if (!pmeta) {
3106 31 21 for (j = i; j < items - 2; j++) {
3117 249 0 if (!meta) {
3123 21 228 if (parent_count > 0) {
3124 0 21 Newx(meta->parent_classes, parent_count, char*);
3125 0 21 Newx(meta->parent_metas, parent_count, ClassMeta*);
3127 23 21 for (i = 0; i < parent_count; i++) {
3140 23 249 for (i = 0; i < parent_count; i++) {
3144 0 249 Renew(meta->idx_to_prop, max_slots + 1, char*);
3145 0 249 Renew(meta->slots, max_slots + 1, SlotSpec*);
3146 1041 249 for (i = 0; i <= max_slots; i++) {
3153 23 249 for (i = 0; i < parent_count; i++) {
3156 56 23 for (j = 1; j < pmeta->slot_count; j++) {
3158 56 0 if (parent_spec) {
3162 1 55 if (existing && SvIOK(*existing)) continue;
1 0 if (existing && SvIOK(*existing)) continue;
3168 53 2 if (cloned->has_type) meta->has_any_types = 1;
3169 38 17 if (cloned->has_default) meta->has_any_defaults = 1;
3170 0 55 if (cloned->has_trigger) meta->has_any_triggers = 1;
3171 11 44 if (cloned->is_required) meta->has_any_required = 1;
3172 0 55 if (cloned->is_lazy) meta->has_any_lazy = 1;
3173 1 54 if (cloned->has_builder) meta->has_any_builders = 1;
3174 0 55 if (cloned->is_weak) meta->has_any_weak = 1;
3179 1 54 if (cloned->init_arg) {
3189 2 53 if (cloned->has_type || cloned->has_trigger || cloned->has_coerce || cloned->is_readonly || cloned->is_lazy || cloned->is_required || cloned->is_weak) {
2 0 if (cloned->has_type || cloned->has_trigger || cloned->has_coerce || cloned->is_readonly || cloned->is_lazy || cloned->is_required || cloned->is_weak) {
2 0 if (cloned->has_type || cloned->has_trigger || cloned->has_coerce || cloned->is_readonly || cloned->is_lazy || cloned->is_required || cloned->is_weak) {
2 0 if (cloned->has_type || cloned->has_trigger || cloned->has_coerce || cloned->is_readonly || cloned->is_lazy || cloned->is_required || cloned->is_weak) {
2 0 if (cloned->has_type || cloned->has_trigger || cloned->has_coerce || cloned->is_readonly || cloned->is_lazy || cloned->is_required || cloned->is_weak) {
2 0 if (cloned->has_type || cloned->has_trigger || cloned->has_coerce || cloned->is_readonly || cloned->is_lazy || cloned->is_required || cloned->is_weak) {
0 2 if (cloned->has_type || cloned->has_trigger || cloned->has_coerce || cloned->is_readonly || cloned->is_lazy || cloned->is_required || cloned->is_weak) {
3194 1 54 if (cloned->has_clearer) {
3197 1 54 if (cloned->has_predicate) {
3200 1 54 if (cloned->reader_name) {
3203 1 54 if (cloned->writer_name) {
3211 487 248 for (i = first_prop; i < items; i++) {
3222 487 0 if (spec_len > 0 && spec_pv[0] == '+') {
12 475 if (spec_len > 0 && spec_pv[0] == '+') {
3234 12 475 if (is_modification) {
3239 11 1 if (!existing || !SvIOK(*existing)) {
0 11 if (!existing || !SvIOK(*existing)) {
3255 11 0 if (parent_spec) {
3259 2 473 } else if (existing && SvIOK(*existing)) {
2 0 } else if (existing && SvIOK(*existing)) {
3263 2 0 if (meta->slots[idx]) {
3274 333 153 if (spec->has_type) meta->has_any_types = 1;
3275 78 408 if (spec->has_default) meta->has_any_defaults = 1;
3276 4 482 if (spec->has_trigger) meta->has_any_triggers = 1;
3277 36 450 if (spec->is_required) meta->has_any_required = 1;
3278 19 467 if (spec->has_builder) meta->has_any_builders = 1;
3279 7 479 if (spec->is_weak) meta->has_any_weak = 1;
3285 9 477 if (spec->init_arg) {
3297 14 472 if (spec->is_lazy) meta->has_any_lazy = 1;
3300 153 333 if (spec->has_type || spec->has_trigger || spec->has_coerce || spec->is_readonly || spec->is_lazy || spec->is_required || spec->is_weak) {
153 0 if (spec->has_type || spec->has_trigger || spec->has_coerce || spec->is_readonly || spec->is_lazy || spec->is_required || spec->is_weak) {
153 0 if (spec->has_type || spec->has_trigger || spec->has_coerce || spec->is_readonly || spec->is_lazy || spec->is_required || spec->is_weak) {
153 0 if (spec->has_type || spec->has_trigger || spec->has_coerce || spec->is_readonly || spec->is_lazy || spec->is_required || spec->is_weak) {
153 0 if (spec->has_type || spec->has_trigger || spec->has_coerce || spec->is_readonly || spec->is_lazy || spec->is_required || spec->is_weak) {
152 1 if (spec->has_type || spec->has_trigger || spec->has_coerce || spec->is_readonly || spec->is_lazy || spec->is_required || spec->is_weak) {
0 152 if (spec->has_type || spec->has_trigger || spec->has_coerce || spec->is_readonly || spec->is_lazy || spec->is_required || spec->is_weak) {
3307 15 471 if (spec->has_clearer) {
3312 14 472 if (spec->has_predicate) {
3317 10 476 if (spec->reader_name) {
3322 11 475 if (spec->writer_name) {
3328 20 228 if (parent_count > 0) {
3330 22 20 for (i = 0; i < parent_count; i++) {
3360 2 246 if (demolish_cv) {
3373 1 247 if (build_cv) {
3387 0 3011 if (items < 1) croak("Usage: Object::Proto::prototype($obj)");
3389 3010 1 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
0 3010 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
3394 3010 0 if (svp && SvOK(*svp)) {
3009 1 if (svp && SvOK(*svp)) {
3407 0 39 if (items < 2) croak("Usage: Object::Proto::set_prototype($obj, $proto)");
3409 38 1 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
0 38 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
3415 2 36 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
1 1 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
3432 0 4 if (items < 1) croak("Usage: Object::Proto::prototype_chain($obj)");
3434 4 0 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
0 4 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
3441 0 7 while (av && depth < MAX_PROTOTYPE_DEPTH) {
7 0 while (av && depth < MAX_PROTOTYPE_DEPTH) {
3445 4 7 for (i = 0; i < depth; i++) {
3446 0 4 if (visited[i] == av) {
3457 0 7 if (!proto_svp || !SvROK(*proto_svp) || SvTYPE(SvRV(*proto_svp)) != SVt_PVAV) {
4 3 if (!proto_svp || !SvROK(*proto_svp) || SvTYPE(SvRV(*proto_svp)) != SVt_PVAV) {
0 3 if (!proto_svp || !SvROK(*proto_svp) || SvTYPE(SvRV(*proto_svp)) != SVt_PVAV) {
3481 0 6 if (items < 2) croak("Usage: Object::Proto::has_own_property($obj, $property)");
3483 6 0 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
0 6 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
3492 0 6 if (!meta) {
3498 0 6 if (!idx_sv) {
3504 6 0 if (svp && SvOK(*svp)) {
3 3 if (svp && SvOK(*svp)) {
3518 0 4 if (items < 1) croak("Usage: Object::Proto::prototype_depth($obj)");
3520 4 0 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
0 4 if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) {
3526 0 7 while (av && depth < MAX_PROTOTYPE_DEPTH) {
7 0 while (av && depth < MAX_PROTOTYPE_DEPTH) {
3530 4 7 for (i = 0; i < depth; i++) {
3531 0 4 if (visited[i] == av) {
3538 0 7 if (!proto_svp || !SvROK(*proto_svp) || SvTYPE(SvRV(*proto_svp)) != SVt_PVAV) {
4 3 if (!proto_svp || !SvROK(*proto_svp) || SvTYPE(SvRV(*proto_svp)) != SVt_PVAV) {
0 3 if (!proto_svp || !SvROK(*proto_svp) || SvTYPE(SvRV(*proto_svp)) != SVt_PVAV) {
3553 0 413 if (items < 1) croak("Usage: Object::Proto::lock($obj)");
3554 410 3 VALIDATE_OBJECT(ST(0), "Object::Proto::lock");
410 0 VALIDATE_OBJECT(ST(0), "Object::Proto::lock");
0 410 VALIDATE_OBJECT(ST(0), "Object::Proto::lock");
3557 11 399 if (!mg) mg = add_object_magic(aTHX_ ST(0));
3558 0 410 if (mg->mg_private & OBJ_FLAG_FROZEN) {
3569 0 404 if (items < 1) croak("Usage: Object::Proto::unlock($obj)");
3570 403 1 VALIDATE_OBJECT(ST(0), "Object::Proto::unlock");
403 0 VALIDATE_OBJECT(ST(0), "Object::Proto::unlock");
0 403 VALIDATE_OBJECT(ST(0), "Object::Proto::unlock");
3573 403 0 if (mg) {
3574 1 402 if (mg->mg_private & OBJ_FLAG_FROZEN) {
3586 0 14 if (items < 1) croak("Usage: Object::Proto::freeze($obj)");
3587 13 1 VALIDATE_OBJECT(ST(0), "Object::Proto::freeze");
13 0 VALIDATE_OBJECT(ST(0), "Object::Proto::freeze");
1 12 VALIDATE_OBJECT(ST(0), "Object::Proto::freeze");
3590 11 1 if (!mg) mg = add_object_magic(aTHX_ ST(0));
3599 0 3009 if (items < 1) croak("Usage: Object::Proto::is_frozen($obj)");
3600 3008 1 VALIDATE_OBJECT(ST(0), "Object::Proto::is_frozen");
3008 0 VALIDATE_OBJECT(ST(0), "Object::Proto::is_frozen");
0 3008 VALIDATE_OBJECT(ST(0), "Object::Proto::is_frozen");
3603 3005 3 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
3005 0 if (mg && (mg->mg_private & OBJ_FLAG_FROZEN)) {
3613 0 3418 if (items < 1) croak("Usage: Object::Proto::is_locked($obj)");
3614 3417 1 VALIDATE_OBJECT(ST(0), "Object::Proto::is_locked");
3417 0 VALIDATE_OBJECT(ST(0), "Object::Proto::is_locked");
0 3417 VALIDATE_OBJECT(ST(0), "Object::Proto::is_locked");
3617 2411 1006 if (mg && (mg->mg_private & OBJ_FLAG_LOCKED)) {
2409 2 if (mg && (mg->mg_private & OBJ_FLAG_LOCKED)) {
3637 15275 12258 if (!SvROK(src)) {
3644 1 12257 if (cached) {
3648 12250 7 if (SvTYPE(SvRV(src)) == SVt_PVAV) {
3655 6629 5621 if (SvOBJECT(SvRV(src)))
3662 27528 12250 for (i = 0; i <= len; i++) {
3664 27528 0 if (svp && SvOK(*svp)) {
20891 6637 if (svp && SvOK(*svp)) {
3672 6 1 } else if (SvTYPE(SvRV(src)) == SVt_PVHV) {
3679 0 6 if (SvOBJECT(SvRV(src)))
3685 10 6 while ((he = hv_iternext(src_hv))) {
3687 0 10 const char *key = HePV(he, klen);
3693 1 0 } else if (SvTYPE(SvRV(src)) < SVt_PVAV) {
3697 0 1 if (SvOBJECT(SvRV(src)))
3716 0 6637 if (items < 1) croak("Usage: Object::Proto::clone($val) or $obj->clone()");
3721 6 6631 if (!SvROK(src)) {
3722 4 2 if (SvOK(src)) {
3753 0 10620 if (items < 1) croak("Usage: Object::Proto::properties($class)");
3758 4002 6618 if (!meta) {
3760 2001 2001 if (GIMME_V == G_ARRAY) {
3767 4617 2001 if (GIMME_V == G_ARRAY) {
3771 4617 0 EXTEND(SP, count);
0 4617 EXTEND(SP, count);
3773 13860 4617 for (i = 1; i < meta->slot_count; i++) {
3774 13860 0 if (meta->idx_to_prop[i]) {
3796 0 16830 if (items < 2) croak("Usage: Object::Proto::slot_info($class, $property)");
3803 2002 14828 if (!meta) {
3809 2002 12826 if (!idx_svp) {
3822 12826 0 spec = (meta->slots && idx < meta->slot_count) ? meta->slots[idx] : NULL;
12826 0 spec = (meta->slots && idx < meta->slot_count) ? meta->slots[idx] : NULL;
3824 12826 0 if (spec && spec->has_type) {
10824 2002 if (spec && spec->has_type) {
3826 1 10823 if (spec->type_id == TYPE_CUSTOM && spec->registered) {
1 0 if (spec->type_id == TYPE_CUSTOM && spec->registered) {
3835 12826 0 hv_store(info, "is_required", 11, newSViv(spec ? spec->is_required : 0), 0);
3836 12826 0 hv_store(info, "is_readonly", 11, newSViv(spec ? spec->is_readonly : 0), 0);
3837 12826 0 hv_store(info, "is_lazy", 7, newSViv(spec ? spec->is_lazy : 0), 0);
3838 12826 0 hv_store(info, "is_weak", 7, newSViv(spec ? spec->is_weak : 0), 0);
3839 12826 0 hv_store(info, "has_default", 11, newSViv(spec ? spec->has_default : 0), 0);
3840 12826 0 hv_store(info, "has_trigger", 11, newSViv(spec ? spec->has_trigger : 0), 0);
3841 12826 0 hv_store(info, "has_coerce", 10, newSViv(spec ? spec->has_coerce : 0), 0);
3842 12826 0 hv_store(info, "has_builder", 11, newSViv(spec ? spec->has_builder : 0), 0);
3843 12826 0 hv_store(info, "has_clearer", 11, newSViv(spec ? spec->has_clearer : 0), 0);
3844 12826 0 hv_store(info, "has_predicate", 13, newSViv(spec ? spec->has_predicate : 0), 0);
3845 12826 0 hv_store(info, "has_type", 8, newSViv(spec ? spec->has_type : 0), 0);
3848 12826 0 if (spec && spec->has_default && spec->default_sv) {
5204 7622 if (spec && spec->has_default && spec->default_sv) {
5204 0 if (spec && spec->has_default && spec->default_sv) {
3853 12826 0 if (spec && spec->has_builder && spec->builder_name) {
2 12824 if (spec && spec->has_builder && spec->builder_name) {
2 0 if (spec && spec->has_builder && spec->builder_name) {
3858 12826 0 if (spec && spec->init_arg) {
1 12825 if (spec && spec->init_arg) {
3873 0 7 if (items < 1) croak("Usage: Object::Proto::parent($class)");
3878 7 0 if (!meta || meta->parent_count == 0) {
2 5 if (!meta || meta->parent_count == 0) {
3879 0 2 if (GIMME_V == G_ARRAY) {
3885 1 4 if (GIMME_V == G_ARRAY) {
3889 1 0 EXTEND(SP, meta->parent_count);
0 1 EXTEND(SP, meta->parent_count);
3890 2 1 for (i = 0; i < meta->parent_count; i++) {
3912 0 4 if (items < 1) croak("Usage: Object::Proto::ancestors($class)");
3919 4 0 if (meta && meta->parent_count > 0) {
3 1 if (meta && meta->parent_count > 0) {
3926 4 3 for (i = 0; i < meta->parent_count; i++) {
3931 5 3 while (av_len(queue) >= 0) {
3938 0 5 if (hv_exists(seen, cur_name, cur_len)) {
3947 5 0 if (cur_meta) {
3948 1 5 for (i = 0; i < cur_meta->parent_count; i++) {
3950 1 0 if (!hv_exists(seen, pname, strlen(pname))) {
3958 3 0 EXTEND(SP, count);
0 3 EXTEND(SP, count);
3959 5 3 for (i = 0; i < count; i++) {
3961 5 0 if (elem) PUSHs(sv_2mortal(newSVsv(*elem)));
3983 52 0 if (PL_dirty) {
4009 0 0 if (!g_type_registry) {
4015 0 0 if (existing) {
4035 0 0 if (!g_type_registry) return NULL;
4038 0 0 if (svp && SvIOK(*svp)) {
0 0 if (svp && SvIOK(*svp)) {
4051 0 8 if (items < 2) croak("Usage: Object::Proto::register_type($name, $check_cb [, $coerce_cb])");
4056 8 0 if (g_type_registry) {
4058 1 7 if (existing) {
4075 3 4 if (items > 2 && SvOK(ST(2))) {
3 0 if (items > 2 && SvOK(ST(2))) {
4091 0 4010 if (items < 1) croak("Usage: Object::Proto::has_type($name)");
4097 3003 1007 if (builtin != TYPE_NONE) {
4102 1007 0 if (g_type_registry) {
4104 6 1001 if (existing) {
4132 2402 0 if (g_type_registry) {
4135 4 2402 while ((he = hv_iternext(g_type_registry))) {
4156 0 8053 if (!meta) {
4161 8045 8 if (meta->singleton_instance && SvOK(meta->singleton_instance)) {
8045 0 if (meta->singleton_instance && SvOK(meta->singleton_instance)) {
4178 0 8 PUSHMARK(SP);
4179 0 8 XPUSHs(sv_2mortal(newSVpv(meta->class_name, 0)));
4186 0 8 if (count != 1) {
4198 8 0 if (build_gv && GvCV(build_gv)) {
5 3 if (build_gv && GvCV(build_gv)) {
4199 0 5 PUSHMARK(SP);
4200 0 5 XPUSHs(obj);
4208 8 0 FREETMPS;
4228 0 7 if (items < 1) croak("Usage: Object::Proto::role($role_name, @slot_specs)");
4234 0 7 if (meta) {
4246 6 1 if (items > 1) {
4250 8 6 for (i = 1; i < items; i++) {
4271 0 2 if (items < 2) croak("Usage: Object::Proto::requires($role_name, @method_names)");
4275 0 2 if (!meta) {
4280 0 2 Renew(meta->required_methods, meta->required_count + items - 1, char*);
4281 2 2 for (i = 1; i < items; i++) {
4301 0 9 if (items < 2) croak("Usage: Object::Proto::with($class_name, @role_names)");
4305 0 9 if (!class_meta) {
4309 11 6 for (i = 1; i < items; i++) {
4314 0 11 if (!role_meta) {
4319 0 0 err = ERRSV;
4320 0 0 if (SvTRUE(err)) {
4325 0 11 if (!role_meta) {
4343 0 8 if (items < 2) croak("Usage: Object::Proto::does($class_or_obj, $role_name)");
4346 7 1 if (SvROK(ST(0))) {
4349 7 0 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
7 0 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
0 7 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
0 0 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
7 0 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
0 7 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
7 0 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
7 0 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
0 7 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
0 0 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
7 0 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
0 7 meta = get_class_meta(aTHX_ HvNAME(stash), HvNAMELEN(stash));
4356 0 8 if (!meta) {
4363 10 1 for (i = 0; i < meta->role_count; i++) {
4364 7 3 if (strEQ(meta->consumed_roles[i]->role_name, role_pv)) {
4384 0 4 if (items != 2) croak("Usage: Object::Proto::before('Class::method', \\&callback)");
4387 4 0 if (!SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVCV) {
0 4 if (!SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVCV) {
4393 0 4 if (!sep) {
4406 0 4 if (!meta) {
4425 0 4 if (items != 2) croak("Usage: Object::Proto::after('Class::method', \\&callback)");
4428 4 0 if (!SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVCV) {
0 4 if (!SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVCV) {
4433 0 4 if (!sep) {
4446 0 4 if (!meta) {
4465 0 2 if (items != 2) croak("Usage: Object::Proto::around('Class::method', \\&callback)");
4468 2 0 if (!SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVCV) {
0 2 if (!SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVCV) {
4473 0 2 if (!sep) {
4486 0 2 if (!meta) {
4506 0 8 if (items < 1) croak("Usage: Object::Proto::singleton($class)");
4511 0 8 if (!meta) {