[svn:parrot] r44855 - branches/ops_pct/compilers/opsc/src/Ops/Compiler

bacek at svn.parrot.org bacek at svn.parrot.org
Wed Mar 10 10:19:00 UTC 2010


Author: bacek
Date: Wed Mar 10 10:19:00 2010
New Revision: 44855
URL: https://trac.parrot.org/parrot/changeset/44855

Log:
Resurrect merging on 'inline' chunks

Modified:
   branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm

Modified: branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm	Wed Mar 10 10:18:35 2010	(r44854)
+++ branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm	Wed Mar 10 10:19:00 2010	(r44855)
@@ -74,12 +74,11 @@
 
     my $op := Ops::Op.new(
         :name(~$<op_name>),
-        #$<op_body>.ast
     );
 
-    for $<op_body><body_word> {
-        #say('# BANG');
-        $op.push($_.ast);
+    # Flatten PAST::Stmts into Op.
+    for @($<op_body>.ast) {
+        $op.push($_);
     }
 
     # FIXME op.jump($<op_body>.ast<jump>);
@@ -230,8 +229,8 @@
     make $past;
 }
 
-method _op_body($/) {
-    my $past := PAST::Block.new(
+method op_body($/) {
+    my $past := PAST::Stmts.new(
         :node($/),
     );
     $past<jump> := 0;
@@ -249,43 +248,12 @@
                 $prev_words
             ));
             $prev_words := '';
-            
+
             if $_<macro_param> {
-                $past.push(PAST::Var.new(
-                    :name(~$_<macro_param><num>)
-                ));
+                $past.push($_<macro_param>.ast);
             }
             elsif $_<op_macro> {
-                my $op := $_<op_macro>;
-                my $op_arg;
-                #macro_sanity_checks($op);
-                if $op<macro_arg><macro_param> {
-                    $op_arg := PAST::Var.new(
-                        :name(~$op<macro_arg><macro_param><num>)
-                    );
-                }
-                elsif $op<macro_arg><macro_word> {
-                    $op_arg := PAST::Op.new(
-                        :pasttype('inline'),
-                        ~$op<macro_arg><macro_word>
-                    );
-                }
-                else {
-                    $op_arg := PAST::Op.new(
-                        :pasttype('inline'),
-                        ''
-                    );
-                }
-                my $macro_name := ~$op<macro_type> ~ '_' ~ lc(~$op<macro_destination>);
-                if $macro_name eq 'restart_offset' || $macro_name eq 'goto_offset' {
-                        $past<jump> := 'PARROT_JUMP_RELATIVE';
-                }
-                my $macro_past := PAST::Op.new(
-                    :pasttype('call'),
-                    :name($macro_name),
-                    $op_arg
-                );
-                $past.push($macro_past);
+                $past.push($_<op_macro>.ast);
             }
         }
     }


More information about the parrot-commits mailing list