2010-11-30 21:59:45 +00:00
|
|
|
void Yap_swi_install(void);
|
|
|
|
void Yap_install_blobs(void);
|
|
|
|
|
|
|
|
/* Required by PL_error */
|
|
|
|
#define ERR_NO_ERROR 0
|
|
|
|
#define ERR_INSTANTIATION 1 /* void */
|
|
|
|
#define ERR_TYPE 2 /* atom_t expected, term_t value */
|
|
|
|
#define ERR_DOMAIN 3 /* atom_t domain, term_t value */
|
|
|
|
#define ERR_REPRESENTATION 4 /* atom_t what */
|
|
|
|
#define ERR_MODIFY_STATIC_PROC 5 /* predicate_t proc */
|
|
|
|
#define ERR_EVALUATION 6 /* atom_t what */
|
|
|
|
#define ERR_AR_TYPE 7 /* atom_t expected, Number value */
|
|
|
|
#define ERR_NOT_EVALUABLE 8 /* functor_t func */
|
|
|
|
#define ERR_DIV_BY_ZERO 9 /* void */
|
|
|
|
#define ERR_FAILED 10 /* predicate_t proc */
|
|
|
|
#define ERR_FILE_OPERATION 11 /* atom_t action, atom_t type, term_t */
|
|
|
|
#define ERR_PERMISSION 12 /* atom_t type, atom_t op, term_t obj*/
|
|
|
|
#define ERR_NOT_IMPLEMENTED 13 /* const char *what */
|
|
|
|
#define ERR_EXISTENCE 14 /* atom_t type, term_t obj */
|
|
|
|
#define ERR_STREAM_OP 15 /* atom_t action, term_t obj */
|
|
|
|
#define ERR_RESOURCE 16 /* atom_t resource */
|
|
|
|
#define ERR_NOMEM 17 /* void */
|
|
|
|
#define ERR_SYSCALL 18 /* void */
|
|
|
|
#define ERR_SHELL_FAILED 19 /* term_t command */
|
|
|
|
#define ERR_SHELL_SIGNALLED 20 /* term_t command, int signal */
|
|
|
|
#define ERR_AR_UNDEF 21 /* void */
|
|
|
|
#define ERR_AR_OVERFLOW 22 /* void */
|
|
|
|
#define ERR_AR_UNDERFLOW 23 /* void */
|
|
|
|
#define ERR_UNDEFINED_PROC 24 /* Definition def */
|
|
|
|
#define ERR_SIGNALLED 25 /* int sig, char *name */
|
|
|
|
#define ERR_CLOSED_STREAM 26 /* IOSTREAM * */
|
|
|
|
#define ERR_BUSY 27 /* mutexes */
|
|
|
|
#define ERR_PERMISSION_PROC 28 /* op, type, Definition */
|
|
|
|
#define ERR_DDE_OP 29 /* op, error */
|
|
|
|
#define ERR_SYNTAX 30 /* what */
|
|
|
|
#define ERR_SHARED_OBJECT_OP 31 /* op, error */
|
|
|
|
#define ERR_TIMEOUT 32 /* op, object */
|
|
|
|
#define ERR_NOT_IMPLEMENTED_PROC 33 /* name, arity */
|
|
|
|
#define ERR_FORMAT 34 /* message */
|
|
|
|
#define ERR_FORMAT_ARG 35 /* seq, term */
|
|
|
|
#define ERR_OCCURS_CHECK 36 /* Word, Word */
|
|
|
|
#define ERR_CHARS_TYPE 37 /* char *, term */
|
|
|
|
#define ERR_MUST_BE_VAR 38 /* int argn, term_t term */
|
|
|
|
|
|
|
|
typedef struct open_query_struct {
|
|
|
|
int open;
|
|
|
|
int state;
|
2013-02-05 14:22:17 +00:00
|
|
|
YAP_Term *g;
|
|
|
|
PredEntry *pe;
|
2010-11-30 21:59:45 +00:00
|
|
|
yamop *p, *cp;
|
2011-03-14 20:54:19 +00:00
|
|
|
Int slots, b;
|
2010-11-30 21:59:45 +00:00
|
|
|
jmp_buf env;
|
2013-01-18 14:26:24 +00:00
|
|
|
int flags;
|
2013-02-05 14:22:17 +00:00
|
|
|
YAP_dogoalinfo h;
|
2010-11-30 21:59:45 +00:00
|
|
|
struct open_query_struct *old;
|
|
|
|
} open_query;
|
|
|
|
|
|
|
|
#define addr_hash(V) (((CELL) (V)) >> 4 & (N_SWI_HASH-1))
|
|
|
|
|
|
|
|
static inline void
|
|
|
|
add_to_hash(Int i, ADDR key)
|
|
|
|
{
|
|
|
|
UInt h = addr_hash(key);
|
|
|
|
while (SWI_ReverseHash[h].key) {
|
|
|
|
h = (h+1)%N_SWI_HASH;
|
|
|
|
}
|
|
|
|
SWI_ReverseHash[h].key = key;
|
|
|
|
SWI_ReverseHash[h].pos = i;
|
|
|
|
}
|
|
|
|
|
|
|
|
static atom_t
|
|
|
|
in_hash(ADDR key)
|
|
|
|
{
|
|
|
|
UInt h = addr_hash(key);
|
|
|
|
while (SWI_ReverseHash[h].key) {
|
|
|
|
if (SWI_ReverseHash[h].key == key)
|
|
|
|
return SWI_ReverseHash[h].pos;
|
|
|
|
h = (h+1)%N_SWI_HASH;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static inline atom_t
|
|
|
|
AtomToSWIAtom(Atom at)
|
|
|
|
{
|
|
|
|
atom_t ats;
|
|
|
|
if ((ats = in_hash((ADDR)at)))
|
2010-12-02 19:38:15 +00:00
|
|
|
return (atom_t)((CELL)ats*2+1);
|
2010-11-30 21:59:45 +00:00
|
|
|
return (atom_t)at;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline Atom
|
|
|
|
SWIAtomToAtom(atom_t at)
|
|
|
|
{
|
2010-12-02 12:10:03 +00:00
|
|
|
if ((CELL)at < N_SWI_ATOMS*(LowTagBits+1))
|
2010-12-02 19:38:15 +00:00
|
|
|
return SWI_Atoms[((CELL)at)/2];
|
2010-11-30 21:59:45 +00:00
|
|
|
return (Atom)at;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline Term
|
|
|
|
SWIModuleToModule(module_t m)
|
|
|
|
{
|
2011-03-07 16:02:55 +00:00
|
|
|
CACHE_REGS
|
2010-11-30 21:59:45 +00:00
|
|
|
if (m)
|
|
|
|
return (CELL)m;
|
|
|
|
if (CurrentModule)
|
|
|
|
return CurrentModule;
|
|
|
|
return USER_MODULE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline functor_t
|
|
|
|
FunctorToSWIFunctor(Functor at)
|
|
|
|
{
|
|
|
|
atom_t ats;
|
|
|
|
if ((ats = in_hash((ADDR)at)))
|
2010-12-02 19:38:15 +00:00
|
|
|
return (functor_t)((CELL)ats*4+2);
|
2010-11-30 21:59:45 +00:00
|
|
|
return (functor_t)at;
|
|
|
|
}
|
|
|
|
|
2010-12-02 19:41:48 +00:00
|
|
|
/* This is silly, but let's keep it like that for now */
|
2010-11-30 21:59:45 +00:00
|
|
|
static inline Functor
|
2010-12-02 12:10:03 +00:00
|
|
|
SWIFunctorToFunctor(functor_t f)
|
2010-11-30 21:59:45 +00:00
|
|
|
{
|
2010-12-02 19:38:15 +00:00
|
|
|
if ((CELL)(f) & 2 && ((CELL)f) < N_SWI_FUNCTORS*4+2)
|
|
|
|
return SWI_Functors[((CELL)f)/4];
|
2010-12-02 12:10:03 +00:00
|
|
|
return (Functor)f;
|
2010-11-30 21:59:45 +00:00
|
|
|
}
|
|
|
|
|