more updates to HEAPFIELDS.
This commit is contained in:
parent
7116d1385b
commit
923094bd01
90
C/agc.c
90
C/agc.c
@ -20,6 +20,7 @@ static char SccsId[] = "@(#)agc.c 1.3 3/15/90";
|
|||||||
|
|
||||||
|
|
||||||
#include "absmi.h"
|
#include "absmi.h"
|
||||||
|
#include "foreign.h"
|
||||||
#include "alloc.h"
|
#include "alloc.h"
|
||||||
#include "yapio.h"
|
#include "yapio.h"
|
||||||
#include "iopreds.h"
|
#include "iopreds.h"
|
||||||
@ -152,6 +153,7 @@ AtomAdjust(Atom a)
|
|||||||
#define SIndexAdjust(P) (P)
|
#define SIndexAdjust(P) (P)
|
||||||
#define LocalAddrAdjust(P) (P)
|
#define LocalAddrAdjust(P) (P)
|
||||||
#define GlobalAddrAdjust(P) (P)
|
#define GlobalAddrAdjust(P) (P)
|
||||||
|
#define OpListAdjust(P) (P)
|
||||||
#define PtoLUCAdjust(P) (P)
|
#define PtoLUCAdjust(P) (P)
|
||||||
#define PtoStCAdjust(P) (P)
|
#define PtoStCAdjust(P) (P)
|
||||||
#define PtoArrayEAdjust(P) (P)
|
#define PtoArrayEAdjust(P) (P)
|
||||||
@ -173,6 +175,8 @@ AtomAdjust(Atom a)
|
|||||||
#define XAdjust(P) (P)
|
#define XAdjust(P) (P)
|
||||||
#define YAdjust(P) (P)
|
#define YAdjust(P) (P)
|
||||||
#define HoldEntryAdjust(P) (P)
|
#define HoldEntryAdjust(P) (P)
|
||||||
|
#define CodeCharPAdjust(P) (P)
|
||||||
|
#define CodeVoidPAdjust(P) (P)
|
||||||
|
|
||||||
#define recompute_mask(dbr)
|
#define recompute_mask(dbr)
|
||||||
|
|
||||||
@ -196,64 +200,21 @@ static void init_reg_copies(void)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mark_hash_entry(AtomHashEntry *HashPtr)
|
RestoreAtomList(Atom atm)
|
||||||
{
|
{
|
||||||
Atom atm;
|
AtomEntry *at;
|
||||||
|
|
||||||
atm = HashPtr->Entry;
|
at = RepAtom(atm);
|
||||||
if (atm) {
|
if (EndOfPAEntr(at))
|
||||||
AtomEntry *at = RepAtom(atm);
|
return;
|
||||||
do {
|
do {
|
||||||
RestoreAtom(at);
|
RestoreAtom(atm);
|
||||||
atm = at->NextOfAE;
|
atm = CleanAtomMarkedBit(at->NextOfAE);
|
||||||
at = RepAtom(CleanAtomMarkedBit(atm));
|
at = RepAtom(atm);
|
||||||
} while (!EndOfPAEntr(at));
|
} while (!EndOfPAEntr(at));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
mark_hash_preds(void)
|
|
||||||
{
|
|
||||||
UInt i;
|
|
||||||
|
|
||||||
for (i = 0; i < PredHashTableSize; i++) {
|
|
||||||
PredEntry *p = PredHash[i];
|
|
||||||
|
|
||||||
while (p) {
|
|
||||||
Prop nextp = p->NextOfPE = PropAdjust(p->NextOfPE);
|
|
||||||
CleanCode(p);
|
|
||||||
p = RepPredProp(nextp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is the really tough part, to restore the whole of the heap
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
mark_atoms(void)
|
|
||||||
{
|
|
||||||
AtomHashEntry *HashPtr = HashChain;
|
|
||||||
register int i;
|
|
||||||
|
|
||||||
restore_codes();
|
|
||||||
for (i = 0; i < AtomHashTableSize; ++i) {
|
|
||||||
mark_hash_entry(HashPtr);
|
|
||||||
HashPtr++;
|
|
||||||
}
|
|
||||||
HashPtr = WideHashChain;
|
|
||||||
for (i = 0; i < WideAtomHashTableSize; ++i) {
|
|
||||||
mark_hash_entry(HashPtr);
|
|
||||||
HashPtr++;
|
|
||||||
}
|
|
||||||
mark_hash_entry(&INVISIBLECHAIN);
|
|
||||||
RestoreAtom(RepAtom(AtomFoundVar));
|
|
||||||
RestoreAtom(RepAtom(AtomFreeTerm));
|
|
||||||
mark_hash_preds();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mark_trail(void)
|
mark_trail(void)
|
||||||
@ -379,26 +340,6 @@ mark_stacks(void)
|
|||||||
mark_global();
|
mark_global();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
mark_streams(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i=0; i < MaxStreams; i++) {
|
|
||||||
if (!(Stream[i].status & (Free_Stream_f|Socket_Stream_f|InMemory_Stream_f|Pipe_Stream_f))) {
|
|
||||||
/* This is a file, so it has a name */
|
|
||||||
AtomEntry *ae = RepAtom(Stream[i].u.file.name);
|
|
||||||
MarkAtomEntry(ae);
|
|
||||||
ae = RepAtom(AtomOfTerm(Stream[i].u.file.user_name));
|
|
||||||
MarkAtomEntry(ae);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i=0;i<NOfFileAliases;i++) {
|
|
||||||
AtomEntry *ae = RepAtom(FileAliases[i].name);
|
|
||||||
MarkAtomEntry(ae);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clean_atom_list(AtomHashEntry *HashPtr)
|
clean_atom_list(AtomHashEntry *HashPtr)
|
||||||
{
|
{
|
||||||
@ -480,8 +421,7 @@ atom_gc(void)
|
|||||||
YAPEnterCriticalSection();
|
YAPEnterCriticalSection();
|
||||||
init_reg_copies();
|
init_reg_copies();
|
||||||
mark_stacks();
|
mark_stacks();
|
||||||
mark_streams();
|
restore_codes();
|
||||||
mark_atoms();
|
|
||||||
clean_atoms();
|
clean_atoms();
|
||||||
AGcLastCall = NOfAtoms;
|
AGcLastCall = NOfAtoms;
|
||||||
YAPLeaveCriticalSection();
|
YAPLeaveCriticalSection();
|
||||||
|
177
C/init.c
177
C/init.c
@ -79,10 +79,10 @@ STD_PROTO(void exit, (int));
|
|||||||
|
|
||||||
/************* variables related to memory allocation ***************/
|
/************* variables related to memory allocation ***************/
|
||||||
|
|
||||||
ADDR Yap_HeapBase;
|
|
||||||
|
|
||||||
#if defined(THREADS)
|
#if defined(THREADS)
|
||||||
|
|
||||||
|
ADDR Yap_HeapBase;
|
||||||
|
|
||||||
struct restore_info rinfo[MAX_THREADS];
|
struct restore_info rinfo[MAX_THREADS];
|
||||||
|
|
||||||
struct thread_globs Yap_thread_gl[MAX_THREADS];
|
struct thread_globs Yap_thread_gl[MAX_THREADS];
|
||||||
@ -1006,14 +1006,14 @@ InitEnvInst(yamop start[2], yamop **instp, op_numbers opc, PredEntry *pred)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
InitOtaplInst(yamop start[1], OPCODE opc)
|
InitOtaplInst(yamop start[1], OPCODE opc, PredEntry *pe)
|
||||||
{
|
{
|
||||||
yamop *ipc = start;
|
yamop *ipc = start;
|
||||||
|
|
||||||
/* this is a place holder, it should not really be used */
|
/* this is a place holder, it should not really be used */
|
||||||
ipc->opc = Yap_opcode(opc);
|
ipc->opc = Yap_opcode(opc);
|
||||||
ipc->u.Otapl.s = 0;
|
ipc->u.Otapl.s = 0;
|
||||||
ipc->u.Otapl.p = PredFail;
|
ipc->u.Otapl.p = pe;
|
||||||
ipc->u.Otapl.d = NULL;
|
ipc->u.Otapl.d = NULL;
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
INIT_YAMOP_LTT(ipc, 1);
|
INIT_YAMOP_LTT(ipc, 1);
|
||||||
@ -1057,27 +1057,74 @@ InitLogDBErasedMarker(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
InitCodes(void)
|
InitAtoms(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
AtomHashTableSize = MaxHash;
|
||||||
|
HashChain = (AtomHashEntry *)Yap_AllocAtomSpace(sizeof(AtomHashEntry) * MaxHash);
|
||||||
|
if (HashChain == NULL) {
|
||||||
|
Yap_Error(FATAL_ERROR,MkIntTerm(0),"allocating initial atom table");
|
||||||
|
}
|
||||||
|
for (i = 0; i < MaxHash; ++i) {
|
||||||
|
INIT_RWLOCK(HashChain[i].AERWLock);
|
||||||
|
HashChain[i].Entry = NIL;
|
||||||
|
}
|
||||||
|
NOfAtoms = 0;
|
||||||
|
#if THREADS
|
||||||
|
SF_STORE->AtFoundVar = Yap_LookupAtom("**");
|
||||||
|
Yap_ReleaseAtom(AtomFoundVar);
|
||||||
|
SF_STORE->AtFreeTerm = Yap_LookupAtom("?");
|
||||||
|
Yap_ReleaseAtom(AtomFreeTerm);
|
||||||
|
SF_STORE->AtNil = Yap_LookupAtom("[]");
|
||||||
|
SF_STORE->AtDot = Yap_LookupAtom(".");
|
||||||
|
#else
|
||||||
|
Yap_LookupAtomWithAddress("**",&(SF_STORE->AtFoundVar));
|
||||||
|
Yap_ReleaseAtom(AtomFoundVar);
|
||||||
|
Yap_LookupAtomWithAddress("?",&(SF_STORE->AtFreeTerm));
|
||||||
|
Yap_ReleaseAtom(AtomFreeTerm);
|
||||||
|
Yap_LookupAtomWithAddress("[]",&(SF_STORE->AtNil));
|
||||||
|
Yap_LookupAtomWithAddress(".",&(SF_STORE->AtDot));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
InitWideAtoms(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
WideAtomHashTableSize = MaxWideHash;
|
||||||
|
WideHashChain = (AtomHashEntry *)Yap_AllocAtomSpace(sizeof(AtomHashEntry) * MaxWideHash);
|
||||||
|
if (WideHashChain == NULL) {
|
||||||
|
Yap_Error(FATAL_ERROR,MkIntTerm(0),"allocating wide atom table");
|
||||||
|
}
|
||||||
|
for (i = 0; i < MaxWideHash; ++i) {
|
||||||
|
INIT_RWLOCK(WideHashChain[i].AERWLock);
|
||||||
|
WideHashChain[i].Entry = NIL;
|
||||||
|
}
|
||||||
|
NOfWideAtoms = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
InitInvisibleAtoms(void)
|
||||||
{
|
{
|
||||||
/* initialise invisible chain */
|
/* initialise invisible chain */
|
||||||
Yap_heap_regs->invisiblechain.Entry = NIL;
|
Yap_heap_regs->invisiblechain.Entry = NIL;
|
||||||
INIT_RWLOCK(Yap_heap_regs->invisiblechain.AERWLock);
|
INIT_RWLOCK(Yap_heap_regs->invisiblechain.AERWLock);
|
||||||
#include "iatoms.h"
|
}
|
||||||
#include "ihstruct.h"
|
|
||||||
Yap_InitModules();
|
|
||||||
#ifdef THREADS
|
#ifdef THREADS
|
||||||
INIT_LOCK(Yap_heap_regs->thread_handles_lock);
|
static void
|
||||||
{
|
InitThreadHandles(void)
|
||||||
int i;
|
{
|
||||||
for (i=0; i < MAX_THREADS; i++) {
|
int i;
|
||||||
Yap_heap_regs->thread_handle[i].in_use = FALSE;
|
for (i=0; i < MAX_THREADS; i++) {
|
||||||
Yap_heap_regs->thread_handle[i].zombie = FALSE;
|
Yap_heap_regs->thread_handle[i].in_use = FALSE;
|
||||||
Yap_heap_regs->thread_handle[i].local_preds = NULL;
|
Yap_heap_regs->thread_handle[i].zombie = FALSE;
|
||||||
|
Yap_heap_regs->thread_handle[i].local_preds = NULL;
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
Yap_heap_regs->thread_handle[i].thread_inst_count = 0LL;
|
Yap_heap_regs->thread_handle[i].thread_inst_count = 0LL;
|
||||||
#endif
|
#endif
|
||||||
pthread_mutex_init(&Yap_heap_regs->thread_handle[i].tlock, NULL);
|
pthread_mutex_init(&Yap_heap_regs->thread_handle[i].tlock, NULL);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Yap_heap_regs->thread_handle[0].id = 0;
|
Yap_heap_regs->thread_handle[0].id = 0;
|
||||||
Yap_heap_regs->thread_handle[0].in_use = TRUE;
|
Yap_heap_regs->thread_handle[0].in_use = TRUE;
|
||||||
@ -1087,22 +1134,14 @@ InitCodes(void)
|
|||||||
Yap_heap_regs->thread_handle[0].handle = pthread_self();
|
Yap_heap_regs->thread_handle[0].handle = pthread_self();
|
||||||
pthread_mutex_init(&ThreadHandle[0].tlock, NULL);
|
pthread_mutex_init(&ThreadHandle[0].tlock, NULL);
|
||||||
pthread_mutex_init(&ThreadHandle[0].tlock_status, NULL);
|
pthread_mutex_init(&ThreadHandle[0].tlock_status, NULL);
|
||||||
Yap_heap_regs->n_of_threads = 1;
|
}
|
||||||
Yap_heap_regs->n_of_threads_created = 1;
|
|
||||||
Yap_heap_regs->threads_total_time = 0;
|
|
||||||
#endif
|
|
||||||
#ifdef YAPOR
|
|
||||||
Yap_heap_regs->n_of_threads = 1;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
InitCodes(void)
|
||||||
|
{
|
||||||
|
#include "ihstruct.h"
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
INIT_LOCK(Yap_heap_regs->bgl);
|
|
||||||
INIT_LOCK(Yap_heap_regs->free_blocks_lock);
|
|
||||||
INIT_LOCK(Yap_heap_regs->heap_used_lock);
|
|
||||||
INIT_LOCK(Yap_heap_regs->heap_top_lock);
|
|
||||||
INIT_LOCK(Yap_heap_regs->dead_static_clauses_lock);
|
|
||||||
INIT_LOCK(Yap_heap_regs->dead_mega_clauses_lock);
|
|
||||||
INIT_LOCK(Yap_heap_regs->dead_static_indices_lock);
|
|
||||||
Yap_heap_regs->heap_top_owner = -1;
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i=0; i < MAX_AGENTS; i++) {
|
for (i=0; i < MAX_AGENTS; i++) {
|
||||||
@ -1156,38 +1195,9 @@ InitCodes(void)
|
|||||||
Yap_heap_regs->wl.consultbase = Yap_heap_regs->wl.consultsp =
|
Yap_heap_regs->wl.consultbase = Yap_heap_regs->wl.consultsp =
|
||||||
Yap_heap_regs->wl.consultlow + Yap_heap_regs->wl.consultcapacity;
|
Yap_heap_regs->wl.consultlow + Yap_heap_regs->wl.consultcapacity;
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
Yap_heap_regs->system_pred_goal_expansion_on = FALSE;
|
|
||||||
Yap_heap_regs->maxdepth = 0;
|
|
||||||
Yap_heap_regs->maxlist = 0;
|
|
||||||
Yap_heap_regs->maxwriteargs = 0;
|
|
||||||
|
|
||||||
Yap_heap_regs->atprompt = 0;
|
|
||||||
|
|
||||||
/* use Quintus compatible atom_chars and number_chars, not ISO compatible */
|
|
||||||
Yap_heap_regs->char_conversion_table = NULL;
|
|
||||||
Yap_heap_regs->char_conversion_table2 = NULL;
|
|
||||||
/*
|
|
||||||
don't initialise this here, this is initialised by Yap_InitModules!!!!
|
|
||||||
Yap_heap_regs->no_of_modules = 1;
|
|
||||||
*/
|
|
||||||
Yap_heap_regs->term_refound_var = MkAtomTerm(AtomRefoundVar);
|
|
||||||
Yap_heap_regs->n_of_file_aliases = 0;
|
|
||||||
Yap_heap_regs->file_aliases = NULL;
|
|
||||||
Yap_heap_regs->foreign_code_loaded = NULL;
|
|
||||||
Yap_heap_regs->yap_lib_dir = NULL;
|
|
||||||
Yap_heap_regs->agc_last_call = 0;
|
|
||||||
Yap_heap_regs->agc_threshold = 10000;
|
|
||||||
Yap_heap_regs->agc_hook = NULL;
|
|
||||||
Yap_heap_regs->parser_error_style = EXCEPTION_ON_PARSER_ERROR;
|
|
||||||
Yap_heap_regs->global_hold_entry = Yap_InitAtomHold();
|
|
||||||
Yap_heap_regs->size_of_overflow = 0;
|
|
||||||
/* make sure no one else can use these two atoms */
|
/* make sure no one else can use these two atoms */
|
||||||
CurrentModule = 0;
|
CurrentModule = 0;
|
||||||
OpList = NULL;
|
|
||||||
Yap_heap_regs->op_list = NULL;
|
|
||||||
Yap_heap_regs->dead_static_clauses = NULL;
|
|
||||||
Yap_heap_regs->dead_mega_clauses = NULL;
|
|
||||||
Yap_heap_regs->dead_static_indices = NULL;
|
|
||||||
Yap_ReleaseAtom(AtomOfTerm(Yap_heap_regs->term_refound_var));
|
Yap_ReleaseAtom(AtomOfTerm(Yap_heap_regs->term_refound_var));
|
||||||
/* make sure we have undefp defined */
|
/* make sure we have undefp defined */
|
||||||
/* predicates can only be defined after this point */
|
/* predicates can only be defined after this point */
|
||||||
@ -1201,7 +1211,6 @@ InitCodes(void)
|
|||||||
Yap_heap_regs->getwork_seq_code.u.Otapl.p = RepPredProp(PredPropByAtom(AtomGetworkSeq, PROLOG_MODULE));
|
Yap_heap_regs->getwork_seq_code.u.Otapl.p = RepPredProp(PredPropByAtom(AtomGetworkSeq, PROLOG_MODULE));
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
|
|
||||||
Yap_heap_regs->yap_streams = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1216,7 +1225,6 @@ InitVersion(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Yap_InitWorkspace(UInt Heap, UInt Stack, UInt Trail, UInt Atts, UInt max_table_size,
|
Yap_InitWorkspace(UInt Heap, UInt Stack, UInt Trail, UInt Atts, UInt max_table_size,
|
||||||
int n_workers, int sch_loop, int delay_load)
|
int n_workers, int sch_loop, int delay_load)
|
||||||
@ -1273,57 +1281,17 @@ Yap_InitWorkspace(UInt Heap, UInt Stack, UInt Trail, UInt Atts, UInt max_table_s
|
|||||||
#else
|
#else
|
||||||
Yap_InitMemory (Trail, Heap, Stack+Atts);
|
Yap_InitMemory (Trail, Heap, Stack+Atts);
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
Yap_AttsSize = Atts;
|
|
||||||
#if defined(YAPOR) || defined(TABLING)
|
#if defined(YAPOR) || defined(TABLING)
|
||||||
Yap_init_global(max_table_size, n_workers, sch_loop, delay_load);
|
Yap_init_global(max_table_size, n_workers, sch_loop, delay_load);
|
||||||
#endif /* YAPOR || TABLING */
|
#endif /* YAPOR || TABLING */
|
||||||
|
Yap_AttsSize = Atts;
|
||||||
|
|
||||||
Yap_InitTime ();
|
Yap_InitTime ();
|
||||||
AtomHashTableSize = MaxHash;
|
|
||||||
WideAtomHashTableSize = MaxWideHash;
|
|
||||||
HashChain = (AtomHashEntry *)Yap_AllocAtomSpace(sizeof(AtomHashEntry) * MaxHash);
|
|
||||||
if (HashChain == NULL) {
|
|
||||||
Yap_Error(FATAL_ERROR,MkIntTerm(0),"allocating initial atom table");
|
|
||||||
}
|
|
||||||
for (i = 0; i < MaxHash; ++i) {
|
|
||||||
INIT_RWLOCK(HashChain[i].AERWLock);
|
|
||||||
HashChain[i].Entry = NIL;
|
|
||||||
}
|
|
||||||
WideHashChain = (AtomHashEntry *)Yap_AllocAtomSpace(sizeof(AtomHashEntry) * MaxWideHash);
|
|
||||||
if (WideHashChain == NULL) {
|
|
||||||
Yap_Error(FATAL_ERROR,MkIntTerm(0),"allocating initial atom table");
|
|
||||||
}
|
|
||||||
for (i = 0; i < MaxWideHash; ++i) {
|
|
||||||
INIT_RWLOCK(WideHashChain[i].AERWLock);
|
|
||||||
WideHashChain[i].Entry = NIL;
|
|
||||||
}
|
|
||||||
NOfAtoms = 0;
|
|
||||||
NOfWideAtoms = 0;
|
|
||||||
PredsInHashTable = 0;
|
|
||||||
#if THREADS
|
|
||||||
SF_STORE->AtFoundVar = Yap_LookupAtom("**");
|
|
||||||
Yap_ReleaseAtom(AtomFoundVar);
|
|
||||||
SF_STORE->AtFreeTerm = Yap_LookupAtom("?");
|
|
||||||
Yap_ReleaseAtom(AtomFreeTerm);
|
|
||||||
SF_STORE->AtNil = Yap_LookupAtom("[]");
|
|
||||||
SF_STORE->AtDot = Yap_LookupAtom(".");
|
|
||||||
#else
|
|
||||||
Yap_LookupAtomWithAddress("**",&(SF_STORE->AtFoundVar));
|
|
||||||
Yap_ReleaseAtom(AtomFoundVar);
|
|
||||||
Yap_LookupAtomWithAddress("?",&(SF_STORE->AtFreeTerm));
|
|
||||||
Yap_ReleaseAtom(AtomFreeTerm);
|
|
||||||
Yap_LookupAtomWithAddress("[]",&(SF_STORE->AtNil));
|
|
||||||
Yap_LookupAtomWithAddress(".",&(SF_STORE->AtDot));
|
|
||||||
#endif
|
|
||||||
/* InitAbsmi must be done before InitCodes */
|
/* InitAbsmi must be done before InitCodes */
|
||||||
/* This must be done before initialising predicates */
|
/* This must be done before initialising predicates */
|
||||||
for (i = 0; i <= LAST_FLAG; i++) {
|
for (i = 0; i <= LAST_FLAG; i++) {
|
||||||
yap_flags[i] = 0;
|
yap_flags[i] = 0;
|
||||||
}
|
}
|
||||||
#ifdef LOW_PROF
|
|
||||||
ProfilerOn = FALSE;
|
|
||||||
FPreds = NULL;
|
|
||||||
#endif
|
|
||||||
ActiveSignals = 0;
|
ActiveSignals = 0;
|
||||||
DoingUndefp = FALSE;
|
DoingUndefp = FALSE;
|
||||||
DelayArenaOverflows = 0;
|
DelayArenaOverflows = 0;
|
||||||
@ -1342,7 +1310,6 @@ Yap_InitWorkspace(UInt Heap, UInt Stack, UInt Trail, UInt Atts, UInt max_table_s
|
|||||||
InitDebug();
|
InitDebug();
|
||||||
InitVersion();
|
InitVersion();
|
||||||
Yap_InitSysPath();
|
Yap_InitSysPath();
|
||||||
InitFlags();
|
|
||||||
InitStdPreds();
|
InitStdPreds();
|
||||||
/* make sure tmp area is available */
|
/* make sure tmp area is available */
|
||||||
{
|
{
|
||||||
|
14
C/iopreds.c
14
C/iopreds.c
@ -967,7 +967,7 @@ p_setprompt (void)
|
|||||||
Term t = Deref(ARG1);
|
Term t = Deref(ARG1);
|
||||||
if (IsVarTerm (t) || !IsAtomTerm (t))
|
if (IsVarTerm (t) || !IsAtomTerm (t))
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
*AtPrompt = AtomOfTerm (t);
|
AtPrompt = AtomOfTerm (t);
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -989,7 +989,7 @@ p_prompt (void)
|
|||||||
{ /* prompt(Old,New) */
|
{ /* prompt(Old,New) */
|
||||||
Term t = Deref (ARG2);
|
Term t = Deref (ARG2);
|
||||||
Atom a;
|
Atom a;
|
||||||
if (!Yap_unify_constant (ARG1, MkAtomTerm (*AtPrompt)))
|
if (!Yap_unify_constant (ARG1, MkAtomTerm (AtPrompt)))
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
if (IsVarTerm (t) || !IsAtomTerm (t))
|
if (IsVarTerm (t) || !IsAtomTerm (t))
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
@ -999,7 +999,7 @@ p_prompt (void)
|
|||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
strncpy(Prompt, RepAtom (a)->StrOfAE, MAX_PROMPT);
|
strncpy(Prompt, RepAtom (a)->StrOfAE, MAX_PROMPT);
|
||||||
*AtPrompt = a;
|
AtPrompt = a;
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1118,7 +1118,7 @@ ReadlineGetc(int sno)
|
|||||||
Yap_PrologMode &= ~ConsoleGetcMode;
|
Yap_PrologMode &= ~ConsoleGetcMode;
|
||||||
}
|
}
|
||||||
newline=FALSE;
|
newline=FALSE;
|
||||||
strncpy (Prompt, RepAtom (*AtPrompt)->StrOfAE, MAX_PROMPT);
|
strncpy (Prompt, RepAtom (AtPrompt)->StrOfAE, MAX_PROMPT);
|
||||||
/* window of vulnerability closed */
|
/* window of vulnerability closed */
|
||||||
if (myrl_line == NULL)
|
if (myrl_line == NULL)
|
||||||
return console_post_process_eof(s);
|
return console_post_process_eof(s);
|
||||||
@ -1369,7 +1369,7 @@ ConsoleSocketGetc(int sno)
|
|||||||
while ((ch = *cptr++) != '\0') {
|
while ((ch = *cptr++) != '\0') {
|
||||||
Stream[StdErrStream].stream_putc(StdErrStream, ch);
|
Stream[StdErrStream].stream_putc(StdErrStream, ch);
|
||||||
}
|
}
|
||||||
strncpy(Prompt, RepAtom (*AtPrompt)->StrOfAE, MAX_PROMPT);
|
strncpy(Prompt, RepAtom (AtPrompt)->StrOfAE, MAX_PROMPT);
|
||||||
newline = FALSE;
|
newline = FALSE;
|
||||||
}
|
}
|
||||||
/* should be able to use a buffer */
|
/* should be able to use a buffer */
|
||||||
@ -1444,7 +1444,7 @@ ConsolePipeGetc(int sno)
|
|||||||
while ((ch = *cptr++) != '\0') {
|
while ((ch = *cptr++) != '\0') {
|
||||||
Stream[StdErrStream].stream_putc(StdErrStream, ch);
|
Stream[StdErrStream].stream_putc(StdErrStream, ch);
|
||||||
}
|
}
|
||||||
strncpy(Prompt, RepAtom (*AtPrompt)->StrOfAE, MAX_PROMPT);
|
strncpy(Prompt, RepAtom (AtPrompt)->StrOfAE, MAX_PROMPT);
|
||||||
newline = FALSE;
|
newline = FALSE;
|
||||||
}
|
}
|
||||||
#if _MSC_VER || defined(__MINGW32__)
|
#if _MSC_VER || defined(__MINGW32__)
|
||||||
@ -1577,7 +1577,7 @@ ConsoleGetc(int sno)
|
|||||||
Stream[StdErrStream].stream_putc(StdErrStream, ch);
|
Stream[StdErrStream].stream_putc(StdErrStream, ch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
strncpy (Prompt, RepAtom (*AtPrompt)->StrOfAE, MAX_PROMPT);
|
strncpy (Prompt, RepAtom (AtPrompt)->StrOfAE, MAX_PROMPT);
|
||||||
newline = FALSE;
|
newline = FALSE;
|
||||||
}
|
}
|
||||||
#if HAVE_SIGINTERRUPT
|
#if HAVE_SIGINTERRUPT
|
||||||
|
59
C/save.c
59
C/save.c
@ -1007,7 +1007,6 @@ restore_heap_regs(void)
|
|||||||
}
|
}
|
||||||
HeapMax = Yap_heap_regs->heap_used = OldHeapUsed;
|
HeapMax = Yap_heap_regs->heap_used = OldHeapUsed;
|
||||||
HeapLim = Yap_GlobalBase;
|
HeapLim = Yap_GlobalBase;
|
||||||
restore_codes();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* adjust abstract machine registers */
|
/* adjust abstract machine registers */
|
||||||
@ -1170,45 +1169,6 @@ rehash(CELL *oldcode, int NOfE, int KindOfEntries)
|
|||||||
|
|
||||||
#include "rheap.h"
|
#include "rheap.h"
|
||||||
|
|
||||||
/* restore the atom entries which are invisible for the user */
|
|
||||||
static void
|
|
||||||
RestoreForeignCodeStructure(void)
|
|
||||||
{
|
|
||||||
ForeignObj *f_code;
|
|
||||||
|
|
||||||
if (ForeignCodeLoaded != NULL)
|
|
||||||
ForeignCodeLoaded = (void *)AddrAdjust((ADDR)ForeignCodeLoaded);
|
|
||||||
f_code = ForeignCodeLoaded;
|
|
||||||
while (f_code != NULL) {
|
|
||||||
StringList objs, libs;
|
|
||||||
if (f_code->objs != NULL)
|
|
||||||
f_code->objs = (StringList)AddrAdjust((ADDR)f_code->objs);
|
|
||||||
objs = f_code->objs;
|
|
||||||
while (objs != NULL) {
|
|
||||||
if (objs->next != NULL)
|
|
||||||
objs->next = (StringList)AddrAdjust((ADDR)objs->next);
|
|
||||||
if (objs->s != NULL)
|
|
||||||
objs->s = (char *)AddrAdjust((ADDR)objs->s);
|
|
||||||
objs = objs->next;
|
|
||||||
}
|
|
||||||
if (f_code->libs != NULL)
|
|
||||||
f_code->libs = (StringList)AddrAdjust((ADDR)f_code->libs);
|
|
||||||
libs = f_code->libs;
|
|
||||||
while (libs != NULL) {
|
|
||||||
if (libs->next != NULL)
|
|
||||||
libs->next = (StringList)AddrAdjust((ADDR)libs->next);
|
|
||||||
if (libs->s != NULL)
|
|
||||||
libs->s = (char *)AddrAdjust((ADDR)libs->s);
|
|
||||||
libs = libs->next;
|
|
||||||
}
|
|
||||||
if (f_code->f != NULL)
|
|
||||||
f_code->f = (char *)AddrAdjust((ADDR)f_code->f);
|
|
||||||
if (f_code->next != NULL)
|
|
||||||
f_code->next = (ForeignObj *)AddrAdjust((ADDR)f_code->f);
|
|
||||||
f_code = f_code->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* restore the atom entries which are invisible for the user */
|
/* restore the atom entries which are invisible for the user */
|
||||||
static void
|
static void
|
||||||
RestoreIOStructures(void)
|
RestoreIOStructures(void)
|
||||||
@ -1333,25 +1293,8 @@ RestoreHashPreds(void)
|
|||||||
static void
|
static void
|
||||||
restore_heap(void)
|
restore_heap(void)
|
||||||
{
|
{
|
||||||
AtomHashEntry *HashPtr = HashChain;
|
restore_codes();
|
||||||
register int i;
|
|
||||||
for (i = 0; i < AtomHashTableSize; ++i) {
|
|
||||||
HashPtr->Entry = AtomAdjust(HashPtr->Entry);
|
|
||||||
RestoreAtomList(HashPtr->Entry);
|
|
||||||
HashPtr++;
|
|
||||||
}
|
|
||||||
HashPtr = WideHashChain;
|
|
||||||
for (i = 0; i < WideAtomHashTableSize; ++i) {
|
|
||||||
HashPtr->Entry = AtomAdjust(HashPtr->Entry);
|
|
||||||
RestoreAtomList(HashPtr->Entry);
|
|
||||||
HashPtr++;
|
|
||||||
}
|
|
||||||
INVISIBLECHAIN.Entry = AtomAdjust(INVISIBLECHAIN.Entry);
|
|
||||||
RestoreAtomList(INVISIBLECHAIN.Entry);
|
|
||||||
RestoreAtom(RepAtom(AtomFoundVar));
|
|
||||||
RestoreAtom(RepAtom(AtomFreeTerm));
|
|
||||||
RestoreHashPreds();
|
RestoreHashPreds();
|
||||||
RestoreForeignCodeStructure();
|
|
||||||
RestoreIOStructures();
|
RestoreIOStructures();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ typedef struct ForeignLoadItem {
|
|||||||
StringList objs;
|
StringList objs;
|
||||||
StringList libs;
|
StringList libs;
|
||||||
char *f;
|
char *f;
|
||||||
int module;
|
Term module;
|
||||||
struct ForeignLoadItem *next;
|
struct ForeignLoadItem *next;
|
||||||
} ForeignObj;
|
} ForeignObj;
|
||||||
|
|
||||||
|
239
H/YapHeap.h
239
H/YapHeap.h
@ -18,12 +18,6 @@
|
|||||||
#ifndef HEAP_H
|
#ifndef HEAP_H
|
||||||
#define HEAP_H 1
|
#define HEAP_H 1
|
||||||
|
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
|
||||||
#define WL wl[worker_id]
|
|
||||||
#else
|
|
||||||
#define WL wl
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(THREADS)
|
#if defined(THREADS)
|
||||||
#define RINFO rinfo[worker_id]
|
#define RINFO rinfo[worker_id]
|
||||||
#else
|
#else
|
||||||
@ -180,6 +174,7 @@ typedef struct worker_local_struct {
|
|||||||
struct array_entry *dynamic_arrays;
|
struct array_entry *dynamic_arrays;
|
||||||
struct static_array_entry *static_arrays;
|
struct static_array_entry *static_arrays;
|
||||||
struct global_entry *global_variables;
|
struct global_entry *global_variables;
|
||||||
|
struct reduction_counters call_counters;
|
||||||
int allow_restart;
|
int allow_restart;
|
||||||
Term global_arena;
|
Term global_arena;
|
||||||
UInt global_arena_overflows;
|
UInt global_arena_overflows;
|
||||||
@ -224,136 +219,9 @@ typedef int (*Agc_hook)(Atom);
|
|||||||
typedef struct various_codes {
|
typedef struct various_codes {
|
||||||
/* memory allocation and management */
|
/* memory allocation and management */
|
||||||
special_functors funcs;
|
special_functors funcs;
|
||||||
UInt hole_size;
|
|
||||||
struct malloc_state *av_;
|
|
||||||
#if USE_DL_MALLOC
|
|
||||||
struct memory_hole memory_holes[MAX_DLMALLOC_HOLES];
|
|
||||||
UInt nof_memory_holes;
|
|
||||||
#endif
|
|
||||||
Int heap_used;
|
|
||||||
Int heap_max;
|
|
||||||
ADDR heap_top;
|
|
||||||
ADDR heap_lim;
|
|
||||||
struct FREEB *free_blocks;
|
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
|
||||||
lockvar heap_used_lock; /* protect HeapUsed */
|
|
||||||
lockvar heap_top_lock; /* protect HeapTop */
|
|
||||||
int heap_top_owner;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* multi-thread/ORP support */
|
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
|
||||||
unsigned int n_of_threads; /* number of threads and processes in system */
|
|
||||||
unsigned int n_of_threads_created; /* number of threads created since start */
|
|
||||||
UInt threads_total_time; /* total run time for dead threads */
|
|
||||||
lockvar bgl; /* protect long critical regions */
|
|
||||||
lockvar free_blocks_lock; /* protect the list of free blocks */
|
|
||||||
worker_local wl[MAX_AGENTS];
|
|
||||||
#else
|
|
||||||
worker_local wl;
|
|
||||||
#endif
|
|
||||||
#ifdef THREADS
|
|
||||||
lockvar thread_handles_lock; /* protect ThreadManipulation */
|
|
||||||
struct thandle thread_handle[MAX_THREADS];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* atoms and functors */
|
|
||||||
UInt n_of_atoms;
|
|
||||||
UInt atom_hash_table_size;
|
|
||||||
UInt wide_atom_hash_table_size;
|
|
||||||
UInt n_of_wide_atoms;
|
|
||||||
AtomHashEntry invisiblechain;
|
|
||||||
AtomHashEntry *wide_hash_chain;
|
|
||||||
AtomHashEntry *hash_chain;
|
|
||||||
|
|
||||||
#include "tatoms.h"
|
|
||||||
|
|
||||||
/* Terms multiply used */
|
|
||||||
#include "hstruct.h"
|
#include "hstruct.h"
|
||||||
|
|
||||||
/* Dead clauses and IDB entries */
|
|
||||||
struct static_clause *dead_static_clauses;
|
|
||||||
struct static_mega_clause *dead_mega_clauses;
|
|
||||||
struct static_index *dead_static_indices;
|
|
||||||
struct logic_upd_clause *db_erased_list;
|
|
||||||
struct logic_upd_index *db_erased_ilist;
|
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
|
||||||
lockvar dead_static_clauses_lock; /* protect DeadStaticClauses */
|
|
||||||
lockvar dead_mega_clauses_lock; /* protect DeadMegaClauses */
|
|
||||||
lockvar dead_static_indices_lock; /* protect DeadStaticIndices */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* execution counters */
|
|
||||||
struct reduction_counters call_counters;
|
|
||||||
|
|
||||||
/* number of attribute modules */
|
|
||||||
UInt atts_size;
|
|
||||||
|
|
||||||
/* stack overflow expansion/gc control */
|
|
||||||
int allow_local_expansion;
|
|
||||||
int allow_global_expansion;
|
|
||||||
int allow_trail_expansion;
|
|
||||||
unsigned int size_of_overflow;
|
|
||||||
struct hold_entry *global_hold_entry;
|
|
||||||
UInt agc_last_call; /* amount of space recovered in all garbage collections */
|
|
||||||
UInt agc_threshold; /* amount of space recovered in all garbage collections */
|
|
||||||
Agc_hook agc_hook;
|
|
||||||
|
|
||||||
/* YAP control flags */
|
|
||||||
Int yap_flags_field[NUMBER_OF_YAP_FLAGS];
|
|
||||||
|
|
||||||
/* Operators */
|
|
||||||
struct operator_entry *op_list;
|
|
||||||
|
|
||||||
/* Input/Output */
|
|
||||||
|
|
||||||
/* stream array */
|
|
||||||
struct stream_desc *yap_streams;
|
|
||||||
|
|
||||||
/* stream aliases */
|
|
||||||
UInt n_of_file_aliases;
|
|
||||||
UInt sz_of_file_aliases;
|
|
||||||
struct AliasDescS * file_aliases;
|
|
||||||
|
|
||||||
/* prompting */
|
|
||||||
Atom atprompt;
|
|
||||||
char prompt[MAX_PROMPT];
|
|
||||||
|
|
||||||
/* readline */
|
|
||||||
#if HAVE_LIBREADLINE
|
|
||||||
char *readline_buf, *readline_pos;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ISO char conversion: I will make no comments */
|
|
||||||
char *char_conversion_table;
|
|
||||||
char *char_conversion_table2;
|
|
||||||
|
|
||||||
/* write depth */
|
|
||||||
UInt maxdepth, maxlist, maxwriteargs;
|
|
||||||
|
|
||||||
/* what to do when the parser gives an error: should be thread bound? */
|
|
||||||
int parser_error_style;
|
|
||||||
|
|
||||||
/* library location. */
|
|
||||||
char *yap_lib_dir;
|
|
||||||
|
|
||||||
/* time */
|
|
||||||
void *last_wtime;
|
|
||||||
|
|
||||||
/* profiling */
|
|
||||||
int debugger_output_msg;
|
|
||||||
#if LOW_PROF
|
|
||||||
int profiler_on;
|
|
||||||
int offline_profiler;
|
|
||||||
FILE *f_prof, *f_preds;
|
|
||||||
UInt prof_preds;
|
|
||||||
#endif /* LOW_PROF */
|
|
||||||
|
|
||||||
/* foreign code loaded */
|
|
||||||
void *foreign_code_loaded;
|
|
||||||
ADDR foreign_code_base;
|
|
||||||
ADDR foreign_code_top;
|
|
||||||
ADDR foreign_code_max;
|
|
||||||
|
|
||||||
#if defined(YAPOR) || defined(TABLING)
|
#if defined(YAPOR) || defined(TABLING)
|
||||||
struct global_data global;
|
struct global_data global;
|
||||||
@ -367,71 +235,12 @@ extern struct various_codes *Yap_heap_regs;
|
|||||||
#define Yap_heap_regs ((all_heap_codes *)HEAP_INIT_BASE)
|
#define Yap_heap_regs ((all_heap_codes *)HEAP_INIT_BASE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define Yap_HoleSize Yap_heap_regs->hole_size
|
|
||||||
#define Yap_av Yap_heap_regs->av_
|
|
||||||
#define Yap_AttsSize Yap_heap_regs->atts_size
|
|
||||||
#define Yap_MemoryHoles Yap_heap_regs->memory_holes
|
|
||||||
#define Yap_NOfMemoryHoles Yap_heap_regs->nof_memory_holes
|
|
||||||
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
|
||||||
#define HeapUsed Yap_givemallinfo()
|
|
||||||
#ifdef YAPOR
|
|
||||||
#define HeapUsedLock Yap_heap_regs->heap_used_lock
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define HeapUsed Yap_heap_regs->heap_used
|
|
||||||
#define HeapUsedLock Yap_heap_regs->heap_used_lock
|
|
||||||
#endif
|
|
||||||
#define HeapMax Yap_heap_regs->heap_max
|
|
||||||
#define HeapTop Yap_heap_regs->heap_top
|
|
||||||
#define HeapLim Yap_heap_regs->heap_lim
|
|
||||||
#define INVISIBLECHAIN Yap_heap_regs->invisiblechain
|
|
||||||
#define max_depth Yap_heap_regs->maxdepth
|
|
||||||
#define max_list Yap_heap_regs->maxlist
|
|
||||||
#define max_write_args Yap_heap_regs->maxwriteargs
|
|
||||||
#define AtPrompt (&(Yap_heap_regs->atprompt ))
|
|
||||||
#define Prompt Yap_heap_regs->prompt
|
|
||||||
#define yap_flags Yap_heap_regs->yap_flags_field
|
|
||||||
#ifdef THREADS
|
|
||||||
#define ThreadHandlesLock Yap_heap_regs->thread_handles_lock
|
|
||||||
#define ThreadHandle Yap_heap_regs->thread_handle
|
|
||||||
#endif
|
|
||||||
#define NOfAtoms Yap_heap_regs->n_of_atoms
|
|
||||||
#define AtomHashTableSize Yap_heap_regs->atom_hash_table_size
|
|
||||||
#define HashChain Yap_heap_regs->hash_chain
|
|
||||||
#define NOfWideAtoms Yap_heap_regs->n_of_wide_atoms
|
|
||||||
#define WideAtomHashTableSize Yap_heap_regs->wide_atom_hash_table_size
|
|
||||||
#define WideHashChain Yap_heap_regs->wide_hash_chain
|
|
||||||
#define CharConversionTable Yap_heap_regs->char_conversion_table
|
|
||||||
#define CharConversionTable2 Yap_heap_regs->char_conversion_table2
|
|
||||||
#define OpList Yap_heap_regs->op_list
|
|
||||||
#define FloatFormat Yap_heap_regs->float_format
|
#define FloatFormat Yap_heap_regs->float_format
|
||||||
|
|
||||||
#define PROLOG_MODULE 0
|
#define PROLOG_MODULE 0
|
||||||
|
|
||||||
#include "dhstruct.h"
|
#include "dhstruct.h"
|
||||||
#define DBErasedList Yap_heap_regs->db_erased_list
|
|
||||||
#define DBErasedIList Yap_heap_regs->db_erased_ilist
|
|
||||||
#define Stream Yap_heap_regs->yap_streams
|
|
||||||
#define output_msg Yap_heap_regs->debugger_output_msg
|
|
||||||
#define NOfFileAliases Yap_heap_regs->n_of_file_aliases
|
|
||||||
#define SzOfFileAliases Yap_heap_regs->sz_of_file_aliases
|
|
||||||
#define FileAliases Yap_heap_regs->file_aliases
|
|
||||||
#if LOW_PROF
|
|
||||||
#define ProfilerOn Yap_heap_regs->profiler_on
|
|
||||||
#define Yap_OffLineProfiler Yap_heap_regs->offline_profiler
|
|
||||||
#define FProf Yap_heap_regs->f_prof
|
|
||||||
#define FPreds Yap_heap_regs->f_preds
|
|
||||||
#define ProfPreds Yap_heap_regs->prof_preds
|
|
||||||
#endif /* LOW_PROF */
|
|
||||||
#define ReductionsCounter Yap_heap_regs->call_counters.reductions
|
|
||||||
#define PredEntriesCounter Yap_heap_regs->call_counters.reductions_retries
|
|
||||||
#define RetriesCounter Yap_heap_regs->call_counters.retries
|
|
||||||
#define ReductionsCounterOn Yap_heap_regs->call_counters.reductions_on
|
|
||||||
#define PredEntriesCounterOn Yap_heap_regs->call_counters.reductions_retries_on
|
|
||||||
#define RetriesCounterOn Yap_heap_regs->call_counters.retries_on
|
|
||||||
#define Yap_LibDir Yap_heap_regs->yap_lib_dir
|
|
||||||
#define AGcLastCall Yap_heap_regs->agc_last_call
|
|
||||||
#define AGcThreshold Yap_heap_regs->agc_threshold
|
|
||||||
#define AGCHook Yap_heap_regs->agc_hook
|
|
||||||
#define ParserErrorStyle Yap_heap_regs->parser_error_style
|
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
#define SignalLock Yap_heap_regs->wl[worker_id].signal_lock
|
#define SignalLock Yap_heap_regs->wl[worker_id].signal_lock
|
||||||
#define WPP Yap_heap_regs->wl[worker_id].wpp
|
#define WPP Yap_heap_regs->wl[worker_id].wpp
|
||||||
@ -486,6 +295,14 @@ extern struct various_codes *Yap_heap_regs;
|
|||||||
#define XDiff RINFO.x_diff
|
#define XDiff RINFO.x_diff
|
||||||
#define DelayDiff RINFO.delay_diff
|
#define DelayDiff RINFO.delay_diff
|
||||||
#define BaseDiff RINFO.base_diff
|
#define BaseDiff RINFO.base_diff
|
||||||
|
|
||||||
|
#define ReductionsCounter Yap_heap_regs->WL.call_counters.reductions
|
||||||
|
#define PredEntriesCounter Yap_heap_regs->WL.call_counters.reductions_retries
|
||||||
|
#define RetriesCounter Yap_heap_regs->WL.call_counters.retries
|
||||||
|
#define ReductionsCounterOn Yap_heap_regs->WL.call_counters.reductions_on
|
||||||
|
#define PredEntriesCounterOn Yap_heap_regs->WL.call_counters.reductions_retries_on
|
||||||
|
#define RetriesCounterOn Yap_heap_regs->WL.call_counters.retries_on
|
||||||
|
|
||||||
#define Yap_InterruptsDisabled Yap_heap_regs->WL.interrupts_disabled
|
#define Yap_InterruptsDisabled Yap_heap_regs->WL.interrupts_disabled
|
||||||
/* current consult stack */
|
/* current consult stack */
|
||||||
#define ConsultSp Yap_heap_regs->WL.consultsp
|
#define ConsultSp Yap_heap_regs->WL.consultsp
|
||||||
@ -533,38 +350,10 @@ extern struct various_codes *Yap_heap_regs;
|
|||||||
#define GlobalArenaOverflows Yap_heap_regs->WL.global_arena_overflows
|
#define GlobalArenaOverflows Yap_heap_regs->WL.global_arena_overflows
|
||||||
#define Yap_AllowRestart Yap_heap_regs->WL.allow_restart
|
#define Yap_AllowRestart Yap_heap_regs->WL.allow_restart
|
||||||
#define GlobalDelayArena Yap_heap_regs->WL.global_delay_arena
|
#define GlobalDelayArena Yap_heap_regs->WL.global_delay_arena
|
||||||
#define ForeignCodeBase Yap_heap_regs->foreign_code_base;
|
|
||||||
#define ForeignCodeTop Yap_heap_regs->foreign_code_top;
|
|
||||||
#define ForeignCodeMax Yap_heap_regs->foreign_code_max;
|
|
||||||
#define ForeignCodeLoaded Yap_heap_regs->foreign_code_loaded
|
|
||||||
|
|
||||||
#define PredHashInitialSize 1039L
|
#define PredHashInitialSize 1039L
|
||||||
#define PredHashIncrement 7919L
|
#define PredHashIncrement 7919L
|
||||||
|
|
||||||
#define ParserErrorStyle Yap_heap_regs->parser_error_style
|
|
||||||
#define GlobalHoldEntry Yap_heap_regs->global_hold_entry
|
|
||||||
#define DeadStaticClauses Yap_heap_regs->dead_static_clauses
|
|
||||||
#define DeadMegaClauses Yap_heap_regs->dead_mega_clauses
|
|
||||||
#define DeadStaticIndices Yap_heap_regs->dead_static_indices
|
|
||||||
#define Yap_AllowLocalExpansion Yap_heap_regs->allow_local_expansion
|
|
||||||
#define Yap_AllowGlobalExpansion Yap_heap_regs->allow_global_expansion
|
|
||||||
#define Yap_AllowTrailExpansion Yap_heap_regs->allow_trail_expansion
|
|
||||||
#define SizeOfOverflow Yap_heap_regs->size_of_overflow
|
|
||||||
#define LastWtimePtr Yap_heap_regs->last_wtime
|
|
||||||
#define BGL Yap_heap_regs->bgl
|
|
||||||
#define FreeBlocks Yap_heap_regs->free_blocks
|
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
|
||||||
#define FreeBlocksLock Yap_heap_regs->free_blocks_lock
|
|
||||||
#define HeapTopLock Yap_heap_regs->heap_top_lock
|
|
||||||
#define HeapTopOwner Yap_heap_regs->heap_top_owner
|
|
||||||
#define NOfThreads Yap_heap_regs->n_of_threads
|
|
||||||
#define NOfThreadsCreated Yap_heap_regs->n_of_threads_created
|
|
||||||
#define ThreadsTotalTime Yap_heap_regs->threads_total_time
|
|
||||||
#define DeadStaticClausesLock Yap_heap_regs->dead_static_clauses_lock
|
|
||||||
#define DeadMegaClausesLock Yap_heap_regs->dead_mega_clauses_lock
|
|
||||||
#define DeadStaticIndicesLock Yap_heap_regs->dead_static_indices_lock
|
|
||||||
#define ModulesLock Yap_heap_regs->modules_lock
|
|
||||||
#endif
|
|
||||||
#if defined(YAPOR) || defined(TABLING)
|
#if defined(YAPOR) || defined(TABLING)
|
||||||
#define GLOBAL Yap_heap_regs->global
|
#define GLOBAL Yap_heap_regs->global
|
||||||
#define REMOTE Yap_heap_regs->remote
|
#define REMOTE Yap_heap_regs->remote
|
||||||
@ -578,10 +367,6 @@ extern struct various_codes *Yap_heap_regs;
|
|||||||
/* initially allow for files with up to 1024 predicates. This number
|
/* initially allow for files with up to 1024 predicates. This number
|
||||||
is extended whenever needed */
|
is extended whenever needed */
|
||||||
#define InitialConsultCapacity 1024
|
#define InitialConsultCapacity 1024
|
||||||
#if HAVE_LIBREADLINE
|
|
||||||
#define ReadlineBuf Yap_heap_regs->readline_buf
|
|
||||||
#define ReadlinePos Yap_heap_regs->readline_pos
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if (defined(USE_SYSTEM_MALLOC) && HAVE_MALLINFO)||USE_DL_MALLOC
|
#if (defined(USE_SYSTEM_MALLOC) && HAVE_MALLINFO)||USE_DL_MALLOC
|
||||||
|
139
H/dhstruct.h
139
H/dhstruct.h
@ -22,6 +22,66 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
|
||||||
|
#define NOfThreads Yap_heap_regs->n_of_threads
|
||||||
|
|
||||||
|
#define NOfThreadsCreated Yap_heap_regs->n_of_threads_created
|
||||||
|
|
||||||
|
#define ThreadsTotalTime Yap_heap_regs->threads_total_time
|
||||||
|
|
||||||
|
#define BGL Yap_heap_regs->bgl
|
||||||
|
|
||||||
|
#define WorkerLocal Yap_heap_regs->wl
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl[worker_id]
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define WorkerLocak Yap_heap_regs->wl
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifdef THREADS
|
||||||
|
#define ThreadHandlesLock Yap_heap_regs->thread_handles_lock
|
||||||
|
#define ThreadHandle Yap_heap_regs->thread_handle
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define Yap_HoleSize Yap_heap_regs->hole_size
|
||||||
|
#define Yap_av Yap_heap_regs->av_
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
#define Yap_MemoryHoles Yap_heap_regs->memory_holes
|
||||||
|
#define Yap_NOfMemoryHoles Yap_heap_regs->nof_memory_holes
|
||||||
|
#endif
|
||||||
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
|
#ifndef HeapUsed
|
||||||
|
#define HeapUsed Yap_givemallinfo()
|
||||||
|
#endif
|
||||||
|
#define NotHeapUsed Yap_heap_regs->heap_used
|
||||||
|
#else
|
||||||
|
#define HeapUsed Yap_heap_regs->heap_used
|
||||||
|
#endif
|
||||||
|
#define HeapMax Yap_heap_regs->heap_max
|
||||||
|
#define HeapTop Yap_heap_regs->heap_top
|
||||||
|
#define HeapLim Yap_heap_regs->heap_lim
|
||||||
|
#define FreeBlocks Yap_heap_regs->free_blocks
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
#define FreeBlocksLock Yap_heap_regs->free_blocks_lock
|
||||||
|
#define HeapUsedLock Yap_heap_regs->heap_used_lock
|
||||||
|
#define HeapTopLock Yap_heap_regs->heap_top_lock
|
||||||
|
#define HeapTopOwner Yap_heap_regs->heap_top_owner
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NOfAtoms Yap_heap_regs->n_of_atoms
|
||||||
|
#define AtomHashTableSize Yap_heap_regs->atom_hash_table_size
|
||||||
|
#define WideAtomHashTableSize Yap_heap_regs->wide_atom_hash_table_size
|
||||||
|
#define NOfWideAtoms Yap_heap_regs->n_of_wide_atoms
|
||||||
|
#define INVISIBLECHAIN Yap_heap_regs->invisiblechain
|
||||||
|
#define WideHashChain Yap_heap_regs->wide_hash_chain
|
||||||
|
#define HashChain Yap_heap_regs->hash_chain
|
||||||
|
|
||||||
|
|
||||||
#ifdef EUROTRA
|
#ifdef EUROTRA
|
||||||
@ -75,7 +135,6 @@
|
|||||||
#define PredFail Yap_heap_regs->pred_fail
|
#define PredFail Yap_heap_regs->pred_fail
|
||||||
#define PredTrue Yap_heap_regs->pred_true
|
#define PredTrue Yap_heap_regs->pred_true
|
||||||
#ifdef COROUTINING
|
#ifdef COROUTINING
|
||||||
#define NUM_OF_ATTS Yap_heap_regs->num_of_atts
|
|
||||||
#define WakeUpCode Yap_heap_regs->wake_up_code
|
#define WakeUpCode Yap_heap_regs->wake_up_code
|
||||||
#endif
|
#endif
|
||||||
#define PredGoalExpansion Yap_heap_regs->pred_goal_expansion
|
#define PredGoalExpansion Yap_heap_regs->pred_goal_expansion
|
||||||
@ -89,6 +148,10 @@
|
|||||||
#define PredThrow Yap_heap_regs->pred_throw
|
#define PredThrow Yap_heap_regs->pred_throw
|
||||||
#define PredHandleThrow Yap_heap_regs->pred_handle_throw
|
#define PredHandleThrow Yap_heap_regs->pred_handle_throw
|
||||||
#define PredIs Yap_heap_regs->pred_is
|
#define PredIs Yap_heap_regs->pred_is
|
||||||
|
#ifdef YAPOR
|
||||||
|
#define PredGetwork Yap_heap_regs->pred_getwork
|
||||||
|
#define PredGetworkSeq Yap_heap_regs->pred_getwork_seq
|
||||||
|
#endif /* YAPOR */
|
||||||
|
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
#define Yap_do_low_level_trace Yap_heap_regs->yap_do_low_level_trace
|
#define Yap_do_low_level_trace Yap_heap_regs->yap_do_low_level_trace
|
||||||
@ -190,3 +253,77 @@
|
|||||||
|
|
||||||
#define DBErasedMarker Yap_heap_regs->db_erased_marker
|
#define DBErasedMarker Yap_heap_regs->db_erased_marker
|
||||||
#define LogDBErasedMarker Yap_heap_regs->logdb_erased_marker
|
#define LogDBErasedMarker Yap_heap_regs->logdb_erased_marker
|
||||||
|
|
||||||
|
#define DeadStaticClauses Yap_heap_regs->dead_static_clauses
|
||||||
|
#define DeadMegaClauses Yap_heap_regs->dead_mega_clauses
|
||||||
|
#define DeadStaticIndices Yap_heap_regs->dead_static_indices
|
||||||
|
#define DBErasedList Yap_heap_regs->db_erased_list
|
||||||
|
#define DBErasedIList Yap_heap_regs->db_erased_ilist
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
#define DeadStaticClausesLock Yap_heap_regs->dead_static_clauses_lock
|
||||||
|
#define DeadMegaClausesLock Yap_heap_regs->dead_mega_clauses_lock
|
||||||
|
#define DeadStaticIndicesLock Yap_heap_regs->dead_static_indices_lock
|
||||||
|
#endif
|
||||||
|
#ifdef COROUTINING
|
||||||
|
|
||||||
|
#define NUM_OF_ATTS Yap_heap_regs->num_of_atts
|
||||||
|
|
||||||
|
#define Yap_AttsSize Yap_heap_regs->atts_size
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define Yap_AllowLocalExpansion Yap_heap_regs->allow_local_expansion
|
||||||
|
#define Yap_AllowGlobalExpansion Yap_heap_regs->allow_global_expansion
|
||||||
|
#define Yap_AllowTrailExpansion Yap_heap_regs->allow_trail_expansion
|
||||||
|
#define SizeOfOverflow Yap_heap_regs->size_of_overflow
|
||||||
|
#define GlobalHoldEntry Yap_heap_regs->global_hold_entry
|
||||||
|
|
||||||
|
#define AGcLastCall Yap_heap_regs->agc_last_call
|
||||||
|
|
||||||
|
#define AGcThreshold Yap_heap_regs->agc_threshold
|
||||||
|
#define AGCHook Yap_heap_regs->agc_hook
|
||||||
|
|
||||||
|
#define yap_flags Yap_heap_regs->yap_flags_field
|
||||||
|
|
||||||
|
#define OpList Yap_heap_regs->op_list
|
||||||
|
|
||||||
|
|
||||||
|
#define Stream Yap_heap_regs->yap_streams
|
||||||
|
|
||||||
|
#define NOfFileAliases Yap_heap_regs->n_of_file_aliases
|
||||||
|
#define SzOfFileAliases Yap_heap_regs->sz_of_file_aliases
|
||||||
|
#define FileAliases Yap_heap_regs->file_aliases
|
||||||
|
|
||||||
|
#define AtPrompt Yap_heap_regs->atprompt
|
||||||
|
#define Prompt Yap_heap_regs->prompt
|
||||||
|
|
||||||
|
#if HAVE_LIBREADLINE
|
||||||
|
#define ReadlineBuf Yap_heap_regs->readline_buf
|
||||||
|
#define ReadlinePos Yap_heap_regs->readline_pos
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CharConversionTable Yap_heap_regs->char_conversion_table
|
||||||
|
#define CharConversionTable2 Yap_heap_regs->char_conversion_table2
|
||||||
|
|
||||||
|
#define max_depth Yap_heap_regs->maxdepth
|
||||||
|
#define max_list Yap_heap_regs->axlist
|
||||||
|
#define max_write_args Yap_heap_regs->maxwriteargs
|
||||||
|
|
||||||
|
#define ParserErrorStyle Yap_heap_regs->parser_error_style
|
||||||
|
|
||||||
|
#define Yap_LibDir Yap_heap_regs->yap_lib_dir
|
||||||
|
|
||||||
|
#define LastWtimePtr Yap_heap_regs->last_wtime
|
||||||
|
|
||||||
|
#define output_msg Yap_heap_regs->debugger_output_msg
|
||||||
|
#if LOW_PROF
|
||||||
|
#define ProfilerOn Yap_heap_regs->profiler_on
|
||||||
|
#define Yap_OffLineProfiler Yap_heap_regs->offline_profiler
|
||||||
|
#define FProf Yap_heap_regs->f_prof
|
||||||
|
#define FPreds Yap_heap_regs->f_preds
|
||||||
|
#define ProfPreds Yap_heap_regs->prof_preds
|
||||||
|
#endif /* LOW_PROF */
|
||||||
|
|
||||||
|
#define ForeignCodeLoaded Yap_heap_regs->foreign_code_loaded
|
||||||
|
#define ForeignCodeBase Yap_heap_regs->foreign_code_base
|
||||||
|
#define ForeignCodeTop Yap_heap_regs->foreign_code_top
|
||||||
|
#define ForeignCodeMax Yap_heap_regs->foreign_code_max
|
||||||
|
139
H/hstruct.h
139
H/hstruct.h
@ -24,6 +24,66 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
|
||||||
|
UInt n_of_threads;
|
||||||
|
|
||||||
|
UInt n_of_threads_created;
|
||||||
|
|
||||||
|
UInt threads_total_time;
|
||||||
|
|
||||||
|
lockvar bgl;
|
||||||
|
|
||||||
|
worker_local wl[MAX_AGENTS];
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl[worker_id]
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
worker_local wl;
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifdef THREADS
|
||||||
|
lockvar thread_handles_lock;
|
||||||
|
struct thandle thread_handle[MAX_THREADS];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
UInt hole_size;
|
||||||
|
struct malloc_state *av_;
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
struct memory_hole memory_holes[MAX_DLMALLOC_HOLES];
|
||||||
|
UInt nof_memory_holes;
|
||||||
|
#endif
|
||||||
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
|
#ifndef HeapUsed
|
||||||
|
#define HeapUsed Yap_givemallinfo()
|
||||||
|
#endif
|
||||||
|
Int heap_used;
|
||||||
|
#else
|
||||||
|
Int heap_used;
|
||||||
|
#endif
|
||||||
|
Int heap_max;
|
||||||
|
ADDR heap_top;
|
||||||
|
ADDR heap_lim;
|
||||||
|
struct FREEB *free_blocks;
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
lockvar free_blocks_lock;
|
||||||
|
lockvar heap_used_lock;
|
||||||
|
lockvar heap_top_lock;
|
||||||
|
int heap_top_owner;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
UInt n_of_atoms;
|
||||||
|
UInt atom_hash_table_size;
|
||||||
|
UInt wide_atom_hash_table_size;
|
||||||
|
UInt n_of_wide_atoms;
|
||||||
|
AtomHashEntry invisiblechain;
|
||||||
|
AtomHashEntry *wide_hash_chain;
|
||||||
|
AtomHashEntry *hash_chain;
|
||||||
|
|
||||||
|
#include "tatoms.h"
|
||||||
#ifdef EUROTRA
|
#ifdef EUROTRA
|
||||||
Term term_dollar_u;
|
Term term_dollar_u;
|
||||||
#endif
|
#endif
|
||||||
@ -75,7 +135,6 @@
|
|||||||
struct pred_entry *pred_fail;
|
struct pred_entry *pred_fail;
|
||||||
struct pred_entry *pred_true;
|
struct pred_entry *pred_true;
|
||||||
#ifdef COROUTINING
|
#ifdef COROUTINING
|
||||||
int num_of_atts;
|
|
||||||
struct pred_entry *wake_up_code;
|
struct pred_entry *wake_up_code;
|
||||||
#endif
|
#endif
|
||||||
struct pred_entry *pred_goal_expansion;
|
struct pred_entry *pred_goal_expansion;
|
||||||
@ -89,6 +148,10 @@
|
|||||||
struct pred_entry *pred_throw;
|
struct pred_entry *pred_throw;
|
||||||
struct pred_entry *pred_handle_throw;
|
struct pred_entry *pred_handle_throw;
|
||||||
struct pred_entry *pred_is;
|
struct pred_entry *pred_is;
|
||||||
|
#ifdef YAPOR
|
||||||
|
struct pred_entry *pred_getwork;
|
||||||
|
struct pred_entry *pred_getwork_seq;
|
||||||
|
#endif /* YAPOR */
|
||||||
|
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
int yap_do_low_level_trace;
|
int yap_do_low_level_trace;
|
||||||
@ -190,3 +253,77 @@
|
|||||||
|
|
||||||
struct DB_STRUCT *db_erased_marker;
|
struct DB_STRUCT *db_erased_marker;
|
||||||
struct logic_upd_clause *logdb_erased_marker;
|
struct logic_upd_clause *logdb_erased_marker;
|
||||||
|
|
||||||
|
struct static_clause *dead_static_clauses;
|
||||||
|
struct static_mega_clause *dead_mega_clauses;
|
||||||
|
struct static_index *dead_static_indices;
|
||||||
|
struct logic_upd_clause *db_erased_list;
|
||||||
|
struct logic_upd_index *db_erased_ilist;
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
lockvar dead_static_clauses_lock;
|
||||||
|
lockvar dead_mega_clauses_lock;
|
||||||
|
lockvar dead_static_indices_lock;
|
||||||
|
#endif
|
||||||
|
#ifdef COROUTINING
|
||||||
|
|
||||||
|
int num_of_atts;
|
||||||
|
|
||||||
|
UInt atts_size;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int allow_local_expansion;
|
||||||
|
int allow_global_expansion;
|
||||||
|
int allow_trail_expansion;
|
||||||
|
UInt size_of_overflow;
|
||||||
|
struct hold_entry *global_hold_entry;
|
||||||
|
|
||||||
|
UInt agc_last_call;
|
||||||
|
|
||||||
|
UInt agc_threshold;
|
||||||
|
Agc_hook agc_hook;
|
||||||
|
|
||||||
|
Int yap_flags_field[NUMBER_OF_YAP_FLAGS];
|
||||||
|
|
||||||
|
struct operator_entry *op_list;
|
||||||
|
|
||||||
|
|
||||||
|
struct stream_desc *yap_streams;
|
||||||
|
|
||||||
|
UInt n_of_file_aliases;
|
||||||
|
UInt sz_of_file_aliases;
|
||||||
|
struct AliasDescS *file_aliases;
|
||||||
|
|
||||||
|
Atom atprompt;
|
||||||
|
char prompt[MAX_PROMPT];
|
||||||
|
|
||||||
|
#if HAVE_LIBREADLINE
|
||||||
|
char *readline_buf;
|
||||||
|
char *readline_pos;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
char *char_conversion_table;
|
||||||
|
char *char_conversion_table2;
|
||||||
|
|
||||||
|
UInt maxdepth;
|
||||||
|
UInt axlist;
|
||||||
|
UInt maxwriteargs;
|
||||||
|
|
||||||
|
int parser_error_style;
|
||||||
|
|
||||||
|
char *yap_lib_dir;
|
||||||
|
|
||||||
|
void *last_wtime;
|
||||||
|
|
||||||
|
int debugger_output_msg;
|
||||||
|
#if LOW_PROF
|
||||||
|
int profiler_on;
|
||||||
|
int offline_profiler;
|
||||||
|
FILE *f_prof;
|
||||||
|
FILE *f_preds;
|
||||||
|
UInt prof_preds;
|
||||||
|
#endif /* LOW_PROF */
|
||||||
|
|
||||||
|
void *foreign_code_loaded;
|
||||||
|
ADDR foreign_code_base;
|
||||||
|
ADDR foreign_code_top;
|
||||||
|
ADDR foreign_code_max;
|
||||||
|
153
H/ihstruct.h
153
H/ihstruct.h
@ -24,6 +24,66 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
|
||||||
|
Yap_heap_regs->n_of_threads = 1;
|
||||||
|
|
||||||
|
Yap_heap_regs->n_of_threads_created = 1;
|
||||||
|
|
||||||
|
Yap_heap_regs->threads_total_time = 0L;
|
||||||
|
|
||||||
|
INIT_LOCK(Yap_heap_regs->bgl);
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl[worker_id]
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifdef THREADS
|
||||||
|
INIT_LOCK(Yap_heap_regs->thread_handles_lock);
|
||||||
|
InitThreadHandles;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
|
#ifndef HeapUsed
|
||||||
|
#define HeapUsed Yap_givemallinfo()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
INIT_LOCK(Yap_heap_regs->free_blocks_lock);
|
||||||
|
INIT_LOCK(Yap_heap_regs->heap_used_lock);
|
||||||
|
INIT_LOCK(Yap_heap_regs->heap_top_lock);
|
||||||
|
Yap_heap_regs->heap_top_owner = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
InitInvisibleAtoms();
|
||||||
|
InitWideAtoms();
|
||||||
|
InitAtoms();
|
||||||
|
|
||||||
|
#include "iatoms.h"
|
||||||
#ifdef EUROTRA
|
#ifdef EUROTRA
|
||||||
Yap_heap_regs->term_dollar_u = MkAtomTerm(AtomDollarU);
|
Yap_heap_regs->term_dollar_u = MkAtomTerm(AtomDollarU);
|
||||||
#endif
|
#endif
|
||||||
@ -66,7 +126,7 @@
|
|||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Yap_heap_regs->preds_in_hash_table = 0;
|
||||||
|
|
||||||
|
|
||||||
Yap_heap_regs->creep_code = RepPredProp(PredPropByFunc(Yap_MkFunctor(AtomCreep,1),PROLOG_MODULE));
|
Yap_heap_regs->creep_code = RepPredProp(PredPropByFunc(Yap_MkFunctor(AtomCreep,1),PROLOG_MODULE));
|
||||||
@ -75,7 +135,6 @@
|
|||||||
Yap_heap_regs->pred_fail = RepPredProp(PredPropByAtom(AtomFail,PROLOG_MODULE));
|
Yap_heap_regs->pred_fail = RepPredProp(PredPropByAtom(AtomFail,PROLOG_MODULE));
|
||||||
Yap_heap_regs->pred_true = RepPredProp(PredPropByAtom(AtomTrue,PROLOG_MODULE));
|
Yap_heap_regs->pred_true = RepPredProp(PredPropByAtom(AtomTrue,PROLOG_MODULE));
|
||||||
#ifdef COROUTINING
|
#ifdef COROUTINING
|
||||||
Yap_heap_regs->num_of_atts = 1;
|
|
||||||
Yap_heap_regs->wake_up_code = RepPredProp(PredPropByFunc(Yap_MkFunctor(AtomWakeUpGoal,2),PROLOG_MODULE));
|
Yap_heap_regs->wake_up_code = RepPredProp(PredPropByFunc(Yap_MkFunctor(AtomWakeUpGoal,2),PROLOG_MODULE));
|
||||||
#endif
|
#endif
|
||||||
Yap_heap_regs->pred_goal_expansion = RepPredProp(PredPropByFunc(FunctorGoalExpansion,USER_MODULE));
|
Yap_heap_regs->pred_goal_expansion = RepPredProp(PredPropByFunc(FunctorGoalExpansion,USER_MODULE));
|
||||||
@ -89,6 +148,10 @@
|
|||||||
Yap_heap_regs->pred_throw = RepPredProp(PredPropByFunc(FunctorThrow,PROLOG_MODULE));
|
Yap_heap_regs->pred_throw = RepPredProp(PredPropByFunc(FunctorThrow,PROLOG_MODULE));
|
||||||
Yap_heap_regs->pred_handle_throw = RepPredProp(PredPropByFunc(FunctorHandleThrow,PROLOG_MODULE));
|
Yap_heap_regs->pred_handle_throw = RepPredProp(PredPropByFunc(FunctorHandleThrow,PROLOG_MODULE));
|
||||||
Yap_heap_regs->pred_is = RepPredProp(PredPropByFunc(FunctorIs,PROLOG_MODULE));
|
Yap_heap_regs->pred_is = RepPredProp(PredPropByFunc(FunctorIs,PROLOG_MODULE));
|
||||||
|
#ifdef YAPOR
|
||||||
|
Yap_heap_regs->pred_getwork = RepPredProp(PredPropByAtom(AtomGetwork,PROLOG_MODULE));
|
||||||
|
Yap_heap_regs->pred_getwork_seq = RepPredProp(PredPropByAtom(AtomGetworkSeq,PROLOG_MODULE));
|
||||||
|
#endif /* YAPOR */
|
||||||
|
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
Yap_heap_regs->yap_do_low_level_trace = FALSE;
|
Yap_heap_regs->yap_do_low_level_trace = FALSE;
|
||||||
@ -115,21 +178,21 @@
|
|||||||
|
|
||||||
InitEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail);
|
InitEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail);
|
||||||
|
|
||||||
InitOtaplInst(RTRYCODE,_retry_and_mark);
|
InitOtaplInst(RTRYCODE,_retry_and_mark,PredFail);
|
||||||
#ifdef BEAM
|
#ifdef BEAM
|
||||||
Yap_heap_regs->beam_retry_code->opc = Yap_opcode(_beam_retry_code);
|
Yap_heap_regs->beam_retry_code->opc = Yap_opcode(_beam_retry_code);
|
||||||
#endif /* BEAM */
|
#endif /* BEAM */
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
Yap_heap_regs->seq_def = TRUE;
|
Yap_heap_regs->seq_def = TRUE;
|
||||||
InitOtaplInst(GETWORK,_getwork);
|
InitOtaplInst(GETWORK,_getwork,PredGetwork);
|
||||||
InitOtaplInst(GETWORK_SEQ,_getwork_seq);
|
InitOtaplInst(GETWORK_SEQ,_getwork_seq,PredGetworkSeq);
|
||||||
Yap_heap_regs->getwork_first_time->opc = Yap_opcode(_getwork_first_time);
|
Yap_heap_regs->getwork_first_time->opc = Yap_opcode(_getwork_first_time);
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
InitOtaplInst(LOAD_ANSWER,_table_load_answer);
|
InitOtaplInst(LOAD_ANSWER,_table_load_answer,PredFail);
|
||||||
InitOtaplInst(TRY_ANSWER,_table_try_answer);
|
InitOtaplInst(TRY_ANSWER,_table_try_answer);
|
||||||
InitOtaplInst(ANSWER_RESOLUTION,_answer_resolution);
|
InitOtaplInst(ANSWER_RESOLUTION,_answer_resolution,PredFail);
|
||||||
InitOtaplInst(COMPLETION,_table_completion);
|
InitOtaplInst(COMPLETION,_table_completion,PredFail);
|
||||||
#endif /* TABLING */
|
#endif /* TABLING */
|
||||||
|
|
||||||
|
|
||||||
@ -190,3 +253,77 @@
|
|||||||
|
|
||||||
InitDBErasedMarker();
|
InitDBErasedMarker();
|
||||||
InitLogDBErasedMarker();
|
InitLogDBErasedMarker();
|
||||||
|
|
||||||
|
Yap_heap_regs->dead_static_clauses = NULL;
|
||||||
|
Yap_heap_regs->dead_mega_clauses = NULL;
|
||||||
|
Yap_heap_regs->dead_static_indices = NULL;
|
||||||
|
Yap_heap_regs->db_erased_list = NULL;
|
||||||
|
Yap_heap_regs->db_erased_ilist = NULL;
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
INIT_LOCK(Yap_heap_regs->dead_static_clauses_lock);
|
||||||
|
INIT_LOCK(Yap_heap_regs->dead_mega_clauses_lock);
|
||||||
|
INIT_LOCK(Yap_heap_regs->dead_static_indices_lock);
|
||||||
|
#endif
|
||||||
|
#ifdef COROUTINING
|
||||||
|
|
||||||
|
Yap_heap_regs->num_of_atts = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Yap_heap_regs->allow_local_expansion = TRUE;
|
||||||
|
Yap_heap_regs->allow_global_expansion = TRUE;
|
||||||
|
Yap_heap_regs->allow_trail_expansion = TRUE;
|
||||||
|
Yap_heap_regs->size_of_overflow = 0;
|
||||||
|
Yap_heap_regs->global_hold_entry = Yap_InitAtomHold();
|
||||||
|
|
||||||
|
Yap_heap_regs->agc_last_call = 0;
|
||||||
|
|
||||||
|
Yap_heap_regs->agc_threshold = 10000;
|
||||||
|
Yap_heap_regs->agc_hook = NULL;
|
||||||
|
|
||||||
|
InitFlags();
|
||||||
|
|
||||||
|
Yap_heap_regs->op_list = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
Yap_heap_regs->yap_streams = NULL;
|
||||||
|
|
||||||
|
Yap_heap_regs->n_of_file_aliases = 0;
|
||||||
|
Yap_heap_regs->sz_of_file_aliases = 0;
|
||||||
|
Yap_heap_regs->file_aliases = NULL;
|
||||||
|
|
||||||
|
Yap_heap_regs->atprompt = AtomNil;
|
||||||
|
|
||||||
|
|
||||||
|
#if HAVE_LIBREADLINE
|
||||||
|
Yap_heap_regs->readline_buf = NULL;
|
||||||
|
Yap_heap_regs->readline_pos = 0L;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Yap_heap_regs->char_conversion_table = NULL;
|
||||||
|
Yap_heap_regs->char_conversion_table2 = NULL;
|
||||||
|
|
||||||
|
Yap_heap_regs->maxdepth = 0L;
|
||||||
|
Yap_heap_regs->axlist = 0L;
|
||||||
|
Yap_heap_regs->maxwriteargs = 0L;
|
||||||
|
|
||||||
|
Yap_heap_regs->parser_error_style = EXCEPTION_ON_PARSER_ERROR;
|
||||||
|
|
||||||
|
Yap_heap_regs->yap_lib_dir = NULL;
|
||||||
|
|
||||||
|
Yap_heap_regs->last_wtime = NULL;
|
||||||
|
|
||||||
|
Yap_heap_regs->debugger_output_msg = 0L;
|
||||||
|
#if LOW_PROF
|
||||||
|
Yap_heap_regs->profiler_on = FALSE;
|
||||||
|
Yap_heap_regs->offline_profiler = FALSE;
|
||||||
|
Yap_heap_regs->f_prof = NULL;
|
||||||
|
Yap_heap_regs->f_preds = NULL;
|
||||||
|
Yap_heap_regs->prof_preds = 0L;
|
||||||
|
#endif /* LOW_PROF */
|
||||||
|
|
||||||
|
Yap_heap_regs->foreign_code_loaded = NULL;
|
||||||
|
Yap_heap_regs->foreign_code_base = NULL;
|
||||||
|
Yap_heap_regs->foreign_code_top = NULL;
|
||||||
|
Yap_heap_regs->foreign_code_max = NULL;
|
||||||
|
266
H/rheap.h
266
H/rheap.h
@ -377,6 +377,47 @@ AdjustSwitchTable(op_numbers op, yamop *table, COUNT i)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STATIC_PROTO(void RestoreAtomList, (Atom));
|
||||||
|
STATIC_PROTO(void RestoreAtom, (AtomEntry *));
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreAtoms(void)
|
||||||
|
{
|
||||||
|
AtomHashEntry *HashPtr;
|
||||||
|
register int i;
|
||||||
|
|
||||||
|
|
||||||
|
HashPtr = HashChain;
|
||||||
|
for (i = 0; i < AtomHashTableSize; ++i) {
|
||||||
|
HashPtr->Entry = AtomAdjust(HashPtr->Entry);
|
||||||
|
RestoreAtomList(HashPtr->Entry);
|
||||||
|
HashPtr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreWideAtoms(void)
|
||||||
|
{
|
||||||
|
AtomHashEntry *HashPtr;
|
||||||
|
register int i;
|
||||||
|
|
||||||
|
HashPtr = WideHashChain;
|
||||||
|
for (i = 0; i < WideAtomHashTableSize; ++i) {
|
||||||
|
HashPtr->Entry = AtomAdjust(HashPtr->Entry);
|
||||||
|
RestoreAtomList(HashPtr->Entry);
|
||||||
|
HashPtr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreInvisibleAtoms(void)
|
||||||
|
{
|
||||||
|
INVISIBLECHAIN.Entry = AtomAdjust(INVISIBLECHAIN.Entry);
|
||||||
|
RestoreAtomList(INVISIBLECHAIN.Entry);
|
||||||
|
RestoreAtom(RepAtom(AtomFoundVar));
|
||||||
|
RestoreAtom(RepAtom(AtomFreeTerm));
|
||||||
|
}
|
||||||
|
|
||||||
#include "rclause.h"
|
#include "rclause.h"
|
||||||
|
|
||||||
/* adjusts terms stored in the data base, when they have no variables */
|
/* adjusts terms stored in the data base, when they have no variables */
|
||||||
@ -622,14 +663,14 @@ RestoreEnvInst(yamop start[2], yamop **instp, op_numbers opc, PredEntry *pred)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
RestoreOtaplInst(yamop start[1], OPCODE opc)
|
RestoreOtaplInst(yamop start[1], OPCODE opc, PredEntry *pe)
|
||||||
{
|
{
|
||||||
yamop *ipc = start;
|
yamop *ipc = start;
|
||||||
|
|
||||||
/* this is a place holder, it should not really be used */
|
/* this is a place holder, it should not really be used */
|
||||||
ipc->opc = Yap_opcode(opc);
|
ipc->opc = Yap_opcode(opc);
|
||||||
ipc->u.Otapl.s = 0;
|
ipc->u.Otapl.s = 0;
|
||||||
ipc->u.Otapl.p = PredFail;
|
ipc->u.Otapl.p = pe;
|
||||||
if (ipc->u.Otapl.d)
|
if (ipc->u.Otapl.d)
|
||||||
ipc->u.Otapl.d = PtoOpAdjust(ipc->u.Otapl.d);
|
ipc->u.Otapl.d = PtoOpAdjust(ipc->u.Otapl.d);
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
@ -768,6 +809,143 @@ RestoreLogDBErasedMarker(void)
|
|||||||
INIT_CLREF_COUNT(Yap_heap_regs->logdb_erased_marker);
|
INIT_CLREF_COUNT(Yap_heap_regs->logdb_erased_marker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreDeadStaticClauses(void)
|
||||||
|
{
|
||||||
|
if (Yap_heap_regs->dead_static_clauses) {
|
||||||
|
StaticClause *sc = PtoStCAdjust(Yap_heap_regs->dead_static_clauses);
|
||||||
|
Yap_heap_regs->dead_static_clauses = sc;
|
||||||
|
while (sc) {
|
||||||
|
RestoreStaticClause(sc);
|
||||||
|
sc = sc->ClNext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreDeadMegaClauses(void)
|
||||||
|
{
|
||||||
|
if (Yap_heap_regs->dead_mega_clauses) {
|
||||||
|
MegaClause *mc = (MegaClause *)AddrAdjust((ADDR)(Yap_heap_regs->dead_mega_clauses));
|
||||||
|
Yap_heap_regs->dead_mega_clauses = mc;
|
||||||
|
while (mc) {
|
||||||
|
RestoreMegaClause(mc);
|
||||||
|
mc = mc->ClNext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreDeadStaticIndices(void)
|
||||||
|
{
|
||||||
|
if (Yap_heap_regs->dead_static_indices) {
|
||||||
|
StaticIndex *si = (StaticIndex *)AddrAdjust((ADDR)(Yap_heap_regs->dead_static_indices));
|
||||||
|
Yap_heap_regs->dead_static_indices = si;
|
||||||
|
while (si) {
|
||||||
|
CleanSIndex(si, FALSE);
|
||||||
|
si = si->SiblingIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreDBErasedList(void)
|
||||||
|
{
|
||||||
|
if (Yap_heap_regs->db_erased_list) {
|
||||||
|
LogUpdClause *lcl = Yap_heap_regs->db_erased_list =
|
||||||
|
PtoLUCAdjust(Yap_heap_regs->db_erased_list);
|
||||||
|
while (lcl) {
|
||||||
|
RestoreLUClause(lcl, FALSE);
|
||||||
|
lcl = lcl->ClNext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreDBErasedIList(void)
|
||||||
|
{
|
||||||
|
if (Yap_heap_regs->db_erased_ilist) {
|
||||||
|
LogUpdIndex *icl = Yap_heap_regs->db_erased_ilist =
|
||||||
|
LUIndexAdjust(Yap_heap_regs->db_erased_ilist);
|
||||||
|
while (icl) {
|
||||||
|
CleanLUIndex(icl, FALSE);
|
||||||
|
icl = icl->SiblingIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreStreams(void)
|
||||||
|
{
|
||||||
|
if (Yap_heap_regs->yap_streams != NULL) {
|
||||||
|
int sno;
|
||||||
|
|
||||||
|
Yap_heap_regs->yap_streams =
|
||||||
|
(struct stream_desc *)AddrAdjust((ADDR)Yap_heap_regs->yap_streams);
|
||||||
|
for (sno = 0; sno < MaxStreams; ++sno) {
|
||||||
|
if (Stream[sno].status & Free_Stream_f)
|
||||||
|
continue;
|
||||||
|
if (Stream[sno].status & (Socket_Stream_f|Pipe_Stream_f|InMemory_Stream_f))
|
||||||
|
continue;
|
||||||
|
Stream[sno].u.file.user_name = AtomTermAdjust(Stream[sno].u.file.user_name);
|
||||||
|
Stream[sno].u.file.name = AtomAdjust(Stream[sno].u.file.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreAliases(void)
|
||||||
|
{
|
||||||
|
if (Yap_heap_regs->file_aliases != NULL) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
Yap_heap_regs->file_aliases =
|
||||||
|
(struct AliasDescS *)AddrAdjust((ADDR)Yap_heap_regs->file_aliases);
|
||||||
|
for (i = 0; i < NOfFileAliases; i++)
|
||||||
|
FileAliases[i].name = AtomAdjust(FileAliases[i].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RestoreForeignCode(void)
|
||||||
|
{
|
||||||
|
ForeignObj *f_code;
|
||||||
|
|
||||||
|
if (!ForeignCodeLoaded)
|
||||||
|
return;
|
||||||
|
if (ForeignCodeLoaded != NULL)
|
||||||
|
ForeignCodeLoaded = (void *)AddrAdjust((ADDR)ForeignCodeLoaded);
|
||||||
|
f_code = ForeignCodeLoaded;
|
||||||
|
while (f_code != NULL) {
|
||||||
|
StringList objs, libs;
|
||||||
|
if (f_code->objs != NULL)
|
||||||
|
f_code->objs = (StringList)AddrAdjust((ADDR)f_code->objs);
|
||||||
|
objs = f_code->objs;
|
||||||
|
while (objs != NULL) {
|
||||||
|
if (objs->next != NULL)
|
||||||
|
objs->next = (StringList)AddrAdjust((ADDR)objs->next);
|
||||||
|
if (objs->s != NULL)
|
||||||
|
objs->s = (char *)AddrAdjust((ADDR)objs->s);
|
||||||
|
objs = objs->next;
|
||||||
|
}
|
||||||
|
if (f_code->libs != NULL)
|
||||||
|
f_code->libs = (StringList)AddrAdjust((ADDR)f_code->libs);
|
||||||
|
libs = f_code->libs;
|
||||||
|
while (libs != NULL) {
|
||||||
|
if (libs->next != NULL)
|
||||||
|
libs->next = (StringList)AddrAdjust((ADDR)libs->next);
|
||||||
|
if (libs->s != NULL)
|
||||||
|
libs->s = (char *)AddrAdjust((ADDR)libs->s);
|
||||||
|
libs = libs->next;
|
||||||
|
}
|
||||||
|
if (f_code->f != NULL)
|
||||||
|
f_code->f = (char *)AddrAdjust((ADDR)f_code->f);
|
||||||
|
if (f_code->next != NULL)
|
||||||
|
f_code->next = (ForeignObj *)AddrAdjust((ADDR)f_code->next);
|
||||||
|
f_code = f_code->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* restore the failcodes */
|
/* restore the failcodes */
|
||||||
static void
|
static void
|
||||||
restore_codes(void)
|
restore_codes(void)
|
||||||
@ -793,91 +971,7 @@ restore_codes(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (Yap_heap_regs->atprompt != NIL) {
|
|
||||||
Yap_heap_regs->atprompt =
|
|
||||||
AtomAdjust(Yap_heap_regs->atprompt);
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->char_conversion_table) {
|
|
||||||
Yap_heap_regs->char_conversion_table = (char *)
|
|
||||||
AddrAdjust((ADDR)Yap_heap_regs->char_conversion_table);
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->char_conversion_table2) {
|
|
||||||
Yap_heap_regs->char_conversion_table2 = (char *)
|
|
||||||
AddrAdjust((ADDR)Yap_heap_regs->char_conversion_table2);
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->op_list) {
|
|
||||||
Yap_heap_regs->op_list = (struct operator_entry *)
|
|
||||||
AddrAdjust((ADDR)Yap_heap_regs->op_list);
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->dead_static_clauses) {
|
|
||||||
StaticClause *sc = PtoStCAdjust(Yap_heap_regs->dead_static_clauses);
|
|
||||||
Yap_heap_regs->dead_static_clauses = sc;
|
|
||||||
while (sc) {
|
|
||||||
RestoreStaticClause(sc);
|
|
||||||
sc = sc->ClNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->dead_mega_clauses) {
|
|
||||||
MegaClause *mc = (MegaClause *)AddrAdjust((ADDR)(Yap_heap_regs->dead_mega_clauses));
|
|
||||||
Yap_heap_regs->dead_mega_clauses = mc;
|
|
||||||
while (mc) {
|
|
||||||
RestoreMegaClause(mc);
|
|
||||||
mc = mc->ClNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->dead_static_indices) {
|
|
||||||
StaticIndex *si = (StaticIndex *)AddrAdjust((ADDR)(Yap_heap_regs->dead_static_indices));
|
|
||||||
Yap_heap_regs->dead_static_indices = si;
|
|
||||||
while (si) {
|
|
||||||
CleanSIndex(si, FALSE);
|
|
||||||
si = si->SiblingIndex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->db_erased_list) {
|
|
||||||
LogUpdClause *lcl = Yap_heap_regs->db_erased_list =
|
|
||||||
PtoLUCAdjust(Yap_heap_regs->db_erased_list);
|
|
||||||
while (lcl) {
|
|
||||||
RestoreLUClause(lcl, FALSE);
|
|
||||||
lcl = lcl->ClNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->db_erased_ilist) {
|
|
||||||
LogUpdIndex *icl = Yap_heap_regs->db_erased_ilist =
|
|
||||||
LUIndexAdjust(Yap_heap_regs->db_erased_ilist);
|
|
||||||
while (icl) {
|
|
||||||
CleanLUIndex(icl, FALSE);
|
|
||||||
icl = icl->SiblingIndex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#include "ratoms.h"
|
|
||||||
#include "rhstruct.h"
|
#include "rhstruct.h"
|
||||||
Yap_heap_regs->global_hold_entry = HoldEntryAdjust(Yap_heap_regs->global_hold_entry);
|
|
||||||
if (Yap_heap_regs->yap_streams != NULL) {
|
|
||||||
int sno;
|
|
||||||
|
|
||||||
Yap_heap_regs->yap_streams =
|
|
||||||
(struct stream_desc *)AddrAdjust((ADDR)Yap_heap_regs->yap_streams);
|
|
||||||
for (sno = 0; sno < MaxStreams; ++sno) {
|
|
||||||
if (Stream[sno].status & Free_Stream_f)
|
|
||||||
continue;
|
|
||||||
if (Stream[sno].status & (Socket_Stream_f|Pipe_Stream_f|InMemory_Stream_f))
|
|
||||||
continue;
|
|
||||||
Stream[sno].u.file.user_name = AtomTermAdjust(Stream[sno].u.file.user_name);
|
|
||||||
Stream[sno].u.file.name = AtomAdjust(Stream[sno].u.file.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->file_aliases != NULL) {
|
|
||||||
int i;
|
|
||||||
|
|
||||||
Yap_heap_regs->file_aliases =
|
|
||||||
(struct AliasDescS *)AddrAdjust((ADDR)Yap_heap_regs->file_aliases);
|
|
||||||
for (i = 0; i < NOfFileAliases; i++)
|
|
||||||
FileAliases[i].name = AtomAdjust(FileAliases[i].name);
|
|
||||||
}
|
|
||||||
if (Yap_heap_regs->yap_lib_dir) {
|
|
||||||
Yap_heap_regs->yap_lib_dir =
|
|
||||||
(char *)AddrAdjust((ADDR)Yap_heap_regs->yap_lib_dir);
|
|
||||||
}
|
|
||||||
#if !defined(THREADS) && !defined(YAPOR)
|
#if !defined(THREADS) && !defined(YAPOR)
|
||||||
if (Yap_heap_regs->wl.scratchpad.ptr) {
|
if (Yap_heap_regs->wl.scratchpad.ptr) {
|
||||||
Yap_heap_regs->wl.scratchpad.ptr =
|
Yap_heap_regs->wl.scratchpad.ptr =
|
||||||
|
151
H/rhstruct.h
151
H/rhstruct.h
@ -24,6 +24,66 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
REINIT_LOCK(Yap_heap_regs->bgl);
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl[worker_id]
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifdef THREADS
|
||||||
|
REINIT_LOCK(Yap_heap_regs->thread_handles_lock);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
|
#ifndef HeapUsed
|
||||||
|
#define HeapUsed Yap_givemallinfo()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
REINIT_LOCK(Yap_heap_regs->free_blocks_lock);
|
||||||
|
REINIT_LOCK(Yap_heap_regs->heap_used_lock);
|
||||||
|
REINIT_LOCK(Yap_heap_regs->heap_top_lock);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RestoreInvisibleAtoms();
|
||||||
|
RestoreWideAtoms();
|
||||||
|
RestoreAtoms();
|
||||||
|
|
||||||
|
#include "ratoms.h"
|
||||||
#ifdef EUROTRA
|
#ifdef EUROTRA
|
||||||
Yap_heap_regs->term_dollar_u = AtomTermAdjust(Yap_heap_regs->term_dollar_u);
|
Yap_heap_regs->term_dollar_u = AtomTermAdjust(Yap_heap_regs->term_dollar_u);
|
||||||
#endif
|
#endif
|
||||||
@ -75,7 +135,6 @@
|
|||||||
Yap_heap_regs->pred_fail = PtoPredAdjust(Yap_heap_regs->pred_fail);
|
Yap_heap_regs->pred_fail = PtoPredAdjust(Yap_heap_regs->pred_fail);
|
||||||
Yap_heap_regs->pred_true = PtoPredAdjust(Yap_heap_regs->pred_true);
|
Yap_heap_regs->pred_true = PtoPredAdjust(Yap_heap_regs->pred_true);
|
||||||
#ifdef COROUTINING
|
#ifdef COROUTINING
|
||||||
|
|
||||||
Yap_heap_regs->wake_up_code = PtoPredAdjust(Yap_heap_regs->wake_up_code);
|
Yap_heap_regs->wake_up_code = PtoPredAdjust(Yap_heap_regs->wake_up_code);
|
||||||
#endif
|
#endif
|
||||||
Yap_heap_regs->pred_goal_expansion = PtoPredAdjust(Yap_heap_regs->pred_goal_expansion);
|
Yap_heap_regs->pred_goal_expansion = PtoPredAdjust(Yap_heap_regs->pred_goal_expansion);
|
||||||
@ -89,6 +148,10 @@
|
|||||||
Yap_heap_regs->pred_throw = PtoPredAdjust(Yap_heap_regs->pred_throw);
|
Yap_heap_regs->pred_throw = PtoPredAdjust(Yap_heap_regs->pred_throw);
|
||||||
Yap_heap_regs->pred_handle_throw = PtoPredAdjust(Yap_heap_regs->pred_handle_throw);
|
Yap_heap_regs->pred_handle_throw = PtoPredAdjust(Yap_heap_regs->pred_handle_throw);
|
||||||
Yap_heap_regs->pred_is = PtoPredAdjust(Yap_heap_regs->pred_is);
|
Yap_heap_regs->pred_is = PtoPredAdjust(Yap_heap_regs->pred_is);
|
||||||
|
#ifdef YAPOR
|
||||||
|
Yap_heap_regs->pred_getwork = PtoPredAdjust(Yap_heap_regs->pred_getwork);
|
||||||
|
Yap_heap_regs->pred_getwork_seq = PtoPredAdjust(Yap_heap_regs->pred_getwork_seq);
|
||||||
|
#endif /* YAPOR */
|
||||||
|
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
|
|
||||||
@ -115,21 +178,21 @@
|
|||||||
|
|
||||||
RestoreEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail);
|
RestoreEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail);
|
||||||
|
|
||||||
RestoreOtaplInst(RTRYCODE,_retry_and_mark);
|
RestoreOtaplInst(RTRYCODE,_retry_and_mark,PredFail);
|
||||||
#ifdef BEAM
|
#ifdef BEAM
|
||||||
Yap_heap_regs->beam_retry_code->opc = Yap_opcode(_beam_retry_code);
|
Yap_heap_regs->beam_retry_code->opc = Yap_opcode(_beam_retry_code);
|
||||||
#endif /* BEAM */
|
#endif /* BEAM */
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
|
|
||||||
RestoreOtaplInst(GETWORK,_getwork);
|
RestoreOtaplInst(GETWORK,_getwork,PredGetwork);
|
||||||
RestoreOtaplInst(GETWORK_SEQ,_getwork_seq);
|
RestoreOtaplInst(GETWORK_SEQ,_getwork_seq,PredGetworkSeq);
|
||||||
Yap_heap_regs->getwork_first_time->opc = Yap_opcode(_getwork_first_time);
|
Yap_heap_regs->getwork_first_time->opc = Yap_opcode(_getwork_first_time);
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
RestoreOtaplInst(LOAD_ANSWER,_table_load_answer);
|
RestoreOtaplInst(LOAD_ANSWER,_table_load_answer);
|
||||||
RestoreOtaplInst(TRY_ANSWER,_table_try_answer);
|
RestoreOtaplInst(TRY_ANSWER,_table_try_answer,PredFail);
|
||||||
RestoreOtaplInst(ANSWER_RESOLUTION,_answer_resolution_seq);
|
RestoreOtaplInst(ANSWER_RESOLUTION,_answer_bresolution_seq,PredFail);
|
||||||
RestoreOtaplInst(COMPLETION,_table_completion);
|
RestoreOtaplInst(COMPLETION,_table_completion,PredFail);
|
||||||
#endif /* TABLING */
|
#endif /* TABLING */
|
||||||
|
|
||||||
|
|
||||||
@ -190,3 +253,77 @@
|
|||||||
|
|
||||||
RestoreDBErasedMarker();
|
RestoreDBErasedMarker();
|
||||||
RestoreLogDBErasedMarker();
|
RestoreLogDBErasedMarker();
|
||||||
|
|
||||||
|
RestoreDeadStaticClauses();
|
||||||
|
RestoreDeadMegaClauses();
|
||||||
|
RestoreDeadStaticIndices();
|
||||||
|
RestoreDBErasedList();
|
||||||
|
RestoreDBErasedIList();
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
REINIT_LOCK(Yap_heap_regs->dead_static_clauses_lock);
|
||||||
|
REINIT_LOCK(Yap_heap_regs->dead_mega_clauses_lock);
|
||||||
|
REINIT_LOCK(Yap_heap_regs->dead_static_indices_lock);
|
||||||
|
#endif
|
||||||
|
#ifdef COROUTINING
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Yap_heap_regs->global_hold_entry = HoldEntryAdjust(Yap_heap_regs->global_hold_entry);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Yap_heap_regs->op_list = OpListAdjust(Yap_heap_regs->op_list);
|
||||||
|
|
||||||
|
|
||||||
|
RestoreStreams();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RestoreAliases();
|
||||||
|
|
||||||
|
Yap_heap_regs->atprompt = AtomAdjust(Yap_heap_regs->atprompt);
|
||||||
|
|
||||||
|
|
||||||
|
#if HAVE_LIBREADLINE
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Yap_heap_regs->char_conversion_table = CodeCharPAdjust(Yap_heap_regs->char_conversion_table);
|
||||||
|
Yap_heap_regs->char_conversion_table2 = CodeCharPAdjust(Yap_heap_regs->char_conversion_table2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Yap_heap_regs->yap_lib_dir = CodeCharPAdjust(Yap_heap_regs->yap_lib_dir);
|
||||||
|
|
||||||
|
Yap_heap_regs->last_wtime = CodeVoidPAdjust(Yap_heap_regs->last_wtime);
|
||||||
|
|
||||||
|
|
||||||
|
#if LOW_PROF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* LOW_PROF */
|
||||||
|
|
||||||
|
RestoreForeignCode();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
22
H/sshift.h
22
H/sshift.h
@ -582,6 +582,18 @@ inline EXTERN char * CodeCharPAdjust (char *);
|
|||||||
inline EXTERN char *
|
inline EXTERN char *
|
||||||
CodeCharPAdjust (char * addr)
|
CodeCharPAdjust (char * addr)
|
||||||
{
|
{
|
||||||
|
if (!addr)
|
||||||
|
return NULL;
|
||||||
|
return addr + HDiff;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline EXTERN void * CodeVoidPAdjust (void *);
|
||||||
|
|
||||||
|
inline EXTERN void *
|
||||||
|
CodeVoidPAdjust (void * addr)
|
||||||
|
{
|
||||||
|
if (!addr)
|
||||||
|
return NULL;
|
||||||
return addr + HDiff;
|
return addr + HDiff;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -605,6 +617,16 @@ PtoOpAdjust (yamop * ptr)
|
|||||||
return (yamop *) (CharP (ptr) + HDiff);
|
return (yamop *) (CharP (ptr) + HDiff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline EXTERN struct operator_entry *OpListAdjust (struct operator_entry *);
|
||||||
|
|
||||||
|
inline EXTERN struct operator_entry *
|
||||||
|
OpListAdjust (struct operator_entry * ptr)
|
||||||
|
{
|
||||||
|
if (!ptr)
|
||||||
|
return ptr;
|
||||||
|
return (struct operator_entry *) (CharP (ptr) + HDiff);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline EXTERN struct logic_upd_clause *PtoLUClauseAdjust (struct logic_upd_clause *);
|
inline EXTERN struct logic_upd_clause *PtoLUClauseAdjust (struct logic_upd_clause *);
|
||||||
|
|
||||||
|
177
misc/HEAPFIELDS
177
misc/HEAPFIELDS
@ -24,6 +24,72 @@
|
|||||||
// Init... sets up call to InitFunc
|
// Init... sets up call to InitFunc
|
||||||
// Restore... sets up call to RestoreFunc
|
// Restore... sets up call to RestoreFunc
|
||||||
//
|
//
|
||||||
|
|
||||||
|
/* multi-thread/ORP support */
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
/* number of threads and processes in system */
|
||||||
|
UInt n_of_threads NOfThreads =1 void
|
||||||
|
/* number of threads created since start */
|
||||||
|
UInt n_of_threads_created NOfThreadsCreated =1 void
|
||||||
|
/* total run time for dead threads */
|
||||||
|
UInt threads_total_time ThreadsTotalTime =0L void
|
||||||
|
/* protect long critical regions */
|
||||||
|
lockvar bgl BGL MkLock
|
||||||
|
/* worker local data */
|
||||||
|
worker_local wl[MAX_AGENTS] WorkerLocal void void
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl[worker_id]
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
worker_local wl WorkerLocak void void
|
||||||
|
#ifndef WL
|
||||||
|
#define WL wl
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifdef THREADS
|
||||||
|
lockvar thread_handles_lock ThreadHandlesLock MkLock
|
||||||
|
struct thandle thread_handle[MAX_THREADS] ThreadHandle InitThreadHandles void
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* memory management */
|
||||||
|
UInt hole_size Yap_HoleSize void void
|
||||||
|
struct malloc_state *av_ Yap_av void void
|
||||||
|
#if USE_DL_MALLOC
|
||||||
|
struct memory_hole memory_holes[MAX_DLMALLOC_HOLES] Yap_MemoryHoles void void
|
||||||
|
UInt nof_memory_holes Yap_NOfMemoryHoles void void
|
||||||
|
#endif
|
||||||
|
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||||
|
#ifndef HeapUsed
|
||||||
|
#define HeapUsed Yap_givemallinfo()
|
||||||
|
#endif
|
||||||
|
Int heap_used NotHeapUsed void void
|
||||||
|
#else
|
||||||
|
Int heap_used HeapUsed void void
|
||||||
|
#endif
|
||||||
|
Int heap_max HeapMax void void
|
||||||
|
ADDR heap_top HeapTop void void
|
||||||
|
ADDR heap_lim HeapLim void void
|
||||||
|
struct FREEB *free_blocks FreeBlocks void void
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
lockvar free_blocks_lock FreeBlocksLock MkLock
|
||||||
|
lockvar heap_used_lock HeapUsedLock MkLock
|
||||||
|
lockvar heap_top_lock HeapTopLock MkLock
|
||||||
|
int heap_top_owner HeapTopOwner =-1 void
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* atom tables */
|
||||||
|
UInt n_of_atoms NOfAtoms void void
|
||||||
|
UInt atom_hash_table_size AtomHashTableSize void void
|
||||||
|
UInt wide_atom_hash_table_size WideAtomHashTableSize void void
|
||||||
|
UInt n_of_wide_atoms NOfWideAtoms void void
|
||||||
|
AtomHashEntry invisiblechain INVISIBLECHAIN InitInvisibleAtoms() RestoreInvisibleAtoms()
|
||||||
|
AtomHashEntry *wide_hash_chain WideHashChain InitWideAtoms() RestoreWideAtoms()
|
||||||
|
AtomHashEntry *hash_chain HashChain InitAtoms() RestoreAtoms()
|
||||||
|
|
||||||
|
/* use atom defs here */
|
||||||
|
ATOMS
|
||||||
|
|
||||||
#ifdef EUROTRA
|
#ifdef EUROTRA
|
||||||
Term term_dollar_u TermDollarU MkAT AtomDollarU
|
Term term_dollar_u TermDollarU MkAT AtomDollarU
|
||||||
#endif
|
#endif
|
||||||
@ -71,7 +137,7 @@ struct pred_entry **pred_hash PredHash InitPredHash() RestorePredHash()
|
|||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
rwlock_t pred_hash_rw_lock PredHashRWLock void
|
rwlock_t pred_hash_rw_lock PredHashRWLock void
|
||||||
#endif
|
#endif
|
||||||
UInt preds_in_hash_table PredsInHashTable void
|
UInt preds_in_hash_table PredsInHashTable =0 void
|
||||||
UInt pred_hash_table_size PredHashTableSize void
|
UInt pred_hash_table_size PredHashTableSize void
|
||||||
|
|
||||||
|
|
||||||
@ -82,7 +148,6 @@ struct pred_entry *spy_code SpyCode MkPred AtomSpy 1 PROLOG_MODULE
|
|||||||
struct pred_entry *pred_fail PredFail MkPred AtomFail 0 PROLOG_MODULE
|
struct pred_entry *pred_fail PredFail MkPred AtomFail 0 PROLOG_MODULE
|
||||||
struct pred_entry *pred_true PredTrue MkPred AtomTrue 0 PROLOG_MODULE
|
struct pred_entry *pred_true PredTrue MkPred AtomTrue 0 PROLOG_MODULE
|
||||||
#ifdef COROUTINING
|
#ifdef COROUTINING
|
||||||
int num_of_atts NUM_OF_ATTS =1 void
|
|
||||||
struct pred_entry *wake_up_code WakeUpCode MkPred AtomWakeUpGoal 2 PROLOG_MODULE
|
struct pred_entry *wake_up_code WakeUpCode MkPred AtomWakeUpGoal 2 PROLOG_MODULE
|
||||||
#endif
|
#endif
|
||||||
struct pred_entry *pred_goal_expansion PredGoalExpansion MkPred FunctorGoalExpansion USER_MODULE
|
struct pred_entry *pred_goal_expansion PredGoalExpansion MkPred FunctorGoalExpansion USER_MODULE
|
||||||
@ -96,6 +161,10 @@ struct pred_entry *pred_static_clause PredStaticClause MkPred FunctorDoStaticCla
|
|||||||
struct pred_entry *pred_throw PredThrow MkPred FunctorThrow PROLOG_MODULE
|
struct pred_entry *pred_throw PredThrow MkPred FunctorThrow PROLOG_MODULE
|
||||||
struct pred_entry *pred_handle_throw PredHandleThrow MkPred FunctorHandleThrow PROLOG_MODULE
|
struct pred_entry *pred_handle_throw PredHandleThrow MkPred FunctorHandleThrow PROLOG_MODULE
|
||||||
struct pred_entry *pred_is PredIs MkPred FunctorIs PROLOG_MODULE
|
struct pred_entry *pred_is PredIs MkPred FunctorIs PROLOG_MODULE
|
||||||
|
#ifdef YAPOR
|
||||||
|
struct pred_entry *pred_getwork PredGetwork MkPred AtomGetwork 0 PROLOG_MODULE
|
||||||
|
struct pred_entry *pred_getwork_seq PredGetworkSeq MkPred AtomGetworkSeq 0 PROLOG_MODULE
|
||||||
|
#endif /* YAPOR */
|
||||||
|
|
||||||
/* low-level tracer */
|
/* low-level tracer */
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
@ -127,22 +196,22 @@ yamop *trustfailcode TRUSTFAILCODE void
|
|||||||
yamop env_for_yescode[2] ENV_FOR_YESCODE InitEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail) RestoreEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail)
|
yamop env_for_yescode[2] ENV_FOR_YESCODE InitEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail) RestoreEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail)
|
||||||
yamop *yescode YESCODE void
|
yamop *yescode YESCODE void
|
||||||
|
|
||||||
yamop rtrycode[1] RTRYCODE InitOtaplInst(RTRYCODE,_retry_and_mark) RestoreOtaplInst(RTRYCODE,_retry_and_mark)
|
yamop rtrycode[1] RTRYCODE InitOtaplInst(RTRYCODE,_retry_and_mark,PredFail) RestoreOtaplInst(RTRYCODE,_retry_and_mark,PredFail)
|
||||||
|
|
||||||
#ifdef BEAM
|
#ifdef BEAM
|
||||||
yamop beam_retry_code[1] BEAM_RETRY_CODE MkInstE _beam_retry_code
|
yamop beam_retry_code[1] BEAM_RETRY_CODE MkInstE _beam_retry_code
|
||||||
#endif /* BEAM */
|
#endif /* BEAM */
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
int seq_def SEQUENTIAL_IS_DEFAULT =TRUE void
|
int seq_def SEQUENTIAL_IS_DEFAULT =TRUE void
|
||||||
yamop getwork_code[1] GETWORK InitOtaplInst(GETWORK,_getwork) RestoreOtaplInst(GETWORK,_getwork)
|
yamop getwork_code[1] GETWORK InitOtaplInst(GETWORK,_getwork,PredGetwork) RestoreOtaplInst(GETWORK,_getwork,PredGetwork)
|
||||||
yamop getwork_seq_code[1] GETWORK_SEQ InitOtaplInst(GETWORK_SEQ,_getwork_seq) RestoreOtaplInst(GETWORK_SEQ,_getwork_seq)
|
yamop getwork_seq_code[1] GETWORK_SEQ InitOtaplInst(GETWORK_SEQ,_getwork_seq,PredGetworkSeq) RestoreOtaplInst(GETWORK_SEQ,_getwork_seq,PredGetworkSeq)
|
||||||
yamop getwork_first_time[1] GETWORK_FIRST_TIME MkInstE _getwork_first_time
|
yamop getwork_first_time[1] GETWORK_FIRST_TIME MkInstE _getwork_first_time
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
yamop table_load_answer_code[1] LOAD_ANSWER InitOtaplInst(LOAD_ANSWER,_table_load_answer) RestoreOtaplInst(LOAD_ANSWER,_table_load_answer)
|
yamop table_load_answer_code[1] LOAD_ANSWER InitOtaplInst(LOAD_ANSWER,_table_load_answer,PredFail) RestoreOtaplInst(LOAD_ANSWER,_table_load_answer)
|
||||||
yamop table_try_answer_code[1] TRY_ANSWER InitOtaplInst(TRY_ANSWER,_table_try_answer) RestoreOtaplInst(TRY_ANSWER,_table_try_answer)
|
yamop table_try_answer_code[1] TRY_ANSWER InitOtaplInst(TRY_ANSWER,_table_try_answer) RestoreOtaplInst(TRY_ANSWER,_table_try_answer,PredFail)
|
||||||
yamop table_answer_resolution_code[1] ANSWER_RESOLUTION InitOtaplInst(ANSWER_RESOLUTION,_answer_resolution) RestoreOtaplInst(ANSWER_RESOLUTION,_answer_resolution_seq)
|
yamop table_answer_resolution_code[1] ANSWER_RESOLUTION InitOtaplInst(ANSWER_RESOLUTION,_answer_resolution,PredFail) RestoreOtaplInst(ANSWER_RESOLUTION,_answer_bresolution_seq,PredFail)
|
||||||
yamop table_completion_code[1] COMPLETION InitOtaplInst(COMPLETION,_table_completion) RestoreOtaplInst(COMPLETION,_table_completion)
|
yamop table_completion_code[1] COMPLETION InitOtaplInst(COMPLETION,_table_completion,PredFail) RestoreOtaplInst(COMPLETION,_table_completion,PredFail)
|
||||||
#endif /* TABLING */
|
#endif /* TABLING */
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
@ -216,3 +285,93 @@ int update_mode UPDATE_MODE =UPDATE_MODE_LOGICAL void
|
|||||||
struct DB_STRUCT *db_erased_marker DBErasedMarker InitDBErasedMarker() RestoreDBErasedMarker()
|
struct DB_STRUCT *db_erased_marker DBErasedMarker InitDBErasedMarker() RestoreDBErasedMarker()
|
||||||
struct logic_upd_clause *logdb_erased_marker LogDBErasedMarker InitLogDBErasedMarker() RestoreLogDBErasedMarker()
|
struct logic_upd_clause *logdb_erased_marker LogDBErasedMarker InitLogDBErasedMarker() RestoreLogDBErasedMarker()
|
||||||
|
|
||||||
|
/* Dead clauses and IDB entries */
|
||||||
|
struct static_clause *dead_static_clauses DeadStaticClauses =NULL RestoreDeadStaticClauses()
|
||||||
|
struct static_mega_clause *dead_mega_clauses DeadMegaClauses =NULL RestoreDeadMegaClauses()
|
||||||
|
struct static_index *dead_static_indices DeadStaticIndices =NULL RestoreDeadStaticIndices()
|
||||||
|
struct logic_upd_clause *db_erased_list DBErasedList =NULL RestoreDBErasedList()
|
||||||
|
struct logic_upd_index *db_erased_ilist DBErasedIList =NULL RestoreDBErasedIList()
|
||||||
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
|
lockvar dead_static_clauses_lock DeadStaticClausesLock MkLock
|
||||||
|
lockvar dead_mega_clauses_lock DeadMegaClausesLock MkLock
|
||||||
|
lockvar dead_static_indices_lock DeadStaticIndicesLock MkLock
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef COROUTINING
|
||||||
|
/* number of attribute modules */
|
||||||
|
int num_of_atts NUM_OF_ATTS =1 void
|
||||||
|
/* initialised by memory allocator */
|
||||||
|
UInt atts_size Yap_AttsSize void void
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* stack overflow expansion/gc control */
|
||||||
|
int allow_local_expansion Yap_AllowLocalExpansion =TRUE void
|
||||||
|
int allow_global_expansion Yap_AllowGlobalExpansion =TRUE void
|
||||||
|
int allow_trail_expansion Yap_AllowTrailExpansion =TRUE void
|
||||||
|
UInt size_of_overflow SizeOfOverflow =0 void
|
||||||
|
struct hold_entry *global_hold_entry GlobalHoldEntry =Yap_InitAtomHold() HoldEntryAdjust
|
||||||
|
/* amount of space recovered in all garbage collections */
|
||||||
|
UInt agc_last_call AGcLastCall =0 void
|
||||||
|
/* amount of space recovered in all garbage collections */
|
||||||
|
UInt agc_threshold AGcThreshold =10000 void
|
||||||
|
Agc_hook agc_hook AGCHook =NULL void
|
||||||
|
|
||||||
|
/* YAP control flags */
|
||||||
|
Int yap_flags_field[NUMBER_OF_YAP_FLAGS] yap_flags InitFlags() void
|
||||||
|
|
||||||
|
/* Operators */
|
||||||
|
struct operator_entry *op_list OpList =NULL OpListAdjust
|
||||||
|
|
||||||
|
/* Input/Output */
|
||||||
|
|
||||||
|
/* stream array */
|
||||||
|
struct stream_desc *yap_streams Stream =NULL RestoreStreams()
|
||||||
|
|
||||||
|
/* stream aliases */
|
||||||
|
UInt n_of_file_aliases NOfFileAliases =0 void
|
||||||
|
UInt sz_of_file_aliases SzOfFileAliases =0 void
|
||||||
|
struct AliasDescS *file_aliases FileAliases =NULL RestoreAliases()
|
||||||
|
|
||||||
|
/* prompting */
|
||||||
|
Atom atprompt AtPrompt =AtomNil AtomAdjust
|
||||||
|
char prompt[MAX_PROMPT] Prompt void void
|
||||||
|
|
||||||
|
/* readline */
|
||||||
|
#if HAVE_LIBREADLINE
|
||||||
|
char *readline_buf ReadlineBuf =NULL void
|
||||||
|
char *readline_pos ReadlinePos =0L void
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ISO char conversion: I will make no comments */
|
||||||
|
char *char_conversion_table CharConversionTable =NULL CodeCharPAdjust
|
||||||
|
char *char_conversion_table2 CharConversionTable2 =NULL CodeCharPAdjust
|
||||||
|
|
||||||
|
/* write depth */
|
||||||
|
UInt maxdepth max_depth =0L void
|
||||||
|
UInt axlist max_list =0L void
|
||||||
|
UInt maxwriteargs max_write_args =0L void
|
||||||
|
|
||||||
|
/* what to do when the parser gives an error: should be thread bound? */
|
||||||
|
int parser_error_style ParserErrorStyle =EXCEPTION_ON_PARSER_ERROR void
|
||||||
|
|
||||||
|
/* library location. */
|
||||||
|
char *yap_lib_dir Yap_LibDir =NULL CodeCharPAdjust
|
||||||
|
|
||||||
|
/* time */
|
||||||
|
void *last_wtime LastWtimePtr =NULL CodeVoidPAdjust
|
||||||
|
|
||||||
|
/* profiling */
|
||||||
|
int debugger_output_msg output_msg =0L void
|
||||||
|
#if LOW_PROF
|
||||||
|
int profiler_on ProfilerOn =FALSE void
|
||||||
|
int offline_profiler Yap_OffLineProfiler =FALSE void
|
||||||
|
FILE *f_prof FProf =NULL void
|
||||||
|
FILE *f_preds FPreds =NULL void
|
||||||
|
UInt prof_preds ProfPreds =0L void
|
||||||
|
#endif /* LOW_PROF */
|
||||||
|
|
||||||
|
/* foreign code loaded */
|
||||||
|
void *foreign_code_loaded ForeignCodeLoaded =NULL RestoreForeignCode()
|
||||||
|
ADDR foreign_code_base ForeignCodeBase =NULL void
|
||||||
|
ADDR foreign_code_top ForeignCodeTop =NULL void
|
||||||
|
ADDR foreign_code_max ForeignCodeMax =NULL void
|
||||||
|
@ -28,6 +28,9 @@ gen_struct(Inp,"") :-
|
|||||||
Inp = [0'/,0'*|_], !.
|
Inp = [0'/,0'*|_], !.
|
||||||
gen_struct(Inp, Out) :-
|
gen_struct(Inp, Out) :-
|
||||||
Inp = [0'#|_], !, Out = Inp. % '
|
Inp = [0'#|_], !, Out = Inp. % '
|
||||||
|
gen_struct(Inp,Out) :-
|
||||||
|
Inp = "ATOMS", !,
|
||||||
|
Out = "#include \"tatoms.h\"".
|
||||||
gen_struct(Inp,Out) :-
|
gen_struct(Inp,Out) :-
|
||||||
split(Inp," ",["struct",Type, Field|_]), !,
|
split(Inp," ",["struct",Type, Field|_]), !,
|
||||||
append([" struct ",Type," ",Field,";"], Out).
|
append([" struct ",Type," ",Field,";"], Out).
|
||||||
@ -46,6 +49,9 @@ gen_dstruct(Inp,"") :-
|
|||||||
Inp = [0'/,0'*|_], !.
|
Inp = [0'/,0'*|_], !.
|
||||||
gen_dstruct(Inp, Out) :-
|
gen_dstruct(Inp, Out) :-
|
||||||
Inp = [0'#|_], !, Out = Inp. % '
|
Inp = [0'#|_], !, Out = Inp. % '
|
||||||
|
gen_dstruct(Inp,Out) :-
|
||||||
|
Inp = "ATOMS", !,
|
||||||
|
Out = "".
|
||||||
gen_dstruct(Inp,"") :-
|
gen_dstruct(Inp,"") :-
|
||||||
split(Inp," ",["void","void"|_]), !.
|
split(Inp," ",["void","void"|_]), !.
|
||||||
gen_dstruct(Inp,Out) :-
|
gen_dstruct(Inp,Out) :-
|
||||||
@ -75,6 +81,9 @@ gen_hstruct(Inp,"") :-
|
|||||||
Inp = [0'/,0'/|_], !.
|
Inp = [0'/,0'/|_], !.
|
||||||
gen_hstruct(Inp,"") :-
|
gen_hstruct(Inp,"") :-
|
||||||
Inp = [0'/,0'*|_], !.
|
Inp = [0'/,0'*|_], !.
|
||||||
|
gen_hstruct(Inp,Out) :-
|
||||||
|
Inp = "ATOMS", !,
|
||||||
|
Out = "#include \"ratoms.h\"".
|
||||||
gen_hstruct(Inp, Out) :-
|
gen_hstruct(Inp, Out) :-
|
||||||
Inp = [0'#|_], !, Out = Inp. % '
|
Inp = [0'#|_], !, Out = Inp. % '
|
||||||
gen_hstruct(Inp,Out) :-
|
gen_hstruct(Inp,Out) :-
|
||||||
@ -124,6 +133,9 @@ gen_init(Inp,"") :-
|
|||||||
Inp = [0'/,0'/|_], !.
|
Inp = [0'/,0'/|_], !.
|
||||||
gen_init(Inp, Out) :-
|
gen_init(Inp, Out) :-
|
||||||
Inp = [0'#|_], !, Out = Inp. % '
|
Inp = [0'#|_], !, Out = Inp. % '
|
||||||
|
gen_init(Inp,Out) :-
|
||||||
|
Inp = "ATOMS", !,
|
||||||
|
Out = "#include \"iatoms.h\"".
|
||||||
gen_init(Inp,Out) :-
|
gen_init(Inp,Out) :-
|
||||||
split(Inp," ",["struct"|Inp2]), !,
|
split(Inp," ",["struct"|Inp2]), !,
|
||||||
glue(Inp2, " ", Inp3),
|
glue(Inp2, " ", Inp3),
|
||||||
|
Reference in New Issue
Block a user