1 package MooseX::Antlers::Visitor::NameTracking;
5 use namespace::clean -except => 'meta';
7 has '_current_trace_name' => (is => 'ro');
8 has 'root_name' => (is => 'ro');
11 my ($orig, $self) = (shift, shift);
12 local $self->{_current_trace_name}
13 = ($self->{_current_trace_name}||$self->root_name);
14 return $self->$orig(@_);
17 around visit_hash_entry => sub {
18 my ($orig, $self) = (shift, shift);
19 my $key = $_[0]; # $key, $value
20 local $self->{_current_trace_name}
21 = $self->{_current_trace_name}.'->{'.(perlstring $key).'}';
22 return $self->$orig(@_);
25 around visit_array_entry => sub {
26 my ($orig, $self) = (shift, shift);
27 my $index = $_[1]; # $value, $index
28 local $self->{_current_trace_name}
29 = $self->{_current_trace_name}.'->['.$index.']';
30 return $self->$orig(@_);
33 around visit_scalar => sub {
34 my ($orig, $self) = (shift, shift);
35 local $self->{_current_trace_name} = '${'.$self->{_current_trace_name}.'}';
36 return $self->$orig(@_);