Front page | perl.cvs.parrot |
Postings from January 2009
[svn:parrot] r34788 - branches/rvar/languages/perl6/src/parser
From:
pmichaud
Date:
January 1, 2009 22:11
Subject:
[svn:parrot] r34788 - branches/rvar/languages/perl6/src/parser
Message ID:
20090102061129.5BCF8CB9FA@x12.develooper.com
Author: pmichaud
Date: Thu Jan 1 22:11:28 2009
New Revision: 34788
Modified:
branches/rvar/languages/perl6/src/parser/actions.pm
Log:
[rakudo]: Be quite a bit smarter about block generation within signatures.
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 Thu Jan 1 22:11:28 2009
@@ -897,18 +897,17 @@
method signature($/, $key) {
- our $?SIGNATURE;
- our $?SIGNATURE_BLOCK;
our @?BLOCK;
if $key eq 'open' {
- $?SIGNATURE := PAST::Op.new( :pasttype('stmts'), :node($/) );
- $?SIGNATURE_BLOCK := PAST::Block.new( $?SIGNATURE,
- :blocktype('declaration') );
- $?SIGNATURE_BLOCK<signature> := 1;
- @?BLOCK.unshift($?SIGNATURE_BLOCK);
+ my $sigpast := PAST::Op.new( :pasttype('stmts'), :node($/) );
+ my $block := PAST::Block.new( $sigpast, :blocktype('declaration') );
+ $block<signature> := 1;
+ @?BLOCK.unshift($block);
}
else {
- my $loadinit := $?SIGNATURE_BLOCK.loadinit();
+ my $block := @?BLOCK.shift();
+ my $sigpast := $block[0];
+ my $loadinit := $block.loadinit();
my $sigobj := PAST::Var.new( :scope('register') );
## create a Signature object and attach to the block
@@ -920,17 +919,17 @@
## loop through parameters of signature
my $arity := $<parameter> ?? +@($<parameter>) !! 0;
- $?SIGNATURE_BLOCK.arity($arity);
+ $block.arity($arity);
my $i := 0;
while $i < $arity {
my $var := $( $<parameter>[$i] );
my $name := $var.name();
## add var node to block
- $?SIGNATURE.push( $var );
+ $sigpast.push( $var );
if $var<type_binding> {
- $?SIGNATURE.push( $var<type_binding> );
+ $sigpast.push( $var<type_binding> );
}
## add parameter to the signature object
@@ -963,8 +962,8 @@
## restore block stack and return signature ast
our $?BLOCK_OPEN;
- $?BLOCK_OPEN := @?BLOCK.shift();
- make $?SIGNATURE;
+ $?BLOCK_OPEN := $block;
+ make $sigpast;
}
}
@@ -1025,8 +1024,8 @@
)
);
$var<type_binding> := $type_past;
- our $?SIGNATURE_BLOCK;
- $?SIGNATURE_BLOCK.symbol( $type_past.name(), :scope('lexical') );
+ our @?BLOCK;
+ @?BLOCK[0].symbol( $type_past.name(), :scope('lexical') );
}
else {
$typelist.push( $type_past );
@@ -1068,8 +1067,8 @@
# Declare symbol as lexical in current (signature) block.
# This is needed in case any post_constraints try to reference
# this new param_var.
- our $?SIGNATURE_BLOCK;
- $?SIGNATURE_BLOCK.symbol( $name, :scope('lexical') );
+ our @?BLOCK;
+ @?BLOCK[0].symbol( $name, :scope('lexical') );
make $var;
}
-
[svn:parrot] r34788 - branches/rvar/languages/perl6/src/parser
by pmichaud