This enables typecasting between I and N registers, fixes up the
error messages, and makes "var num" not require an assignment.
I note that some pseudo-ops don't work, and "mod" doesn't work
as a pseudo op with a constant; nor does "pow" and similar functions
work at all. :( Thinking about how to make these better...
Simon
? factor.jako
Index: jakoc
===================================================================
RCS file: /home/perlcvs/parrot/little_languages/jakoc,v
retrieving revision 1.5
diff -d -u -r1.5 jakoc
--- jakoc 2001/09/17 12:49:31 1.5
+++ jakoc 2001/09/18 09:11:46
@@ -339,7 +339,18 @@
if ($ident{$name}) {
if ($type eq '*') {
if ($ident{$value}) {
- printf "%-12s %-8s %s\n", '', 'set', "$ident{$name}{REG},
$ident{$value}{REG}";
+ if ($ident{$name}{TYPE} ne $ident{$value}{TYPE}) {
+ if ($ident{$name}{TYPE} eq "N" and $ident{$value}{TYPE} eq "I") {
+ printf "%-12s %-8s %s\n", '', 'iton', "$ident{$name}{REG},
+$ident{$value}{REG}";
+ } elsif ($ident{$name}{TYPE} eq "I" and $ident{$value}{TYPE} eq "N") {
+ printf "%-12s %-8s %s\n", '', 'ntoi', "$ident{$name}{REG},
+$ident{$value}{REG}";
+ } else {
+ printf(STDERR "jako: Cannot assign type '%s' to type '%s' on line %d.\n",
+ $ident{$value}{TYPE}, $ident{$name}{TYPE}, $line);
+ }
+ } else {
+ printf "%-12s %-8s %s\n", '', 'set', "$ident{$name}{REG},
+$ident{$value}{REG}";
+ }
} else {
printf(STDERR "jako: Assignment from undefined variable '%s' on line %d.\n",
$value, $line);
@@ -402,7 +413,7 @@
printf "%-12s %-8s %s\n", '', $name, $arg;
}
} else {
- printf(STDERR "jako: Unrecognized function '$name' on line %d.\n", $name, $line);
+ printf(STDERR "jako: Unrecognized function '%s' on line %d.\n", $name, $line);
}
}
@@ -419,7 +430,7 @@
@args = map_args($dest, @args);
printf "%-12s %-8s %s\n", '', $name, join(", ", @args);
} else {
- printf(STDERR "jako: Unrecognized function '$name' on line %d.\n", $name, $line);
+ printf(STDERR "jako: Unrecognized function '%s' on line %d.\n", $name, $line);
}
}
@@ -675,7 +686,7 @@
#
if ((m/^var\s+(i)nt(eger)?\s+([A-Za-z][A-Za-z0-9_]*)(\s*=\s*(\d+))?$/) ||
- (m/^var\s+(n)um(ber)?\s+([A-Za-z][A-Za-z0-9_]*)(\s*=\s*(\d+(\.\d+)))$/) ||
+ (m/^var\s+(n)um(ber)?\s+([A-Za-z][A-Za-z0-9_]*)(\s*=\s*(\d+(\.\d+)))?$/) ||
(m/^var\s+(s)tr(ing)?\s+([A-Za-z][A-Za-z0-9_]*)(\s*=\s*(\"[^\\\"]*(?:\\.[^\\\"]*)*\"))?$/))
{
declare_var($3, uc($1));
assign_var($3, uc($1), $5) if defined $5;
--
Reporter (to Mahatma Gandhi): Mr Gandhi, what do you think of Western
Civilization?
Gandhi: I think it would be a good idea.