← Index
NYTProf Performance Profile   « block view • line view • sub view »
For 01.HTTP.t
  Run on Tue May 4 15:25:55 2010
Reported on Tue May 4 15:26:16 2010

File /usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Class/MOP/Instance.pm
Statements Executed 3064
Statement Execution Time 6.71ms
Subroutines — ordered by exclusive time
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
367431.33ms2.03msClass::MOP::Instance::::inline_set_slot_valueClass::MOP::Instance::inline_set_slot_value
38111.21ms2.09msClass::MOP::Instance::::BUILDARGSClass::MOP::Instance::BUILDARGS
45331907µs907µsClass::MOP::Instance::::inline_slot_accessClass::MOP::Instance::inline_slot_access
3811437µs2.85msClass::MOP::Instance::::newClass::MOP::Instance::new
611361µs399µsClass::MOP::Instance::::create_instanceClass::MOP::Instance::create_instance
7332261µs440µsClass::MOP::Instance::::inline_get_slot_valueClass::MOP::Instance::inline_get_slot_value
3411221µs221µsClass::MOP::Instance::::_newClass::MOP::Instance::_new
6621139µs139µsClass::MOP::Instance::::set_slot_valueClass::MOP::Instance::set_slot_value
121187µs116µsClass::MOP::Instance::::clone_instanceClass::MOP::Instance::clone_instance
841171µs71µsClass::MOP::Instance::::is_inlinableClass::MOP::Instance::is_inlinable
131167µs96µsClass::MOP::Instance::::inline_is_slot_initializedClass::MOP::Instance::inline_is_slot_initialized
322266µs66µsClass::MOP::Instance::::inline_create_instanceClass::MOP::Instance::inline_create_instance
182157µs68µsClass::MOP::Instance::::_class_nameClass::MOP::Instance::_class_name
381136µs36µsClass::MOP::Instance::::is_dependent_on_superclassesClass::MOP::Instance::is_dependent_on_superclasses
11115µs17µsClass::MOP::Instance::::BEGIN@4Class::MOP::Instance::BEGIN@4
61113µs13µsClass::MOP::Instance::::get_slot_valueClass::MOP::Instance::get_slot_value
1118µs392µsClass::MOP::Instance::::BEGIN@13Class::MOP::Instance::BEGIN@13
5117µs7µsClass::MOP::Instance::::associated_metaclassClass::MOP::Instance::associated_metaclass
2117µs7µsClass::MOP::Instance::::is_slot_initializedClass::MOP::Instance::is_slot_initialized
1117µs15µsClass::MOP::Instance::::BEGIN@5Class::MOP::Instance::BEGIN@5
1116µs42µsClass::MOP::Instance::::BEGIN@7Class::MOP::Instance::BEGIN@7
0000s0sClass::MOP::Instance::::deinitialize_all_slotsClass::MOP::Instance::deinitialize_all_slots
0000s0sClass::MOP::Instance::::deinitialize_slotClass::MOP::Instance::deinitialize_slot
0000s0sClass::MOP::Instance::::get_all_attributesClass::MOP::Instance::get_all_attributes
0000s0sClass::MOP::Instance::::get_all_slotsClass::MOP::Instance::get_all_slots
0000s0sClass::MOP::Instance::::initialize_all_slotsClass::MOP::Instance::initialize_all_slots
0000s0sClass::MOP::Instance::::initialize_slotClass::MOP::Instance::initialize_slot
0000s0sClass::MOP::Instance::::inline_deinitialize_slotClass::MOP::Instance::inline_deinitialize_slot
0000s0sClass::MOP::Instance::::inline_initialize_slotClass::MOP::Instance::inline_initialize_slot
0000s0sClass::MOP::Instance::::inline_rebless_instance_structureClass::MOP::Instance::inline_rebless_instance_structure
0000s0sClass::MOP::Instance::::inline_strengthen_slot_valueClass::MOP::Instance::inline_strengthen_slot_value
0000s0sClass::MOP::Instance::::inline_weaken_slot_valueClass::MOP::Instance::inline_weaken_slot_value
0000s0sClass::MOP::Instance::::is_valid_slotClass::MOP::Instance::is_valid_slot
0000s0sClass::MOP::Instance::::rebless_instance_structureClass::MOP::Instance::rebless_instance_structure
0000s0sClass::MOP::Instance::::strengthen_slot_valueClass::MOP::Instance::strengthen_slot_value
0000s0sClass::MOP::Instance::::weaken_slot_valueClass::MOP::Instance::weaken_slot_value
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::Instance;
3
4322µs220µs
# spent 17µs (15+3) within Class::MOP::Instance::BEGIN@4 which was called # once (15µs+3µs) by Class::MOP::Class::BEGIN@7 at line 4
use strict;
# spent 17µs making 1 call to Class::MOP::Instance::BEGIN@4 # spent 3µs making 1 call to strict::import
5320µs223µs
# spent 15µs (7+8) within Class::MOP::Instance::BEGIN@5 which was called # once (7µs+8µs) by Class::MOP::Class::BEGIN@7 at line 5
use warnings;
# spent 15µs making 1 call to Class::MOP::Instance::BEGIN@5 # spent 8µs making 1 call to warnings::import
6
7351µs278µs
# spent 42µs (6+36) within Class::MOP::Instance::BEGIN@7 which was called # once (6µs+36µs) by Class::MOP::Class::BEGIN@7 at line 7
use Scalar::Util 'weaken', 'blessed';
# spent 42µs making 1 call to Class::MOP::Instance::BEGIN@7 # spent 36µs making 1 call to Exporter::import
8
91800nsour $VERSION = '0.98';
10116µs$VERSION = eval $VERSION;
111300nsour $AUTHORITY = 'cpan:STEVAN';
12
1331.25ms2777µs
# spent 392µs (8+385) within Class::MOP::Instance::BEGIN@13 which was called # once (8µs+385µs) by Class::MOP::Class::BEGIN@7 at line 13
use base 'Class::MOP::Object';
# spent 392µs making 1 call to Class::MOP::Instance::BEGIN@13 # spent 385µs making 1 call to base::import
14
15
# spent 2.09ms (1.21+881µs) within Class::MOP::Instance::BUILDARGS which was called 38 times, avg 55µs/call: # 38 times (1.21ms+881µs) by Class::MOP::Instance::new at line 36, avg 55µs/call
sub BUILDARGS {
163843µs my ($class, @args) = @_;
17
1838147µs3825µs if ( @args == 1 ) {
# spent 25µs making 38 calls to Scalar::Util::blessed, avg 661ns/call
19 unshift @args, "associated_metaclass";
20 } elsif ( @args >= 2 && blessed($args[0]) && $args[0]->isa("Class::MOP::Class") ) {
21 # compat mode
22 my ( $meta, @attrs ) = @args;
23 @args = ( associated_metaclass => $meta, attributes => \@attrs );
24 }
25
263849µs my %options = @args;
27 # FIXME lazy_build
28327383µs289856µs $options{slots} ||= [ map { $_->slots } @{ $options{attributes} || [] } ];
# spent 856µs making 289 calls to Class::MOP::Attribute::slots, avg 3µs/call
2938257µs $options{slot_hash} = { map { $_ => undef } @{ $options{slots} } }; # FIXME lazy_build
30
3138103µs return \%options;
32}
33
34
# spent 2.85ms (437µs+2.41) within Class::MOP::Instance::new which was called 38 times, avg 75µs/call: # 38 times (437µs+2.41ms) by Class::MOP::Class::_create_meta_instance at line 390 of Class/MOP/Class.pm, avg 75µs/call
sub new {
353814µs my $class = shift;
363862µs382.09ms my $options = $class->BUILDARGS(@_);
# spent 2.09ms making 38 calls to Class::MOP::Instance::BUILDARGS, avg 55µs/call
37
38 # FIXME replace with a proper constructor
3938123µs38275µs my $instance = $class->_new(%$options);
# spent 221µs making 34 calls to Class::MOP::Instance::_new, avg 7µs/call # spent 54µs making 4 calls to Moose::Meta::Instance::_new, avg 13µs/call
40
41 # FIXME weak_ref => 1,
4238111µs3841µs weaken($instance->{'associated_metaclass'});
# spent 41µs making 38 calls to Scalar::Util::weaken, avg 1µs/call
43
443889µs return $instance;
45}
46
47
# spent 221µs within Class::MOP::Instance::_new which was called 34 times, avg 7µs/call: # 34 times (221µs+0s) by Class::MOP::Instance::new at line 39, avg 7µs/call
sub _new {
483411µs my $class = shift;
493411µs return Class::MOP::Class->initialize($class)->new_object(@_)
50 if $class ne __PACKAGE__;
51
523444µs my $params = @_ == 1 ? $_[0] : {@_};
5334174µs return bless {
54 # NOTE:
55 # I am not sure that it makes
56 # sense to pass in the meta
57 # The ideal would be to just
58 # pass in the class name, but
59 # that is placing too much of
60 # an assumption on bless(),
61 # which is *probably* a safe
62 # assumption,.. but you can
63 # never tell <:)
64 'associated_metaclass' => $params->{associated_metaclass},
65 'attributes' => $params->{attributes},
66 'slots' => $params->{slots},
67 'slot_hash' => $params->{slot_hash},
68 } => $class;
69}
70
711870µs1010µs
# spent 68µs (57+11) within Class::MOP::Instance::_class_name which was called 18 times, avg 4µs/call: # 12 times (27µs+2µs) by Class::MOP::Instance::clone_instance at line 82, avg 2µs/call # 6 times (30µs+8µs) by Class::MOP::Instance::create_instance at line 77, avg 6µs/call
sub _class_name { $_[0]->{_class_name} ||= $_[0]->associated_metaclass->name }
# spent 7µs making 5 calls to Class::MOP::Instance::associated_metaclass, avg 1µs/call # spent 3µs making 5 calls to Class::MOP::Package::name, avg 640ns/call
72
73515µs
# spent 7µs within Class::MOP::Instance::associated_metaclass which was called 5 times, avg 1µs/call: # 5 times (7µs+0s) by Class::MOP::Instance::_class_name at line 71, avg 1µs/call
sub associated_metaclass { $_[0]{'associated_metaclass'} }
74
75
# spent 399µs (361+39) within Class::MOP::Instance::create_instance which was called 6 times, avg 67µs/call: # 6 times (361µs+39µs) by Class::MOP::Class::_construct_instance at line 362 of Class/MOP/Class.pm, avg 67µs/call
sub create_instance {
7662µs my $self = shift;
776357µs638µs bless {}, $self->_class_name;
# spent 38µs making 6 calls to Class::MOP::Instance::_class_name, avg 6µs/call
78}
79
80
# spent 116µs (87+30) within Class::MOP::Instance::clone_instance which was called 12 times, avg 10µs/call: # 12 times (87µs+30µs) by Class::MOP::Class::_clone_instance at line 420 of Class/MOP/Class.pm, avg 10µs/call
sub clone_instance {
81125µs my ($self, $instance) = @_;
821273µs1230µs bless { %$instance }, $self->_class_name;
# spent 30µs making 12 calls to Class::MOP::Instance::_class_name, avg 2µs/call
83}
84
85# operations on meta instance
86
87sub get_all_slots {
88 my $self = shift;
89 return @{$self->{'slots'}};
90}
91
92sub get_all_attributes {
93 my $self = shift;
94 return @{$self->{attributes}};
95}
96
97sub is_valid_slot {
98 my ($self, $slot_name) = @_;
99 exists $self->{'slot_hash'}->{$slot_name};
100}
101
102# operations on created instances
103
104
# spent 13µs within Class::MOP::Instance::get_slot_value which was called 6 times, avg 2µs/call: # 6 times (13µs+0s) by Class::MOP::Attribute::get_raw_value at line 272 of Class/MOP/Attribute.pm, avg 2µs/call
sub get_slot_value {
10564µs my ($self, $instance, $slot_name) = @_;
106611µs $instance->{$slot_name};
107}
108
109
# spent 139µs within Class::MOP::Instance::set_slot_value which was called 66 times, avg 2µs/call: # 54 times (111µs+0s) by Class::MOP::Attribute::_set_initial_slot_value at line 146 of Class/MOP/Attribute.pm, avg 2µs/call # 12 times (27µs+0s) by Class::MOP::Attribute::set_raw_value at line 264 of Class/MOP/Attribute.pm, avg 2µs/call
sub set_slot_value {
1106637µs my ($self, $instance, $slot_name, $value) = @_;
11166142µs $instance->{$slot_name} = $value;
112}
113
114sub initialize_slot {
115 my ($self, $instance, $slot_name) = @_;
116 return;
117}
118
119sub deinitialize_slot {
120 my ( $self, $instance, $slot_name ) = @_;
121 delete $instance->{$slot_name};
122}
123
124sub initialize_all_slots {
125 my ($self, $instance) = @_;
126 foreach my $slot_name ($self->get_all_slots) {
127 $self->initialize_slot($instance, $slot_name);
128 }
129}
130
131sub deinitialize_all_slots {
132 my ($self, $instance) = @_;
133 foreach my $slot_name ($self->get_all_slots) {
134 $self->deinitialize_slot($instance, $slot_name);
135 }
136}
137
138
# spent 7µs within Class::MOP::Instance::is_slot_initialized which was called 2 times, avg 4µs/call: # 2 times (7µs+0s) by Class::MOP::Attribute::has_value at line 280 of Class/MOP/Attribute.pm, avg 4µs/call
sub is_slot_initialized {
13922µs my ($self, $instance, $slot_name, $value) = @_;
14026µs exists $instance->{$slot_name};
141}
142
143sub weaken_slot_value {
144 my ($self, $instance, $slot_name) = @_;
145 weaken $instance->{$slot_name};
146}
147
148sub strengthen_slot_value {
149 my ($self, $instance, $slot_name) = @_;
150 $self->set_slot_value($instance, $slot_name, $self->get_slot_value($instance, $slot_name));
151}
152
153sub rebless_instance_structure {
154 my ($self, $instance, $metaclass) = @_;
155
156 # we use $_[1] here because of t/306_rebless_overload.t regressions on 5.8.8
157 bless $_[1], $metaclass->name;
158}
159
160
# spent 36µs within Class::MOP::Instance::is_dependent_on_superclasses which was called 38 times, avg 937ns/call: # 38 times (36µs+0s) by Class::MOP::Class::_create_meta_instance at line 395 of Class/MOP/Class.pm, avg 937ns/call
sub is_dependent_on_superclasses {
1613864µs return; # for meta instances that require updates on inherited slot changes
162}
163
164# inlinable operation snippets
165
16684124µs
# spent 71µs within Class::MOP::Instance::is_inlinable which was called 84 times, avg 849ns/call: # 84 times (71µs+0s) by Class::MOP::Attribute::_process_accessors at line 320 of Class/MOP/Attribute.pm, avg 849ns/call
sub is_inlinable { 1 }
167
168
# spent 66µs within Class::MOP::Instance::inline_create_instance which was called 32 times, avg 2µs/call: # 31 times (63µs+0s) by Class::MOP::Method::Constructor::_generate_constructor_method_inline at line 113 of Class/MOP/Method/Constructor.pm, avg 2µs/call # once (3µs+0s) by Moose::Meta::Method::Constructor::_generate_instance at line 121 of Moose/Meta/Method/Constructor.pm
sub inline_create_instance {
1693217µs my ($self, $class_variable) = @_;
1703272µs 'bless {} => ' . $class_variable;
171}
172
173
# spent 907µs within Class::MOP::Instance::inline_slot_access which was called 453 times, avg 2µs/call: # 367 times (698µs+0s) by Class::MOP::Instance::inline_set_slot_value at line 185, avg 2µs/call # 73 times (179µs+0s) by Class::MOP::Instance::inline_get_slot_value at line 180, avg 2µs/call # 13 times (29µs+0s) by Class::MOP::Instance::inline_is_slot_initialized at line 199, avg 2µs/call
sub inline_slot_access {
174453146µs my ($self, $instance, $slot_name) = @_;
1754531.10ms sprintf q[%s->{"%s"}], $instance, quotemeta($slot_name);
176}
177
178
# spent 440µs (261+179) within Class::MOP::Instance::inline_get_slot_value which was called 73 times, avg 6µs/call: # 52 times (184µs+129µs) by Class::MOP::Method::Accessor::_generate_reader_method_inline at line 157 of Class/MOP/Method/Accessor.pm, avg 6µs/call # 15 times (48µs+31µs) by Class::MOP::Method::Accessor::_generate_accessor_method_inline at line 138 of Class/MOP/Method/Accessor.pm, avg 5µs/call # 6 times (29µs+18µs) by Moose::Meta::Method::Accessor::_inline_get at line 254 of Moose/Meta/Method/Accessor.pm, avg 8µs/call
sub inline_get_slot_value {
1797339µs my ($self, $instance, $slot_name) = @_;
18073197µs73179µs $self->inline_slot_access($instance, $slot_name);
# spent 179µs making 73 calls to Class::MOP::Instance::inline_slot_access, avg 2µs/call
181}
182
183
# spent 2.03ms (1.33+698µs) within Class::MOP::Instance::inline_set_slot_value which was called 367 times, avg 6µs/call: # 343 times (1.23ms+640µs) by Class::MOP::Method::Constructor::_generate_slot_initializer at line 159 of Class/MOP/Method/Constructor.pm, avg 5µs/call # 15 times (65µs+39µs) by Class::MOP::Method::Accessor::_generate_accessor_method_inline at line 138 of Class/MOP/Method/Accessor.pm, avg 7µs/call # 6 times (24µs+12µs) by Moose::Meta::Method::Constructor::_generate_slot_assignment at line 272 of Moose/Meta/Method/Constructor.pm, avg 6µs/call # 3 times (13µs+7µs) by Class::MOP::Method::Accessor::_generate_writer_method_inline at line 175 of Class/MOP/Method/Accessor.pm, avg 7µs/call
sub inline_set_slot_value {
184367183µs my ($self, $instance, $slot_name, $value) = @_;
1853671.00ms367698µs $self->inline_slot_access($instance, $slot_name) . " = $value",
# spent 698µs making 367 calls to Class::MOP::Instance::inline_slot_access, avg 2µs/call
186}
187
188sub inline_initialize_slot {
189 my ($self, $instance, $slot_name) = @_;
190 return '';
191}
192
193sub inline_deinitialize_slot {
194 my ($self, $instance, $slot_name) = @_;
195 "delete " . $self->inline_slot_access($instance, $slot_name);
196}
197
# spent 96µs (67+29) within Class::MOP::Instance::inline_is_slot_initialized which was called 13 times, avg 7µs/call: # 13 times (67µs+29µs) by Class::MOP::Method::Accessor::_generate_predicate_method_inline at line 192 of Class/MOP/Method/Accessor.pm, avg 7µs/call
sub inline_is_slot_initialized {
198139µs my ($self, $instance, $slot_name) = @_;
1991349µs1329µs "exists " . $self->inline_slot_access($instance, $slot_name);
# spent 29µs making 13 calls to Class::MOP::Instance::inline_slot_access, avg 2µs/call
200}
201
202sub inline_weaken_slot_value {
203 my ($self, $instance, $slot_name) = @_;
204 sprintf "Scalar::Util::weaken( %s )", $self->inline_slot_access($instance, $slot_name);
205}
206
207sub inline_strengthen_slot_value {
208 my ($self, $instance, $slot_name) = @_;
209 $self->inline_set_slot_value($instance, $slot_name, $self->inline_slot_access($instance, $slot_name));
210}
211
212sub inline_rebless_instance_structure {
213 my ($self, $instance, $class_variable) = @_;
214 "bless $instance => $class_variable";
215}
216
21714µs1;
218
219__END__
220
221=pod
222
223=head1 NAME
224
225Class::MOP::Instance - Instance Meta Object
226
227=head1 DESCRIPTION
228
229The Instance Protocol controls the creation of object instances, and
230the storage of attribute values in those instances.
231
232Using this API directly in your own code violates encapsulation, and
233we recommend that you use the appropriate APIs in L<Class::MOP::Class>
234and L<Class::MOP::Attribute> instead. Those APIs in turn call the
235methods in this class as appropriate.
236
237This class also participates in generating inlined code by providing
238snippets of code to access an object instance.
239
240=head1 METHODS
241
242=head2 Object construction
243
244=over 4
245
246=item B<< Class::MOP::Instance->new(%options) >>
247
248This method creates a new meta-instance object.
249
250It accepts the following keys in C<%options>:
251
252=over 8
253
254=item * associated_metaclass
255
256The L<Class::MOP::Class> object for which instances will be created.
257
258=item * attributes
259
260An array reference of L<Class::MOP::Attribute> objects. These are the
261attributes which can be stored in each instance.
262
263=back
264
265=back
266
267=head2 Creating and altering instances
268
269=over 4
270
271=item B<< $metainstance->create_instance >>
272
273This method returns a reference blessed into the associated
274metaclass's class.
275
276The default is to use a hash reference. Subclasses can override this.
277
278=item B<< $metainstance->clone_instance($instance) >>
279
280Given an instance, this method creates a new object by making
281I<shallow> clone of the original.
282
283=back
284
285=head2 Introspection
286
287=over 4
288
289=item B<< $metainstance->associated_metaclass >>
290
291This returns the L<Class::MOP::Class> object associated with the
292meta-instance object.
293
294=item B<< $metainstance->get_all_slots >>
295
296This returns a list of slot names stored in object instances. In
297almost all cases, slot names correspond directly attribute names.
298
299=item B<< $metainstance->is_valid_slot($slot_name) >>
300
301This will return true if C<$slot_name> is a valid slot name.
302
303=item B<< $metainstance->get_all_attributes >>
304
305This returns a list of attributes corresponding to the attributes
306passed to the constructor.
307
308=back
309
310=head2 Operations on Instance Structures
311
312It's important to understand that the meta-instance object is a
313different entity from the actual instances it creates. For this
314reason, any operations on the C<$instance_structure> always require
315that the object instance be passed to the method.
316
317=over 4
318
319=item B<< $metainstance->get_slot_value($instance_structure, $slot_name) >>
320
321=item B<< $metainstance->set_slot_value($instance_structure, $slot_name, $value) >>
322
323=item B<< $metainstance->initialize_slot($instance_structure, $slot_name) >>
324
325=item B<< $metainstance->deinitialize_slot($instance_structure, $slot_name) >>
326
327=item B<< $metainstance->initialize_all_slots($instance_structure) >>
328
329=item B<< $metainstance->deinitialize_all_slots($instance_structure) >>
330
331=item B<< $metainstance->is_slot_initialized($instance_structure, $slot_name) >>
332
333=item B<< $metainstance->weaken_slot_value($instance_structure, $slot_name) >>
334
335=item B<< $metainstance->strengthen_slot_value($instance_structure, $slot_name) >>
336
337=item B<< $metainstance->rebless_instance_structure($instance_structure, $new_metaclass) >>
338
339The exact details of what each method does should be fairly obvious
340from the method name.
341
342=back
343
344=head2 Inlinable Instance Operations
345
346=over 4
347
348=item B<< $metainstance->is_inlinable >>
349
350This is a boolean that indicates whether or not slot access operations
351can be inlined. By default it is true, but subclasses can override
352this.
353
354=item B<< $metainstance->inline_create_instance($class_variable) >>
355
356This method expects a string that, I<when inlined>, will become a
357class name. This would literally be something like C<'$class'>, not an
358actual class name.
359
360It returns a snippet of code that creates a new object for the
361class. This is something like C< bless {}, $class_name >.
362
363=item B<< $metainstance->inline_slot_access($instance_variable, $slot_name) >>
364
365=item B<< $metainstance->inline_get_slot_value($instance_variable, $slot_name) >>
366
367=item B<< $metainstance->inline_set_slot_value($instance_variable, $slot_name, $value) >>
368
369=item B<< $metainstance->inline_initialize_slot($instance_variable, $slot_name) >>
370
371=item B<< $metainstance->inline_deinitialize_slot($instance_variable, $slot_name) >>
372
373=item B<< $metainstance->inline_is_slot_initialized($instance_variable, $slot_name) >>
374
375=item B<< $metainstance->inline_weaken_slot_value($instance_variable, $slot_name) >>
376
377=item B<< $metainstance->inline_strengthen_slot_value($instance_variable, $slot_name) >>
378
379These methods all expect two arguments. The first is the name of a
380variable, than when inlined, will represent the object
381instance. Typically this will be a literal string like C<'$_[0]'>.
382
383The second argument is a slot name.
384
385The method returns a snippet of code that, when inlined, performs some
386operation on the instance.
387
388=item B<< $metainstance->inline_rebless_instance_structure($instance_variable, $class_variable) >>
389
390This takes the name of a variable that will, when inlined, represent the object
391instance, and the name of a variable that will represent the class to rebless
392into, and returns code to rebless an instance into a class.
393
394=back
395
396=head2 Introspection
397
398=over 4
399
400=item B<< Class::MOP::Instance->meta >>
401
402This will return a L<Class::MOP::Class> instance for this class.
403
404It should also be noted that L<Class::MOP> will actually bootstrap
405this module by installing a number of attribute meta-objects into its
406metaclass.
407
408=back
409
410=head1 AUTHORS
411
412Yuval Kogman E<lt>nothingmuch@woobling.comE<gt>
413
414Stevan Little E<lt>stevan@iinteractive.comE<gt>
415
416=head1 COPYRIGHT AND LICENSE
417
418Copyright 2006-2010 by Infinity Interactive, Inc.
419
420L<http://www.iinteractive.com>
421
422This library is free software; you can redistribute it and/or modify
423it under the same terms as Perl itself.
424
425=cut
426