# New Ticket Created by  Alberto Manuel Brandão Simões 
# Please include the string:  [perl #15345]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=15345 >


A simple way to generate assemble.pl constants initializaiton using
include/parrot/pmc.h

In attach, diff file and config/gen/enum.pl.
If accepted, it is needed to call enum.pl from somewhere (at the root
parrot distribution).

Regards,
 Alberto
-- 
Alberto Manuel B. Simoes
Departamento de Informática - Universidade do Minho
http://alfarrabio.di.uminho.pt/~albie - http://numexp.sf.net


-- attachment  1 ------------------------------------------------------
url: http://rt.perl.org/rt2/attach/30988/25974/8eaf7c/diff_file2

-- attachment  2 ------------------------------------------------------
url: http://rt.perl.org/rt2/attach/30988/25975/877c67/enum.pl

Index: assemble.pl
===================================================================
RCS file: /cvs/public/parrot/assemble.pl,v
retrieving revision 1.82
diff -u -r1.82 assemble.pl
--- assemble.pl 18 Jul 2002 02:13:27 -0000      1.82
+++ assemble.pl 22 Jul 2002 16:44:34 -0000
@@ -127,6 +127,7 @@
   # XXX Must be generated from the enum in include/parrot/pmc.h
   #
   bless $self,$class;
+  # Constants initilization
   $self->{constants}{Array} = 0;
   $self->{constants}{PerlUndef} = 1;
   $self->{constants}{PerlInt} = 2;
#! perl

# read that enum from 'include/parrot/pmc.h'

open F, "<include/parrot/pmc.h" or die "Cannot open file 'include/parrot/pmc.h'";
my @list;
while(<F>) {
  chomp;
  push @list, $1 if (m!enum_class_(\w+),!);
}
close F;

# Generate the string...
my $string = "";
my $i = 0;
for (@list) {
  $string.= "  \$self->{constants}{$_} = $i;\n";
  $i ++;
}

# open and read 'assemble.pl'
open I, "<assemble.pl" or die "Cannot open file 'assemble.pl'";
open O, ">assemble.pl_" or die "Cannot open file 'assemble.pl_' for writting";
while(<I>) {
  print O;
  if (m!# Constants initilization!) {
    while(<I>) {
      last if m!\$self;!;
    }
    print O $string;
    print O "  \$self;\n";
  }
}
close O;
close I;

# Move assemble.pl_ to assemble.pl
# if anybody knows a simple way, go ahead
open I, "<assemble.pl_" or die "Cannot open file 'assemble.pl_'";
open O, ">assemble.pl" or die "Cannot open file 'assemble.pl' for writting";
while(<I>) { print O }
close O;
close I;

unlink "assemble.pl_";

Reply via email to