diff --git a/src/NieczaPassBegin.pm6 b/src/NieczaPassBegin.pm6 index 1a269e56..49e8c4ee 100644 --- a/src/NieczaPassBegin.pm6 +++ b/src/NieczaPassBegin.pm6 @@ -362,13 +362,13 @@ augment class Op::PackageDef { #OK exist } my @ns = $.ourpkg ?? - (@( @*opensubs[*-1].find_pkg($.ourpkg) ), $.var) !! + (@( @*opensubs[*-1].find_pkg($.ourpkg) ), $.ourvar) !! $*unit.anon_stash; my $n = pop(@ns); $*unit.create_stash([@ns, $n]); @*opensubs[*-1].add_my_stash($.var, [ @ns, $n ]); - @*opensubs[*-1].add_pkg_exports($*unit, $.var, [ @ns, $n ], $.exports); + @*opensubs[*-1].add_pkg_exports($*unit, $.name, [ @ns, $n ], $.exports); if !$.stub { my $obj = $pclass.new(name => $.name).xref; $*unit.bind_item([ @ns, $n ], $obj); diff --git a/src/Op.pm6 b/src/Op.pm6 index 682e5bae..cca9bb21 100644 --- a/src/Op.pm6 +++ b/src/Op.pm6 @@ -580,6 +580,7 @@ class PackageDef is Op { has $.body; # Body has $.exports = []; # Array of Str has $.ourpkg; # Array of Str + has $.ourvar; # Str method code($ ) { if $.stub { diff --git a/src/niecza b/src/niecza index 9b4e403b..a45d7c21 100644 --- a/src/niecza +++ b/src/niecza @@ -102,7 +102,7 @@ method package_def ($/) { my $optype = %_decl2class{$*PKGDECL}; my $blocktype = $*PKGDECL; my $bodyvar = self.gensym; - my $ourpkg = Any; + my ($ourpkg, $ourvar); if $scope eq 'augment' { my $r = self.mangle_longname($[0]); @@ -111,14 +111,15 @@ method package_def ($/) { } elsif $ { my $r = self.mangle_longname($[0]); $name = $r; - if ($r:exists) && $scope ne 'our' { + if ($r:exists) && $scope ne 'our' { $/.CURSOR.sorry("Block name $ requires our scope"); $scope = 'our'; } - $ourpkg = ($r:exists) ?? $r !! ['OUR']; - # TODO: no lexical alias for %r:exists - # (Requires adding a separate "ourname" slot in Op::PackageDef) - $outervar = ($scope eq 'anon') ?? self.gensym + if $scope eq 'our' { + $ourpkg = ($r:exists) ?? $r !! ['OUR']; + $ourvar = $r; + } + $outervar = ($scope eq 'anon' || ($r:exists)) ?? self.gensym !! $name; } else { $name = 'ANON'; @@ -154,6 +155,7 @@ method package_def ($/) { exports => @export, bodyvar => $bodyvar, ourpkg => $ourpkg, + ourvar => $ourvar, body => $cbody); } else { make $optype.new( @@ -161,6 +163,7 @@ method package_def ($/) { name => $name, var => $outervar, ourpkg => $ourpkg, + ourvar => $ourvar, stub => True); } } diff --git a/test2.pl b/test2.pl index 6b64bc81..b9400929 100644 --- a/test2.pl +++ b/test2.pl @@ -23,6 +23,9 @@ } is Foo9215::Inner.pie, 64, ":: class names work, without predecl"; + + eval_dies_ok 'my class A::B { }', 'cannot use :: with my'; + eval_dies_ok 'my class A::B { }; B', 'A::B does not install B alias'; } #is $?FILE, 'test.pl', '$?FILE works';