← Index
NYTProf Performance Profile   « line view »
For /home/ss5/perl5/perlbrew/perls/perl-5.22.0/bin/benchmarkanything-storage
  Run on Mon Jan 29 16:55:34 2018
Reported on Mon Jan 29 16:57:06 2018

Filename/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP.pm
StatementsExecuted 2479 statements in 8.30ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1113.68ms15.1msClass::MOP::::BEGIN@18Class::MOP::BEGIN@18
1111.29ms1.43msClass::MOP::::BEGIN@19Class::MOP::BEGIN@19
111883µs1.39msClass::MOP::::BEGIN@9Class::MOP::BEGIN@9
161074804µs804µsClass::MOP::::get_metaclass_by_nameClass::MOP::get_metaclass_by_name
111692µs2.64msClass::MOP::::BEGIN@16Class::MOP::BEGIN@16
111550µs2.48msClass::MOP::::BEGIN@17Class::MOP::BEGIN@17
13112423459µs459µsClass::MOP::::_definition_contextClass::MOP::_definition_context
50721315µs315µsClass::MOP::::get_code_infoClass::MOP::get_code_info (xsub)
111306µs364µsClass::MOP::::BEGIN@15Class::MOP::BEGIN@15
111305µs791µsClass::MOP::::BEGIN@14Class::MOP::BEGIN@14
6621154µs183µsClass::MOP::::metaclass_is_weakClass::MOP::metaclass_is_weak
4776151µs169µsClass::MOP::::class_ofClass::MOP::class_of
9533119µs119µsClass::MOP::::store_metaclass_by_nameClass::MOP::store_metaclass_by_name
551154µs54µsClass::MOP::::does_metaclass_existClass::MOP::does_metaclass_exist
1119µs14µsClass::MOP::::BEGIN@10Class::MOP::BEGIN@10
1119µs10µsClass::MOP::::BEGIN@4Class::MOP::BEGIN@4
1117µs7µsClass::MOP::::BEGIN@7Class::MOP::BEGIN@7
5227µs7µsClass::MOP::::__ANON__[:499]Class::MOP::__ANON__[:499]
1117µs12µsClass::MOP::::BEGIN@12Class::MOP::BEGIN@12
1115µs50µsClass::MOP::::BEGIN@11Class::MOP::BEGIN@11
1115µs5µsClass::MOP::::BEGIN@20Class::MOP::BEGIN@20
1114µs7µsClass::MOP::::BEGIN@5Class::MOP::BEGIN@5
1114µs4µsClass::MOP::::BEGIN@22Class::MOP::BEGIN@22
2113µs3µsClass::MOP::::__ANON__[:139]Class::MOP::__ANON__[:139]
2112µs2µsClass::MOP::::__ANON__[:290]Class::MOP::__ANON__[:290]
2112µs2µsClass::MOP::::__ANON__[:243]Class::MOP::__ANON__[:243]
2112µs2µsClass::MOP::::__ANON__[:307]Class::MOP::__ANON__[:307]
2112µs2µsClass::MOP::::__ANON__[:270]Class::MOP::__ANON__[:270]
2112µs2µsClass::MOP::::__ANON__[:184]Class::MOP::__ANON__[:184]
2112µs2µsClass::MOP::::__ANON__[:211]Class::MOP::__ANON__[:211]
0000s0sClass::MOP::::__ANON__[:507]Class::MOP::__ANON__[:507]
0000s0sClass::MOP::::__ANON__[:617]Class::MOP::__ANON__[:617]
0000s0sClass::MOP::::get_all_metaclass_instancesClass::MOP::get_all_metaclass_instances
0000s0sClass::MOP::::get_all_metaclass_namesClass::MOP::get_all_metaclass_names
0000s0sClass::MOP::::get_all_metaclassesClass::MOP::get_all_metaclasses
0000s0sClass::MOP::::is_class_loadedClass::MOP::is_class_loaded
0000s0sClass::MOP::::load_classClass::MOP::load_class
0000s0sClass::MOP::::load_first_existing_classClass::MOP::load_first_existing_class
0000s0sClass::MOP::::remove_metaclass_by_nameClass::MOP::remove_metaclass_by_name
0000s0sClass::MOP::::weaken_metaclassClass::MOP::weaken_metaclass
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Class::MOP;
21300nsour $VERSION = '2.1605';
3
4214µs211µs
# spent 10µs (9+1) within Class::MOP::BEGIN@4 which was called: # once (9µs+1µs) by Moose::Exporter::BEGIN@8 at line 4
use strict;
# spent 10µs making 1 call to Class::MOP::BEGIN@4 # spent 1µs making 1 call to strict::import
5213µs210µs
# spent 7µs (4+3) within Class::MOP::BEGIN@5 which was called: # once (4µs+3µs) by Moose::Exporter::BEGIN@8 at line 5
use warnings;
# spent 7µs making 1 call to Class::MOP::BEGIN@5 # spent 3µs making 1 call to warnings::import
6
7225µs17µs
# spent 7µs within Class::MOP::BEGIN@7 which was called: # once (7µs+0s) by Moose::Exporter::BEGIN@8 at line 7
use 5.008003;
# spent 7µs making 1 call to Class::MOP::BEGIN@7
8
9273µs11.39ms
# spent 1.39ms (883µs+509µs) within Class::MOP::BEGIN@9 which was called: # once (883µs+509µs) by Moose::Exporter::BEGIN@8 at line 9
use MRO::Compat;
# spent 1.39ms making 1 call to Class::MOP::BEGIN@9
10329µs220µs
# spent 14µs (9+6) within Class::MOP::BEGIN@10 which was called: # once (9µs+6µs) by Moose::Exporter::BEGIN@8 at line 10
use Class::Load 0.07 ();
# spent 14µs making 1 call to Class::MOP::BEGIN@10 # spent 6µs making 1 call to UNIVERSAL::VERSION
11218µs294µs
# spent 50µs (5+45) within Class::MOP::BEGIN@11 which was called: # once (5µs+45µs) by Moose::Exporter::BEGIN@8 at line 11
use Scalar::Util 'weaken', 'isweak', 'blessed';
# spent 50µs making 1 call to Class::MOP::BEGIN@11 # spent 45µs making 1 call to Exporter::import
12216µs216µs
# spent 12µs (7+5) within Class::MOP::BEGIN@12 which was called: # once (7µs+5µs) by Moose::Exporter::BEGIN@8 at line 12
use Data::OptList;
# spent 12µs making 1 call to Class::MOP::BEGIN@12 # spent 5µs making 1 call to Sub::Install::__ANON__[Sub/Install.pm:270]
13
14277µs1791µs
# spent 791µs (305+487) within Class::MOP::BEGIN@14 which was called: # once (305µs+487µs) by Moose::Exporter::BEGIN@8 at line 14
use Class::MOP::Mixin::AttributeCore;
# spent 791µs making 1 call to Class::MOP::BEGIN@14
15267µs1364µs
# spent 364µs (306+57) within Class::MOP::BEGIN@15 which was called: # once (306µs+57µs) by Moose::Exporter::BEGIN@8 at line 15
use Class::MOP::Mixin::HasAttributes;
# spent 364µs making 1 call to Class::MOP::BEGIN@15
16272µs12.64ms
# spent 2.64ms (692µs+1.95) within Class::MOP::BEGIN@16 which was called: # once (692µs+1.95ms) by Moose::Exporter::BEGIN@8 at line 16
use Class::MOP::Mixin::HasMethods;
# spent 2.64ms making 1 call to Class::MOP::BEGIN@16
17274µs12.48ms
# spent 2.48ms (550µs+1.93) within Class::MOP::BEGIN@17 which was called: # once (550µs+1.93ms) by Moose::Exporter::BEGIN@8 at line 17
use Class::MOP::Mixin::HasOverloads;
# spent 2.48ms making 1 call to Class::MOP::BEGIN@17
18291µs115.1ms
# spent 15.1ms (3.68+11.4) within Class::MOP::BEGIN@18 which was called: # once (3.68ms+11.4ms) by Moose::Exporter::BEGIN@8 at line 18
use Class::MOP::Class;
# spent 15.1ms making 1 call to Class::MOP::BEGIN@18
19294µs11.43ms
# spent 1.43ms (1.29+148µs) within Class::MOP::BEGIN@19 which was called: # once (1.29ms+148µs) by Moose::Exporter::BEGIN@8 at line 19
use Class::MOP::Attribute;
# spent 1.43ms making 1 call to Class::MOP::BEGIN@19
20244µs15µs
# spent 5µs within Class::MOP::BEGIN@20 which was called: # once (5µs+0s) by Moose::Exporter::BEGIN@8 at line 20
use Class::MOP::Method;
# spent 5µs making 1 call to Class::MOP::BEGIN@20
21
22
# spent 4µs within Class::MOP::BEGIN@22 which was called: # once (4µs+0s) by Moose::Exporter::BEGIN@8 at line 29
BEGIN {
23 *IS_RUNNING_ON_5_10 = ($] < 5.009_005)
24 ? sub () { 0 }
2511µs : sub () { 1 };
26
27 # this is either part of core or set up appropriately by MRO::Compat
2813µs *check_package_cache_flag = \&mro::get_pkg_gen;
2911.12ms14µs}
# spent 4µs making 1 call to Class::MOP::BEGIN@22
30
311238µs1228µsXSLoader::load(
# spent 228µs making 1 call to XSLoader::load
32 'Moose',
33 $VERSION,
34);
35
36{
37 # Metaclasses are singletons, so we cache them here.
38 # there is no need to worry about destruction though
39 # because they should die only when the program dies.
40 # After all, do package definitions even get reaped?
41 # Anonymous classes manage their own destruction.
421400ns my %METAS;
43
44 sub get_all_metaclasses { %METAS }
45 sub get_all_metaclass_instances { values %METAS }
46 sub get_all_metaclass_names { keys %METAS }
4716104.30ms
# spent 804µs within Class::MOP::get_metaclass_by_name which was called 1610 times, avg 499ns/call: # 1529 times (774µs+0s) by Class::MOP::Class::initialize at line 41 of Class/MOP/Class.pm, avg 506ns/call # 69 times (22µs+0s) by Class::MOP::Class::_construct_class_instance at line 82 of Class/MOP/Class.pm, avg 323ns/call # 6 times (2µs+0s) by Class::MOP::Class::_single_metaclass_is_compatible at line 273 of Class/MOP/Class.pm, avg 317ns/call # 2 times (2µs+0s) by Class::MOP::Package::initialize at line 25 of Class/MOP/Package.pm, avg 1µs/call # 2 times (1µs+0s) by Moose::Meta::Class::initialize at line 64 of Moose/Meta/Class.pm, avg 700ns/call # once (900ns+0s) by Moose::init_meta at line 166 of Moose.pm # once (700ns+0s) by Class::MOP::Class::_class_metaclass_is_compatible at line 247 of Class/MOP/Class.pm
sub get_metaclass_by_name { $METAS{$_[0]} }
4895174µs
# spent 119µs within Class::MOP::store_metaclass_by_name which was called 95 times, avg 1µs/call: # 69 times (80µs+0s) by Class::MOP::Class::_construct_class_instance at line 107 of Class/MOP/Class.pm, avg 1µs/call # 24 times (37µs+0s) by Moo::HandleMoose::inject_fake_metaclass_for at line 40 of Moo/HandleMoose.pm, avg 2µs/call # 2 times (2µs+0s) by Class::MOP::Package::initialize at line 32 of Class/MOP/Package.pm, avg 1µs/call
sub store_metaclass_by_name { $METAS{$_[0]} = $_[1] }
49 sub weaken_metaclass { weaken($METAS{$_[0]}) }
5066214µs6629µs
# spent 183µs (154+29) within Class::MOP::metaclass_is_weak which was called 66 times, avg 3µs/call: # 35 times (94µs+15µs) by Class::MOP::Class::_construct_instance at line 528 of Class/MOP/Class.pm, avg 3µs/call # 31 times (60µs+14µs) by Class::MOP::Class::_inline_preserve_weak_metaclasses at line 692 of Class/MOP/Class.pm, avg 2µs/call
sub metaclass_is_weak { isweak($METAS{$_[0]}) }
# spent 29µs making 66 calls to Scalar::Util::isweak, avg 436ns/call
515582µs
# spent 54µs within Class::MOP::does_metaclass_exist which was called 55 times, avg 985ns/call: # 55 times (54µs+0s) by Class::MOP::Class::_immutable_metaclass at line 1357 of Class/MOP/Class.pm, avg 985ns/call
sub does_metaclass_exist { exists $METAS{$_[0]} && defined $METAS{$_[0]} }
52 sub remove_metaclass_by_name { delete $METAS{$_[0]}; return }
53
54 # This handles instances as well as class names
55
# spent 169µs (151+18) within Class::MOP::class_of which was called 47 times, avg 4µs/call: # 25 times (94µs+12µs) by Moo::Role::_inhale_if_moose at line 138 of Moo/Role.pm, avg 4µs/call # 9 times (16µs+1µs) by Moose::Meta::Attribute::BEGIN@16 at line 718 of Moose/Util/TypeConstraints.pm, avg 2µs/call # 4 times (14µs+1µs) by Moose::Exporter::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Moose/Exporter.pm:252] at line 252 of Moose/Exporter.pm, avg 4µs/call # 4 times (10µs+1µs) by Moose::Exporter::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Moose/Exporter.pm:39] at line 39 of Moose/Exporter.pm, avg 3µs/call # 3 times (9µs+800ns) by Class::MOP::Class::_superclasses_updated at line 979 of Class/MOP/Class.pm, avg 3µs/call # once (5µs+300ns) by Moose::Meta::Class::superclasses at line 558 of Moose/Meta/Class.pm # once (4µs+500ns) by Class::MOP::Object::_new at line 23 of Class/MOP/Object.pm
sub class_of {
564713µs return unless defined $_[0];
5747104µs4718µs my $class = blessed($_[0]) || $_[0];
# spent 18µs making 47 calls to Scalar::Util::blessed, avg 372ns/call
584769µs return $METAS{$class};
59 }
60
61 # NOTE:
62 # We only cache metaclasses, meaning instances of
63 # Class::MOP::Class. We do not cache instance of
64 # Class::MOP::Package or Class::MOP::Module. Mostly
65 # because I don't yet see a good reason to do so.
66}
67
681300nssub load_class {
69 Class::MOP::Deprecated::deprecated(
70 message => 'Class::MOP::load_class is deprecated',
71 feature => 'Class::Load wrapper functions',
72 );
73 require Class::Load;
74 goto &Class::Load::load_class;
75}
76
77sub load_first_existing_class {
78 Class::MOP::Deprecated::deprecated(
79 message => 'Class::MOP::load_first_existing_class is deprecated',
80 feature => 'Class::Load wrapper functions',
81 );
82 require Class::Load;
83 goto &Class::Load::load_first_existing_class;
84}
85
86sub is_class_loaded {
87 Class::MOP::Deprecated::deprecated(
88 message => 'Class::MOP::is_class_loaded is deprecated',
89 feature => 'Class::Load wrapper functions',
90 );
91 require Class::Load;
92 goto &Class::Load::is_class_loaded;
93}
94
95
# spent 459µs within Class::MOP::_definition_context which was called 131 times, avg 4µs/call: # 5 times (15µs+0s) by Moose::Exporter::BEGIN@8 at line 646, avg 3µs/call # 3 times (9µs+0s) by Moose::BEGIN@32 at line 306 of Moose/Meta/Role.pm, avg 3µs/call # 2 times (7µs+0s) by Moose::BEGIN@32 at line 85 of Moose/Meta/Role.pm, avg 4µs/call # once (11µs+0s) by Moose::Exporter::BEGIN@8 at line 407 # once (9µs+0s) by Moose::Util::TypeConstraints::BEGIN@25 at line 17 of Moose/Meta/TypeConstraint/Union.pm # once (8µs+0s) by Moose::Exporter::BEGIN@8 at line 140 # once (7µs+0s) by Moose::Util::TypeConstraints::BEGIN@28 at line 14 of Moose/Meta/TypeConstraint/Class.pm # once (7µs+0s) by Moose::Meta::TypeCoercion::BEGIN@8 at line 25 of Moose/Meta/Attribute.pm # once (6µs+0s) by Moose::BEGIN@24 at line 29 of Moose/Meta/Class.pm # once (6µs+0s) by Moose::Meta::TypeConstraint::Parameterized::BEGIN@10 at line 16 of Moose/Meta/TypeConstraint/Parameterizable.pm # once (5µs+0s) by Moose::BEGIN@32 at line 162 of Moose/Meta/Role.pm # once (5µs+0s) by Moose::Exporter::BEGIN@8 at line 703 # once (5µs+0s) by Moose::Meta::Role::BEGIN@11 at line 14 of Moose/Meta/Role/Attribute.pm # once (5µs+0s) by parent::import at line 9 of Moose/Meta/Mixin/AttributeCore.pm # once (5µs+0s) by Moose::BEGIN@33 at line 18 of Moose/Meta/Role/Composite.pm # once (5µs+0s) by Moose::Exporter::BEGIN@8 at line 555 # once (5µs+0s) by Moose::BEGIN@38 at line 17 of Moose/Meta/Role/Application/ToInstance.pm # once (5µs+0s) by Moose::Util::TypeConstraints::BEGIN@29 at line 14 of Moose/Meta/TypeConstraint/Role.pm # once (5µs+0s) by Moose::Util::TypeConstraints::BEGIN@34 at line 14 of Moose/Meta/TypeConstraint/Registry.pm # once (4µs+0s) by Moose::BEGIN@34 at line 17 of Moose/Meta/Role/Application.pm # once (4µs+0s) by Moose::Exporter::BEGIN@8 at line 328 # once (4µs+0s) by Moose::Util::TypeConstraints::BEGIN@26 at line 15 of Moose/Meta/TypeConstraint/Parameterized.pm # once (4µs+0s) by Moose::Util::TypeConstraints::BEGIN@34 at line 24 of Moose/Meta/TypeConstraint/Registry.pm # once (4µs+0s) by Moose::BEGIN@26 at line 16 of Moose/Meta/TypeCoercion.pm # once (4µs+0s) by Moose::Util::TypeConstraints::BEGIN@31 at line 17 of Moose/Meta/TypeConstraint/DuckType.pm # once (4µs+0s) by Moose::BEGIN@25 at line 22 of Moose/Meta/TypeConstraint.pm # once (4µs+0s) by Moose::Util::TypeConstraints::BEGIN@30 at line 15 of Moose/Meta/TypeConstraint/Enum.pm # once (4µs+0s) by Moose::Exporter::BEGIN@8 at line 622 # once (4µs+0s) by Moose::Meta::Role::BEGIN@13 at line 18 of Moose/Meta/Role/Method/Required.pm # once (4µs+0s) by Moose::Meta::Role::BEGIN@11 at line 28 of Moose/Meta/Role/Attribute.pm # once (4µs+0s) by Moose::BEGIN@25 at line 26 of Moose/Meta/TypeConstraint.pm # once (4µs+0s) by Moose::Meta::TypeConstraint::Parameterized::BEGIN@10 at line 22 of Moose/Meta/TypeConstraint/Parameterizable.pm # once (4µs+0s) by Moose::BEGIN@26 at line 28 of Moose/Meta/TypeCoercion.pm # once (4µs+0s) by Moose::Exporter::BEGIN@8 at line 185 # once (4µs+0s) by Moose::Exporter::BEGIN@8 at line 312 # once (4µs+0s) by Moose::BEGIN@36 at line 14 of Moose/Meta/Role/Application/ToClass.pm # once (4µs+0s) by Moose::Exporter::BEGIN@8 at line 157 # once (4µs+0s) by Moose::Exporter::BEGIN@8 at line 219 # once (4µs+0s) by parent::import at line 96 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by Moose::BEGIN@33 at line 31 of Moose/Meta/Role/Composite.pm # once (3µs+0s) by Moose::Util::TypeConstraints::BEGIN@30 at line 20 of Moose/Meta/TypeConstraint/Enum.pm # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 271 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 144 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 430 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 399 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 189 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 212 # once (3µs+0s) by Moose::Meta::Role::BEGIN@14 at line 11 of Moose/Meta/Role/Method/Conflicting.pm # once (3µs+0s) by Moose::Util::TypeConstraints::BEGIN@26 at line 21 of Moose/Meta/TypeConstraint/Parameterized.pm # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 244 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 308 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 618 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 564 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 481 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 470 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 415 # once (3µs+0s) by Moose::BEGIN@25 at line 106 of Moose/Meta/TypeConstraint.pm # once (3µs+0s) by Moose::BEGIN@24 at line 35 of Moose/Meta/Class.pm # once (3µs+0s) by Moose::BEGIN@35 at line 20 of Moose/Meta/Role/Application/RoleSummation.pm # once (3µs+0s) by Moose::BEGIN@26 at line 19 of Moose/Meta/TypeCoercion.pm # once (3µs+0s) by Moose::BEGIN@32 at line 121 of Moose/Meta/Role.pm # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 635 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 518 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 338 # once (3µs+0s) by Moose::BEGIN@25 at line 90 of Moose/Meta/TypeConstraint.pm # once (3µs+0s) by Moose::BEGIN@34 at line 24 of Moose/Meta/Role/Application.pm # once (3µs+0s) by Moose::Meta::Role::BEGIN@11 at line 21 of Moose/Meta/Role/Attribute.pm # once (3µs+0s) by Moose::BEGIN@36 at line 19 of Moose/Meta/Role/Application/ToClass.pm # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 602 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 291 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 593 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 583 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 511 # once (3µs+0s) by Moose::BEGIN@25 at line 37 of Moose/Meta/TypeConstraint.pm # once (3µs+0s) by Moose::BEGIN@25 at line 46 of Moose/Meta/TypeConstraint.pm # once (3µs+0s) by Moose::BEGIN@25 at line 100 of Moose/Meta/TypeConstraint.pm # once (3µs+0s) by Moose::BEGIN@25 at line 40 of Moose/Meta/TypeConstraint.pm # once (3µs+0s) by Moose::BEGIN@24 at line 38 of Moose/Meta/Class.pm # once (3µs+0s) by Moose::BEGIN@24 at line 46 of Moose/Meta/Class.pm # once (3µs+0s) by Moose::BEGIN@33 at line 45 of Moose/Meta/Role/Composite.pm # once (3µs+0s) by Moose::BEGIN@32 at line 127 of Moose/Meta/Role.pm # once (3µs+0s) by Moose::BEGIN@32 at line 399 of Moose/Meta/Role.pm # once (3µs+0s) by Moose::BEGIN@32 at line 352 of Moose/Meta/Role.pm # once (3µs+0s) by Moose::BEGIN@32 at line 141 of Moose/Meta/Role.pm # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 422 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 710 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 376 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 500 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 679 # once (3µs+0s) by Moose::BEGIN@33 at line 37 of Moose/Meta/Role/Composite.pm # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 348 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 686 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 532 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 454 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 696 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 572 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 438 # once (3µs+0s) by Moose::BEGIN@25 at line 79 of Moose/Meta/TypeConstraint.pm # once (3µs+0s) by Moose::BEGIN@25 at line 73 of Moose/Meta/TypeConstraint.pm # once (3µs+0s) by Moose::BEGIN@24 at line 52 of Moose/Meta/Class.pm # once (3µs+0s) by Moose::Meta::Role::BEGIN@11 at line 35 of Moose/Meta/Role/Attribute.pm # once (3µs+0s) by Moose::BEGIN@33 at line 40 of Moose/Meta/Role/Composite.pm # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 525 # once (3µs+0s) by Moose::Meta::Role::BEGIN@11 at line 42 of Moose/Meta/Role/Attribute.pm # once (3µs+0s) by Moose::BEGIN@32 at line 134 of Moose/Meta/Role.pm # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 446 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 391 # once (3µs+0s) by Moose::BEGIN@32 at line 155 of Moose/Meta/Role.pm # once (3µs+0s) by Moose::BEGIN@32 at line 148 of Moose/Meta/Role.pm # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 661 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 539 # once (3µs+0s) by Moose::Exporter::BEGIN@8 at line 462 # once (3µs+0s) by parent::import at line 16 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by Moose::Exporter::BEGIN@8 at line 359 # once (2µs+0s) by parent::import at line 23 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by parent::import at line 57 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by parent::import at line 50 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by parent::import at line 30 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by parent::import at line 43 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by parent::import at line 79 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by parent::import at line 64 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by parent::import at line 87 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by parent::import at line 71 of Moose/Meta/Mixin/AttributeCore.pm # once (2µs+0s) by parent::import at line 37 of Moose/Meta/Mixin/AttributeCore.pm
sub _definition_context {
9613116µs my %context;
97131352µs @context{qw(package file line)} = caller(1);
98
99 return (
100131246µs definition_context => \%context,
101 );
102}
103
104## ----------------------------------------------------------------------------
105## Setting up our environment ...
106## ----------------------------------------------------------------------------
107## Class::MOP needs to have a few things in the global perl environment so
108## that it can operate effectively. Those things are done here.
109## ----------------------------------------------------------------------------
110
111# ... nothing yet actually ;)
112
113## ----------------------------------------------------------------------------
114## Bootstrapping
115## ----------------------------------------------------------------------------
116## The code below here is to bootstrap our MOP with itself. This is also
117## sometimes called "tying the knot". By doing this, we make it much easier
118## to extend the MOP through subclassing and such since now you can use the
119## MOP itself to extend itself.
120##
121## Yes, I know, that's weird and insane, but it's a good thing, trust me :)
122## ----------------------------------------------------------------------------
123
124# We need to add in the meta-attributes here so that
125# any subclass of Class::MOP::* will be able to
126# inherit them using _construct_instance
127
128## --------------------------------------------------------
129## Class::MOP::Mixin::HasMethods
130
131Class::MOP::Mixin::HasMethods->meta->add_attribute(
132 Class::MOP::Attribute->new('_methods' => (
133 reader => {
134 # NOTE:
135 # we just alias the original method
136 # rather than re-produce it here
137 '_method_map' => \&Class::MOP::Mixin::HasMethods::_method_map
138 },
13924µs
# spent 3µs within Class::MOP::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP.pm:139] which was called 2 times, avg 2µs/call: # 2 times (3µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 2µs/call
default => sub { {} },
140112µs4918µs _definition_context(),
# spent 440µs making 1 call to Class::MOP::Mixin::meta # spent 435µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 36µs making 1 call to Class::MOP::Attribute::new # spent 8µs making 1 call to Class::MOP::_definition_context
141 ))
142);
143
14417µs4201µsClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 176µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 13µs making 1 call to Class::MOP::Attribute::new # spent 8µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
145 Class::MOP::Attribute->new('method_metaclass' => (
146 reader => {
147 # NOTE:
148 # we just alias the original method
149 # rather than re-produce it here
150 'method_metaclass' => \&Class::MOP::Mixin::HasMethods::method_metaclass
151 },
152 default => 'Class::MOP::Method',
153 _definition_context(),
154 ))
155);
156
15717µs4178µsClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 156µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 11µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::Mixin::meta # spent 4µs making 1 call to Class::MOP::_definition_context
158 Class::MOP::Attribute->new('wrapped_method_metaclass' => (
159 reader => {
160 # NOTE:
161 # we just alias the original method
162 # rather than re-produce it here
163 'wrapped_method_metaclass' => \&Class::MOP::Mixin::HasMethods::wrapped_method_metaclass
164 },
165 default => 'Class::MOP::Method::Wrapped',
166 _definition_context(),
167 ))
168);
169
170## --------------------------------------------------------
171## Class::MOP::Mixin::HasAttributes
172
173Class::MOP::Mixin::HasAttributes->meta->add_attribute(
174 Class::MOP::Attribute->new('attributes' => (
175 reader => {
176 # NOTE: we need to do this in order
177 # for the instance meta-object to
178 # not fall into meta-circular death
179 #
180 # we just alias the original method
181 # rather than re-produce it here
182 '_attribute_map' => \&Class::MOP::Mixin::HasAttributes::_attribute_map
183 },
18424µs
# spent 2µs within Class::MOP::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP.pm:184] which was called 2 times, avg 1µs/call: # 2 times (2µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 1µs/call
default => sub { {} },
18518µs4370µs _definition_context(),
# spent 181µs making 1 call to Class::MOP::Mixin::meta # spent 172µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 14µs making 1 call to Class::MOP::Attribute::new # spent 4µs making 1 call to Class::MOP::_definition_context
186 ))
187);
188
18916µs4170µsClass::MOP::Mixin::HasAttributes->meta->add_attribute(
# spent 148µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 12µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
190 Class::MOP::Attribute->new('attribute_metaclass' => (
191 reader => {
192 # NOTE:
193 # we just alias the original method
194 # rather than re-produce it here
195 'attribute_metaclass' => \&Class::MOP::Mixin::HasAttributes::attribute_metaclass
196 },
197 default => 'Class::MOP::Attribute',
198 _definition_context(),
199 ))
200);
201
202## --------------------------------------------------------
203## Class::MOP::Mixin::HasOverloads
204
205Class::MOP::Mixin::HasOverloads->meta->add_attribute(
206 Class::MOP::Attribute->new('_overload_map' => (
207 reader => {
208 '_overload_map' => \&Class::MOP::Mixin::HasOverloads::_overload_map
209 },
210 clearer => '_clear_overload_map',
21125µs
# spent 2µs within Class::MOP::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP.pm:211] which was called 2 times, avg 1µs/call: # 2 times (2µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 1µs/call
default => sub { {} },
21218µs4543µs _definition_context(),
# spent 360µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 163µs making 1 call to Class::MOP::Mixin::meta # spent 17µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
213 ))
214);
215
216## --------------------------------------------------------
217## Class::MOP::Package
218
21917µs4487µsClass::MOP::Package->meta->add_attribute(
# spent 304µs making 1 call to Class::MOP::Mixin::meta # spent 169µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 10µs making 1 call to Class::MOP::Attribute::new # spent 4µs making 1 call to Class::MOP::_definition_context
220 Class::MOP::Attribute->new('package' => (
221 reader => {
222 # NOTE: we need to do this in order
223 # for the instance meta-object to
224 # not fall into meta-circular death
225 #
226 # we just alias the original method
227 # rather than re-produce it here
228 'name' => \&Class::MOP::Package::name
229 },
230 _definition_context(),
231 ))
232);
233
234Class::MOP::Package->meta->add_attribute(
235 Class::MOP::Attribute->new('namespace' => (
236 reader => {
237 # NOTE:
238 # we just alias the original method
239 # rather than re-produce it here
240 'namespace' => \&Class::MOP::Package::namespace
241 },
242 init_arg => undef,
24324µs
# spent 2µs within Class::MOP::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP.pm:243] which was called 2 times, avg 1µs/call: # 2 times (2µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 1µs/call
default => sub { \undef },
24417µs4173µs _definition_context(),
# spent 147µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 8µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
245 ))
246);
247
248## --------------------------------------------------------
249## Class::MOP::Module
250
251# NOTE:
252# yeah this is kind of stretching things a bit,
253# but truthfully the version should be an attribute
254# of the Module, the weirdness comes from having to
255# stick to Perl 5 convention and store it in the
256# $VERSION package variable. Basically if you just
257# squint at it, it will look how you want it to look.
258# Either as a package variable, or as a attribute of
259# the metaclass, isn't abstraction great :)
260
261Class::MOP::Module->meta->add_attribute(
262 Class::MOP::Attribute->new('version' => (
263 reader => {
264 # NOTE:
265 # we just alias the original method
266 # rather than re-produce it here
267 'version' => \&Class::MOP::Module::version
268 },
269 init_arg => undef,
27023µs
# spent 2µs within Class::MOP::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP.pm:270] which was called 2 times, avg 1µs/call: # 2 times (2µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 1µs/call
default => sub { \undef },
27118µs4325µs _definition_context(),
# spent 157µs making 1 call to Class::MOP::Mixin::meta # spent 150µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 14µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
272 ))
273);
274
275# NOTE:
276# By following the same conventions as version here,
277# we are opening up the possibility that people can
278# use the $AUTHORITY in non-Class::MOP modules as
279# well.
280
281Class::MOP::Module->meta->add_attribute(
282 Class::MOP::Attribute->new('authority' => (
283 reader => {
284 # NOTE:
285 # we just alias the original method
286 # rather than re-produce it here
287 'authority' => \&Class::MOP::Module::authority
288 },
289 init_arg => undef,
29024µs
# spent 2µs within Class::MOP::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP.pm:290] which was called 2 times, avg 1µs/call: # 2 times (2µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 1µs/call
default => sub { \undef },
29116µs4168µs _definition_context(),
# spent 146µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 13µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
292 ))
293);
294
295## --------------------------------------------------------
296## Class::MOP::Class
297
298Class::MOP::Class->meta->add_attribute(
299 Class::MOP::Attribute->new('superclasses' => (
300 accessor => {
301 # NOTE:
302 # we just alias the original method
303 # rather than re-produce it here
304 'superclasses' => \&Class::MOP::Class::superclasses
305 },
306 init_arg => undef,
30723µs
# spent 2µs within Class::MOP::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP.pm:307] which was called 2 times, avg 1µs/call: # 2 times (2µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm, avg 1µs/call
default => sub { \undef },
30818µs4630µs _definition_context(),
# spent 397µs making 1 call to Class::MOP::Mixin::meta # spent 217µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 13µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
309 ))
310);
311
31216µs4161µsClass::MOP::Class->meta->add_attribute(
# spent 141µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 11µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 4µs making 1 call to Class::MOP::_definition_context
313 Class::MOP::Attribute->new('instance_metaclass' => (
314 reader => {
315 # NOTE: we need to do this in order
316 # for the instance meta-object to
317 # not fall into meta-circular death
318 #
319 # we just alias the original method
320 # rather than re-produce it here
321 'instance_metaclass' => \&Class::MOP::Class::instance_metaclass
322 },
323 default => 'Class::MOP::Instance',
324 _definition_context(),
325 ))
326);
327
32818µs4180µsClass::MOP::Class->meta->add_attribute(
# spent 153µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 13µs making 1 call to Class::MOP::Attribute::new # spent 9µs making 1 call to Class::MOP::Mixin::meta # spent 4µs making 1 call to Class::MOP::_definition_context
329 Class::MOP::Attribute->new('immutable_trait' => (
330 reader => {
331 'immutable_trait' => \&Class::MOP::Class::immutable_trait
332 },
333 default => "Class::MOP::Class::Immutable::Trait",
334 _definition_context(),
335 ))
336);
337
33818µs4150µsClass::MOP::Class->meta->add_attribute(
# spent 131µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 10µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
339 Class::MOP::Attribute->new('constructor_name' => (
340 reader => {
341 'constructor_name' => \&Class::MOP::Class::constructor_name,
342 },
343 default => "new",
344 _definition_context(),
345 ))
346);
347
34815µs4146µsClass::MOP::Class->meta->add_attribute(
# spent 127µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 10µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
349 Class::MOP::Attribute->new('constructor_class' => (
350 reader => {
351 'constructor_class' => \&Class::MOP::Class::constructor_class,
352 },
353 default => "Class::MOP::Method::Constructor",
354 _definition_context(),
355 ))
356);
357
358
35915µs4162µsClass::MOP::Class->meta->add_attribute(
# spent 145µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 8µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 2µs making 1 call to Class::MOP::_definition_context
360 Class::MOP::Attribute->new('destructor_class' => (
361 reader => {
362 'destructor_class' => \&Class::MOP::Class::destructor_class,
363 },
364 _definition_context(),
365 ))
366);
367
368# NOTE:
369# we don't actually need to tie the knot with
370# Class::MOP::Class here, it is actually handled
371# within Class::MOP::Class itself in the
372# _construct_class_instance method.
373
374## --------------------------------------------------------
375## Class::MOP::Mixin::AttributeCore
37618µs4302µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 148µs making 1 call to Class::MOP::Mixin::meta # spent 141µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
377 Class::MOP::Attribute->new('name' => (
378 reader => {
379 # NOTE: we need to do this in order
380 # for the instance meta-object to
381 # not fall into meta-circular death
382 #
383 # we just alias the original method
384 # rather than re-produce it here
385 'name' => \&Class::MOP::Mixin::AttributeCore::name
386 },
387 _definition_context(),
388 ))
389);
390
39116µs4294µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 276µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
392 Class::MOP::Attribute->new('accessor' => (
393 reader => { 'accessor' => \&Class::MOP::Mixin::AttributeCore::accessor },
394 predicate => { 'has_accessor' => \&Class::MOP::Mixin::AttributeCore::has_accessor },
395 _definition_context(),
396 ))
397);
398
39919µs44.39msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 4.37ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 10µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
400 Class::MOP::Attribute->new('reader' => (
401 reader => { 'reader' => \&Class::MOP::Mixin::AttributeCore::reader },
402 predicate => { 'has_reader' => \&Class::MOP::Mixin::AttributeCore::has_reader },
403 _definition_context(),
404 ))
405);
406
407114µs4443µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 378µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 31µs making 1 call to Class::MOP::Attribute::new # spent 23µs making 1 call to Class::MOP::Mixin::meta # spent 11µs making 1 call to Class::MOP::_definition_context
408 Class::MOP::Attribute->new('initializer' => (
409 reader => { 'initializer' => \&Class::MOP::Mixin::AttributeCore::initializer },
410 predicate => { 'has_initializer' => \&Class::MOP::Mixin::AttributeCore::has_initializer },
411 _definition_context(),
412 ))
413);
414
41515µs4164µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 143µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 11µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
416 Class::MOP::Attribute->new('definition_context' => (
417 reader => { 'definition_context' => \&Class::MOP::Mixin::AttributeCore::definition_context },
418 _definition_context(),
419 ))
420);
421
42216µs4225µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 206µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
423 Class::MOP::Attribute->new('writer' => (
424 reader => { 'writer' => \&Class::MOP::Mixin::AttributeCore::writer },
425 predicate => { 'has_writer' => \&Class::MOP::Mixin::AttributeCore::has_writer },
426 _definition_context(),
427 ))
428);
429
43018µs4217µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 198µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
431 Class::MOP::Attribute->new('predicate' => (
432 reader => { 'predicate' => \&Class::MOP::Mixin::AttributeCore::predicate },
433 predicate => { 'has_predicate' => \&Class::MOP::Mixin::AttributeCore::has_predicate },
434 _definition_context(),
435 ))
436);
437
43815µs4219µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 197µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 13µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
439 Class::MOP::Attribute->new('clearer' => (
440 reader => { 'clearer' => \&Class::MOP::Mixin::AttributeCore::clearer },
441 predicate => { 'has_clearer' => \&Class::MOP::Mixin::AttributeCore::has_clearer },
442 _definition_context(),
443 ))
444);
445
44618µs4227µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 209µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 10µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
447 Class::MOP::Attribute->new('builder' => (
448 reader => { 'builder' => \&Class::MOP::Mixin::AttributeCore::builder },
449 predicate => { 'has_builder' => \&Class::MOP::Mixin::AttributeCore::has_builder },
450 _definition_context(),
451 ))
452);
453
45417µs4219µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 197µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 12µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
455 Class::MOP::Attribute->new('init_arg' => (
456 reader => { 'init_arg' => \&Class::MOP::Mixin::AttributeCore::init_arg },
457 predicate => { 'has_init_arg' => \&Class::MOP::Mixin::AttributeCore::has_init_arg },
458 _definition_context(),
459 ))
460);
461
46215µs4156µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 137µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
463 Class::MOP::Attribute->new('default' => (
464 # default has a custom 'reader' method ...
465 predicate => { 'has_default' => \&Class::MOP::Mixin::AttributeCore::has_default },
466 _definition_context(),
467 ))
468);
469
47019µs4314µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 290µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
471 Class::MOP::Attribute->new('insertion_order' => (
472 reader => { 'insertion_order' => \&Class::MOP::Mixin::AttributeCore::insertion_order },
473 writer => { '_set_insertion_order' => \&Class::MOP::Mixin::AttributeCore::_set_insertion_order },
474 predicate => { 'has_insertion_order' => \&Class::MOP::Mixin::AttributeCore::has_insertion_order },
475 _definition_context(),
476 ))
477);
478
479## --------------------------------------------------------
480## Class::MOP::Attribute
48116µs4467µsClass::MOP::Attribute->meta->add_attribute(
# spent 284µs making 1 call to Class::MOP::Mixin::meta # spent 165µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 14µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
482 Class::MOP::Attribute->new('associated_class' => (
483 reader => {
484 # NOTE: we need to do this in order
485 # for the instance meta-object to
486 # not fall into meta-circular death
487 #
488 # we just alias the original method
489 # rather than re-produce it here
490 'associated_class' => \&Class::MOP::Attribute::associated_class
491 },
492 _definition_context(),
493 ))
494);
495
496Class::MOP::Attribute->meta->add_attribute(
497 Class::MOP::Attribute->new('associated_methods' => (
498 reader => { 'associated_methods' => \&Class::MOP::Attribute::associated_methods },
499510µs
# spent 7µs within Class::MOP::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP.pm:499] which was called 5 times, avg 1µs/call: # 4 times (6µs+0s) by Moose::Meta::Attribute::_new at line 21 of (eval 33)[Eval/Closure.pm:142], avg 1µs/call # once (1µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 40 of Class/MOP/Mixin/AttributeCore.pm
default => sub { [] },
50017µs4154µs _definition_context(),
# spent 127µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 18µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
501 ))
502);
503
504Class::MOP::Attribute->meta->add_method('clone' => sub {
505 my $self = shift;
506 $self->meta->clone_object($self, @_);
50713µs243µs});
# spent 37µs making 1 call to Class::MOP::Mixin::HasMethods::add_method # spent 6µs making 1 call to Class::MOP::Mixin::meta
508
509## --------------------------------------------------------
510## Class::MOP::Method
51118µs4304µsClass::MOP::Method->meta->add_attribute(
# spent 149µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 139µs making 1 call to Class::MOP::Mixin::meta # spent 13µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
512 Class::MOP::Attribute->new('body' => (
513 reader => { 'body' => \&Class::MOP::Method::body },
514 _definition_context(),
515 ))
516);
517
51815µs4188µsClass::MOP::Method->meta->add_attribute(
# spent 169µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
519 Class::MOP::Attribute->new('associated_metaclass' => (
520 reader => { 'associated_metaclass' => \&Class::MOP::Method::associated_metaclass },
521 _definition_context(),
522 ))
523);
524
52516µs4177µsClass::MOP::Method->meta->add_attribute(
# spent 156µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 12µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
526 Class::MOP::Attribute->new('package_name' => (
527 reader => { 'package_name' => \&Class::MOP::Method::package_name },
528 _definition_context(),
529 ))
530);
531
53214µs4173µsClass::MOP::Method->meta->add_attribute(
# spent 156µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 8µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
533 Class::MOP::Attribute->new('name' => (
534 reader => { 'name' => \&Class::MOP::Method::name },
535 _definition_context(),
536 ))
537);
538
53916µs4310µsClass::MOP::Method->meta->add_attribute(
# spent 293µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
540 Class::MOP::Attribute->new('original_method' => (
541 reader => { 'original_method' => \&Class::MOP::Method::original_method },
542 writer => { '_set_original_method' => \&Class::MOP::Method::_set_original_method },
543 _definition_context(),
544 ))
545);
546
547## --------------------------------------------------------
548## Class::MOP::Method::Wrapped
549
550# NOTE:
551# the way this item is initialized, this
552# really does not follow the standard
553# practices of attributes, but we put
554# it here for completeness
55516µs4258µsClass::MOP::Method::Wrapped->meta->add_attribute(
# spent 172µs making 1 call to Class::MOP::Mixin::meta # spent 70µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 11µs making 1 call to Class::MOP::Attribute::new # spent 5µs making 1 call to Class::MOP::_definition_context
556 Class::MOP::Attribute->new('modifier_table' => (
557 _definition_context(),
558 ))
559);
560
561## --------------------------------------------------------
562## Class::MOP::Method::Generated
563
56417µs4334µsClass::MOP::Method::Generated->meta->add_attribute(
# spent 180µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 139µs making 1 call to Class::MOP::Mixin::meta # spent 12µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
565 Class::MOP::Attribute->new('is_inline' => (
566 reader => { 'is_inline' => \&Class::MOP::Method::Generated::is_inline },
567 default => 0,
568 _definition_context(),
569 ))
570);
571
57215µs4179µsClass::MOP::Method::Generated->meta->add_attribute(
# spent 160µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
573 Class::MOP::Attribute->new('definition_context' => (
574 reader => { 'definition_context' => \&Class::MOP::Method::Generated::definition_context },
575 _definition_context(),
576 ))
577);
578
579
580## --------------------------------------------------------
581## Class::MOP::Method::Inlined
582
58318µs4331µsClass::MOP::Method::Inlined->meta->add_attribute(
# spent 167µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 148µs making 1 call to Class::MOP::Mixin::meta # spent 12µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
584 Class::MOP::Attribute->new('_expected_method_class' => (
585 reader => { '_expected_method_class' => \&Class::MOP::Method::Inlined::_expected_method_class },
586 _definition_context(),
587 ))
588);
589
590## --------------------------------------------------------
591## Class::MOP::Method::Accessor
592
59318µs4324µsClass::MOP::Method::Accessor->meta->add_attribute(
# spent 170µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 141µs making 1 call to Class::MOP::Mixin::meta # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
594 Class::MOP::Attribute->new('attribute' => (
595 reader => {
596 'associated_attribute' => \&Class::MOP::Method::Accessor::associated_attribute
597 },
598 _definition_context(),
599 ))
600);
601
60215µs4184µsClass::MOP::Method::Accessor->meta->add_attribute(
# spent 165µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 7µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
603 Class::MOP::Attribute->new('accessor_type' => (
604 reader => { 'accessor_type' => \&Class::MOP::Method::Accessor::accessor_type },
605 _definition_context(),
606 ))
607);
608
609## --------------------------------------------------------
610## Class::MOP::Method::Constructor
611
612Class::MOP::Method::Constructor->meta->add_attribute(
613 Class::MOP::Attribute->new('options' => (
614 reader => {
615 'options' => \&Class::MOP::Method::Constructor::options
616 },
617 default => sub { +{} },
61818µs43.04ms _definition_context(),
# spent 2.88ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 142µs making 1 call to Class::MOP::Mixin::meta # spent 16µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
619 ))
620);
621
62216µs4159µsClass::MOP::Method::Constructor->meta->add_attribute(
# spent 136µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 11µs making 1 call to Class::MOP::Attribute::new # spent 8µs making 1 call to Class::MOP::Mixin::meta # spent 4µs making 1 call to Class::MOP::_definition_context
623 Class::MOP::Attribute->new('associated_metaclass' => (
624 init_arg => "metaclass", # FIXME alias and rename
625 reader => {
626 'associated_metaclass' => \&Class::MOP::Method::Constructor::associated_metaclass
627 },
628 _definition_context(),
629 ))
630);
631
632## --------------------------------------------------------
633## Class::MOP::Overload
634
63517µs4309µsClass::MOP::Overload->meta->add_attribute(
# spent 151µs making 1 call to Class::MOP::Mixin::meta # spent 144µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 10µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
636 Class::MOP::Attribute->new(
637 'operator' => (
638 reader => { 'operator' => \&Class::MOP::Overload::operator },
639 required => 1,
640 _definition_context(),
641 )
642 )
643);
644
64511µsfor my $attr (qw( method_name coderef coderef_package coderef_name method )) {
646542µs301.06ms Class::MOP::Overload->meta->add_attribute(
# spent 957µs making 5 calls to Class::MOP::Mixin::HasAttributes::add_attribute, avg 191µs/call # spent 54µs making 5 calls to Class::MOP::Attribute::new, avg 11µs/call # spent 30µs making 5 calls to Class::MOP::Mixin::meta, avg 6µs/call # spent 15µs making 5 calls to Class::MOP::_definition_context, avg 3µs/call # spent 7µs making 10 calls to UNIVERSAL::can, avg 680ns/call
647 Class::MOP::Attribute->new(
648 $attr => (
649 reader => { $attr => Class::MOP::Overload->can($attr) },
650 predicate => {
651 'has_'
652 . $attr => Class::MOP::Overload->can( 'has_' . $attr )
653 },
654 _definition_context(),
655 )
656 )
657 );
658}
659
660Class::MOP::Overload->meta->add_attribute(
66116µs4155µs Class::MOP::Attribute->new(
# spent 138µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 8µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
662 'associated_metaclass' => (
663 reader => {
664 'associated_metaclass' =>
665 \&Class::MOP::Overload::associated_metaclass
666 },
667 _definition_context(),
668 )
669 )
670);
671
672## --------------------------------------------------------
673## Class::MOP::Instance
674
675# NOTE:
676# these don't yet do much of anything, but are just
677# included for completeness
678
67918µs4310µsClass::MOP::Instance->meta->add_attribute(
# spent 149µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 149µs making 1 call to Class::MOP::Mixin::meta # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 3µs making 1 call to Class::MOP::_definition_context
680 Class::MOP::Attribute->new('associated_metaclass',
681 reader => { associated_metaclass => \&Class::MOP::Instance::associated_metaclass },
682 _definition_context(),
683 ),
684);
685
68615µs4138µsClass::MOP::Instance->meta->add_attribute(
# spent 120µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
687 Class::MOP::Attribute->new('_class_name',
688 init_arg => undef,
689 reader => { _class_name => \&Class::MOP::Instance::_class_name },
690 #lazy => 1, # not yet supported by Class::MOP but out our version does it anyway
691 #default => sub { $_[0]->associated_metaclass->name },
692 _definition_context(),
693 ),
694);
695
69615µs4137µsClass::MOP::Instance->meta->add_attribute(
# spent 120µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 8µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
697 Class::MOP::Attribute->new('attributes',
698 reader => { attributes => \&Class::MOP::Instance::get_all_attributes },
699 _definition_context(),
700 ),
701);
702
70315µs4164µsClass::MOP::Instance->meta->add_attribute(
# spent 145µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 8µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 5µs making 1 call to Class::MOP::_definition_context
704 Class::MOP::Attribute->new('slots',
705 reader => { slots => \&Class::MOP::Instance::slots },
706 _definition_context(),
707 ),
708);
709
71015µs4160µsClass::MOP::Instance->meta->add_attribute(
# spent 142µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 9µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::Mixin::meta # spent 3µs making 1 call to Class::MOP::_definition_context
711 Class::MOP::Attribute->new('slot_hash',
712 reader => { slot_hash => \&Class::MOP::Instance::slot_hash },
713 _definition_context(),
714 ),
715);
716
717## --------------------------------------------------------
718## Class::MOP::Object
719
720# need to replace the meta method there with a real meta method object
72117µs2697µsClass::MOP::Object->meta->_add_meta_method('meta');
# spent 690µs making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 6µs making 1 call to Class::MOP::Mixin::meta
722
723## --------------------------------------------------------
724## Class::MOP::Mixin
725
726# need to replace the meta method there with a real meta method object
72713µs2246µsClass::MOP::Mixin->meta->_add_meta_method('meta');
# spent 241µs making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 6µs making 1 call to Class::MOP::Mixin::meta
728
729165µsrequire Class::MOP::Deprecated unless our $no_deprecated;
730
731# we need the meta instance of the meta instance to be created now, in order
732# for the constructor to be able to use it
73312µs267µsClass::MOP::Instance->meta->get_meta_instance;
# spent 60µs making 1 call to Class::MOP::Class::get_meta_instance # spent 7µs making 1 call to Class::MOP::Object::meta
734
735# pretend the add_method never happened. it hasn't yet affected anything
73611µs14µsundef Class::MOP::Instance->meta->{_package_cache_flag};
# spent 4µs making 1 call to Class::MOP::Object::meta
737
738## --------------------------------------------------------
739## Now close all the Class::MOP::* classes
740
741# NOTE: we don't need to inline the accessors this only lengthens the compile
742# time of the MOP, and gives us no actual benefits.
743
744$_->meta->make_immutable(
745 inline_constructor => 0,
746 constructor_name => "_new",
747 inline_accessors => 0,
748137µs2814.6ms) for qw/
# spent 14.5ms making 14 calls to Class::MOP::Class::make_immutable, avg 1.04ms/call # spent 61µs making 14 calls to Class::MOP::Object::meta, avg 4µs/call
749 Class::MOP::Package
750 Class::MOP::Module
751 Class::MOP::Class
752
753 Class::MOP::Attribute
754 Class::MOP::Method
755 Class::MOP::Instance
756
757 Class::MOP::Object
758
759 Class::MOP::Method::Generated
760 Class::MOP::Method::Inlined
761
762 Class::MOP::Method::Accessor
763 Class::MOP::Method::Constructor
764 Class::MOP::Method::Wrapped
765
766 Class::MOP::Method::Meta
767
768 Class::MOP::Overload
769/;
770
771$_->meta->make_immutable(
772 inline_constructor => 0,
773 constructor_name => undef,
774 inline_accessors => 0,
775118µs10278µs) for qw/
# spent 244µs making 5 calls to Class::MOP::Class::make_immutable, avg 49µs/call # spent 33µs making 5 calls to Class::MOP::Mixin::meta, avg 7µs/call
776 Class::MOP::Mixin
777 Class::MOP::Mixin::AttributeCore
778 Class::MOP::Mixin::HasAttributes
779 Class::MOP::Mixin::HasMethods
780 Class::MOP::Mixin::HasOverloads
781/;
782
7831101µs1;
784
785# ABSTRACT: A Meta Object Protocol for Perl 5
786
787__END__
 
# spent 315µs within Class::MOP::get_code_info which was called 507 times, avg 621ns/call: # 401 times (256µs+0s) by Class::MOP::Mixin::HasMethods::add_method at line 73 of Class/MOP/Mixin/HasMethods.pm, avg 639ns/call # 106 times (59µs+0s) by Class::MOP::Mixin::HasMethods::_code_is_mine at line 87 of Class/MOP/Mixin/HasMethods.pm, avg 554ns/call
sub Class::MOP::get_code_info; # xsub