| Filename | /home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm |
| Statements | Executed 28431 statements in 369ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 8419 | 9 | 6 | 78.0ms | 78.0ms | Class::MOP::get_metaclass_by_name |
| 37 | 1 | 1 | 76.5ms | 7.20s | Class::MOP::__ANON__[:118] |
| 709 | 2 | 2 | 59.1ms | 5.94s | Class::MOP::load_first_existing_class (recurses: max depth 4, inclusive time 1.42s) |
| 1578 | 17 | 9 | 41.6ms | 49.9ms | Class::MOP::class_of |
| 4938 | 4 | 3 | 40.6ms | 40.6ms | Class::MOP::get_code_info (xsub) |
| 785 | 2 | 2 | 22.9ms | 38.5ms | Class::MOP::_is_valid_class_name |
| 1 | 1 | 1 | 22.9ms | 88.1ms | Class::MOP::BEGIN@19 |
| 699 | 11 | 10 | 18.9ms | 5.94s | Class::MOP::load_class (recurses: max depth 4, inclusive time 1.43s) |
| 817 | 5 | 3 | 15.6ms | 15.6ms | Class::MOP::is_class_loaded (xsub) |
| 790 | 2 | 1 | 15.6ms | 15.6ms | Class::MOP::CORE:match (opcode) |
| 513 | 3 | 2 | 10.0ms | 13.1ms | Class::MOP::metaclass_is_weak |
| 1 | 1 | 1 | 8.16ms | 9.48ms | Class::MOP::BEGIN@20 |
| 1 | 1 | 1 | 4.99ms | 7.40ms | Class::MOP::BEGIN@9 |
| 1 | 1 | 1 | 4.28ms | 22.3ms | Class::MOP::BEGIN@18 |
| 306 | 2 | 2 | 4.27ms | 4.27ms | Class::MOP::store_metaclass_by_name |
| 1 | 1 | 1 | 3.82ms | 4.11ms | Class::MOP::BEGIN@11 |
| 1 | 1 | 1 | 2.85ms | 4.90ms | Class::MOP::BEGIN@12 |
| 1 | 1 | 1 | 2.77ms | 4.93ms | Class::MOP::BEGIN@16 |
| 244 | 3 | 2 | 2.52ms | 2.52ms | Class::MOP::__ANON__[:302] |
| 244 | 3 | 2 | 2.45ms | 2.45ms | Class::MOP::__ANON__[:321] |
| 244 | 3 | 2 | 2.43ms | 2.43ms | Class::MOP::__ANON__[:234] |
| 1 | 1 | 1 | 2.35ms | 3.30ms | Class::MOP::BEGIN@17 |
| 244 | 3 | 2 | 2.34ms | 2.34ms | Class::MOP::__ANON__[:276] |
| 235 | 2 | 2 | 2.33ms | 2.33ms | Class::MOP::__ANON__[:192] |
| 1 | 1 | 1 | 2.29ms | 37.7ms | Class::MOP::BEGIN@13 |
| 1 | 1 | 1 | 2.24ms | 3.20ms | Class::MOP::BEGIN@14 |
| 295 | 1 | 1 | 1.58ms | 1.58ms | Class::MOP::__ANON__ (xsub) |
| 110 | 1 | 1 | 1.17ms | 1.17ms | Class::MOP::__ANON__[:337] |
| 37 | 1 | 1 | 1.09ms | 1.58ms | Class::MOP::_class_to_pmfile |
| 44 | 2 | 2 | 955µs | 1.41ms | Class::MOP::weaken_metaclass |
| 72 | 3 | 3 | 794µs | 794µs | Class::MOP::__ANON__[:510] |
| 42 | 1 | 1 | 519µs | 519µs | Class::MOP::remove_metaclass_by_name |
| 37 | 1 | 1 | 487µs | 487µs | Class::MOP::CORE:subst (opcode) |
| 5 | 1 | 1 | 238µs | 238µs | Class::MOP::CORE:regcomp (opcode) |
| 5 | 1 | 1 | 200µs | 478µs | Class::MOP::__ANON__[:125] |
| 1 | 1 | 1 | 80µs | 80µs | Class::MOP::BEGIN@7 |
| 1 | 1 | 1 | 62µs | 78µs | Class::MOP::BEGIN@4 |
| 1 | 1 | 1 | 35µs | 96µs | Class::MOP::BEGIN@5 |
| 1 | 1 | 1 | 34µs | 34µs | Class::MOP::BEGIN@21 |
| 1 | 1 | 1 | 30µs | 30µs | Class::MOP::BEGIN@23 |
| 0 | 0 | 0 | 0s | 0s | Class::MOP::__ANON__[:517] |
| 0 | 0 | 0 | 0s | 0s | Class::MOP::__ANON__[:615] |
| 0 | 0 | 0 | 0s | 0s | Class::MOP::does_metaclass_exist |
| 0 | 0 | 0 | 0s | 0s | Class::MOP::get_all_metaclass_instances |
| 0 | 0 | 0 | 0s | 0s | Class::MOP::get_all_metaclass_names |
| 0 | 0 | 0 | 0s | 0s | Class::MOP::get_all_metaclasses |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | |||||
| 2 | package Class::MOP; | ||||
| 3 | |||||
| 4 | 3 | 104µs | 2 | 93µs | # spent 78µs (62+16) within Class::MOP::BEGIN@4 which was called:
# once (62µs+16µs) by MooseX::Types::Combine::BEGIN@12 at line 4 # spent 78µs making 1 call to Class::MOP::BEGIN@4
# spent 16µs making 1 call to strict::import |
| 5 | 3 | 84µs | 2 | 157µs | # spent 96µs (35+61) within Class::MOP::BEGIN@5 which was called:
# once (35µs+61µs) by MooseX::Types::Combine::BEGIN@12 at line 5 # spent 96µs making 1 call to Class::MOP::BEGIN@5
# spent 61µs making 1 call to warnings::import |
| 6 | |||||
| 7 | 3 | 143µs | 1 | 80µs | # spent 80µs within Class::MOP::BEGIN@7 which was called:
# once (80µs+0s) by MooseX::Types::Combine::BEGIN@12 at line 7 # spent 80µs making 1 call to Class::MOP::BEGIN@7 |
| 8 | |||||
| 9 | 3 | 449µs | 1 | 7.40ms | # spent 7.40ms (4.99+2.42) within Class::MOP::BEGIN@9 which was called:
# once (4.99ms+2.42ms) by MooseX::Types::Combine::BEGIN@12 at line 9 # spent 7.40ms making 1 call to Class::MOP::BEGIN@9 |
| 10 | |||||
| 11 | 3 | 1.56ms | 2 | 4.40ms | # spent 4.11ms (3.82+292µs) within Class::MOP::BEGIN@11 which was called:
# once (3.82ms+292µs) by MooseX::Types::Combine::BEGIN@12 at line 11 # spent 4.11ms making 1 call to Class::MOP::BEGIN@11
# spent 292µs making 1 call to Exporter::import |
| 12 | 3 | 440µs | 2 | 5.32ms | # spent 4.90ms (2.85+2.05) within Class::MOP::BEGIN@12 which was called:
# once (2.85ms+2.05ms) by MooseX::Types::Combine::BEGIN@12 at line 12 # spent 4.90ms making 1 call to Class::MOP::BEGIN@12
# spent 413µs making 1 call to Exporter::import |
| 13 | 3 | 454µs | 2 | 37.8ms | # spent 37.7ms (2.29+35.4) within Class::MOP::BEGIN@13 which was called:
# once (2.29ms+35.4ms) by MooseX::Types::Combine::BEGIN@12 at line 13 # spent 37.7ms making 1 call to Class::MOP::BEGIN@13
# spent 24µs making 1 call to Sub::Install::__ANON__[Sub/Install.pm:284] |
| 14 | 3 | 514µs | 2 | 3.42ms | # spent 3.20ms (2.24+960µs) within Class::MOP::BEGIN@14 which was called:
# once (2.24ms+960µs) by MooseX::Types::Combine::BEGIN@12 at line 14 # spent 3.20ms making 1 call to Class::MOP::BEGIN@14
# spent 222µs making 1 call to Exporter::import |
| 15 | |||||
| 16 | 3 | 507µs | 1 | 4.93ms | # spent 4.93ms (2.77+2.16) within Class::MOP::BEGIN@16 which was called:
# once (2.77ms+2.16ms) by MooseX::Types::Combine::BEGIN@12 at line 16 # spent 4.93ms making 1 call to Class::MOP::BEGIN@16 |
| 17 | 3 | 453µs | 1 | 3.30ms | # spent 3.30ms (2.35+948µs) within Class::MOP::BEGIN@17 which was called:
# once (2.35ms+948µs) by MooseX::Types::Combine::BEGIN@12 at line 17 # spent 3.30ms making 1 call to Class::MOP::BEGIN@17 |
| 18 | 3 | 462µs | 1 | 22.3ms | # spent 22.3ms (4.28+18.0) within Class::MOP::BEGIN@18 which was called:
# once (4.28ms+18.0ms) by MooseX::Types::Combine::BEGIN@12 at line 18 # spent 22.3ms making 1 call to Class::MOP::BEGIN@18 |
| 19 | 3 | 515µs | 1 | 88.1ms | # spent 88.1ms (22.9+65.2) within Class::MOP::BEGIN@19 which was called:
# once (22.9ms+65.2ms) by MooseX::Types::Combine::BEGIN@12 at line 19 # spent 88.1ms making 1 call to Class::MOP::BEGIN@19 |
| 20 | 3 | 487µs | 1 | 9.48ms | # spent 9.48ms (8.16+1.31) within Class::MOP::BEGIN@20 which was called:
# once (8.16ms+1.31ms) by MooseX::Types::Combine::BEGIN@12 at line 20 # spent 9.48ms making 1 call to Class::MOP::BEGIN@20 |
| 21 | 3 | 282µs | 1 | 34µs | # spent 34µs within Class::MOP::BEGIN@21 which was called:
# once (34µs+0s) by MooseX::Types::Combine::BEGIN@12 at line 21 # spent 34µs making 1 call to Class::MOP::BEGIN@21 |
| 22 | |||||
| 23 | # spent 30µs within Class::MOP::BEGIN@23 which was called:
# once (30µs+0s) by MooseX::Types::Combine::BEGIN@12 at line 30 | ||||
| 24 | *IS_RUNNING_ON_5_10 = ($] < 5.009_005) | ||||
| 25 | ? sub () { 0 } | ||||
| 26 | 1 | 8µs | : sub () { 1 }; | ||
| 27 | |||||
| 28 | # this is either part of core or set up appropriately by MRO::Compat | ||||
| 29 | 1 | 23µs | *check_package_cache_flag = \&mro::get_pkg_gen; | ||
| 30 | 1 | 8.08ms | 1 | 30µs | } # spent 30µs making 1 call to Class::MOP::BEGIN@23 |
| 31 | |||||
| 32 | 1 | 5µs | our $VERSION = '1.11'; | ||
| 33 | 1 | 3µs | our $XS_VERSION = $VERSION; | ||
| 34 | 1 | 85µs | $VERSION = eval $VERSION; # spent 14µs executing statements in string eval | ||
| 35 | 1 | 4µs | our $AUTHORITY = 'cpan:STEVAN'; | ||
| 36 | |||||
| 37 | 1 | 5µs | require XSLoader; | ||
| 38 | 1 | 965µs | 1 | 934µs | XSLoader::load( __PACKAGE__, $XS_VERSION ); # spent 934µs making 1 call to XSLoader::load |
| 39 | |||||
| 40 | { | ||||
| 41 | # Metaclasses are singletons, so we cache them here. | ||||
| 42 | # there is no need to worry about destruction though | ||||
| 43 | # because they should die only when the program dies. | ||||
| 44 | # After all, do package definitions even get reaped? | ||||
| 45 | # Anonymous classes manage their own destruction. | ||||
| 46 | 2 | 9µs | my %METAS; | ||
| 47 | |||||
| 48 | sub get_all_metaclasses { %METAS } | ||||
| 49 | sub get_all_metaclass_instances { values %METAS } | ||||
| 50 | sub get_all_metaclass_names { keys %METAS } | ||||
| 51 | 8419 | 110ms | # spent 78.0ms within Class::MOP::get_metaclass_by_name which was called 8419 times, avg 9µs/call:
# 6454 times (60.5ms+0s) by Class::MOP::Class::initialize at line 45 of Class/MOP/Class.pm, avg 9µs/call
# 1134 times (9.51ms+0s) by Class::MOP::Class::_single_metaclass_is_compatible at line 292 of Class/MOP/Class.pm, avg 8µs/call
# 174 times (1.42ms+0s) by Class::MOP::Class::_construct_class_instance at line 86 of Class/MOP/Class.pm, avg 8µs/call
# 162 times (1.73ms+0s) by Class::MOP::Class::_class_metaclass_is_compatible at line 262 of Class/MOP/Class.pm, avg 11µs/call
# 132 times (1.09ms+0s) by Class::MOP::Package::initialize at line 30 of Class/MOP/Package.pm, avg 8µs/call
# 125 times (1.03ms+0s) by Moose::Meta::Role::initialize at line 165 of Moose/Meta/Role.pm, avg 8µs/call
# 110 times (1.02ms+0s) by Moose::Meta::Class::initialize at line 68 of Moose/Meta/Class.pm, avg 9µs/call
# 83 times (1.11ms+0s) by Moose::Role::init_meta at line 120 of Moose/Role.pm, avg 13µs/call
# 45 times (541µs+0s) by Moose::init_meta at line 167 of Moose.pm, avg 12µs/call | ||
| 52 | 306 | 5.07ms | # spent 4.27ms within Class::MOP::store_metaclass_by_name which was called 306 times, avg 14µs/call:
# 174 times (2.36ms+0s) by Class::MOP::Class::_construct_class_instance at line 111 of Class/MOP/Class.pm, avg 14µs/call
# 132 times (1.91ms+0s) by Class::MOP::Package::initialize at line 37 of Class/MOP/Package.pm, avg 14µs/call | ||
| 53 | 44 | 1.47ms | 44 | 450µs | # spent 1.41ms (955µs+450µs) within Class::MOP::weaken_metaclass which was called 44 times, avg 32µs/call:
# 42 times (913µs+432µs) by Moose::Meta::Role::initialize at line 177 of Moose/Meta/Role.pm, avg 32µs/call
# 2 times (43µs+18µs) by Class::MOP::Class::_construct_class_instance at line 116 of Class/MOP/Class.pm, avg 30µs/call # spent 450µs making 44 calls to Scalar::Util::weaken, avg 10µs/call |
| 54 | 513 | 13.9ms | 513 | 3.08ms | # spent 13.1ms (10.0+3.08) within Class::MOP::metaclass_is_weak which was called 513 times, avg 26µs/call:
# 440 times (8.56ms+2.67ms) by Class::MOP::Class::_construct_instance at line 605 of Class/MOP/Class.pm, avg 26µs/call
# 42 times (856µs+223µs) by Class::MOP::Class::reinitialize at line 56 of Class/MOP/Class.pm, avg 26µs/call
# 31 times (616µs+189µs) by Class::MOP::Method::Constructor::_generate_constructor_method_inline at line 117 of Class/MOP/Method/Constructor.pm, avg 26µs/call # spent 3.08ms making 513 calls to Scalar::Util::isweak, avg 6µs/call |
| 55 | sub does_metaclass_exist { exists $METAS{$_[0]} && defined $METAS{$_[0]} } | ||||
| 56 | 84 | 668µs | # spent 519µs within Class::MOP::remove_metaclass_by_name which was called 42 times, avg 12µs/call:
# 42 times (519µs+0s) by Class::MOP::Package::reinitialize at line 58 of Class/MOP/Package.pm, avg 12µs/call | ||
| 57 | |||||
| 58 | # This handles instances as well as class names | ||||
| 59 | # spent 49.9ms (41.6+8.29) within Class::MOP::class_of which was called 1578 times, avg 32µs/call:
# 427 times (9.99ms+1.92ms) by Moose::Meta::Class::excludes_role at line 240 of Moose/Meta/Class.pm, avg 28µs/call
# 217 times (6.79ms+1.26ms) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:321] at line 321 of Moose/Exporter.pm, avg 37µs/call
# 180 times (5.43ms+1.17ms) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:125] at line 96 of Moose/Exporter.pm, avg 37µs/call
# 153 times (3.90ms+738µs) by Moose::Util::_apply_all_roles at line 114 of Moose/Util.pm, avg 30µs/call
# 130 times (3.08ms+599µs) by Moose::Meta::Class::does_role at line 220 of Moose/Meta/Class.pm, avg 28µs/call
# 122 times (3.41ms+793µs) by Class::MOP::Class::_superclasses_updated at line 869 of Class/MOP/Class.pm, avg 34µs/call
# 120 times (3.19ms+681µs) by Moose::Meta::Class::superclasses at line 289 of Moose/Meta/Class.pm, avg 32µs/call
# 42 times (1.26ms+269µs) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:643] at line 625 of Moose/Exporter.pm, avg 36µs/call
# 42 times (1.22ms+224µs) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:643] at line 636 of Moose/Exporter.pm, avg 34µs/call
# 42 times (988µs+182µs) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:643] at line 642 of Moose/Exporter.pm, avg 28µs/call
# 42 times (952µs+180µs) by Moose::Util::MetaRole::apply_base_class_roles at line 138 of Moose/Util/MetaRole.pm, avg 27µs/call
# 42 times (908µs+167µs) by Moose::Util::MetaRole::apply_metaroles at line 30 of Moose/Util/MetaRole.pm, avg 26µs/call
# 9 times (211µs+39µs) by Moose::Meta::Attribute::BEGIN@20 at line 693 of Moose/Util/TypeConstraints.pm, avg 28µs/call
# 6 times (164µs+38µs) by Moose::Object::does at line 122 of Moose/Object.pm, avg 34µs/call
# 2 times (59µs+11µs) by MooseX::Role::Parameterized::role at line 41 of MooseX/Role/Parameterized.pm, avg 35µs/call
# once (28µs+5µs) by Class::MOP::Object::_new at line 22 of Class/MOP/Object.pm
# once (28µs+5µs) by MooseX::Role::Parameterized::parameter at line 28 of MooseX/Role/Parameterized.pm | ||||
| 60 | 1578 | 3.78ms | return unless defined $_[0]; | ||
| 61 | 1578 | 29.4ms | 1578 | 8.29ms | my $class = blessed($_[0]) || $_[0]; # spent 8.29ms making 1578 calls to Scalar::Util::blessed, avg 5µs/call |
| 62 | 1578 | 21.0ms | return $METAS{$class}; | ||
| 63 | } | ||||
| 64 | |||||
| 65 | # NOTE: | ||||
| 66 | # We only cache metaclasses, meaning instances of | ||||
| 67 | # Class::MOP::Class. We do not cache instance of | ||||
| 68 | # Class::MOP::Package or Class::MOP::Module. Mostly | ||||
| 69 | # because I don't yet see a good reason to do so. | ||||
| 70 | } | ||||
| 71 | |||||
| 72 | # spent 1.58ms (1.09+487µs) within Class::MOP::_class_to_pmfile which was called 37 times, avg 43µs/call:
# 37 times (1.09ms+487µs) by Class::MOP::load_first_existing_class at line 111, avg 43µs/call | ||||
| 73 | 37 | 134µs | my $class = shift; | ||
| 74 | |||||
| 75 | 37 | 160µs | my $file = $class . '.pm'; | ||
| 76 | 37 | 902µs | 37 | 487µs | $file =~ s{::}{/}g; # spent 487µs making 37 calls to Class::MOP::CORE:subst, avg 13µs/call |
| 77 | |||||
| 78 | 37 | 439µs | return $file; | ||
| 79 | } | ||||
| 80 | |||||
| 81 | # spent 5.94s (59.1ms+5.88) within Class::MOP::load_first_existing_class which was called 709 times, avg 8.38ms/call:
# 699 times (57.6ms+5.87s) by Class::MOP::load_class at line 137, avg 8.49ms/call
# 10 times (1.50ms+4.71ms) by Moose::Util::resolve_metaclass_alias at line 202 of Moose/Util.pm, avg 621µs/call | ||||
| 82 | 709 | 8.55ms | 709 | 43.5ms | my $classes = Data::OptList::mkopt(\@_) # spent 43.5ms making 709 calls to Data::OptList::mkopt, avg 61µs/call |
| 83 | or return; | ||||
| 84 | |||||
| 85 | 709 | 4.44ms | foreach my $class (@{ $classes }) { | ||
| 86 | 719 | 2.59ms | my $name = $class->[0]; | ||
| 87 | 719 | 11.5ms | 719 | 34.9ms | unless ( _is_valid_class_name($name) ) { # spent 34.9ms making 719 calls to Class::MOP::_is_valid_class_name, avg 49µs/call |
| 88 | my $display = defined($name) ? $name : 'undef'; | ||||
| 89 | confess "Invalid class name ($display)"; | ||||
| 90 | } | ||||
| 91 | } | ||||
| 92 | |||||
| 93 | 709 | 1.41ms | my $found; | ||
| 94 | 709 | 1.52ms | my %exceptions; | ||
| 95 | |||||
| 96 | 709 | 2.45ms | for my $class (@{ $classes }) { | ||
| 97 | 714 | 3.05ms | my ($name, $options) = @{ $class }; | ||
| 98 | |||||
| 99 | 714 | 1.70ms | if ($options) { | ||
| 100 | 65 | 3.36ms | 65 | 1.55ms | return $name if is_class_loaded($name, $options); # spent 1.55ms making 65 calls to Class::MOP::is_class_loaded, avg 24µs/call |
| 101 | 8 | 162µs | 8 | 73µs | if (is_class_loaded($name)) { # spent 73µs making 8 calls to Class::MOP::is_class_loaded, avg 9µs/call |
| 102 | # we already know it's loaded and too old, but we call | ||||
| 103 | # ->VERSION anyway to generate the exception for us | ||||
| 104 | $name->VERSION($options->{-version}); | ||||
| 105 | } | ||||
| 106 | } | ||||
| 107 | else { | ||||
| 108 | 649 | 28.5ms | 649 | 12.3ms | return $name if is_class_loaded($name); # spent 12.3ms making 649 calls to Class::MOP::is_class_loaded, avg 19µs/call |
| 109 | } | ||||
| 110 | |||||
| 111 | 37 | 412µs | 37 | 1.58ms | my $file = _class_to_pmfile($name); # spent 1.58ms making 37 calls to Class::MOP::_class_to_pmfile, avg 43µs/call |
| 112 | # spent 7.20s (76.5ms+7.13) within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:118] which was called 37 times, avg 195ms/call:
# 37 times (76.5ms+7.13s) by Try::Tiny::try at line 71 of Try/Tiny.pm, avg 195ms/call | ||||
| 113 | 37 | 711µs | local $SIG{__DIE__}; | ||
| 114 | 37 | 14.5ms | require $file; | ||
| 115 | 32 | 266µs | $name->VERSION($options->{-version}) | ||
| 116 | if defined $options->{-version}; | ||||
| 117 | 32 | 689µs | return 1; | ||
| 118 | } | ||||
| 119 | # spent 478µs (200+278) within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:125] which was called 5 times, avg 96µs/call:
# 5 times (200µs+278µs) by Try::Tiny::try at line 100 of Try/Tiny.pm, avg 96µs/call | ||||
| 120 | 5 | 429µs | 10 | 279µs | unless (/^Can't locate \Q$file\E in \@INC/) { # spent 238µs making 5 calls to Class::MOP::CORE:regcomp, avg 48µs/call
# spent 40µs making 5 calls to Class::MOP::CORE:match, avg 8µs/call |
| 121 | confess "Couldn't load class ($name) because: $_"; | ||||
| 122 | } | ||||
| 123 | |||||
| 124 | 5 | 63µs | return; | ||
| 125 | 37 | 2.07ms | 74 | 5.83s | }; # spent 7.21s making 37 calls to Try::Tiny::try, avg 195ms/call, recursion: max depth 4, sum of overlapping time 1.38s
# spent 800µs making 37 calls to Try::Tiny::catch, avg 22µs/call |
| 126 | } | ||||
| 127 | |||||
| 128 | if ( @{ $classes } > 1 ) { | ||||
| 129 | my @list = map { $_->[0] } @{ $classes }; | ||||
| 130 | confess "Can't locate any of @list in \@INC (\@INC contains: @INC)."; | ||||
| 131 | } else { | ||||
| 132 | confess "Can't locate " . _class_to_pmfile($classes->[0]->[0]) . " in \@INC (\@INC contains: @INC)."; | ||||
| 133 | } | ||||
| 134 | } | ||||
| 135 | |||||
| 136 | # spent 5.94s (18.9ms+5.93) within Class::MOP::load_class which was called 699 times, avg 8.50ms/call:
# 184 times (4.59ms+22.4ms) by Moose::Meta::Role::apply at line 450 of Moose/Meta/Role.pm, avg 147µs/call
# 153 times (4.49ms+992ms) by Moose::Util::_apply_all_roles at line 113 of Moose/Util.pm, avg 6.52ms/call
# 120 times (3.26ms+21.5ms) by Moose::Meta::Class::superclasses at line 288 of Moose/Meta/Class.pm, avg 206µs/call
# 73 times (1.99ms+7.61ms) by Class::MOP::Class::_inline_constructor at line 1328 of Class/MOP/Class.pm, avg 132µs/call
# 56 times (1.49ms+1.52s) by MooseX::Types::Combine::import at line 40 of MooseX/Types/Combine.pm, avg 27.1ms/call
# 42 times (1.02ms+9.06ms) by MooseX::Role::Parameterized::Meta::Role::Parameterizable::generate_role at line 83 of MooseX/Role/Parameterized/Meta/Role/Parameterizable.pm, avg 240µs/call
# 42 times (1.18ms+8.41ms) by Class::MOP::Class::_inline_destructor at line 1360 of Class/MOP/Class.pm, avg 228µs/call
# 14 times (411µs+4.00ms) by Class::MOP::MiniTrait::apply at line 14 of Class/MOP/MiniTrait.pm, avg 315µs/call
# 9 times (227µs+-227µs) by Moose::Meta::Role::Composite::apply_params at line 122 of Moose/Meta/Role/Composite.pm, avg 0s/call
# 5 times (215µs+3.34s) by Moose::Meta::Attribute::Custom::Trait::Array::register_implementation or Moose::Meta::Attribute::Custom::Trait::Bool::register_implementation or Moose::Meta::Attribute::Custom::Trait::Counter::register_implementation or Moose::Meta::Attribute::Custom::Trait::Hash::register_implementation or Moose::Meta::Attribute::Custom::Trait::String::register_implementation at line 24 of Moose/Meta/Attribute/Native.pm, avg 669ms/call
# once (27µs+-27µs) by metaclass::import at line 29 of metaclass.pm | ||||
| 137 | 699 | 9.20ms | 699 | 5.93s | load_first_existing_class($_[0], ref $_[1] ? $_[1] : ()); # spent 7.36s making 699 calls to Class::MOP::load_first_existing_class, avg 10.5ms/call, recursion: max depth 4, sum of overlapping time 1.42s |
| 138 | |||||
| 139 | # This is done to avoid breaking code which checked the return value. Said | ||||
| 140 | # code is dumb. The return value was _always_ true, since it dies on | ||||
| 141 | # failure! | ||||
| 142 | 699 | 7.95ms | return 1; | ||
| 143 | } | ||||
| 144 | |||||
| 145 | # spent 38.5ms (22.9+15.6) within Class::MOP::_is_valid_class_name which was called 785 times, avg 49µs/call:
# 719 times (21.0ms+13.9ms) by Class::MOP::load_first_existing_class at line 87, avg 49µs/call
# 66 times (1.95ms+1.67ms) by Class::MOP::Module::_instantiate_module at line 61 of Class/MOP/Module.pm, avg 55µs/call | ||||
| 146 | 785 | 2.64ms | my $class = shift; | ||
| 147 | |||||
| 148 | 785 | 1.57ms | return 0 if ref($class); | ||
| 149 | 785 | 1.70ms | return 0 unless defined($class); | ||
| 150 | 785 | 1.79ms | return 0 unless length($class); | ||
| 151 | |||||
| 152 | 785 | 31.4ms | 785 | 15.6ms | return 1 if $class =~ /^\w+(?:::\w+)*$/; # spent 15.6ms making 785 calls to Class::MOP::CORE:match, avg 20µs/call |
| 153 | |||||
| 154 | return 0; | ||||
| 155 | } | ||||
| 156 | |||||
| 157 | ## ---------------------------------------------------------------------------- | ||||
| 158 | ## Setting up our environment ... | ||||
| 159 | ## ---------------------------------------------------------------------------- | ||||
| 160 | ## Class::MOP needs to have a few things in the global perl environment so | ||||
| 161 | ## that it can operate effectively. Those things are done here. | ||||
| 162 | ## ---------------------------------------------------------------------------- | ||||
| 163 | |||||
| 164 | # ... nothing yet actually ;) | ||||
| 165 | |||||
| 166 | ## ---------------------------------------------------------------------------- | ||||
| 167 | ## Bootstrapping | ||||
| 168 | ## ---------------------------------------------------------------------------- | ||||
| 169 | ## The code below here is to bootstrap our MOP with itself. This is also | ||||
| 170 | ## sometimes called "tying the knot". By doing this, we make it much easier | ||||
| 171 | ## to extend the MOP through subclassing and such since now you can use the | ||||
| 172 | ## MOP itself to extend itself. | ||||
| 173 | ## | ||||
| 174 | ## Yes, I know, thats weird and insane, but it's a good thing, trust me :) | ||||
| 175 | ## ---------------------------------------------------------------------------- | ||||
| 176 | |||||
| 177 | # We need to add in the meta-attributes here so that | ||||
| 178 | # any subclass of Class::MOP::* will be able to | ||||
| 179 | # inherit them using _construct_instance | ||||
| 180 | |||||
| 181 | ## -------------------------------------------------------- | ||||
| 182 | ## Class::MOP::Mixin::HasMethods | ||||
| 183 | |||||
| 184 | Class::MOP::Mixin::HasMethods->meta->add_attribute( | ||||
| 185 | Class::MOP::Attribute->new('_methods' => ( | ||||
| 186 | reader => { | ||||
| 187 | # NOTE: | ||||
| 188 | # we just alias the original method | ||||
| 189 | # rather than re-produce it here | ||||
| 190 | '_full_method_map' => \&Class::MOP::Mixin::HasMethods::_full_method_map | ||||
| 191 | }, | ||||
| 192 | 235 | 3.02ms | # spent 2.33ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:192] which was called 235 times, avg 10µs/call:
# 154 times (1.54ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 10µs/call
# 81 times (797µs+0s) by Moose::Meta::Role::_new at line 41 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call | ||
| 193 | 1 | 83µs | 3 | 6.01ms | )) # spent 3.23ms making 1 call to Class::MOP::Mixin::meta
# spent 2.54ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 242µs making 1 call to Class::MOP::Attribute::new |
| 194 | ); | ||||
| 195 | |||||
| 196 | 1 | 45µs | 3 | 1.69ms | Class::MOP::Mixin::HasMethods->meta->add_attribute( # spent 1.49ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 120µs making 1 call to Class::MOP::Attribute::new
# spent 86µs making 1 call to Class::MOP::Mixin::meta |
| 197 | Class::MOP::Attribute->new('method_metaclass' => ( | ||||
| 198 | reader => { | ||||
| 199 | # NOTE: | ||||
| 200 | # we just alias the original method | ||||
| 201 | # rather than re-produce it here | ||||
| 202 | 'method_metaclass' => \&Class::MOP::Mixin::HasMethods::method_metaclass | ||||
| 203 | }, | ||||
| 204 | default => 'Class::MOP::Method', | ||||
| 205 | )) | ||||
| 206 | ); | ||||
| 207 | |||||
| 208 | 1 | 45µs | 3 | 1.64ms | Class::MOP::Mixin::HasMethods->meta->add_attribute( # spent 1.43ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 121µs making 1 call to Class::MOP::Attribute::new
# spent 85µs making 1 call to Class::MOP::Mixin::meta |
| 209 | Class::MOP::Attribute->new('wrapped_method_metaclass' => ( | ||||
| 210 | reader => { | ||||
| 211 | # NOTE: | ||||
| 212 | # we just alias the original method | ||||
| 213 | # rather than re-produce it here | ||||
| 214 | 'wrapped_method_metaclass' => \&Class::MOP::Mixin::HasMethods::wrapped_method_metaclass | ||||
| 215 | }, | ||||
| 216 | default => 'Class::MOP::Method::Wrapped', | ||||
| 217 | )) | ||||
| 218 | ); | ||||
| 219 | |||||
| 220 | ## -------------------------------------------------------- | ||||
| 221 | ## Class::MOP::Mixin::HasMethods | ||||
| 222 | |||||
| 223 | Class::MOP::Mixin::HasAttributes->meta->add_attribute( | ||||
| 224 | Class::MOP::Attribute->new('attributes' => ( | ||||
| 225 | reader => { | ||||
| 226 | # NOTE: we need to do this in order | ||||
| 227 | # for the instance meta-object to | ||||
| 228 | # not fall into meta-circular death | ||||
| 229 | # | ||||
| 230 | # we just alias the original method | ||||
| 231 | # rather than re-produce it here | ||||
| 232 | '_attribute_map' => \&Class::MOP::Mixin::HasAttributes::_attribute_map | ||||
| 233 | }, | ||||
| 234 | 244 | 3.06ms | # spent 2.43ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:234] which was called 244 times, avg 10µs/call:
# 154 times (1.54ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 10µs/call
# 81 times (809µs+0s) by Moose::Meta::Role::_new at line 100 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call
# 9 times (86µs+0s) by Moose::Meta::Role::Composite::_new at line 108 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call | ||
| 235 | 1 | 61µs | 3 | 3.68ms | )) # spent 1.98ms making 1 call to Class::MOP::Mixin::meta
# spent 1.52ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 171µs making 1 call to Class::MOP::Attribute::new |
| 236 | ); | ||||
| 237 | |||||
| 238 | 1 | 43µs | 3 | 1.63ms | Class::MOP::Mixin::HasAttributes->meta->add_attribute( # spent 1.43ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 115µs making 1 call to Class::MOP::Attribute::new
# spent 81µs making 1 call to Class::MOP::Mixin::meta |
| 239 | Class::MOP::Attribute->new('attribute_metaclass' => ( | ||||
| 240 | reader => { | ||||
| 241 | # NOTE: | ||||
| 242 | # we just alias the original method | ||||
| 243 | # rather than re-produce it here | ||||
| 244 | 'attribute_metaclass' => \&Class::MOP::Mixin::HasAttributes::attribute_metaclass | ||||
| 245 | }, | ||||
| 246 | default => 'Class::MOP::Attribute', | ||||
| 247 | )) | ||||
| 248 | ); | ||||
| 249 | |||||
| 250 | ## -------------------------------------------------------- | ||||
| 251 | ## Class::MOP::Package | ||||
| 252 | |||||
| 253 | 1 | 58µs | 3 | 4.22ms | Class::MOP::Package->meta->add_attribute( # spent 2.54ms making 1 call to Class::MOP::Object::meta
# spent 1.53ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 143µs making 1 call to Class::MOP::Attribute::new |
| 254 | Class::MOP::Attribute->new('package' => ( | ||||
| 255 | reader => { | ||||
| 256 | # NOTE: we need to do this in order | ||||
| 257 | # for the instance meta-object to | ||||
| 258 | # not fall into meta-circular death | ||||
| 259 | # | ||||
| 260 | # we just alias the original method | ||||
| 261 | # rather than re-produce it here | ||||
| 262 | 'name' => \&Class::MOP::Package::name | ||||
| 263 | }, | ||||
| 264 | )) | ||||
| 265 | ); | ||||
| 266 | |||||
| 267 | Class::MOP::Package->meta->add_attribute( | ||||
| 268 | Class::MOP::Attribute->new('namespace' => ( | ||||
| 269 | reader => { | ||||
| 270 | # NOTE: | ||||
| 271 | # we just alias the original method | ||||
| 272 | # rather than re-produce it here | ||||
| 273 | 'namespace' => \&Class::MOP::Package::namespace | ||||
| 274 | }, | ||||
| 275 | init_arg => undef, | ||||
| 276 | 244 | 3.16ms | # spent 2.34ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:276] which was called 244 times, avg 10µs/call:
# 154 times (1.44ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 9µs/call
# 81 times (814µs+0s) by Moose::Meta::Role::_new at line 43 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call
# 9 times (86µs+0s) by Moose::Meta::Role::Composite::_new at line 48 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call | ||
| 277 | 1 | 53µs | 3 | 1.71ms | )) # spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 149µs making 1 call to Class::MOP::Attribute::new
# spent 84µs making 1 call to Class::MOP::Object::meta |
| 278 | ); | ||||
| 279 | |||||
| 280 | ## -------------------------------------------------------- | ||||
| 281 | ## Class::MOP::Module | ||||
| 282 | |||||
| 283 | # NOTE: | ||||
| 284 | # yeah this is kind of stretching things a bit, | ||||
| 285 | # but truthfully the version should be an attribute | ||||
| 286 | # of the Module, the weirdness comes from having to | ||||
| 287 | # stick to Perl 5 convention and store it in the | ||||
| 288 | # $VERSION package variable. Basically if you just | ||||
| 289 | # squint at it, it will look how you want it to look. | ||||
| 290 | # Either as a package variable, or as a attribute of | ||||
| 291 | # the metaclass, isn't abstraction great :) | ||||
| 292 | |||||
| 293 | Class::MOP::Module->meta->add_attribute( | ||||
| 294 | Class::MOP::Attribute->new('version' => ( | ||||
| 295 | reader => { | ||||
| 296 | # NOTE: | ||||
| 297 | # we just alias the original method | ||||
| 298 | # rather than re-produce it here | ||||
| 299 | 'version' => \&Class::MOP::Module::version | ||||
| 300 | }, | ||||
| 301 | init_arg => undef, | ||||
| 302 | 244 | 2.98ms | # spent 2.52ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:302] which was called 244 times, avg 10µs/call:
# 154 times (1.44ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 9µs/call
# 81 times (1000µs+0s) by Moose::Meta::Role::_new at line 45 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 12µs/call
# 9 times (79µs+0s) by Moose::Meta::Role::Composite::_new at line 50 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 9µs/call | ||
| 303 | 1 | 67µs | 3 | 3.65ms | )) # spent 1.95ms making 1 call to Class::MOP::Object::meta
# spent 1.46ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 242µs making 1 call to Class::MOP::Attribute::new |
| 304 | ); | ||||
| 305 | |||||
| 306 | # NOTE: | ||||
| 307 | # By following the same conventions as version here, | ||||
| 308 | # we are opening up the possibility that people can | ||||
| 309 | # use the $AUTHORITY in non-Class::MOP modules as | ||||
| 310 | # well. | ||||
| 311 | |||||
| 312 | Class::MOP::Module->meta->add_attribute( | ||||
| 313 | Class::MOP::Attribute->new('authority' => ( | ||||
| 314 | reader => { | ||||
| 315 | # NOTE: | ||||
| 316 | # we just alias the original method | ||||
| 317 | # rather than re-produce it here | ||||
| 318 | 'authority' => \&Class::MOP::Module::authority | ||||
| 319 | }, | ||||
| 320 | init_arg => undef, | ||||
| 321 | 244 | 2.96ms | # spent 2.45ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:321] which was called 244 times, avg 10µs/call:
# 154 times (1.60ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 10µs/call
# 81 times (768µs+0s) by Moose::Meta::Role::_new at line 95 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 9µs/call
# 9 times (81µs+0s) by Moose::Meta::Role::Composite::_new at line 103 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 9µs/call | ||
| 322 | 1 | 52µs | 3 | 1.71ms | )) # spent 1.47ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 156µs making 1 call to Class::MOP::Attribute::new
# spent 84µs making 1 call to Class::MOP::Object::meta |
| 323 | ); | ||||
| 324 | |||||
| 325 | ## -------------------------------------------------------- | ||||
| 326 | ## Class::MOP::Class | ||||
| 327 | |||||
| 328 | Class::MOP::Class->meta->add_attribute( | ||||
| 329 | Class::MOP::Attribute->new('superclasses' => ( | ||||
| 330 | accessor => { | ||||
| 331 | # NOTE: | ||||
| 332 | # we just alias the original method | ||||
| 333 | # rather than re-produce it here | ||||
| 334 | 'superclasses' => \&Class::MOP::Class::superclasses | ||||
| 335 | }, | ||||
| 336 | init_arg => undef, | ||||
| 337 | 110 | 1.56ms | # spent 1.17ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:337] which was called 110 times, avg 11µs/call:
# 110 times (1.17ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 11µs/call | ||
| 338 | 1 | 76µs | 3 | 5.91ms | )) # spent 4.24ms making 1 call to Class::MOP::Object::meta
# spent 1.52ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 152µs making 1 call to Class::MOP::Attribute::new |
| 339 | ); | ||||
| 340 | |||||
| 341 | 1 | 52µs | 3 | 1.72ms | Class::MOP::Class->meta->add_attribute( # spent 1.50ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 134µs making 1 call to Class::MOP::Attribute::new
# spent 89µs making 1 call to Class::MOP::Object::meta |
| 342 | Class::MOP::Attribute->new('instance_metaclass' => ( | ||||
| 343 | reader => { | ||||
| 344 | # NOTE: we need to do this in order | ||||
| 345 | # for the instance meta-object to | ||||
| 346 | # not fall into meta-circular death | ||||
| 347 | # | ||||
| 348 | # we just alias the original method | ||||
| 349 | # rather than re-produce it here | ||||
| 350 | 'instance_metaclass' => \&Class::MOP::Class::instance_metaclass | ||||
| 351 | }, | ||||
| 352 | default => 'Class::MOP::Instance', | ||||
| 353 | )) | ||||
| 354 | ); | ||||
| 355 | |||||
| 356 | 1 | 44µs | 3 | 1.74ms | Class::MOP::Class->meta->add_attribute( # spent 1.55ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 115µs making 1 call to Class::MOP::Attribute::new
# spent 82µs making 1 call to Class::MOP::Object::meta |
| 357 | Class::MOP::Attribute->new('immutable_trait' => ( | ||||
| 358 | reader => { | ||||
| 359 | 'immutable_trait' => \&Class::MOP::Class::immutable_trait | ||||
| 360 | }, | ||||
| 361 | default => "Class::MOP::Class::Immutable::Trait", | ||||
| 362 | )) | ||||
| 363 | ); | ||||
| 364 | |||||
| 365 | 1 | 45µs | 3 | 1.66ms | Class::MOP::Class->meta->add_attribute( # spent 1.46ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 117µs making 1 call to Class::MOP::Attribute::new
# spent 84µs making 1 call to Class::MOP::Object::meta |
| 366 | Class::MOP::Attribute->new('constructor_name' => ( | ||||
| 367 | reader => { | ||||
| 368 | 'constructor_name' => \&Class::MOP::Class::constructor_name, | ||||
| 369 | }, | ||||
| 370 | default => "new", | ||||
| 371 | )) | ||||
| 372 | ); | ||||
| 373 | |||||
| 374 | 1 | 47µs | 3 | 1.73ms | Class::MOP::Class->meta->add_attribute( # spent 1.53ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 115µs making 1 call to Class::MOP::Attribute::new
# spent 85µs making 1 call to Class::MOP::Object::meta |
| 375 | Class::MOP::Attribute->new('constructor_class' => ( | ||||
| 376 | reader => { | ||||
| 377 | 'constructor_class' => \&Class::MOP::Class::constructor_class, | ||||
| 378 | }, | ||||
| 379 | default => "Class::MOP::Method::Constructor", | ||||
| 380 | )) | ||||
| 381 | ); | ||||
| 382 | |||||
| 383 | |||||
| 384 | 1 | 43µs | 3 | 1.68ms | Class::MOP::Class->meta->add_attribute( # spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 110µs making 1 call to Class::MOP::Attribute::new
# spent 82µs making 1 call to Class::MOP::Object::meta |
| 385 | Class::MOP::Attribute->new('destructor_class' => ( | ||||
| 386 | reader => { | ||||
| 387 | 'destructor_class' => \&Class::MOP::Class::destructor_class, | ||||
| 388 | }, | ||||
| 389 | )) | ||||
| 390 | ); | ||||
| 391 | |||||
| 392 | # NOTE: | ||||
| 393 | # we don't actually need to tie the knot with | ||||
| 394 | # Class::MOP::Class here, it is actually handled | ||||
| 395 | # within Class::MOP::Class itself in the | ||||
| 396 | # _construct_class_instance method. | ||||
| 397 | |||||
| 398 | ## -------------------------------------------------------- | ||||
| 399 | ## Class::MOP::Mixin::AttributeCore | ||||
| 400 | 1 | 74µs | 3 | 3.57ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 1.98ms making 1 call to Class::MOP::Mixin::meta
# spent 1.44ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 144µs making 1 call to Class::MOP::Attribute::new |
| 401 | Class::MOP::Attribute->new('name' => ( | ||||
| 402 | reader => { | ||||
| 403 | # NOTE: we need to do this in order | ||||
| 404 | # for the instance meta-object to | ||||
| 405 | # not fall into meta-circular death | ||||
| 406 | # | ||||
| 407 | # we just alias the original method | ||||
| 408 | # rather than re-produce it here | ||||
| 409 | 'name' => \&Class::MOP::Mixin::AttributeCore::name | ||||
| 410 | } | ||||
| 411 | )) | ||||
| 412 | ); | ||||
| 413 | |||||
| 414 | 1 | 46µs | 3 | 2.43ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 2.24ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 114µs making 1 call to Class::MOP::Attribute::new
# spent 82µs making 1 call to Class::MOP::Mixin::meta |
| 415 | Class::MOP::Attribute->new('accessor' => ( | ||||
| 416 | reader => { 'accessor' => \&Class::MOP::Mixin::AttributeCore::accessor }, | ||||
| 417 | predicate => { 'has_accessor' => \&Class::MOP::Mixin::AttributeCore::has_accessor }, | ||||
| 418 | )) | ||||
| 419 | ); | ||||
| 420 | |||||
| 421 | 1 | 47µs | 3 | 2.35ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 2.15ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 113µs making 1 call to Class::MOP::Attribute::new
# spent 83µs making 1 call to Class::MOP::Mixin::meta |
| 422 | Class::MOP::Attribute->new('reader' => ( | ||||
| 423 | reader => { 'reader' => \&Class::MOP::Mixin::AttributeCore::reader }, | ||||
| 424 | predicate => { 'has_reader' => \&Class::MOP::Mixin::AttributeCore::has_reader }, | ||||
| 425 | )) | ||||
| 426 | ); | ||||
| 427 | |||||
| 428 | 1 | 47µs | 3 | 2.30ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 2.11ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 113µs making 1 call to Class::MOP::Attribute::new
# spent 82µs making 1 call to Class::MOP::Mixin::meta |
| 429 | Class::MOP::Attribute->new('initializer' => ( | ||||
| 430 | reader => { 'initializer' => \&Class::MOP::Mixin::AttributeCore::initializer }, | ||||
| 431 | predicate => { 'has_initializer' => \&Class::MOP::Mixin::AttributeCore::has_initializer }, | ||||
| 432 | )) | ||||
| 433 | ); | ||||
| 434 | |||||
| 435 | 1 | 43µs | 3 | 1.69ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 134µs making 1 call to Class::MOP::Attribute::new
# spent 81µs making 1 call to Class::MOP::Mixin::meta |
| 436 | Class::MOP::Attribute->new('definition_context' => ( | ||||
| 437 | reader => { 'definition_context' => \&Class::MOP::Mixin::AttributeCore::definition_context }, | ||||
| 438 | )) | ||||
| 439 | ); | ||||
| 440 | |||||
| 441 | 1 | 47µs | 3 | 2.46ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 2.27ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 113µs making 1 call to Class::MOP::Attribute::new
# spent 82µs making 1 call to Class::MOP::Mixin::meta |
| 442 | Class::MOP::Attribute->new('writer' => ( | ||||
| 443 | reader => { 'writer' => \&Class::MOP::Mixin::AttributeCore::writer }, | ||||
| 444 | predicate => { 'has_writer' => \&Class::MOP::Mixin::AttributeCore::has_writer }, | ||||
| 445 | )) | ||||
| 446 | ); | ||||
| 447 | |||||
| 448 | 1 | 47µs | 3 | 2.35ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 2.15ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 114µs making 1 call to Class::MOP::Attribute::new
# spent 83µs making 1 call to Class::MOP::Mixin::meta |
| 449 | Class::MOP::Attribute->new('predicate' => ( | ||||
| 450 | reader => { 'predicate' => \&Class::MOP::Mixin::AttributeCore::predicate }, | ||||
| 451 | predicate => { 'has_predicate' => \&Class::MOP::Mixin::AttributeCore::has_predicate }, | ||||
| 452 | )) | ||||
| 453 | ); | ||||
| 454 | |||||
| 455 | 1 | 47µs | 3 | 2.32ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 2.13ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 114µs making 1 call to Class::MOP::Attribute::new
# spent 81µs making 1 call to Class::MOP::Mixin::meta |
| 456 | Class::MOP::Attribute->new('clearer' => ( | ||||
| 457 | reader => { 'clearer' => \&Class::MOP::Mixin::AttributeCore::clearer }, | ||||
| 458 | predicate => { 'has_clearer' => \&Class::MOP::Mixin::AttributeCore::has_clearer }, | ||||
| 459 | )) | ||||
| 460 | ); | ||||
| 461 | |||||
| 462 | 1 | 49µs | 3 | 2.36ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 2.17ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 111µs making 1 call to Class::MOP::Attribute::new
# spent 83µs making 1 call to Class::MOP::Mixin::meta |
| 463 | Class::MOP::Attribute->new('builder' => ( | ||||
| 464 | reader => { 'builder' => \&Class::MOP::Mixin::AttributeCore::builder }, | ||||
| 465 | predicate => { 'has_builder' => \&Class::MOP::Mixin::AttributeCore::has_builder }, | ||||
| 466 | )) | ||||
| 467 | ); | ||||
| 468 | |||||
| 469 | 1 | 49µs | 3 | 2.32ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 2.12ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 113µs making 1 call to Class::MOP::Attribute::new
# spent 84µs making 1 call to Class::MOP::Mixin::meta |
| 470 | Class::MOP::Attribute->new('init_arg' => ( | ||||
| 471 | reader => { 'init_arg' => \&Class::MOP::Mixin::AttributeCore::init_arg }, | ||||
| 472 | predicate => { 'has_init_arg' => \&Class::MOP::Mixin::AttributeCore::has_init_arg }, | ||||
| 473 | )) | ||||
| 474 | ); | ||||
| 475 | |||||
| 476 | 1 | 74µs | 3 | 1.61ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 1.42ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 113µs making 1 call to Class::MOP::Attribute::new
# spent 81µs making 1 call to Class::MOP::Mixin::meta |
| 477 | Class::MOP::Attribute->new('default' => ( | ||||
| 478 | # default has a custom 'reader' method ... | ||||
| 479 | predicate => { 'has_default' => \&Class::MOP::Mixin::AttributeCore::has_default }, | ||||
| 480 | )) | ||||
| 481 | ); | ||||
| 482 | |||||
| 483 | 1 | 50µs | 3 | 3.07ms | Class::MOP::Mixin::AttributeCore->meta->add_attribute( # spent 2.88ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 110µs making 1 call to Class::MOP::Attribute::new
# spent 79µs making 1 call to Class::MOP::Mixin::meta |
| 484 | Class::MOP::Attribute->new('insertion_order' => ( | ||||
| 485 | reader => { 'insertion_order' => \&Class::MOP::Mixin::AttributeCore::insertion_order }, | ||||
| 486 | writer => { '_set_insertion_order' => \&Class::MOP::Mixin::AttributeCore::_set_insertion_order }, | ||||
| 487 | predicate => { 'has_insertion_order' => \&Class::MOP::Mixin::AttributeCore::has_insertion_order }, | ||||
| 488 | )) | ||||
| 489 | ); | ||||
| 490 | |||||
| 491 | ## -------------------------------------------------------- | ||||
| 492 | ## Class::MOP::Attribute | ||||
| 493 | 1 | 59µs | 3 | 4.72ms | Class::MOP::Attribute->meta->add_attribute( # spent 3.13ms making 1 call to Class::MOP::Object::meta
# spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 111µs making 1 call to Class::MOP::Attribute::new |
| 494 | Class::MOP::Attribute->new('associated_class' => ( | ||||
| 495 | reader => { | ||||
| 496 | # NOTE: we need to do this in order | ||||
| 497 | # for the instance meta-object to | ||||
| 498 | # not fall into meta-circular death | ||||
| 499 | # | ||||
| 500 | # we just alias the original method | ||||
| 501 | # rather than re-produce it here | ||||
| 502 | 'associated_class' => \&Class::MOP::Attribute::associated_class | ||||
| 503 | } | ||||
| 504 | )) | ||||
| 505 | ); | ||||
| 506 | |||||
| 507 | Class::MOP::Attribute->meta->add_attribute( | ||||
| 508 | Class::MOP::Attribute->new('associated_methods' => ( | ||||
| 509 | reader => { 'associated_methods' => \&Class::MOP::Attribute::associated_methods }, | ||||
| 510 | 72 | 1.15ms | # spent 794µs within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:510] which was called 72 times, avg 11µs/call:
# 46 times (506µs+0s) by Moose::Meta::Attribute::_new at line 74 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 11µs/call
# 25 times (276µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 11µs/call
# once (12µs+0s) by MooseX::Role::Parameterized::Meta::Parameter::_new at line 143 of generated method (unknown origin) | ||
| 511 | 1 | 56µs | 3 | 1.78ms | )) # spent 1.53ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 152µs making 1 call to Class::MOP::Attribute::new
# spent 100µs making 1 call to Class::MOP::Object::meta |
| 512 | ); | ||||
| 513 | |||||
| 514 | Class::MOP::Attribute->meta->add_method('clone' => sub { | ||||
| 515 | 1 | 4µs | my $self = shift; | ||
| 516 | 1 | 45µs | 2 | 1.38ms | $self->meta->clone_object($self, @_); # spent 1.30ms making 1 call to Class::MOP::Class::clone_object
# spent 81µs making 1 call to Class::MOP::Object::meta |
| 517 | 1 | 34µs | 2 | 455µs | }); # spent 372µs making 1 call to Class::MOP::Mixin::HasMethods::add_method
# spent 84µs making 1 call to Class::MOP::Object::meta |
| 518 | |||||
| 519 | ## -------------------------------------------------------- | ||||
| 520 | ## Class::MOP::Method | ||||
| 521 | 1 | 52µs | 3 | 3.62ms | Class::MOP::Method->meta->add_attribute( # spent 1.99ms making 1 call to Class::MOP::Object::meta
# spent 1.51ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 128µs making 1 call to Class::MOP::Attribute::new |
| 522 | Class::MOP::Attribute->new('body' => ( | ||||
| 523 | reader => { 'body' => \&Class::MOP::Method::body }, | ||||
| 524 | )) | ||||
| 525 | ); | ||||
| 526 | |||||
| 527 | 1 | 43µs | 3 | 1.62ms | Class::MOP::Method->meta->add_attribute( # spent 1.43ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 111µs making 1 call to Class::MOP::Attribute::new
# spent 85µs making 1 call to Class::MOP::Object::meta |
| 528 | Class::MOP::Attribute->new('associated_metaclass' => ( | ||||
| 529 | reader => { 'associated_metaclass' => \&Class::MOP::Method::associated_metaclass }, | ||||
| 530 | )) | ||||
| 531 | ); | ||||
| 532 | |||||
| 533 | 1 | 45µs | 3 | 1.70ms | Class::MOP::Method->meta->add_attribute( # spent 1.50ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 110µs making 1 call to Class::MOP::Attribute::new
# spent 85µs making 1 call to Class::MOP::Object::meta |
| 534 | Class::MOP::Attribute->new('package_name' => ( | ||||
| 535 | reader => { 'package_name' => \&Class::MOP::Method::package_name }, | ||||
| 536 | )) | ||||
| 537 | ); | ||||
| 538 | |||||
| 539 | 1 | 43µs | 3 | 1.74ms | Class::MOP::Method->meta->add_attribute( # spent 1.54ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 109µs making 1 call to Class::MOP::Attribute::new
# spent 84µs making 1 call to Class::MOP::Object::meta |
| 540 | Class::MOP::Attribute->new('name' => ( | ||||
| 541 | reader => { 'name' => \&Class::MOP::Method::name }, | ||||
| 542 | )) | ||||
| 543 | ); | ||||
| 544 | |||||
| 545 | 1 | 48µs | 3 | 2.36ms | Class::MOP::Method->meta->add_attribute( # spent 2.17ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 112µs making 1 call to Class::MOP::Attribute::new
# spent 85µs making 1 call to Class::MOP::Object::meta |
| 546 | Class::MOP::Attribute->new('original_method' => ( | ||||
| 547 | reader => { 'original_method' => \&Class::MOP::Method::original_method }, | ||||
| 548 | writer => { '_set_original_method' => \&Class::MOP::Method::_set_original_method }, | ||||
| 549 | )) | ||||
| 550 | ); | ||||
| 551 | |||||
| 552 | ## -------------------------------------------------------- | ||||
| 553 | ## Class::MOP::Method::Wrapped | ||||
| 554 | |||||
| 555 | # NOTE: | ||||
| 556 | # the way this item is initialized, this | ||||
| 557 | # really does not follow the standard | ||||
| 558 | # practices of attributes, but we put | ||||
| 559 | # it here for completeness | ||||
| 560 | 1 | 53µs | 3 | 2.86ms | Class::MOP::Method::Wrapped->meta->add_attribute( # spent 1.97ms making 1 call to Class::MOP::Object::meta
# spent 783µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 110µs making 1 call to Class::MOP::Attribute::new |
| 561 | Class::MOP::Attribute->new('modifier_table') | ||||
| 562 | ); | ||||
| 563 | |||||
| 564 | ## -------------------------------------------------------- | ||||
| 565 | ## Class::MOP::Method::Generated | ||||
| 566 | |||||
| 567 | 1 | 62µs | 3 | 3.60ms | Class::MOP::Method::Generated->meta->add_attribute( # spent 2.01ms making 1 call to Class::MOP::Object::meta
# spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 116µs making 1 call to Class::MOP::Attribute::new |
| 568 | Class::MOP::Attribute->new('is_inline' => ( | ||||
| 569 | reader => { 'is_inline' => \&Class::MOP::Method::Generated::is_inline }, | ||||
| 570 | default => 0, | ||||
| 571 | )) | ||||
| 572 | ); | ||||
| 573 | |||||
| 574 | 1 | 44µs | 3 | 1.69ms | Class::MOP::Method::Generated->meta->add_attribute( # spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 112µs making 1 call to Class::MOP::Attribute::new
# spent 94µs making 1 call to Class::MOP::Object::meta |
| 575 | Class::MOP::Attribute->new('definition_context' => ( | ||||
| 576 | reader => { 'definition_context' => \&Class::MOP::Method::Generated::definition_context }, | ||||
| 577 | )) | ||||
| 578 | ); | ||||
| 579 | |||||
| 580 | |||||
| 581 | ## -------------------------------------------------------- | ||||
| 582 | ## Class::MOP::Method::Inlined | ||||
| 583 | |||||
| 584 | 1 | 63µs | 3 | 3.73ms | Class::MOP::Method::Inlined->meta->add_attribute( # spent 2.11ms making 1 call to Class::MOP::Object::meta
# spent 1.51ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 111µs making 1 call to Class::MOP::Attribute::new |
| 585 | Class::MOP::Attribute->new('_expected_method_class' => ( | ||||
| 586 | reader => { '_expected_method_class' => \&Class::MOP::Method::Inlined::_expected_method_class }, | ||||
| 587 | )) | ||||
| 588 | ); | ||||
| 589 | |||||
| 590 | ## -------------------------------------------------------- | ||||
| 591 | ## Class::MOP::Method::Accessor | ||||
| 592 | |||||
| 593 | 1 | 64µs | 3 | 3.56ms | Class::MOP::Method::Accessor->meta->add_attribute( # spent 1.98ms making 1 call to Class::MOP::Object::meta
# spent 1.46ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 124µs making 1 call to Class::MOP::Attribute::new |
| 594 | Class::MOP::Attribute->new('attribute' => ( | ||||
| 595 | reader => { | ||||
| 596 | 'associated_attribute' => \&Class::MOP::Method::Accessor::associated_attribute | ||||
| 597 | }, | ||||
| 598 | )) | ||||
| 599 | ); | ||||
| 600 | |||||
| 601 | 1 | 44µs | 3 | 1.68ms | Class::MOP::Method::Accessor->meta->add_attribute( # spent 1.49ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 109µs making 1 call to Class::MOP::Attribute::new
# spent 83µs making 1 call to Class::MOP::Object::meta |
| 602 | Class::MOP::Attribute->new('accessor_type' => ( | ||||
| 603 | reader => { 'accessor_type' => \&Class::MOP::Method::Accessor::accessor_type }, | ||||
| 604 | )) | ||||
| 605 | ); | ||||
| 606 | |||||
| 607 | ## -------------------------------------------------------- | ||||
| 608 | ## Class::MOP::Method::Constructor | ||||
| 609 | |||||
| 610 | Class::MOP::Method::Constructor->meta->add_attribute( | ||||
| 611 | Class::MOP::Attribute->new('options' => ( | ||||
| 612 | reader => { | ||||
| 613 | 'options' => \&Class::MOP::Method::Constructor::options | ||||
| 614 | }, | ||||
| 615 | default => sub { +{} } | ||||
| 616 | 1 | 75µs | 3 | 3.65ms | )) # spent 1.96ms making 1 call to Class::MOP::Object::meta
# spent 1.54ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 154µs making 1 call to Class::MOP::Attribute::new |
| 617 | ); | ||||
| 618 | |||||
| 619 | 1 | 44µs | 3 | 1.64ms | Class::MOP::Method::Constructor->meta->add_attribute( # spent 1.45ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 111µs making 1 call to Class::MOP::Attribute::new
# spent 84µs making 1 call to Class::MOP::Object::meta |
| 620 | Class::MOP::Attribute->new('associated_metaclass' => ( | ||||
| 621 | init_arg => "metaclass", # FIXME alias and rename | ||||
| 622 | reader => { | ||||
| 623 | 'associated_metaclass' => \&Class::MOP::Method::Constructor::associated_metaclass | ||||
| 624 | }, | ||||
| 625 | )) | ||||
| 626 | ); | ||||
| 627 | |||||
| 628 | ## -------------------------------------------------------- | ||||
| 629 | ## Class::MOP::Instance | ||||
| 630 | |||||
| 631 | # NOTE: | ||||
| 632 | # these don't yet do much of anything, but are just | ||||
| 633 | # included for completeness | ||||
| 634 | |||||
| 635 | 1 | 57µs | 3 | 3.65ms | Class::MOP::Instance->meta->add_attribute( # spent 1.96ms making 1 call to Class::MOP::Object::meta
# spent 1.51ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 179µs making 1 call to Class::MOP::Attribute::new |
| 636 | Class::MOP::Attribute->new('associated_metaclass', | ||||
| 637 | reader => { associated_metaclass => \&Class::MOP::Instance::associated_metaclass }, | ||||
| 638 | ), | ||||
| 639 | ); | ||||
| 640 | |||||
| 641 | 1 | 44µs | 3 | 1.73ms | Class::MOP::Instance->meta->add_attribute( # spent 1.53ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 109µs making 1 call to Class::MOP::Attribute::new
# spent 86µs making 1 call to Class::MOP::Object::meta |
| 642 | Class::MOP::Attribute->new('_class_name', | ||||
| 643 | init_arg => undef, | ||||
| 644 | reader => { _class_name => \&Class::MOP::Instance::_class_name }, | ||||
| 645 | #lazy => 1, # not yet supported by Class::MOP but out our version does it anyway | ||||
| 646 | #default => sub { $_[0]->associated_metaclass->name }, | ||||
| 647 | ), | ||||
| 648 | ); | ||||
| 649 | |||||
| 650 | 1 | 45µs | 3 | 1.67ms | Class::MOP::Instance->meta->add_attribute( # spent 1.47ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 109µs making 1 call to Class::MOP::Attribute::new
# spent 83µs making 1 call to Class::MOP::Object::meta |
| 651 | Class::MOP::Attribute->new('attributes', | ||||
| 652 | reader => { attributes => \&Class::MOP::Instance::get_all_attributes }, | ||||
| 653 | ), | ||||
| 654 | ); | ||||
| 655 | |||||
| 656 | 1 | 63µs | 3 | 1.75ms | Class::MOP::Instance->meta->add_attribute( # spent 1.55ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 111µs making 1 call to Class::MOP::Attribute::new
# spent 86µs making 1 call to Class::MOP::Object::meta |
| 657 | Class::MOP::Attribute->new('slots', | ||||
| 658 | reader => { slots => \&Class::MOP::Instance::slots }, | ||||
| 659 | ), | ||||
| 660 | ); | ||||
| 661 | |||||
| 662 | 1 | 72µs | 3 | 1.73ms | Class::MOP::Instance->meta->add_attribute( # spent 1.52ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute
# spent 119µs making 1 call to Class::MOP::Attribute::new
# spent 88µs making 1 call to Class::MOP::Object::meta |
| 663 | Class::MOP::Attribute->new('slot_hash', | ||||
| 664 | reader => { slot_hash => \&Class::MOP::Instance::slot_hash }, | ||||
| 665 | ), | ||||
| 666 | ); | ||||
| 667 | |||||
| 668 | ## -------------------------------------------------------- | ||||
| 669 | ## Class::MOP::Object | ||||
| 670 | |||||
| 671 | # need to replace the meta method there with a real meta method object | ||||
| 672 | 1 | 56µs | 2 | 6.90ms | Class::MOP::Object->meta->_add_meta_method('meta'); # spent 6.81ms making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method
# spent 83µs making 1 call to Class::MOP::Object::meta |
| 673 | |||||
| 674 | ## -------------------------------------------------------- | ||||
| 675 | ## Class::MOP::Mixin | ||||
| 676 | |||||
| 677 | # need to replace the meta method there with a real meta method object | ||||
| 678 | 1 | 49µs | 2 | 3.41ms | Class::MOP::Mixin->meta->_add_meta_method('meta'); # spent 3.33ms making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method
# spent 83µs making 1 call to Class::MOP::Mixin::meta |
| 679 | |||||
| 680 | 1 | 364µs | require Class::MOP::Deprecated unless our $no_deprecated; | ||
| 681 | |||||
| 682 | # we need the meta instance of the meta instance to be created now, in order | ||||
| 683 | # for the constructor to be able to use it | ||||
| 684 | 1 | 37µs | 2 | 890µs | Class::MOP::Instance->meta->get_meta_instance; # spent 783µs making 1 call to Class::MOP::Class::get_meta_instance
# spent 107µs making 1 call to Class::MOP::Object::meta |
| 685 | |||||
| 686 | # pretend the add_method never happenned. it hasn't yet affected anything | ||||
| 687 | 1 | 14µs | 1 | 75µs | undef Class::MOP::Instance->meta->{_package_cache_flag}; # spent 75µs making 1 call to Class::MOP::Object::meta |
| 688 | |||||
| 689 | ## -------------------------------------------------------- | ||||
| 690 | ## Now close all the Class::MOP::* classes | ||||
| 691 | |||||
| 692 | # NOTE: we don't need to inline the the accessors this only lengthens | ||||
| 693 | # the compile time of the MOP, and gives us no actual benefits. | ||||
| 694 | |||||
| 695 | $_->meta->make_immutable( | ||||
| 696 | inline_constructor => 0, | ||||
| 697 | constructor_name => "_new", | ||||
| 698 | inline_accessors => 0, | ||||
| 699 | 1 | 400µs | 26 | 108ms | ) for qw/ # spent 108ms making 13 calls to Class::MOP::Class::make_immutable, avg 8.27ms/call
# spent 948µs making 13 calls to Class::MOP::Object::meta, avg 73µs/call |
| 700 | Class::MOP::Package | ||||
| 701 | Class::MOP::Module | ||||
| 702 | Class::MOP::Class | ||||
| 703 | |||||
| 704 | Class::MOP::Attribute | ||||
| 705 | Class::MOP::Method | ||||
| 706 | Class::MOP::Instance | ||||
| 707 | |||||
| 708 | Class::MOP::Object | ||||
| 709 | |||||
| 710 | Class::MOP::Method::Generated | ||||
| 711 | Class::MOP::Method::Inlined | ||||
| 712 | |||||
| 713 | Class::MOP::Method::Accessor | ||||
| 714 | Class::MOP::Method::Constructor | ||||
| 715 | Class::MOP::Method::Wrapped | ||||
| 716 | |||||
| 717 | Class::MOP::Method::Meta | ||||
| 718 | 1 | 2µs | /; | ||
| 719 | |||||
| 720 | $_->meta->make_immutable( | ||||
| 721 | inline_constructor => 0, | ||||
| 722 | constructor_name => undef, | ||||
| 723 | inline_accessors => 0, | ||||
| 724 | 1 | 131µs | 8 | 3.16ms | ) for qw/ # spent 2.85ms making 4 calls to Class::MOP::Class::make_immutable, avg 713µs/call
# spent 302µs making 4 calls to Class::MOP::Mixin::meta, avg 76µs/call |
| 725 | Class::MOP::Mixin | ||||
| 726 | Class::MOP::Mixin::AttributeCore | ||||
| 727 | Class::MOP::Mixin::HasAttributes | ||||
| 728 | Class::MOP::Mixin::HasMethods | ||||
| 729 | 1 | 2µs | /; | ||
| 730 | |||||
| 731 | 1 | 400µs | 1; | ||
| 732 | |||||
| 733 | __END__ | ||||
# spent 15.6ms within Class::MOP::CORE:match which was called 790 times, avg 20µs/call:
# 785 times (15.6ms+0s) by Class::MOP::_is_valid_class_name at line 152, avg 20µs/call
# 5 times (40µs+0s) by Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:125] at line 120, avg 8µs/call | |||||
# spent 238µs within Class::MOP::CORE:regcomp which was called 5 times, avg 48µs/call:
# 5 times (238µs+0s) by Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:125] at line 120, avg 48µs/call | |||||
# spent 487µs within Class::MOP::CORE:subst which was called 37 times, avg 13µs/call:
# 37 times (487µs+0s) by Class::MOP::_class_to_pmfile at line 76, avg 13µs/call | |||||
# spent 1.58ms within Class::MOP::__ANON__ which was called 295 times, avg 5µs/call:
# 295 times (1.58ms+0s) by Class::MOP::Class::class_precedence_list at line 905 of Class/MOP/Class.pm, avg 5µs/call | |||||
# spent 40.6ms within Class::MOP::get_code_info which was called 4938 times, avg 8µs/call:
# 2900 times (26.2ms+0s) by Class::MOP::Mixin::HasMethods::add_method at line 84 of Class/MOP/Mixin/HasMethods.pm, avg 9µs/call
# 1989 times (13.9ms+0s) by Class::MOP::Mixin::HasMethods::_code_is_mine at line 100 of Class/MOP/Mixin/HasMethods.pm, avg 7µs/call
# 45 times (491µs+0s) by Moose::Meta::Role::Application::ToClass::apply_override_method_modifiers at line 206 of Moose/Meta/Role/Application/ToClass.pm, avg 11µs/call
# 4 times (35µs+0s) by Moose::Exporter::_make_sub_exporter_params at line 243 of Moose/Exporter.pm, avg 9µs/call | |||||
# spent 15.6ms within Class::MOP::is_class_loaded which was called 817 times, avg 19µs/call:
# 649 times (12.3ms+0s) by Class::MOP::load_first_existing_class at line 108, avg 19µs/call
# 93 times (1.71ms+0s) by Class::MOP::Class::_immutable_metaclass at line 1237 of Class/MOP/Class.pm, avg 18µs/call
# 65 times (1.55ms+0s) by Class::MOP::load_first_existing_class at line 100, avg 24µs/call
# 8 times (73µs+0s) by Class::MOP::load_first_existing_class at line 101, avg 9µs/call
# 2 times (37µs+0s) by Moose::Util::TypeConstraints::OptimizedConstraints::ClassName at line 55 of Moose/Util/TypeConstraints/OptimizedConstraints.pm, avg 18µs/call |