/* === PSC and PSC-PAIR structure creation/initialization =============== */ void init_psc_ep_info(Psc psc) { set_type(psc, 0); psc->env = 0; psc->incr = 0; set_data(psc, 0); set_ep(psc,(byte *)&(psc->load_inst)); cell_opcode(&(psc->load_inst)) = load_pred; psc->this_psc = psc; }
/* * Create a PSC record and initialize its fields. */ static Psc make_psc_rec(char *name, char arity) { Psc temp; int length; length = strlen(name); temp = (Psc)mem_alloc(sizeof(struct psc_rec)); set_env(temp, 0); set_type(temp, 0); set_spy(temp, 0); set_arity(temp, arity); set_length(temp, length); set_data(temp, 0); set_ep(temp,(byte *)&(temp->load_inst)); set_name(temp, string_find(name, 1)); cell_opcode(&(temp->load_inst)) = load_pred; temp->this_psc = temp; return temp; }
static void gen_index(xsbBool tabled, int clause_no, CPtr sob_arg_p, byte arity, Pair ptr) { pindex new_i; CPtr ep1, ep2, temp; int j, size; size = hsize(clause_no); new_i = new_index_seg(size,ptr); ep1 = i_block(new_i) ; cell(sob_arg_p) = (Cell)ep1 ; for (j = 0; j < size; j++) { if (indextab[j].l == 0) cell(ep1) = (Cell) &fail_inst; else if (indextab[j].l == 1) { if (!tabled) { cell(ep1) = *(indextab[j].link); } else { /* create tabletrysingle */ cell(ep1) = cell(indextab[j].link); new_i = new_index_seg(3,ptr); ep2 = i_block(new_i); cell(ep1) = (Cell) ep2; temp = indextab[j].link; gentabletry(tabletrysingle, arity, *temp++, tab_info_ptr, ep2); } } else { /* otherwise create try/retry/trust instruction */ new_i = (pindex)new_index_seg(2*indextab[j].l+tabled,ptr); ep2 = i_block(new_i) ; cell(ep1) = (Cell) ep2 ; temp = (indextab[j].link) ; if (!tabled) { /* generate "try" */ gentry(try, arity, *temp, ep2); } else { gentabletry(tabletry, arity, *temp, tab_info_ptr, ep2); } for (temp++; *temp != (Cell)temp; temp++) { temp = (CPtr) cell(temp); /* generate "retry" */ gentry((tabled?tableretry:retry), arity, *temp, ep2); } /* change last "retry" to "trust" */ cell_opcode(ep2-2) = tabled ? tabletrust : trust; }
/* * Create a PSC record and initialize its fields. */ static Psc make_psc_rec(char *name, char arity) { Psc temp; temp = (Psc)mem_alloc(sizeof(struct psc_rec),ATOM_SPACE); set_type(temp, 0); temp->env = 0; // set_env(temp, 0); // set_spy(temp, 0); // set_shared(temp, 0); // set_tabled(temp, 0); temp->incr = 0; set_arity(temp, arity); set_data(temp, 0); set_ep(temp,(byte *)&(temp->load_inst)); set_name(temp, string_find(name, 1)); cell_opcode(&(temp->load_inst)) = load_pred; temp->this_psc = temp; return temp; }