7#include "clause_list.h"
11static void mk_blob(
int sz USES_REGS) {
14 HR[0] = (CELL)FunctorBigInt;
19 HR += (1 +
sizeof(
MP_INT) /
sizeof(CELL));
20 HR[sz] = CloseExtension((CELL*)(dst-1)-2);
24static CELL *extend_blob(CELL *start,
int sz USES_REGS) {
30 dst = (
MP_INT *)(start + 2);
31 osize = dst->_mp_alloc;
32 start += (1 +
sizeof(
MP_INT) /
sizeof(CELL));
33 start[sz + osize] = CloseExtension(start);
50 int Yap_ClauseListExtend(
clause_list_t cl,
void *clause,
void *pred) {
59 if (!(ptr = (
void **)extend_blob(cl->start, 1 PASS_REGS)))
62 }
else if (cl->n == 1) {
64 yamop *code_p, *fclause;
66 if (!(ptr = (
yamop **)extend_blob(
67 cl->start, 2 * (CELL)NEXTOP((
yamop *)NULL, Otapl) /
sizeof(CELL) -
71 code_p = (
yamop *)(ptr - 1);
72 code_p->opc = Yap_opcode(_try_clause);
73 code_p->y_u.Otapl.d = fclause;
74 code_p->y_u.Otapl.s = ap->ArityOfPE;
75 code_p->y_u.Otapl.p = ap;
77 code_p->y_u.Otapl.te = ap->TableOfPred;
80 INIT_YAMOP_LTT(code_p, 0);
82 code_p = NEXTOP(code_p, Otapl);
83 code_p->opc = Yap_opcode(_trust);
84 code_p->y_u.Otapl.d = clause;
85 code_p->y_u.Otapl.s = ap->ArityOfPE;
86 code_p->y_u.Otapl.p = ap;
88 code_p->y_u.Otapl.te = ap->TableOfPred;
91 INIT_YAMOP_LTT(code_p, 0);
96 if (!(code_p = (
yamop *)extend_blob(cl->start,
97 ((CELL)NEXTOP((
yamop *)NULL, Otapl)) /
98 sizeof(CELL) PASS_REGS)))
100 code_p->opc = Yap_opcode(_trust);
101 code_p->y_u.Otapl.d = clause;
102 code_p->y_u.Otapl.s = ap->ArityOfPE;
103 code_p->y_u.Otapl.p = ap;
105 code_p->y_u.Otapl.te = ap->TableOfPred;
108 INIT_YAMOP_LTT(code_p, 0);
110 code_p = PREVOP(code_p, Otapl);
111 code_p->opc = Yap_opcode(_retry);
139 if (!(ptr = (
void **)extend_blob(cl->start, 0 PASS_REGS)))
147 ptr = (CELL *)cl->start;
148 ptr += (1 +
sizeof(
MP_INT) /
sizeof(CELL));
153 void *Yap_FAILCODE(
void) {
return (
void *)FAILCODE; }