cvsuser 03/01/21 06:49:47
Modified: languages/imcc pbc.c
languages/imcc/t/syn eval.t
Log:
imcc check intersegment branches
Revision Changes Path
1.14 +5 -0 parrot/languages/imcc/pbc.c
Index: pbc.c
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/pbc.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -w -r1.13 -r1.14
--- pbc.c 21 Jan 2003 12:28:51 -0000 1.13
+++ pbc.c 21 Jan 2003 14:49:43 -0000 1.14
@@ -589,6 +589,11 @@
debug(1, "branch label %d jump %d %s %d\n",
npc, label->color, addr->name,addr->color);
}
+ else if (strcmp(ins->op, "bsr") && strcmp(ins->op, "set_addr")) {
+ /* TODO make intersegment branch */
+ fatal(1, "e_pbc_emit", "label not found for '%s'\n",
+ addr->name);
+ }
}
/* add debug line info */
if (Interp_flags_TEST(interpreter, PARROT_DEBUG_FLAG)) {
1.2 +32 -1 parrot/languages/imcc/t/syn/eval.t
Index: eval.t
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/t/syn/eval.t,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -r1.1 -r1.2
--- eval.t 16 Jan 2003 17:27:03 -0000 1.1
+++ eval.t 21 Jan 2003 14:49:46 -0000 1.2
@@ -1,6 +1,6 @@
#!perl
use strict;
-use TestCompiler tests => 2;
+use TestCompiler tests => 3;
use Test::More qw(skip);
##############################
@@ -37,3 +37,34 @@
42
back
OUT
+
+SKIP: {
+ skip("not yet: jump to different code seg", 1);
+output_is(<<'CODE', <<'OUT', "intersegment branch");
+# #!/usr/bin/perl -w
+# my $i= 5;
+# LAB:
+# $i++;
+# eval("goto LAB if ($i==6)");
+# print "$i\n";
+#
+# 7
+#####
+
+.sub _test
+ I1 = 5
+ $S0 = ".sub _e\nif I1 == 6 goto LAB\nend\n.end\n"
+ compreg P2, "PIR"
+ compile P0, P2, $S0
+LAB:
+ inc I1
+ invoke
+ print I1
+ print "\n"
+ end
+.end
+CODE
+7
+OUT
+}
+