package DX::Op::Prop;
+use DX::VarRef;
use Moo;
with 'DX::Role::Op';
$state, map +($_ => $self->$_), qw(of name value)
);
die "property name must be bound" unless $args{name}->is_bound;
- my $name = $args{name}->bound_value;
+ my $name = $state->resolve_value($args{name});
if ($args{of}->is_bound) {
if ($args{value}->is_bound) {
- if ($args{of}->bound_value->$name eq $args{value}->bound_value) {
+ if ($state->resolve_value($args{of})->$name
+ eq $state->resolve_value($args{value})) {
return $state->add_dependencies(
$args{of}->id => $args{value}->id,
$args{value}->id => $args{of}->id,
}
return $state->backtrack;
}
- my $value = $args{of}->bound_value;
+ my $value = $state->resolve_value($args{of});
if ($value->can("has_${name}") and not $value->${\"has_${name}"}) {
return $state->backtrack;
}
- return $state->bind_value($args{value}->id, $value->$name)
+ my $var_ref = DX::VarRef->new(var_id => $args{of}->id, derive => $name);
+ return $state->bind_value($args{value}->id, $var_ref)
->add_dependencies($args{value}->id => $args{of}->id)
->then($self->next);
}