Author: jonathan
Date: Tue Dec 16 10:17:30 2008
New Revision: 33969
Modified:
branches/rakudoreg/languages/perl6/src/parser/actions.pm
Log:
[rakudo] Fix term action to respect namespaces. This fixes up all remaining
broken spec tests, most likely (need to pull latest changes in from trunk to be
sure of that, since more was unfudeged since I last sync'd).
Modified: branches/rakudoreg/languages/perl6/src/parser/actions.pm
==============================================================================
--- branches/rakudoreg/languages/perl6/src/parser/actions.pm (original)
+++ branches/rakudoreg/languages/perl6/src/parser/actions.pm Tue Dec 16
10:17:30 2008
@@ -2961,16 +2961,53 @@
method term($/, $key) {
my $past;
+
+ my @ns;
+ my $short_name;
+ if $<name> {
+ @ns := Perl6::Compiler.parse_name(~$<name>);
+ $short_name := @ns.pop();
+ }
+
if $key eq 'noarg' {
- $past := PAST::Op.new( :name( ~$<name> ), :pasttype('call') );
+ if @ns {
+ $past := PAST::Op.new(
+ PAST::Var.new(
+ :name($short_name),
+ :namespace(@ns),
+ :scope('package')
+ ),
+ :pasttype('call')
+ );
+ }
+ else {
+ $past := PAST::Op.new( :name( $short_name ), :pasttype('call') );
+ }
}
elsif $key eq 'args' {
$past := $($<args>);
- $past.name( ~$<name> );
+ if @ns {
+ $past.unshift(PAST::Var.new(
+ :name($short_name),
+ :namespace(@ns),
+ :scope('package')
+ ));
+ } else {
+ $past.name( $short_name );
+ }
}
elsif $key eq 'func args' {
$past := build_call( $( $<semilist> ) );
- $past.name( ~$<name> );
+ if @ns {
+ $past.unshift(PAST::Var.new(
+ :name($short_name),
+ :namespace(@ns),
+ :scope('package')
+ ));
+ }
+ else {
+ $past.name( $short_name );
+ }
}
elsif $key eq 'VAR' {
$past := PAST::Op.new(