From: Terrance S. <ts...@us...> - 2005-10-21 17:48:10
|
Update of /cvsroot/xsb/XSB/emu In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13765 Modified Files: auxlry.c auxlry.h debug_xsb.c deref.h tc_insts_xsb_i.h trie_internals.h tries.c Log Message: These are documentation changes only, made while stumbling through unfamiliar code. I wanted to get them in before I started to make code changes. Index: auxlry.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/auxlry.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- auxlry.c 11 Sep 2003 14:23:34 -0000 1.18 +++ auxlry.c 21 Oct 2005 17:47:52 -0000 1.19 @@ -157,3 +157,10 @@ } /*----------------------------------------------------------------------*/ + +/* My version of gdb gets confused when I set a breakpoint in include + files within emuloop. Thus the use of gdb_dummy() */ + +void gdb_dummy(void) + { + } Index: auxlry.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/auxlry.h,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- auxlry.h 3 Oct 2005 13:26:43 -0000 1.22 +++ auxlry.h 21 Oct 2005 17:47:52 -0000 1.23 @@ -70,3 +70,5 @@ xsb_abort("Invalid file descriptor %d in I/O predicate", xsb_filedes); #endif /* __AUXLRY_H__ */ + +extern void gdb_duymmy(void); Index: debug_xsb.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/debug_xsb.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- debug_xsb.c 8 Aug 2005 18:24:34 -0000 1.26 +++ debug_xsb.c 21 Oct 2005 17:47:52 -0000 1.27 @@ -67,9 +67,6 @@ int memory_watch_flag = 0; int register_watch_flag = 0; #endif -/* #ifdef DEBUG_VERBOSE */ -/* int cur_log_level=0; */ -/* #endif */ /*----------------------------------------------------------------------*/ @@ -205,6 +202,7 @@ } /*----------------------------------------------------------------------*/ +/* Used to print out call using WAM registers */ static void print_call(CTXTdeclc Psc psc) { @@ -241,8 +239,6 @@ #if (defined(DEBUG_VERBOSE) || defined(DEBUG_VM)) - - static int count_producer_subgoals(void) { int i; @@ -697,6 +693,7 @@ /*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/ +/* TLS 10/05: now unused? */ void pofsprint(CPtr base, int arity) { @@ -713,6 +710,9 @@ /*----------------------------------------------------------------------*/ +/* TLS: CP_DEBUG needs to be specially defined in order to place a PSC + record in the various choice point frames */ + #ifdef CP_DEBUG void print_cpf_pred(CPtr cpf) { @@ -762,6 +762,10 @@ #endif /* DEBUG */ #ifdef DEBUG_VM + +/* TLS: written many years ago, these may be overtaken by advances in + GDB and other general-purpose debuggers. */ + extern void dis(xsbBool); extern byte *print_inst(FILE *, byte *); Index: deref.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/deref.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- deref.h 14 Jan 2005 18:30:55 -0000 1.7 +++ deref.h 21 Oct 2005 17:47:52 -0000 1.8 @@ -26,17 +26,18 @@ #ifndef __DEREF_H__ #define __DEREF_H__ -/* deref expects argument of type Cell */ +/* TLS: Bao changed these derefs to handle attributed variables, since + * a reference chain can, in principle, have a chain of var pointers + * followed by a chain of attv pointers, ending in a free variable. + * Actually, the code here is somewhat more general, and allows more + * intermixture of attv and var pointers. So I may be wrong or the + * code may be a little more general than it needs to be. + * + * XSB_Deref(op) is the same as XSB_CptrDeref(op) except that + * XSB_CptrDeref(op) performs an explicit cast of op to a CPtr. */ #define XSB_Deref(op) XSB_Deref2(op,break) -/* -#define XSB_Deref2(op,stat) while (isref(op)) { \ - if (op == follow(op)) \ - stat; \ - op = follow(op); } -*/ - /* XSB_Deref2 is changed to consider attributed variables */ #define XSB_Deref2(op, stat) { \ while (isref(op)) { \ @@ -58,13 +59,6 @@ } \ } -/* -#define XSB_CptrDeref(op) while (isref(op)) { \ - if (op == (CPtr) cell(op)) \ - break; \ - op = (CPtr) cell(op); } -*/ - #define XSB_CptrDeref(op) { \ while (isref(op)) { \ if (op == (CPtr) cell(op)) break; \ Index: tc_insts_xsb_i.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/tc_insts_xsb_i.h,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- tc_insts_xsb_i.h 10 Oct 2005 20:25:14 -0000 1.20 +++ tc_insts_xsb_i.h 21 Oct 2005 17:47:52 -0000 1.21 @@ -339,7 +339,8 @@ cell2deref = (Cell) var_regs[(int)int_val(opatom)]; XSB_Deref(cell2deref); if (*reg_arrayptr != cell2deref) { - /* Do not trigger attv interrupt! */ + /* Do not trigger attv interrupt! */ + bind_ref(clref_val(*reg_arrayptr), cell2deref); } else { Index: trie_internals.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/trie_internals.h,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- trie_internals.h 3 Oct 2005 13:26:44 -0000 1.23 +++ trie_internals.h 21 Oct 2005 17:47:52 -0000 1.24 @@ -108,10 +108,12 @@ case XSB_TrieVar: \ if (IsNewTrieVar(Symbol)) \ TN_Instr(pTN) = (byte)trie_try_var; \ - else if (IsNewTrieAttv(Symbol)) \ + else if (IsNewTrieAttv(Symbol)) { \ TN_Instr(pTN) = (byte)trie_try_attv; \ - else \ + } \ + else { \ TN_Instr(pTN) = (byte)trie_try_val; \ + } \ break; \ case XSB_LIST: \ TN_Instr(pTN) = (byte)trie_try_list; \ Index: tries.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/tries.c,v retrieving revision 1.70 retrieving revision 1.71 diff -u -r1.70 -r1.71 --- tries.c 12 Sep 2005 18:20:37 -0000 1.70 +++ tries.c 21 Oct 2005 17:47:52 -0000 1.71 @@ -1292,22 +1292,38 @@ /*----------------------------------------------------------------------*/ +/* TLS gloss: + * + * To me it seems this function is written in an overly general way. + * I dont see a real need to encapsulate all of its input and output + * as it is only called once, in tabletry. What's lost is: + * cptr is simply a pointer to the reg_array, cptr = reg+1 + * VarPosReg is top_of_cpstack; + * + * In addition, the manner in which attributed variables are handled + * could probably be cleaned up a little. Attributed variables must + * eventually point into the heap, but all of the variables in the CP + * stack substitution factor are eagerly redirected to the heap -- + * and probably unnecessarily. + */ + /* * Searches/inserts a subgoal call structure into a subgoal call trie. - * During search/insertion, the variables of the subgoal call are pushed - * on top of the CP stack (through VarPosReg), along with the # of - * variables that were pushed. This forms the substitution factor. + * During search/insertion, the variables of the subgoal call are + * pushed on top of the CP stack (through VarPosReg), along with the # + * of variables that were pushed. This forms the substitution factor. * Prolog variables are standardized during this process to recognize - * multiple (nonlinear) occurences. They must be reset to an unbound - * state before termination. - * Many global variables: + * multiple (nonlinear) occurences. They must be reset to an unbound + * state before termination. + * + * Important variables: * Paren - to be set to point to inserted term's leaf * VarPosReg - pointer to top of CPS; place to put the substitution factor * in high-to-low memory format. - * GNodePtrPtr - local to file? Points to the parent-internal-structure's + * GNodePtrPtr - Points to the parent-internal-structure's * "child" or "NODE_link" field. It's a place to anchor any newly * created NODEs. - * ctr - local to file; contains the number of distinct variables found + * ctr - contains the number of distinct variables found * in the call. * Pay careful attention to the expected argument vector accepted by this * function. It actually points one Cell *before* the term vector! Notice @@ -1341,17 +1357,15 @@ case XSB_FREE: case XSB_REF1: if (! IsStandardizedVariable(call_arg)) { + /* - * Point all local variables to heap. This is required to support - * attributed variables in tabling: in order to share unchanged - * attributed variables between subgoal trie and answer trie, any - * cell in the substitution factor of the call CANNOT be a FREE - * variable itself. - * - * Since the substitution factor will be moved onto heap in CHAT, - * the new substitution factor may contain FREE variables if we - * don't point the local variables to heap here. + * Before proceeding, point all local variables to heap to + * support attributed variables in tabling. In order to share + * unchanged attributed variables between subgoal trie and + * answer trie, any cell in the substitution factor of the + * call CANNOT be a FREE variable itself. */ + if (top_of_localstk <= call_arg && call_arg <= (CPtr) glstack.high - 1) { bld_free(hreg); @@ -1359,11 +1373,10 @@ call_arg = hreg++; } /* - * Save pointers of the substitution factor of the call into CP - * stack. Each pointer points to a variable in the heap (in CHAT) - * or heap/local stack (in SLG-WAM). The variables may get bound - * in the later computation. - */ + * Make VarPosReg, which is in the choice point stack, point + * to call_arg, which is in the heap. Then make the heap + * cell into a trie-variable. But where is VarEnumerator init'd??? + */ *(--VarPosReg) = (Cell) call_arg; StandardizeVariable(call_arg,ctr); one_node_chk_ins(flag,EncodeNewTrieVar(ctr), @@ -1394,7 +1407,8 @@ recvariant_call(flag,CALL_TRIE_TT,call_arg); break; case XSB_ATTV: - /* Now call_arg can only be the first occurrence of an attv */ + /* call_arg is derefed register value pointing to heap. Make + the subst factor CP-stack pointer, VarPosReg, point to it. */ *(--VarPosReg) = (Cell) call_arg; call_arg = clref_val(call_arg); /* the VAR part of the attv */ /* |