has locals => (is => 'ro', isa => ArrayRef[DictValue], required => 1);
+has lex_map => (is => 'ro', isa => HashRef, required => 1);
+
#has known_facts => (is => 'ro', required => 1);
sub lookup_predicate {
}
sub lookup {
- my ($self, $name) = @_;
- my $lookup_in = ($name =~ /^[_A-Z]/ ? $self->locals->[-1] : $self->globals);
- return $lookup_in->get_member_at($name)
- or die "No such name in scope: $name";
+ my ($self, $symbol) = @_;
+ if ($symbol =~ /^[_A-Z]/) {
+ my @mapped = @{$self->lex_map->{$symbol}||[]}
+ or die "No such name in scope: $symbol";
+ my $targ = $self;
+ $targ = $targ->get_member_at($_) for @mapped;
+ return $targ;
+ }
+ return $self->globals->get_member_at($symbol)
+ or die "No such name in scope: $symbol";
}
sub depth { $#{$_[0]->locals} }