| 
									
										
										
										
											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; | 
					
						
							|  |  |  |   YAP_Term g; | 
					
						
							|  |  |  |   yamop *p, *cp; | 
					
						
							|  |  |  |   Int slots; | 
					
						
							|  |  |  |   jmp_buf env; | 
					
						
							|  |  |  |   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) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   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
										 |  |  | } | 
					
						
							|  |  |  | 
 |