This commit is contained in:
Vitor Santos Costa 2017-10-04 09:18:17 +01:00
parent d05b1f4b2b
commit dd48ba6f91
9 changed files with 814 additions and 859 deletions

View File

@ -28,7 +28,7 @@
* mirroring
*/
#include "../utf8proc/utf8proc.h"
#include "utf8proc.h"
#include "Yap.h"
/// allocate a temporary text block

114
H/Yatom.h
View File

@ -1,19 +1,19 @@
/*************************************************************************
* *
* YAP Prolog %W% %G%
* *
* Yap Prolog was developed at NCCUP - Universidade do Porto *
* *
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
* *
**************************************************************************
* *
* File: YAtom.h.m4 *
* Last rev: 19/2/88 *
* mods: *
* comments: atom properties header file for YAP *
* *
*************************************************************************/
* *
* YAP Prolog %W% %G%
* *
* Yap Prolog was developed at NCCUP - Universidade do Porto *
* *
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
* *
**************************************************************************
* *
* File: YAtom.h.m4 *
* Last rev: 19/2/88 *
* mods: *
* comments: atom properties header file for YAP *
* *
*************************************************************************/
/* This code can only be defined *after* including Regs.h!!! */
@ -106,25 +106,25 @@ INLINE_ONLY inline EXTERN Prop AbsFunctorProp(FunctorEntry *p) {
#endif
INLINE_ONLY inline EXTERN arity_t ArityOfFunctor(Functor);
INLINE_ONLY inline EXTERN arity_t ArityOfFunctor(Functor);
INLINE_ONLY inline EXTERN arity_t ArityOfFunctor(Functor Fun) {
INLINE_ONLY inline EXTERN arity_t ArityOfFunctor(Functor Fun) {
return (arity_t)(((FunctorEntry *)Fun)->ArityOfFE);
}
}
INLINE_ONLY inline EXTERN Atom NameOfFunctor(Functor);
INLINE_ONLY inline EXTERN Atom NameOfFunctor(Functor);
INLINE_ONLY inline EXTERN Atom NameOfFunctor(Functor Fun) {
INLINE_ONLY inline EXTERN Atom NameOfFunctor(Functor Fun) {
return (Atom)(((FunctorEntry *)Fun)->NameOfFE);
}
}
INLINE_ONLY inline EXTERN PropFlags IsFunctorProperty(int);
INLINE_ONLY inline EXTERN PropFlags IsFunctorProperty(int);
INLINE_ONLY inline EXTERN PropFlags IsFunctorProperty(int flags) {
INLINE_ONLY inline EXTERN PropFlags IsFunctorProperty(int flags) {
return (PropFlags)((flags == FunctorProperty));
}
}
/* summary of property codes used
/* summary of property codes used
00 00 predicate entry
80 00 db property
@ -142,10 +142,10 @@ INLINE_ONLY inline EXTERN Prop AbsFunctorProp(FunctorEntry *p) {
ff fd global property
ff fe flag property
ff ff op property
*/
*/
/* Global Variable property */
typedef struct global_entry {
/* Global Variable property */
typedef struct global_entry {
Prop NextOfPE; /* used to chain properties */
PropFlags KindOfPE; /* kind of property */
#if defined(YAPOR) || defined(THREADS)
@ -158,21 +158,21 @@ INLINE_ONLY inline EXTERN Prop AbsFunctorProp(FunctorEntry *p) {
struct global_entry *NextGE; /* linked list of global entries */
Term global; /* index in module table */
Term AttChain; /* index in module table */
} GlobalEntry;
} GlobalEntry;
#if USE_OFFSETS_IN_PROPS
INLINE_ONLY inline EXTERN GlobalEntry *RepGlobalProp(Prop p);
INLINE_ONLY inline EXTERN GlobalEntry *RepGlobalProp(Prop p);
INLINE_ONLY inline EXTERN GlobalEntry *RepGlobalProp(Prop p) {
INLINE_ONLY inline EXTERN GlobalEntry *RepGlobalProp(Prop p) {
return (GlobalEntry *)(AtomBase + Unsigned(p));
}
}
INLINE_ONLY inline EXTERN Prop AbsGlobalProp(GlobalEntry *p);
INLINE_ONLY inline EXTERN Prop AbsGlobalProp(GlobalEntry *p);
INLINE_ONLY inline EXTERN Prop AbsGlobalProp(GlobalEntry *p) {
INLINE_ONLY inline EXTERN Prop AbsGlobalProp(GlobalEntry *p) {
return (Prop)(Addr(p) - AtomBase);
}
}
#else
@ -443,28 +443,40 @@ don't forget to also add in qly.h
*/
/// Different predicate flags
typedef uint64_t pred_flags_t;
#define UndefPredFlag ((pred_flags_t)0x4000000000) //< Predicate not explicitely defined.
#define UndefPredFlag \
((pred_flags_t)0x4000000000) //< Predicate not explicitely defined.
#define ProfiledPredFlag ((pred_flags_t)0x2000000000) //< pred is being profiled
#define DiscontiguousPredFlag ((pred_flags_t)0x1000000000) //< predicates whose clauses may be all-over the place..
#define SysExportPredFlag ((pred_flags_t)0x800000000) //< reuse export list to prolog module.
#define NoTracePredFlag ((pred_flags_t)0x400000000) //< cannot trace this predicate
#define DiscontiguousPredFlag \
((pred_flags_t)0x1000000000) //< predicates whose clauses may be all-over the
// place..
#define SysExportPredFlag \
((pred_flags_t)0x800000000) //< reuse export list to prolog module.
#define NoTracePredFlag \
((pred_flags_t)0x400000000) //< cannot trace this predicate
#define NoSpyPredFlag ((pred_flags_t)0x200000000) //< cannot spy this predicate
#define QuasiQuotationPredFlag ((pred_flags_t)0x100000000) //< SWI-like quasi quotations
#define MegaClausePredFlag ((pred_flags_t)0x80000000) //< predicate is implemented as a mega-clause
#define QuasiQuotationPredFlag \
((pred_flags_t)0x100000000) //< SWI-like quasi quotations
#define MegaClausePredFlag \
((pred_flags_t)0x80000000) //< predicate is implemented as a mega-clause
#define ThreadLocalPredFlag ((pred_flags_t)0x40000000) //< local to a thread
#define MultiFileFlag ((pred_flags_t)0x20000000) //< is multi-file
#define UserCPredFlag ((pred_flags_t)0x10000000) //< CPred defined by the user
#define LogUpdatePredFlag ((pred_flags_t)0x08000000) //< dynamic predicate with log. upd. sem.
#define LogUpdatePredFlag \
((pred_flags_t)0x08000000) //< dynamic predicate with log. upd. sem.
#define InUsePredFlag ((pred_flags_t)0x04000000) //< count calls to pred
#define CountPredFlag ((pred_flags_t)0x02000000) //< count calls to pred
#define HiddenPredFlag ((pred_flags_t)0x01000000) //< invisible predicate
#define CArgsPredFlag ((pred_flags_t)0x00800000) //< SWI-like C-interface pred.
#define SourcePredFlag ((pred_flags_t)0x00400000) //< static predicate with source declaration
#define MetaPredFlag ((pred_flags_t)0x00200000) //< predicate subject to a meta declaration
#define SyncPredFlag ((pred_flags_t)0x00100000) //< has to synch before it can execute
#define SourcePredFlag \
((pred_flags_t)0x00400000) //< static predicate with source declaration
#define MetaPredFlag \
((pred_flags_t)0x00200000) //< predicate subject to a meta declaration
#define SyncPredFlag \
((pred_flags_t)0x00100000) //< has to synch before it can execute
#define NumberDBPredFlag ((pred_flags_t)0x00080000) //< entry for an atom key
#define AtomDBPredFlag ((pred_flags_t)0x00040000) //< entry for a number key
// #define GoalExPredFlag ((pred_flags_t)0x00020000) /// predicate that is called by goal_expand
// #define GoalExPredFlag ((pred_flags_t)0x00020000) /// predicate that is
// called by goal_expand
#define TestPredFlag ((pred_flags_t)0x00010000) //< is a test (optim. comit)
#define AsmPredFlag ((pred_flags_t)0x00008000) //< inline
#define StandardPredFlag ((pred_flags_t)0x00004000) //< system predicate
@ -476,7 +488,8 @@ typedef uint64_t pred_flags_t;
#define SpiedPredFlag ((pred_flags_t)0x00000100) //< is a spy point
#define BinaryPredFlag ((pred_flags_t)0x00000080) //< test predicate
#define TabledPredFlag ((pred_flags_t)0x00000040) //< is tabled
#define SequentialPredFlag ((pred_flags_t)0x00000020) //< may not create parallel choice points!
#define SequentialPredFlag \
((pred_flags_t)0x00000020) //< may not create parallel choice points!
#define BackCPredFlag ((pred_flags_t)0x00000008) //< Myddas Imported pred
#define ModuleTransparentPredFlag ((pred_flags_t)0x00000004)
#define SWIEnvPredFlag ((pred_flags_t)0x00000002) //< new SWI interface
@ -488,7 +501,7 @@ typedef uint64_t pred_flags_t;
(AsmPredFlag | SWIEnvPredFlag | CPredFlag | BinaryPredFlag | UDIPredFlag | \
CArgsPredFlag | UserCPredFlag | SafePredFlag | BackCPredFlag)
#define LivePredFlags \
(LogUpdatePredFlag|MultiFileFlag|TabledPredFlag|ForeignPredFlags)
(LogUpdatePredFlag | MultiFileFlag | TabledPredFlag | ForeignPredFlags)
#define StatePredFlags \
(InUsePredFlag | CountPredFlag | SpiedPredFlag | IndexedPredFlag)
@ -1178,7 +1191,7 @@ INLINE_ONLY inline EXTERN bool IsArrayProperty(PropFlags flags) {
typedef struct YAP_blob_prop_entry {
Prop NextOfPE; /* used to chain properties */
PropFlags KindOfPE; /* kind of property */
struct YAP_blob_t *blob_type; /* type of blob */
struct _PL_blob_t *blob_type; /* type of blob */
} YAP_BlobPropEntry;
#if USE_OFFSETS_IN_PROPS
@ -1501,7 +1514,8 @@ INLINE_ONLY EXTERN inline Prop PredPropByAtomAndMod(Atom at, Term cur_mod)
p0 = ae->PropsOfAE;
while (p0) {
PredEntry *pe = RepPredProp(p0);
if (pe->KindOfPE == PEProp && (pe->ModuleOfPred == cur_mod || pe->ModuleOfPred == 0)) {
if (pe->KindOfPE == PEProp &&
(pe->ModuleOfPred == cur_mod || pe->ModuleOfPred == 0)) {
#ifdef THREADS
/* Thread Local Predicates */
if (pe->PredFlags & ThreadLocalPredFlag) {

View File

@ -1,81 +0,0 @@
//
// blobs.h
// yap
//
// Created by VITOR SANTOS COSTA on 09/05/15.
// Copyright (c) 2015 VITOR SANTOS COSTA. All rights reserved.
//
// based on the SWI Blob implementation, an extension of atoms for SWI-Prolog
#ifndef BLOBS_H
#define BLOBS_H
#if !defined(X_API) && !defined(SWIGYAP)
#if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(PL_KERNEL)
#define X_API __declspec(dllexport)
#else
#define X_API
#endif
#endif
/*******************************
* BLOBS *
*******************************/
#define YAP_BLOB_MAGIC_B 0x75293a00 /* Magic to validate a blob-type */
#define PL_BLOB_VERSION (YAP_BLOB_MAGIC_B|PL_BLOB_VERSION)
#define PL_BLOB_UNIQUE 0x01 /* Blob content is unique */
#define PL_BLOB_TEXT 0x02 /* blob contains text */
#define PL_BLOB_NOCOPY 0x04 /* do not copy the data */
#define PL_BLOB_WCHAR 0x08 /* wide character string */
typedef struct YAP_blob_t
{ uintptr_t magic; /* YAP_BLOB_MAGIC */
uintptr_t flags; /* YAP_BLOB_* */
char * name; /* name of the type */
int (*release)(Atom a);
int (*compare)(Atom a, Atom b);
#ifdef SIO_MAGIC
int (*write)(FILE *s, Atom a, int flags);
#else
int (*write)(void *s, Atom a, int flags);
#endif
void (*acquire)(Atom a);
#ifdef SIO_MAGIC
int (*save)(Atom a, FILE *s);
Atom (*load)(FILE *s);
#else
int (*save)(Atom a, void*);
Atom (*load)(void *s);
#endif
/* private */
void * reserved[10]; /* for future extension */
int registered; /* Already registered? */
int rank; /* Rank for ordering atoms */
struct YAP_blob_t * next; /* next in registered type-chain */
Atom atom_name; /* Name as atom */
} blob_type_t;
int Yap_write_blob(AtomEntry *ref, FILE *stream);
char * Yap_blob_to_string(AtomEntry *ref, const char *s, size_t sz);
X_API bool YAP_is_blob(YAP_Term t, blob_type_t **type);
X_API bool YAP_unify_blob(YAP_Term *t, void *blob, size_t len,
blob_type_t *type);
X_API bool YAP_put_blob(YAP_Term *t, void *blob, size_t len,
blob_type_t *type);
X_API bool YAP_get_blob(YAP_Term t, void **blob, size_t *len,
blob_type_t **type);
X_API void* YAP_blob_data(Atom a,
size_t *len,
struct YAP_blob_t **type);
X_API void YAP_register_blob_type(blob_type_t *type);
X_API blob_type_t* YAP_find_blob_type(const char* name);
//YAP_blob_type_t* YAP_find_blob_type(Atom at);
X_API bool YAP_unregister_blob_type(blob_type_t *type);
#endif

View File

@ -25,7 +25,6 @@ extern "C" {
}
#endif
#if USE_GMP
#if defined(__cplusplus)
#include <gmpxx.h>
@ -41,11 +40,11 @@ extern "C" {
#include "YapInterface.h"
#else
#if _YAP_NOT_INSTALLED_
#include <config.h>
#include <YapInterface.h>
#include <config.h>
#else
#include <Yap/pl/config.h>
#include <Yap/YapInterface.h>
#include <Yap/pl/config.h>
#endif
#endif
#include <stdarg.h>
@ -76,13 +75,9 @@ typedef int _Bool;
#endif
#endif
#include "pl-types.h"
/*******************************
/*******************************
* EXPORT *
*******************************/
@ -95,7 +90,7 @@ stuff.
#define PL_EXPORT_DATA(type) extern X_API type
#define install_t O_API void
/*******************************
/*******************************
* GCC ATTRIBUTES *
*******************************/
@ -105,10 +100,9 @@ stuff.
#define WUNUSED
#endif
#include "pl-types.h"
typedef struct _PL_extension
{ const char *predicate_name; /* Name of the predicate */
typedef struct _PL_extension {
const char *predicate_name; /* Name of the predicate */
short arity; /* Arity of the predicate */
pl_function_t function; /* Implementing functions */
short flags; /* Or of PL_FA_... */
@ -116,20 +110,19 @@ typedef struct _PL_extension
#define PL_THREAD_NO_DEBUG 0x01 /* Start thread in nodebug mode */
typedef struct
{ unsigned long local_size; /* Stack sizes */
typedef struct {
unsigned long local_size; /* Stack sizes */
unsigned long global_size;
unsigned long trail_size;
unsigned long argument_size;
char * alias; /* alias name */
char *alias; /* alias name */
int (*cancel)(int id); /* cancel function */
intptr_t flags; /* PL_THREAD_* flags */
void * reserved[5]; /* reserved for extensions */
void *reserved[5]; /* reserved for extensions */
} PL_thread_attr_t;
typedef void *PL_engine_t;
#define PL_FA_NOTRACE (0x01) /* foreign cannot be traced */
#define PL_FA_TRANSPARENT (0x02) /* foreign is module transparent */
#define PL_FA_NONDETERMINISTIC (0x04) /* foreign is non-deterministic */
@ -145,7 +138,7 @@ typedef void *PL_engine_t;
#define PL_STRING (5) /* const char * */
#define PL_TERM (6)
/* PL_unify_term() */
/* PL_unify_term() */
#define PL_FUNCTOR (10) /* functor_t, arg ... */
#define PL_LIST (11) /* length, arg ... */
#define PL_CHARS (12) /* const char * */
@ -185,24 +178,24 @@ typedef void *PL_engine_t;
/* Or'ed flags for PL_set_prolog_flag() */
/* MUST fit in a short int! */
#define FF_READONLY 0x1000 /* Read-only prolog flag */
#define FF_KEEP 0x2000 /* keep prolog flag if already se
#define FF_KEEP \
0x2000 /* keep prolog flag if already se \
t */
#define FF_NOCREATE 0x4000 /* Fail if flag is non-existent */
#define FF_MASK 0xf000
#define CVT_ATOM 0x0001
#define CVT_STRING 0x0002
#define CVT_LIST 0x0004
#define CVT_INTEGER 0x0008
#define CVT_FLOAT 0x0010
#define CVT_VARIABLE 0x0020
#define CVT_NUMBER (CVT_INTEGER|CVT_FLOAT)
#define CVT_ATOMIC (CVT_NUMBER|CVT_ATOM|CVT_STRING)
#define CVT_NUMBER (CVT_INTEGER | CVT_FLOAT)
#define CVT_ATOMIC (CVT_NUMBER | CVT_ATOM | CVT_STRING)
#define CVT_WRITE 0x0040 /* as of version 3.2.10 */
#define CVT_WRITE_CANONICAL 0x0080 /* as of version 3.2.10 */
#define CVT_WRITEQ 0x00C0
#define CVT_ALL (CVT_ATOMIC|CVT_LIST)
#define CVT_ALL (CVT_ATOMIC | CVT_LIST)
#define CVT_MASK 0x00ff
#define CVT_EXCEPTION 0x10000
@ -231,15 +224,14 @@ t */
#define PL_ACTION_GUIAPP 10 /* Win32: set when this is a gui */
#define PL_ACTION_ATTACH_CONSOLE 11 /* MT: Attach a console */
typedef enum
{ FRG_FIRST_CALL = 0, /* Initial call */
typedef enum {
FRG_FIRST_CALL = 0, /* Initial call */
FRG_CUTTED = 1, /* Context was cutted */
FRG_REDO = 2 /* Normal redo */
} frg_code;
struct foreign_context
{ uintptr_t context; /* context value */
struct foreign_context {
uintptr_t context; /* context value */
frg_code control; /* FRG_* action */
struct PL_local_data *engine; /* invoking engine */
};
@ -247,29 +239,28 @@ struct foreign_context
typedef struct foreign_context *control_t;
#define PRED_IMPL(name, arity, fname, flags) \
foreign_t \
pl_ ## fname ## arity ## _va(term_t PL__t0, int PL__ac, control_t PL__ctx)
foreign_t pl_##fname##arity##_va(term_t PL__t0, int PL__ac, control_t PL__ctx)
#define CTX_CNTRL ForeignControl(PL__ctx)
#define CTX_PTR ForeignContextPtr(PL__ctx)
#define CTX_INT ForeignContextInt(PL__ctx)
#define CTX_ARITY PL__ac
#define BeginPredDefs(id) \
const PL_extension PL_predicates_from_ ## id[] = {
#define BeginPredDefs(id) const PL_extension PL_predicates_from_##id[] = {
#define PRED_DEF(name, arity, fname, flags) \
{ name, arity, pl_ ## fname ## arity ## _va, (flags)|PL_FA_VARARGS },
{name, arity, pl_##fname##arity##_va, (flags) | PL_FA_VARARGS},
#define EndPredDefs \
{ NULL, 0, NULL, 0 } \
};
} \
;
#define FRG_REDO_MASK 0x00000003L
#define FRG_REDO_BITS 2
#define REDO_INT 0x02 /* Returned an integer */
#define REDO_PTR 0x03 /* returned a pointer */
#define ForeignRedoIntVal(v) (((uintptr_t)(v)<<FRG_REDO_BITS)|REDO_INT)
#define ForeignRedoPtrVal(v) (((uintptr_t)(v))|REDO_PTR)
#define ForeignRedoIntVal(v) (((uintptr_t)(v) << FRG_REDO_BITS) | REDO_INT)
#define ForeignRedoPtrVal(v) (((uintptr_t)(v)) | REDO_PTR)
#define ForeignRedoInt(v) return ForeignRedoIntVal(v)
#define ForeignRedoPtr(v) return ForeignRedoPtrVal(v)
@ -279,8 +270,10 @@ typedef struct foreign_context *control_t;
#define ForeignContextPtr(h) ((void *)(h)->context)
#define ForeignEngine(h) ((h)->engine)
#define FRG(n, a, f, flags) { n, a, f, flags }
#define LFRG(n, a, f, flags) { n, a, f, flags }
#define FRG(n, a, f, flags) \
{ n, a, f, flags }
#define LFRG(n, a, f, flags) \
{ n, a, f, flags }
/* end from pl-itf.h */
@ -304,7 +297,7 @@ UNICODE file functions.
#ifdef SIO_MAGIC /* defined from <SWI-Stream.h> */
/*******************************
/*******************************
* STREAM SUPPORT *
*******************************/
@ -313,12 +306,11 @@ UNICODE file functions.
PL_EXPORT(int) PL_unify_stream(term_t t, IOSTREAM *s);
PL_EXPORT(int) PL_get_stream_handle(term_t t, IOSTREAM **s);
PL_EXPORT(int) PL_release_stream(IOSTREAM *s);
PL_EXPORT(IOSTREAM *) PL_open_resource(module_t m,
const char *name,
const char *rc_class,
PL_EXPORT(IOSTREAM *)
PL_open_resource(module_t m, const char *name, const char *rc_class,
const char *mode);
PL_EXPORT(IOSTREAM *)*_PL_streams(void); /* base of streams */
PL_EXPORT(IOSTREAM *) * _PL_streams(void); /* base of streams */
#ifndef PL_KERNEL
#define Suser_input (_PL_streams()[0])
#define Suser_output (_PL_streams()[1])
@ -337,9 +329,7 @@ PL_EXPORT(IOSTREAM *)*_PL_streams(void); /* base of streams */
#define PL_WRT_ATTVAR_WRITE 0x100 /* Write as Var{Attributes} */
#define PL_WRT_ATTVAR_PORTRAY 0x200 /* Use Module:portray_attrs/2 */
#define PL_WRT_ATTVAR_MASK \
(PL_WRT_ATTVAR_IGNORE | \
PL_WRT_ATTVAR_DOTS | \
PL_WRT_ATTVAR_WRITE | \
(PL_WRT_ATTVAR_IGNORE | PL_WRT_ATTVAR_DOTS | PL_WRT_ATTVAR_WRITE | \
PL_WRT_ATTVAR_PORTRAY)
#define PL_WRT_BLOB_PORTRAY 0x400 /* Use portray to emit non-text blobs */
#define PL_WRT_NO_CYCLES 0x800 /* Never emit @(Template,Subst) */
@ -347,12 +337,10 @@ PL_EXPORT(IOSTREAM *)*_PL_streams(void); /* base of streams */
#define PL_WRT_NEWLINE 0x2000 /* Add a newline */
#define PL_WRT_VARNAMES 0x4000 /* Internal: variable_names(List) */
PL_EXPORT(int) PL_write_term(IOSTREAM *s,
term_t term,
int precedence,
int flags);
PL_EXPORT(int)
PL_write_term(IOSTREAM *s, term_t term, int precedence, int flags);
/* PL_ttymode() results */
/* PL_ttymode() results */
#define PL_NOTTY 0 /* -tty in effect */
#define PL_RAWTTY 1 /* get_single_char/1 */
#define PL_COOKEDTTY 2 /* normal input */
@ -361,11 +349,9 @@ PL_EXPORT(int) PL_ttymode(IOSTREAM *s);
#endif /*SIO_MAGIC*/
PL_EXPORT(int) PL_chars_to_term(const char *chars,
term_t term);
PL_EXPORT(int) PL_chars_to_term(const char *chars, term_t term);
/*******************************
/*******************************
* CALL-BACK *
*******************************/
@ -383,197 +369,198 @@ PL_EXPORT(int) PL_chars_to_term(const char *chars,
#define PL_fail return FALSE /* fail */
#define PL_succeed return TRUE /* success */
PL_EXPORT( PL_agc_hook_t ) PL_agc_hook(PL_agc_hook_t);
PL_EXPORT( char* ) PL_atom_chars(atom_t);
PL_EXPORT( char* ) PL_atom_nchars(atom_t, size_t *);
PL_EXPORT( term_t ) PL_copy_term_ref(term_t);
PL_EXPORT( term_t ) PL_new_term_ref(void);
PL_EXPORT( term_t ) PL_new_term_refs(int);
PL_EXPORT( void ) PL_reset_term_refs(term_t);
PL_EXPORT(PL_agc_hook_t) PL_agc_hook(PL_agc_hook_t);
PL_EXPORT(char *) PL_atom_chars(atom_t);
PL_EXPORT(char *) PL_atom_nchars(atom_t, size_t *);
PL_EXPORT(term_t) PL_copy_term_ref(term_t);
PL_EXPORT(term_t) PL_new_term_ref(void);
PL_EXPORT(term_t) PL_new_term_refs(int);
PL_EXPORT(void) PL_reset_term_refs(term_t);
/* begin PL_get_* functions =============================*/
PL_EXPORT( int ) PL_get_arg(int, term_t, term_t);
PL_EXPORT( int ) PL_get_atom(term_t, atom_t *);
PL_EXPORT( int ) PL_get_atom_chars(term_t, char **);
PL_EXPORT( int ) PL_get_atom_nchars(term_t, size_t *, char **);
PL_EXPORT( int ) PL_get_bool(term_t, int *);
PL_EXPORT( int ) PL_get_chars(term_t, char **, unsigned);
PL_EXPORT( int ) PL_get_nchars(term_t, size_t *, char **, unsigned);
PL_EXPORT( int ) PL_get_wchars(term_t, size_t *, wchar_t **, unsigned);
PL_EXPORT( int ) PL_get_functor(term_t, functor_t *);
PL_EXPORT( int ) PL_get_compound_name_arity(term_t t, atom_t *ap, int *ip);
PL_EXPORT( int ) PL_get_float(term_t, double *);
PL_EXPORT( int ) PL_get_head(term_t, term_t);
PL_EXPORT( int ) PL_get_int64(term_t, int64_t *);
PL_EXPORT( int ) PL_get_integer(term_t, int *);
PL_EXPORT( int ) PL_get_list(term_t, term_t, term_t);
PL_EXPORT( int ) PL_get_long(term_t, long *);
PL_EXPORT( int ) PL_get_list_chars(term_t, char **, unsigned);
PL_EXPORT( int ) PL_get_list_nchars(term_t, size_t *, char **, unsigned);
PL_EXPORT( int ) PL_get_module(term_t, module_t *);
PL_EXPORT( module_t ) PL_context(void);
PL_EXPORT( int ) PL_strip_module(term_t, module_t *, term_t);
PL_EXPORT( atom_t ) PL_module_name(module_t);
PL_EXPORT( module_t ) PL_new_module(atom_t);
PL_EXPORT( int ) PL_get_name_arity(term_t, atom_t *, int *);
PL_EXPORT( int ) PL_get_nil(term_t);
PL_EXPORT( int ) PL_get_pointer(term_t, void **);
PL_EXPORT( int ) PL_get_intptr(term_t, intptr_t *);
PL_EXPORT( int ) PL_get_uintptr(term_t, uintptr_t *);
PL_EXPORT( int ) PL_get_tail(term_t, term_t);
PL_EXPORT(int) PL_get_arg(int, term_t, term_t);
PL_EXPORT(int) PL_get_atom(term_t, atom_t *);
PL_EXPORT(int) PL_get_atom_chars(term_t, char **);
PL_EXPORT(int) PL_get_atom_nchars(term_t, size_t *, char **);
PL_EXPORT(int) PL_get_bool(term_t, int *);
PL_EXPORT(int) PL_get_chars(term_t, char **, unsigned);
PL_EXPORT(int) PL_get_nchars(term_t, size_t *, char **, unsigned);
PL_EXPORT(int) PL_get_wchars(term_t, size_t *, wchar_t **, unsigned);
PL_EXPORT(int) PL_get_functor(term_t, functor_t *);
PL_EXPORT(int) PL_get_compound_name_arity(term_t t, atom_t *ap, int *ip);
PL_EXPORT(int) PL_get_float(term_t, double *);
PL_EXPORT(int) PL_get_head(term_t, term_t);
PL_EXPORT(int) PL_get_int64(term_t, int64_t *);
PL_EXPORT(int) PL_get_integer(term_t, int *);
PL_EXPORT(int) PL_get_list(term_t, term_t, term_t);
PL_EXPORT(int) PL_get_long(term_t, long *);
PL_EXPORT(int) PL_get_list_chars(term_t, char **, unsigned);
PL_EXPORT(int) PL_get_list_nchars(term_t, size_t *, char **, unsigned);
PL_EXPORT(int) PL_get_module(term_t, module_t *);
PL_EXPORT(module_t) PL_context(void);
PL_EXPORT(int) PL_strip_module(term_t, module_t *, term_t);
PL_EXPORT(atom_t) PL_module_name(module_t);
PL_EXPORT(module_t) PL_new_module(atom_t);
PL_EXPORT(int) PL_get_name_arity(term_t, atom_t *, int *);
PL_EXPORT(int) PL_get_nil(term_t);
PL_EXPORT(int) PL_get_pointer(term_t, void **);
PL_EXPORT(int) PL_get_intptr(term_t, intptr_t *);
PL_EXPORT(int) PL_get_uintptr(term_t, uintptr_t *);
PL_EXPORT(int) PL_get_tail(term_t, term_t);
/* end PL_get_* functions =============================*/
/* begin PL_new_* functions =============================*/
PL_EXPORT( atom_t ) PL_new_atom(const char *);
PL_EXPORT( atom_t ) PL_new_atom_nchars(size_t, const char *);
PL_EXPORT( atom_t ) PL_new_atom_wchars(size_t, const pl_wchar_t *);
PL_EXPORT( char *) PL_atom_nchars(atom_t, size_t *);
PL_EXPORT( pl_wchar_t *) PL_atom_wchars(atom_t, size_t *);
PL_EXPORT( functor_t ) PL_new_functor(atom_t, int);
PL_EXPORT( atom_t ) PL_functor_name(functor_t);
PL_EXPORT( int ) PL_functor_arity(functor_t);
PL_EXPORT(atom_t) PL_new_atom(const char *);
PL_EXPORT(atom_t) PL_new_atom_nchars(size_t, const char *);
PL_EXPORT(atom_t) PL_new_atom_wchars(size_t, const pl_wchar_t *);
PL_EXPORT(char *) PL_atom_nchars(atom_t, size_t *);
PL_EXPORT(pl_wchar_t *) PL_atom_wchars(atom_t, size_t *);
PL_EXPORT(functor_t) PL_new_functor(atom_t, int);
PL_EXPORT(atom_t) PL_functor_name(functor_t);
PL_EXPORT(int) PL_functor_arity(functor_t);
/* end PL_new_* functions =============================*/
/* begin PL_put_* functions =============================*/
PL_EXPORT( int ) PL_cons_functor(term_t, functor_t,...);
PL_EXPORT( int ) PL_cons_functor_v(term_t, functor_t,term_t);
PL_EXPORT( int ) PL_cons_list(term_t, term_t, term_t);
PL_EXPORT( int ) PL_put_atom(term_t, atom_t);
PL_EXPORT( int ) PL_put_atom_chars(term_t, const char *);
PL_EXPORT( int ) PL_put_atom_nchars(term_t, size_t ,const char *);
PL_EXPORT( int ) PL_put_boolean(term_t, uintptr_t);
PL_EXPORT( int ) PL_put_float(term_t, double);
PL_EXPORT( int ) PL_put_functor(term_t, functor_t t);
PL_EXPORT( int ) PL_put_int64(term_t, int64_t);
PL_EXPORT( int ) PL_put_integer(term_t, long);
PL_EXPORT( int ) PL_put_list(term_t);
PL_EXPORT( int ) PL_put_list_chars(term_t, const char *);
PL_EXPORT( void ) PL_put_nil(term_t);
PL_EXPORT( int ) PL_put_pointer(term_t, void *);
PL_EXPORT( int ) PL_put_string_chars(term_t, const char *);
PL_EXPORT( int ) PL_put_string_nchars(term_t, size_t, const char *);
PL_EXPORT( int ) PL_put_term(term_t, term_t);
PL_EXPORT( int ) PL_put_variable(term_t);
PL_EXPORT( int ) PL_put_intptr(term_t t, intptr_t n);
PL_EXPORT( int ) PL_put_uintptr(term_t t, uintptr_t n);
PL_EXPORT( int ) PL_compare(term_t, term_t);
PL_EXPORT(int) PL_cons_functor(term_t, functor_t, ...);
PL_EXPORT(int) PL_cons_functor_v(term_t, functor_t, term_t);
PL_EXPORT(int) PL_cons_list(term_t, term_t, term_t);
PL_EXPORT(int) PL_put_atom(term_t, atom_t);
PL_EXPORT(int) PL_put_atom_chars(term_t, const char *);
PL_EXPORT(int) PL_put_atom_nchars(term_t, size_t, const char *);
PL_EXPORT(int) PL_put_boolean(term_t, uintptr_t);
PL_EXPORT(int) PL_put_float(term_t, double);
PL_EXPORT(int) PL_put_functor(term_t, functor_t t);
PL_EXPORT(int) PL_put_int64(term_t, int64_t);
PL_EXPORT(int) PL_put_integer(term_t, long);
PL_EXPORT(int) PL_put_list(term_t);
PL_EXPORT(int) PL_put_list_chars(term_t, const char *);
PL_EXPORT(void) PL_put_nil(term_t);
PL_EXPORT(int) PL_put_pointer(term_t, void *);
PL_EXPORT(int) PL_put_string_chars(term_t, const char *);
PL_EXPORT(int) PL_put_string_nchars(term_t, size_t, const char *);
PL_EXPORT(int) PL_put_term(term_t, term_t);
PL_EXPORT(int) PL_put_variable(term_t);
PL_EXPORT(int) PL_put_intptr(term_t t, intptr_t n);
PL_EXPORT(int) PL_put_uintptr(term_t t, uintptr_t n);
PL_EXPORT(int) PL_compare(term_t, term_t);
/* end PL_put_* functions =============================*/
/* begin PL_unify_* functions =============================*/
PL_EXPORT( int ) PL_unify(term_t, term_t);
PL_EXPORT( int ) PL_unify_atom(term_t, atom_t);
PL_EXPORT( int ) PL_unify_arg(int, term_t, term_t);
PL_EXPORT( int ) PL_unify_atom_chars(term_t, const char *);
PL_EXPORT( int ) PL_unify_atom_nchars(term_t, size_t len, const char *);
PL_EXPORT( int ) PL_unify_float(term_t, double);
PL_EXPORT( int ) PL_unify_functor(term_t, functor_t);
PL_EXPORT( int ) PL_unify_int64(term_t, int64_t);
PL_EXPORT( int ) PL_unify_intptr(term_t, intptr_t);
PL_EXPORT( int ) PL_unify_uintptr(term_t, uintptr_t);
PL_EXPORT( int ) PL_unify_integer(term_t, long);
PL_EXPORT( int ) PL_unify_list(term_t, term_t, term_t);
PL_EXPORT( int ) PL_unify_list_chars(term_t, const char *);
PL_EXPORT( int ) PL_unify_list_ncodes(term_t, size_t, const char *);
PL_EXPORT( int ) PL_unify_nil(term_t);
PL_EXPORT( int ) PL_unify_pointer(term_t, void *);
PL_EXPORT( int ) PL_unify_bool(term_t, int);
PL_EXPORT( int ) PL_unify_string_chars(term_t, const char *);
PL_EXPORT( int ) PL_unify_string_nchars(term_t, size_t, const char *);
PL_EXPORT( int ) PL_unify_term(term_t,...);
PL_EXPORT( int ) PL_unify_chars(term_t, int, size_t, const char *);
PL_EXPORT( int ) PL_unify_chars_diff(term_t, term_t, int, size_t, const char *);
/*******************************
PL_EXPORT(int) PL_unify(term_t, term_t);
PL_EXPORT(int) PL_unify_atom(term_t, atom_t);
PL_EXPORT(int) PL_unify_arg(int, term_t, term_t);
PL_EXPORT(int) PL_unify_atom_chars(term_t, const char *);
PL_EXPORT(int) PL_unify_atom_nchars(term_t, size_t len, const char *);
PL_EXPORT(int) PL_unify_float(term_t, double);
PL_EXPORT(int) PL_unify_functor(term_t, functor_t);
PL_EXPORT(int) PL_unify_int64(term_t, int64_t);
PL_EXPORT(int) PL_unify_intptr(term_t, intptr_t);
PL_EXPORT(int) PL_unify_uintptr(term_t, uintptr_t);
PL_EXPORT(int) PL_unify_integer(term_t, long);
PL_EXPORT(int) PL_unify_list(term_t, term_t, term_t);
PL_EXPORT(int) PL_unify_list_chars(term_t, const char *);
PL_EXPORT(int) PL_unify_list_ncodes(term_t, size_t, const char *);
PL_EXPORT(int) PL_unify_nil(term_t);
PL_EXPORT(int) PL_unify_pointer(term_t, void *);
PL_EXPORT(int) PL_unify_bool(term_t, int);
PL_EXPORT(int) PL_unify_string_chars(term_t, const char *);
PL_EXPORT(int) PL_unify_string_nchars(term_t, size_t, const char *);
PL_EXPORT(int) PL_unify_term(term_t, ...);
PL_EXPORT(int) PL_unify_chars(term_t, int, size_t, const char *);
PL_EXPORT(int) PL_unify_chars_diff(term_t, term_t, int, size_t, const char *);
/*******************************
* LISTS *
*******************************/
PL_EXPORT(int) PL_skip_list(term_t list, term_t tail, size_t *len);
PL_EXPORT( int ) PL_unify_wchars(term_t, int, size_t, const pl_wchar_t *);
PL_EXPORT( int ) PL_unify_wchars_diff(term_t, term_t, int, size_t, const pl_wchar_t *);
PL_EXPORT( int ) PL_chars_to_term(const char *,term_t);
PL_EXPORT(int) PL_unify_wchars(term_t, int, size_t, const pl_wchar_t *);
PL_EXPORT(int)
PL_unify_wchars_diff(term_t, term_t, int, size_t, const pl_wchar_t *);
PL_EXPORT(int) PL_chars_to_term(const char *, term_t);
/* begin PL_is_* functions =============================*/
PL_EXPORT( int ) PL_is_atom(term_t);
PL_EXPORT( int ) PL_is_atomic(term_t);
PL_EXPORT( int ) PL_is_compound(term_t);
PL_EXPORT( int ) PL_is_float(term_t);
PL_EXPORT( int ) PL_is_functor(term_t, functor_t);
PL_EXPORT( int ) PL_is_ground(term_t);
PL_EXPORT( int ) PL_is_callable(term_t);
PL_EXPORT( int ) PL_is_integer(term_t);
PL_EXPORT( int ) PL_is_pair(term_t);
PL_EXPORT( int ) PL_is_list(term_t);
PL_EXPORT( int ) PL_is_pair(term_t);
PL_EXPORT( int ) PL_is_number(term_t);
PL_EXPORT( int ) PL_is_string(term_t);
PL_EXPORT( int ) PL_is_variable(term_t);
PL_EXPORT( int ) PL_term_type(term_t);
PL_EXPORT( int ) PL_is_inf(term_t);
PL_EXPORT( int ) PL_is_acyclic(term_t t);
PL_EXPORT(int) PL_is_atom(term_t);
PL_EXPORT(int) PL_is_atomic(term_t);
PL_EXPORT(int) PL_is_compound(term_t);
PL_EXPORT(int) PL_is_float(term_t);
PL_EXPORT(int) PL_is_functor(term_t, functor_t);
PL_EXPORT(int) PL_is_ground(term_t);
PL_EXPORT(int) PL_is_callable(term_t);
PL_EXPORT(int) PL_is_integer(term_t);
PL_EXPORT(int) PL_is_pair(term_t);
PL_EXPORT(int) PL_is_list(term_t);
PL_EXPORT(int) PL_is_pair(term_t);
PL_EXPORT(int) PL_is_number(term_t);
PL_EXPORT(int) PL_is_string(term_t);
PL_EXPORT(int) PL_is_variable(term_t);
PL_EXPORT(int) PL_term_type(term_t);
PL_EXPORT(int) PL_is_inf(term_t);
PL_EXPORT(int) PL_is_acyclic(term_t t);
/* end PL_is_* functions =============================*/
PL_EXPORT( void ) PL_halt(int);
PL_EXPORT( int ) PL_initialise(int, char **);
PL_EXPORT( int ) PL_is_initialised(int *, char ***);
PL_EXPORT( void ) PL_close_foreign_frame(fid_t);
PL_EXPORT( void ) PL_discard_foreign_frame(fid_t);
PL_EXPORT( void ) PL_rewind_foreign_frame(fid_t);
PL_EXPORT( fid_t ) PL_open_foreign_frame(void);
PL_EXPORT( int ) PL_raise_exception(term_t);
PL_EXPORT( int ) PL_throw(term_t);
PL_EXPORT( void ) PL_clear_exception(void);
PL_EXPORT( void ) PL_register_atom(atom_t);
PL_EXPORT( void ) PL_unregister_atom(atom_t);
PL_EXPORT( predicate_t ) PL_pred(functor_t, module_t);
PL_EXPORT( predicate_t ) PL_predicate(const char *, int, const char *);
PL_EXPORT(void) PL_halt(int);
PL_EXPORT(int) PL_initialise(int, char **);
PL_EXPORT(int) PL_is_initialised(int *, char ***);
PL_EXPORT(void) PL_close_foreign_frame(fid_t);
PL_EXPORT(void) PL_discard_foreign_frame(fid_t);
PL_EXPORT(void) PL_rewind_foreign_frame(fid_t);
PL_EXPORT(fid_t) PL_open_foreign_frame(void);
PL_EXPORT(int) PL_raise_exception(term_t);
PL_EXPORT(int) PL_throw(term_t);
PL_EXPORT(void) PL_clear_exception(void);
PL_EXPORT(void) PL_register_atom(atom_t);
PL_EXPORT(void) PL_unregister_atom(atom_t);
PL_EXPORT(predicate_t) PL_pred(functor_t, module_t);
PL_EXPORT(predicate_t) PL_predicate(const char *, int, const char *);
#define GP_NAMEARITY 0x100 /* or'ed mask */
PL_EXPORT( int ) PL_unify_predicate(term_t head, predicate_t pred, int how);
PL_EXPORT( void ) PL_predicate_info(predicate_t, atom_t *, int *, module_t *);
PL_EXPORT( qid_t ) PL_open_query(module_t, int, predicate_t, term_t);
PL_EXPORT( int ) PL_next_solution(qid_t);
PL_EXPORT( void ) PL_cut_query(qid_t);
PL_EXPORT( void ) PL_close_query(qid_t);
PL_EXPORT( int ) PL_toplevel(void);
PL_EXPORT( term_t ) PL_exception(qid_t);
PL_EXPORT( term_t ) PL_exception(qid_t);
PL_EXPORT( int ) PL_call_predicate(module_t, int, predicate_t, term_t);
PL_EXPORT( int ) PL_call(term_t, module_t);
PL_EXPORT( void ) PL_register_foreign(const char *, int, pl_function_t, int);
PL_EXPORT( void ) PL_register_foreign_in_module(const char *, const char *, int, pl_function_t, int);
PL_EXPORT( void ) PL_register_extensions(const PL_extension *);
PL_EXPORT( void ) PL_register_extensions_in_module(const char *module, const PL_extension *);
PL_EXPORT( void ) PL_load_extensions(const PL_extension *);
PL_EXPORT( int ) PL_handle_signals(void);
PL_EXPORT( int ) PL_thread_self(void);
PL_EXPORT( int ) PL_unify_thread_id(term_t, int);
PL_EXPORT( int ) PL_thread_attach_engine(const PL_thread_attr_t *);
PL_EXPORT( int ) PL_thread_destroy_engine(void);
PL_EXPORT( int ) PL_thread_at_exit(void (*)(void *), void *, int);
PL_EXPORT( int ) PL_thread_raise(int tid, int sig);
PL_EXPORT( PL_engine_t ) PL_create_engine(const PL_thread_attr_t *);
PL_EXPORT( int ) PL_destroy_engine(PL_engine_t);
PL_EXPORT( int ) PL_set_engine(PL_engine_t,PL_engine_t *);
PL_EXPORT( int ) PL_get_string(term_t, char **, size_t *);
PL_EXPORT( int ) PL_get_string_chars(term_t, char **, size_t *);
PL_EXPORT( record_t ) PL_record(term_t);
PL_EXPORT( int ) PL_recorded(record_t, term_t);
PL_EXPORT( record_t ) PL_duplicate_record(record_t);
PL_EXPORT( void ) PL_erase(record_t);
/* only partial implementation, does not guarantee export between different architectures and versions of YAP */
PL_EXPORT( char *) PL_record_external(term_t, size_t *);
PL_EXPORT( int ) PL_recorded_external(const char *, term_t);
PL_EXPORT( int ) PL_erase_external(char *);
PL_EXPORT( int ) PL_action(int,...);
PL_EXPORT( void ) PL_on_halt(int (*)(int, void *), void *);
PL_EXPORT( void *) PL_malloc(size_t);
PL_EXPORT( void *) PL_malloc_uncollectable(size_t s);
PL_EXPORT( void *) PL_realloc(void*,size_t);
PL_EXPORT( void ) PL_free(void *);
PL_EXPORT( int ) PL_eval_expression_to_int64_ex(term_t t, int64_t *val);
PL_EXPORT( void ) PL_cleanup_fork(void);
PL_EXPORT( int ) PL_get_signum_ex(term_t sig, int *n);
PL_EXPORT( size_t ) PL_utf8_strlen(const char *s, size_t len);
PL_EXPORT( int ) PL_unify_list_codes(term_t l, const char *chas);
PL_EXPORT(int) PL_unify_predicate(term_t head, predicate_t pred, int how);
PL_EXPORT(void) PL_predicate_info(predicate_t, atom_t *, int *, module_t *);
PL_EXPORT(qid_t) PL_open_query(module_t, int, predicate_t, term_t);
PL_EXPORT(int) PL_next_solution(qid_t);
PL_EXPORT(void) PL_cut_query(qid_t);
PL_EXPORT(void) PL_close_query(qid_t);
PL_EXPORT(int) PL_toplevel(void);
PL_EXPORT(term_t) PL_exception(qid_t);
PL_EXPORT(term_t) PL_exception(qid_t);
PL_EXPORT(int) PL_call_predicate(module_t, int, predicate_t, term_t);
PL_EXPORT(int) PL_call(term_t, module_t);
PL_EXPORT(void) PL_register_foreign(const char *, int, pl_function_t, int);
PL_EXPORT(void)
PL_register_foreign_in_module(const char *, const char *, int, pl_function_t,
int);
PL_EXPORT(void) PL_register_extensions(const PL_extension *);
PL_EXPORT(void)
PL_register_extensions_in_module(const char *module, const PL_extension *);
PL_EXPORT(void) PL_load_extensions(const PL_extension *);
PL_EXPORT(int) PL_handle_signals(void);
PL_EXPORT(int) PL_thread_self(void);
PL_EXPORT(int) PL_unify_thread_id(term_t, int);
PL_EXPORT(int) PL_thread_attach_engine(const PL_thread_attr_t *);
PL_EXPORT(int) PL_thread_destroy_engine(void);
PL_EXPORT(int) PL_thread_at_exit(void (*)(void *), void *, int);
PL_EXPORT(int) PL_thread_raise(int tid, int sig);
PL_EXPORT(PL_engine_t) PL_create_engine(const PL_thread_attr_t *);
PL_EXPORT(int) PL_destroy_engine(PL_engine_t);
PL_EXPORT(int) PL_set_engine(PL_engine_t, PL_engine_t *);
PL_EXPORT(int) PL_get_string(term_t, char **, size_t *);
PL_EXPORT(int) PL_get_string_chars(term_t, char **, size_t *);
PL_EXPORT(record_t) PL_record(term_t);
PL_EXPORT(int) PL_recorded(record_t, term_t);
PL_EXPORT(record_t) PL_duplicate_record(record_t);
PL_EXPORT(void) PL_erase(record_t);
/* only partial implementation, does not guarantee export between different
* architectures and versions of YAP */
PL_EXPORT(char *) PL_record_external(term_t, size_t *);
PL_EXPORT(int) PL_recorded_external(const char *, term_t);
PL_EXPORT(int) PL_erase_external(char *);
PL_EXPORT(int) PL_action(int, ...);
PL_EXPORT(void) PL_on_halt(int (*)(int, void *), void *);
PL_EXPORT(void *) PL_malloc(size_t);
PL_EXPORT(void *) PL_malloc_uncollectable(size_t s);
PL_EXPORT(void *) PL_realloc(void *, size_t);
PL_EXPORT(void) PL_free(void *);
PL_EXPORT(int) PL_eval_expression_to_int64_ex(term_t t, int64_t *val);
PL_EXPORT(void) PL_cleanup_fork(void);
PL_EXPORT(int) PL_get_signum_ex(term_t sig, int *n);
PL_EXPORT(size_t) PL_utf8_strlen(const char *s, size_t len);
PL_EXPORT(int) PL_unify_list_codes(term_t l, const char *chas);
PL_EXPORT(void) PL_add_to_protocol(const char *buf, size_t count);
@ -583,10 +570,10 @@ PL_EXPORT(void) PL_add_to_protocol(const char *buf, size_t count);
extern X_API void (*PL_signal(int sig, void (*func)(int)))(int);
extern X_API void PL_fatal_error(const char *msg);
extern X_API int Sprintf(const char * fm,...);
extern X_API int Sdprintf(const char *,...);
extern X_API int Sprintf(const char *fm, ...);
extern X_API int Sdprintf(const char *, ...);
/*******************************
/*******************************
* FILENAME SUPPORT *
*******************************/
@ -611,7 +598,7 @@ interface for the GNU readline interface as defined in pl-rl.c. This
abstract interface is necessary to make an embeddable system without the
readline overhead.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* PL_dispatch() modes */
/* PL_dispatch() modes */
#define PL_DISPATCH_NOWAIT 0 /* Dispatch only once */
#define PL_DISPATCH_WAIT 1 /* Dispatch till input available */
#define PL_DISPATCH_INSTALLED 2 /* dispatch function installed? */
@ -623,12 +610,11 @@ PL_EXPORT(char *) PL_prompt_string(int fd);
PL_EXPORT(void) PL_write_prompt(int dowrite);
PL_EXPORT(void) PL_prompt_next(int fd);
PL_EXPORT(char *) PL_atom_generator(const char *prefix, int state);
PL_EXPORT(pl_wchar_t*) PL_atom_generator_w(const pl_wchar_t *pref,
pl_wchar_t *buffer,
size_t buflen,
PL_EXPORT(pl_wchar_t *)
PL_atom_generator_w(const pl_wchar_t *pref, pl_wchar_t *buffer, size_t buflen,
int state);
/*******************************
/*******************************
* WINDOWS MESSAGES *
*******************************/
@ -642,14 +628,13 @@ PL_EXPORT(pl_wchar_t*) PL_atom_generator_w(const pl_wchar_t *pref,
#endif
#include <windows.h>
PL_EXPORT(LRESULT) PL_win_message_proc(HWND hwnd,
UINT message,
PL_EXPORT(LRESULT)
PL_win_message_proc(HWND hwnd, UINT message,
// WPARAM wParam,
LPARAM lParam);
#endif /*_WINDOWS_*/
/********************************
/********************************
* QUERY PROLOG *
*********************************/
@ -670,7 +655,7 @@ PL_EXPORT(LRESULT) PL_win_message_proc(HWND hwnd,
X_API intptr_t PL_query(int); /* get information from Prolog */
/*******************************
/*******************************
* ERRORS *
*******************************/
@ -696,78 +681,19 @@ PL_EXPORT(int) PL_representation_error(const char *resource);
PL_EXPORT(int) PL_type_error(const char *expected, term_t culprit);
PL_EXPORT(int) PL_domain_error(const char *expected, term_t culprit);
PL_EXPORT(int) PL_existence_error(const char *type, term_t culprit);
PL_EXPORT(int) PL_permission_error(const char *operation,
const char *type, term_t culprit);
PL_EXPORT(int)
PL_permission_error(const char *operation, const char *type, term_t culprit);
PL_EXPORT(int) PL_resource_error(const char *resource);
/*******************************
/*******************************
* PROLOG FLAGS *
*******************************/
#define PL_set_feature PL_set_prolog_flag /* compatibility */
PL_EXPORT(int) PL_set_prolog_flag(const char *name, int type, ...);
#include <blobs.h>
/*******************************
* BLOBS *
*******************************/
#ifndef BLOBS_H
#define PL_BLOB_MAGIC_B 0x75293a00 /* Magic to validate a blob-type */
#define PL_BLOB_VERSION 1 /* Current version */
#define PL_BLOB_MAGIC (PL_BLOB_MAGIC_B|PL_BLOB_VERSION)
#define PL_BLOB_UNIQUE 0x01 /* Blob content is unique */
#define PL_BLOB_TEXT 0x02 /* blob contains text */
#define PL_BLOB_NOCOPY 0x04 /* do not copy the data */
#define PL_BLOB_WCHAR 0x08 /* wide character string */
typedef struct PL_blob_t
{ uintptr_t magic; /* PL_BLOB_MAGIC */
uintptr_t flags; /* PL_BLOB_* */
char * name; /* name of the type */
int (*release)(atom_t a);
int (*compare)(atom_t a, atom_t b);
#ifdef SIO_MAGIC
int (*write)(IOSTREAM *s, atom_t a, int flags);
#else
int (*write)(void *s, atom_t a, int flags);
#endif
void (*acquire)(atom_t a);
#ifdef SIO_MAGIC
int (*save)(atom_t a, IOSTREAM *s);
atom_t (*load)(IOSTREAM *s);
#else
int (*save)(atom_t a, void*);
atom_t (*load)(void *s);
#endif
/* private */
void * reserved[10]; /* for future extension */
int registered; /* Already registered? */
int rank; /* Rank for ordering atoms */
struct PL_blob_t * next; /* next in registered type-chain */
atom_t atom_name; /* Name as atom */
} PL_blob_t;
PL_EXPORT(int) PL_is_blob(term_t t, PL_blob_t **type);
PL_EXPORT(int) PL_unify_blob(term_t t, void *blob, size_t len,
PL_blob_t *type);
PL_EXPORT(int) PL_put_blob(term_t t, void *blob, size_t len,
PL_blob_t *type);
PL_EXPORT(int) PL_get_blob(term_t t, void **blob, size_t *len,
PL_blob_t **type);
PL_EXPORT(void*) PL_blob_data(atom_t a,
size_t *len,
struct PL_blob_t **type);
PL_EXPORT(void) PL_register_blob_type(PL_blob_t *type);
PL_EXPORT(PL_blob_t*) PL_find_blob_type(const char* name);
PL_EXPORT(PL_blob_t*) YAP_find_blob_type(YAP_Atom at);
PL_EXPORT(int) PL_unr1egister_blob_type(PL_blob_t *type);
PL_EXPORT(int) PL_raise(int sig);
#endif
#if USE_GMP && !defined(__cplusplus)
#include <gmp.h>
@ -785,8 +711,7 @@ void swi_install(void);
X_API int PL_warning(const char *msg, ...);
/********************************
/********************************
* NON-DETERMINISTIC CALL/RETURN *
*********************************/

95
include/blobs.h Normal file
View File

@ -0,0 +1,95 @@
//
// blobs.h
// yap
//
// Created by VITOR SANTOS COSTA on 09/05/15.
// Copyright (c) 2015 VITOR SANTOS COSTA. All rights reserved.
//
// based on the SWI Blob implementation, an extension of atoms for SWI-Prolog
#ifndef BLOBS_H
#define BLOBS_H
/*******************************
* BLOBS *
*******************************/
#define PL_BLOB_MAGIC_B 0x75293a00 /* Magic to validate a blob-type */
#define PL_BLOB_VERSION 1
#define PL_BLOB_MAGIC (PL_BLOB_MAGIC_B | PL_BLOB_VERSION)
#define PL_BLOB_UNIQUE 0x01 /* Blob content is unique */
#define PL_BLOB_TEXT 0x02 /* blob contains text */
#define PL_BLOB_NOCOPY 0x04 /* do not copy the data */
#define PL_BLOB_WCHAR 0x08 /* wide character string */
typedef struct _PL_blob_t {
uintptr_t magic; /* YAP_BLOB_MAGIC */
uintptr_t flags; /* YAP_BLOB_* */
char *name; /* name of the type */
int (*release)(YAP_Atom a);
int (*compare)(YAP_Atom a, YAP_Atom b);
#ifdef SIO_MAGIC
int (*write)(FILE *s, YAP_Atom a, int flags);
#else
int (*write)(void *s, YAP_Atom a, int flags);
#endif
void (*acquire)(YAP_Atom a);
#ifdef SIO_MAGIC
int (*save)(YAP_Atom a, FILE *s);
YAP_Atom (*load)(FILE *s);
#else
int (*save)(YAP_Atom a, void *);
YAP_Atom (*load)(void *s);
#endif
/* private */
void *reserved[10]; /* for future extension */
int registered; /* Already registered? */
int rank; /* Rank for ordering atoms */
struct _PL_blob_t *next; /* next in registered type-chain */
YAP_Atom atom_name; /* Name as atom */
} blob_type_t;
// typedef struct _PL_blob_t PL_blob_t;
#define YAP_BLOB_MAGIC_B PL_BLOB_MAGIC_B
#define YAP_blob_t blob_type_t
#define PL_blob_t blob_type_t
#ifdef SWI_PROLOG_H
PL_EXPORT(int) PL_is_blob(term_t t, PL_blob_t **type);
PL_EXPORT(int) PL_unify_blob(term_t t, void *blob, size_t len, PL_blob_t *type);
PL_EXPORT(int) PL_put_blob(term_t t, void *blob, size_t len, PL_blob_t *type);
PL_EXPORT(int)
PL_get_blob(term_t t, void **blob, size_t *len, PL_blob_t **type);
PL_EXPORT(void *) PL_blob_data(atom_t a, size_t *len, PL_blob_t **type);
PL_EXPORT(void) PL_register_blob_type(PL_blob_t *type);
PL_EXPORT(PL_blob_t *) PL_find_blob_type(const char *name);
PL_EXPORT(int) PL_unregister_blob_type(PL_blob_t *type);
PL_EXPORT(int) PL_raise(int sig);
#endif
#ifdef YATOM_H
extern int Yap_write_blob(AtomEntry *ref, FILE *stream);
extern char *Yap_blob_to_string(AtomEntry *ref, const char *s, size_t sz);
#endif
extern X_API bool YAP_is_blob(YAP_Term t, YAP_blob_t **type);
extern X_API bool YAP_unify_blob(YAP_Term *t, void *blob, size_t len,
YAP_blob_t *type);
extern X_API bool YAP_put_blob(YAP_Term *t, void *blob, size_t len,
YAP_blob_t *type);
extern X_API bool YAP_get_blob(YAP_Term t, void **blob, size_t *len,
YAP_blob_t **type);
extern X_API void *YAP_blob_data(YAP_Atom a, size_t *len, YAP_blob_t **type);
extern X_API void YAP_register_blob_type(YAP_blob_t *type);
extern X_API YAP_blob_t *YAP_find_blob_type(const char *name);
// extern X_API YAP_blob_t *YAP_find_blob_type(YAP_Atom at);
extern X_API bool YAP_unregister_blob_type(YAP_blob_t *type);
#endif

View File

@ -1,23 +1,23 @@
/*************************************************************************
* *
* YAP Prolog *
* Yap Prolog was developed at NCCUP - Universidade do Porto *
* *
* Copyright V.Santos Costa and Universidade do Porto 1985-- *
* *
**************************************************************************
* *
* File: blobs.c *
* comments: support blobs in YAP definition *
* *
* Last rev: $Date: $,$Author: vsc $ *
* *
* *
*************************************************************************/
* *
* YAP Prolog *
* Yap Prolog was developed at NCCUP - Universidade do Porto *
* *
* Copyright V.Santos Costa and Universidade do Porto 1985-- *
* *
**************************************************************************
* *
* File: blobs.c *
* comments: support blobs in YAP definition *
* *
* Last rev: $Date: $,$Author: vsc $ *
* *
* *
*************************************************************************/
/**
*
* @{
* @file swi/fli/blobs.c
* @file swi/fli/blobs.c
*
* @addtogroup swi-c-interface
*
@ -59,7 +59,7 @@ X_API int PL_is_blob(term_t t, PL_blob_t **type) {
if (!IsBlob(a))
return FALSE;
b = RepBlobProp(a->PropsOfAE);
*type = (struct PL_blob_t *)b->blob_type;
*type = (PL_blob_t *)b->blob_type;
return TRUE;
}
@ -77,7 +77,7 @@ PL_unify_blob(term_t t, void *blob, size_t len, PL_blob_t *type) {
return FALSE;
}
if (type->acquire) {
type->acquire(AtomToSWIAtom(AbsAtom(ae)));
type->acquire((AbsAtom(ae)));
}
return Yap_unify(Yap_GetFromSlot(t), MkAtomTerm(AbsAtom(ae)));
}
@ -95,7 +95,7 @@ PL_put_blob(term_t t, void *blob, size_t len, PL_blob_t *type) {
return FALSE;
}
if (type->acquire) {
type->acquire(AtomToSWIAtom(AbsAtom(ae)));
type->acquire((AbsAtom(ae)));
}
Yap_PutInSlot(t, MkAtomTerm(AbsAtom(ae)));
return ret;
@ -118,7 +118,7 @@ PL_get_blob(term_t t, void **blob, size_t *len, PL_blob_t **type) {
return FALSE;
ae = RepAtom(a);
if (type)
*type = (struct PL_blob_t *)RepBlobProp(ae->PropsOfAE)->blob_type;
*type = (PL_blob_t *)RepBlobProp(ae->PropsOfAE)->blob_type;
if (len)
*len = ae->rep.blob[0].length;
if (blob)
@ -127,7 +127,7 @@ PL_get_blob(term_t t, void **blob, size_t *len, PL_blob_t **type) {
}
PL_EXPORT(void *)
PL_blob_data(atom_t a, size_t *len, struct PL_blob_t **type) {
PL_blob_data(atom_t a, size_t *len, PL_blob_t **type) {
Atom x = SWIAtomToAtom(a);
if (!IsBlob(x)) {
@ -140,22 +140,22 @@ PL_blob_data(atom_t a, size_t *len, struct PL_blob_t **type) {
if (len)
*len = x->rep.blob[0].length;
if (type)
*type = (struct PL_blob_t *)RepBlobProp(x->PropsOfAE)->blob_type;
*type = (PL_blob_t *)RepBlobProp(x->PropsOfAE)->blob_type;
return x->rep.blob[0].data;
}
PL_EXPORT(void)
PL_register_blob_type(PL_blob_t *type) {
type->next = (PL_blob_t *)BlobTypes;
BlobTypes = (struct YAP_blob_t *)type;
type->next = BlobTypes;
BlobTypes = type;
}
PL_EXPORT(PL_blob_t *)
PL_find_blob_type(const char *name) {
Atom at = Yap_LookupAtom((char *)name);
return YAP_find_blob_type((YAP_Atom)at);
return YAP_find_blob_type(RepAtom(at)->StrOfAE);
}
PL_EXPORT(int)

View File

@ -48,18 +48,20 @@ else()
# )
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4y)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/include)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl)
add_custom_target( YAP4PY ALL
# COMMAND ${CMAKE_COMMAND} -E copy ${YAP_DLLS} ${CMAKE_BINARY_DIR}/startup.yss ${CMAKE_CURRENT_BINARY_DIR}/yap4py
add_custom_target( YAP4PY ALL
# COMMAND ${CMAKE_COMMAND} -E copy ${YAP_DLLS} ${CMAKE_BINARY_DIR}/startup.yss ${CMAKE_CURRENT_BINARY_DIR}/yap4py
COMMAND ${PYTHON_EXECUTABLE} setup.py sdist bdist_wheel
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS STARTUP ${PYTHON_SOURCES} ${PROLOG_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/setup.py ${SWIG_MODULE_Py2YAP_REAL_NAME} )
DEPENDS STARTUP ${PYTHON_SOURCES} ${PROLOG_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/setup.py ${SWIG_MODULE_Py2YAP_REAL_NAME} )
function(f_copy filename output )
function(f_copy filename output )
get_filename_component(base ${filename} NAME_WE)
set(outfile ${output}/${base})
file (COPY ${filename} DESTiNATION ${output})
@ -69,10 +71,9 @@ function(f_copy filename output )
DEPENDS ${filename}
)
set_source_files_properties(${outfile} PROPERTIES GENERATED TRUE)
endfunction()
endfunction()
install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip install --no-index -f dist yap4py
install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip install .
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"
DEPENDS Py4YAP ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${dlls} )

View File

@ -11,6 +11,7 @@ from setuptools.extension import Extension
from codecs import open
from os import path, makedirs, walk
from shutil import copytree, rmtree, copy2, move
import sysconfig
from glob import glob
from pathlib import Path
import platform
@ -42,15 +43,16 @@ from shutil import copytree, rmtree, copy2, move
from glob import glob
from pathlib import Path
import platform
import os.path
from os.path import dirname, join,abspath
import os
import shutil
from distutils.core import setup
pjoin = os.path.join
here = os.path.abspath(os.path.dirname(__file__))
#pkg_root = pjoin(here, name)
here = abspath(dirname(__file__))
libpydir = abspath(dirname(os.path.dirname('stdlib')))
libpyauxdir = abspath(os.path.dirname('stdlib'))
#pkg_root = join(here, name)
sys.path.insert(0, "${CMAKE_CURRENT_SOURCE_DIR}")
@ -61,13 +63,13 @@ if platform.system() == 'Windows':
my_extra_link_args = ['-Wl,-export-all-symbols']
else:
# if platform.system() == 'Darwin':
my_extra_link_args = ['-Wl,-rpath', '-Wl,${_ABS_PYTHON_MODULE_PATH}']
my_extra_link_args = ['-Wl,-rpath', '-Wl,'+libpydir,'-Wl,-rpath', '-Wl,'+libpyauxdir, ]
win_libs = []
local_libs = ['YAP++','Py4YAP']
local_libs = ['Py4YAP']
# or dll in glob('yap/dlls/*'):
# move( dll ,'lib' )
native_sources = ["yap.i"]
native_sources = ["yap.i",'yapi.cpp']
for i in '${PYTHON_SOURCES}'.split(";"):
copy2(i, 'yap4py')
@ -83,7 +85,16 @@ for i in my_libs0:
my_libs = glob(i) + my_libs
for i in my_libs:
copy2(i, 'yap4py')
bpy2yap = []
my_includes = ['${CMAKE_SOURCE_DIR}/CXX', '${CMAKE_SOURCE_DIR}/include',
'${CMAKE_SOURCE_DIR}/H', '${CMAKE_SOURCE_DIR}/H/generated',
'${CMAKE_SOURCE_DIR}/os', '${CMAKE_SOURCE_DIR}/OPTYap',
'${CMAKE_SOURCE_DIR}/utf8proc',
'${CMAKE_SOURCE_DIR}/packages/python',
'${CMAKE_BINARY_DIR}']
for i in my_includes:
includes = glob(i+"/*.??h")
for j in includes:
copy2(j, 'yap4py/include')
here = path.abspath(path.dirname(__file__))
#gmp_dir = path.abspath(path.dirname("${GMP_LIBRARIES}"))
#python_libdir = path.abspath(path.dirname("${PYTHON_LIBRARIES}")
@ -99,25 +110,14 @@ extensions = [Extension('_yap', native_sources,
('_GNU_SOURCE', '1')],
runtime_library_dirs=['yap4py', '${libdir}', '${bindir}', '${gmp_dir}', '${python_libdir}'],
swig_opts=['-modern', '-c++', '-py3',
'-DX_API', '-I${CMAKE_SOURCE_DIR}/CXX', '-I${CMAKE_SOURCE_DIR}/include',
'-I${CMAKE_SOURCE_DIR}/H', '-I${CMAKE_SOURCE_DIR}/H/generated',
'-I${CMAKE_SOURCE_DIR}/os', '-I${CMAKE_SOURCE_DIR}/OPTYap',
'-I${CMAKE_SOURCE_DIR}/packages/python'],
library_dirs=['../../..', '../../../CXX', '..', "${bindir}"],
'-DX_API', '-Iyap4py/include' ],
library_dirs=['../../..', '../../../CXX', 'yap4py/include', '..', "${bindir}"],
extra_link_args=my_extra_link_args,
libraries=['Yap','gmp']+win_libs+local_libs,
include_dirs=['../../..',
'${GMP_INCLUDE_DIRS}',
'${CMAKE_SOURCE_DIR}/H',
'${CMAKE_SOURCE_DIR}/H/generated',
'${CMAKE_SOURCE_DIR}/OPTYap',
'${CMAKE_SOURCE_DIR}/os',
'${CMAKE_SOURCE_DIR}/packages/python',
'${CMAKE_SOURCE_DIR}/include',
'${CMAKE_SOURCE_DIR}/CXX', '.']
)]#
include_dirs=['yap4py/include']
)]
packages = packages = setuptools.find_packages('${CMAKE_CURRENT_SOURCE_DIR}')
packages = setuptools.find_packages('${CMAKE_CURRENT_SOURCE_DIR}')
@ -131,21 +131,21 @@ version_ns = {'__version__': '6.3.5', 'minor-version': '6', 'minor-version': '3'
setup_args = dict(
name=name,
version=version_ns['__version__'],
scripts=glob(pjoin('scripts', '*')),
scripts=glob(join('scripts', '*')),
packages=packages,
py_modules=['yap','yap4py'],
package_data=package_data,
include_package_data=True,
requirements=[
'm2w64-gmp',
'm2-msys2-keyring',
'm2-msys2-launcher-git',
'm2-msys2-runtime',
],
# requirements=[
# 'm2w64-gmp',
# 'm2-msys2-keyring',
# 'm2-msys2-launcher-git',
# 'm2-msys2-runtime',
# ],
description="YAP in Python",
author='YAP Development Team',
author_email='ipython-dev@scipy.org',
url='http://ipython.org',
author_email='vsc@dcc.fc.up.pt',
url='http://www.dcc.fc.up/~vsc/yap',
license='BSD',
ext_modules=extensions,
platforms="Linux, Mac OS X, Windows",

View File

@ -659,8 +659,9 @@ class YAPEngine;
//%template(YAPTermVector) vector<YAPTerm>;
//%feature("novaluewrapper") vector<YAPTerm>;
};
%init %{
%init %{
%}