sub _eval_code {
my ( $self, $source ) = @_;
- # NOTE:
- # set up the environment
- my $attr = $self->associated_attribute;
- my $type_constraint_obj = $attr->type_constraint;
- my $environment = {
- '$attr' => \$attr,
- '$meta' => \$self,
- '$type_constraint_obj' => \$type_constraint_obj,
- '$type_constraint' => \($type_constraint_obj
- ? $type_constraint_obj->_compiled_type_constraint
- : undef),
- };
+ my $environment = $self->_eval_environment;
- #warn "code for " . $attr->name . " =>\n" . $source . "\n";
my ( $code, $e ) = $self->_compile_code( environment => $environment, code => $source );
$self->throw_error(
return $code;
}
+sub _eval_environment {
+ my $self = shift;
+
+ my $attr = $self->associated_attribute;
+ my $type_constraint_obj = $attr->type_constraint;
+
+ return {
+ '$attr' => \$attr,
+ '$meta' => \$self,
+ '$type_constraint_obj' => \$type_constraint_obj,
+ '$type_constraint' => \(
+ $type_constraint_obj
+ ? $type_constraint_obj->_compiled_type_constraint
+ : undef
+ ),
+ };
+}
+
sub _generate_accessor_method_inline {
my $self = $_[0];
my $attr = $self->associated_attribute;
}
sub _inline_store {
- my ($self, $instance, $value) = @_;
- my $attr = $self->associated_attribute;
-
- my $mi = $attr->associated_class->get_meta_instance;
+ my ( $self, $instance, $value ) = @_;
- my $code = $mi->inline_set_slot_value($instance, $attr->slots, $value) . ";";
- $code .= $mi->inline_weaken_slot_value($instance, $attr->slots, $value) . ";"
- if $attr->is_weak_ref;
- return $code;
+ return $self->associated_attribute->inline_store( $instance, $value );
}
sub _inline_get_old_value_for_trigger {
my $attr = $self->associated_attribute;
return '' unless $attr->has_trigger;
- my $mi = $attr->associated_class->get_meta_instance;
- my $pred = $mi->inline_is_slot_initialized($instance, $attr->name);
-
return
'my @old = '
- . $pred . q{ ? }
+ . $self->_inline_has($instance) . q{ ? }
. $self->_inline_get($instance) . q{ : ()} . ";\n";
}
sub _inline_get {
my ($self, $instance) = @_;
- my $attr = $self->associated_attribute;
- my $mi = $attr->associated_class->get_meta_instance;
-
- return $mi->inline_get_slot_value($instance, $attr->slots);
+ return $self->associated_attribute->inline_get($instance);
}
sub _inline_access {
my ($self, $instance) = @_;
- my $attr = $self->associated_attribute;
-
- my $mi = $attr->associated_class->get_meta_instance;
- return $mi->inline_slot_access($instance, $attr->slots);
+ return $self->associated_attribute->inline_access($instance);
}
sub _inline_has {
my ($self, $instance) = @_;
- my $attr = $self->associated_attribute;
-
- my $mi = $attr->associated_class->get_meta_instance;
- return $mi->inline_is_slot_initialized($instance, $attr->slots);
+ return $self->associated_attribute->inline_has($instance);
}
sub _inline_auto_deref {