← Index
NYTProf Performance Profile   « line view »
For fastest.pl
  Run on Fri Jan 31 20:48:16 2014
Reported on Fri Jan 31 20:49:40 2014

Filename/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP.pm
StatementsExecuted 2167 statements in 20.7ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1118.60ms25.1msClass::MOP::::BEGIN@26Class::MOP::BEGIN@26
1113.09ms3.45msClass::MOP::::BEGIN@27Class::MOP::BEGIN@27
1112.19ms6.30msClass::MOP::::BEGIN@25Class::MOP::BEGIN@25
1111.80ms1.97msClass::MOP::::BEGIN@15Class::MOP::BEGIN@15
1496741.79ms1.79msClass::MOP::::get_metaclass_by_nameClass::MOP::get_metaclass_by_name
12312023835µs835µsClass::MOP::::_definition_contextClass::MOP::_definition_context
111766µs981µsClass::MOP::::BEGIN@24Class::MOP::BEGIN@24
111705µs1.24msClass::MOP::::BEGIN@23Class::MOP::BEGIN@23
49332615µs615µsClass::MOP::::get_code_infoClass::MOP::get_code_info (xsub)
6321207µs251µsClass::MOP::::metaclass_is_weakClass::MOP::metaclass_is_weak
7333149µs149µsClass::MOP::::store_metaclass_by_nameClass::MOP::store_metaclass_by_name
196592µs102µsClass::MOP::::class_ofClass::MOP::class_of
11115µs30µsClass::MOP::::BEGIN@10Class::MOP::BEGIN@10
11112µs22µsClass::MOP::::BEGIN@18Class::MOP::BEGIN@18
11111µs11µsClass::MOP::::BEGIN@13Class::MOP::BEGIN@13
11110µs10µsClass::MOP::::BEGIN@3Class::MOP::BEGIN@3
11110µs41µsClass::MOP::::BEGIN@17Class::MOP::BEGIN@17
1119µs44µsClass::MOP::::BEGIN@21Class::MOP::BEGIN@21
1119µs14µsClass::MOP::::BEGIN@11Class::MOP::BEGIN@11
1119µs13µsClass::MOP::::BEGIN@20Class::MOP::BEGIN@20
1118µs52µsClass::MOP::::BEGIN@19Class::MOP::BEGIN@19
1118µs8µsClass::MOP::::BEGIN@28Class::MOP::BEGIN@28
1117µs7µsClass::MOP::::BEGIN@30Class::MOP::BEGIN@30
2224µs4µsClass::MOP::::__ANON__[:478]Class::MOP::__ANON__[:478]
2114µs4µsClass::MOP::::__ANON__[:249]Class::MOP::__ANON__[:249]
2114µs4µsClass::MOP::::__ANON__[:177]Class::MOP::__ANON__[:177]
2114µs4µsClass::MOP::::__ANON__[:222]Class::MOP::__ANON__[:222]
2113µs3µsClass::MOP::::__ANON__[:132]Class::MOP::__ANON__[:132]
2113µs3µsClass::MOP::::__ANON__[:286]Class::MOP::__ANON__[:286]
2113µs3µsClass::MOP::::__ANON__[:269]Class::MOP::__ANON__[:269]
0000s0sClass::MOP::::__ANON__[:486]Class::MOP::__ANON__[:486]
0000s0sClass::MOP::::__ANON__[:596]Class::MOP::__ANON__[:596]
0000s0sClass::MOP::::does_metaclass_existClass::MOP::does_metaclass_exist
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
1
2package Class::MOP;
3
# spent 10µs within Class::MOP::BEGIN@3 which was called: # once (10µs+0s) by Moose::Exporter::BEGIN@13 at line 5
BEGIN {
416µs $Class::MOP::AUTHORITY = 'cpan:STEVAN';
5138µs110µs}
# spent 10µs making 1 call to Class::MOP::BEGIN@3
6{
722µs $Class::MOP::VERSION = '2.1005';
8}
9
10231µs246µs
# spent 30µs (15+15) within Class::MOP::BEGIN@10 which was called: # once (15µs+15µs) by Moose::Exporter::BEGIN@13 at line 10
use strict;
# spent 30µs making 1 call to Class::MOP::BEGIN@10 # spent 15µs making 1 call to strict::import
11229µs218µs
# spent 14µs (9+5) within Class::MOP::BEGIN@11 which was called: # once (9µs+5µs) by Moose::Exporter::BEGIN@13 at line 11
use warnings;
# spent 14µs making 1 call to Class::MOP::BEGIN@11 # spent 5µs making 1 call to warnings::import
12
13259µs111µs
# spent 11µs within Class::MOP::BEGIN@13 which was called: # once (11µs+0s) by Moose::Exporter::BEGIN@13 at line 13
use 5.008;
# spent 11µs making 1 call to Class::MOP::BEGIN@13
14
152134µs11.97ms
# spent 1.97ms (1.80+174µs) within Class::MOP::BEGIN@15 which was called: # once (1.80ms+174µs) by Moose::Exporter::BEGIN@13 at line 15
use MRO::Compat;
# spent 1.97ms making 1 call to Class::MOP::BEGIN@15
16
17234µs272µs
# spent 41µs (10+31) within Class::MOP::BEGIN@17 which was called: # once (10µs+31µs) by Moose::Exporter::BEGIN@13 at line 17
use Carp 'confess';
# spent 41µs making 1 call to Class::MOP::BEGIN@17 # spent 31µs making 1 call to Exporter::import
18353µs232µs
# spent 22µs (12+10) within Class::MOP::BEGIN@18 which was called: # once (12µs+10µs) by Moose::Exporter::BEGIN@13 at line 18
use Class::Load 0.07 ();
# spent 22µs making 1 call to Class::MOP::BEGIN@18 # spent 10µs making 1 call to UNIVERSAL::VERSION
19233µs295µs
# spent 52µs (8+44) within Class::MOP::BEGIN@19 which was called: # once (8µs+44µs) by Moose::Exporter::BEGIN@13 at line 19
use Scalar::Util 'weaken', 'isweak', 'reftype', 'blessed';
# spent 52µs making 1 call to Class::MOP::BEGIN@19 # spent 44µs making 1 call to Exporter::import
20236µs217µs
# spent 13µs (9+4) within Class::MOP::BEGIN@20 which was called: # once (9µs+4µs) by Moose::Exporter::BEGIN@13 at line 20
use Data::OptList;
# spent 13µs making 1 call to Class::MOP::BEGIN@20 # spent 4µs making 1 call to Sub::Install::__ANON__[Sub/Install.pm:171]
21231µs278µs
# spent 44µs (9+34) within Class::MOP::BEGIN@21 which was called: # once (9µs+34µs) by Moose::Exporter::BEGIN@13 at line 21
use Try::Tiny;
# spent 44µs making 1 call to Class::MOP::BEGIN@21 # spent 34µs making 1 call to Exporter::import
22
232131µs11.24ms
# spent 1.24ms (705µs+537µs) within Class::MOP::BEGIN@23 which was called: # once (705µs+537µs) by Moose::Exporter::BEGIN@13 at line 23
use Class::MOP::Mixin::AttributeCore;
# spent 1.24ms making 1 call to Class::MOP::BEGIN@23
242129µs1981µs
# spent 981µs (766+216) within Class::MOP::BEGIN@24 which was called: # once (766µs+216µs) by Moose::Exporter::BEGIN@13 at line 24
use Class::MOP::Mixin::HasAttributes;
# spent 981µs making 1 call to Class::MOP::BEGIN@24
252193µs16.30ms
# spent 6.30ms (2.19+4.11) within Class::MOP::BEGIN@25 which was called: # once (2.19ms+4.11ms) by Moose::Exporter::BEGIN@13 at line 25
use Class::MOP::Mixin::HasMethods;
# spent 6.30ms making 1 call to Class::MOP::BEGIN@25
262133µs125.1ms
# spent 25.1ms (8.60+16.5) within Class::MOP::BEGIN@26 which was called: # once (8.60ms+16.5ms) by Moose::Exporter::BEGIN@13 at line 26
use Class::MOP::Class;
# spent 25.1ms making 1 call to Class::MOP::BEGIN@26
272139µs13.45ms
# spent 3.45ms (3.09+355µs) within Class::MOP::BEGIN@27 which was called: # once (3.09ms+355µs) by Moose::Exporter::BEGIN@13 at line 27
use Class::MOP::Attribute;
# spent 3.45ms making 1 call to Class::MOP::BEGIN@27
28288µs18µs
# spent 8µs within Class::MOP::BEGIN@28 which was called: # once (8µs+0s) by Moose::Exporter::BEGIN@13 at line 28
use Class::MOP::Method;
# spent 8µs making 1 call to Class::MOP::BEGIN@28
29
30
# spent 7µs within Class::MOP::BEGIN@30 which was called: # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 37
BEGIN {
31 *IS_RUNNING_ON_5_10 = ($] < 5.009_005)
32 ? sub () { 0 }
3312µs : sub () { 1 };
34
35 # this is either part of core or set up appropriately by MRO::Compat
3616µs *check_package_cache_flag = \&mro::get_pkg_gen;
3712.81ms17µs}
# spent 7µs making 1 call to Class::MOP::BEGIN@30
38
39XSLoader::load(
40 'Moose',
411119µs180µs $Class::MOP::{VERSION} ? ${ $Class::MOP::{VERSION} } : ()
# spent 80µs making 1 call to XSLoader::load
42);
43
44{
45 # Metaclasses are singletons, so we cache them here.
46 # there is no need to worry about destruction though
47 # because they should die only when the program dies.
48 # After all, do package definitions even get reaped?
49 # Anonymous classes manage their own destruction.
5021µs my %METAS;
51
52 sub get_all_metaclasses { %METAS }
53 sub get_all_metaclass_instances { values %METAS }
54 sub get_all_metaclass_names { keys %METAS }
55149613.7ms
# spent 1.79ms within Class::MOP::get_metaclass_by_name which was called 1496 times, avg 1µs/call: # 1415 times (1.71ms+0s) by Class::MOP::Class::initialize at line 47 of Class/MOP/Class.pm, avg 1µs/call # 68 times (62µs+0s) by Class::MOP::Class::_construct_class_instance at line 88 of Class/MOP/Class.pm, avg 918ns/call # 7 times (11µs+0s) by Class::MOP::Class::_single_metaclass_is_compatible at line 282 of Class/MOP/Class.pm, avg 2µs/call # 2 times (3µs+0s) by Class::MOP::Package::initialize at line 32 of Class/MOP/Package.pm, avg 2µs/call # 2 times (3µs+0s) by Moose::Meta::Class::initialize at line 79 of Moose/Meta/Class.pm, avg 1µs/call # once (2µs+0s) by Moose::init_meta at line 170 of Moose.pm # once (2µs+0s) by Class::MOP::Class::_class_metaclass_is_compatible at line 252 of Class/MOP/Class.pm
sub get_metaclass_by_name { $METAS{$_[0]} }
5673210µs
# spent 149µs within Class::MOP::store_metaclass_by_name which was called 73 times, avg 2µs/call: # 68 times (139µs+0s) by Class::MOP::Class::_construct_class_instance at line 113 of Class/MOP/Class.pm, avg 2µs/call # 3 times (7µs+0s) by Moo::HandleMoose::inject_fake_metaclass_for at line 37 of Moo/HandleMoose.pm, avg 2µs/call # 2 times (3µs+0s) by Class::MOP::Package::initialize at line 39 of Class/MOP/Package.pm, avg 1µs/call
sub store_metaclass_by_name { $METAS{$_[0]} = $_[1] }
57 sub weaken_metaclass { weaken($METAS{$_[0]}) }
5863292µs6344µs
# spent 251µs (207+44) within Class::MOP::metaclass_is_weak which was called 63 times, avg 4µs/call: # 32 times (106µs+22µs) by Class::MOP::Class::_construct_instance at line 527 of Class/MOP/Class.pm, avg 4µs/call # 31 times (101µs+22µs) by Class::MOP::Class::_inline_preserve_weak_metaclasses at line 691 of Class/MOP/Class.pm, avg 4µs/call
sub metaclass_is_weak { isweak($METAS{$_[0]}) }
# spent 44µs making 63 calls to Scalar::Util::isweak, avg 702ns/call
59 sub does_metaclass_exist { exists $METAS{$_[0]} && defined $METAS{$_[0]} }
60 sub remove_metaclass_by_name { delete $METAS{$_[0]}; return }
61
62 # This handles instances as well as class names
63
# spent 102µs (92+10) within Class::MOP::class_of which was called 19 times, avg 5µs/call: # 9 times (35µs+3µs) by Moose::Meta::Attribute::BEGIN@24 at line 712 of Moose/Util/TypeConstraints.pm, avg 4µs/call # 4 times (20µs+2µs) by Moose::Exporter::__ANON__[/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Moose/Exporter.pm:42] at line 42 of Moose/Exporter.pm, avg 6µs/call # 3 times (18µs+2µs) by Class::MOP::Class::_superclasses_updated at line 970 of Class/MOP/Class.pm, avg 7µs/call # once (7µs+800ns) by Moose::Exporter::__ANON__[/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Moose/Exporter.pm:252] at line 252 of Moose/Exporter.pm # once (6µs+800ns) by Moose::Meta::Class::superclasses at line 565 of Moose/Meta/Class.pm # once (6µs+700ns) by Class::MOP::Object::_new at line 24 of Class/MOP/Object.pm
sub class_of {
64194µs return unless defined $_[0];
651960µs1910µs my $class = blessed($_[0]) || $_[0];
# spent 10µs making 19 calls to Scalar::Util::blessed, avg 532ns/call
661964µs return $METAS{$class};
67 }
68
69 # NOTE:
70 # We only cache metaclasses, meaning instances of
71 # Class::MOP::Class. We do not cache instance of
72 # Class::MOP::Package or Class::MOP::Module. Mostly
73 # because I don't yet see a good reason to do so.
74}
75
76sub load_class {
77 goto &Class::Load::load_class;
78}
79
80sub load_first_existing_class {
81 goto &Class::Load::load_first_existing_class;
82}
83
84sub is_class_loaded {
85 goto &Class::Load::is_class_loaded;
86}
87
88
# spent 835µs within Class::MOP::_definition_context which was called 123 times, avg 7µs/call: # 3 times (20µs+0s) by Moose::BEGIN@35 at line 309 of Moose/Meta/Role.pm, avg 7µs/call # 2 times (14µs+0s) by Moose::BEGIN@35 at line 92 of Moose/Meta/Role.pm, avg 7µs/call # once (12µs+0s) by Moose::Exporter::BEGIN@13 at line 133 # once (11µs+0s) by Moose::BEGIN@28 at line 78 of Moose/Meta/TypeConstraint.pm # once (8µs+0s) by Moose::BEGIN@27 at line 38 of Moose/Meta/Class.pm # once (8µs+0s) by Moose::Util::TypeConstraints::BEGIN@38 at line 18 of Moose/Meta/TypeConstraint/Enum.pm # once (8µs+0s) by Moose::Util::TypeConstraints::BEGIN@39 at line 22 of Moose/Meta/TypeConstraint/DuckType.pm # once (8µs+0s) by Moose::BEGIN@41 at line 21 of Moose/Meta/Role/Application/ToInstance.pm # once (8µs+0s) by Moose::Util::TypeConstraints::BEGIN@33 at line 24 of Moose/Meta/TypeConstraint/Union.pm # once (8µs+0s) by Moose::Meta::TypeCoercion::BEGIN@14 at line 31 of Moose/Meta/Attribute.pm # once (7µs+0s) by Moose::Util::TypeConstraints::BEGIN@37 at line 19 of Moose/Meta/TypeConstraint/Role.pm # once (7µs+0s) by Moose::Util::TypeConstraints::BEGIN@36 at line 19 of Moose/Meta/TypeConstraint/Class.pm # once (7µs+0s) by Moose::Meta::Role::BEGIN@19 at line 18 of Moose/Meta/Role/Attribute.pm # once (7µs+0s) by Moose::Util::TypeConstraints::BEGIN@34 at line 19 of Moose/Meta/TypeConstraint/Parameterized.pm # once (7µs+0s) by Moose::BEGIN@29 at line 20 of Moose/Meta/TypeCoercion.pm # once (7µs+0s) by Moose::BEGIN@36 at line 24 of Moose/Meta/Role/Composite.pm # once (7µs+0s) by Moose::Meta::TypeConstraint::Parameterized::BEGIN@15 at line 19 of Moose/Meta/TypeConstraint/Parameterizable.pm # once (7µs+0s) by Moose::BEGIN@28 at line 28 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by base::import at line 14 of Moose/Meta/Mixin/AttributeCore.pm # once (7µs+0s) by Moose::Meta::Role::BEGIN@21 at line 22 of Moose/Meta/Role/Method/Required.pm # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 401 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 504 # once (7µs+0s) by Moose::Util::TypeConstraints::BEGIN@42 at line 18 of Moose/Meta/TypeConstraint/Registry.pm # once (7µs+0s) by Moose::BEGIN@29 at line 32 of Moose/Meta/TypeCoercion.pm # once (7µs+0s) by Moose::BEGIN@27 at line 44 of Moose/Meta/Class.pm # once (7µs+0s) by Moose::BEGIN@37 at line 17 of Moose/Meta/Role/Application.pm # once (7µs+0s) by Moose::BEGIN@28 at line 112 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::BEGIN@28 at line 84 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::Util::TypeConstraints::BEGIN@38 at line 23 of Moose/Meta/TypeConstraint/Enum.pm # once (7µs+0s) by Moose::BEGIN@27 at line 67 of Moose/Meta/Class.pm # once (7µs+0s) by Moose::BEGIN@27 at line 47 of Moose/Meta/Class.pm # once (7µs+0s) by Moose::Util::TypeConstraints::BEGIN@34 at line 25 of Moose/Meta/TypeConstraint/Parameterized.pm # once (7µs+0s) by Moose::Util::TypeConstraints::BEGIN@42 at line 28 of Moose/Meta/TypeConstraint/Registry.pm # once (7µs+0s) by Moose::BEGIN@35 at line 162 of Moose/Meta/Role.pm # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 198 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 425 # once (7µs+0s) by Moose::BEGIN@28 at line 43 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::BEGIN@28 at line 32 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::BEGIN@39 at line 19 of Moose/Meta/Role/Application/ToClass.pm # once (7µs+0s) by Moose::Meta::Role::BEGIN@19 at line 39 of Moose/Meta/Role/Attribute.pm # once (7µs+0s) by Moose::BEGIN@27 at line 55 of Moose/Meta/Class.pm # once (7µs+0s) by Moose::BEGIN@35 at line 141 of Moose/Meta/Role.pm # once (7µs+0s) by Moose::BEGIN@36 at line 37 of Moose/Meta/Role/Composite.pm # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 386 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 250 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 534 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 150 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 479 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 518 # once (7µs+0s) by Moose::BEGIN@38 at line 22 of Moose/Meta/Role/Application/RoleSummation.pm # once (7µs+0s) by Moose::BEGIN@28 at line 91 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::Meta::Role::BEGIN@19 at line 32 of Moose/Meta/Role/Attribute.pm # once (7µs+0s) by Moose::BEGIN@35 at line 355 of Moose/Meta/Role.pm # once (7µs+0s) by Moose::BEGIN@36 at line 40 of Moose/Meta/Role/Composite.pm # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 551 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 370 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 417 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 642 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 338 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 378 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 618 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 291 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 178 # once (7µs+0s) by Moose::Meta::TypeConstraint::Parameterized::BEGIN@15 at line 25 of Moose/Meta/TypeConstraint/Parameterizable.pm # once (7µs+0s) by Moose::BEGIN@28 at line 102 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::BEGIN@28 at line 46 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::BEGIN@28 at line 52 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::BEGIN@28 at line 118 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::BEGIN@39 at line 24 of Moose/Meta/Role/Application/ToClass.pm # once (7µs+0s) by Moose::Meta::Role::BEGIN@19 at line 25 of Moose/Meta/Role/Attribute.pm # once (7µs+0s) by Moose::Meta::Role::BEGIN@19 at line 46 of Moose/Meta/Role/Attribute.pm # once (7µs+0s) by Moose::Meta::Role::BEGIN@22 at line 17 of Moose/Meta/Role/Method/Conflicting.pm # once (7µs+0s) by Moose::BEGIN@35 at line 134 of Moose/Meta/Role.pm # once (7µs+0s) by Moose::BEGIN@29 at line 23 of Moose/Meta/TypeCoercion.pm # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 137 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 649 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 460 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 511 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 449 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 223 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 182 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 572 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 327 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 625 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 497 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 433 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 490 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 581 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 409 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 597 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 287 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 601 # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 270 # once (6µs+0s) by Moose::BEGIN@35 at line 155 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::BEGIN@35 at line 148 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::BEGIN@35 at line 401 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::BEGIN@35 at line 169 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::BEGIN@37 at line 24 of Moose/Meta/Role/Application.pm # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 355 # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 441 # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 562 # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 543 # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 307 # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 635 # once (6µs+0s) by Moose::BEGIN@27 at line 61 of Moose/Meta/Class.pm # once (6µs+0s) by Moose::BEGIN@35 at line 128 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 394 # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 317 # once (6µs+0s) by base::import at line 101 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 48 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 69 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 55 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 42 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 76 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 21 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 62 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 35 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 28 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 84 of Moose/Meta/Mixin/AttributeCore.pm # once (6µs+0s) by base::import at line 92 of Moose/Meta/Mixin/AttributeCore.pm
sub _definition_context {
8912313µs my %context;
90123588µs @context{qw(package file line)} = caller(1);
91
92 return (
93123532µs definition_context => \%context,
94 );
95}
96
97## ----------------------------------------------------------------------------
98## Setting up our environment ...
99## ----------------------------------------------------------------------------
100## Class::MOP needs to have a few things in the global perl environment so
101## that it can operate effectively. Those things are done here.
102## ----------------------------------------------------------------------------
103
104# ... nothing yet actually ;)
105
106## ----------------------------------------------------------------------------
107## Bootstrapping
108## ----------------------------------------------------------------------------
109## The code below here is to bootstrap our MOP with itself. This is also
110## sometimes called "tying the knot". By doing this, we make it much easier
111## to extend the MOP through subclassing and such since now you can use the
112## MOP itself to extend itself.
113##
114## Yes, I know, that's weird and insane, but it's a good thing, trust me :)
115## ----------------------------------------------------------------------------
116
117# We need to add in the meta-attributes here so that
118# any subclass of Class::MOP::* will be able to
119# inherit them using _construct_instance
120
121## --------------------------------------------------------
122## Class::MOP::Mixin::HasMethods
123
124Class::MOP::Mixin::HasMethods->meta->add_attribute(
125 Class::MOP::Attribute->new('_methods' => (
126 reader => {
127 # NOTE:
128 # we just alias the original method
129 # rather than re-produce it here
130 '_method_map' => \&Class::MOP::Mixin::HasMethods::_method_map
131 },
13226µs
# spent 3µs within Class::MOP::__ANON__[/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP.pm:132] which was called 2 times, avg 2µs/call: # 2 times (3µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 45 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call
default => sub { {} },
133123µs41.93ms _definition_context(),
# spent 1.02ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 843µs making 1 call to Class::MOP::Mixin::meta # spent 50µs making 1 call to Class::MOP::Attribute::new # spent 12µs making 1 call to Class::MOP::_definition_context
134 ))
135);
136
137114µs4362µsClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 312µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 28µs making 1 call to Class::MOP::Attribute::new # spent 16µs making 1 call to Class::MOP::Mixin::meta # spent 7µs making 1 call to Class::MOP::_definition_context
138 Class::MOP::Attribute->new('method_metaclass' => (
139 reader => {
140 # NOTE:
141 # we just alias the original method
142 # rather than re-produce it here
143 'method_metaclass' => \&Class::MOP::Mixin::HasMethods::method_metaclass
144 },
145 default => 'Class::MOP::Method',
146 _definition_context(),
147 ))
148);
149
150113µs4355µsClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 313µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 22µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Mixin::meta # spent 7µs making 1 call to Class::MOP::_definition_context
151 Class::MOP::Attribute->new('wrapped_method_metaclass' => (
152 reader => {
153 # NOTE:
154 # we just alias the original method
155 # rather than re-produce it here
156 'wrapped_method_metaclass' => \&Class::MOP::Mixin::HasMethods::wrapped_method_metaclass
157 },
158 default => 'Class::MOP::Method::Wrapped',
159 _definition_context(),
160 ))
161);
162
163## --------------------------------------------------------
164## Class::MOP::Mixin::HasMethods
165
166Class::MOP::Mixin::HasAttributes->meta->add_attribute(
167 Class::MOP::Attribute->new('attributes' => (
168 reader => {
169 # NOTE: we need to do this in order
170 # for the instance meta-object to
171 # not fall into meta-circular death
172 #
173 # we just alias the original method
174 # rather than re-produce it here
175 '_attribute_map' => \&Class::MOP::Mixin::HasAttributes::_attribute_map
176 },
17727µs
# spent 4µs within Class::MOP::__ANON__[/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP.pm:177] which was called 2 times, avg 2µs/call: # 2 times (4µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 45 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call
default => sub { {} },
178118µs4696µs _definition_context(),
# spent 343µs making 1 call to Class::MOP::Mixin::meta # spent 312µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 34µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
179 ))
180);
181
182113µs4358µsClass::MOP::Mixin::HasAttributes->meta->add_attribute(
# spent 309µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 28µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Mixin::meta # spent 7µs making 1 call to Class::MOP::_definition_context
183 Class::MOP::Attribute->new('attribute_metaclass' => (
184 reader => {
185 # NOTE:
186 # we just alias the original method
187 # rather than re-produce it here
188 'attribute_metaclass' => \&Class::MOP::Mixin::HasAttributes::attribute_metaclass
189 },
190 default => 'Class::MOP::Attribute',
191 _definition_context(),
192 ))
193);
194
195## --------------------------------------------------------
196## Class::MOP::Package
197
198117µs4773µsClass::MOP::Package->meta->add_attribute(
# spent 419µs making 1 call to Class::MOP::Object::meta # spent 326µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
199 Class::MOP::Attribute->new('package' => (
200 reader => {
201 # NOTE: we need to do this in order
202 # for the instance meta-object to
203 # not fall into meta-circular death
204 #
205 # we just alias the original method
206 # rather than re-produce it here
207 'name' => \&Class::MOP::Package::name
208 },
209 _definition_context(),
210 ))
211);
212
213Class::MOP::Package->meta->add_attribute(
214 Class::MOP::Attribute->new('namespace' => (
215 reader => {
216 # NOTE:
217 # we just alias the original method
218 # rather than re-produce it here
219 'namespace' => \&Class::MOP::Package::namespace
220 },
221 init_arg => undef,
22227µs
# spent 4µs within Class::MOP::__ANON__[/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP.pm:222] which was called 2 times, avg 2µs/call: # 2 times (4µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 45 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call
default => sub { \undef },
223116µs4361µs _definition_context(),
# spent 310µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 30µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
224 ))
225);
226
227## --------------------------------------------------------
228## Class::MOP::Module
229
230# NOTE:
231# yeah this is kind of stretching things a bit,
232# but truthfully the version should be an attribute
233# of the Module, the weirdness comes from having to
234# stick to Perl 5 convention and store it in the
235# $VERSION package variable. Basically if you just
236# squint at it, it will look how you want it to look.
237# Either as a package variable, or as a attribute of
238# the metaclass, isn't abstraction great :)
239
240Class::MOP::Module->meta->add_attribute(
241 Class::MOP::Attribute->new('version' => (
242 reader => {
243 # NOTE:
244 # we just alias the original method
245 # rather than re-produce it here
246 'version' => \&Class::MOP::Module::version
247 },
248 init_arg => undef,
24927µs
# spent 4µs within Class::MOP::__ANON__[/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP.pm:249] which was called 2 times, avg 2µs/call: # 2 times (4µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 45 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call
default => sub { \undef },
250120µs46.98ms _definition_context(),
# spent 6.60ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 342µs making 1 call to Class::MOP::Object::meta # spent 34µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
251 ))
252);
253
254# NOTE:
255# By following the same conventions as version here,
256# we are opening up the possibility that people can
257# use the $AUTHORITY in non-Class::MOP modules as
258# well.
259
260Class::MOP::Module->meta->add_attribute(
261 Class::MOP::Attribute->new('authority' => (
262 reader => {
263 # NOTE:
264 # we just alias the original method
265 # rather than re-produce it here
266 'authority' => \&Class::MOP::Module::authority
267 },
268 init_arg => undef,
26927µs
# spent 3µs within Class::MOP::__ANON__[/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP.pm:269] which was called 2 times, avg 2µs/call: # 2 times (3µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 45 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call
default => sub { \undef },
270115µs4354µs _definition_context(),
# spent 305µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 28µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
271 ))
272);
273
274## --------------------------------------------------------
275## Class::MOP::Class
276
277Class::MOP::Class->meta->add_attribute(
278 Class::MOP::Attribute->new('superclasses' => (
279 accessor => {
280 # NOTE:
281 # we just alias the original method
282 # rather than re-produce it here
283 'superclasses' => \&Class::MOP::Class::superclasses
284 },
285 init_arg => undef,
28627µs
# spent 3µs within Class::MOP::__ANON__[/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP.pm:286] which was called 2 times, avg 2µs/call: # 2 times (3µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 45 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call
default => sub { \undef },
287117µs41.10ms _definition_context(),
# spent 677µs making 1 call to Class::MOP::Object::meta # spent 393µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 27µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
288 ))
289);
290
29119µs4320µsClass::MOP::Class->meta->add_attribute(
# spent 278µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 22µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
292 Class::MOP::Attribute->new('instance_metaclass' => (
293 reader => {
294 # NOTE: we need to do this in order
295 # for the instance meta-object to
296 # not fall into meta-circular death
297 #
298 # we just alias the original method
299 # rather than re-produce it here
300 'instance_metaclass' => \&Class::MOP::Class::instance_metaclass
301 },
302 default => 'Class::MOP::Instance',
303 _definition_context(),
304 ))
305);
306
30719µs4325µsClass::MOP::Class->meta->add_attribute(
# spent 285µ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::Object::meta # spent 6µs making 1 call to Class::MOP::_definition_context
308 Class::MOP::Attribute->new('immutable_trait' => (
309 reader => {
310 'immutable_trait' => \&Class::MOP::Class::immutable_trait
311 },
312 default => "Class::MOP::Class::Immutable::Trait",
313 _definition_context(),
314 ))
315);
316
31719µs4313µsClass::MOP::Class->meta->add_attribute(
# spent 273µ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::Object::meta # spent 6µs making 1 call to Class::MOP::_definition_context
318 Class::MOP::Attribute->new('constructor_name' => (
319 reader => {
320 'constructor_name' => \&Class::MOP::Class::constructor_name,
321 },
322 default => "new",
323 _definition_context(),
324 ))
325);
326
327112µs4328µsClass::MOP::Class->meta->add_attribute(
# spent 287µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 22µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
328 Class::MOP::Attribute->new('constructor_class' => (
329 reader => {
330 'constructor_class' => \&Class::MOP::Class::constructor_class,
331 },
332 default => "Class::MOP::Method::Constructor",
333 _definition_context(),
334 ))
335);
336
337
338110µs4315µsClass::MOP::Class->meta->add_attribute(
# spent 274µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
339 Class::MOP::Attribute->new('destructor_class' => (
340 reader => {
341 'destructor_class' => \&Class::MOP::Class::destructor_class,
342 },
343 _definition_context(),
344 ))
345);
346
347# NOTE:
348# we don't actually need to tie the knot with
349# Class::MOP::Class here, it is actually handled
350# within Class::MOP::Class itself in the
351# _construct_class_instance method.
352
353## --------------------------------------------------------
354## Class::MOP::Mixin::AttributeCore
355111µs4660µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 331µs making 1 call to Class::MOP::Mixin::meta # spent 301µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::_definition_context
356 Class::MOP::Attribute->new('name' => (
357 reader => {
358 # NOTE: we need to do this in order
359 # for the instance meta-object to
360 # not fall into meta-circular death
361 #
362 # we just alias the original method
363 # rather than re-produce it here
364 'name' => \&Class::MOP::Mixin::AttributeCore::name
365 },
366 _definition_context(),
367 ))
368);
369
370110µs4483µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 442µ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 7µs making 1 call to Class::MOP::_definition_context
371 Class::MOP::Attribute->new('accessor' => (
372 reader => { 'accessor' => \&Class::MOP::Mixin::AttributeCore::accessor },
373 predicate => { 'has_accessor' => \&Class::MOP::Mixin::AttributeCore::has_accessor },
374 _definition_context(),
375 ))
376);
377
378110µs4488µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 448µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Mixin::meta # spent 7µs making 1 call to Class::MOP::_definition_context
379 Class::MOP::Attribute->new('reader' => (
380 reader => { 'reader' => \&Class::MOP::Mixin::AttributeCore::reader },
381 predicate => { 'has_reader' => \&Class::MOP::Mixin::AttributeCore::has_reader },
382 _definition_context(),
383 ))
384);
385
386114µs4470µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 428µ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 7µs making 1 call to Class::MOP::_definition_context
387 Class::MOP::Attribute->new('initializer' => (
388 reader => { 'initializer' => \&Class::MOP::Mixin::AttributeCore::initializer },
389 predicate => { 'has_initializer' => \&Class::MOP::Mixin::AttributeCore::has_initializer },
390 _definition_context(),
391 ))
392);
393
39419µs4346µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 304µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 23µ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
395 Class::MOP::Attribute->new('definition_context' => (
396 reader => { 'definition_context' => \&Class::MOP::Mixin::AttributeCore::definition_context },
397 _definition_context(),
398 ))
399);
400
401114µs4464µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 423µ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 7µs making 1 call to Class::MOP::_definition_context
402 Class::MOP::Attribute->new('writer' => (
403 reader => { 'writer' => \&Class::MOP::Mixin::AttributeCore::writer },
404 predicate => { 'has_writer' => \&Class::MOP::Mixin::AttributeCore::has_writer },
405 _definition_context(),
406 ))
407);
408
409110µs4492µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 453µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Mixin::meta # spent 7µs making 1 call to Class::MOP::_definition_context
410 Class::MOP::Attribute->new('predicate' => (
411 reader => { 'predicate' => \&Class::MOP::Mixin::AttributeCore::predicate },
412 predicate => { 'has_predicate' => \&Class::MOP::Mixin::AttributeCore::has_predicate },
413 _definition_context(),
414 ))
415);
416
417110µs4508µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 467µ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 7µs making 1 call to Class::MOP::_definition_context
418 Class::MOP::Attribute->new('clearer' => (
419 reader => { 'clearer' => \&Class::MOP::Mixin::AttributeCore::clearer },
420 predicate => { 'has_clearer' => \&Class::MOP::Mixin::AttributeCore::has_clearer },
421 _definition_context(),
422 ))
423);
424
425110µs4484µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 442µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 22µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Mixin::meta # spent 7µs making 1 call to Class::MOP::_definition_context
426 Class::MOP::Attribute->new('builder' => (
427 reader => { 'builder' => \&Class::MOP::Mixin::AttributeCore::builder },
428 predicate => { 'has_builder' => \&Class::MOP::Mixin::AttributeCore::has_builder },
429 _definition_context(),
430 ))
431);
432
433110µs4476µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 436µ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 7µs making 1 call to Class::MOP::_definition_context
434 Class::MOP::Attribute->new('init_arg' => (
435 reader => { 'init_arg' => \&Class::MOP::Mixin::AttributeCore::init_arg },
436 predicate => { 'has_init_arg' => \&Class::MOP::Mixin::AttributeCore::has_init_arg },
437 _definition_context(),
438 ))
439);
440
44119µs4330µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 290µ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
442 Class::MOP::Attribute->new('default' => (
443 # default has a custom 'reader' method ...
444 predicate => { 'has_default' => \&Class::MOP::Mixin::AttributeCore::has_default },
445 _definition_context(),
446 ))
447);
448
449111µs4648µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 607µ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 7µs making 1 call to Class::MOP::_definition_context
450 Class::MOP::Attribute->new('insertion_order' => (
451 reader => { 'insertion_order' => \&Class::MOP::Mixin::AttributeCore::insertion_order },
452 writer => { '_set_insertion_order' => \&Class::MOP::Mixin::AttributeCore::_set_insertion_order },
453 predicate => { 'has_insertion_order' => \&Class::MOP::Mixin::AttributeCore::has_insertion_order },
454 _definition_context(),
455 ))
456);
457
458## --------------------------------------------------------
459## Class::MOP::Attribute
460112µs4856µsClass::MOP::Attribute->meta->add_attribute(
# spent 493µs making 1 call to Class::MOP::Object::meta # spent 336µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
461 Class::MOP::Attribute->new('associated_class' => (
462 reader => {
463 # NOTE: we need to do this in order
464 # for the instance meta-object to
465 # not fall into meta-circular death
466 #
467 # we just alias the original method
468 # rather than re-produce it here
469 'associated_class' => \&Class::MOP::Attribute::associated_class
470 },
471 _definition_context(),
472 ))
473);
474
475Class::MOP::Attribute->meta->add_attribute(
476 Class::MOP::Attribute->new('associated_methods' => (
477 reader => { 'associated_methods' => \&Class::MOP::Attribute::associated_methods },
47829µs
# spent 4µs within Class::MOP::__ANON__[/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP.pm:478] which was called 2 times, avg 2µs/call: # once (2µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 45 of Class/MOP/Mixin/AttributeCore.pm # once (2µs+0s) by Moose::Meta::Attribute::_new at line 21 of (eval 157)[Eval/Closure.pm:144]
default => sub { [] },
479113µs4325µs _definition_context(),
# spent 273µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 31µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
480 ))
481);
482
483Class::MOP::Attribute->meta->add_method('clone' => sub {
484 my $self = shift;
485 $self->meta->clone_object($self, @_);
48616µs282µs});
# spent 68µs making 1 call to Class::MOP::Mixin::HasMethods::add_method # spent 14µs making 1 call to Class::MOP::Object::meta
487
488## --------------------------------------------------------
489## Class::MOP::Method
490111µs4629µsClass::MOP::Method->meta->add_attribute(
# spent 304µs making 1 call to Class::MOP::Object::meta # spent 298µ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
491 Class::MOP::Attribute->new('body' => (
492 reader => { 'body' => \&Class::MOP::Method::body },
493 _definition_context(),
494 ))
495);
496
49719µs45.25msClass::MOP::Method->meta->add_attribute(
# spent 5.21ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
498 Class::MOP::Attribute->new('associated_metaclass' => (
499 reader => { 'associated_metaclass' => \&Class::MOP::Method::associated_metaclass },
500 _definition_context(),
501 ))
502);
503
50419µs4451µsClass::MOP::Method->meta->add_attribute(
# spent 410µ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::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
505 Class::MOP::Attribute->new('package_name' => (
506 reader => { 'package_name' => \&Class::MOP::Method::package_name },
507 _definition_context(),
508 ))
509);
510
51119µs4438µsClass::MOP::Method->meta->add_attribute(
# spent 396µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 22µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
512 Class::MOP::Attribute->new('name' => (
513 reader => { 'name' => \&Class::MOP::Method::name },
514 _definition_context(),
515 ))
516);
517
518110µs4720µsClass::MOP::Method->meta->add_attribute(
# spent 679µ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::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
519 Class::MOP::Attribute->new('original_method' => (
520 reader => { 'original_method' => \&Class::MOP::Method::original_method },
521 writer => { '_set_original_method' => \&Class::MOP::Method::_set_original_method },
522 _definition_context(),
523 ))
524);
525
526## --------------------------------------------------------
527## Class::MOP::Method::Wrapped
528
529# NOTE:
530# the way this item is initialized, this
531# really does not follow the standard
532# practices of attributes, but we put
533# it here for completeness
534111µs4474µsClass::MOP::Method::Wrapped->meta->add_attribute(
# spent 323µs making 1 call to Class::MOP::Object::meta # spent 124µ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
535 Class::MOP::Attribute->new('modifier_table' => (
536 _definition_context(),
537 ))
538);
539
540## --------------------------------------------------------
541## Class::MOP::Method::Generated
542
543114µs4758µsClass::MOP::Method::Generated->meta->add_attribute(
# spent 420µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 305µs making 1 call to Class::MOP::Object::meta # spent 26µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::_definition_context
544 Class::MOP::Attribute->new('is_inline' => (
545 reader => { 'is_inline' => \&Class::MOP::Method::Generated::is_inline },
546 default => 0,
547 _definition_context(),
548 ))
549);
550
55119µs4442µsClass::MOP::Method::Generated->meta->add_attribute(
# spent 402µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
552 Class::MOP::Attribute->new('definition_context' => (
553 reader => { 'definition_context' => \&Class::MOP::Method::Generated::definition_context },
554 _definition_context(),
555 ))
556);
557
558
559## --------------------------------------------------------
560## Class::MOP::Method::Inlined
561
562113µs4765µsClass::MOP::Method::Inlined->meta->add_attribute(
# spent 417µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 318µs making 1 call to Class::MOP::Object::meta # spent 24µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::_definition_context
563 Class::MOP::Attribute->new('_expected_method_class' => (
564 reader => { '_expected_method_class' => \&Class::MOP::Method::Inlined::_expected_method_class },
565 _definition_context(),
566 ))
567);
568
569## --------------------------------------------------------
570## Class::MOP::Method::Accessor
571
572114µs4652µsClass::MOP::Method::Accessor->meta->add_attribute(
# spent 315µs making 1 call to Class::MOP::Object::meta # spent 301µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 30µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
573 Class::MOP::Attribute->new('attribute' => (
574 reader => {
575 'associated_attribute' => \&Class::MOP::Method::Accessor::associated_attribute
576 },
577 _definition_context(),
578 ))
579);
580
58119µs4430µsClass::MOP::Method::Accessor->meta->add_attribute(
# spent 390µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
582 Class::MOP::Attribute->new('accessor_type' => (
583 reader => { 'accessor_type' => \&Class::MOP::Method::Accessor::accessor_type },
584 _definition_context(),
585 ))
586);
587
588## --------------------------------------------------------
589## Class::MOP::Method::Constructor
590
591Class::MOP::Method::Constructor->meta->add_attribute(
592 Class::MOP::Attribute->new('options' => (
593 reader => {
594 'options' => \&Class::MOP::Method::Constructor::options
595 },
596 default => sub { +{} },
597117µs4746µs _definition_context(),
# spent 398µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 305µs making 1 call to Class::MOP::Object::meta # spent 36µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
598 ))
599);
600
601110µs4309µsClass::MOP::Method::Constructor->meta->add_attribute(
# spent 268µ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::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
602 Class::MOP::Attribute->new('associated_metaclass' => (
603 init_arg => "metaclass", # FIXME alias and rename
604 reader => {
605 'associated_metaclass' => \&Class::MOP::Method::Constructor::associated_metaclass
606 },
607 _definition_context(),
608 ))
609);
610
611## --------------------------------------------------------
612## Class::MOP::Instance
613
614# NOTE:
615# these don't yet do much of anything, but are just
616# included for completeness
617
618112µs4685µsClass::MOP::Instance->meta->add_attribute(
# spent 338µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 314µs making 1 call to Class::MOP::Object::meta # spent 27µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::_definition_context
619 Class::MOP::Attribute->new('associated_metaclass',
620 reader => { associated_metaclass => \&Class::MOP::Instance::associated_metaclass },
621 _definition_context(),
622 ),
623);
624
62519µs4318µsClass::MOP::Instance->meta->add_attribute(
# spent 278µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
626 Class::MOP::Attribute->new('_class_name',
627 init_arg => undef,
628 reader => { _class_name => \&Class::MOP::Instance::_class_name },
629 #lazy => 1, # not yet supported by Class::MOP but out our version does it anyway
630 #default => sub { $_[0]->associated_metaclass->name },
631 _definition_context(),
632 ),
633);
634
63519µs4329µsClass::MOP::Instance->meta->add_attribute(
# spent 289µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Object::meta # spent 6µs making 1 call to Class::MOP::_definition_context
636 Class::MOP::Attribute->new('attributes',
637 reader => { attributes => \&Class::MOP::Instance::get_all_attributes },
638 _definition_context(),
639 ),
640);
641
642110µs4359µsClass::MOP::Instance->meta->add_attribute(
# spent 318µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 13µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
643 Class::MOP::Attribute->new('slots',
644 reader => { slots => \&Class::MOP::Instance::slots },
645 _definition_context(),
646 ),
647);
648
649111µs4348µsClass::MOP::Instance->meta->add_attribute(
# spent 307µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 14µs making 1 call to Class::MOP::Object::meta # spent 7µs making 1 call to Class::MOP::_definition_context
650 Class::MOP::Attribute->new('slot_hash',
651 reader => { slot_hash => \&Class::MOP::Instance::slot_hash },
652 _definition_context(),
653 ),
654);
655
656## --------------------------------------------------------
657## Class::MOP::Object
658
659# need to replace the meta method there with a real meta method object
660112µs21.31msClass::MOP::Object->meta->_add_meta_method('meta');
# spent 1.30ms making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 13µs making 1 call to Class::MOP::Object::meta
661
662## --------------------------------------------------------
663## Class::MOP::Mixin
664
665# need to replace the meta method there with a real meta method object
66619µs2665µsClass::MOP::Mixin->meta->_add_meta_method('meta');
# spent 650µs making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 15µs making 1 call to Class::MOP::Mixin::meta
667
6681147µsrequire Class::MOP::Deprecated unless our $no_deprecated;
669
670# we need the meta instance of the meta instance to be created now, in order
671# for the constructor to be able to use it
67216µs2138µsClass::MOP::Instance->meta->get_meta_instance;
# spent 122µs making 1 call to Class::MOP::Class::get_meta_instance # spent 16µs making 1 call to Class::MOP::Object::meta
673
674# pretend the add_method never happened. it hasn't yet affected anything
67512µs111µsundef Class::MOP::Instance->meta->{_package_cache_flag};
# spent 11µs making 1 call to Class::MOP::Object::meta
676
677## --------------------------------------------------------
678## Now close all the Class::MOP::* classes
679
680# NOTE: we don't need to inline the accessors this only lengthens the compile
681# time of the MOP, and gives us no actual benefits.
682
683$_->meta->make_immutable(
684 inline_constructor => 0,
685 constructor_name => "_new",
686 inline_accessors => 0,
687180µs2827.1ms) for qw/
# spent 26.5ms making 14 calls to Class::MOP::Class::make_immutable, avg 1.89ms/call # spent 533µs making 14 calls to Class::MOP::Object::meta, avg 38µs/call
688 Class::MOP::Package
689 Class::MOP::Module
690 Class::MOP::Class
691
692 Class::MOP::Attribute
693 Class::MOP::Method
694 Class::MOP::Instance
695
696 Class::MOP::Object
697
698 Class::MOP::Method::Generated
699 Class::MOP::Method::Inlined
700
701 Class::MOP::Method::Accessor
702 Class::MOP::Method::Constructor
703 Class::MOP::Method::Wrapped
704
705 Class::MOP::Method::Meta
706 Class::MOP::Method::Overload
707/;
708
709$_->meta->make_immutable(
710 inline_constructor => 0,
711 constructor_name => undef,
712 inline_accessors => 0,
713125µs8747µs) for qw/
# spent 690µs making 4 calls to Class::MOP::Class::make_immutable, avg 173µs/call # spent 56µs making 4 calls to Class::MOP::Mixin::meta, avg 14µs/call
714 Class::MOP::Mixin
715 Class::MOP::Mixin::AttributeCore
716 Class::MOP::Mixin::HasAttributes
717 Class::MOP::Mixin::HasMethods
718/;
719
7201168µs1;
721
722# ABSTRACT: A Meta Object Protocol for Perl 5
723
724__END__
 
# spent 615µs within Class::MOP::get_code_info which was called 493 times, avg 1µs/call: # 386 times (505µs+0s) by Class::MOP::Mixin::HasMethods::add_method at line 81 of Class/MOP/Mixin/HasMethods.pm, avg 1µs/call # 105 times (107µs+0s) by Class::MOP::Mixin::HasMethods::_code_is_mine at line 95 of Class/MOP/Mixin/HasMethods.pm, avg 1µs/call # 2 times (3µs+0s) by Moose::Exporter::_make_sub_exporter_params at line 291 of Moose/Exporter.pm, avg 1µs/call
sub Class::MOP::get_code_info; # xsub