cvsuser 01/09/17 09:47:20
Modified: . assemble.pl
Log:
added some default equates, and if they're sub references, they are computed
each time it is referenced.
Revision Changes Path
1.25 +12 -3 parrot/assemble.pl
Index: assemble.pl
===================================================================
RCS file: /home/perlcvs/parrot/assemble.pl,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -w -r1.24 -r1.25
--- assemble.pl 2001/09/16 18:25:27 1.24
+++ assemble.pl 2001/09/17 16:47:20 1.25
@@ -18,7 +18,7 @@
'listing=s'));
if($options{'version'}) {
- print $0,'Version $Id: assemble.pl,v 1.24 2001/09/16 18:25:27 bdwheele Exp $
',"\n";
+ print $0,'Version $Id: assemble.pl,v 1.25 2001/09/17 16:47:20 bdwheele Exp $
',"\n";
exit;
}
@@ -68,11 +68,16 @@
+
# read source and assemble
my $pc=0; my $op_pc=0;
-my ($bytecode,%label,%fixup,%constants,@constants,%equate);
+my ($bytecode,%label,%fixup,%constants,@constants);
my (%local_label, %local_fixup, $last_label);
my $line=0;
+my %equate=('*'=>sub { return $pc },
+ '__DATE__'=>'"'.scalar(localtime).'"',
+ '__VERSION__'=>'" $Revision: 1.25 $ "',
+ '__LINE__' => sub { return $line });
while(<>) {
$line++;
chomp;
@@ -150,7 +155,11 @@
foreach (@args) {
if(exists($equate{$_})) {
# substitute the equate value
+ if(ref($equate{$_})) {
+ $_=&{$equate{$_}};
+ } else {
$_=$equate{$_};
+ }
s/\"([^\\\"]*(?:\\.[^\\\"]*)*)\"/constantize($1)/eg;
}
if(m/^([INPS])\d+$/) {