develooper Front page | perl.perl6.internals | Postings from September 2001

[COMMIT] disassemble.pl

Thread Next
From:
Simon Cozens
Date:
September 21, 2001 12:24
Subject:
[COMMIT] disassemble.pl
Message ID:
20010921201659.A5436@netthink.co.uk
I've just checked this in because the disassembler has come adrift
from the assembler. I don't know if this is the right fix, because
it feels like a hack, but it seems to work well enough for me to
debug some failing tests.

  Index: disassemble.pl
  ===================================================================
  RCS file: /home/perlcvs/parrot/disassemble.pl,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -w -r1.9 -r1.10
  --- disassemble.pl	2001/09/18 20:07:59	1.9
  +++ disassemble.pl	2001/09/21 19:23:30	1.10
  @@ -8,11 +8,12 @@
   # This program is free software. It is subject to the same license
   # as the Parrot interpreter.
   #
  -# $Id: disassemble.pl,v 1.9 2001/09/18 20:07:59 gregor Exp $
  +# $Id: disassemble.pl,v 1.10 2001/09/21 19:23:30 mon Exp $
   #
   
   use strict;
   
  +use Parrot::Config;
   use Parrot::Opcode;
   use Parrot::PackFile;
   use Parrot::PackFile::ConstTable;
  @@ -22,22 +23,34 @@
   # GLOBAL VARIABLES:
   #
   
  -my %unpack_type = (i => 'l',
  -		   I => 'l',
  -		   n => 'd',
  -		   N => 'l',
  -		   D => 'l',
  -		   S => 'l',
  -		   s => 'l',
  -                  );
  -my %unpack_size = (i => 4,
  -		   n => 8,
  -		   I => 4,
  -		   N => 4,
  -		   D => 4,
  -		   S => 4,
  -		   s => 4,
  -		   );
  +my %unpack_type;
  +if (($] >= 5.006) && ($PConfig{ivsize} == $PConfig{longsize}) ) {
  +    %unpack_type = ('i'=>'l!','n'=>'d');
  +}
  +elsif ($PConfig{ivsize} == 4) {
  +    %unpack_type = ('i'=>'l','n'=>'d');
  +}
  +elsif ($PConfig{ivsize} == 8) {
  +    %unpack_type = ('i'=>'q','n'=>'d');
  +}
  +else {
  +    die("I don't know how to pack an IV!\n");
  +}
  + 
  +my(%real_type)=('I'=>'i','i'=>'i',
  +                'N'=>'i','n'=>'n',
  +                'S'=>'i','s'=>'i',
  +                'D'=>'i');
  +my(%type_swap)=('I'=>'i',  'N'=>'n',
  +                'S'=>'s',  'P'=>'p',
  +                'i'=>'ic', 'n'=>'nc',
  +                's'=>'sc', 'D'=>'ic');
  +
  +my %unpack_size;
  +foreach (keys(%real_type)) {
  +    $unpack_size{$_}=length(pack($unpack_type{$real_type{$_}},0));
  +    $unpack_type{$_} = $unpack_type{$real_type{$_}};
  +}
   
   my %opcodes            = Parrot::Opcode::read_ops();
   my $opcode_fingerprint = Parrot::Opcode::fingerprint();
  
  
  

----- End forwarded message -----
-- 
Last week I forgot how to ride a bicycle.  -- Steven Wright

Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About