From 47b1ef2b6364bd57d2f623de5c57133a3f751531 Mon Sep 17 00:00:00 2001 From: vsc Date: Fri, 14 Dec 2001 19:03:29 +0000 Subject: [PATCH] fix call to debugger with wrong module git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@231 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/exec.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/C/exec.c b/C/exec.c index 963eec8eb..6664fafae 100644 --- a/C/exec.c +++ b/C/exec.c @@ -191,9 +191,9 @@ p_save_cp(void) } inline static Int -EnterCreepMode(void) { +EnterCreepMode(SMALLUNSGN mod) { PredEntry *PredSpy = RepPredProp(PredPropByFunc(FunctorSpy,0)); - ARG1 = MkPairTerm(ModuleName[CurrentModule],ARG1); + ARG1 = MkPairTerm(ModuleName[mod],ARG1); CreepFlag = CalculateStackGap(); P_before_spy = P; return (CallPredicate(PredSpy, B)); @@ -203,7 +203,7 @@ inline static Int do_execute(Term t, int mod) { if (yap_flags[SPY_CREEP_FLAG]) { - return(EnterCreepMode()); + return(EnterCreepMode(mod)); } else if (PredGoalExpansion->OpcodeOfPred != UNDEF_OPCODE) { return(CallMetaCall(mod)); } @@ -304,7 +304,7 @@ p_execute_within(void) restart_exec: if (yap_flags[SPY_CREEP_FLAG]) { - return(EnterCreepMode()); + return(EnterCreepMode(mod)); } else if (PredGoalExpansion->OpcodeOfPred != UNDEF_OPCODE) { return(CallMetaCallWithin()); /* at this point check if we should enter creep mode */ @@ -408,7 +408,7 @@ p_execute_within2(void) Prop pe; if (yap_flags[SPY_CREEP_FLAG]) { - return(EnterCreepMode()); + return(EnterCreepMode(CurrentModule)); } else if (PredGoalExpansion->OpcodeOfPred != UNDEF_OPCODE) { return(CallMetaCallWithin()); } else if (IsVarTerm(t)) { @@ -1262,6 +1262,19 @@ p_clean_ifcp(void) { return(TRUE); } +static Int +p_jump_env(void) { + CELL *env = LCL0-IntegerOfTerm(Deref(ARG1)), *prev = NULL, *cur = ENV; + + while (cur != env) { + prev = cur; + cur = (CELL *)cur[E_E]; + } + ENV[E_CP] = prev[E_CP]; + ENV[E_E] = prev[E_E]; + return(TRUE); +} + void InitExecFs(void) @@ -1292,5 +1305,6 @@ InitExecFs(void) InitCPred("$restore_regs", 1, p_restore_regs, SafePredFlag); InitCPred("$restore_regs", 2, p_restore_regs2, SafePredFlag); InitCPred("$clean_ifcp", 1, p_clean_ifcp, SafePredFlag); + InitCPred("$jump_env", 1, p_jump_env, SafePredFlag); }