/*-------------------------------------------------------------------------* * MY_CALL2 * * * *-------------------------------------------------------------------------*/ PlBool my_call2(PlTerm goal) { PlTerm *args; int functor, arity; args = Pl_Rd_Callable_Check(goal, &functor, &arity); Pl_Exec_Continuation(functor, arity, args); return PL_TRUE; }
/*-------------------------------------------------------------------------* * MY_CALL * * * *-------------------------------------------------------------------------*/ PlBool my_call(PlTerm goal) { PlTerm *args; int functor, arity; int result; args = Pl_Rd_Callable_Check(goal, &functor, &arity); Pl_Query_Begin(PL_FALSE); result = Pl_Query_Call(functor, arity, args); Pl_Query_End(PL_KEEP_FOR_PROLOG); if (result == PL_EXCEPTION) { PlTerm except = Pl_Get_Exception(); Pl_Exec_Continuation(Pl_Find_Atom("throw"), 1, &except); } return result; }