← Index
NYTProf Performance Profile   « block view • line view • sub view »
For mentat.storage.mongo.pl
  Run on Tue Jun 24 09:58:41 2014
Reported on Tue Jun 24 09:59:19 2014

Filename/usr/local/lib/perl/5.14.2/Class/MOP.pm
StatementsExecuted 3410 statements in 10.1ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115.92ms18.3msClass::MOP::::BEGIN@26Class::MOP::BEGIN@26
2209742.30ms2.30msClass::MOP::::get_metaclass_by_nameClass::MOP::get_metaclass_by_name
1112.09ms2.30msClass::MOP::::BEGIN@27Class::MOP::BEGIN@27
1111.44ms4.24msClass::MOP::::BEGIN@25Class::MOP::BEGIN@25
1111.29ms1.80msClass::MOP::::BEGIN@15Class::MOP::BEGIN@15
67432724µs724µsClass::MOP::::get_code_infoClass::MOP::get_code_info (xsub)
12312023650µs650µsClass::MOP::::_definition_contextClass::MOP::_definition_context
111537µs680µsClass::MOP::::BEGIN@24Class::MOP::BEGIN@24
111484µs859µsClass::MOP::::BEGIN@23Class::MOP::BEGIN@23
12476467µs541µsClass::MOP::::class_ofClass::MOP::class_of
15321404µs498µsClass::MOP::::metaclass_is_weakClass::MOP::metaclass_is_weak
8022145µs145µsClass::MOP::::store_metaclass_by_nameClass::MOP::store_metaclass_by_name
592275µs75µsClass::MOP::::__ANON__[:478]Class::MOP::__ANON__[:478]
121115µs15µsClass::MOP::::__ANON__[:286]Class::MOP::__ANON__[:286]
11114µs14µsClass::MOP::::BEGIN@13Class::MOP::BEGIN@13
121113µs13µsClass::MOP::::__ANON__[:132]Class::MOP::__ANON__[:132]
121112µs12µsClass::MOP::::__ANON__[:177]Class::MOP::__ANON__[:177]
121111µs11µsClass::MOP::::__ANON__[:222]Class::MOP::__ANON__[:222]
121111µs11µsClass::MOP::::__ANON__[:269]Class::MOP::__ANON__[:269]
121110µs10µsClass::MOP::::__ANON__[:249]Class::MOP::__ANON__[:249]
11110µs21µsClass::MOP::::BEGIN@18Class::MOP::BEGIN@18
1119µs13µsClass::MOP::::BEGIN@11Class::MOP::BEGIN@11
1118µs12µsClass::MOP::::BEGIN@20Class::MOP::BEGIN@20
1117µs35µsClass::MOP::::BEGIN@17Class::MOP::BEGIN@17
1117µs7µsClass::MOP::::BEGIN@28Class::MOP::BEGIN@28
1117µs36µsClass::MOP::::BEGIN@21Class::MOP::BEGIN@21
1117µs7µsClass::MOP::::BEGIN@3Class::MOP::BEGIN@3
1116µs9µsClass::MOP::::BEGIN@10Class::MOP::BEGIN@10
1116µs45µsClass::MOP::::BEGIN@19Class::MOP::BEGIN@19
1116µs6µsClass::MOP::::BEGIN@30Class::MOP::BEGIN@30
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 7µs within Class::MOP::BEGIN@3 which was called: # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 5
BEGIN {
414µs $Class::MOP::AUTHORITY = 'cpan:STEVAN';
5126µs17µs}
# spent 7µs making 1 call to Class::MOP::BEGIN@3
6{
721µs $Class::MOP::VERSION = '2.1005';
8}
9
10219µs212µs
# spent 9µs (6+3) within Class::MOP::BEGIN@10 which was called: # once (6µs+3µs) by Moose::Exporter::BEGIN@13 at line 10
use strict;
# spent 9µs making 1 call to Class::MOP::BEGIN@10 # spent 3µs making 1 call to strict::import
11221µs218µs
# spent 13µs (9+4) within Class::MOP::BEGIN@11 which was called: # once (9µs+4µs) by Moose::Exporter::BEGIN@13 at line 11
use warnings;
# spent 13µs making 1 call to Class::MOP::BEGIN@11 # spent 4µs making 1 call to warnings::import
12
13240µs114µs
# spent 14µs within Class::MOP::BEGIN@13 which was called: # once (14µs+0s) by Moose::Exporter::BEGIN@13 at line 13
use 5.008;
# spent 14µs making 1 call to Class::MOP::BEGIN@13
14
15290µs11.80ms
# spent 1.80ms (1.29+513µs) within Class::MOP::BEGIN@15 which was called: # once (1.29ms+513µs) by Moose::Exporter::BEGIN@13 at line 15
use MRO::Compat;
# spent 1.80ms making 1 call to Class::MOP::BEGIN@15
16
17225µs262µs
# spent 35µs (7+28) within Class::MOP::BEGIN@17 which was called: # once (7µs+28µs) by Moose::Exporter::BEGIN@13 at line 17
use Carp 'confess';
# spent 35µs making 1 call to Class::MOP::BEGIN@17 # spent 28µs making 1 call to Exporter::import
18343µs232µs
# spent 21µs (10+11) within Class::MOP::BEGIN@18 which was called: # once (10µs+11µs) by Moose::Exporter::BEGIN@13 at line 18
use Class::Load 0.07 ();
# spent 21µs making 1 call to Class::MOP::BEGIN@18 # spent 11µs making 1 call to UNIVERSAL::VERSION
19223µs283µs
# spent 45µs (6+38) within Class::MOP::BEGIN@19 which was called: # once (6µs+38µs) by Moose::Exporter::BEGIN@13 at line 19
use Scalar::Util 'weaken', 'isweak', 'reftype', 'blessed';
# spent 45µs making 1 call to Class::MOP::BEGIN@19 # spent 38µs making 1 call to Exporter::import
20221µs215µs
# spent 12µs (8+3) within Class::MOP::BEGIN@20 which was called: # once (8µs+3µs) by Moose::Exporter::BEGIN@13 at line 20
use Data::OptList;
# spent 12µs making 1 call to Class::MOP::BEGIN@20 # spent 3µs making 1 call to Sub::Install::__ANON__[Sub/Install.pm:171]
21223µs265µs
# spent 36µs (7+29) within Class::MOP::BEGIN@21 which was called: # once (7µs+29µs) by Moose::Exporter::BEGIN@13 at line 21
use Try::Tiny;
# spent 36µs making 1 call to Class::MOP::BEGIN@21 # spent 29µs making 1 call to Exporter::import
22
23290µs1859µs
# spent 859µs (484+375) within Class::MOP::BEGIN@23 which was called: # once (484µs+375µs) by Moose::Exporter::BEGIN@13 at line 23
use Class::MOP::Mixin::AttributeCore;
# spent 859µs making 1 call to Class::MOP::BEGIN@23
24288µs1680µs
# spent 680µs (537+143) within Class::MOP::BEGIN@24 which was called: # once (537µs+143µs) by Moose::Exporter::BEGIN@13 at line 24
use Class::MOP::Mixin::HasAttributes;
# spent 680µs making 1 call to Class::MOP::BEGIN@24
25291µs14.24ms
# spent 4.24ms (1.44+2.80) within Class::MOP::BEGIN@25 which was called: # once (1.44ms+2.80ms) by Moose::Exporter::BEGIN@13 at line 25
use Class::MOP::Mixin::HasMethods;
# spent 4.24ms making 1 call to Class::MOP::BEGIN@25
262107µs118.3ms
# spent 18.3ms (5.92+12.3) within Class::MOP::BEGIN@26 which was called: # once (5.92ms+12.3ms) by Moose::Exporter::BEGIN@13 at line 26
use Class::MOP::Class;
# spent 18.3ms making 1 call to Class::MOP::BEGIN@26
27298µs12.30ms
# spent 2.30ms (2.09+216µs) within Class::MOP::BEGIN@27 which was called: # once (2.09ms+216µs) by Moose::Exporter::BEGIN@13 at line 27
use Class::MOP::Attribute;
# spent 2.30ms making 1 call to Class::MOP::BEGIN@27
28262µs17µs
# spent 7µs within Class::MOP::BEGIN@28 which was called: # once (7µs+0s) by Moose::Exporter::BEGIN@13 at line 28
use Class::MOP::Method;
# spent 7µs making 1 call to Class::MOP::BEGIN@28
29
30
# spent 6µs within Class::MOP::BEGIN@30 which was called: # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 37
BEGIN {
31 *IS_RUNNING_ON_5_10 = ($] < 5.009_005)
32 ? sub () { 0 }
3327µs : sub () { 1 };
34
35 # this is either part of core or set up appropriately by MRO::Compat
36 *check_package_cache_flag = \&mro::get_pkg_gen;
3711.94ms16µs}
# spent 6µs making 1 call to Class::MOP::BEGIN@30
38
39XSLoader::load(
40 'Moose',
41258µs136µs $Class::MOP::{VERSION} ? ${ $Class::MOP::{VERSION} } : ()
# spent 36µ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.
502900ns 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 }
5522094.09ms
# spent 2.30ms within Class::MOP::get_metaclass_by_name which was called 2209 times, avg 1µs/call: # 2018 times (2.13ms+0s) by Class::MOP::Class::initialize at line 47 of Class/MOP/Class.pm, avg 1µs/call # 78 times (65µs+0s) by Class::MOP::Class::_construct_class_instance at line 88 of Class/MOP/Class.pm, avg 831ns/call # 77 times (67µs+0s) by Class::MOP::Class::_single_metaclass_is_compatible at line 282 of Class/MOP/Class.pm, avg 870ns/call # 12 times (11µs+0s) by Moose::Meta::Class::initialize at line 79 of Moose/Meta/Class.pm, avg 950ns/call # 11 times (16µs+0s) by Moose::init_meta at line 170 of Moose.pm, avg 1µs/call # 11 times (12µs+0s) by Class::MOP::Class::_class_metaclass_is_compatible at line 252 of Class/MOP/Class.pm, avg 1µs/call # 2 times (3µs+0s) by Class::MOP::Package::initialize at line 32 of Class/MOP/Package.pm, avg 1µs/call
sub get_metaclass_by_name { $METAS{$_[0]} }
5680192µs
# spent 145µs within Class::MOP::store_metaclass_by_name which was called 80 times, avg 2µs/call: # 78 times (142µs+0s) by Class::MOP::Class::_construct_class_instance at line 113 of Class/MOP/Class.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]}) }
58153569µs15394µs
# spent 498µs (404+94) within Class::MOP::metaclass_is_weak which was called 153 times, avg 3µs/call: # 118 times (307µs+72µs) by Class::MOP::Class::_construct_instance at line 527 of Class/MOP/Class.pm, avg 3µs/call # 35 times (96µs+23µs) by Class::MOP::Class::_inline_preserve_weak_metaclasses at line 691 of Class/MOP/Class.pm, avg 3µs/call
sub metaclass_is_weak { isweak($METAS{$_[0]}) }
# spent 94µs making 153 calls to Scalar::Util::isweak, avg 616ns/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 541µs (467+74) within Class::MOP::class_of which was called 124 times, avg 4µs/call: # 60 times (241µs+38µs) by Moose::Exporter::__ANON__[/usr/local/lib/perl/5.14.2/Moose/Exporter.pm:252] at line 252 of Moose/Exporter.pm, avg 5µs/call # 28 times (99µs+16µs) by Moose::Exporter::__ANON__[/usr/local/lib/perl/5.14.2/Moose/Exporter.pm:42] at line 42 of Moose/Exporter.pm, avg 4µs/call # 13 times (50µs+8µs) by Class::MOP::Class::_superclasses_updated at line 970 of Class/MOP/Class.pm, avg 4µs/call # 11 times (39µs+7µs) by Moose::Meta::Class::superclasses at line 565 of Moose/Meta/Class.pm, avg 4µs/call # 9 times (26µs+4µs) by Moose::Meta::Attribute::BEGIN@24 at line 712 of Moose/Util/TypeConstraints.pm, avg 3µs/call # 2 times (7µs+1µs) by Moose::Meta::TypeCoercion::new at line 39 of Moose/Meta/TypeCoercion.pm, avg 4µs/call # once (4µs+700ns) by Class::MOP::Object::_new at line 24 of Class/MOP/Object.pm
sub class_of {
64372655µs return unless defined $_[0];
6512474µs my $class = blessed($_[0]) || $_[0];
# spent 74µs making 124 calls to Scalar::Util::blessed, avg 597ns/call
66 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 650µs within Class::MOP::_definition_context which was called 123 times, avg 5µs/call: # 3 times (16µs+0s) by Moose::BEGIN@35 at line 309 of Moose/Meta/Role.pm, avg 5µs/call # 2 times (21µs+0s) by Moose::BEGIN@35 at line 92 of Moose/Meta/Role.pm, avg 11µs/call # once (9µs+0s) by Moose::Meta::Role::BEGIN@19 at line 39 of Moose/Meta/Role/Attribute.pm # once (9µs+0s) by Moose::BEGIN@35 at line 401 of Moose/Meta/Role.pm # once (9µs+0s) by Moose::BEGIN@28 at line 102 of Moose/Meta/TypeConstraint.pm # once (7µs+0s) by Moose::BEGIN@39 at line 19 of Moose/Meta/Role/Application/ToClass.pm # once (6µs+0s) by Moose::BEGIN@27 at line 38 of Moose/Meta/Class.pm # once (6µs+0s) by Moose::BEGIN@29 at line 20 of Moose/Meta/TypeCoercion.pm # once (6µs+0s) by Moose::BEGIN@28 at line 28 of Moose/Meta/TypeConstraint.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@38 at line 18 of Moose/Meta/TypeConstraint/Enum.pm # once (6µs+0s) by Moose::BEGIN@38 at line 22 of Moose/Meta/Role/Application/RoleSummation.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@33 at line 24 of Moose/Meta/TypeConstraint/Union.pm # once (6µs+0s) by Moose::BEGIN@35 at line 155 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::BEGIN@36 at line 24 of Moose/Meta/Role/Composite.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@37 at line 19 of Moose/Meta/TypeConstraint/Role.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@39 at line 22 of Moose/Meta/TypeConstraint/DuckType.pm # once (6µs+0s) by Moose::BEGIN@37 at line 17 of Moose/Meta/Role/Application.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@36 at line 19 of Moose/Meta/TypeConstraint/Class.pm # once (6µs+0s) by Moose::BEGIN@36 at line 37 of Moose/Meta/Role/Composite.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@42 at line 18 of Moose/Meta/TypeConstraint/Registry.pm # once (6µs+0s) by Moose::BEGIN@41 at line 21 of Moose/Meta/Role/Application/ToInstance.pm # once (6µs+0s) by Moose::Meta::Role::BEGIN@19 at line 18 of Moose/Meta/Role/Attribute.pm # once (6µs+0s) by Moose::Meta::Role::BEGIN@21 at line 22 of Moose/Meta/Role/Method/Required.pm # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 133 # once (6µs+0s) by Moose::BEGIN@28 at line 118 of Moose/Meta/TypeConstraint.pm # once (6µs+0s) by Moose::Meta::Role::BEGIN@22 at line 17 of Moose/Meta/Role/Method/Conflicting.pm # once (6µs+0s) by Moose::BEGIN@35 at line 162 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@42 at line 28 of Moose/Meta/TypeConstraint/Registry.pm # once (6µs+0s) by Moose::BEGIN@29 at line 32 of Moose/Meta/TypeCoercion.pm # once (6µs+0s) by Moose::BEGIN@28 at line 32 of Moose/Meta/TypeConstraint.pm # once (6µs+0s) by Moose::Meta::TypeConstraint::Parameterized::BEGIN@15 at line 19 of Moose/Meta/TypeConstraint/Parameterizable.pm # once (6µs+0s) by Moose::BEGIN@29 at line 23 of Moose/Meta/TypeCoercion.pm # once (6µs+0s) by Moose::Meta::TypeCoercion::BEGIN@14 at line 31 of Moose/Meta/Attribute.pm # once (6µs+0s) by Moose::BEGIN@35 at line 141 of Moose/Meta/Role.pm # once (6µs+0s) by Moose::BEGIN@39 at line 24 of Moose/Meta/Role/Application/ToClass.pm # once (6µs+0s) by Moose::Exporter::BEGIN@13 at line 137 # once (6µs+0s) by Moose::Util::TypeConstraints::BEGIN@34 at line 19 of Moose/Meta/TypeConstraint/Parameterized.pm # once (5µs+0s) by Moose::BEGIN@35 at line 134 of Moose/Meta/Role.pm # once (5µs+0s) by Moose::BEGIN@37 at line 24 of Moose/Meta/Role/Application.pm # once (5µs+0s) by Moose::Util::TypeConstraints::BEGIN@38 at line 23 of Moose/Meta/TypeConstraint/Enum.pm # once (5µs+0s) by Moose::BEGIN@27 at line 44 of Moose/Meta/Class.pm # once (5µs+0s) by Moose::BEGIN@27 at line 47 of Moose/Meta/Class.pm # once (5µs+0s) by Moose::Meta::Role::BEGIN@19 at line 46 of Moose/Meta/Role/Attribute.pm # once (5µs+0s) by Moose::BEGIN@35 at line 128 of Moose/Meta/Role.pm # once (5µs+0s) by Moose::BEGIN@35 at line 169 of Moose/Meta/Role.pm # once (5µs+0s) by Moose::BEGIN@28 at line 43 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::BEGIN@36 at line 40 of Moose/Meta/Role/Composite.pm # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 618 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 534 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 287 # once (5µs+0s) by Moose::Meta::TypeConstraint::Parameterized::BEGIN@15 at line 25 of Moose/Meta/TypeConstraint/Parameterizable.pm # once (5µs+0s) by Moose::Meta::Role::BEGIN@19 at line 25 of Moose/Meta/Role/Attribute.pm # once (5µs+0s) by Moose::BEGIN@35 at line 355 of Moose/Meta/Role.pm # once (5µs+0s) by Moose::BEGIN@28 at line 52 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 490 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 198 # once (5µs+0s) by Moose::Meta::Role::BEGIN@19 at line 32 of Moose/Meta/Role/Attribute.pm # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 291 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 597 # once (5µs+0s) by Moose::BEGIN@35 at line 148 of Moose/Meta/Role.pm # once (5µs+0s) by Moose::BEGIN@28 at line 46 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 386 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 460 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 250 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 601 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 178 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 572 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 562 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 409 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 270 # once (5µs+0s) by Moose::Util::TypeConstraints::BEGIN@34 at line 25 of Moose/Meta/TypeConstraint/Parameterized.pm # once (5µs+0s) by Moose::BEGIN@27 at line 61 of Moose/Meta/Class.pm # once (5µs+0s) by Moose::BEGIN@28 at line 91 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 370 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 150 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 479 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 327 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 425 # once (5µs+0s) by base::import at line 14 of Moose/Meta/Mixin/AttributeCore.pm # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 182 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 223 # once (5µs+0s) by Moose::BEGIN@27 at line 55 of Moose/Meta/Class.pm # once (5µs+0s) by Moose::BEGIN@28 at line 84 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 401 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 581 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 551 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 504 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 307 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 441 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 355 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 317 # once (5µs+0s) by Moose::BEGIN@28 at line 112 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 543 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 511 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 518 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 497 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 417 # once (5µs+0s) by Moose::BEGIN@27 at line 67 of Moose/Meta/Class.pm # once (5µs+0s) by Moose::BEGIN@28 at line 78 of Moose/Meta/TypeConstraint.pm # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 635 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 433 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 378 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 625 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 649 # once (5µs+0s) by Moose::Exporter::BEGIN@13 at line 642 # once (4µs+0s) by Moose::Exporter::BEGIN@13 at line 338 # once (4µs+0s) by Moose::Exporter::BEGIN@13 at line 394 # once (4µs+0s) by Moose::Exporter::BEGIN@13 at line 449 # once (4µs+0s) by base::import at line 21 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 28 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 101 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 35 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 92 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 69 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 42 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 48 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 62 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 55 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 84 of Moose/Meta/Mixin/AttributeCore.pm # once (4µs+0s) by base::import at line 76 of Moose/Meta/Mixin/AttributeCore.pm
sub _definition_context {
89369849µs my %context;
90 @context{qw(package file line)} = caller(1);
91
92 return (
93 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 },
1321222µs
# spent 13µs within Class::MOP::__ANON__[/usr/local/lib/perl/5.14.2/Class/MOP.pm:132] which was called 12 times, avg 1µs/call: # 12 times (13µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 49 of Class/MOP/Mixin/AttributeCore.pm, avg 1µs/call
default => sub { {} },
133114µs41.07ms _definition_context(),
# spent 531µs making 1 call to Class::MOP::Mixin::meta # spent 499µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 34µs making 1 call to Class::MOP::Attribute::new # spent 6µs making 1 call to Class::MOP::_definition_context
134 ))
135);
136
137110µs4282µsClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 246µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 18µs making 1 call to Class::MOP::Attribute::new # spent 12µs making 1 call to Class::MOP::Mixin::meta # spent 6µs making 1 call to Class::MOP::_definition_context
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
15019µs4278µsClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 241µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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 },
1771222µs
# spent 12µs within Class::MOP::__ANON__[/usr/local/lib/perl/5.14.2/Class/MOP.pm:177] which was called 12 times, avg 1µs/call: # 12 times (12µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 49 of Class/MOP/Mixin/AttributeCore.pm, avg 1µs/call
default => sub { {} },
178112µs4562µs _definition_context(),
# spent 268µs making 1 call to Class::MOP::Mixin::meta # spent 267µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 22µs making 1 call to Class::MOP::Attribute::new # spent 5µs making 1 call to Class::MOP::_definition_context
179 ))
180);
181
18219µs4268µsClass::MOP::Mixin::HasAttributes->meta->add_attribute(
# spent 236µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 16µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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
198115µs4588µsClass::MOP::Package->meta->add_attribute(
# spent 317µs making 1 call to Class::MOP::Object::meta # spent 246µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 19µs making 1 call to Class::MOP::Attribute::new # spent 5µ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,
2221219µs
# spent 11µs within Class::MOP::__ANON__[/usr/local/lib/perl/5.14.2/Class/MOP.pm:222] which was called 12 times, avg 908ns/call: # 12 times (11µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 49 of Class/MOP/Mixin/AttributeCore.pm, avg 908ns/call
default => sub { \undef },
223110µs4265µs _definition_context(),
# spent 228µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Object::meta # spent 5µ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,
2491218µs
# spent 10µs within Class::MOP::__ANON__[/usr/local/lib/perl/5.14.2/Class/MOP.pm:249] which was called 12 times, avg 850ns/call: # 12 times (10µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 49 of Class/MOP/Mixin/AttributeCore.pm, avg 850ns/call
default => sub { \undef },
250113µs4534µs _definition_context(),
# spent 263µs making 1 call to Class::MOP::Object::meta # spent 245µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 5µ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,
2691219µs
# spent 11µs within Class::MOP::__ANON__[/usr/local/lib/perl/5.14.2/Class/MOP.pm:269] which was called 12 times, avg 892ns/call: # 12 times (11µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 49 of Class/MOP/Mixin/AttributeCore.pm, avg 892ns/call
default => sub { \undef },
270111µs4271µs _definition_context(),
# spent 234µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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,
2861222µs
# spent 15µs within Class::MOP::__ANON__[/usr/local/lib/perl/5.14.2/Class/MOP.pm:286] which was called 12 times, avg 1µs/call: # 12 times (15µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 49 of Class/MOP/Mixin/AttributeCore.pm, avg 1µs/call
default => sub { \undef },
287113µs4832µs _definition_context(),
# spent 522µs making 1 call to Class::MOP::Object::meta # spent 280µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 26µs making 1 call to Class::MOP::Attribute::new # spent 5µs making 1 call to Class::MOP::_definition_context
288 ))
289);
290
29117µs4249µsClass::MOP::Class->meta->add_attribute(
# spent 215µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 18µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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
30716µs4272µsClass::MOP::Class->meta->add_attribute(
# spent 241µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 17µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Object::meta # spent 5µ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
31716µs4246µsClass::MOP::Class->meta->add_attribute(
# spent 215µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 16µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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
32716µs4237µsClass::MOP::Class->meta->add_attribute(
# spent 205µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 16µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Object::meta # spent 5µ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
33816µs4242µsClass::MOP::Class->meta->add_attribute(
# spent 210µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 18µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Object::meta # spent 4µ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
35518µs4493µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 248µs making 1 call to Class::MOP::Mixin::meta # spent 226µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 5µ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
37017µs4417µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 377µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 24µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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
37817µs4373µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 337µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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
38617µs4370µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 334µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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
39416µs4255µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 220µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Mixin::meta # spent 4µ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
40117µs4414µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 377µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 22µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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
40917µs4383µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 334µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 23µs making 1 call to Class::MOP::Mixin::meta # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 5µ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
41717µs4375µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 339µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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
42517µs4384µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 344µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 25µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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
43317µs4371µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 335µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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
44116µs4260µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 225µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 20µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Mixin::meta # spent 5µ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
44918µs4500µsClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 464µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Mixin::meta # spent 4µ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
46018µs4647µsClass::MOP::Attribute->meta->add_attribute(
# spent 380µs making 1 call to Class::MOP::Object::meta # spent 241µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 21µs making 1 call to Class::MOP::Attribute::new # spent 5µ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 },
47859129µs
# spent 75µs within Class::MOP::__ANON__[/usr/local/lib/perl/5.14.2/Class/MOP.pm:478] which was called 59 times, avg 1µs/call: # 58 times (73µs+0s) by Moose::Meta::Attribute::_new at line 21 of (eval 62)[Eval/Closure.pm:144], avg 1µs/call # once (2µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 49 of Class/MOP/Mixin/AttributeCore.pm
default => sub { [] },
47918µs4293µs _definition_context(),
# spent 252µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 25µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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, @_);
48615µs261µs});
# spent 51µs making 1 call to Class::MOP::Mixin::HasMethods::add_method # spent 11µs making 1 call to Class::MOP::Object::meta
487
488## --------------------------------------------------------
489## Class::MOP::Method
49018µs4496µsClass::MOP::Method->meta->add_attribute(
# spent 243µs making 1 call to Class::MOP::Object::meta # spent 230µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 18µs making 1 call to Class::MOP::Attribute::new # spent 5µ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
49716µs4338µsClass::MOP::Method->meta->add_attribute(
# spent 308µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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
50417µs4331µsClass::MOP::Method->meta->add_attribute(
# spent 300µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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
51116µs4327µsClass::MOP::Method->meta->add_attribute(
# spent 297µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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
51817µs4570µsClass::MOP::Method->meta->add_attribute(
# spent 540µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Object::meta # spent 5µ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
53418µs4376µsClass::MOP::Method::Wrapped->meta->add_attribute(
# spent 254µs making 1 call to Class::MOP::Object::meta # spent 101µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 5µ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
54319µs4568µsClass::MOP::Method::Generated->meta->add_attribute(
# spent 309µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 238µs making 1 call to Class::MOP::Object::meta # spent 16µs making 1 call to Class::MOP::Attribute::new # spent 5µ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
55116µs4386µsClass::MOP::Method::Generated->meta->add_attribute(
# spent 355µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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
56219µs4581µsClass::MOP::Method::Inlined->meta->add_attribute(
# spent 310µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 249µs making 1 call to Class::MOP::Object::meta # spent 17µs making 1 call to Class::MOP::Attribute::new # spent 5µ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
57219µs4492µsClass::MOP::Method::Accessor->meta->add_attribute(
# spent 246µs making 1 call to Class::MOP::Object::meta # spent 225µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 16µs making 1 call to Class::MOP::Attribute::new # spent 5µ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
58116µs4321µsClass::MOP::Method::Accessor->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 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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 { +{} },
597111µs4567µs _definition_context(),
# spent 299µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 240µs making 1 call to Class::MOP::Object::meta # spent 23µs making 1 call to Class::MOP::Attribute::new # spent 5µs making 1 call to Class::MOP::_definition_context
598 ))
599);
600
60116µs4251µsClass::MOP::Method::Constructor->meta->add_attribute(
# spent 220µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 16µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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
61818µs4488µsClass::MOP::Instance->meta->add_attribute(
# spent 240µs making 1 call to Class::MOP::Object::meta # spent 227µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 16µs making 1 call to Class::MOP::Attribute::new # spent 5µ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
62516µs4273µsClass::MOP::Instance->meta->add_attribute(
# spent 243µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Object::meta # spent 5µ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
63516µs4247µsClass::MOP::Instance->meta->add_attribute(
# spent 213µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 19µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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
642112µs4268µsClass::MOP::Instance->meta->add_attribute(
# spent 238µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 10µs making 1 call to Class::MOP::Object::meta # spent 5µ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µs4262µsClass::MOP::Instance->meta->add_attribute(
# spent 231µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 15µs making 1 call to Class::MOP::Attribute::new # spent 11µs making 1 call to Class::MOP::Object::meta # spent 5µ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
66018µs21.01msClass::MOP::Object->meta->_add_meta_method('meta');
# spent 999µs making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 11µ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
66616µs2477µsClass::MOP::Mixin->meta->_add_meta_method('meta');
# spent 466µs making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 11µs making 1 call to Class::MOP::Mixin::meta
667
668177µ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
67215µs2114µsClass::MOP::Instance->meta->get_meta_instance;
# spent 102µs making 1 call to Class::MOP::Class::get_meta_instance # spent 13µs making 1 call to Class::MOP::Object::meta
673
674# pretend the add_method never happened. it hasn't yet affected anything
67512µs19µsundef Class::MOP::Instance->meta->{_package_cache_flag};
# spent 9µ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,
687157µs2813.9ms) for qw/
# spent 13.5ms making 14 calls to Class::MOP::Class::make_immutable, avg 963µs/call # spent 424µs making 14 calls to Class::MOP::Object::meta, avg 30µ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,
713117µs8411µs) for qw/
# spent 371µs making 4 calls to Class::MOP::Class::make_immutable, avg 93µs/call # spent 40µs making 4 calls to Class::MOP::Mixin::meta, avg 10µs/call
714 Class::MOP::Mixin
715 Class::MOP::Mixin::AttributeCore
716 Class::MOP::Mixin::HasAttributes
717 Class::MOP::Mixin::HasMethods
718/;
719
720188µs1;
721
722# ABSTRACT: A Meta Object Protocol for Perl 5
723
724__END__
 
# spent 724µs within Class::MOP::get_code_info which was called 674 times, avg 1µs/call: # 501 times (574µs+0s) by Class::MOP::Mixin::HasMethods::add_method at line 81 of Class/MOP/Mixin/HasMethods.pm, avg 1µs/call # 171 times (148µs+0s) by Class::MOP::Mixin::HasMethods::_code_is_mine at line 95 of Class/MOP/Mixin/HasMethods.pm, avg 863ns/call # 2 times (2µ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