← Index
NYTProf Performance Profile   « block view • line view • sub view »
For bin/pan_genome_post_analysis
  Run on Fri Mar 27 11:43:32 2015
Reported on Fri Mar 27 11:45:32 2015

Filename/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP.pm
StatementsExecuted 5342 statements in 19.6ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1119.38ms30.3msClass::MOP::::BEGIN@18Class::MOP::BEGIN@18
3153964.14ms4.14msClass::MOP::::get_metaclass_by_nameClass::MOP::get_metaclass_by_name
1113.29ms3.73msClass::MOP::::BEGIN@19Class::MOP::BEGIN@19
1111.72ms4.96msClass::MOP::::BEGIN@16Class::MOP::BEGIN@16
295861.48ms1.66msClass::MOP::::class_ofClass::MOP::class_of
1111.38ms2.13msClass::MOP::::BEGIN@9Class::MOP::BEGIN@9
1111.23ms8.03msClass::MOP::::BEGIN@17Class::MOP::BEGIN@17
317211.21ms1.49msClass::MOP::::metaclass_is_weakClass::MOP::metaclass_is_weak
814211.14ms1.14msClass::MOP::::get_code_infoClass::MOP::get_code_info (xsub)
131124231.00ms1.00msClass::MOP::::_definition_contextClass::MOP::_definition_context
111514µs614µsClass::MOP::::BEGIN@15Class::MOP::BEGIN@15
111476µs1.28msClass::MOP::::BEGIN@14Class::MOP::BEGIN@14
19022357µs357µsClass::MOP::::__ANON__[:499]Class::MOP::__ANON__[:499]
9022255µs255µsClass::MOP::::store_metaclass_by_nameClass::MOP::store_metaclass_by_name
7011210µs210µsClass::MOP::::does_metaclass_existClass::MOP::does_metaclass_exist
212262µs62µsClass::MOP::::__ANON__[:139]Class::MOP::__ANON__[:139]
181142µs42µsClass::MOP::::__ANON__[:307]Class::MOP::__ANON__[:307]
212241µs41µsClass::MOP::::__ANON__[:184]Class::MOP::__ANON__[:184]
212240µs40µsClass::MOP::::__ANON__[:290]Class::MOP::__ANON__[:290]
212240µs40µsClass::MOP::::__ANON__[:211]Class::MOP::__ANON__[:211]
212239µs39µsClass::MOP::::__ANON__[:243]Class::MOP::__ANON__[:243]
212238µs38µsClass::MOP::::__ANON__[:270]Class::MOP::__ANON__[:270]
11124µs42µsClass::MOP::::BEGIN@4Class::MOP::BEGIN@4
11116µs16µsClass::MOP::::BEGIN@20Class::MOP::BEGIN@20
11116µs16µsClass::MOP::::BEGIN@7Class::MOP::BEGIN@7
11111µs17µsClass::MOP::::BEGIN@5Class::MOP::BEGIN@5
11111µs19µsClass::MOP::::BEGIN@10Class::MOP::BEGIN@10
11111µs11µsClass::MOP::::BEGIN@22Class::MOP::BEGIN@22
11110µs15µsClass::MOP::::BEGIN@12Class::MOP::BEGIN@12
1118µs46µsClass::MOP::::BEGIN@11Class::MOP::BEGIN@11
8116µs6µsClass::MOP::::__ANON__Class::MOP::__ANON__ (xsub)
0000s0sClass::MOP::::__ANON__[:507]Class::MOP::__ANON__[:507]
0000s0sClass::MOP::::__ANON__[:617]Class::MOP::__ANON__[:617]
0000s0sClass::MOP::::get_all_metaclass_instancesClass::MOP::get_all_metaclass_instances
0000s0sClass::MOP::::get_all_metaclass_namesClass::MOP::get_all_metaclass_names
0000s0sClass::MOP::::get_all_metaclassesClass::MOP::get_all_metaclasses
0000s0sClass::MOP::::is_class_loadedClass::MOP::is_class_loaded
0000s0sClass::MOP::::load_classClass::MOP::load_class
0000s0sClass::MOP::::load_first_existing_classClass::MOP::load_first_existing_class
0000s0sClass::MOP::::remove_metaclass_by_nameClass::MOP::remove_metaclass_by_name
0000s0sClass::MOP::::weaken_metaclassClass::MOP::weaken_metaclass
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Class::MOP;
211µsour $VERSION = '2.1403';
3
4236µs261µs
# spent 42µs (24+19) within Class::MOP::BEGIN@4 which was called: # once (24µs+19µs) by Moose::Exporter::BEGIN@8 at line 4
use strict;
# spent 42µs making 1 call to Class::MOP::BEGIN@4 # spent 18µs making 1 call to strict::import
5235µs222µs
# spent 17µs (11+6) within Class::MOP::BEGIN@5 which was called: # once (11µs+6µs) by Moose::Exporter::BEGIN@8 at line 5
use warnings;
# spent 17µs making 1 call to Class::MOP::BEGIN@5 # spent 6µs making 1 call to warnings::import
6
7267µs116µs
# spent 16µs within Class::MOP::BEGIN@7 which was called: # once (16µs+0s) by Moose::Exporter::BEGIN@8 at line 7
use 5.008003;
# spent 16µs making 1 call to Class::MOP::BEGIN@7
8
92145µs12.13ms
# spent 2.13ms (1.38+749µs) within Class::MOP::BEGIN@9 which was called: # once (1.38ms+749µs) by Moose::Exporter::BEGIN@8 at line 9
use MRO::Compat;
# spent 2.13ms making 1 call to Class::MOP::BEGIN@9
10340µs228µs
# spent 19µs (11+9) within Class::MOP::BEGIN@10 which was called: # once (11µs+9µs) by Moose::Exporter::BEGIN@8 at line 10
use Class::Load 0.07 ();
# spent 19µs making 1 call to Class::MOP::BEGIN@10 # spent 9µs making 1 call to UNIVERSAL::VERSION
11224µs284µs
# spent 46µs (8+38) within Class::MOP::BEGIN@11 which was called: # once (8µs+38µs) by Moose::Exporter::BEGIN@8 at line 11
use Scalar::Util 'weaken', 'isweak', 'blessed';
# spent 46µs making 1 call to Class::MOP::BEGIN@11 # spent 38µs making 1 call to Exporter::import
12224µs220µs
# spent 15µs (10+5) within Class::MOP::BEGIN@12 which was called: # once (10µs+5µs) by Moose::Exporter::BEGIN@8 at line 12
use Data::OptList;
# spent 15µs making 1 call to Class::MOP::BEGIN@12 # spent 5µs making 1 call to Sub::Install::__ANON__[Sub/Install.pm:284]
13
142114µs11.28ms
# spent 1.28ms (476µs+800µs) within Class::MOP::BEGIN@14 which was called: # once (476µs+800µs) by Moose::Exporter::BEGIN@8 at line 14
use Class::MOP::Mixin::AttributeCore;
# spent 1.28ms making 1 call to Class::MOP::BEGIN@14
152106µs1614µs
# spent 614µs (514+99) within Class::MOP::BEGIN@15 which was called: # once (514µs+99µs) by Moose::Exporter::BEGIN@8 at line 15
use Class::MOP::Mixin::HasAttributes;
# spent 614µs making 1 call to Class::MOP::BEGIN@15
162172µs14.96ms
# spent 4.96ms (1.72+3.25) within Class::MOP::BEGIN@16 which was called: # once (1.72ms+3.25ms) by Moose::Exporter::BEGIN@8 at line 16
use Class::MOP::Mixin::HasMethods;
# spent 4.96ms making 1 call to Class::MOP::BEGIN@16
172186µs18.03ms
# spent 8.03ms (1.23+6.80) within Class::MOP::BEGIN@17 which was called: # once (1.23ms+6.80ms) by Moose::Exporter::BEGIN@8 at line 17
use Class::MOP::Mixin::HasOverloads;
# spent 8.03ms making 1 call to Class::MOP::BEGIN@17
182182µs130.3ms
# spent 30.3ms (9.38+20.9) within Class::MOP::BEGIN@18 which was called: # once (9.38ms+20.9ms) by Moose::Exporter::BEGIN@8 at line 18
use Class::MOP::Class;
# spent 30.3ms making 1 call to Class::MOP::BEGIN@18
192209µs13.73ms
# spent 3.73ms (3.29+435µs) within Class::MOP::BEGIN@19 which was called: # once (3.29ms+435µs) by Moose::Exporter::BEGIN@8 at line 19
use Class::MOP::Attribute;
# spent 3.73ms making 1 call to Class::MOP::BEGIN@19
202118µs116µs
# spent 16µs within Class::MOP::BEGIN@20 which was called: # once (16µs+0s) by Moose::Exporter::BEGIN@8 at line 20
use Class::MOP::Method;
# spent 16µs making 1 call to Class::MOP::BEGIN@20
21
22
# spent 11µs within Class::MOP::BEGIN@22 which was called: # once (11µs+0s) by Moose::Exporter::BEGIN@8 at line 29
BEGIN {
23 *IS_RUNNING_ON_5_10 = ($] < 5.009_005)
24 ? sub () { 0 }
25212µs : sub () { 1 };
26
27 # this is either part of core or set up appropriately by MRO::Compat
28 *check_package_cache_flag = \&mro::get_pkg_gen;
2912.96ms111µs}
# spent 11µs making 1 call to Class::MOP::BEGIN@22
30
311127µs174µsXSLoader::load(
# spent 74µs making 1 call to XSLoader::load
32 'Moose',
33 $VERSION,
34);
35
36{
37 # Metaclasses are singletons, so we cache them here.
38 # there is no need to worry about destruction though
39 # because they should die only when the program dies.
40 # After all, do package definitions even get reaped?
41 # Anonymous classes manage their own destruction.
4222µs my %METAS;
43
44 sub get_all_metaclasses { %METAS }
45 sub get_all_metaclass_instances { values %METAS }
46 sub get_all_metaclass_names { keys %METAS }
4731537.02ms
# spent 4.14ms within Class::MOP::get_metaclass_by_name which was called 3153 times, avg 1µs/call: # 2896 times (3.85ms+0s) by Class::MOP::Class::initialize at line 41 of Class/MOP/Class.pm, avg 1µs/call # 108 times (100µs+0s) by Class::MOP::Class::_single_metaclass_is_compatible at line 273 of Class/MOP/Class.pm, avg 930ns/call # 84 times (90µs+0s) by Class::MOP::Class::_construct_class_instance at line 82 of Class/MOP/Class.pm, avg 1µs/call # 18 times (22µs+0s) by Class::MOP::Class::_class_metaclass_is_compatible at line 247 of Class/MOP/Class.pm, avg 1µs/call # 18 times (21µs+0s) by Moose::Meta::Class::initialize at line 64 of Moose/Meta/Class.pm, avg 1µs/call # 17 times (41µs+0s) by Moose::init_meta at line 166 of Moose.pm, avg 2µs/call # 6 times (9µs+0s) by Class::MOP::Package::initialize at line 25 of Class/MOP/Package.pm, avg 1µs/call # 3 times (6µs+0s) by Moose::Role::init_meta at line 129 of Moose/Role.pm, avg 2µs/call # 3 times (3µs+0s) by Moose::Meta::Role::initialize at line 176 of Moose/Meta/Role.pm, avg 933ns/call
sub get_metaclass_by_name { $METAS{$_[0]} }
4890302µs
# spent 255µs within Class::MOP::store_metaclass_by_name which was called 90 times, avg 3µs/call: # 84 times (242µs+0s) by Class::MOP::Class::_construct_class_instance at line 107 of Class/MOP/Class.pm, avg 3µs/call # 6 times (13µs+0s) by Class::MOP::Package::initialize at line 32 of Class/MOP/Package.pm, avg 2µs/call
sub store_metaclass_by_name { $METAS{$_[0]} = $_[1] }
49 sub weaken_metaclass { weaken($METAS{$_[0]}) }
503171.57ms317284µs
# spent 1.49ms (1.21+284µs) within Class::MOP::metaclass_is_weak which was called 317 times, avg 5µs/call: # 271 times (1000µs+224µs) by Class::MOP::Class::_construct_instance at line 528 of Class/MOP/Class.pm, avg 5µs/call # 46 times (209µs+59µs) by Class::MOP::Class::_inline_preserve_weak_metaclasses at line 692 of Class/MOP/Class.pm, avg 6µs/call
sub metaclass_is_weak { isweak($METAS{$_[0]}) }
# spent 284µs making 317 calls to Scalar::Util::isweak, avg 895ns/call
5170261µs
# spent 210µs within Class::MOP::does_metaclass_exist which was called 70 times, avg 3µs/call: # 70 times (210µs+0s) by Class::MOP::Class::_immutable_metaclass at line 1357 of Class/MOP/Class.pm, avg 3µs/call
sub does_metaclass_exist { exists $METAS{$_[0]} && defined $METAS{$_[0]} }
52 sub remove_metaclass_by_name { delete $METAS{$_[0]}; return }
53
54 # This handles instances as well as class names
55
# spent 1.66ms (1.48+182µs) within Class::MOP::class_of which was called 295 times, avg 6µs/call: # 191 times (1.02ms+119µs) by Moose::Exporter::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Moose/Exporter.pm:252] at line 252 of Moose/Exporter.pm, avg 6µs/call # 44 times (178µs+27µs) by Moose::Exporter::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Moose/Exporter.pm:39] at line 39 of Moose/Exporter.pm, avg 5µs/call # 20 times (82µs+14µs) by Class::MOP::Class::_superclasses_updated at line 978 of Class/MOP/Class.pm, avg 5µs/call # 18 times (106µs+13µs) by Moose::Meta::Class::superclasses at line 558 of Moose/Meta/Class.pm, avg 7µs/call # 9 times (43µs+5µs) by Moose::Meta::Attribute::BEGIN@16 at line 717 of Moose/Util/TypeConstraints.pm, avg 5µs/call # 8 times (28µs+3µs) by Moose::Meta::Class::excludes_role at line 258 of Moose/Meta/Class.pm, avg 4µs/call # 4 times (13µs+1µs) by Moose::Util::find_meta at line 54 of Moose/Util.pm, avg 4µs/call # once (7µs+1µs) by Class::MOP::Object::_new at line 23 of Class/MOP/Object.pm
sub class_of {
568851.88ms return unless defined $_[0];
57295182µs my $class = blessed($_[0]) || $_[0];
# spent 182µs making 295 calls to Scalar::Util::blessed, avg 618ns/call
58 return $METAS{$class};
59 }
60
61 # NOTE:
62 # We only cache metaclasses, meaning instances of
63 # Class::MOP::Class. We do not cache instance of
64 # Class::MOP::Package or Class::MOP::Module. Mostly
65 # because I don't yet see a good reason to do so.
66}
67
68sub load_class {
69 Class::MOP::Deprecated::deprecated(
70 message => 'Class::MOP::load_class is deprecated',
71 feature => 'Class::Load wrapper functions',
72 );
73 require Class::Load;
74 goto &Class::Load::load_class;
75}
76
77sub load_first_existing_class {
78 Class::MOP::Deprecated::deprecated(
79 message => 'Class::MOP::load_first_existing_class is deprecated',
80 feature => 'Class::Load wrapper functions',
81 );
82 require Class::Load;
83 goto &Class::Load::load_first_existing_class;
84}
85
86sub is_class_loaded {
87 Class::MOP::Deprecated::deprecated(
88 message => 'Class::MOP::is_class_loaded is deprecated',
89 feature => 'Class::Load wrapper functions',
90 );
91 require Class::Load;
92 goto &Class::Load::is_class_loaded;
93}
94
95
# spent 1.00ms within Class::MOP::_definition_context which was called 131 times, avg 8µs/call: # 5 times (46µs+0s) by Moose::Exporter::BEGIN@8 at line 646, avg 9µs/call # 3 times (19µs+0s) by Moose::BEGIN@32 at line 306 of Moose/Meta/Role.pm, avg 6µs/call # 2 times (18µs+0s) by Moose::BEGIN@32 at line 85 of Moose/Meta/Role.pm, avg 9µs/call # once (17µs+0s) by Moose::BEGIN@25 at line 22 of Moose/Meta/TypeConstraint.pm # once (15µs+0s) by Moose::Exporter::BEGIN@8 at line 140 # once (15µs+0s) by Moose::Exporter::BEGIN@8 at line 686 # once (14µs+0s) by Moose::BEGIN@24 at line 29 of Moose/Meta/Class.pm # once (13µs+0s) by Moose::Exporter::BEGIN@8 at line 593 # once (13µs+0s) by Moose::Exporter::BEGIN@8 at line 438 # once (12µs+0s) by Moose::Exporter::BEGIN@8 at line 415 # once (12µs+0s) by Moose::Exporter::BEGIN@8 at line 430 # once (12µs+0s) by Moose::Exporter::BEGIN@8 at line 244 # once (12µs+0s) by Moose::Exporter::BEGIN@8 at line 422 # once (11µs+0s) by Moose::Exporter::BEGIN@8 at line 481 # once (11µs+0s) by Moose::Exporter::BEGIN@8 at line 602 # once (11µs+0s) by Moose::Exporter::BEGIN@8 at line 583 # once (11µs+0s) by Moose::Meta::TypeCoercion::BEGIN@8 at line 25 of Moose/Meta/Attribute.pm # once (11µs+0s) by Moose::Exporter::BEGIN@8 at line 525 # once (11µs+0s) by Moose::Exporter::BEGIN@8 at line 407 # once (11µs+0s) by Moose::Exporter::BEGIN@8 at line 511 # once (11µs+0s) by Moose::Exporter::BEGIN@8 at line 462 # once (10µs+0s) by Moose::BEGIN@25 at line 37 of Moose/Meta/TypeConstraint.pm # once (10µs+0s) by Moose::Exporter::BEGIN@8 at line 446 # once (10µs+0s) by Moose::BEGIN@24 at line 38 of Moose/Meta/Class.pm # once (10µs+0s) by Moose::Exporter::BEGIN@8 at line 470 # once (10µs+0s) by Moose::Exporter::BEGIN@8 at line 454 # once (10µs+0s) by Moose::BEGIN@24 at line 46 of Moose/Meta/Class.pm # once (10µs+0s) by Moose::BEGIN@25 at line 26 of Moose/Meta/TypeConstraint.pm # once (10µs+0s) by Moose::BEGIN@24 at line 35 of Moose/Meta/Class.pm # once (9µs+0s) by Moose::Exporter::BEGIN@8 at line 679 # once (9µs+0s) by Moose::Exporter::BEGIN@8 at line 500 # once (9µs+0s) by Moose::BEGIN@24 at line 52 of Moose/Meta/Class.pm # once (9µs+0s) by Moose::Exporter::BEGIN@8 at line 308 # once (9µs+0s) by Moose::Exporter::BEGIN@8 at line 399 # once (9µs+0s) by Moose::Exporter::BEGIN@8 at line 518 # once (9µs+0s) by Moose::Exporter::BEGIN@8 at line 618 # once (9µs+0s) by Moose::Exporter::BEGIN@8 at line 338 # once (9µs+0s) by Moose::BEGIN@26 at line 28 of Moose/Meta/TypeCoercion.pm # once (9µs+0s) by Moose::Exporter::BEGIN@8 at line 271 # once (9µs+0s) by Moose::Exporter::BEGIN@8 at line 291 # once (8µs+0s) by Moose::BEGIN@25 at line 79 of Moose/Meta/TypeConstraint.pm # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 635 # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 696 # once (8µs+0s) by Moose::Meta::Role::BEGIN@14 at line 11 of Moose/Meta/Role/Method/Conflicting.pm # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 703 # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 312 # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 661 # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 622 # once (8µs+0s) by Moose::Util::TypeConstraints::BEGIN@25 at line 17 of Moose/Meta/TypeConstraint/Union.pm # once (8µs+0s) by Moose::Meta::Role::BEGIN@11 at line 14 of Moose/Meta/Role/Attribute.pm # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 391 # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 348 # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 328 # once (8µs+0s) by Moose::BEGIN@25 at line 40 of Moose/Meta/TypeConstraint.pm # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 376 # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 359 # once (8µs+0s) by Moose::Meta::Role::BEGIN@13 at line 16 of Moose/Meta/Role/Method/Required.pm # once (8µs+0s) by Moose::BEGIN@33 at line 18 of Moose/Meta/Role/Composite.pm # once (7µs+0s) by parent::import at line 9 of Moose/Meta/Mixin/AttributeCore.pm # once (7µs+0s) by Moose::BEGIN@32 at line 121 of Moose/Meta/Role.pm # once (7µs+0s) by Moose::BEGIN@32 at line 127 of Moose/Meta/Role.pm # once (7µs+0s) by Moose::BEGIN@32 at line 134 of Moose/Meta/Role.pm # once (7µs+0s) by Moose::BEGIN@32 at line 141 of Moose/Meta/Role.pm # once (7µs+0s) by Moose::Exporter::BEGIN@8 at line 144 # once (7µs+0s) by Moose::Exporter::BEGIN@8 at line 219 # once (7µs+0s) by Moose::BEGIN@32 at line 148 of Moose/Meta/Role.pm # once (7µs+0s) by Moose::Exporter::BEGIN@8 at line 532 # once (7µs+0s) by Moose::BEGIN@34 at line 17 of Moose/Meta/Role/Application.pm # once (7µs+0s) by Moose::Meta::TypeConstraint::Parameterized::BEGIN@10 at line 16 of Moose/Meta/TypeConstraint/Parameterizable.pm # once (7µs+0s) by Moose::Exporter::BEGIN@8 at line 555 # once (6µs+0s) by Moose::BEGIN@26 at line 16 of Moose/Meta/TypeCoercion.pm # once (6µs+0s) by Moose::Exporter::BEGIN@8 at line 710 # once (6µs+0s) by parent::import at line 43 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@29 at line 14 of Moose/Meta/TypeConstraint/Role.pm # once (6µs+0s) by Moose::BEGIN@35 at line 20 of Moose/Meta/Role/Application/RoleSummation.pm # once (6µs+0s) by Moose::BEGIN@33 at line 31 of Moose/Meta/Role/Composite.pm # once (6µs+0s) by Moose::BEGIN@38 at line 16 of Moose/Meta/Role/Application/ToInstance.pm # once (6µs+0s) by Moose::BEGIN@32 at line 155 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::BEGIN@32 at line 399 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::Exporter::BEGIN@8 at line 564 # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@26 at line 15 of Moose/Meta/TypeConstraint/Parameterized.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@31 at line 17 of Moose/Meta/TypeConstraint/DuckType.pm # once (6µs+0s) by Moose::BEGIN@32 at line 352 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::BEGIN@32 at line 162 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@34 at line 14 of Moose/Meta/TypeConstraint/Registry.pm # once (6µs+0s) by Moose::BEGIN@26 at line 19 of Moose/Meta/TypeCoercion.pm # once (6µs+0s) by Moose::Exporter::BEGIN@8 at line 185 # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@28 at line 14 of Moose/Meta/TypeConstraint/Class.pm # once (6µs+0s) by Moose::BEGIN@36 at line 14 of Moose/Meta/Role/Application/ToClass.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@30 at line 15 of Moose/Meta/TypeConstraint/Enum.pm # once (6µs+0s) by Moose::Meta::TypeConstraint::Parameterized::BEGIN@10 at line 22 of Moose/Meta/TypeConstraint/Parameterizable.pm # once (6µs+0s) by Moose::Exporter::BEGIN@8 at line 157 # once (6µs+0s) by Moose::Exporter::BEGIN@8 at line 572 # once (6µs+0s) by Moose::Exporter::BEGIN@8 at line 539 # once (6µs+0s) by Moose::BEGIN@33 at line 37 of Moose/Meta/Role/Composite.pm # once (6µs+0s) by Moose::BEGIN@36 at line 19 of Moose/Meta/Role/Application/ToClass.pm # once (6µs+0s) by Moose::Exporter::BEGIN@8 at line 189 # once (6µs+0s) by Moose::Exporter::BEGIN@8 at line 212 # once (6µs+0s) by Moose::BEGIN@33 at line 45 of Moose/Meta/Role/Composite.pm # once (5µs+0s) by Moose::BEGIN@33 at line 40 of Moose/Meta/Role/Composite.pm # once (5µs+0s) by Moose::BEGIN@25 at line 90 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::BEGIN@25 at line 46 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::BEGIN@25 at line 100 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::Util::TypeConstraints::BEGIN@34 at line 24 of Moose/Meta/TypeConstraint/Registry.pm # once (5µs+0s) by Moose::BEGIN@34 at line 24 of Moose/Meta/Role/Application.pm # once (5µs+0s) by Moose::Util::TypeConstraints::BEGIN@26 at line 21 of Moose/Meta/TypeConstraint/Parameterized.pm # once (5µs+0s) by Moose::BEGIN@25 at line 73 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::Util::TypeConstraints::BEGIN@30 at line 20 of Moose/Meta/TypeConstraint/Enum.pm # once (5µs+0s) by Moose::BEGIN@25 at line 106 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::Meta::Role::BEGIN@11 at line 21 of Moose/Meta/Role/Attribute.pm # once (5µs+0s) by Moose::Meta::Role::BEGIN@11 at line 28 of Moose/Meta/Role/Attribute.pm # once (5µs+0s) by parent::import at line 16 of Moose/Meta/Mixin/AttributeCore.pm # once (5µs+0s) by parent::import at line 64 of Moose/Meta/Mixin/AttributeCore.pm # once (5µs+0s) by parent::import at line 79 of Moose/Meta/Mixin/AttributeCore.pm # once (5µs+0s) by Moose::Meta::Role::BEGIN@11 at line 42 of Moose/Meta/Role/Attribute.pm # once (5µs+0s) by Moose::Meta::Role::BEGIN@11 at line 35 of Moose/Meta/Role/Attribute.pm # once (5µs+0s) by parent::import at line 57 of Moose/Meta/Mixin/AttributeCore.pm # once (5µs+0s) by parent::import at line 71 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by parent::import at line 23 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by parent::import at line 87 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by parent::import at line 30 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by parent::import at line 50 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by parent::import at line 37 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by parent::import at line 96 of Moose/Meta/Mixin/AttributeCore.pm
sub _definition_context {
963931.30ms my %context;
97 @context{qw(package file line)} = caller(1);
98
99 return (
100 definition_context => \%context,
101 );
102}
103
104## ----------------------------------------------------------------------------
105## Setting up our environment ...
106## ----------------------------------------------------------------------------
107## Class::MOP needs to have a few things in the global perl environment so
108## that it can operate effectively. Those things are done here.
109## ----------------------------------------------------------------------------
110
111# ... nothing yet actually ;)
112
113## ----------------------------------------------------------------------------
114## Bootstrapping
115## ----------------------------------------------------------------------------
116## The code below here is to bootstrap our MOP with itself. This is also
117## sometimes called "tying the knot". By doing this, we make it much easier
118## to extend the MOP through subclassing and such since now you can use the
119## MOP itself to extend itself.
120##
121## Yes, I know, that's weird and insane, but it's a good thing, trust me :)
122## ----------------------------------------------------------------------------
123
124# We need to add in the meta-attributes here so that
125# any subclass of Class::MOP::* will be able to
126# inherit them using _construct_instance
127
128## --------------------------------------------------------
129## Class::MOP::Mixin::HasMethods
130
131Class::MOP::Mixin::HasMethods->meta->add_attribute(
132 Class::MOP::Attribute->new('_methods' => (
133 reader => {
134 # NOTE:
135 # we just alias the original method
136 # rather than re-produce it here
137 '_method_map' => \&Class::MOP::Mixin::HasMethods::_method_map
138 },
1392175µs
# spent 62µs within Class::MOP::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP.pm:139] which was called 21 times, avg 3µs/call: # 18 times (46µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 3µs/call # 3 times (16µs+0s) by Moose::Meta::Role::_new at line 15 of (eval 25)[Eval/Closure.pm:125], avg 5µs/call
default => sub { {} },
140138µs41.98ms _definition_context(),
# spent 1.07ms making 1 call to Class::MOP::Mixin::meta # spent 804µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 96µs making 1 call to Class::MOP::Attribute::new # spent 15µs making 1 call to Class::MOP::_definition_context
141 ))
142);
143
144114µs4358µsClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 307µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 24µs making 1 call to Class::MOP::Attribute::new # spent 19µs making 1 call to Class::MOP::Mixin::meta # spent 7µs making 1 call to Class::MOP::_definition_context
145 Class::MOP::Attribute->new('method_metaclass' => (
146 reader => {
147 # NOTE:
148 # we just alias the original method
149 # rather than re-produce it here
150 'method_metaclass' => \&Class::MOP::Mixin::HasMethods::method_metaclass
151 },
152 default => 'Class::MOP::Method',
153 _definition_context(),
154 ))
155);
156
157113µs4302µsClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 263µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Mixin::meta # spent 6µs making 1 call to Class::MOP::_definition_context
158 Class::MOP::Attribute->new('wrapped_method_metaclass' => (
159 reader => {
160 # NOTE:
161 # we just alias the original method
162 # rather than re-produce it here
163 'wrapped_method_metaclass' => \&Class::MOP::Mixin::HasMethods::wrapped_method_metaclass
164 },
165 default => 'Class::MOP::Method::Wrapped',
166 _definition_context(),
167 ))
168);
169
170## --------------------------------------------------------
171## Class::MOP::Mixin::HasAttributes
172
173Class::MOP::Mixin::HasAttributes->meta->add_attribute(
174 Class::MOP::Attribute->new('attributes' => (
175 reader => {
176 # NOTE: we need to do this in order
177 # for the instance meta-object to
178 # not fall into meta-circular death
179 #
180 # we just alias the original method
181 # rather than re-produce it here
182 '_attribute_map' => \&Class::MOP::Mixin::HasAttributes::_attribute_map
183 },
1842156µs
# spent 41µs within Class::MOP::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP.pm:184] which was called 21 times, avg 2µs/call: # 18 times (36µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call # 3 times (5µs+0s) by Moose::Meta::Role::_new at line 69 of (eval 25)[Eval/Closure.pm:125], avg 2µs/call
default => sub { {} },
185118µs4670µs _definition_context(),
# spent 363µs making 1 call to Class::MOP::Mixin::meta # spent 273µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 28µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::_definition_context
186 ))
187);
188
189112µs4295µsClass::MOP::Mixin::HasAttributes->meta->add_attribute(
# spent 258µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 12µs making 1 call to Class::MOP::Mixin::meta # spent 6µs making 1 call to Class::MOP::_definition_context
190 Class::MOP::Attribute->new('attribute_metaclass' => (
191 reader => {
192 # NOTE:
193 # we just alias the original method
194 # rather than re-produce it here
195 'attribute_metaclass' => \&Class::MOP::Mixin::HasAttributes::attribute_metaclass
196 },
197 default => 'Class::MOP::Attribute',
198 _definition_context(),
199 ))
200);
201
202## --------------------------------------------------------
203## Class::MOP::Mixin::HasOverloads
204
205Class::MOP::Mixin::HasOverloads->meta->add_attribute(
206 Class::MOP::Attribute->new('_overload_map' => (
207 reader => {
208 '_overload_map' => \&Class::MOP::Mixin::HasOverloads::_overload_map
209 },
210 clearer => '_clear_overload_map',
2112152µs
# spent 40µs within Class::MOP::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP.pm:211] which was called 21 times, avg 2µs/call: # 18 times (35µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call # 3 times (5µs+0s) by Moose::Meta::Role::_new at line 21 of (eval 25)[Eval/Closure.pm:125], avg 2µs/call
default => sub { {} },
212118µs4912µs _definition_context(),
# spent 563µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 315µs making 1 call to Class::MOP::Mixin::meta # spent 28µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::_definition_context
213 ))
214);
215
216## --------------------------------------------------------
217## Class::MOP::Package
218
219118µs41.28msClass::MOP::Package->meta->add_attribute(
# spent 663µs making 1 call to Class::MOP::Mixin::meta # spent 574µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 35µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
220 Class::MOP::Attribute->new('package' => (
221 reader => {
222 # NOTE: we need to do this in order
223 # for the instance meta-object to
224 # not fall into meta-circular death
225 #
226 # we just alias the original method
227 # rather than re-produce it here
228 'name' => \&Class::MOP::Package::name
229 },
230 _definition_context(),
231 ))
232);
233
234Class::MOP::Package->meta->add_attribute(
235 Class::MOP::Attribute->new('namespace' => (
236 reader => {
237 # NOTE:
238 # we just alias the original method
239 # rather than re-produce it here
240 'namespace' => \&Class::MOP::Package::namespace
241 },
242 init_arg => undef,
2432150µs
# spent 39µs within Class::MOP::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP.pm:243] which was called 21 times, avg 2µs/call: # 18 times (33µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call # 3 times (6µs+0s) by Moose::Meta::Role::_new at line 99 of (eval 25)[Eval/Closure.pm:125], avg 2µs/call
default => sub { \undef },
244124µs4539µs _definition_context(),
# spent 446µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 57µs making 1 call to Class::MOP::Attribute::new # spent 24µs making 1 call to Class::MOP::Mixin::meta # spent 12µs making 1 call to Class::MOP::_definition_context
245 ))
246);
247
248## --------------------------------------------------------
249## Class::MOP::Module
250
251# NOTE:
252# yeah this is kind of stretching things a bit,
253# but truthfully the version should be an attribute
254# of the Module, the weirdness comes from having to
255# stick to Perl 5 convention and store it in the
256# $VERSION package variable. Basically if you just
257# squint at it, it will look how you want it to look.
258# Either as a package variable, or as a attribute of
259# the metaclass, isn't abstraction great :)
260
261Class::MOP::Module->meta->add_attribute(
262 Class::MOP::Attribute->new('version' => (
263 reader => {
264 # NOTE:
265 # we just alias the original method
266 # rather than re-produce it here
267 'version' => \&Class::MOP::Module::version
268 },
269 init_arg => undef,
2702148µs
# spent 38µs within Class::MOP::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP.pm:270] which was called 21 times, avg 2µs/call: # 18 times (33µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call # 3 times (5µs+0s) by Moose::Meta::Role::_new at line 129 of (eval 25)[Eval/Closure.pm:125], avg 2µs/call
default => sub { \undef },
271127µs41.01ms _definition_context(),
# spent 542µs making 1 call to Class::MOP::Mixin::meta # spent 421µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 40µs making 1 call to Class::MOP::Attribute::new # spent 9µs making 1 call to Class::MOP::_definition_context
272 ))
273);
274
275# NOTE:
276# By following the same conventions as version here,
277# we are opening up the possibility that people can
278# use the $AUTHORITY in non-Class::MOP modules as
279# well.
280
281Class::MOP::Module->meta->add_attribute(
282 Class::MOP::Attribute->new('authority' => (
283 reader => {
284 # NOTE:
285 # we just alias the original method
286 # rather than re-produce it here
287 'authority' => \&Class::MOP::Module::authority
288 },
289 init_arg => undef,
2902160µs
# spent 40µs within Class::MOP::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP.pm:290] which was called 21 times, avg 2µs/call: # 18 times (34µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call # 3 times (6µs+0s) by Moose::Meta::Role::_new at line 72 of (eval 25)[Eval/Closure.pm:125], avg 2µs/call
default => sub { \undef },
291130µs4515µs _definition_context(),
# spent 449µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 38µs making 1 call to Class::MOP::Attribute::new # spent 20µs making 1 call to Class::MOP::Mixin::meta # spent 9µs making 1 call to Class::MOP::_definition_context
292 ))
293);
294
295## --------------------------------------------------------
296## Class::MOP::Class
297
298Class::MOP::Class->meta->add_attribute(
299 Class::MOP::Attribute->new('superclasses' => (
300 accessor => {
301 # NOTE:
302 # we just alias the original method
303 # rather than re-produce it here
304 'superclasses' => \&Class::MOP::Class::superclasses
305 },
306 init_arg => undef,
3071853µs
# spent 42µs within Class::MOP::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP.pm:307] which was called 18 times, avg 2µs/call: # 18 times (42µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call
default => sub { \undef },
308128µs42.05ms _definition_context(),
# spent 1.45ms making 1 call to Class::MOP::Mixin::meta # spent 546µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 43µs making 1 call to Class::MOP::Attribute::new # spent 9µs making 1 call to Class::MOP::_definition_context
309 ))
310);
311
312116µs4457µsClass::MOP::Class->meta->add_attribute(
# spent 397µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 32µs making 1 call to Class::MOP::Attribute::new # spent 20µs making 1 call to Class::MOP::Mixin::meta # spent 8µs making 1 call to Class::MOP::_definition_context
313 Class::MOP::Attribute->new('instance_metaclass' => (
314 reader => {
315 # NOTE: we need to do this in order
316 # for the instance meta-object to
317 # not fall into meta-circular death
318 #
319 # we just alias the original method
320 # rather than re-produce it here
321 'instance_metaclass' => \&Class::MOP::Class::instance_metaclass
322 },
323 default => 'Class::MOP::Instance',
324 _definition_context(),
325 ))
326);
327
328115µs4423µsClass::MOP::Class->meta->add_attribute(
# spent 366µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 30µs making 1 call to Class::MOP::Attribute::new # spent 19µs making 1 call to Class::MOP::Mixin::meta # spent 8µs making 1 call to Class::MOP::_definition_context
329 Class::MOP::Attribute->new('immutable_trait' => (
330 reader => {
331 'immutable_trait' => \&Class::MOP::Class::immutable_trait
332 },
333 default => "Class::MOP::Class::Immutable::Trait",
334 _definition_context(),
335 ))
336);
337
338115µs4475µsClass::MOP::Class->meta->add_attribute(
# spent 418µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 30µs making 1 call to Class::MOP::Attribute::new # spent 19µs making 1 call to Class::MOP::Mixin::meta # spent 9µs making 1 call to Class::MOP::_definition_context
339 Class::MOP::Attribute->new('constructor_name' => (
340 reader => {
341 'constructor_name' => \&Class::MOP::Class::constructor_name,
342 },
343 default => "new",
344 _definition_context(),
345 ))
346);
347
348114µs4428µsClass::MOP::Class->meta->add_attribute(
# spent 372µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 30µs making 1 call to Class::MOP::Attribute::new # spent 19µs making 1 call to Class::MOP::Mixin::meta # spent 8µs making 1 call to Class::MOP::_definition_context
349 Class::MOP::Attribute->new('constructor_class' => (
350 reader => {
351 'constructor_class' => \&Class::MOP::Class::constructor_class,
352 },
353 default => "Class::MOP::Method::Constructor",
354 _definition_context(),
355 ))
356);
357
358
359115µs4439µsClass::MOP::Class->meta->add_attribute(
# spent 386µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 27µs making 1 call to Class::MOP::Attribute::new # spent 19µs making 1 call to Class::MOP::Mixin::meta # spent 8µs making 1 call to Class::MOP::_definition_context
360 Class::MOP::Attribute->new('destructor_class' => (
361 reader => {
362 'destructor_class' => \&Class::MOP::Class::destructor_class,
363 },
364 _definition_context(),
365 ))
366);
367
368# NOTE:
369# we don't actually need to tie the knot with
370# Class::MOP::Class here, it is actually handled
371# within Class::MOP::Class itself in the
372# _construct_class_instance method.
373
374## --------------------------------------------------------
375## Class::MOP::Mixin::AttributeCore
376121µs4948µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 506µs making 1 call to Class::MOP::Mixin::meta # spent 406µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 28µs making 1 call to Class::MOP::Attribute::new # spent 8µs making 1 call to Class::MOP::_definition_context
377 Class::MOP::Attribute->new('name' => (
378 reader => {
379 # NOTE: we need to do this in order
380 # for the instance meta-object to
381 # not fall into meta-circular death
382 #
383 # we just alias the original method
384 # rather than re-produce it here
385 'name' => \&Class::MOP::Mixin::AttributeCore::name
386 },
387 _definition_context(),
388 ))
389);
390
391116µs4687µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 624µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 36µs making 1 call to Class::MOP::Attribute::new # spent 19µs making 1 call to Class::MOP::Mixin::meta # spent 8µs making 1 call to Class::MOP::_definition_context
392 Class::MOP::Attribute->new('accessor' => (
393 reader => { 'accessor' => \&Class::MOP::Mixin::AttributeCore::accessor },
394 predicate => { 'has_accessor' => \&Class::MOP::Mixin::AttributeCore::has_accessor },
395 _definition_context(),
396 ))
397);
398
399117µs4726µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 658µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 39µs making 1 call to Class::MOP::Attribute::new # spent 20µs making 1 call to Class::MOP::Mixin::meta # spent 9µs making 1 call to Class::MOP::_definition_context
400 Class::MOP::Attribute->new('reader' => (
401 reader => { 'reader' => \&Class::MOP::Mixin::AttributeCore::reader },
402 predicate => { 'has_reader' => \&Class::MOP::Mixin::AttributeCore::has_reader },
403 _definition_context(),
404 ))
405);
406
407122µs4838µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 755µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 46µs making 1 call to Class::MOP::Attribute::new # spent 27µs making 1 call to Class::MOP::Mixin::meta # spent 11µs making 1 call to Class::MOP::_definition_context
408 Class::MOP::Attribute->new('initializer' => (
409 reader => { 'initializer' => \&Class::MOP::Mixin::AttributeCore::initializer },
410 predicate => { 'has_initializer' => \&Class::MOP::Mixin::AttributeCore::has_initializer },
411 _definition_context(),
412 ))
413);
414
415121µs4611µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 519µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 52µs making 1 call to Class::MOP::Attribute::new # spent 28µs making 1 call to Class::MOP::Mixin::meta # spent 12µs making 1 call to Class::MOP::_definition_context
416 Class::MOP::Attribute->new('definition_context' => (
417 reader => { 'definition_context' => \&Class::MOP::Mixin::AttributeCore::definition_context },
418 _definition_context(),
419 ))
420);
421
422122µs4833µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 744µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 49µs making 1 call to Class::MOP::Attribute::new # spent 29µs making 1 call to Class::MOP::Mixin::meta # spent 12µs making 1 call to Class::MOP::_definition_context
423 Class::MOP::Attribute->new('writer' => (
424 reader => { 'writer' => \&Class::MOP::Mixin::AttributeCore::writer },
425 predicate => { 'has_writer' => \&Class::MOP::Mixin::AttributeCore::has_writer },
426 _definition_context(),
427 ))
428);
429
430122µs4824µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 736µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 48µs making 1 call to Class::MOP::Attribute::new # spent 28µs making 1 call to Class::MOP::Mixin::meta # spent 12µs making 1 call to Class::MOP::_definition_context
431 Class::MOP::Attribute->new('predicate' => (
432 reader => { 'predicate' => \&Class::MOP::Mixin::AttributeCore::predicate },
433 predicate => { 'has_predicate' => \&Class::MOP::Mixin::AttributeCore::has_predicate },
434 _definition_context(),
435 ))
436);
437
438123µs4776µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 674µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 61µs making 1 call to Class::MOP::Attribute::new # spent 28µs making 1 call to Class::MOP::Mixin::meta # spent 13µs making 1 call to Class::MOP::_definition_context
439 Class::MOP::Attribute->new('clearer' => (
440 reader => { 'clearer' => \&Class::MOP::Mixin::AttributeCore::clearer },
441 predicate => { 'has_clearer' => \&Class::MOP::Mixin::AttributeCore::has_clearer },
442 _definition_context(),
443 ))
444);
445
446119µs4784µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 704µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 48µs making 1 call to Class::MOP::Attribute::new # spent 23µs making 1 call to Class::MOP::Mixin::meta # spent 10µs making 1 call to Class::MOP::_definition_context
447 Class::MOP::Attribute->new('builder' => (
448 reader => { 'builder' => \&Class::MOP::Mixin::AttributeCore::builder },
449 predicate => { 'has_builder' => \&Class::MOP::Mixin::AttributeCore::has_builder },
450 _definition_context(),
451 ))
452);
453
454118µs4927µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 845µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 45µs making 1 call to Class::MOP::Attribute::new # spent 26µs making 1 call to Class::MOP::Mixin::meta # spent 10µs making 1 call to Class::MOP::_definition_context
455 Class::MOP::Attribute->new('init_arg' => (
456 reader => { 'init_arg' => \&Class::MOP::Mixin::AttributeCore::init_arg },
457 predicate => { 'has_init_arg' => \&Class::MOP::Mixin::AttributeCore::has_init_arg },
458 _definition_context(),
459 ))
460);
461
462119µs4546µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 458µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 49µs making 1 call to Class::MOP::Attribute::new # spent 28µs making 1 call to Class::MOP::Mixin::meta # spent 11µs making 1 call to Class::MOP::_definition_context
463 Class::MOP::Attribute->new('default' => (
464 # default has a custom 'reader' method ...
465 predicate => { 'has_default' => \&Class::MOP::Mixin::AttributeCore::has_default },
466 _definition_context(),
467 ))
468);
469
470119µs4664µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 589µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 40µs making 1 call to Class::MOP::Attribute::new # spent 26µs making 1 call to Class::MOP::Mixin::meta # spent 10µs making 1 call to Class::MOP::_definition_context
471 Class::MOP::Attribute->new('insertion_order' => (
472 reader => { 'insertion_order' => \&Class::MOP::Mixin::AttributeCore::insertion_order },
473 writer => { '_set_insertion_order' => \&Class::MOP::Mixin::AttributeCore::_set_insertion_order },
474 predicate => { 'has_insertion_order' => \&Class::MOP::Mixin::AttributeCore::has_insertion_order },
475 _definition_context(),
476 ))
477);
478
479## --------------------------------------------------------
480## Class::MOP::Attribute
481118µs41.36msClass::MOP::Attribute->meta->add_attribute(
# spent 734µs making 1 call to Class::MOP::Mixin::meta # spent 556µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 56µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::_definition_context
482 Class::MOP::Attribute->new('associated_class' => (
483 reader => {
484 # NOTE: we need to do this in order
485 # for the instance meta-object to
486 # not fall into meta-circular death
487 #
488 # we just alias the original method
489 # rather than re-produce it here
490 'associated_class' => \&Class::MOP::Attribute::associated_class
491 },
492 _definition_context(),
493 ))
494);
495
496Class::MOP::Attribute->meta->add_attribute(
497 Class::MOP::Attribute->new('associated_methods' => (
498 reader => { 'associated_methods' => \&Class::MOP::Attribute::associated_methods },
499190464µs
# spent 357µs within Class::MOP::__ANON__[/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP.pm:499] which was called 190 times, avg 2µs/call: # 189 times (354µs+0s) by Moose::Meta::Attribute::_new at line 21 of (eval 25)[Eval/Closure.pm:125], avg 2µs/call # once (3µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm
default => sub { [] },
500122µs4535µs _definition_context(),
# spent 438µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 60µs making 1 call to Class::MOP::Attribute::new # spent 27µs making 1 call to Class::MOP::Mixin::meta # spent 9µs making 1 call to Class::MOP::_definition_context
501 ))
502);
503
504Class::MOP::Attribute->meta->add_method('clone' => sub {
505 my $self = shift;
506 $self->meta->clone_object($self, @_);
507110µs2124µs});
# spent 101µs making 1 call to Class::MOP::Mixin::HasMethods::add_method # spent 22µs making 1 call to Class::MOP::Mixin::meta
508
509## --------------------------------------------------------
510## Class::MOP::Method
511123µs41.11msClass::MOP::Method->meta->add_attribute(
# spent 556µs making 1 call to Class::MOP::Mixin::meta # spent 492µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 56µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::_definition_context
512 Class::MOP::Attribute->new('body' => (
513 reader => { 'body' => \&Class::MOP::Method::body },
514 _definition_context(),
515 ))
516);
517
518117µs4666µsClass::MOP::Method->meta->add_attribute(
# spent 603µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 30µs making 1 call to Class::MOP::Attribute::new # spent 24µs making 1 call to Class::MOP::Mixin::meta # spent 9µs making 1 call to Class::MOP::_definition_context
519 Class::MOP::Attribute->new('associated_metaclass' => (
520 reader => { 'associated_metaclass' => \&Class::MOP::Method::associated_metaclass },
521 _definition_context(),
522 ))
523);
524
525120µs4659µsClass::MOP::Method->meta->add_attribute(
# spent 586µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 33µs making 1 call to Class::MOP::Attribute::new # spent 29µs making 1 call to Class::MOP::Mixin::meta # spent 11µs making 1 call to Class::MOP::_definition_context
526 Class::MOP::Attribute->new('package_name' => (
527 reader => { 'package_name' => \&Class::MOP::Method::package_name },
528 _definition_context(),
529 ))
530);
531
532112µs4403µsClass::MOP::Method->meta->add_attribute(
# spent 357µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 22µs making 1 call to Class::MOP::Attribute::new # spent 18µs making 1 call to Class::MOP::Mixin::meta # spent 7µs making 1 call to Class::MOP::_definition_context
533 Class::MOP::Attribute->new('name' => (
534 reader => { 'name' => \&Class::MOP::Method::name },
535 _definition_context(),
536 ))
537);
538
539110µs4689µsClass::MOP::Method->meta->add_attribute(
# spent 651µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 19µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Mixin::meta # spent 6µs making 1 call to Class::MOP::_definition_context
540 Class::MOP::Attribute->new('original_method' => (
541 reader => { 'original_method' => \&Class::MOP::Method::original_method },
542 writer => { '_set_original_method' => \&Class::MOP::Method::_set_original_method },
543 _definition_context(),
544 ))
545);
546
547## --------------------------------------------------------
548## Class::MOP::Method::Wrapped
549
550# NOTE:
551# the way this item is initialized, this
552# really does not follow the standard
553# practices of attributes, but we put
554# it here for completeness
555113µs4539µsClass::MOP::Method::Wrapped->meta->add_attribute(
# spent 360µs making 1 call to Class::MOP::Mixin::meta # spent 152µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
556 Class::MOP::Attribute->new('modifier_table' => (
557 _definition_context(),
558 ))
559);
560
561## --------------------------------------------------------
562## Class::MOP::Method::Generated
563
564115µs4728µsClass::MOP::Method::Generated->meta->add_attribute(
# spent 389µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 312µs making 1 call to Class::MOP::Mixin::meta # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::_definition_context
565 Class::MOP::Attribute->new('is_inline' => (
566 reader => { 'is_inline' => \&Class::MOP::Method::Generated::is_inline },
567 default => 0,
568 _definition_context(),
569 ))
570);
571
572112µs4458µsClass::MOP::Method::Generated->meta->add_attribute(
# spent 418µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 18µs making 1 call to Class::MOP::Attribute::new # spent 16µs making 1 call to Class::MOP::Mixin::meta # spent 6µs making 1 call to Class::MOP::_definition_context
573 Class::MOP::Attribute->new('definition_context' => (
574 reader => { 'definition_context' => \&Class::MOP::Method::Generated::definition_context },
575 _definition_context(),
576 ))
577);
578
579
580## --------------------------------------------------------
581## Class::MOP::Method::Inlined
582
583126µs41.30msClass::MOP::Method::Inlined->meta->add_attribute(
# spent 684µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 569µs making 1 call to Class::MOP::Mixin::meta # spent 41µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::_definition_context
584 Class::MOP::Attribute->new('_expected_method_class' => (
585 reader => { '_expected_method_class' => \&Class::MOP::Method::Inlined::_expected_method_class },
586 _definition_context(),
587 ))
588);
589
590## --------------------------------------------------------
591## Class::MOP::Method::Accessor
592
593126µs41.23msClass::MOP::Method::Accessor->meta->add_attribute(
# spent 602µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 575µs making 1 call to Class::MOP::Mixin::meta # spent 41µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::_definition_context
594 Class::MOP::Attribute->new('attribute' => (
595 reader => {
596 'associated_attribute' => \&Class::MOP::Method::Accessor::associated_attribute
597 },
598 _definition_context(),
599 ))
600);
601
602118µs4680µsClass::MOP::Method::Accessor->meta->add_attribute(
# spent 603µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 37µs making 1 call to Class::MOP::Attribute::new # spent 29µs making 1 call to Class::MOP::Mixin::meta # spent 11µs making 1 call to Class::MOP::_definition_context
603 Class::MOP::Attribute->new('accessor_type' => (
604 reader => { 'accessor_type' => \&Class::MOP::Method::Accessor::accessor_type },
605 _definition_context(),
606 ))
607);
608
609## --------------------------------------------------------
610## Class::MOP::Method::Constructor
611
612Class::MOP::Method::Constructor->meta->add_attribute(
613 Class::MOP::Attribute->new('options' => (
614 reader => {
615 'options' => \&Class::MOP::Method::Constructor::options
616 },
617 default => sub { +{} },
618127µs41.14ms _definition_context(),
# spent 547µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 535µs making 1 call to Class::MOP::Mixin::meta # spent 47µs making 1 call to Class::MOP::Attribute::new # spent 9µs making 1 call to Class::MOP::_definition_context
619 ))
620);
621
622115µs4435µsClass::MOP::Method::Constructor->meta->add_attribute(
# spent 379µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 28µs making 1 call to Class::MOP::Attribute::new # spent 19µs making 1 call to Class::MOP::Mixin::meta # spent 8µs making 1 call to Class::MOP::_definition_context
623 Class::MOP::Attribute->new('associated_metaclass' => (
624 init_arg => "metaclass", # FIXME alias and rename
625 reader => {
626 'associated_metaclass' => \&Class::MOP::Method::Constructor::associated_metaclass
627 },
628 _definition_context(),
629 ))
630);
631
632## --------------------------------------------------------
633## Class::MOP::Overload
634
635120µs4926µsClass::MOP::Overload->meta->add_attribute(
# spent 492µs making 1 call to Class::MOP::Mixin::meta # spent 396µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 30µs making 1 call to Class::MOP::Attribute::new # spent 8µs making 1 call to Class::MOP::_definition_context
636 Class::MOP::Attribute->new(
637 'operator' => (
638 reader => { 'operator' => \&Class::MOP::Overload::operator },
639 required => 1,
640 _definition_context(),
641 )
642 )
643);
644
64512µsfor my $attr (qw( method_name coderef coderef_package coderef_name method )) {
6465163µs303.35ms Class::MOP::Overload->meta->add_attribute(
# spent 3.02ms making 5 calls to Class::MOP::Mixin::HasAttributes::add_attribute, avg 604µs/call # spent 163µs making 5 calls to Class::MOP::Attribute::new, avg 33µs/call # spent 103µs making 5 calls to Class::MOP::Mixin::meta, avg 21µs/call # spent 46µs making 5 calls to Class::MOP::_definition_context, avg 9µs/call # spent 19µs making 10 calls to UNIVERSAL::can, avg 2µs/call
647 Class::MOP::Attribute->new(
648 $attr => (
649 reader => { $attr => Class::MOP::Overload->can($attr) },
650 predicate => {
651 'has_'
652 . $attr => Class::MOP::Overload->can( 'has_' . $attr )
653 },
654 _definition_context(),
655 )
656 )
657 );
658}
659
660Class::MOP::Overload->meta->add_attribute(
661115µs4425µs Class::MOP::Attribute->new(
# spent 371µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 28µs making 1 call to Class::MOP::Attribute::new # spent 18µs making 1 call to Class::MOP::Mixin::meta # spent 8µs making 1 call to Class::MOP::_definition_context
662 'associated_metaclass' => (
663 reader => {
664 'associated_metaclass' =>
665 \&Class::MOP::Overload::associated_metaclass
666 },
667 _definition_context(),
668 )
669 )
670);
671
672## --------------------------------------------------------
673## Class::MOP::Instance
674
675# NOTE:
676# these don't yet do much of anything, but are just
677# included for completeness
678
679123µs41.10msClass::MOP::Instance->meta->add_attribute(
# spent 577µs making 1 call to Class::MOP::Mixin::meta # spent 484µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 33µs making 1 call to Class::MOP::Attribute::new # spent 9µs making 1 call to Class::MOP::_definition_context
680 Class::MOP::Attribute->new('associated_metaclass',
681 reader => { associated_metaclass => \&Class::MOP::Instance::associated_metaclass },
682 _definition_context(),
683 ),
684);
685
686117µs4478µsClass::MOP::Instance->meta->add_attribute(
# spent 407µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 33µs making 1 call to Class::MOP::Attribute::new # spent 24µs making 1 call to Class::MOP::Mixin::meta # spent 15µs making 1 call to Class::MOP::_definition_context
687 Class::MOP::Attribute->new('_class_name',
688 init_arg => undef,
689 reader => { _class_name => \&Class::MOP::Instance::_class_name },
690 #lazy => 1, # not yet supported by Class::MOP but out our version does it anyway
691 #default => sub { $_[0]->associated_metaclass->name },
692 _definition_context(),
693 ),
694);
695
696123µs4444µsClass::MOP::Instance->meta->add_attribute(
# spent 381µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 27µs making 1 call to Class::MOP::Attribute::new # spent 27µs making 1 call to Class::MOP::Mixin::meta # spent 8µs making 1 call to Class::MOP::_definition_context
697 Class::MOP::Attribute->new('attributes',
698 reader => { attributes => \&Class::MOP::Instance::get_all_attributes },
699 _definition_context(),
700 ),
701);
702
703125µs4503µsClass::MOP::Instance->meta->add_attribute(
# spent 449µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 27µs making 1 call to Class::MOP::Attribute::new # spent 18µs making 1 call to Class::MOP::Mixin::meta # spent 8µs making 1 call to Class::MOP::_definition_context
704 Class::MOP::Attribute->new('slots',
705 reader => { slots => \&Class::MOP::Instance::slots },
706 _definition_context(),
707 ),
708);
709
710116µs4316µsClass::MOP::Instance->meta->add_attribute(
# spent 275µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Mixin::meta # spent 6µs making 1 call to Class::MOP::_definition_context
711 Class::MOP::Attribute->new('slot_hash',
712 reader => { slot_hash => \&Class::MOP::Instance::slot_hash },
713 _definition_context(),
714 ),
715);
716
717## --------------------------------------------------------
718## Class::MOP::Object
719
720# need to replace the meta method there with a real meta method object
721116µs21.33msClass::MOP::Object->meta->_add_meta_method('meta');
# spent 1.32ms making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 12µs making 1 call to Class::MOP::Mixin::meta
722
723## --------------------------------------------------------
724## Class::MOP::Mixin
725
726# need to replace the meta method there with a real meta method object
72717µs2647µsClass::MOP::Mixin->meta->_add_meta_method('meta');
# spent 635µs making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 12µs making 1 call to Class::MOP::Mixin::meta
728
7291160µsrequire Class::MOP::Deprecated unless our $no_deprecated;
730
731# we need the meta instance of the meta instance to be created now, in order
732# for the constructor to be able to use it
73316µs2218µsClass::MOP::Instance->meta->get_meta_instance;
# spent 206µs making 1 call to Class::MOP::Class::get_meta_instance # spent 13µs making 1 call to Class::MOP::Object::meta
734
735# pretend the add_method never happened. it hasn't yet affected anything
73614µs124µsundef Class::MOP::Instance->meta->{_package_cache_flag};
# spent 24µs making 1 call to Class::MOP::Object::meta
737
738## --------------------------------------------------------
739## Now close all the Class::MOP::* classes
740
741# NOTE: we don't need to inline the accessors this only lengthens the compile
742# time of the MOP, and gives us no actual benefits.
743
744$_->meta->make_immutable(
745 inline_constructor => 0,
746 constructor_name => "_new",
747 inline_accessors => 0,
7481144µs2822.4ms) for qw/
# spent 22.2ms making 14 calls to Class::MOP::Class::make_immutable, avg 1.59ms/call # spent 246µs making 14 calls to Class::MOP::Object::meta, avg 18µs/call
749 Class::MOP::Package
750 Class::MOP::Module
751 Class::MOP::Class
752
753 Class::MOP::Attribute
754 Class::MOP::Method
755 Class::MOP::Instance
756
757 Class::MOP::Object
758
759 Class::MOP::Method::Generated
760 Class::MOP::Method::Inlined
761
762 Class::MOP::Method::Accessor
763 Class::MOP::Method::Constructor
764 Class::MOP::Method::Wrapped
765
766 Class::MOP::Method::Meta
767
768 Class::MOP::Overload
769/;
770
771$_->meta->make_immutable(
772 inline_constructor => 0,
773 constructor_name => undef,
774 inline_accessors => 0,
775156µs101000µs) for qw/
# spent 907µs making 5 calls to Class::MOP::Class::make_immutable, avg 181µs/call # spent 93µs making 5 calls to Class::MOP::Mixin::meta, avg 19µs/call
776 Class::MOP::Mixin
777 Class::MOP::Mixin::AttributeCore
778 Class::MOP::Mixin::HasAttributes
779 Class::MOP::Mixin::HasMethods
780 Class::MOP::Mixin::HasOverloads
781/;
782
7831322µs1;
784
785# ABSTRACT: A Meta Object Protocol for Perl 5
786
787__END__
 
# spent 6µs within Class::MOP::__ANON__ which was called 8 times, avg 700ns/call: # 8 times (6µs+0s) by Class::MOP::Class::class_precedence_list at line 1014 of Class/MOP/Class.pm, avg 700ns/call
sub Class::MOP::__ANON__; # xsub
# spent 1.14ms within Class::MOP::get_code_info which was called 814 times, avg 1µs/call: # 656 times (945µs+0s) by Class::MOP::Mixin::HasMethods::add_method at line 73 of Class/MOP/Mixin/HasMethods.pm, avg 1µs/call # 158 times (198µs+0s) by Class::MOP::Mixin::HasMethods::_code_is_mine at line 87 of Class/MOP/Mixin/HasMethods.pm, avg 1µs/call
sub Class::MOP::get_code_info; # xsub