From de8cbd046c9b83b150d064e8157bd3948a93a3b9 Mon Sep 17 00:00:00 2001 From: uid49918 Date: Wed, 4 Jul 2001 16:45:42 +0000 Subject: [PATCH] fix coroutining and goal expansion git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@115 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- pl/corout.yap | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/pl/corout.yap b/pl/corout.yap index 2184e48ce..4be3cf56c 100644 --- a/pl/corout.yap +++ b/pl/corout.yap @@ -61,7 +61,28 @@ %'), fail. '$wake_up_goal'([Module1|Continuation], LG) :- '$execute_woken_system_goals'(LG), - '$execute'(Module1:Continuation). + '$do_continuation'(Continuation, Module1). + + +% +% in the first two cases restore register immediately and proceed +% to continuation. In the last case take care with modules, but do +% not act as if a meta-call. +% +% +'$do_continuation'('$restore_regs'(X), _) :- !, + '$restore_regs'(X). +'$do_continuation'('$restore_regs'(X,Y), _) :- !, + '$restore_regs'(X,Y). +'$do_continuation'(Continuation, Module1) :- + '$mod_switch'(Module1,'$execute_continuation'(Continuation,Module1)). + +'$execute_continuation'(Continuation, Module1) :- + '$undefined'(Continuation), !, + '$undefp'([Module1|Continuation]). +'$execute_continuation'(Continuation, _) :- + % do not do meta-expansion nor any fancy stuff. + '$execute0'(Continuation). '$execute_woken_system_goals'([]).