40#include "tab.macros.h"
47static int static_in_use(
PredEntry *,
int);
48#if !defined(YAPOR) && !defined(THREADS)
49static Int search_for_static_predicate_in_use(
PredEntry *,
int);
51static void do_toggle_static_predicates_in_use(
int);
53static Int in_use( USES_REGS1 );
54static Int toggle_static_predicates_in_use( USES_REGS1 );
55static Int PredForCode(
yamop *,
Atom *, arity_t *, Term *);
58PredForChoicePt(
yamop *p_code, op_numbers *opn) {
63 opnum = Yap_op_from_opcode(p_code->opc);
70 p_code = p_code->y_u.l.l;
74 return p_code->y_u.Otapl.p;
77 return p_code->y_u.lp.p;
81 case _count_retry_logical:
82 case _count_trust_logical:
83 case _profiled_retry_logical:
84 case _profiled_trust_logical:
85 return p_code->y_u.OtaLl.d->ClPred;
89 case _trie_trust_var_in_pair:
90 case _trie_retry_var_in_pair:
93 case _trie_trust_val_in_pair:
94 case _trie_retry_val_in_pair:
95 case _trie_trust_atom:
96 case _trie_retry_atom:
97 case _trie_trust_atom_in_pair:
98 case _trie_retry_atom_in_pair:
99 case _trie_trust_null:
100 case _trie_retry_null:
101 case _trie_trust_null_in_pair:
102 case _trie_retry_null_in_pair:
103 case _trie_trust_pair:
104 case _trie_retry_pair:
105 case _trie_trust_appl:
106 case _trie_retry_appl:
107 case _trie_trust_appl_in_pair:
108 case _trie_retry_appl_in_pair:
109 case _trie_trust_extension:
110 case _trie_retry_extension:
111 case _trie_trust_double:
112 case _trie_retry_double:
113 case _trie_trust_longint:
114 case _trie_retry_longint:
115 case _trie_trust_gterm:
116 case _trie_retry_gterm:
118 case _table_load_answer:
119 case _table_try_answer:
120 case _table_answer_resolution:
121 case _table_completion:
122#ifdef THREADS_CONSUMER_SHARING
123 case _table_answer_resolution_completion:
129 if (p_code == p_code->y_u.Osblp.l) {
131 Atom at = AtomRepeatSpace;
132 return RepPredProp(PredPropByAtom(at, PROLOG_MODULE));
134 return p_code->y_u.Osblp.p0;
139 return p_code->y_u.Osblp.p0;
141 return p_code->y_u.p.p;
144 case _count_retry_me:
145 case _retry_profiled:
149 p_code = NEXTOP(p_code,l);
152 return p_code->y_u.Otapl.p;
173 return PredForChoicePt(cp->cp_ap, op);
176#if !defined(YAPOR) && !defined(THREADS)
181 cl = ClauseCodeToStaticClause(pe->cs.p_code.FirstClause);
183 if (IN_BLOCK(codeptr,cl,cl->ClSize)) {
186 if (cl->ClCode == pe->cs.p_code.LastClause)
190 Yap_Error(SYSTEM_ERROR_INTERNAL,TermNil,
"could not find clause for indexing code");
197 cl = ClauseCodeToLogUpdClause(pe->cs.p_code.FirstClause);
199 if (IN_BLOCK(codeptr,cl->ClCode,cl->ClSize)) {
200 return((
yamop *)cl->ClCode);
203 }
while (cl != NULL);
204 Yap_Error(SYSTEM_ERROR_INTERNAL,TermNil,
"could not find clause for indexing code");
209search_for_static_predicate_in_use(
PredEntry *p,
int check_everything)
214 if (check_everything && P) {
216 if (p == pe)
return TRUE;
218 if (p == pe)
return TRUE;
224 if (check_everything && env_ptr) {
229 while (env_ptr && b_ptr > (
choiceptr)env_ptr) {
234 if (p == pe)
return(TRUE);
236 env_ptr = (CELL *)(env_ptr[E_E]);
242 pe = PredForChoicePt(b_ptr->cp_ap, NULL);
246 if (check_everything)
249 if (p->PredFlags & IndexedPredFlag) {
250 yamop *code_p = b_ptr->cp_ap;
251 yamop *code_beg = p->cs.p_code.TrueCodeOfPred;
255 if (p->PredFlags & LogUpdatePredFlag) {
256 LogUpdIndex *cl = ClauseCodeToLogUpdIndex(code_beg);
257 if (find_owner_log_index(cl, code_p))
258 b_ptr->cp_ap = cur_log_upd_clause(pe, b_ptr->cp_ap->y_u.Otapl.d);
259 }
else if (p->PredFlags & MegaClausePredFlag) {
260 StaticIndex *cl = ClauseCodeToStaticIndex(code_beg);
261 if (find_owner_static_index(cl, code_p))
262 b_ptr->cp_ap = cur_clause(pe, b_ptr->cp_ap->y_u.Otapl.d);
265 StaticIndex *cl = ClauseCodeToStaticIndex(code_beg);
266 if (find_owner_static_index(cl, code_p)) {
267 b_ptr->cp_ap = cur_clause(pe, b_ptr->cp_ap->y_u.Otapl.d);
273 env_ptr = b_ptr->cp_env;
275 }
while (b_ptr != NULL);
283 if (pe->ModuleOfPred) {
286 pe->PredFlags |= InUsePredFlag;
288 pe->PredFlags &= ~InUsePredFlag;
298do_toggle_static_predicates_in_use(
int mask)
314 env_ptr = (CELL *)(env_ptr[E_E]);
318 if ((pe = PredForChoicePt(b_ptr->cp_ap, NULL))) {
322 env_ptr = b_ptr->cp_env;
324 }
while (b_ptr != NULL);
326 STATIC_PREDICATES_MARKED = mask;
335 clause_was_found(p, pat, parity);
336 if (p->ModuleOfPred == PROLOG_MODULE)
337 *pmodule = TermProlog;
339 *pmodule = p->ModuleOfPred;
345walk_got_lu_block(
LogUpdIndex *cl, CODEADDR *startp, CODEADDR *endp)
348 *startp = (CODEADDR)cl;
349 *endp = (CODEADDR)cl+cl->ClSize;
355walk_got_lu_clause(
LogUpdClause *cl, CODEADDR *startp, CODEADDR *endp)
357 *startp = (CODEADDR)cl;
358 *endp = (CODEADDR)cl+cl->ClSize;
364found_meta_call(CODEADDR *startp, CODEADDR *endp)
367 *startp = (CODEADDR)&(pp->OpcodeOfPred);
368 *endp = (CODEADDR)NEXTOP((
yamop *)&(pp->OpcodeOfPred),e);
374walk_found_c_pred(
PredEntry *pp, CODEADDR *startp, CODEADDR *endp)
376 StaticClause *cl = ClauseCodeToStaticClause(pp->CodeOfPred);
377 *startp = (CODEADDR)&(cl->ClCode);
378 *endp = (CODEADDR)&(cl->ClCode)+cl->ClSize;
384found_mega_clause(
PredEntry *pp, CODEADDR *startp, CODEADDR *endp)
386 MegaClause *mcl = ClauseCodeToMegaClause(pp->cs.p_code.FirstClause);
387 *startp = (CODEADDR)mcl;
388 *endp = (CODEADDR)mcl+mcl->ClSize;
394found_idb_clause(
yamop *pc, CODEADDR *startp, CODEADDR *endp)
398 *startp = (CODEADDR)cl;
399 *endp = (CODEADDR)cl+cl->ClSize;
405found_expand_index(
yamop *pc, CODEADDR *startp, CODEADDR *endp,
yamop *codeptr USES_REGS)
409 *startp = (CODEADDR)codeptr;
410 *endp = (CODEADDR)NEXTOP(codeptr,sssllp);
417found_fail(
yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS)
419 PredEntry *pp = RepPredProp(Yap_GetPredPropByAtom(AtomFail,CurrentModule));
420 *startp = *endp = (CODEADDR)FAILCODE;
426found_owner_op(
yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS)
429 *startp = (CODEADDR)&(pp->OpcodeOfPred);
430 *endp = (CODEADDR)NEXTOP((
yamop *)&(pp->OpcodeOfPred),e);
436found_expand(
yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS)
439 *startp = (CODEADDR)&(pp->cs.p_code.ExpandCode);
440 *endp = (CODEADDR)NEXTOP((
yamop *)&(pp->cs.p_code.ExpandCode),e);
445found_ystop(
yamop *pc,
int clause_code, CODEADDR *startp, CODEADDR *endp,
PredEntry *pp USES_REGS)
448 pp = RepPredProp(Yap_GetPredPropByAtom(AtomTrue,CurrentModule));
449 *startp = (CODEADDR)YESCODE;
450 *endp = (CODEADDR)YESCODE+(CELL)(NEXTOP((
yamop *)NULL,e));
458 if (pp->PredFlags & LogUpdatePredFlag) {
460 LogUpdClause *cl = ClauseCodeToLogUpdClause(pc->y_u.l.l);
461 *startp = (CODEADDR)cl;
462 *endp = (CODEADDR)cl+cl->ClSize;
464 LogUpdIndex *cl = ClauseCodeToLogUpdIndex(pc->y_u.l.l);
465 *startp = (CODEADDR)cl;
466 *endp = (CODEADDR)cl+cl->ClSize;
468 }
else if (pp->PredFlags & DynamicPredFlag) {
470 *startp = (CODEADDR)cl;
471 *endp = (CODEADDR)cl+cl->ClSize;
474 StaticClause *cl = ClauseCodeToStaticClause(pc->y_u.l.l);
475 *startp = (CODEADDR)cl;
476 *endp = (CODEADDR)cl+cl->ClSize;
478 StaticIndex *cl = ClauseCodeToStaticIndex(pc->y_u.l.l);
479 *startp = (CODEADDR)cl;
480 *endp = (CODEADDR)cl+cl->ClSize;
487ClauseInfoForCode(
yamop *codeptr, CODEADDR *startp, CODEADDR *endp USES_REGS) {
490 int clause_code = FALSE;
492 if (codeptr >= COMMA_CODE &&
493 codeptr < FAILCODE) {
494 pp = RepPredProp(Yap_GetPredPropByFunc(FunctorComma,CurrentModule));
495 *startp = (CODEADDR)COMMA_CODE;
496 *endp = (CODEADDR)(FAILCODE-1);
500#include "walkclause.h"
505Yap_PredEntryForCode(
yamop *codeptr, find_pred_type where_from, CODEADDR *startp, CODEADDR *endp) {
507 if (where_from == FIND_PRED_FROM_CP) {
508 PredEntry *pp = PredForChoicePt(codeptr, NULL);
509 if (cl_code_in_pred(pp, codeptr, startp, endp)) {
512 }
else if (where_from == FIND_PRED_FROM_ENV) {
514 if (cl_code_in_pred(pp, codeptr, startp, endp)) {
518 return ClauseInfoForCode(codeptr, startp, endp PASS_REGS);
532p_in_use( USES_REGS1 )
537 pe = get_pred(Deref(ARG1), Deref(ARG2),
"$in_use");
541 out = static_in_use(pe,TRUE);
548p_pred_for_code( USES_REGS1 ) {
552 Term tmodule = TermProlog;
554 Term t = Deref(ARG1);
558 }
else if (IsApplTerm(t) && FunctorOfTerm(t) == FunctorStaticClause) {
559 codeptr = Yap_ClauseFromTerm(t)->ClCode;
560 }
else if (IsIntegerTerm(t)) {
561 codeptr = (
yamop *)IntegerOfTerm(t);
562 }
else if (IsDBRefTerm(t)) {
563 codeptr = (
yamop *)DBRefOfTerm(t);
567 cl = PredForCode(codeptr, &at, &arity, &tmodule);
568 if (!tmodule) tmodule = TermProlog;
570 return Yap_unify(ARG5,MkIntTerm(0));
572 return(Yap_unify(ARG2,MkAtomTerm(at)) &&
573 Yap_unify(ARG3,MkIntegerTerm(arity)) &&
574 Yap_unify(ARG4,tmodule) &&
575 Yap_unify(ARG5,MkIntegerTerm(cl)));
584 char *code_end = (
char *)cl + cl->ClSize;
585 Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_LU_INDEX);
588 add_code_in_lu_index(cl, pp);
589 cl = cl->SiblingIndex;
596 char *code_end = (
char *)cl + cl->ClSize;
597 Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_STATIC_INDEX);
600 add_code_in_static_index(cl, pp);
601 cl = cl->SiblingIndex;
614 Yap_inform_profiler_of_clause(&(pp->OpcodeOfPred), &(pp->OpcodeOfPred)+1, pp, GPROF_INIT_OPCODE);
615 if (pp->PredFlags & (CPredFlag|AsmPredFlag)) {
619 clcode = pp->CodeOfPred;
620 cl = ClauseCodeToStaticClause(clcode);
621 code_end = (
char *)cl + cl->ClSize;
622 Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_SYSTEM_CODE);
626 Yap_inform_profiler_of_clause(&(pp->cs.p_code.ExpandCode), &(pp->cs.p_code.ExpandCode)+1, pp, GPROF_INIT_EXPAND);
627 clcode = pp->cs.p_code.TrueCodeOfPred;
628 if (pp->PredFlags & IndexedPredFlag) {
629 if (pp->PredFlags & LogUpdatePredFlag) {
631 add_code_in_lu_index(cl, pp);
634 add_code_in_static_index(cl, pp);
637 clcode = pp->cs.p_code.FirstClause;
638 if (clcode != NULL) {
639 if (pp->PredFlags & LogUpdatePredFlag) {
644 code_end = (
char *)cl + cl->ClSize;
645 Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_LOG_UPD_CLAUSE);
647 }
while (cl != NULL);
648 }
else if (pp->PredFlags & DynamicPredFlag) {
653 cl = ClauseCodeToDynamicClause(clcode);
654 code_end = (CODEADDR)cl + cl->ClSize;
655 Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_DYNAMIC_CLAUSE);
656 if (clcode == pp->cs.p_code.LastClause)
658 clcode = NextDynamicClause(clcode);
665 code_end = (
char *)cl + cl->ClSize;
666 Yap_inform_profiler_of_clause(cl, code_end, pp,GPROF_INIT_STATIC_CLAUSE);
667 if (cl->ClCode == pp->cs.p_code.LastClause)
678Yap_dump_code_area_for_profiler(
void) {
695 add_code_in_pred(pp);
696 pp = pp->NextPredOfModule;
700 Yap_inform_profiler_of_clause(COMMA_CODE, FAILCODE, RepPredProp(Yap_GetPredPropByFunc(FunctorComma,0)), GPROF_INIT_COMMA);
701 Yap_inform_profiler_of_clause(FAILCODE, FAILCODE+1, RepPredProp(Yap_GetPredPropByAtom(AtomFail,0)), GPROF_INIT_FAIL);
712 sz += tree_index_ssz(x);
722 yamop *ep = ExpandClausesFirst;
723 if (pe->PredFlags & MegaClausePredFlag) {
724 MegaClause *mcl = ClauseCodeToMegaClause(pe->cs.p_code.FirstClause);
725 if (mcl->ClFlags & ExoMask) {
726 struct index_t *i = ((
struct index_t **)(pe->cs.p_code.FirstClause))[0];
738 if (ep->y_u.sssllp.p == pe)
739 sz += (UInt)NEXTOP((
yamop *)NULL,sssllp)+ep->y_u.sssllp.s1*
sizeof(
yamop *);
740 ep = ep->y_u.sssllp.snext;
743 sz += tree_index_ssz(x);
751 UInt sz =
sizeof(
PredEntry), cls = 0, isz = 0;
752 StaticClause *cl = ClauseCodeToStaticClause(pe->cs.p_code.FirstClause);
754 if (pe->cs.p_code.NOfClauses > 1 &&
755 pe->cs.p_code.TrueCodeOfPred != pe->cs.p_code.FirstClause) {
756 isz = index_ssz(ClauseCodeToStaticIndex(pe->cs.p_code.TrueCodeOfPred), pe);
758 if (pe->PredFlags & MegaClausePredFlag) {
759 MegaClause *mcl = ClauseCodeToMegaClause(pe->cs.p_code.FirstClause);
760 return Yap_unify(ARG3, MkIntegerTerm(mcl->ClSize/mcl->ClItemSize)) &&
761 Yap_unify(ARG4, MkIntegerTerm(mcl->ClSize)) &&
762 Yap_unify(ARG5, MkIntegerTerm(isz));
764 if (pe->cs.p_code.NOfClauses) {
768 if (cl->ClCode == pe->cs.p_code.LastClause)
773 return Yap_unify(ARG3, MkIntegerTerm(cls)) &&
774 Yap_unify(ARG4, MkIntegerTerm(sz)) &&
775 Yap_unify(ARG5, MkIntegerTerm(isz));
779p_static_pred_statistics( USES_REGS1 )
784 pe = get_pred( Deref(ARG1), Deref(ARG2),
"predicate_statistics");
788 if (pe->PredFlags & (DynamicPredFlag|LogUpdatePredFlag|UserCPredFlag|AsmPredFlag|CPredFlag|BinaryPredFlag)) {
793 out = static_statistics(pe);
799p_predicate_erased_statistics( USES_REGS1 )
801 UInt sz = 0, cls = 0;
802 UInt isz = 0, icls = 0;
806 Term tpred = ArgOfTerm(2,Deref(ARG1));
807 Term tmod = ArgOfTerm(1,Deref(ARG1));
809 if (EndOfPAEntr(pe=get_pred(tpred, tmod,
"predicate_erased_statistics")))
812 if (cl->ClPred == pe) {
819 if (pe == icl->ClPred) {
823 icl = icl->SiblingIndex;
826 Yap_unify(ARG2,MkIntegerTerm(cls)) &&
827 Yap_unify(ARG3,MkIntegerTerm(sz)) &&
828 Yap_unify(ARG4,MkIntegerTerm(icls)) &&
829 Yap_unify(ARG5,MkIntegerTerm(isz));
834p_predicate_lu_cps( USES_REGS1 )
836 return Yap_unify(ARG1, MkIntegerTerm(Yap_LiveCps)) &&
837 Yap_unify(ARG2, MkIntegerTerm(Yap_FreedCps)) &&
838 Yap_unify(ARG3, MkIntegerTerm(Yap_DirtyCps)) &&
839 Yap_unify(ARG4, MkIntegerTerm(Yap_NewCps));
844p_program_continuation( USES_REGS1 )
847 if (pe->ModuleOfPred) {
848 if (!Yap_unify(ARG1,pe->ModuleOfPred))
851 if (!Yap_unify(ARG1,TermProlog))
855 if (!Yap_unify(ARG2,MkAtomTerm(NameOfFunctor(pe->FunctorOfPred))))
857 if (!Yap_unify(ARG3,MkIntegerTerm(ArityOfFunctor(pe->FunctorOfPred))))
860 if (!Yap_unify(ARG2,MkAtomTerm((
Atom)pe->FunctorOfPred)))
862 if (!Yap_unify(ARG3,MkIntTerm(0)))
869BuildActivePred(
PredEntry *ap, CELL *vect)
874 if (!ap->ArityOfPE) {
877 for (i = 0; i < ap->ArityOfPE; i++) {
878 Term t = Deref(vect[i]);
880 CELL *pt = VarOfTerm(t);
883 Term nt = MkVarTerm();
888 return Yap_MkApplTerm(ap->FunctorOfPred, ap->ArityOfPE, vect);
892UnifyPredInfo(
PredEntry *pe,
int start_arg USES_REGS) {
893 arity_t arity = pe->ArityOfPE;
896 if (pe->ModuleOfPred != IDB_MODULE) {
897 if (pe->ModuleOfPred == PROLOG_MODULE) {
900 tmod = pe->ModuleOfPred;
902 if (pe->ArityOfPE == 0) {
903 tname = MkAtomTerm((
Atom)pe->FunctorOfPred);
906 tname = MkAtomTerm(NameOfFunctor(f));
909 tmod = pe->ModuleOfPred;
910 if (pe->PredFlags & NumberDBPredFlag) {
911 tname = MkIntegerTerm(pe->src.IndxId);
912 }
else if (pe->PredFlags & AtomDBPredFlag) {
913 tname = MkAtomTerm((
Atom)pe->FunctorOfPred);
916 tname = MkAtomTerm(NameOfFunctor(f));
920 return Yap_unify(XREGS[start_arg], tmod) &&
921 Yap_unify(XREGS[start_arg+1],tname) &&
922 Yap_unify(XREGS[start_arg+2],MkIntegerTerm(arity));
931 return find_code_in_clause(pe, ipc, NULL, NULL);
935p_env_info( USES_REGS1 )
937 CELL *env = LCL0-IntegerOfTerm(Deref(ARG1));
943 env_b = MkIntegerTerm((Int)(LCL0-(CELL *)env[E_CB]));
944 env_cp = (
yamop *)env[E_CP];
947 taddr = MkIntegerTerm((Int)env);
948 return Yap_unify(ARG3,MkIntegerTerm((Int)env_cp)) &&
949 Yap_unify(ARG2, taddr) &&
950 Yap_unify(ARG4, env_b);
954p_cpc_info( USES_REGS1 )
957 yamop *ipc = (
yamop *)IntegerOfTerm(Deref(ARG1));
959 pe = PREVOP(ipc,Osbpp)->y_u.Osbpp.p0;
960 return UnifyPredInfo(pe, 2 PASS_REGS) &&
961 Yap_unify(ARG5,MkIntegerTerm(ClauseId(ipc,pe)));
965p_choicepoint_info( USES_REGS1 )
970 yamop *ipc = cptr->cp_ap;
972 Term t = TermNil, taddr;
974 taddr = MkIntegerTerm((Int)cptr);
976 op_numbers opnum = Yap_op_from_opcode(ipc->opc);
980 case _table_load_answer:
981#ifdef LOW_LEVEL_TRACER
982 pe = LOAD_CP(cptr)->cp_pred_entry;
988 case _table_try_answer:
989 case _table_retry_me:
990 case _table_trust_me:
993 case _table_completion:
994#ifdef THREADS_CONSUMER_SHARING
995 case _table_answer_resolution_completion:
997#ifdef LOW_LEVEL_TRACER
998#ifdef DETERMINISTIC_TABLING
999 if (IS_DET_GEN_CP(cptr)) {
1000 pe = DET_GEN_CP(cptr)->cp_pred_entry;
1005 pe = GEN_CP(cptr)->cp_pred_entry;
1006 t = BuildActivePred(pe, (CELL *)(GEN_CP(B) + 1));
1013 case _table_answer_resolution:
1014#ifdef LOW_LEVEL_TRACER
1015 pe = CONS_CP(cptr)->cp_pred_entry;
1021 case _trie_trust_var:
1022 case _trie_retry_var:
1023 case _trie_trust_var_in_pair:
1024 case _trie_retry_var_in_pair:
1025 case _trie_trust_val:
1026 case _trie_retry_val:
1027 case _trie_trust_val_in_pair:
1028 case _trie_retry_val_in_pair:
1029 case _trie_trust_atom:
1030 case _trie_retry_atom:
1031 case _trie_trust_atom_in_pair:
1032 case _trie_retry_atom_in_pair:
1033 case _trie_trust_null:
1034 case _trie_retry_null:
1035 case _trie_trust_null_in_pair:
1036 case _trie_retry_null_in_pair:
1037 case _trie_trust_pair:
1038 case _trie_retry_pair:
1039 case _trie_trust_appl:
1040 case _trie_retry_appl:
1041 case _trie_trust_appl_in_pair:
1042 case _trie_retry_appl_in_pair:
1043 case _trie_trust_extension:
1044 case _trie_retry_extension:
1045 case _trie_trust_double:
1046 case _trie_retry_double:
1047 case _trie_trust_longint:
1048 case _trie_retry_longint:
1049 case _trie_trust_gterm:
1050 case _trie_retry_gterm:
1056 case _retry_logical:
1057 case _trust_logical:
1058 case _count_retry_logical:
1059 case _count_trust_logical:
1060 case _profiled_retry_logical:
1061 case _profiled_trust_logical:
1062 ncl = ipc->y_u.OtaLl.d->ClCode;
1063 pe = ipc->y_u.OtaLl.d->ClPred;
1064 t = BuildActivePred(pe, cptr->cp_args);
1067 pe = ipc->y_u.Osblp.p0;
1069 t = Yap_MkNewApplTerm(FunctorOr, 2);
1074 pe = ipc->y_u.Osblp.p0;
1079 t = Yap_MkNewApplTerm(FunctorOr, 2);
1086 ipc = NEXTOP(ipc,l);
1088 ncl = ipc->y_u.Otapl.d;
1099 ncl = NEXTOP(ipc,OtapFs);
1100 pe = ipc->y_u.OtapFs.p;
1101 t = BuildActivePred(pe, cptr->cp_args);
1103 case _retry_profiled:
1107 ncl = ipc->y_u.Otapl.d;
1108 ipc = NEXTOP(ipc,p);
1113 case _count_retry_me:
1114 case _count_trust_me:
1115 case _profiled_retry_me:
1116 case _profiled_trust_me:
1117 case _retry_and_mark:
1118 case _profiled_retry_and_mark:
1122 ncl = ipc->y_u.Otapl.d;
1123 pe = ipc->y_u.Otapl.p;
1124 t = BuildActivePred(pe, cptr->cp_args);
1127 case _retry_all_exo:
1130 t = BuildActivePred(pe, cptr->cp_args);
1136 pe = RepPredProp(PredPropByAtom(at, CurrentModule));
1144 return UnifyPredInfo(pe, 3 PASS_REGS) &&
1145 Yap_unify(ARG2, taddr) &&
1146 Yap_unify(ARG6,t) &&
1147 Yap_unify(ARG7,MkIntegerTerm(ClauseId(ncl,pe)));
1154 Term cm = CurrentModule;
1156 Yap_InitCPred(
"in_use", 2, in_use, HiddenPredFlag|TestPredFlag | SafePredFlag|SyncPredFlag);
1157 Yap_InitCPred(
"toggle_static_predicates_in_use", 0, p_toggle_static_predicates_in_use, HiddenPredFlag|SafePredFlag|SyncPredFlag);
PredEntry * Yap_PredForChoicePt(choiceptr cp, op_numbers *op)
Yap_v<<ChoicePt(): find out the predicate who generated a CP.
Module property: low-level data used to manage modes.
struct mod_entry * NextME
Module local flags (from SWI compat)
struct pred_entry * PredForME
kind of property