diff --git a/C/cdmgr.c b/C/cdmgr.c index 7923fb4e5..c193f1361 100644 --- a/C/cdmgr.c +++ b/C/cdmgr.c @@ -709,13 +709,10 @@ assertz_dynam_clause(PredEntry *p, CODEADDR cp) static void expand_consult(void) { - consult_obj *new_cl, *new_cb, *new_cs, *old_top; - UInt old_sz = ConsultCapacity-1, i; - Int diff; - + consult_obj *new_cl, *new_cb, *new_cs; + UInt OldConsultCapacity = ConsultCapacity; - old_top = ConsultBase+ConsultCapacity; - /* now increment consult capacity */ + /* now double consult capacity */ ConsultCapacity += InitialConsultCapacity; /* I assume it always works ;-) */ new_cl = (consult_obj *)AllocCodeSpace(sizeof(consult_obj)*ConsultCapacity); @@ -723,21 +720,16 @@ static void expand_consult(void) Error(SYSTEM_ERROR,TermNil,"Could not expand consult space: Heap crashed against Stacks"); return; } - new_cb = new_cl + (ConsultSp-ConsultBase); new_cs = new_cl + (InitialConsultCapacity+1); + new_cb = new_cs + (ConsultBase-ConsultSp); /* start copying */ - memcpy((void *)(new_cs), (void *)(ConsultSp), (ConsultCapacity-(InitialConsultCapacity+1))*sizeof(consult_obj)); + memcpy((void *)(new_cs), (void *)(ConsultSp), OldConsultCapacity*sizeof(consult_obj)); /* copying done, release old space */ FreeCodeSpace((char *)ConsultLow); /* next, set up pointers correctly */ - diff = (char *)new_cb-(char *)ConsultBase; ConsultSp = new_cs; ConsultBase = new_cb; ConsultLow = new_cl; - /* adjust consultbase pointers */ - for (i = 0; i < old_sz; i++) { - new_cs->c = (consult_obj *)((void *)(new_cs->c)+diff); - } } /* p was already locked */ @@ -1127,7 +1119,7 @@ init_consult(int mode, char *file) ConsultSp--; ConsultSp->mode = mode; ConsultSp--; - ConsultSp->c = ConsultBase; + ConsultSp->c = (ConsultBase-ConsultSp); ConsultBase = ConsultSp; #if !defined(YAPOR) && !defined(SBA) if (consult_level == 0) @@ -1178,7 +1170,8 @@ end_consult(void) } #endif ConsultSp = ConsultBase; - ConsultBase = ConsultSp->c; + printf("ConsultBase is %p\n",ConsultBase); + ConsultBase = ConsultSp+ConsultSp->c; ConsultSp += 3; consult_level--; #if !defined(YAPOR) && !defined(SBA) diff --git a/C/heapgc.c b/C/heapgc.c index 245f00a84..705b39354 100644 --- a/C/heapgc.c +++ b/C/heapgc.c @@ -572,7 +572,7 @@ init_dbtable(tr_fr_ptr trail_ptr) { #ifdef DEBUG #define INSTRUMENT_GC 1 -/* #define CHECK_CHOICEPOINTS 1 */ +#define CHECK_CHOICEPOINTS 1 #ifdef INSTRUMENT_GC typedef enum { diff --git a/H/Heap.h b/H/Heap.h index dbf0ee55c..bed864456 100644 --- a/H/Heap.h +++ b/H/Heap.h @@ -10,7 +10,7 @@ * File: Heap.h * * mods: * * comments: Heap Init Structure * -* version: $Id: Heap.h,v 1.15 2001-12-17 18:31:10 vsc Exp $ * +* version: $Id: Heap.h,v 1.16 2002-01-01 05:26:25 vsc Exp $ * *************************************************************************/ /* information that can be stored in Code Space */ @@ -80,10 +80,10 @@ typedef struct various_codes { CODEADDR clause; Functor func; } clausecode; - consult_obj *consultsp; - consult_obj *consultbase; - consult_obj *consultlow; - Int consultcapacity; + union CONSULT_OBJ *consultsp; + union CONSULT_OBJ *consultbase; + union CONSULT_OBJ *consultlow; + UInt consultcapacity; #if HAVE_LIBREADLINE char *readline_buf, *readline_pos; #endif diff --git a/H/clause.h b/H/clause.h index 5f2a25cc6..9beb5cb06 100644 --- a/H/clause.h +++ b/H/clause.h @@ -18,6 +18,15 @@ #include "Yatom.h" #include "Heap.h" +/* consulting files */ + +typedef union CONSULT_OBJ { + char *filename; + int mode; + Prop p; + UInt c; +} consult_obj; + /* Either we are assembling clauses or indexing code */ #define ASSEMBLING_CLAUSE 0 diff --git a/H/compile.h b/H/compile.h index 09a5ae9b1..ec6bdd942 100644 --- a/H/compile.h +++ b/H/compile.h @@ -15,6 +15,8 @@ * * *************************************************************************/ +/* consult stack management */ + /* virtual machine instruction op-codes */ typedef enum compiler_op { nop_op, diff --git a/m4/Yap.h.m4 b/m4/Yap.h.m4 index da2fd6bef..0106e7515 100644 --- a/m4/Yap.h.m4 +++ b/m4/Yap.h.m4 @@ -10,7 +10,7 @@ * File: Yap.h.m4 * * mods: * * comments: main header file for YAP * -* version: $Id: Yap.h.m4,v 1.15 2001-12-20 17:19:43 vsc Exp $ * +* version: $Id: Yap.h.m4,v 1.16 2002-01-01 05:26:25 vsc Exp $ * *************************************************************************/ #include "config.h" @@ -733,15 +733,6 @@ extern int emacs_mode; /************ variable concerned with version number *****************/ extern char version_number[]; -/* consult stack management */ - -typedef union CONSULT_OBJ { - char *filename; - int mode; - Prop p; - union CONSULT_OBJ *c; -} consult_obj; - /********* common instructions codes*************************/ #define MAX_PROMPT 256 diff --git a/m4/sshift.h.m4 b/m4/sshift.h.m4 index c443ab9fd..b2a396d3e 100644 --- a/m4/sshift.h.m4 +++ b/m4/sshift.h.m4 @@ -77,7 +77,7 @@ Inline(BlobTermAdjust, Term, Term, t, (t-HDiff) ) Inline(BlobTermAdjust, Term, Term, t, (t+HDiff) ) #endif Inline(AtomEntryAdjust, AtomEntry *, AtomEntry *, at, (AtomEntry *)(CharP(at)+HDiff) ) -Inline(ConsultObjAdjust, consult_obj *, consult_obj *, co, (consult_obj *)(CharP(co)+HDiff) ) +Inline(ConsultObjAdjust, union CONSULT_OBJ *, union CONSULT_OBJ *, co, (union CONSULT_OBJ *)(CharP(co)+HDiff) ) Inline(DBRefAdjust, DBRef, DBRef, dbr, (DBRef)(CharP(dbr)+HDiff) ) Inline(CodeAdjust, Term, Term, dbr, ((Term)(dbr)+HDiff) ) Inline(AddrAdjust, ADDR, ADDR, addr, (ADDR)(CharP(addr)+HDiff) )