Author: jkeenan
Date: Thu Aug 14 04:51:10 2008
New Revision: 30223

Modified:
   branches/opsrenum/lib/Parrot/OpsRenumber.pm
   branches/opsrenum/t/tools/ops2pm/05-renum_op_map_file.t
   branches/opsrenum/tools/dev/opsrenumber.pl

Log:
Parrot::OpsRenumber::renum_op_map_file() now takes Parrot major version number 
as argument.  This will enable us to define different ops-remapping behavior 
pre- and post-Parrot 1.0.  Only pre-1.0 case implemented so far.

Modified: branches/opsrenum/lib/Parrot/OpsRenumber.pm
==============================================================================
--- branches/opsrenum/lib/Parrot/OpsRenumber.pm (original)
+++ branches/opsrenum/lib/Parrot/OpsRenumber.pm Thu Aug 14 04:51:10 2008
@@ -71,76 +71,89 @@
 
 sub renum_op_map_file {
     my $self = shift;
+    my $major_version = shift;
 
     my $file = scalar(@_) ? shift : $self->{num_file};
-    my ( $name, $number, @lines, %fixed, $fix );
-    $fix = 1;
-    # We open up the currently existing ops.num and file and read it
-    # line-by-line.  That file is basically divided into two halves separated
-    # by the ###DYNAMIC### line.  Above that line are found (a) inline
-    # comments and (b) the first 7, never-to-be-altered opcodes.  Below that
-    # line are all the remaining opcodes.  All opcode lines match the pattern
-    # /^(\w+)\s+(\d+)$/.  Everything above the line gets pushed into @lines
-    # and, if it's an opcode line, get's split and pushed into %fixed as well.
-    # Essentially nothing happens to the (opcode) lines below the DYNAMIC
-    # line.
-    open my $OP, '<', $file
-        or die "Can't open $file, error $!";
-    while (<$OP>) {
-        push @lines, $_ if $fix;
-        chomp;
-        $fix = 0 if /^###DYNAMIC###/;
-        s/#.*$//;
-        s/\s*$//;
-        s/^\s*//;
-        next unless $_;
-        ( $name, $number ) = split( /\s+/, $_ );
-        $fixed{$name} = $number if ($fix);
-    }
-    close $OP;
-    # Now we re-open the very same file we just read -- this time for writing.
-    # We directly print all the lines n @lines, i.e., those above the DYNAMIC 
-    # line.  For the purpose of renumbering, we create an index $n.
-    open $OP, '>', $file
-        or die "Can't open $file, error $!";
-    print $OP @lines;
-    my ($n);
-
-    #
-    # we can't use all autogenerated ops from oplib/core
-    # there are unwanted permutations like 'add_i_ic_ic
-    # which aren't opcodes but calced at compile-time
-    #
-
-    # The ops element is set by prepare_ops(), which is inherited from
-    # Parrot::Ops2pm::Base.  prepare_ops(), in turn, works off
-    # Parrot::OpsFile.
-
-    # So whether a particular opcode will appear in the *new* ops.num depends
-    # entirely on whether or not it's found in @{ $self->{ops}->{OPS} }.  If a
-    # particular opcode has been deleted or gone missing from that array, then
-    # it won't appear in the new ops.num.  That's acceptable pre-version 1.0,
-    # but not afterwards (per
-    # http://rt.perl.org/rt3/Ticket/Display.html?id=53976).  At and after 1.0,
-    # the opcodes in ops.num will be non-deletable.  New opcodes may be added
-    # to the end of the list and numbered accordingly, but no opcodes may be
-    # deleted.  When we get to that point and need to renumber due to addition
-    # of opcodes, we'll simply determine which opcodes are brand new and
-    # append them to the end of the list in some order yet to be determined.
-
-    for ( @{ $self->{ops}->{OPS} } ) {
-        # To account for the number of opcodes above the line, we'll increment
-        # the index by one for every element in %fixed.
-        if ( defined $fixed{ $_->full_name } ) {
-            $n = $fixed{ $_->full_name };
+    if ($major_version == 0) {
+
+        # We open up the currently existing ops.num and file and read it
+        # line-by-line.  That file is basically divided into two halves
+        # separated by the ###DYNAMIC### line.  Above that line are found (a)
+        # inline comments and (b) the first 7, never-to-be-altered opcodes.
+        # Below that line are all the remaining opcodes.  All opcode lines
+        # match the pattern /^(\w+)\s+(\d+)$/.  Everything above the line gets
+        # pushed into @lines and, if it's an opcode line, get's split and
+        # pushed into %fixed as well.  Essentially nothing happens to the
+        # (opcode) lines below the DYNAMIC line.
+
+        my ( $name, $number, @lines, %fixed, $fix );
+        $fix = 1;
+        open my $OP, '<', $file
+            or die "Can't open $file, error $!";
+        while (<$OP>) {
+            push @lines, $_ if $fix;
+            chomp;
+            $fix = 0 if /^###DYNAMIC###/;
+            s/#.*$//;
+            s/\s*$//;
+            s/^\s*//;
+            next unless $_;
+            ( $name, $number ) = split( /\s+/, $_ );
+            $fixed{$name} = $number if ($fix);
         }
-        # For all other opcodes, we'll print the opcode, increment the index,
-        # then print the index on that same line.
-        else {
-            printf $OP "%-31s%4d\n", $_->full_name, ++$n;
+        close $OP;
+
+        # Now we re-open the very same file we just read -- this time for
+        # writing.  We directly print all the lines n @lines, i.e., those
+        # above the DYNAMIC line.  For the purpose of renumbering, we create
+        # an index $n.
+
+        open $OP, '>', $file
+            or die "Can't open $file, error $!";
+        print $OP @lines;
+        my ($n);
+    
+        #
+        # we can't use all autogenerated ops from oplib/core
+        # there are unwanted permutations like 'add_i_ic_ic
+        # which aren't opcodes but calced at compile-time
+        #
+    
+        # The ops element is set by prepare_ops(), which is inherited from
+        # Parrot::Ops2pm::Base.  prepare_ops(), in turn, works off
+        # Parrot::OpsFile.
+    
+        # So whether a particular opcode will appear in the *new* ops.num
+        # depends entirely on whether or not it's found in @{
+        # $self->{ops}->{OPS} }.  If a particular opcode has been deleted or
+        # gone missing from that array, then it won't appear in the new
+        # ops.num.  That's acceptable pre-version 1.0, but not afterwards (per
+        # http://rt.perl.org/rt3/Ticket/Display.html?id=53976).  At and after
+        # 1.0, the opcodes in ops.num will be non-deletable.  New opcodes may
+        # be added to the end of the list and numbered accordingly, but no
+        # opcodes may be deleted.  When we get to that point and need to
+        # renumber due to addition of opcodes, we'll simply determine which
+        # opcodes are brand new and append them to the end of the list in some
+        # order yet to be determined.
+    
+        for ( @{ $self->{ops}->{OPS} } ) {
+
+            # To account for the number of opcodes above the line, we'll
+            # increment the index by one for every element in %fixed.
+
+            if ( defined $fixed{ $_->full_name } ) {
+                $n = $fixed{ $_->full_name };
+            }
+
+            # For all other opcodes, we'll print the opcode, increment the
+            # index, then print the index on that same line.
+
+            else {
+                printf $OP "%-31s%4d\n", $_->full_name, ++$n;
+            }
         }
+        close $OP;
     }
-    close $OP;
     return 1;
 }
 

Modified: branches/opsrenum/t/tools/ops2pm/05-renum_op_map_file.t
==============================================================================
--- branches/opsrenum/t/tools/ops2pm/05-renum_op_map_file.t     (original)
+++ branches/opsrenum/t/tools/ops2pm/05-renum_op_map_file.t     Thu Aug 14 
04:51:10 2008
@@ -29,6 +29,9 @@
 ok(-d $samplesdir, "Able to locate samples directory");
 
 {
+    ##### Test pre-Parrot 1.0 case
+    my $major_version = 0;
+
     ##### Prepare temporary directory for testing #####
 
     my $tdir = tempdir( CLEANUP => 1 );
@@ -50,6 +53,7 @@
             src/ops/bit.ops
         ) ],
         $numoutput,
+        $major_version,
     );
     is($lastcode, q{bxors_s_sc_sc},
         "Stage 1:  Got expected last opcode");
@@ -66,6 +70,7 @@
             src/ops/bit.ops
         ) ],
         $numoutput,
