Here is a patch that fixes prederef with respect to bsr.

-- 
Jason
Index: interpreter.c
===================================================================
RCS file: /home/perlcvs/parrot/interpreter.c,v
retrieving revision 1.57
diff -u -r1.57 interpreter.c
--- interpreter.c       12 Jan 2002 15:33:08 -0000      1.57
+++ interpreter.c       13 Jan 2002 01:00:05 -0000
@@ -257,7 +257,7 @@
         break;
 
       case PARROT_ARG_IC:
-        pc_prederef[i] = (void *)pc[i];
+        pc_prederef[i] = (void *)&pc[i];
         break;
 
       case PARROT_ARG_NC:
Index: Parrot/OpTrans/CPrederef.pm
===================================================================
RCS file: /home/perlcvs/parrot/Parrot/OpTrans/CPrederef.pm,v
retrieving revision 1.3
diff -u -r1.3 CPrederef.pm
--- Parrot/OpTrans/CPrederef.pm 1 Jan 2002 03:43:12 -0000       1.3
+++ Parrot/OpTrans/CPrederef.pm 13 Jan 2002 01:00:05 -0000
@@ -66,7 +66,7 @@
 sub goto_pop
 {
   my ($self) = @_;
-  return "return pop_dest(interpreter)";
+  return "return (((opcode_t *)pop_dest(interpreter) - (opcode_t 
+*)interpreter->code->byte_code) + interpreter->prederef_code)";
 }
 
 
@@ -86,7 +86,7 @@
     'p'  => "(*(PMC **)cur_opcode[%ld])",
     's'  => "(*(STRING **)cur_opcode[%ld])",
 
-    'ic' => "(*(INTVAL *)&cur_opcode[%ld])",
+    'ic' => "(*(INTVAL *)cur_opcode[%ld])",
     'nc' => "(*(FLOATVAL *)cur_opcode[%ld])",
     'pc' => "%ld /* ERROR: Don't know how to handle PMC constants yet! */",
     'sc' => "(*(STRING **)cur_opcode[%ld])",

Reply via email to