Author: pmichaud
Date: Sun Dec 28 22:31:52 2008
New Revision: 34552
Modified:
branches/rvar/languages/perl6/src/parser/actions.pm
Log:
[rakudo]: Restore &-sigil vars.
Modified: branches/rvar/languages/perl6/src/parser/actions.pm
==============================================================================
--- branches/rvar/languages/perl6/src/parser/actions.pm (original)
+++ branches/rvar/languages/perl6/src/parser/actions.pm Sun Dec 28 22:31:52 2008
@@ -1806,6 +1806,14 @@
my $varname := $sigil ~ $name;
$past := PAST::Var.new( :name($varname), :node($/) );
+ if $sigil eq '&' {
+ $varname := $name;
+ $past.name($varname);
+ $past.scope('package');
+ my $sym := outer_symbol($varname);
+ if $sym && $sym<scope> { $past.scope( $sym<scope> ); }
+ }
+
## if twigil is ^ or :, it's a placeholder var
if $twigil eq '^' || $twigil eq ':' {
if $?BLOCK.symbol('!signature') {
@@ -2485,6 +2493,18 @@
}
+# search through outer blocks for a symbol table entry
+sub outer_symbol($name) {
+ our @?BLOCK;
+ my $symbol;
+ for @?BLOCK {
+ $symbol := $_.symbol($name);
+ if $symbol { return $symbol; }
+ }
+ return $symbol;
+}
+
+
# Used by all calling code to process arguments into the correct form.
sub build_call($args) {
if !$args.isa(PAST::Op) || $args.name() ne 'infix:,' {