[svn:parrot] r44903 - in branches/ops_pct/compilers/opsc/src/Ops: . Compiler

bacek at svn.parrot.org bacek at svn.parrot.org
Fri Mar 12 21:48:27 UTC 2010


Author: bacek
Date: Fri Mar 12 21:48:22 2010
New Revision: 44903
URL: https://trac.parrot.org/parrot/changeset/44903

Log:
Use OpLib to assign op codes

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

Modified: branches/ops_pct/compilers/opsc/src/Ops/Compiler.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Compiler.pm	Fri Mar 12 21:47:48 2010	(r44902)
+++ branches/ops_pct/compilers/opsc/src/Ops/Compiler.pm	Fri Mar 12 21:48:22 2010	(r44903)
@@ -10,5 +10,9 @@
     Ops::Compiler.parseactions(Ops::Compiler::Actions);
 }
 
+method set_oplib($oplib) {
+    $Ops::Compiler::Actions::OPLIB := $oplib;
+    $Ops::Compiler::Actions::CODE  := $oplib.max_op_num;
+}
 
 # vim: ft=perl6 expandtab shiftwidth=4:

Modified: branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm	Fri Mar 12 21:47:48 2010	(r44902)
+++ branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm	Fri Mar 12 21:48:22 2010	(r44903)
@@ -36,9 +36,18 @@
     for $<op> {
         my $ops := $_.ast;
         my $skiptable := $OPLIB.skiptable;
+        my $optable   := $OPLIB.optable;
         for @($ops) -> $op {
-            if !$skiptable.exists($op.full_name) {
-                $op<code> := $CODE++;
+            my $full_name := $op.full_name;
+            if ! $skiptable.exists($full_name) {
+                if $optable.exists($full_name) {
+                    $op<code> := $optable{$full_name};
+                }
+                else {
+                    say('# experimental. Not in ops.num ' ~ $full_name);
+                    $op<code> := $CODE++;
+                }
+
                 $past<ops>.push($op);
             }
         }

Modified: branches/ops_pct/compilers/opsc/src/Ops/File.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/File.pm	Fri Mar 12 21:47:48 2010	(r44902)
+++ branches/ops_pct/compilers/opsc/src/Ops/File.pm	Fri Mar 12 21:48:22 2010	(r44903)
@@ -189,6 +189,9 @@
     self<ops>     := list(); # Ops
     self<preamble>:= '';
 
+    self<compiler>:= pir::compreg__Ps('Ops');
+    self<compiler>.set_oplib($oplib);
+
     self._set_version();
 
     for @files { self.read_ops( $_, $nolines ) }
@@ -233,7 +236,7 @@
 }
 
 method compile_ops($str) {
-    my $compiler := pir::compreg__Ps('Ops');
+    my $compiler := self<compiler>;
     my $past     := $compiler.compile($str, :target('past'));
 
     for @($past<ops>) {


More information about the parrot-commits mailing list