Re: niave question about Parrot::Opcode

2001-09-20 Thread Damien Neil

On Wed, Sep 19, 2001 at 01:40:31PM -0400, Pat Eyler wrote:
 I realize that the $count inside the if block shown masks the $count
 declared outside the while loop, but (to me) this would be easier to
 understand if the inner $count where changed to $numParams -- it is more
 obvious on casual reading that $count and $count are two different
 things.  Am I missing something?

No, you aren't.  That IS confusing.


 2) It also appears that a second (older?) version of read_ops and an
 associated pile of pod is still in the Opcode.pm file can this be
 trimmed (removing about 80 lines from the file)?

Where on earth did that come from?

Patch attached to rename the second $count, and to remove the
duplicate code.

  - Damien


Index: Parrot/Opcode.pm
===
RCS file: /home/perlcvs/parrot/Parrot/Opcode.pm,v
retrieving revision 1.6
diff -u -r1.6 Opcode.pm
--- Parrot/Opcode.pm2001/09/18 00:32:15 1.6
+++ Parrot/Opcode.pm2001/09/20 07:23:44
@@ -28,9 +28,9 @@
 
my($name, @params) = split /\s+/;
if (@params  $params[0] =~ /^\d+$/) {
-   my $count = shift @params;
+   my $nparams = shift @params;
die $file, line $.: opcode $name parameters don't match count\n
- if ($count != @params);
+ if ($nparams != @params);
}
 
warn $file, line $.: opcode $name redefined\n if $opcode{$name};
@@ -108,91 +108,5 @@
 
 The fingerprint() function returns the MD5 signature (in hex) of the
 opcode table.
-
-=cut
-package Parrot::Opcode;
-
-use strict;
-use Symbol;
-
-sub read_ops {
-my $file = @_ ? shift : opcode_table;
-
-my $fh = gensym;
-open $fh, $file or die $file: $!\n;
-
-my %opcode;
-my $count = 1;
-while ($fh) {
-   s/#.*//;
-   s/^\s+//;
-   chomp;
-   next unless $_;
-
-   my($name, @params) = split /\s+/;
-   if (@params  $params[0] =~ /^\d+$/) {
-   my $count = shift @params;
-   die $file, line $.: opcode $name parameters don't match count\n
- if ($count != @params);
-   }
-
-   warn $file, line $.: opcode $name redefined\n if $opcode{$name};
-
-   $opcode{$name}{ARGS}  = @params;
-   $opcode{$name}{TYPES} = \@params;
-   $opcode{$name}{CODE}  = ($name eq end) ? 0 : $count++;
-   $opcode{$name}{FUNC}  = Parrot_op_$name;
-
-   my $num_i = () = grep {/i/} @params;
-   my $num_n = () = grep {/n/} @params;
-   $opcode{$name}{RETURN_OFFSET} = 1 + $num_i + $num_n * 2;
-}
-
-return %opcode;
-}
-
-1;
-
-
-__END__
-
-=head1 NAME
-
-Parrot::Opcode - Read opcode definitions
-
-=head1 SYNOPSIS
-
-  use Parrot::Opcode;
-
-  %opcodes = Parrot::Opcode::read_ops();
-
-=head1 DESCRIPTION
-
-The read_ops() function parses the Parrot opcode_table file, and
-returns the contents as a hash.  The hash key is the opcode name;
-values are hashrefs containing the following fields:
-
-=over
-
-=item CODE
-
-The opcode number.
-
-=item ARGS
-
-The opcode argument count.
-
-=item TYPES
-
-The opcode argument types, as an arrayref.
-
-=item FUNC
-
-The name of the C function implementing this op.
-
-=back
-
-read_ops() takes an optional argument: the file to read the opcode table
-from.
 
 =cut



niave question about Parrot::Opcode

2001-09-19 Thread Pat Eyler

parrot hackers,
I'm not going to pretend to be a wizened hacker, but I've got a couple
of questions about Parrot::Opcode that I hope you could answer.

1)  _load looks like:

sub _load {
#
# 
#
my $count = 1;
while ($fh) {
   #
   #
   #
if (@params  $params[0] =~ /^\d+$/) {
my $count = shift @params;
die $file, line $.: opcode $name parameters don't match count\n
  if ($count != @params);
}
   #
   #
   #
}  

I realize that the $count inside the if block shown masks the $count
declared outside the while loop, but (to me) this would be easier to
understand if the inner $count where changed to $numParams -- it is more
obvious on casual reading that $count and $count are two different
things.  Am I missing something?

2) It also appears that a second (older?) version of read_ops and an
associated pile of pod is still in the Opcode.pm file can this be
trimmed (removing about 80 lines from the file)?



thanks,
-pate