+        $major_version,
     );
     is($lastcode, q{bxor_i_ic_ic},
         "Stage 2:  Got expected last opcode");
@@ -83,6 +88,7 @@
             src/ops/pic.ops
         ) ],
         $numoutput,
+        $major_version,
     );
     ($lastcode, $lastnumber) = get_last_opcode($numoutput);
     is($lastcode, q{pic_callr___pc},
@@ -99,7 +105,7 @@
 #################### SUBROUTINES ####################
 
 sub run_test_stage {
-    my ($opsfilesref, $numoutput) = @_;
+    my ($opsfilesref, $numoutput, $major_version) = @_;
     my $self = Parrot::OpsRenumber->new(
         {
             argv    => $opsfilesref,
@@ -112,7 +118,7 @@
     );
 
     $self->prepare_ops();
-    $self->renum_op_map_file();
+    $self->renum_op_map_file($major_version);
     my ($lastcode, $lastnumber) = get_last_opcode($numoutput);
     return ($lastcode, $lastnumber);
 }

Modified: branches/opsrenum/tools/dev/opsrenumber.pl
==============================================================================
--- branches/opsrenum/tools/dev/opsrenumber.pl  (original)
+++ branches/opsrenum/tools/dev/opsrenumber.pl  Thu Aug 14 04:51:10 2008
@@ -6,6 +6,7 @@
 use warnings;
 
 use lib 'lib';
+use Parrot::Config qw( %PConfig );
 use Parrot::OpsRenumber;
 
 my $self = Parrot::OpsRenumber->new(
@@ -20,7 +21,7 @@
 );
 
 $self->prepare_ops();
-$self->renum_op_map_file();
+$self->renum_op_map_file($PConfig{MAJOR});
 
 exit 0;
 

Reply via email to