[svn:parrot] r44574 - in branches/ops_pct/compilers/opsc: src/Ops src/Ops/Compiler t

bacek at svn.parrot.org bacek at svn.parrot.org
Mon Mar 1 12:35:02 UTC 2010


Author: bacek
Date: Mon Mar  1 12:35:02 2010
New Revision: 44574
URL: https://trac.parrot.org/parrot/changeset/44574

Log:
Create op variants during parsing

Modified:
   branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm
   branches/ops_pct/compilers/opsc/src/Ops/Op.pm
   branches/ops_pct/compilers/opsc/t/03-past.t

Modified: branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm	Mon Mar  1 12:34:35 2010	(r44573)
+++ branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm	Mon Mar  1 12:35:02 2010	(r44574)
@@ -51,6 +51,10 @@
         @args := @($<op_params>[0].ast);
     }
 
+    my @norm_args := normalize_args(@args);
+    # We have to clone @norm_args. Otherwise it will be destroyed...
+    my @variants  := expand_args(pir::clone__PP(@norm_args));
+
     my $past := Ops::Op.new(
         :code(-1),
         :name(~$<op_name>),
@@ -58,12 +62,14 @@
 
         :flags(%flags),
         :args(@args),
-        :normalized_args(normalize_args(@args)),
+        :normalized_args(@norm_args),
+        :variants(@variants),
 
         $<op_body>.ast
     );
 
     make $past;
+
 }
 
 # Normalize args
@@ -131,7 +137,7 @@
 =end
 sub expand_args(@args) {
 
-    return list() unless + at args;
+    return list() unless @args;
 
     my $arg := @args.shift;
 

Modified: branches/ops_pct/compilers/opsc/src/Ops/Op.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Op.pm	Mon Mar  1 12:34:35 2010	(r44573)
+++ branches/ops_pct/compilers/opsc/src/Ops/Op.pm	Mon Mar  1 12:35:02 2010	(r44574)
@@ -86,7 +86,7 @@
 
 =end
 
-method new(:$code!, :$type!, :$name!, :@args!, :@normalized_args!, :%flags!) {
+method new(:$code!, :$type!, :$name!, :@args!, :@normalized_args!, :@variants!, :%flags!) {
 
     self<CODE> := $code;
     self<TYPE> := $type;
@@ -94,6 +94,7 @@
     self<NAME>  := $name;
     self<ARGS>  := @args;
     self<NORMARGS>  := @normalized_args;
+    self<VARIANTS>  := @variants;
     self<FLAGS> := %flags;
     self<BODY>  := '';
     self<JUMP>  := 0;
@@ -141,6 +142,8 @@
 
 method arguments() { self<ARGS> }
 
+method variants() { self<VARIANTS> }
+
 method full_name() {
     my $name      := self.name;
     my @arg_types := self.arg_types;
@@ -152,6 +155,7 @@
     return $trans.prefix ~ self.full_name;
 }
 
+
 =begin
 
 =item C<flags()>

Modified: branches/ops_pct/compilers/opsc/t/03-past.t
==============================================================================
--- branches/ops_pct/compilers/opsc/t/03-past.t	Mon Mar  1 12:34:35 2010	(r44573)
+++ branches/ops_pct/compilers/opsc/t/03-past.t	Mon Mar  1 12:35:02 2010	(r44574)
@@ -82,7 +82,7 @@
 ok($arg<type> eq 'nc', 'Third type is correct');
 ok(!($arg<variant>), 'Third arg without variant');
 
-my @expanded := Ops::Compiler::Actions::expand_args(@args);
+my @expanded := $op.variants;
 
 #_dumper(@expanded);
 ok( @expanded[0].join('_') eq 'i_p_nc', "First variant correct");


More information about the parrot-commits mailing list