X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDX%2FStep%2FConsiderProposition.pm;h=386048c33cf6ac0cb6a9d6d17dacaec694826193;hb=2fe8c22aab1d36482c0b09065d29c58f3f688e58;hp=485d14b5638da37a3b232f1da366527b0c72136b;hpb=ae884abdc56545736f05853481013dc506423e72;p=scpubgit%2FDX.git diff --git a/lib/DX/Step/ConsiderProposition.pm b/lib/DX/Step/ConsiderProposition.pm index 485d14b..386048c 100644 --- a/lib/DX/Step/ConsiderProposition.pm +++ b/lib/DX/Step/ConsiderProposition.pm @@ -15,7 +15,36 @@ sub apply_to { @{$self->proposition->for_deparse->[1]}, ], ]; - return $ss->but(next_step => $self->proposition->resolve_for($hyp->scope)); + my $old_scope = (my $old_hyp = $ss->current_hypothesis)->scope; + my @old_locals = @{$old_scope->locals}; + my $top_level = $#old_locals; + my $top = pop @old_locals; + my $top_members = $top->members; + my @new_names = grep !exists $top_members->{$_}, + keys %{$self->proposition->introduced_names}; + my $new_scope = $old_scope->but( + locals => [ + @old_locals, + $top->but(members => { + %{$top_members}, + map +($_ => DX::Value::Unset->new( + action_builder => DX::ActionBuilder::UnsetValue->new( + target_path => [ $top_level, $_ ], + ) + ) + ), @new_names + }), + ], + lex_map => { + %{$old_scope->lex_map}, + map +($_ => [ $top_level, $_ ]), @new_names + } + ); + my $new_hyp = $old_hyp->but(scope => $new_scope); + return $ss->but( + current_hypothesis => $new_hyp, + next_step => $self->proposition->resolve_for($new_scope) + ); } 1;