X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FInterpreter.c;h=77f30582bb1036e9c77f000cfbfe42e0bdcbc820;hb=6735097cdbe113e74555a5a748b0648e5ed762b5;hp=527ebde0d01211da37a2b8e1a5541dbbffb0d979;hpb=6015a94f9108a502150565577b66c23650796639;p=ghc-hetmet.git diff --git a/rts/Interpreter.c b/rts/Interpreter.c index 527ebde..77f3058 100644 --- a/rts/Interpreter.c +++ b/rts/Interpreter.c @@ -847,15 +847,20 @@ run_BCO: // in a reasonable state for the GC and so that // execution of this BCO can continue when we resume ioAction = (StgClosure *) deRefStablePtr (rts_breakpoint_io_action); - Sp -= 8; - Sp[7] = (W_)obj; - Sp[6] = (W_)&stg_apply_interp_info; + Sp -= 9; + Sp[8] = (W_)obj; + Sp[7] = (W_)&stg_apply_interp_info; + Sp[6] = (W_)&stg_noforceIO_info; // see [unreg] below Sp[5] = (W_)new_aps; // the AP_STACK Sp[4] = (W_)BCO_PTR(arg3_freeVars); // the info about local vars of the breakpoint Sp[3] = (W_)False_closure; // True <=> a breakpoint Sp[2] = (W_)&stg_ap_pppv_info; Sp[1] = (W_)ioAction; // apply the IO action to its two arguments above Sp[0] = (W_)&stg_enter_info; // get ready to run the IO action + // Note [unreg]: in unregisterised mode, the return + // convention for IO is different. The + // stg_noForceIO_info stack frame is necessary to + // account for this difference. // set the flag in the TSO to say that we are now // stopping at a breakpoint so that when we resume @@ -1049,6 +1054,17 @@ run_BCO: goto nextInsn; } + case bci_ALLOC_AP_NOUPD: { + StgAP* ap; + int n_payload = BCO_NEXT; + ap = (StgAP*)allocate(AP_sizeW(n_payload)); + Sp[-1] = (W_)ap; + ap->n_args = n_payload; + SET_HDR(ap, &stg_AP_NOUPD_info, CCS_SYSTEM/*ToDo*/) + Sp --; + goto nextInsn; + } + case bci_ALLOC_PAP: { StgPAP* pap; int arity = BCO_NEXT; @@ -1370,7 +1386,7 @@ run_BCO: // Errors default: barf("interpretBCO: unknown or unimplemented opcode %d", - (int)BCO_NEXT); + (int)(bci & 0xFF)); } /* switch on opcode */ }