On Wednesday 22 October 2008 22:49:37 Patrick R. Michaud (via RT) wrote:

> Since a number of steps have changed since the last time I worked
> with adding/removing opcodes (April 2008), and I have little idea
> what might be causing this, I'm filing this ticket in hopes that
> someone can clear things up for me.

This patch fixes things for me, with minimal fuss and without inadvertently 
adding back in ops that we explicitly blacklist via src/ops/ops.skip.

Note that I had to manually rebuild the PGE, TGE, and JSON compilers because 
op numbers changed in bytecode.  'make realclean' will do.

I didn't run the Perl 5 tests of the Parrot::Ops2pm modules.  They'll probably 
fail, because the Perl 5 code was wrong.

-- c

=== lib/Parrot/OpsRenumber.pm
==================================================================
--- lib/Parrot/OpsRenumber.pm	(revision 32155)
+++ lib/Parrot/OpsRenumber.pm	(local)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007, The Perl Foundation.
+# Copyright (C) 2007-2008, The Perl Foundation.
 # $Id$
 package Parrot::OpsRenumber;
 use strict;
@@ -77,7 +77,6 @@
 
     my $file = scalar(@_) ? shift : $self->{num_file};
     if ($major_version == 0) {
-
         # Pre-Parrot 1.0 case
 
         # We open up the currently existing ops.num and file and read it
@@ -91,7 +90,7 @@
         # pushed into %fixed as well.  Nothing happens to the (opcode) lines
         # below the DYNAMIC line.
 
-        my ( $name, $number, @lines, %fixed, $fix );
+        my ( $name, $number, @lines, %seen, %fixed, $fix );
         $fix = 1;
         open my $OP, '<', $file
             or die "Can't open $file, error $!";
@@ -104,7 +103,8 @@
             s/^\s*//;
             next unless $_;
             ( $name, $number ) = split( /\s+/, $_ );
-            $fixed{$name} = $number if ($fix);
+            $seen{$name}  = $number;
+            $fixed{$name} = $number if $fix;
         }
         close $OP;
 
@@ -148,7 +148,7 @@
             # For all other opcodes, we'll print the opcode, increment the
             # index, then print the index on that same line.
 
-            else {
+            elsif ( $seen{ $_->full_name } ) {
                 printf $OP "%-31s%4d\n", $_->full_name, ++$n;
             }
         }

Reply via email to