From dfcce517a6051bd8e7500922fc84d3c9460cc7e4 Mon Sep 17 00:00:00 2001 From: Stefan O'Rear Date: Sat, 23 Oct 2010 20:51:14 -0700 Subject: [PATCH] Allow superclasses with double colons --- src/Metamodel.pm | 2 +- src/Niecza/Actions.pm | 5 +++-- src/Op.pm | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Metamodel.pm b/src/Metamodel.pm index 87d84135..7c82f4dc 100644 --- a/src/Metamodel.pm +++ b/src/Metamodel.pm @@ -973,7 +973,7 @@ sub Op::Super::begin { $ns = $unit->deref($ns); die "superclass $self->name declared in an augment" if $opensubs[-1]->augmenting; - $ns->add_super($unit->get_stash_obj(@{ $opensubs[-1]->find_pkg($self->name) })); + $ns->add_super($unit->get_stash_obj(@{ $opensubs[-1]->find_pkg([ @{ $self->path // ['MY'] }, $self->name ]) })); } sub Op::SubDef::begin { diff --git a/src/Niecza/Actions.pm b/src/Niecza/Actions.pm index e365a998..b70b10e6 100644 --- a/src/Niecza/Actions.pm +++ b/src/Niecza/Actions.pm @@ -2187,7 +2187,8 @@ sub process_package_traits { my ($cl, $M, $export, @tr) = @_; for (@tr) { if (exists $_->{_ast}{name}) { - push @r, Op::Super->new(node($M), name => $_->{_ast}{name}); + push @r, Op::Super->new(node($M), name => $_->{_ast}{name}, + path => $_->{_ast}{path}); } elsif ($_->{_ast}{export}) { if ($export) { push @$export, @{ $_->{_ast}{export} }; @@ -2446,7 +2447,7 @@ sub trait_mod__S_is { my ($cl, $M) = @_; my $noparm; if ($M->is_name($trait)) { - $M->{_ast} = { name => $trait }; + $M->{_ast} = $cl->mangle_longname($M->{longname}); $noparm = 'Superclasses cannot have parameters'; } elsif ($trait eq 'export') { $M->{_ast} = { export => [ 'DEFAULT', 'ALL' ] }; diff --git a/src/Op.pm b/src/Op.pm index 8f9cc8fc..38882bf4 100644 --- a/src/Op.pm +++ b/src/Op.pm @@ -732,6 +732,7 @@ use CgOp; extends 'Op'; has name => (isa => 'Str', is => 'ro'); + has path => (isa => 'Maybe[ArrayRef[Str]]', is => 'ro'); sub code { my ($self, $body) = @_;