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

cotto at svn.parrot.org cotto at svn.parrot.org
Fri May 21 08:15:34 UTC 2010


Author: cotto
Date: Fri May 21 08:15:34 2010
New Revision: 46847
URL: https://trac.parrot.org/parrot/changeset/46847

Log:
[opsc] add Ops::Renumberer file, mikehh++ for noticing

Added:
   branches/ops_pct/compilers/opsc/src/Ops/Renumberer.pm

Added: branches/ops_pct/compilers/opsc/src/Ops/Renumberer.pm
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/opsc/src/Ops/Renumberer.pm	Fri May 21 08:15:34 2010	(r46847)
@@ -0,0 +1,119 @@
+#! nqp
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+INIT {
+    pir::load_bytecode("dumper.pbc");
+};
+
+class Ops::Renumberer is Hash;
+
+=begin NAME
+
+C<Ops::Renumberer> - renumber ops.num.
+
+=end NAME
+
+=begin DESCRIPTION
+
+This class is responsible for renumbering src/ops/ops.num when the number or
+order of ops there needs to be changed.
+
+=end DESCRIPTION
+
+=begin SYNOPSIS
+
+    my $renum := Ops::Renumberer.new( :ops_file($f) );
+
+=end SYNOPSIS
+
+=begin ATTRIBUTES
+
+=over 4
+
+=item * C<$.max_op_num>
+
+Scalar holding number of highest non-experimental op.  Example:
+
+    'max_op_num' => 1246,
+
+=back
+
+=end ATTRIBUTES
+
+=begin METHODS
+
+=over 4
+
+=item C<new>
+
+Build an Ope::Renumberer.
+
+(It's NQP. In Perl 6 it should be submethod and invoked automatically)
+
+=end METHODS
+
+method new(:$ops_file!) {
+    self<ops_file> := $ops_file;
+
+    self;
+}
+
+=begin METHODS
+
+=item C<needs_renumbering>
+
+Check if ops.num needs to be renumbered.
+
+=end METHODS
+
+method needs_renumbering() {
+    #find out if the order in ops.num reflects the order in Ops::File
+    my $op_num_table := self<ops_file>.oplib.op_num_table;
+    my $opsfile_ops  := self<ops_file>.ops;
+    my $opsfile_num  := 0;
+    my $needs_renumbering := 0;
+
+    for $opsfile_ops -> $opsfile_op {
+        my $op_name := $opsfile_op.full_name;
+        my $op_num_table_num := +$op_num_table{ $op_name };
+        #say("op_num_table says $op_name has number $op_num_table_num, opsfile says $opsfile_num");
+        if (!$opsfile_op<experimental> && $opsfile_num != $op_num_table_num) {
+            say("Opsfile and optable disagree about $op_name: $opsfile_num vs $op_num_table_num");
+            $needs_renumbering := 1;
+        }
+        $opsfile_num++;
+    }
+
+    $needs_renumbering;
+}
+
+method renumber_ops() {
+    #grab all ops in ops.num
+    #record which ones are fixed and which just need to be somewhere
+    #iterate through ops::file's ops
+        #if this op is fixed
+            #give it the fixed number
+            #record the fixed number
+        #else
+            #give this op ++fixed
+}
+
+=begin ACCESSORS
+
+Various methods for accessing internals.
+
+=over 4
+
+=item * C<skiptable>
+
+=end ACCESSORS
+
+method skiptable()  { self<skiptable>; }
+
+
+# Local Variables:
+#   mode: perl6
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl6:


More information about the parrot-commits mailing list