Smaller updates:
constant use of longjmp conflict with python headers win32 support dll support
This commit is contained in:
parent
55879dbd6c
commit
65ff3ed471
203
#.gitignore#
Normal file
203
#.gitignore#
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
*~
|
||||||
|
*.itf
|
||||||
|
*.po
|
||||||
|
*.qlf
|
||||||
|
*.xwam
|
||||||
|
*.wam
|
||||||
|
*.ma
|
||||||
|
*.s
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
docs/yap.info*
|
||||||
|
.build
|
||||||
|
tags
|
||||||
|
TGSautom4te.cache
|
||||||
|
cscope.*
|
||||||
|
GPATH
|
||||||
|
m32
|
||||||
|
GRTAGS
|
||||||
|
GTAGS
|
||||||
|
tmtags*
|
||||||
|
.autotools
|
||||||
|
.Rhistory
|
||||||
|
.zedstate
|
||||||
|
config.h
|
||||||
|
Yap.h
|
||||||
|
YapConfig.h
|
||||||
|
YapTermConfig.h
|
||||||
|
.graffiti
|
||||||
|
.#*#
|
||||||
|
*/#*#
|
||||||
|
*bak
|
||||||
|
*rej
|
||||||
|
*.db
|
||||||
|
groups
|
||||||
|
*.ede
|
||||||
|
.??*
|
||||||
|
*ggtags*
|
||||||
|
.atom-build.josn
|
||||||
|
.autotools
|
||||||
|
.cproject
|
||||||
|
.dir-locals.el
|
||||||
|
.DS_store
|
||||||
|
.kateproject
|
||||||
|
.project
|
||||||
|
.pydevproject
|
||||||
|
.Rhistory
|
||||||
|
.zedstate
|
||||||
|
.graffiti
|
||||||
|
.kateproject
|
||||||
|
autom4te.cache
|
||||||
|
*rej
|
||||||
|
#*
|
||||||
|
#*#
|
||||||
|
config.h
|
||||||
|
*.html
|
||||||
|
packages/gecode/dev
|
||||||
|
JIT/HPP/bkp
|
||||||
|
cmake_install.cmake
|
||||||
|
cmake_clean.cmake
|
||||||
|
*.build
|
||||||
|
C/myabsmi.c
|
||||||
|
*.ctags#
|
||||||
|
*.hs
|
||||||
|
CMakeFiles
|
||||||
|
*.make
|
||||||
|
C/new_iop.c
|
||||||
|
*.pdf
|
||||||
|
*.log
|
||||||
|
*.orig
|
||||||
|
JIT/HPP/#JIT_In#
|
||||||
|
*.text
|
||||||
|
yap
|
||||||
|
*startup.yss
|
||||||
|
*cmake_files
|
||||||
|
C/pl-yap.c
|
||||||
|
GitSHA1.c
|
||||||
|
.vscode
|
||||||
|
CMakeLists.txt.*
|
||||||
|
FindPackageLog.txt
|
||||||
|
GitSHA1.c
|
||||||
|
clang
|
||||||
|
cmake-build-debug
|
||||||
|
os/YapIOConfig.h
|
||||||
|
CodeBlocks
|
||||||
|
|
||||||
|
os/readterm.c.cpp
|
||||||
|
|
||||||
|
os/readterm.c.cpp
|
||||||
|
|
||||||
|
packages/ProbLog/problog_examples/output/,_query_1_cluster_1.dot
|
||||||
|
|
||||||
|
packages/ProbLog/#problog_lbdd.yap#
|
||||||
|
|
||||||
|
packages/ProbLog/problog_examples/output/,_query_1_cluster_1.dot
|
||||||
|
|
||||||
|
packages/ProbLog/problog_examples/output/out.dat
|
||||||
|
|
||||||
|
packages/ProbLog/problog_examples/outputvalues.pl
|
||||||
|
|
||||||
|
packages/ProbLog/problogbdd
|
||||||
|
|
||||||
|
packages/raptor/raptor_config.h
|
||||||
|
|
||||||
|
packages/real/rconfig.h
|
||||||
|
|
||||||
|
packages/ProbLog/problog/#completion.yap#
|
||||||
|
|
||||||
|
packages/ProbLog/problog_examples/output
|
||||||
|
packages/ProbLog/problog_examples/queries
|
||||||
|
packages/swig/java/*.java
|
||||||
|
packages/swig/java/*.class
|
||||||
|
packages/swig/java/*.jar
|
||||||
|
packages/swig/java/*wrap*
|
||||||
|
*jnilib
|
||||||
|
*.jar
|
||||||
|
*LOG
|
||||||
|
packages/cplint/approx/simplecuddLPADs/LPADBDD
|
||||||
|
|
||||||
|
packages/swi-minisat2/˜:ilp
|
||||||
|
packages/swig/android/app
|
||||||
|
packages/cplint/L
|
||||||
|
|
||||||
|
packages/CLPBN/horus/hcli
|
||||||
|
tmp
|
||||||
|
Eclipse
|
||||||
|
packages/bdd/simplecudd/problogbdd
|
||||||
|
trace
|
||||||
|
packages/bdd/cudd_config.h
|
||||||
|
Makefile
|
||||||
|
build
|
||||||
|
Debug
|
||||||
|
debug
|
||||||
|
Release
|
||||||
|
Build
|
||||||
|
xcode
|
||||||
|
Threads
|
||||||
|
droid
|
||||||
|
mxe
|
||||||
|
mxe32
|
||||||
|
msys2
|
||||||
|
caret
|
||||||
|
codelite
|
||||||
|
configure
|
||||||
|
Qt
|
||||||
|
cmake/cmake-android
|
||||||
|
sublime
|
||||||
|
yap-6.3.workspace
|
||||||
|
yap-6.3.geany
|
||||||
|
YAP.project
|
||||||
|
CBlocks
|
||||||
|
yPQ
|
||||||
|
*.tmp
|
||||||
|
YAP.sublime*
|
||||||
|
yap32
|
||||||
|
Eclipse
|
||||||
|
codeblocks
|
||||||
|
yap-6.3.tags
|
||||||
|
android
|
||||||
|
yap.prj
|
||||||
|
|
||||||
|
yap.VITORs-MBP.vsc.pui
|
||||||
|
vc
|
||||||
|
packages/myddas/pl/myddas_odbc.yap
|
||||||
|
|
||||||
|
packages/myddas/pl/myddas_postgres.yap
|
||||||
|
|
||||||
|
packages/myddas/pl/myddas_sqlite3.ypp
|
||||||
|
|
||||||
|
packages/myddas/pl/#myddas_postgres.ypp#
|
||||||
|
|
||||||
|
packages/myddas/hh
|
||||||
|
|
||||||
|
packages/myddas/DaysInHospital_Y3.csv
|
||||||
|
|
||||||
|
packages/myddas/agile.csv
|
||||||
|
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
*.cmake#
|
||||||
|
|
||||||
|
*.tex
|
||||||
|
|
||||||
|
*.c#
|
||||||
|
|
||||||
|
packages/swig/yap_wrap.cxx
|
||||||
|
|
||||||
|
packages/swig/yap_wrap.h
|
||||||
|
|
||||||
|
packages/swig/yap_wrap.cpp
|
||||||
|
|
||||||
|
packages/swig/yap.py
|
||||||
|
|
||||||
|
*.ipynb
|
||||||
|
yap
|
||||||
|
packages/python/yap_kernel/x/__init__.py
|
||||||
|
x
|
||||||
|
packages/python/yap_kernel/x/__main__.py
|
||||||
|
|
||||||
|
*.gch
|
||||||
|
mxe
|
||||||
|
build
|
2
#GitSHA1.c.in#
Normal file
2
#GitSHA1.c.in#
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee#define GIT_SHA1 "@GIT_SHA1@"
|
||||||
|
const char g_GIT_SHA1[] = GIT_SHA1;
|
6
.ctags
6
.ctags
@ -6,6 +6,7 @@
|
|||||||
--regex-Prolog=/^([a-z][A-Za-z0-9_]*:)?\'(.*)\'\(.*\)\.[ \t]*.*/\2/p,predicate,predicate definition/
|
--regex-Prolog=/^([a-z][A-Za-z0-9_]*:)?\'(.*)\'\(.*\)\.[ \t]*.*/\2/p,predicate,predicate definition/
|
||||||
--regex-Prolog=/^:-[ \t]+(discontiguous|dynamic|multifile|table|thread_local)[ \t]+([a-z][_a-zA-Z0-9]*:)?([a-z0-9_][_a-zA-Z0-9]*)/\1/p,predicate,predicate metadata/
|
--regex-Prolog=/^:-[ \t]+(discontiguous|dynamic|multifile|table|thread_local)[ \t]+([a-z][_a-zA-Z0-9]*:)?([a-z0-9_][_a-zA-Z0-9]*)/\1/p,predicate,predicate metadata/
|
||||||
--regex-Prolog=/^[ \t]*Yap_InitCPred[ \t]*\"(\$?[A-Za-z0-9_]*)\"([ \t]*).*/\1/p,predicate,predicate definition/
|
--regex-Prolog=/^[ \t]*Yap_InitCPred[ \t]*\"(\$?[A-Za-z0-9_]*)\"([ \t]*).*/\1/p,predicate,predicate definition/
|
||||||
|
--langmap=C:+.(h.cmake).(h.config)
|
||||||
--exclude=\._*
|
--exclude=\._*
|
||||||
--exclude=*\.bak
|
--exclude=*\.bak
|
||||||
--exclude=\.svn
|
--exclude=\.svn
|
||||||
@ -22,3 +23,8 @@
|
|||||||
--exclude=\#.*
|
--exclude=\#.*
|
||||||
--exclude=(.)\#*
|
--exclude=(.)\#*
|
||||||
--exclude=*.dylib
|
--exclude=*.dylib
|
||||||
|
--exclude=docs
|
||||||
|
--exclude=build
|
||||||
|
--exclude=cmake-build-debug
|
||||||
|
--exclude=clang
|
||||||
|
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -84,7 +84,7 @@ clang
|
|||||||
cmake-build-debug
|
cmake-build-debug
|
||||||
os/YapIOConfig.h
|
os/YapIOConfig.h
|
||||||
CodeBlocks
|
CodeBlocks
|
||||||
|
x
|
||||||
os/readterm.c.cpp
|
os/readterm.c.cpp
|
||||||
|
|
||||||
os/readterm.c.cpp
|
os/readterm.c.cpp
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#ifdef BEAM
|
#ifdef BEAM
|
||||||
|
|
||||||
#include "Yap.h"
|
#include "Yap.h"
|
||||||
#include "compile.h"
|
#include "YapCompile.h"
|
||||||
#include "clause.h"
|
#include "clause.h"
|
||||||
#include "eam.h"
|
#include "eam.h"
|
||||||
#include "eamamasm.h"
|
#include "eamamasm.h"
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#ifdef BEAM
|
#ifdef BEAM
|
||||||
|
|
||||||
#include "Yap.h"
|
#include "Yap.h"
|
||||||
#include "compile.h"
|
#include "YapCompile.h"
|
||||||
#include "clause.h"
|
#include "clause.h"
|
||||||
#include "eam.h"
|
#include "eam.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -188,7 +188,7 @@ static char SccsId[] = "@(#)amasm.c 1.3 3/15/90";
|
|||||||
|
|
||||||
#include "Yap.h"
|
#include "Yap.h"
|
||||||
#include "clause.h"
|
#include "clause.h"
|
||||||
#include "compile.h"
|
#include "YapCompile.h"
|
||||||
#include "yapio.h"
|
#include "yapio.h"
|
||||||
|
|
||||||
#ifdef BEAM
|
#ifdef BEAM
|
||||||
|
@ -127,8 +127,7 @@ X_API yhandle_t YAP_CurrentSlot(void);
|
|||||||
|
|
||||||
/// @brief allocate n empty new slots
|
/// @brief allocate n empty new slots
|
||||||
///
|
///
|
||||||
/// Return a handle to the system's default slot.
|
/// Return a handle to the system's default slo t. iX_API yhandle_t YAP_NewSlots(int NumberOfSlots);
|
||||||
X_API yhandle_t YAP_NewSlots(int NumberOfSlots);
|
|
||||||
|
|
||||||
/// @brief allocate n empty new slots
|
/// @brief allocate n empty new slots
|
||||||
///
|
///
|
||||||
@ -246,6 +245,8 @@ X_API YAP_Bool YAP_IsRationalTerm(YAP_Term t) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
X_API YAP_Bool YAP_IsStringTerm(YAP_Term t) { return (IsStringTerm(t)); }
|
||||||
|
|
||||||
X_API YAP_Bool YAP_IsVarTerm(YAP_Term t) { return (IsVarTerm(t)); }
|
X_API YAP_Bool YAP_IsVarTerm(YAP_Term t) { return (IsVarTerm(t)); }
|
||||||
|
|
||||||
X_API YAP_Bool YAP_IsNonVarTerm(YAP_Term t) { return (IsNonVarTerm(t)); }
|
X_API YAP_Bool YAP_IsNonVarTerm(YAP_Term t) { return (IsNonVarTerm(t)); }
|
||||||
@ -277,6 +278,32 @@ X_API Term YAP_MkIntTerm(Int n) {
|
|||||||
return I;
|
return I;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
X_API Term YAP_MkStringTerm(const char *n) {
|
||||||
|
CACHE_REGS
|
||||||
|
Term I;
|
||||||
|
BACKUP_H();
|
||||||
|
|
||||||
|
I = MkStringTerm(n);
|
||||||
|
RECOVER_H();
|
||||||
|
return I;
|
||||||
|
}
|
||||||
|
|
||||||
|
X_API Term YAP_MkUnsignedStringTerm(const unsigned char *n) {
|
||||||
|
CACHE_REGS
|
||||||
|
Term I;
|
||||||
|
BACKUP_H();
|
||||||
|
|
||||||
|
I = MkUStringTerm(n);
|
||||||
|
RECOVER_H();
|
||||||
|
return I;
|
||||||
|
}
|
||||||
|
|
||||||
|
X_API const char *YAP_StringOfTerm(Term t) { return StringOfTerm(t); }
|
||||||
|
|
||||||
|
X_API const unsigned char *YAP_UnsignedStringOfTerm(Term t) {
|
||||||
|
return UStringOfTerm(t);
|
||||||
|
}
|
||||||
|
|
||||||
X_API Int YAP_IntOfTerm(Term t) {
|
X_API Int YAP_IntOfTerm(Term t) {
|
||||||
if (!IsApplTerm(t))
|
if (!IsApplTerm(t))
|
||||||
return IntOfTerm(t);
|
return IntOfTerm(t);
|
||||||
@ -1380,8 +1407,8 @@ X_API Term YAP_ReadBuffer(const char *s, Term *tp) {
|
|||||||
tv = 0;
|
tv = 0;
|
||||||
LOCAL_ErrorMessage = NULL;
|
LOCAL_ErrorMessage = NULL;
|
||||||
const unsigned char *us = (const unsigned char *)s;
|
const unsigned char *us = (const unsigned char *)s;
|
||||||
while (!(t = Yap_BufferToTermWithPrioBindings(
|
while (!(t = Yap_BufferToTermWithPrioBindings(us, strlen(s) + 1, TermNil,
|
||||||
us, strlen(s) + 1, TermNil, GLOBAL_MaxPriority, tv))) {
|
GLOBAL_MaxPriority, tv))) {
|
||||||
if (LOCAL_ErrorMessage) {
|
if (LOCAL_ErrorMessage) {
|
||||||
if (!strcmp(LOCAL_ErrorMessage, "Stack Overflow")) {
|
if (!strcmp(LOCAL_ErrorMessage, "Stack Overflow")) {
|
||||||
if (!Yap_dogc(0, NULL PASS_REGS)) {
|
if (!Yap_dogc(0, NULL PASS_REGS)) {
|
||||||
@ -1638,7 +1665,6 @@ X_API PredEntry *YAP_AtomToPredInModule(Atom at, Term mod) {
|
|||||||
static int run_emulator(USES_REGS1) {
|
static int run_emulator(USES_REGS1) {
|
||||||
int out;
|
int out;
|
||||||
|
|
||||||
LOCAL_PrologMode &= ~(UserCCallMode | CCallMode);
|
|
||||||
out = Yap_absmi(0);
|
out = Yap_absmi(0);
|
||||||
LOCAL_PrologMode |= UserCCallMode;
|
LOCAL_PrologMode |= UserCCallMode;
|
||||||
return out;
|
return out;
|
||||||
@ -1661,7 +1687,7 @@ X_API bool YAP_EnterGoal(PredEntry *pe, CELL *ptr, YAP_dogoalinfo *dgi) {
|
|||||||
// slot=%d", pe, pe->CodeOfPred->opc, FAILCODE, Deref(ARG1), Deref(ARG2),
|
// slot=%d", pe, pe->CodeOfPred->opc, FAILCODE, Deref(ARG1), Deref(ARG2),
|
||||||
// LOCAL_CurSlot);
|
// LOCAL_CurSlot);
|
||||||
dgi->b = LCL0 - (CELL *)B;
|
dgi->b = LCL0 - (CELL *)B;
|
||||||
out = run_emulator(PASS_REGS1);
|
out = Yap_exec_absmi(true, false);
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
if (out) {
|
if (out) {
|
||||||
dgi->EndSlot = LOCAL_CurSlot;
|
dgi->EndSlot = LOCAL_CurSlot;
|
||||||
@ -2122,16 +2148,20 @@ X_API YAP_Term YAP_CopyTerm(Term t) {
|
|||||||
|
|
||||||
X_API char *YAP_WriteBuffer(Term t, char *buf, size_t sze, int flags) {
|
X_API char *YAP_WriteBuffer(Term t, char *buf, size_t sze, int flags) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
size_t length;
|
seq_tv_t inp, out;
|
||||||
|
size_t length = sze;
|
||||||
char *b;
|
char *b;
|
||||||
|
|
||||||
BACKUP_MACHINE_REGS();
|
BACKUP_MACHINE_REGS();
|
||||||
if ((b = Yap_TermToString(t, &length, LOCAL_encoding, flags)) != buf) {
|
inp.val.t = t;
|
||||||
|
inp.type = YAP_STRING_TERM;
|
||||||
|
out.type = YAP_STRING_CHARS;
|
||||||
|
out.val.c = buf;
|
||||||
|
out.enc = LOCAL_encoding;
|
||||||
|
if (!Yap_CVT_Text(&inp, &out PASS_REGS))
|
||||||
|
return NULL;
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
return b;
|
return out.val.c;
|
||||||
}
|
|
||||||
RECOVER_MACHINE_REGS();
|
|
||||||
return buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// write a a term to n user-provided buffer: make sure not tp
|
/// write a a term to n user-provided buffer: make sure not tp
|
||||||
@ -2253,13 +2283,11 @@ static void do_bootfile(const char *bootfilename USES_REGS) {
|
|||||||
the module.
|
the module.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool initialized = false;
|
X_API bool YAP_initialized = false;
|
||||||
static int n_mdelays = 0;
|
static int n_mdelays = 0;
|
||||||
static YAP_delaymodule_t *m_delays;
|
static YAP_delaymodule_t *m_delays;
|
||||||
|
|
||||||
X_API bool YAP_DelayInit(YAP_ModInit_t f, const char s[]) {
|
X_API bool YAP_DelayInit(YAP_ModInit_t f, const char s[]) {
|
||||||
if (initialized)
|
|
||||||
return false;
|
|
||||||
if (m_delays) {
|
if (m_delays) {
|
||||||
m_delays = realloc(m_delays, (n_mdelays + 1) * sizeof(YAP_delaymodule_t));
|
m_delays = realloc(m_delays, (n_mdelays + 1) * sizeof(YAP_delaymodule_t));
|
||||||
} else {
|
} else {
|
||||||
@ -2271,6 +2299,17 @@ X_API bool YAP_DelayInit(YAP_ModInit_t f, const char s[]) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Yap_LateInit(const char s[]) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < n_mdelays; i++) {
|
||||||
|
if (!strcmp(m_delays[i].s, s)) {
|
||||||
|
m_delays[i].f();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static void start_modules(void) {
|
static void start_modules(void) {
|
||||||
Term cm = CurrentModule;
|
Term cm = CurrentModule;
|
||||||
size_t i;
|
size_t i;
|
||||||
@ -2296,9 +2335,8 @@ YAP_file_type_t YAP_Init(YAP_init_args *yap_init) {
|
|||||||
const char *yroot;
|
const char *yroot;
|
||||||
|
|
||||||
/* ignore repeated calls to YAP_Init */
|
/* ignore repeated calls to YAP_Init */
|
||||||
if (initialized)
|
if (YAP_initialized)
|
||||||
return YAP_FOUND_BOOT_ERROR;
|
return YAP_FOUND_BOOT_ERROR;
|
||||||
initialized = true;
|
|
||||||
|
|
||||||
Yap_embedded = yap_init->Embedded;
|
Yap_embedded = yap_init->Embedded;
|
||||||
Yap_page_size = Yap_InitPageSize(); /* init memory page size, required by
|
Yap_page_size = Yap_InitPageSize(); /* init memory page size, required by
|
||||||
@ -2306,8 +2344,9 @@ YAP_file_type_t YAP_Init(YAP_init_args *yap_init) {
|
|||||||
#if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA)
|
#if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA)
|
||||||
Yap_init_yapor_global_local_memory();
|
Yap_init_yapor_global_local_memory();
|
||||||
#endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA */
|
#endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA */
|
||||||
GLOBAL_PrologShouldHandleInterrupts = yap_init->PrologShouldHandleInterrupts &&
|
// GLOBAL_PrologShouldHandleInterrupts =
|
||||||
!yap_init->Embedded;
|
// yap_init->PrologShouldHandleInterrupts &&
|
||||||
|
if (!yap_init->Embedded)
|
||||||
Yap_InitSysbits(0); /* init signal handling and time, required by later
|
Yap_InitSysbits(0); /* init signal handling and time, required by later
|
||||||
functions */
|
functions */
|
||||||
GLOBAL_argv = yap_init->Argv;
|
GLOBAL_argv = yap_init->Argv;
|
||||||
@ -2492,6 +2531,7 @@ YAP_file_type_t YAP_Init(YAP_init_args *yap_init) {
|
|||||||
setBooleanGlobalPrologFlag(SAVED_PROGRAM_FLAG, false);
|
setBooleanGlobalPrologFlag(SAVED_PROGRAM_FLAG, false);
|
||||||
}
|
}
|
||||||
start_modules();
|
start_modules();
|
||||||
|
YAP_initialized = true;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ static char SccsId[] = "@(#)cdmgr.c 1.1 05/02/98";
|
|||||||
|
|
||||||
#include "Yap.h"
|
#include "Yap.h"
|
||||||
#include "clause.h"
|
#include "clause.h"
|
||||||
#include "eval.h"
|
#include "YapEval.h"
|
||||||
#include "tracer.h"
|
#include "tracer.h"
|
||||||
#include "yapio.h"
|
#include "yapio.h"
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
|
@ -207,7 +207,7 @@ void Yap_RestartYap(int flag) {
|
|||||||
#if PUSH_REGS
|
#if PUSH_REGS
|
||||||
restore_absmi_regs(&Yap_standard_regs);
|
restore_absmi_regs(&Yap_standard_regs);
|
||||||
#endif
|
#endif
|
||||||
siglongjmp(LOCAL_RestartEnv, 1);
|
siglongjmp(*LOCAL_RestartEnv, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void error_exit_yap(int value) {
|
static void error_exit_yap(int value) {
|
||||||
@ -328,7 +328,7 @@ void Yap_ThrowError__(const char *file, const char *function, int lineno,
|
|||||||
} else {
|
} else {
|
||||||
Yap_Error__(file, function, lineno, type, where);
|
Yap_Error__(file, function, lineno, type, where);
|
||||||
}
|
}
|
||||||
siglongjmp(LOCAL_RestartEnv, 4);
|
siglongjmp(*LOCAL_RestartEnv, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
56
C/exec.c
56
C/exec.c
@ -211,11 +211,11 @@ static Int save_env_b(USES_REGS1) {
|
|||||||
|
|
||||||
/** Look for a predicate with same functor as t,
|
/** Look for a predicate with same functor as t,
|
||||||
create a new one of it cannot find it.
|
create a new one of it cannot find it.
|
||||||
*/
|
*/
|
||||||
static PredEntry *new_pred(Term t, Term tmod, char *pname) {
|
static PredEntry *new_pred(Term t, Term tmod, char *pname) {
|
||||||
Term t0 = t;
|
Term t0 = t;
|
||||||
|
|
||||||
restart:
|
restart:
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
Yap_Error(INSTANTIATION_ERROR, t0, pname);
|
Yap_Error(INSTANTIATION_ERROR, t0, pname);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -393,7 +393,7 @@ inline static bool do_execute_n(Term t, Term mod, unsigned int n USES_REGS) {
|
|||||||
int j = -n;
|
int j = -n;
|
||||||
Term t0 = t;
|
Term t0 = t;
|
||||||
|
|
||||||
restart_exec:
|
restart_exec:
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
return CallError(INSTANTIATION_ERROR, t0, mod PASS_REGS);
|
return CallError(INSTANTIATION_ERROR, t0, mod PASS_REGS);
|
||||||
} else if (IsAtomTerm(t)) {
|
} else if (IsAtomTerm(t)) {
|
||||||
@ -650,7 +650,7 @@ static Int execute_clause(USES_REGS1) { /* '$execute_clause'(Goal) */
|
|||||||
yamop *code;
|
yamop *code;
|
||||||
Term clt = Deref(ARG3);
|
Term clt = Deref(ARG3);
|
||||||
|
|
||||||
restart_exec:
|
restart_exec:
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
Yap_Error(INSTANTIATION_ERROR, ARG3, "call/1");
|
Yap_Error(INSTANTIATION_ERROR, ARG3, "call/1");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -791,7 +791,7 @@ static void complete_inner_computation(choiceptr old_B) {
|
|||||||
|
|
||||||
static inline Term *GetTermAddress(CELL a) {
|
static inline Term *GetTermAddress(CELL a) {
|
||||||
Term *b = NULL;
|
Term *b = NULL;
|
||||||
restart:
|
restart:
|
||||||
if (!IsVarTerm(a)) {
|
if (!IsVarTerm(a)) {
|
||||||
return (b);
|
return (b);
|
||||||
} else if (a == (CELL)b) {
|
} else if (a == (CELL)b) {
|
||||||
@ -955,7 +955,7 @@ static Int protect_stack_from_cut(USES_REGS1) {
|
|||||||
* @param USES_REGS1 [env for threaded execution]
|
* @param USES_REGS1 [env for threaded execution]
|
||||||
* @return c
|
* @return c
|
||||||
[next answer]
|
[next answer]
|
||||||
*/
|
*/
|
||||||
static Int protect_stack_from_retry(USES_REGS1) {
|
static Int protect_stack_from_retry(USES_REGS1) {
|
||||||
// called after backtracking..
|
// called after backtracking..
|
||||||
//
|
//
|
||||||
@ -1202,7 +1202,7 @@ static Int execute0(USES_REGS1) { /* '$execute0'(Goal,Mod) */
|
|||||||
return EnterCreepMode(t, mod PASS_REGS);
|
return EnterCreepMode(t, mod PASS_REGS);
|
||||||
}
|
}
|
||||||
t = Yap_YapStripModule(t, &mod);
|
t = Yap_YapStripModule(t, &mod);
|
||||||
restart_exec:
|
restart_exec:
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
Yap_Error(INSTANTIATION_ERROR, ARG3, "call/1");
|
Yap_Error(INSTANTIATION_ERROR, ARG3, "call/1");
|
||||||
return false;
|
return false;
|
||||||
@ -1421,7 +1421,10 @@ static bool exec_absmi(bool top, yap_reset_t reset_mode USES_REGS) {
|
|||||||
int lval, out;
|
int lval, out;
|
||||||
Int OldBorder = LOCAL_CBorder;
|
Int OldBorder = LOCAL_CBorder;
|
||||||
LOCAL_CBorder = LCL0 - (CELL *)B;
|
LOCAL_CBorder = LCL0 - (CELL *)B;
|
||||||
if (top && (lval = sigsetjmp(LOCAL_RestartEnv, 1)) != 0) {
|
sigjmp_buf signew, *sighold = LOCAL_RestartEnv;
|
||||||
|
LOCAL_RestartEnv = &signew;
|
||||||
|
|
||||||
|
if (top && (lval = sigsetjmp(signew, 1)) != 0) {
|
||||||
switch (lval) {
|
switch (lval) {
|
||||||
case 1: { /* restart */
|
case 1: { /* restart */
|
||||||
/* otherwise, SetDBForThrow will fail entering critical mode */
|
/* otherwise, SetDBForThrow will fail entering critical mode */
|
||||||
@ -1455,12 +1458,14 @@ static bool exec_absmi(bool top, yap_reset_t reset_mode USES_REGS) {
|
|||||||
} break;
|
} break;
|
||||||
case 3: { /* saved state */
|
case 3: { /* saved state */
|
||||||
LOCAL_CBorder = OldBorder;
|
LOCAL_CBorder = OldBorder;
|
||||||
|
LOCAL_RestartEnv = sighold;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case 4: {
|
case 4: {
|
||||||
/* abort */
|
/* abort */
|
||||||
/* can be called from anywgerre, must reset registers,
|
/* can be called from anywgerre, must reset registers,
|
||||||
*/
|
*/
|
||||||
|
LOCAL_RestartEnv = sighold;
|
||||||
Yap_JumpToEnv(TermDAbort);
|
Yap_JumpToEnv(TermDAbort);
|
||||||
P = (yamop *)FAILCODE;
|
P = (yamop *)FAILCODE;
|
||||||
LOCAL_PrologMode = UserMode;
|
LOCAL_PrologMode = UserMode;
|
||||||
@ -1480,6 +1485,7 @@ static bool exec_absmi(bool top, yap_reset_t reset_mode USES_REGS) {
|
|||||||
if (!Yap_has_a_signal())
|
if (!Yap_has_a_signal())
|
||||||
CalculateStackGap(PASS_REGS1);
|
CalculateStackGap(PASS_REGS1);
|
||||||
LOCAL_CBorder = OldBorder;
|
LOCAL_CBorder = OldBorder;
|
||||||
|
LOCAL_RestartEnv = sighold;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1579,7 +1585,7 @@ void Yap_fail_all(choiceptr bb USES_REGS) {
|
|||||||
DEPTH = B->cp_depth;
|
DEPTH = B->cp_depth;
|
||||||
#endif /* DEPTH_LIMIT */
|
#endif /* DEPTH_LIMIT */
|
||||||
YENV = ENV = B->cp_env;
|
YENV = ENV = B->cp_env;
|
||||||
/* recover local stack */
|
/* recover local stack */
|
||||||
#ifdef DEPTH_LIMIT
|
#ifdef DEPTH_LIMIT
|
||||||
DEPTH = ENV[E_DEPTH];
|
DEPTH = ENV[E_DEPTH];
|
||||||
#endif
|
#endif
|
||||||
@ -2018,14 +2024,17 @@ static Int JumpToEnv() {
|
|||||||
/* find the first choicepoint that may be a catch */
|
/* find the first choicepoint that may be a catch */
|
||||||
// DBTerm *dbt = Yap_RefToException();
|
// DBTerm *dbt = Yap_RefToException();
|
||||||
while (handler && Yap_PredForChoicePt(handler, NULL) != PredDollarCatch) {
|
while (handler && Yap_PredForChoicePt(handler, NULL) != PredDollarCatch) {
|
||||||
|
//printf("--handler=%p, max=%p\n", handler, LCL0-LOCAL_CBorder);
|
||||||
while (POP_CHOICE_POINT(handler)) {
|
while (POP_CHOICE_POINT(handler)) {
|
||||||
POP_FAIL_EXECUTE(handler);
|
POP_FAIL_EXECUTE(handler);
|
||||||
}
|
}
|
||||||
|
if (handler == (choiceptr)(LCL0-LOCAL_CBorder)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
/* we are already doing a catch */
|
/* we are already doing a catch */
|
||||||
/* make sure we prune C-choicepoints */
|
/* make sure we prune C-choicepoints */
|
||||||
if (handler->cp_ap == NOCODE &&
|
if ((handler->cp_ap == NOCODE && handler->cp_b == NULL) ||
|
||||||
(handler >= (choiceptr)(LCL0 - LOCAL_CBorder) ||
|
(handler->cp_b >= (choiceptr)(LCL0 - LOCAL_CBorder))) {
|
||||||
handler->cp_b == NULL)) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
handler = handler->cp_b;
|
handler = handler->cp_b;
|
||||||
@ -2080,20 +2089,20 @@ static Int jump_env(USES_REGS1) {
|
|||||||
Yap_Error(INSTANTIATION_ERROR, t, "throw ball must be bound");
|
Yap_Error(INSTANTIATION_ERROR, t, "throw ball must be bound");
|
||||||
return false;
|
return false;
|
||||||
} else if (IsApplTerm(t) && FunctorOfTerm(t) == FunctorError) {
|
} else if (IsApplTerm(t) && FunctorOfTerm(t) == FunctorError) {
|
||||||
Term t2, te;
|
Term t2;
|
||||||
|
|
||||||
Yap_find_prolog_culprit(PASS_REGS1);
|
Yap_find_prolog_culprit(PASS_REGS1);
|
||||||
// LOCAL_Error_TYPE = ERROR_EVENT;
|
// LOCAL_Error_TYPE = ERROR_EVENT;
|
||||||
t = ArgOfTerm(1, t);
|
t = ArgOfTerm(1, t);
|
||||||
if (IsApplTerm(t) && IsAtomTerm((t2 = ArgOfTerm(1, t)))) {
|
if (IsApplTerm(t) && IsAtomTerm((t2 = ArgOfTerm(1, t)))) {
|
||||||
LOCAL_ActiveError.errorAsText = AtomOfTerm(t2);
|
LOCAL_ActiveError->errorAsText = AtomOfTerm(t2);
|
||||||
LOCAL_ActiveError.classAsText = NameOfFunctor(FunctorOfTerm(t));
|
LOCAL_ActiveError->classAsText = NameOfFunctor(FunctorOfTerm(t));
|
||||||
} else if (IsAtomTerm(t)) {
|
} else if (IsAtomTerm(t)) {
|
||||||
LOCAL_ActiveError.errorAsText = AtomOfTerm(t);
|
LOCAL_ActiveError->errorAsText = AtomOfTerm(t);
|
||||||
LOCAL_ActiveError.classAsText = NULL;
|
LOCAL_ActiveError->classAsText = NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//LOCAL_Error_TYPE = THROW_EVENT;
|
// LOCAL_Error_TYPE = THROW_EVENT;
|
||||||
}
|
}
|
||||||
LOCAL_ActiveError->prologPredName = NULL;
|
LOCAL_ActiveError->prologPredName = NULL;
|
||||||
Yap_PutException(t);
|
Yap_PutException(t);
|
||||||
@ -2115,9 +2124,9 @@ static Int generate_pred_info(USES_REGS1) {
|
|||||||
|
|
||||||
void Yap_InitYaamRegs(int myworker_id) {
|
void Yap_InitYaamRegs(int myworker_id) {
|
||||||
Term h0var;
|
Term h0var;
|
||||||
// getchar();
|
// getchar();
|
||||||
#if PUSH_REGS
|
#if PUSH_REGS
|
||||||
/* Guarantee that after a longjmp we go back to the original abstract
|
/* Guarantee that after a longjmp we go back to the original abstract
|
||||||
machine registers */
|
machine registers */
|
||||||
#ifdef THREADS
|
#ifdef THREADS
|
||||||
if (myworker_id) {
|
if (myworker_id) {
|
||||||
@ -2125,7 +2134,7 @@ void Yap_InitYaamRegs(int myworker_id) {
|
|||||||
pthread_setspecific(Yap_yaamregs_key, (const void *)rs);
|
pthread_setspecific(Yap_yaamregs_key, (const void *)rs);
|
||||||
REMOTE_ThreadHandle(myworker_id).current_yaam_regs = rs;
|
REMOTE_ThreadHandle(myworker_id).current_yaam_regs = rs;
|
||||||
}
|
}
|
||||||
/* may be run by worker_id on behalf on myworker_id */
|
/* may be run by worker_id on behalf on myworker_id */
|
||||||
#else
|
#else
|
||||||
Yap_regp = &Yap_standard_regs;
|
Yap_regp = &Yap_standard_regs;
|
||||||
#endif
|
#endif
|
||||||
@ -2163,8 +2172,8 @@ void Yap_InitYaamRegs(int myworker_id) {
|
|||||||
TR = TR_FZ = (tr_fr_ptr)REMOTE_TrailBase(myworker_id);
|
TR = TR_FZ = (tr_fr_ptr)REMOTE_TrailBase(myworker_id);
|
||||||
#endif /* FROZEN_STACKS */
|
#endif /* FROZEN_STACKS */
|
||||||
CalculateStackGap(PASS_REGS1);
|
CalculateStackGap(PASS_REGS1);
|
||||||
/* the first real choice-point will also have AP=FAIL */
|
/* the first real choice-point will also have AP=FAIL */
|
||||||
/* always have an empty slots for people to use */
|
/* always have an empty slots for people to use */
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
LOCAL = REMOTE(myworker_id);
|
LOCAL = REMOTE(myworker_id);
|
||||||
worker_id = myworker_id;
|
worker_id = myworker_id;
|
||||||
@ -2235,7 +2244,6 @@ bool Yap_ResetException(int wid) {
|
|||||||
Yap_PopTermFromDB(REMOTE_ActiveError(wid)->errorTerm);
|
Yap_PopTermFromDB(REMOTE_ActiveError(wid)->errorTerm);
|
||||||
}
|
}
|
||||||
REMOTE_ActiveError(wid)->errorTerm = NULL;
|
REMOTE_ActiveError(wid)->errorTerm = NULL;
|
||||||
REMOTE_ActiveError(wid)->errorTerm = NULL;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
C/flags.c
13
C/flags.c
@ -666,12 +666,19 @@ static bool setYapFlagInModule(Term tflag, Term t2, Term mod) {
|
|||||||
flag_term *tarr = GLOBAL_Flags;
|
flag_term *tarr = GLOBAL_Flags;
|
||||||
if (!(fv->type(t2)))
|
if (!(fv->type(t2)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (fv->helper && !(fv->helper(t2)))
|
if (fv->helper && !(fv->helper(t2)))
|
||||||
return false;
|
return false;
|
||||||
Term tout = tarr[fv->FlagOfVE].at;
|
Term tout = tarr[fv->FlagOfVE].at;
|
||||||
if (IsVarTerm(tout))
|
if (IsVarTerm(tout)) {
|
||||||
Yap_PopTermFromDB(tarr[fv->FlagOfVE].DBT);
|
Term t;
|
||||||
if (IsAtomOrIntTerm(t2))
|
while ((t = Yap_PopTermFromDB(tarr[fv->FlagOfVE].DBT)) == 0) {
|
||||||
|
if (!Yap_gc(2, ENV, gc_P(P, CP))) {
|
||||||
|
Yap_Error(RESOURCE_ERROR_STACK, TermNil, LOCAL_ErrorMessage);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (IsAtomOrIntTerm(t2))
|
||||||
tarr[fv->FlagOfVE].at = t2;
|
tarr[fv->FlagOfVE].at = t2;
|
||||||
else {
|
else {
|
||||||
tarr[fv->FlagOfVE].DBT = Yap_StoreTermInDB(t2, 2);
|
tarr[fv->FlagOfVE].DBT = Yap_StoreTermInDB(t2, 2);
|
||||||
|
@ -115,7 +115,7 @@ threads that are created <em>after</em> the registration.
|
|||||||
#include "YapHeap.h"
|
#include "YapHeap.h"
|
||||||
#include "yapio.h"
|
#include "yapio.h"
|
||||||
#include "iopreds.h"
|
#include "iopreds.h"
|
||||||
#include "eval.h"
|
#include "YapEval.h"
|
||||||
#include "attvar.h"
|
#include "attvar.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
13
C/heapgc.c
13
C/heapgc.c
@ -134,7 +134,7 @@ gc_growtrail(int committed, tr_fr_ptr begsTR, cont *old_cont_top0 USES_REGS)
|
|||||||
#endif
|
#endif
|
||||||
/* could not find more trail */
|
/* could not find more trail */
|
||||||
save_machine_regs();
|
save_machine_regs();
|
||||||
siglongjmp(LOCAL_gc_restore, 2);
|
siglongjmp(*LOCAL_gc_restore, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,7 +397,7 @@ check_pr_trail( tr_fr_ptr rc USES_REGS)
|
|||||||
if (!Yap_locked_growtrail(0, TRUE) || TRUE) {
|
if (!Yap_locked_growtrail(0, TRUE) || TRUE) {
|
||||||
/* could not find more trail */
|
/* could not find more trail */
|
||||||
save_machine_regs();
|
save_machine_regs();
|
||||||
siglongjmp(LOCAL_gc_restore, 2);
|
siglongjmp(*LOCAL_gc_restore, 2);
|
||||||
}
|
}
|
||||||
rc = TR-n;
|
rc = TR-n;
|
||||||
}
|
}
|
||||||
@ -525,7 +525,7 @@ pop_registers(Int num_regs, yamop *nextop USES_REGS)
|
|||||||
/* error: we don't have enough room */
|
/* error: we don't have enough room */
|
||||||
/* could not find more trail */
|
/* could not find more trail */
|
||||||
save_machine_regs();
|
save_machine_regs();
|
||||||
siglongjmp(LOCAL_gc_restore, 4);
|
siglongjmp(*LOCAL_gc_restore, 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1450,7 +1450,7 @@ mark_variable(CELL_PTR current USES_REGS)
|
|||||||
/* error: we don't have enough room */
|
/* error: we don't have enough room */
|
||||||
/* could not find more trail */
|
/* could not find more trail */
|
||||||
save_machine_regs();
|
save_machine_regs();
|
||||||
siglongjmp(LOCAL_gc_restore, 3);
|
siglongjmp(*LOCAL_gc_restore, 3);
|
||||||
} else if (n > 0) {
|
} else if (n > 0) {
|
||||||
CELL *ptr = LOCAL_extra_gc_cells;
|
CELL *ptr = LOCAL_extra_gc_cells;
|
||||||
|
|
||||||
@ -3934,6 +3934,9 @@ do_gc(Int predarity, CELL *current_env, yamop *nextop USES_REGS)
|
|||||||
UInt gc_phase;
|
UInt gc_phase;
|
||||||
UInt alloc_sz;
|
UInt alloc_sz;
|
||||||
int jmp_res;
|
int jmp_res;
|
||||||
|
sigjmp_buf jmp;
|
||||||
|
|
||||||
|
LOCAL_gc_restore = &jmp;
|
||||||
|
|
||||||
heap_cells = HR-H0;
|
heap_cells = HR-H0;
|
||||||
gc_verbose = is_gc_verbose();
|
gc_verbose = is_gc_verbose();
|
||||||
@ -3989,7 +3992,7 @@ do_gc(Int predarity, CELL *current_env, yamop *nextop USES_REGS)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
time_start = Yap_cputime();
|
time_start = Yap_cputime();
|
||||||
jmp_res = sigsetjmp(LOCAL_gc_restore, 0);
|
jmp_res = sigsetjmp(jmp, 0);
|
||||||
if (jmp_res == 2) {
|
if (jmp_res == 2) {
|
||||||
UInt sz;
|
UInt sz;
|
||||||
|
|
||||||
|
11
C/load_dll.c
11
C/load_dll.c
@ -42,13 +42,13 @@ Yap_FindExecutable(void)
|
|||||||
void *
|
void *
|
||||||
Yap_LoadForeignFile(char *file, int flags)
|
Yap_LoadForeignFile(char *file, int flags)
|
||||||
{
|
{
|
||||||
|
char *buf = malloc(1024);
|
||||||
|
printf("file=%s\n" , file );
|
||||||
void *ptr= (void *)LoadLibrary(file);
|
void *ptr= (void *)LoadLibrary(file);
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
CACHE_REGS
|
|
||||||
LOCAL_ErrorMessage = NULL;
|
|
||||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
NULL, GetLastError(),
|
NULL, GetLastError(),
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorMessage, 256,
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, 1023,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
return ptr;
|
return ptr;
|
||||||
@ -83,16 +83,17 @@ LoadForeign(StringList ofiles, StringList libs,
|
|||||||
HINSTANCE handle;
|
HINSTANCE handle;
|
||||||
|
|
||||||
const char *file = AtomName(ofiles->name);
|
const char *file = AtomName(ofiles->name);
|
||||||
if (!Yap_findFile(file, NULL, NULL, LOCAL_FileNameBuf, true, YAP_OBJ, true, true) &&
|
if (Yap_findFile(file, NULL, NULL, LOCAL_FileNameBuf, true, YAP_OBJ, true, true) &&
|
||||||
(handle=LoadLibrary(LOCAL_FileNameBuf)) != 0)
|
(handle=LoadLibrary(LOCAL_FileNameBuf)) != 0)
|
||||||
{
|
{
|
||||||
LOCAL_ErrorMessage = NULL;
|
LOCAL_ErrorMessage = NULL;
|
||||||
if (*init_proc == NULL)
|
if (*init_proc == NULL)
|
||||||
*init_proc = (YapInitProc)GetProcAddress((HMODULE)handle, proc_name);
|
*init_proc = (YapInitProc)GetProcAddress((HMODULE)handle, proc_name);
|
||||||
} else {
|
} else {
|
||||||
|
char *buf = malloc(1024);
|
||||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
NULL, GetLastError(),
|
NULL, GetLastError(),
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorMessage, 256,
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, 1023,
|
||||||
NULL);
|
NULL);
|
||||||
//fprintf(stderr,"WinError: %s\n", LOCAL_ErrorSay);
|
//fprintf(stderr,"WinError: %s\n", LOCAL_ErrorSay);
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ p_load_foreign( USES_REGS1 )
|
|||||||
YapInitProc InitProc = NULL;
|
YapInitProc InitProc = NULL;
|
||||||
Term t, t1;
|
Term t, t1;
|
||||||
StringList new;
|
StringList new;
|
||||||
Int returncode = FALSE;
|
bool returncode = FALSE;
|
||||||
yhandle_t CurSlot = Yap_StartSlots();
|
yhandle_t CurSlot = Yap_StartSlots();
|
||||||
|
|
||||||
// Yap_DebugPlWrite(ARG1); printf("%s\n", " \n");
|
// Yap_DebugPlWrite(ARG1); printf("%s\n", " \n");
|
||||||
@ -81,12 +81,16 @@ p_load_foreign( USES_REGS1 )
|
|||||||
t1 = Deref(ARG3);
|
t1 = Deref(ARG3);
|
||||||
InitProcName = (char *)RepAtom(AtomOfTerm(t1))->StrOfAE;
|
InitProcName = (char *)RepAtom(AtomOfTerm(t1))->StrOfAE;
|
||||||
|
|
||||||
|
// verify if it was waiting for initialization
|
||||||
|
if (Yap_LateInit( InitProcName ) ){
|
||||||
|
returncode = true;
|
||||||
|
} else
|
||||||
/* call the OS specific function for dynamic loading */
|
/* call the OS specific function for dynamic loading */
|
||||||
if(Yap_LoadForeign(ofiles,libs,InitProcName,&InitProc)==LOAD_SUCCEEDED) {
|
if(Yap_LoadForeign(ofiles,libs,InitProcName,&InitProc)==LOAD_SUCCEEDED) {
|
||||||
Yap_StartSlots( );
|
Yap_StartSlots( );
|
||||||
(*InitProc)();
|
(*InitProc)();
|
||||||
Yap_CloseSlots(CurSlot);
|
Yap_CloseSlots(CurSlot);
|
||||||
returncode = TRUE;
|
returncode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* I should recover space if load foreign fails */
|
/* I should recover space if load foreign fails */
|
||||||
|
@ -302,7 +302,7 @@ static Term VarNames(VarEntry *p, Term l USES_REGS) {
|
|||||||
VarNames(p->VarLeft, l PASS_REGS) PASS_REGS));
|
VarNames(p->VarLeft, l PASS_REGS) PASS_REGS));
|
||||||
if (HR > ASP - 4096) {
|
if (HR > ASP - 4096) {
|
||||||
save_machine_regs();
|
save_machine_regs();
|
||||||
siglongjmp(LOCAL_IOBotch, 1);
|
longjmp(*LOCAL_IOBotch, 1);
|
||||||
}
|
}
|
||||||
return (o);
|
return (o);
|
||||||
} else {
|
} else {
|
||||||
@ -332,7 +332,7 @@ static Term Singletons(VarEntry *p, Term l USES_REGS) {
|
|||||||
Singletons(p->VarLeft, l PASS_REGS) PASS_REGS));
|
Singletons(p->VarLeft, l PASS_REGS) PASS_REGS));
|
||||||
if (HR > ASP - 4096) {
|
if (HR > ASP - 4096) {
|
||||||
save_machine_regs();
|
save_machine_regs();
|
||||||
siglongjmp(LOCAL_IOBotch, 1);
|
longjmp(*LOCAL_IOBotch, 1);
|
||||||
}
|
}
|
||||||
return (o);
|
return (o);
|
||||||
} else {
|
} else {
|
||||||
@ -357,7 +357,7 @@ static Term Variables(VarEntry *p, Term l USES_REGS) {
|
|||||||
Variables(p->VarRight, Variables(p->VarLeft, l PASS_REGS) PASS_REGS));
|
Variables(p->VarRight, Variables(p->VarLeft, l PASS_REGS) PASS_REGS));
|
||||||
if (HR > ASP - 4096) {
|
if (HR > ASP - 4096) {
|
||||||
save_machine_regs();
|
save_machine_regs();
|
||||||
siglongjmp(LOCAL_IOBotch, 1);
|
siglongjmp(*LOCAL_IOBotch, 1);
|
||||||
}
|
}
|
||||||
return (o);
|
return (o);
|
||||||
} else {
|
} else {
|
||||||
|
@ -67,7 +67,7 @@ static yap_signals InteractSIGINT(int ch) {
|
|||||||
#if PUSH_REGS
|
#if PUSH_REGS
|
||||||
// restore_absmi_regs(&Yap_standard_regs);
|
// restore_absmi_regs(&Yap_standard_regs);
|
||||||
#endif
|
#endif
|
||||||
siglongjmp(LOCAL_RestartEnv, 4);
|
siglongjmp(&LOCAL_RestartEnv, 4);
|
||||||
return YAP_ABORT_SIGNAL;
|
return YAP_ABORT_SIGNAL;
|
||||||
case 'b':
|
case 'b':
|
||||||
/* continue */
|
/* continue */
|
||||||
|
26
C/stdpreds.c
26
C/stdpreds.c
@ -58,6 +58,9 @@ static char SccsId[] = "%W% %G%";
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
|
||||||
|
extern int init_tries(void);
|
||||||
|
|
||||||
|
|
||||||
static Int p_setval(USES_REGS1);
|
static Int p_setval(USES_REGS1);
|
||||||
static Int p_value(USES_REGS1);
|
static Int p_value(USES_REGS1);
|
||||||
static Int p_values(USES_REGS1);
|
static Int p_values(USES_REGS1);
|
||||||
@ -74,7 +77,7 @@ static Int p_halt(USES_REGS1);
|
|||||||
#endif
|
#endif
|
||||||
static Int current_predicate(USES_REGS1);
|
static Int current_predicate(USES_REGS1);
|
||||||
static Int cont_current_predicate(USES_REGS1);
|
static Int cont_current_predicate(USES_REGS1);
|
||||||
static OpEntry *NextOp(OpEntry *CACHE_TYPE);
|
static OpEntry *NextOp(Prop CACHE_TYPE);
|
||||||
static Int init_current_op(USES_REGS1);
|
static Int init_current_op(USES_REGS1);
|
||||||
static Int cont_current_op(USES_REGS1);
|
static Int cont_current_op(USES_REGS1);
|
||||||
static Int init_current_atom_op(USES_REGS1);
|
static Int init_current_atom_op(USES_REGS1);
|
||||||
@ -943,22 +946,24 @@ static Int current_predicate(USES_REGS1) {
|
|||||||
return cont_current_predicate(PASS_REGS1);
|
return cont_current_predicate(PASS_REGS1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static OpEntry *NextOp(OpEntry *pp USES_REGS) {
|
static OpEntry *NextOp(Prop pp USES_REGS) {
|
||||||
|
|
||||||
while (!EndOfPAEntr(pp) && pp->KindOfPE != OpProperty &&
|
while (!EndOfPAEntr(pp) && pp->KindOfPE != OpProperty &&
|
||||||
(pp->OpModule != PROLOG_MODULE || pp->OpModule != CurrentModule))
|
(RepOpProp(pp)->OpModule != PROLOG_MODULE
|
||||||
pp = RepOpProp(pp->NextOfPE);
|
|| RepOpProp(pp)->OpModule != CurrentModule) )
|
||||||
return (pp);
|
pp = pp->NextOfPE;
|
||||||
|
return RepOpProp(pp);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Yap_IsOp(Atom at) {
|
int Yap_IsOp(Atom at) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
OpEntry *op = NextOp(RepOpProp((Prop)(RepAtom(at)->PropsOfAE)) PASS_REGS);
|
OpEntry *op = NextOp(RepAtom(at)->PropsOfAE PASS_REGS);
|
||||||
return (!EndOfPAEntr(op));
|
return (!EndOfPAEntr(op));
|
||||||
}
|
}
|
||||||
|
|
||||||
int Yap_IsOpMaxPrio(Atom at) {
|
int Yap_IsOpMaxPrio(Atom at) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
OpEntry *op = NextOp(RepOpProp((Prop)(RepAtom(at)->PropsOfAE)) PASS_REGS);
|
OpEntry *op = NextOp(RepAtom(at)->PropsOfAE PASS_REGS);
|
||||||
int max;
|
int max;
|
||||||
|
|
||||||
if (EndOfPAEntr(op))
|
if (EndOfPAEntr(op))
|
||||||
@ -1020,7 +1025,7 @@ static Int cont_current_atom_op(USES_REGS1) {
|
|||||||
OpEntry *op = (OpEntry *)IntegerOfTerm(EXTRA_CBACK_ARG(5, 1)), *next;
|
OpEntry *op = (OpEntry *)IntegerOfTerm(EXTRA_CBACK_ARG(5, 1)), *next;
|
||||||
|
|
||||||
READ_LOCK(op->OpRWLock);
|
READ_LOCK(op->OpRWLock);
|
||||||
next = NextOp(RepOpProp(op->NextOfPE) PASS_REGS);
|
next = NextOp(op->NextOfPE PASS_REGS);
|
||||||
if (unify_op(op PASS_REGS)) {
|
if (unify_op(op PASS_REGS)) {
|
||||||
READ_UNLOCK(op->OpRWLock);
|
READ_UNLOCK(op->OpRWLock);
|
||||||
if (next) {
|
if (next) {
|
||||||
@ -1053,7 +1058,7 @@ static Int init_current_atom_op(
|
|||||||
cut_fail();
|
cut_fail();
|
||||||
}
|
}
|
||||||
ae = RepAtom(AtomOfTerm(t));
|
ae = RepAtom(AtomOfTerm(t));
|
||||||
if (EndOfPAEntr((ope = NextOp(RepOpProp(ae->PropsOfAE) PASS_REGS)))) {
|
if (EndOfPAEntr((ope = NextOp(ae->PropsOfAE PASS_REGS)))) {
|
||||||
cut_fail();
|
cut_fail();
|
||||||
}
|
}
|
||||||
EXTRA_CBACK_ARG(5, 1) = (CELL)MkIntegerTerm((Int)ope);
|
EXTRA_CBACK_ARG(5, 1) = (CELL)MkIntegerTerm((Int)ope);
|
||||||
@ -1074,7 +1079,7 @@ static Int
|
|||||||
cut_fail();
|
cut_fail();
|
||||||
}
|
}
|
||||||
ae = RepAtom(AtomOfTerm(t));
|
ae = RepAtom(AtomOfTerm(t));
|
||||||
if (EndOfPAEntr((ope = NextOp(RepOpProp(ae->PropsOfAE) PASS_REGS)))) {
|
if (EndOfPAEntr((ope = NextOp(ae->PropsOfAE PASS_REGS)))) {
|
||||||
cut_fail();
|
cut_fail();
|
||||||
}
|
}
|
||||||
EXTRA_CBACK_ARG(5, 1) = (CELL)MkIntegerTerm((Int)ope);
|
EXTRA_CBACK_ARG(5, 1) = (CELL)MkIntegerTerm((Int)ope);
|
||||||
@ -1629,7 +1634,6 @@ void Yap_InitCPreds(void) {
|
|||||||
#if SUPPORT_CONDOR
|
#if SUPPORT_CONDOR
|
||||||
init_sys();
|
init_sys();
|
||||||
init_random();
|
init_random();
|
||||||
// init_tries();
|
|
||||||
init_regexp();
|
init_regexp();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# value of 3.4.0 or lower.
|
# value of 3.4.0 or lower.
|
||||||
|
|
||||||
# Sets the minimum version of CMake required to build the native
|
# Sets the version of CMake required to build the native
|
||||||
# library. You should either keep the default value or only pass a
|
# library. You should either keep the default value or pass a
|
||||||
# value of 3.4.0 or lower.
|
# value of 3.4.0 or lower.
|
||||||
|
|
||||||
project( YAP )
|
project( YAP )
|
||||||
@ -33,13 +33,13 @@ include(FindPackageHandleStandardArgs)
|
|||||||
include (GNUInstallDirs)
|
include (GNUInstallDirs)
|
||||||
|
|
||||||
# Creates and names a library, sets it as either STATIC
|
# Creates and names a library, sets it as either STATIC
|
||||||
# or SHARED, and provides the relative paths to its source code.
|
# or SHARED, and provides the relative paths to its source code.z
|
||||||
# You can define multiple libraries, and CMake builds it for you.
|
# You can define libraries, and CMake builds it for you.
|
||||||
# Gradle automatically packages shared libraries with your APK.
|
# Gradle automatically packages shared libraries with your APK.
|
||||||
|
|
||||||
#cross-compilation support
|
#cross-compilation support
|
||||||
# Search packages for host system instead of packages for target system
|
# Search packages for host system instead of packages for target system
|
||||||
# in case of cross compilation these macro should be defined by toolchain file
|
# in case of cross compilation define these macro by toolchain file
|
||||||
if(NOT COMMAND find_host_package)
|
if(NOT COMMAND find_host_package)
|
||||||
macro(find_host_package)
|
macro(find_host_package)
|
||||||
find_package(${ARGN})
|
find_package(${ARGN})
|
||||||
@ -53,6 +53,7 @@ endif()
|
|||||||
|
|
||||||
option(BUILD_SHARED_LIBS "Build shared library" ON)
|
option(BUILD_SHARED_LIBS "Build shared library" ON)
|
||||||
set (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
|
set (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
|
||||||
|
set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
||||||
|
|
||||||
include(Prelims NO_POLICY_SCOPE)
|
include(Prelims NO_POLICY_SCOPE)
|
||||||
|
|
||||||
@ -69,6 +70,8 @@ if (ANDROID)
|
|||||||
)
|
)
|
||||||
endif (ANDROID)
|
endif (ANDROID)
|
||||||
|
|
||||||
|
set_property( SOURCE ${LIBYAP_SOURCES} APPEND PROPERTY COMPILE_DEFINITIONS YAP_KERNEL=1)
|
||||||
|
|
||||||
add_definitions(-DUSE_MYDDAS=1 -DMYDDAS_SQLITE3=1)
|
add_definitions(-DUSE_MYDDAS=1 -DMYDDAS_SQLITE3=1)
|
||||||
|
|
||||||
if (MYSQL_FOUND)
|
if (MYSQL_FOUND)
|
||||||
@ -82,6 +85,9 @@ if (ODBC_FOUND)
|
|||||||
if (MYSQL_POSTGRES)
|
if (MYSQL_POSTGRES)
|
||||||
add_definitions(= -DMYDDAS_POSTGRES=1)
|
add_definitions(= -DMYDDAS_POSTGRES=1)
|
||||||
endif()
|
endif()
|
||||||
|
if (MYSQL_POSTGRES)
|
||||||
|
set(SWIG_SOURCES packages/swig/python/yap_PYTHONwrapper.cxx )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
if (ANDROID)
|
if (ANDROID)
|
||||||
@ -93,34 +99,17 @@ if (MYSQL_POSTGRES)
|
|||||||
ADD_SUBDIRECTORY(CXX)
|
ADD_SUBDIRECTORY(CXX)
|
||||||
|
|
||||||
|
|
||||||
set (SWIG_FILES ${CMAKE_SOURCE_DIR}/../generated/jni/yap_wrap.cpp )
|
else()
|
||||||
|
|
||||||
else ()
|
|
||||||
set(YLIBS
|
|
||||||
$<TARGET_OBJECTS:core>
|
|
||||||
$<TARGET_OBJECTS:libYAPOs>
|
|
||||||
$<TARGET_OBJECTS:libOPTYap>
|
|
||||||
$<TARGET_OBJECTS:myddas>
|
|
||||||
$<TARGET_OBJECTS:Yapsqlite3>
|
|
||||||
$<TARGET_OBJECTS:libswi>
|
|
||||||
$<TARGET_OBJECTS:utf8proc>
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
|
List (APPEND YLIBS $<TARGET_OBJECTS:libOPTYap> )
|
||||||
|
List (APPEND YLIBS $<TARGET_OBJECTS:libYAPOs> )
|
||||||
|
List (APPEND YLIBS $<TARGET_OBJECTS:utf8proc> )
|
||||||
|
List (APPEND YLIBS $<TARGET_OBJECTS:myddas> )
|
||||||
|
List (APPEND YLIBS $<TARGET_OBJECTS:Yapsqlite3> )
|
||||||
|
List (APPEND YLIBS $<TARGET_OBJECTS:libswi> )
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
list (APPEND YLIBS $<TARGET_OBJECTS:YapC++>)
|
List (APPEND YLIBS $<TARGET_OBJECTS:YAP++> )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
add_component (core
|
|
||||||
${ENGINE_SOURCES}
|
|
||||||
${SWIG_FILES}
|
|
||||||
${C_INTERFACE_SOURCES}
|
|
||||||
${STATIC_SOURCES}
|
|
||||||
${ALL_SOURCES}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
add_library( # Sets the name of the library.
|
add_library( # Sets the name of the library.
|
||||||
@ -128,18 +117,26 @@ add_library( # Sets the name of the library.
|
|||||||
|
|
||||||
# Sets the library as a shared library.
|
# Sets the library as a shared library.
|
||||||
SHARED
|
SHARED
|
||||||
|
|
||||||
|
${ENGINE_SOURCES}
|
||||||
|
${C_INTERFACE_SOURCES}
|
||||||
|
//${STATIC_SOURCES}
|
||||||
|
# cmake object libraries
|
||||||
${YLIBS}
|
${YLIBS}
|
||||||
${WINDLLS}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
target_link_libraries(libYap ${WINDLLS})
|
||||||
|
endif (WIN32)
|
||||||
|
|
||||||
include(libYap NO_POLICY_SCOPE)
|
include(libYap NO_POLICY_SCOPE)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
if (USE_READLINE)
|
if (USE_READLINE)
|
||||||
target_link_libraries(libYap ${READLINE_LIBRARIES})
|
target_link_libraries(libYap ${READLINE_LIBRARIES})
|
||||||
endif (USE_READLINE)
|
endif (USE_READLINE)
|
||||||
|
|
||||||
|
|
||||||
if (ANDROID)
|
if (ANDROID)
|
||||||
add_dependencies(libYap plmyddas )
|
add_dependencies(libYap plmyddas )
|
||||||
|
|
||||||
@ -151,6 +148,5 @@ set_target_properties(libYap
|
|||||||
PROPERTIES OUTPUT_NAME Yap
|
PROPERTIES OUTPUT_NAME Yap
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
MY_include(Packages NO_POLICY_SCOPE)
|
MY_include(Packages NO_POLICY_SCOPE)
|
||||||
include(Config NO_POLICY_SCOPE)
|
include(Config NO_POLICY_SCOPE)
|
||||||
|
10
H/LOCALS
10
H/LOCALS
@ -145,7 +145,7 @@ ADDR db_vec0 =NULL
|
|||||||
struct RB_red_blk_node* db_root =NULL
|
struct RB_red_blk_node* db_root =NULL
|
||||||
struct RB_red_blk_node* db_nil =NULL
|
struct RB_red_blk_node* db_nil =NULL
|
||||||
|
|
||||||
sigjmp_buf gc_restore void
|
sigjmp_buf* gc_restore void
|
||||||
CELL* extra_gc_cells void
|
CELL* extra_gc_cells void
|
||||||
CELL* extra_gc_cells_base void
|
CELL* extra_gc_cells_base void
|
||||||
CELL* extra_gc_cells_top void
|
CELL* extra_gc_cells_top void
|
||||||
@ -160,8 +160,8 @@ struct mem_blk* CMemFirstBlock =NULL
|
|||||||
UInt CMemFirstBlockSz =0L
|
UInt CMemFirstBlockSz =0L
|
||||||
|
|
||||||
// Variable used by the compiler to store number of permanent vars in a clause
|
// Variable used by the compiler to store number of permanent vars in a clause
|
||||||
int nperm =0L
|
int nperm =0
|
||||||
|
int jMP =0
|
||||||
// Thread Local Area for Labels
|
// Thread Local Area for Labels
|
||||||
Int* LabelFirstArray =NULL
|
Int* LabelFirstArray =NULL
|
||||||
UInt LabelFirstArraySz =0L
|
UInt LabelFirstArraySz =0L
|
||||||
@ -198,7 +198,7 @@ ADDR TrailTop void
|
|||||||
yap_error_descriptor_t* ActiveError =calloc(sizeof(yap_error_descriptor_t),1)
|
yap_error_descriptor_t* ActiveError =calloc(sizeof(yap_error_descriptor_t),1)
|
||||||
/// pointer to an exception term, from throw
|
/// pointer to an exception term, from throw
|
||||||
|
|
||||||
jmp_buf IOBotch void
|
jmp_buf* IOBotch void
|
||||||
TokEntry* tokptr void
|
TokEntry* tokptr void
|
||||||
TokEntry* toktide void
|
TokEntry* toktide void
|
||||||
VarEntry* VarTable void
|
VarEntry* VarTable void
|
||||||
@ -209,7 +209,7 @@ CELL* CommentsNextChar void
|
|||||||
wchar_t* CommentsBuff void
|
wchar_t* CommentsBuff void
|
||||||
size_t CommentsBuffPos void
|
size_t CommentsBuffPos void
|
||||||
size_t CommentsBuffLim void
|
size_t CommentsBuffLim void
|
||||||
sigjmp_buf RestartEnv void
|
sigjmp_buf* RestartEnv void
|
||||||
char FileNameBuf[YAP_FILENAME_MAX+1] void
|
char FileNameBuf[YAP_FILENAME_MAX+1] void
|
||||||
char FileNameBuf2[YAP_FILENAME_MAX+1] void
|
char FileNameBuf2[YAP_FILENAME_MAX+1] void
|
||||||
|
|
||||||
|
@ -302,6 +302,8 @@ INLINE_ONLY inline EXTERN Term __MkStringTerm(const char *s USES_REGS) {
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MkUStringTerm(i) __MkUStringTerm((i)PASS_REGS)
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term
|
INLINE_ONLY inline EXTERN Term
|
||||||
__MkUStringTerm(const unsigned char *s USES_REGS);
|
__MkUStringTerm(const unsigned char *s USES_REGS);
|
||||||
|
|
||||||
|
39
H/Yap.h
39
H/Yap.h
@ -129,37 +129,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif /* defined(HAVE_NULLPTR) */
|
#endif /* defined(HAVE_NULLPTR) */
|
||||||
|
|
||||||
/* Microsoft's Visual C++ Compiler */
|
|
||||||
#ifdef _MSC_VER /* adjust a config.h from mingw32 to work with vc++ */
|
|
||||||
#ifdef HAVE_GCC
|
|
||||||
#undef HAVE_GCC
|
|
||||||
#endif /* HAVE_GCC */
|
|
||||||
#ifdef USE_THREADED_CODE
|
|
||||||
#undef USE_THREADED_CODE
|
|
||||||
#endif /* USE_THREADED_CODE */
|
|
||||||
#define inline __inline
|
|
||||||
#define YAP_VERSION "YAP-6.3.4"
|
|
||||||
#define BIN_DIR "c:\\Yap\\bin"
|
|
||||||
#define LIB_DIR "c:\\Yap\\lib\\Yap"
|
|
||||||
#define SHARE_DIR "c:\\Yap\\share\\Yap"
|
|
||||||
#ifdef HOST_ALIAS
|
|
||||||
#undef HOST_ALIAS
|
|
||||||
#endif /* HOST_ALIAS */
|
|
||||||
#define HOST_ALIAS "i386-pc-win32"
|
|
||||||
#ifdef HAVE_IEEEFP_H
|
|
||||||
#undef HAVE_IEEEFP_H
|
|
||||||
#endif /* HAVE_IEEEFP_H */
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#undef HAVE_UNISTD_H
|
|
||||||
#endif /* HAVE_UNISTD_H */
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
|
||||||
#undef HAVE_SYS_TIME_H
|
|
||||||
#endif /* HAVE_SYS_TIME_H */
|
|
||||||
#endif /* _MSC_VER */
|
|
||||||
|
|
||||||
#if HAVE_TIME_H
|
|
||||||
#include <time.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __MINGW32__
|
#ifdef __MINGW32__
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
@ -727,10 +696,10 @@ typedef struct thandle {
|
|||||||
struct timeval *start_of_times_sysp;
|
struct timeval *start_of_times_sysp;
|
||||||
struct timeval *last_time_sysp;
|
struct timeval *last_time_sysp;
|
||||||
#elif _WIN32
|
#elif _WIN32
|
||||||
struct _FILETIME *start_of_timesp;
|
win64_time_t *start_of_timesp;
|
||||||
struct _FILETIME *last_timep;
|
win64_time_t *last_timep;
|
||||||
struct _FILETIME *start_of_times_sysp;
|
win64_time_t *start_of_times_sysp;
|
||||||
struct _FILETIME *last_time_sysp;
|
win64_time_t *last_time_sysp;
|
||||||
#endif
|
#endif
|
||||||
} yap_thandle;
|
} yap_thandle;
|
||||||
#endif /* THREADS */
|
#endif /* THREADS */
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* *
|
* *
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
* *
|
* *
|
||||||
* File: compile.h *
|
* File: YapCompile.h *
|
||||||
* Last rev: *
|
* Last rev: *
|
||||||
* mods: *
|
* mods: *
|
||||||
* comments: compiler data structures and routines *
|
* comments: compiler data structures and routines *
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* *
|
* *
|
||||||
* YAP Prolog @(#)eval.h 1.2
|
* YAP Prolog @(#)YapEval.h 1.2
|
||||||
* *
|
* *
|
||||||
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
||||||
* *
|
* *
|
||||||
@ -8,7 +8,7 @@
|
|||||||
* *
|
* *
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
* *
|
* *
|
||||||
* File: eval.h *
|
* File: YapEval.h *
|
||||||
* Last rev: *
|
* Last rev: *
|
||||||
* mods: *
|
* mods: *
|
||||||
* comments: arithmetical functions info *
|
* comments: arithmetical functions info *
|
||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
@file eval.h
|
@file YapEval.h
|
||||||
|
|
||||||
@defgroup arithmetic Arithmetic in YAP
|
@defgroup arithmetic Arithmetic in YAP
|
||||||
|
|
@ -154,7 +154,7 @@ typedef struct thandle {
|
|||||||
/*******************
|
/*******************
|
||||||
this is the data base: everything here should be possible to restore
|
this is the data base: everything here should be possible to restore
|
||||||
********************/
|
********************/
|
||||||
#if __INIT_C__
|
#if __INIT_C__ || defined(MSC_VER)
|
||||||
#define EXTERNAL
|
#define EXTERNAL
|
||||||
#else
|
#else
|
||||||
#define EXTERNAL extern
|
#define EXTERNAL extern
|
||||||
|
66
H/YapTags.h
66
H/YapTags.h
@ -166,13 +166,15 @@ INLINE_ONLY inline EXTERN Term *VarOfTerm(Term t) { return (Term *)(t); }
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkVarTerm__(USES_REGS1);
|
INLINE_ONLY inline EXTERN Term MkVarTerm__(USES_REGS1);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkVarTerm__(USES_REGS1) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Term MkVarTerm__(USES_REGS1) {
|
||||||
return (Term)((*HR = 0, HR++));
|
return (Term)((*HR = 0, HR++));
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsUnboundVar(Term *);
|
INLINE_ONLY inline EXTERN bool IsUnboundVar(Term *);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsUnboundVar(Term *t) { return (int)(*(t) ==
|
INLINE_ONLY
|
||||||
|
inline EXTERN bool IsUnboundVar(Term *t) { return (int)(*(t) ==
|
||||||
0); }
|
0); }
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -181,13 +183,15 @@ INLINE_ONLY inline EXTERN bool IsUnboundVar(Term *t) { return (int)(*(t) ==
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkVarTerm__(USES_REGS1);
|
INLINE_ONLY inline EXTERN Term MkVarTerm__(USES_REGS1);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkVarTerm__(USES_REGS1) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Term MkVarTerm__(USES_REGS1) {
|
||||||
return (Term)((*HR = (CELL)HR, HR++));
|
return (Term)((*HR = (CELL)HR, HR++));
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsUnboundVar(Term *);
|
INLINE_ONLY inline EXTERN bool IsUnboundVar(Term *);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsUnboundVar(Term *t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN bool IsUnboundVar(Term *t) {
|
||||||
return *(t) == (Term)(t);
|
return *(t) == (Term)(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,13 +199,15 @@ INLINE_ONLY inline EXTERN bool IsUnboundVar(Term *t) {
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN CELL *PtrOfTerm(Term);
|
INLINE_ONLY inline EXTERN CELL *PtrOfTerm(Term);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN CELL *PtrOfTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN CELL *PtrOfTerm(Term t) {
|
||||||
return (CELL *)(*(CELL *)(t));
|
return (CELL *)(*(CELL *)(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Functor FunctorOfTerm(Term);
|
INLINE_ONLY inline EXTERN Functor FunctorOfTerm(Term);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Functor FunctorOfTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Functor FunctorOfTerm(Term t) {
|
||||||
return (Functor)(*RepAppl(t));
|
return (Functor)(*RepAppl(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,13 +215,15 @@ INLINE_ONLY inline EXTERN Functor FunctorOfTerm(Term t) {
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkAtomTerm(Atom);
|
INLINE_ONLY inline EXTERN Term MkAtomTerm(Atom);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkAtomTerm(Atom a) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Term MkAtomTerm(Atom a) {
|
||||||
return (Term)(AtomTag | (CELL)(a));
|
return (Term)(AtomTag | (CELL)(a));
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Atom AtomOfTerm(Term t);
|
INLINE_ONLY inline EXTERN Atom AtomOfTerm(Term t);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Atom AtomOfTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Atom AtomOfTerm(Term t) {
|
||||||
return (Atom)((~AtomTag & (CELL)(t)));
|
return (Atom)((~AtomTag & (CELL)(t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,13 +231,15 @@ INLINE_ONLY inline EXTERN Atom AtomOfTerm(Term t) {
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkAtomTerm(Atom);
|
INLINE_ONLY inline EXTERN Term MkAtomTerm(Atom);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkAtomTerm(Atom at) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Term MkAtomTerm(Atom at) {
|
||||||
return (Term)(TAGGEDA((CELL)AtomTag, (CELL)(at)));
|
return (Term)(TAGGEDA((CELL)AtomTag, (CELL)(at)));
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Atom AtomOfTerm(Term t);
|
INLINE_ONLY inline EXTERN Atom AtomOfTerm(Term t);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Atom AtomOfTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Atom AtomOfTerm(Term t) {
|
||||||
return (Atom)(NonTagPart(t));
|
return (Atom)(NonTagPart(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,13 +247,15 @@ INLINE_ONLY inline EXTERN Atom AtomOfTerm(Term t) {
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsAtomTerm(Term);
|
INLINE_ONLY inline EXTERN bool IsAtomTerm(Term);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsAtomTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN bool IsAtomTerm(Term t) {
|
||||||
return CHKTAG((t), AtomTag);
|
return CHKTAG((t), AtomTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkIntTerm(Int);
|
INLINE_ONLY inline EXTERN Term MkIntTerm(Int);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkIntTerm(Int n) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Term MkIntTerm(Int n) {
|
||||||
return (Term)(TAGGED(NumberTag, (n)));
|
return (Term)(TAGGED(NumberTag, (n)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,19 +266,22 @@ INLINE_ONLY inline EXTERN Term MkIntTerm(Int n) {
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkIntConstant(Int);
|
INLINE_ONLY inline EXTERN Term MkIntConstant(Int);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term MkIntConstant(Int n) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Term MkIntConstant(Int n) {
|
||||||
return (Term)(NONTAGGED(NumberTag, (n)));
|
return (Term)(NONTAGGED(NumberTag, (n)));
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsIntTerm(Term);
|
INLINE_ONLY inline EXTERN bool IsIntTerm(Term);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsIntTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN bool IsIntTerm(Term t) {
|
||||||
return CHKTAG((t), NumberTag);
|
return CHKTAG((t), NumberTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY EXTERN inline Term MkPairTerm__(Term head, Term tail USES_REGS);
|
INLINE_ONLY EXTERN inline Term MkPairTerm__(Term head, Term tail USES_REGS);
|
||||||
|
|
||||||
INLINE_ONLY EXTERN inline Term MkPairTerm__(Term head, Term tail USES_REGS) {
|
INLINE_ONLY
|
||||||
|
EXTERN inline Term MkPairTerm__(Term head, Term tail USES_REGS) {
|
||||||
CELL *p = HR;
|
CELL *p = HR;
|
||||||
|
|
||||||
HR[0] = head;
|
HR[0] = head;
|
||||||
@ -308,20 +323,23 @@ INLINE_ONLY EXTERN inline Term MkPairTerm__(Term head, Term tail USES_REGS) {
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term __MkIntegerTerm(Int USES_REGS);
|
INLINE_ONLY inline EXTERN Term __MkIntegerTerm(Int USES_REGS);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term __MkIntegerTerm(Int n USES_REGS) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Term __MkIntegerTerm(Int n USES_REGS) {
|
||||||
return (Term)(IntInBnd(n) ? MkIntTerm(n) : MkLongIntTerm(n));
|
return (Term)(IntInBnd(n) ? MkIntTerm(n) : MkLongIntTerm(n));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsIntegerTerm(Term);
|
INLINE_ONLY inline EXTERN bool IsIntegerTerm(Term);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsIntegerTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN bool IsIntegerTerm(Term t) {
|
||||||
return (int)(IsIntTerm(t) || IsLongIntTerm(t));
|
return (int)(IsIntTerm(t) || IsLongIntTerm(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Int IntegerOfTerm(Term);
|
INLINE_ONLY inline EXTERN Int IntegerOfTerm(Term);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Int IntegerOfTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Int IntegerOfTerm(Term t) {
|
||||||
|
|
||||||
return (Int)(IsIntTerm(t) ? IntOfTerm(t) : LongIntOfTerm(t));
|
return (Int)(IsIntTerm(t) ? IntOfTerm(t) : LongIntOfTerm(t));
|
||||||
}
|
}
|
||||||
@ -332,7 +350,8 @@ INLINE_ONLY inline EXTERN Int IntegerOfTerm(Term t) {
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term __MkAddressTerm(void *USES_REGS);
|
INLINE_ONLY inline EXTERN Term __MkAddressTerm(void *USES_REGS);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term __MkAddressTerm(void *n USES_REGS) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN Term __MkAddressTerm(void *n USES_REGS) {
|
||||||
return __MkIntegerTerm((Int)n PASS_REGS);
|
return __MkIntegerTerm((Int)n PASS_REGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,20 +359,23 @@ INLINE_ONLY inline EXTERN Term __MkAddressTerm(void *n USES_REGS) {
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsAddressTerm(Term);
|
INLINE_ONLY inline EXTERN bool IsAddressTerm(Term);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN bool IsAddressTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN bool IsAddressTerm(Term t) {
|
||||||
return (bool)IsIntegerTerm(t);
|
return (bool)IsIntegerTerm(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN void *AddressOfTerm(Term);
|
INLINE_ONLY inline EXTERN void *AddressOfTerm(Term);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN void *AddressOfTerm(Term t) {
|
INLINE_ONLY
|
||||||
|
inline EXTERN void *AddressOfTerm(Term t) {
|
||||||
return (void *)(IsIntTerm(t) ? IntOfTerm(t) : LongIntOfTerm(t));
|
return (void *)(IsIntTerm(t) ? IntOfTerm(t) : LongIntOfTerm(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Int IsPairTermOrNil (Term);
|
INLINE_ONLY inline EXTERN Int IsPairTermOrNil (Term);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN Int
|
INLINE_ONLY
|
||||||
|
inline EXTERN Int
|
||||||
IsPairOrNilTerm (Term t)
|
IsPairOrNilTerm (Term t)
|
||||||
{
|
{
|
||||||
return IsPairTerm(t) || t == TermNil;
|
return IsPairTerm(t) || t == TermNil;
|
||||||
|
27
H/YapTerm.h
27
H/YapTerm.h
@ -33,7 +33,7 @@ typedef void *Atom;
|
|||||||
(((CELL)(X) + (sizeof(TYPE) - 1)) & ~(sizeof(TYPE) - 1))
|
(((CELL)(X) + (sizeof(TYPE) - 1)) & ~(sizeof(TYPE) - 1))
|
||||||
|
|
||||||
#ifndef EXTERN
|
#ifndef EXTERN
|
||||||
#ifdef _MSC_VER
|
#ifdef MSC_VER
|
||||||
#define EXTERN
|
#define EXTERN
|
||||||
#else
|
#else
|
||||||
#define EXTERN extern
|
#define EXTERN extern
|
||||||
@ -44,51 +44,30 @@ typedef void *Atom;
|
|||||||
** and integer types Short and UShort with half the size of a ptr */
|
** and integer types Short and UShort with half the size of a ptr */
|
||||||
|
|
||||||
#if defined(PRIdPTR)
|
#if defined(PRIdPTR)
|
||||||
#define Int_FORMAT "%" PRIdPTR
|
|
||||||
#define Int_ANYFORMAT "%" PRIuPTR
|
|
||||||
#define UInt_FORMAT "%" PRIuPTR
|
|
||||||
#define Int_F PRIdPTR
|
|
||||||
#define Int_ANYF PRIuPTR
|
|
||||||
#define UInt_F PRIuPTR
|
|
||||||
|
|
||||||
typedef intptr_t Int;
|
typedef intptr_t Int;
|
||||||
typedef uintptr_t UInt;
|
typedef uintptr_t UInt;
|
||||||
|
|
||||||
#elif defined(_WIN64)
|
#elif defined(_WIN64)
|
||||||
|
|
||||||
|
|
||||||
typedef int64_t Int;
|
typedef int64_t Int;
|
||||||
typedef uint64_t UInt;
|
typedef uint64_t UInt;
|
||||||
#define Int_FORMAT "%I64d"
|
|
||||||
#define UInt_FORMAT "%I64u"
|
|
||||||
#define Int_F "I64d"
|
|
||||||
#define UInt_F "I64u"
|
|
||||||
|
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
|
|
||||||
typedef int32_t Int;
|
typedef int32_t Int;
|
||||||
typedef uint32_t UInt;
|
typedef uint32_t UInt;
|
||||||
#define Int_FORMAT "%I32d"
|
|
||||||
#define UInt_FORMAT "%I32u"
|
|
||||||
#define Int_F "I32d"
|
|
||||||
#define UInt_F "I32u"
|
|
||||||
|
|
||||||
#elif SIZEOF_LONG_INT == SIZEOF_INT_P
|
#elif SIZEOF_LONG_INT == SIZEOF_INT_P
|
||||||
|
|
||||||
typedef long int Int;
|
typedef long int Int;
|
||||||
typedef unsigned long int UInt;
|
typedef unsigned long int UInt;
|
||||||
#define Int_FORMAT "%ld"
|
|
||||||
#define UInt_FORMAT "%uld"
|
|
||||||
#define Int_F "ld"
|
|
||||||
#define UInt_F "uld"
|
|
||||||
|
|
||||||
#elif SIZEOF_INT == SIZEOF_INT_P
|
#elif SIZEOF_INT == SIZEOF_INT_P
|
||||||
|
|
||||||
typedef int Int;
|
typedef int Int;
|
||||||
typedef unsigned int UInt;
|
typedef unsigned int UInt;
|
||||||
#define Int_FORMAT "%l"
|
|
||||||
#define UInt_FORMAT "%ul"
|
|
||||||
#define Int_F "l"
|
|
||||||
#define UInt_F "ul"
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error Yap require integer types of the same size as a pointer
|
#error Yap require integer types of the same size as a pointer
|
||||||
@ -107,6 +86,8 @@ typedef uint32_t BITS32;
|
|||||||
#define CellSize sizeof(CELL)
|
#define CellSize sizeof(CELL)
|
||||||
#define SmallSize sizeof(SMALLUNSGN)
|
#define SmallSize sizeof(SMALLUNSGN)
|
||||||
|
|
||||||
|
#include "YapFormat.h"
|
||||||
|
|
||||||
/*************************************************************************************************
|
/*************************************************************************************************
|
||||||
type casting macros
|
type casting macros
|
||||||
*************************************************************************************************/
|
*************************************************************************************************/
|
||||||
|
17
H/YapText.h
17
H/YapText.h
@ -31,6 +31,23 @@
|
|||||||
#include "../utf8proc/utf8proc.h"
|
#include "../utf8proc/utf8proc.h"
|
||||||
#include "Yap.h"
|
#include "Yap.h"
|
||||||
|
|
||||||
|
#define ReleaseAndReturn(r) \
|
||||||
|
{ \
|
||||||
|
pop_text_stack(l); \
|
||||||
|
return r; \
|
||||||
|
}
|
||||||
|
#define release_cut_fail() \
|
||||||
|
{ \
|
||||||
|
pop_text_stack(l); \
|
||||||
|
cut_fail(); \
|
||||||
|
}
|
||||||
|
#define release_cut_succeed() \
|
||||||
|
{ \
|
||||||
|
pop_text_stack(l); \
|
||||||
|
cut_succeed(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// allocate a temporary text block
|
/// allocate a temporary text block
|
||||||
///
|
///
|
||||||
extern void *Malloc(size_t sz USES_REGS);
|
extern void *Malloc(size_t sz USES_REGS);
|
||||||
|
@ -13,12 +13,6 @@
|
|||||||
* version: $Id: Yapproto.h,v 1.90 2008-08-07 20:51:23 vsc Exp $ *
|
* version: $Id: Yapproto.h,v 1.90 2008-08-07 20:51:23 vsc Exp $ *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
#define X_API __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define X_API
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* prototype file for Yap */
|
/* prototype file for Yap */
|
||||||
|
|
||||||
/* absmi.c */
|
/* absmi.c */
|
||||||
@ -309,6 +303,7 @@ extern struct vfs *Yap_InitAssetManager(void);
|
|||||||
|
|
||||||
/* load_foreign.c */
|
/* load_foreign.c */
|
||||||
extern void Yap_InitLoadForeign(void);
|
extern void Yap_InitLoadForeign(void);
|
||||||
|
extern bool Yap_LateInit(const char s[]);
|
||||||
|
|
||||||
/* mavar.c */
|
/* mavar.c */
|
||||||
extern void Yap_InitMaVarCPreds(void);
|
extern void Yap_InitMaVarCPreds(void);
|
||||||
|
@ -139,7 +139,7 @@ register struct yami *P1REG asm("bp"); /* can't use yamop before Yap.h */
|
|||||||
|
|
||||||
#include "Yap.h"
|
#include "Yap.h"
|
||||||
#include "clause.h"
|
#include "clause.h"
|
||||||
#include "eval.h"
|
#include "YapEval.h"
|
||||||
#ifdef HAVE_STRING_H
|
#ifdef HAVE_STRING_H
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#endif
|
#endif
|
||||||
@ -2327,6 +2327,8 @@ static inline void prune(choiceptr cp USES_REGS) {
|
|||||||
if (POP_CHOICE_POINT(B->cp_b)) {
|
if (POP_CHOICE_POINT(B->cp_b)) {
|
||||||
POP_EXECUTE();
|
POP_EXECUTE();
|
||||||
}
|
}
|
||||||
|
if (B->cp_b == NULL)
|
||||||
|
break;
|
||||||
B = B->cp_b;
|
B = B->cp_b;
|
||||||
}
|
}
|
||||||
if (POP_CHOICE_POINT(B->cp_b)) {
|
if (POP_CHOICE_POINT(B->cp_b)) {
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#ifndef BLOBS_H
|
#ifndef BLOBS_H
|
||||||
#define BLOBS_H
|
#define BLOBS_H
|
||||||
|
|
||||||
#ifndef X_API
|
#if !defined(X_API) && !defined(SWIGYAP)
|
||||||
#if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(PL_KERNEL)
|
#if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(PL_KERNEL)
|
||||||
#define X_API __declspec(dllexport)
|
#define X_API __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
|
@ -250,6 +250,8 @@
|
|||||||
|
|
||||||
#define LOCAL_nperm LOCAL->nperm_
|
#define LOCAL_nperm LOCAL->nperm_
|
||||||
#define REMOTE_nperm(wid) REMOTE(wid)->nperm_
|
#define REMOTE_nperm(wid) REMOTE(wid)->nperm_
|
||||||
|
#define LOCAL_jMP LOCAL->jMP_
|
||||||
|
#define REMOTE_jMP(wid) REMOTE(wid)->jMP_
|
||||||
|
|
||||||
#define LOCAL_LabelFirstArray LOCAL->LabelFirstArray_
|
#define LOCAL_LabelFirstArray LOCAL->LabelFirstArray_
|
||||||
#define REMOTE_LabelFirstArray(wid) REMOTE(wid)->LabelFirstArray_
|
#define REMOTE_LabelFirstArray(wid) REMOTE(wid)->LabelFirstArray_
|
||||||
|
@ -126,7 +126,7 @@ typedef struct worker_local {
|
|||||||
ADDR db_vec0_;
|
ADDR db_vec0_;
|
||||||
struct RB_red_blk_node* db_root_;
|
struct RB_red_blk_node* db_root_;
|
||||||
struct RB_red_blk_node* db_nil_;
|
struct RB_red_blk_node* db_nil_;
|
||||||
sigjmp_buf gc_restore_;
|
sigjmp_buf* gc_restore_;
|
||||||
CELL* extra_gc_cells_;
|
CELL* extra_gc_cells_;
|
||||||
CELL* extra_gc_cells_base_;
|
CELL* extra_gc_cells_base_;
|
||||||
CELL* extra_gc_cells_top_;
|
CELL* extra_gc_cells_top_;
|
||||||
@ -140,6 +140,7 @@ typedef struct worker_local {
|
|||||||
UInt CMemFirstBlockSz_;
|
UInt CMemFirstBlockSz_;
|
||||||
// Variable used by the compiler to store number of permanent vars in a clause
|
// Variable used by the compiler to store number of permanent vars in a clause
|
||||||
int nperm_;
|
int nperm_;
|
||||||
|
int jMP_;
|
||||||
// Thread Local Area for Labels
|
// Thread Local Area for Labels
|
||||||
Int* LabelFirstArray_;
|
Int* LabelFirstArray_;
|
||||||
UInt LabelFirstArraySz_;
|
UInt LabelFirstArraySz_;
|
||||||
@ -166,7 +167,7 @@ typedef struct worker_local {
|
|||||||
/* error handling info, designed to be easy to pass to the foreign world */
|
/* error handling info, designed to be easy to pass to the foreign world */
|
||||||
yap_error_descriptor_t* ActiveError_;
|
yap_error_descriptor_t* ActiveError_;
|
||||||
/// pointer to an exception term, from throw
|
/// pointer to an exception term, from throw
|
||||||
jmp_buf IOBotch_;
|
jmp_buf* IOBotch_;
|
||||||
TokEntry* tokptr_;
|
TokEntry* tokptr_;
|
||||||
TokEntry* toktide_;
|
TokEntry* toktide_;
|
||||||
VarEntry* VarTable_;
|
VarEntry* VarTable_;
|
||||||
@ -177,7 +178,7 @@ typedef struct worker_local {
|
|||||||
wchar_t* CommentsBuff_;
|
wchar_t* CommentsBuff_;
|
||||||
size_t CommentsBuffPos_;
|
size_t CommentsBuffPos_;
|
||||||
size_t CommentsBuffLim_;
|
size_t CommentsBuffLim_;
|
||||||
sigjmp_buf RestartEnv_;
|
sigjmp_buf* RestartEnv_;
|
||||||
char FileNameBuf_[YAP_FILENAME_MAX+1];
|
char FileNameBuf_[YAP_FILENAME_MAX+1];
|
||||||
char FileNameBuf2_[YAP_FILENAME_MAX+1];
|
char FileNameBuf2_[YAP_FILENAME_MAX+1];
|
||||||
struct TextBuffer_manager* TextBuffer_;
|
struct TextBuffer_manager* TextBuffer_;
|
||||||
|
@ -139,7 +139,8 @@ static void InitWorker(int wid) {
|
|||||||
REMOTE_CMemFirstBlock(wid) = NULL;
|
REMOTE_CMemFirstBlock(wid) = NULL;
|
||||||
REMOTE_CMemFirstBlockSz(wid) = 0L;
|
REMOTE_CMemFirstBlockSz(wid) = 0L;
|
||||||
|
|
||||||
REMOTE_nperm(wid) = 0L;
|
REMOTE_nperm(wid) = 0;
|
||||||
|
REMOTE_jMP(wid) = 0;
|
||||||
|
|
||||||
REMOTE_LabelFirstArray(wid) = NULL;
|
REMOTE_LabelFirstArray(wid) = NULL;
|
||||||
REMOTE_LabelFirstArraySz(wid) = 0L;
|
REMOTE_LabelFirstArraySz(wid) = 0L;
|
||||||
|
@ -145,6 +145,7 @@ static void RestoreWorker(int wid USES_REGS) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef THREADS
|
#ifdef THREADS
|
||||||
|
|
||||||
#endif /* THREADS */
|
#endif /* THREADS */
|
||||||
|
1597
H/generated/tatoms.h
1597
H/generated/tatoms.h
File diff suppressed because it is too large
Load Diff
@ -38,8 +38,8 @@ typedef enum {
|
|||||||
#define low_level_trace(Port, pred, args) low_level_trace__(Port, pred, args)
|
#define low_level_trace(Port, pred, args) low_level_trace__(Port, pred, args)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void low_level_trace__(yap_low_level_port, PredEntry *, CELL *);
|
extern bool low_level_trace__(yap_low_level_port, PredEntry *, CELL *);
|
||||||
void Yap_InitLowLevelTrace(void);
|
extern void Yap_InitLowLevelTrace(void);
|
||||||
void toggle_low_level_trace(void);
|
extern void toggle_low_level_trace(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "Yap.h"
|
#include "Yap.h"
|
||||||
#include "amijit.h"
|
#include "amijit.h"
|
||||||
#include "clause.h"
|
#include "clause.h"
|
||||||
#include "eval.h"
|
#include "YapEval.h"
|
||||||
#if HAVE_ERRNO_H
|
#if HAVE_ERRNO_H
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#else
|
#else
|
||||||
|
@ -76,16 +76,17 @@ endif (WITH_YAPOR_SBA)
|
|||||||
|
|
||||||
|
|
||||||
if (WITH_YAPOR)
|
if (WITH_YAPOR)
|
||||||
set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS YAPOR=1)
|
set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS YAPOR=1;YAP_KERNEL=1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set (POSITION_INDEPENDENT_CODE TRUE)
|
set (POSITION_INDEPENDENT_CODE TRUE)
|
||||||
|
SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS YAP_KERNEL=1 )
|
||||||
|
|
||||||
add_component (libOPTYap
|
add_component (libOPTYap
|
||||||
${OPTYap_SOURCES} )
|
${OPTYap_SOURCES} )
|
||||||
|
|
||||||
|
|
||||||
MY_set_target_properties(libOPTYap
|
My_set_target_properties(libOPTYap
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
# RPATH ${libdir} VERSION ${LIBYAPTAI_FULL_VERSION}
|
# RPATH ${libdir} VERSION ${LIBYAPTAI_FULL_VERSION}
|
||||||
# SOVERSION ${LIBYAPTAI_MAJOR_VERSION}.${LIBYAPTAI_MINOR_VERSION}
|
# SOVERSION ${LIBYAPTAI_MAJOR_VERSION}.${LIBYAPTAI_MINOR_VERSION}
|
||||||
|
@ -170,7 +170,7 @@ struct page_statistics {
|
|||||||
#define INCREMENT_AUX_STATS(STATS, BYTES, PAGES) \
|
#define INCREMENT_AUX_STATS(STATS, BYTES, PAGES) \
|
||||||
BYTES += PgEnt_bytes_in_use(STATS)
|
BYTES += PgEnt_bytes_in_use(STATS)
|
||||||
#define SHOW_PAGE_STATS_MSG(STR_NAME) \
|
#define SHOW_PAGE_STATS_MSG(STR_NAME) \
|
||||||
" %s %10" Int_F "s bytes (%ld structs in use)\n", STR_NAME
|
" %s %10" Int_F "s bytes (%" Sizet_F " ; structs in use)\n", STR_NAME
|
||||||
#define SHOW_PAGE_STATS_ARGS(STATS, STR_TYPE) \
|
#define SHOW_PAGE_STATS_ARGS(STATS, STR_TYPE) \
|
||||||
PgEnt_strs_in_use(STATS) * sizeof(STR_TYPE), PgEnt_strs_in_use(STATS)
|
PgEnt_strs_in_use(STATS) * sizeof(STR_TYPE), PgEnt_strs_in_use(STATS)
|
||||||
#endif /* USE_PAGES_MALLOC */
|
#endif /* USE_PAGES_MALLOC */
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
#include "Yatom.h"
|
#include "Yatom.h"
|
||||||
#include "YapHeap.h"
|
#include "YapHeap.h"
|
||||||
#include "eval.h"
|
#include "YapEval.h"
|
||||||
#include "tab.macros.h"
|
#include "tab.macros.h"
|
||||||
|
|
||||||
static inline sg_node_ptr
|
static inline sg_node_ptr
|
||||||
|
@ -38,6 +38,8 @@ ENDIF(WITH_CPLINT)
|
|||||||
|
|
||||||
|
|
||||||
#must be last
|
#must be last
|
||||||
|
add_subDIRECTORY (packages/python)
|
||||||
|
|
||||||
OPTION (WITH_SWIG " Enable SWIG interfaces to foreign languages" ON)
|
OPTION (WITH_SWIG " Enable SWIG interfaces to foreign languages" ON)
|
||||||
IF (WITH_SWIG)
|
IF (WITH_SWIG)
|
||||||
add_subDIRECTORY (packages/swig)
|
add_subDIRECTORY (packages/swig)
|
||||||
@ -67,7 +69,6 @@ endif()
|
|||||||
|
|
||||||
add_subDIRECTORY (packages/real)
|
add_subDIRECTORY (packages/real)
|
||||||
|
|
||||||
add_subDIRECTORY (packages/python)
|
|
||||||
|
|
||||||
add_subDIRECTORY (packages/jpl)
|
add_subDIRECTORY (packages/jpl)
|
||||||
|
|
||||||
|
@ -167,13 +167,13 @@ HEADERS = \
|
|||||||
H/attvar.h \
|
H/attvar.h \
|
||||||
H/blobs.h \
|
H/blobs.h \
|
||||||
H/clause.h \
|
H/clause.h \
|
||||||
H/compile.h \
|
H/YapCöompile.h \
|
||||||
H/corout.h \
|
H/corout.h \
|
||||||
H/dlmalloc.h \
|
H/dlmalloc.h \
|
||||||
H/dglobals.h \
|
H/dglobals.h \
|
||||||
H/dlocals.h \
|
H/dlocals.h \
|
||||||
H/dhstruct.h \
|
H/dhstruct.h \
|
||||||
H/eval.h \
|
H/YapEval.h \
|
||||||
H/heapgc.h \
|
H/heapgc.h \
|
||||||
H/hglobals.h \
|
H/hglobals.h \
|
||||||
H/hlocals.h \
|
H/hlocals.h \
|
||||||
|
@ -145,30 +145,30 @@ endif (HAVE_LIBDL)
|
|||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
check_library_exists(comdlg32 FindText "" HAVE_LIBCOMDLG32)
|
check_library_exists(comdlg32 FindText "" HAVE_LIBCOMDLG32)
|
||||||
if (HAVE_LIBCOMDLG32)
|
#if (HAVE_LIBCOMDLG32)
|
||||||
|
|
||||||
set(EXTRALIBS ${EXTRALIBS} comdlg32)
|
set(WINDLLS ${WINDLLS} comdlg32)
|
||||||
endif (HAVE_LIBCOMDLG32)
|
#endif (HAVE_LIBCOMDLG32)
|
||||||
check_library_exists(msvcrt strtok "" HAVE_LIBMSCRT)
|
check_library_exists(msvcrt strtok "" HAVE_LIBMSCRT)
|
||||||
|
|
||||||
if (HAVE_LIBMSCRT)
|
#if (HAVE_LIBMSCRT)
|
||||||
set(EXTRALIBS ${EXTRALIBS} mscrt)
|
set(WINDLLS ${WINDLLS} mscrt)
|
||||||
endif (HAVE_LIBMSCRT)
|
#endif (HAVE_LIBMSCRT)
|
||||||
check_library_exists(shell32 main "" HAVE_LIBSHELL32)
|
check_library_exists(shell32 main "" HAVE_LIBSHELL32)
|
||||||
|
|
||||||
if (HAVE_LIBSHELL32)
|
#if (HAVE_LIBSHELL32)
|
||||||
set(EXTRALIBS ${EXTRALIBS} shell32)
|
set(WINDLLS ${WINDLLS} shell32)
|
||||||
endif (HAVE_LIBSHELL32)
|
#endif (HAVE_LIBSHELL32)
|
||||||
|
|
||||||
check_library_exists(wsock32 main "" HAVE_LIBWSOCK32)
|
check_library_exists(wsock32 main "" HAVE_LIBWSOCK32)
|
||||||
if (HAVE_LIBWSOCK32)
|
#if (HAVE_LIBWSOCK32)
|
||||||
set(EXTRALIBS ${EXTRALIBS} wsock32)
|
set(WINDLLS ${WINDLLS} wsock32)
|
||||||
endif (HAVE_LIBWSOCK32)
|
#endif (HAVE_LIBWSOCK32)
|
||||||
|
|
||||||
check_library_exists(ws2_32 main "" HAVE_LIBWS2_32)
|
check_library_exists(ws2_32 main "" HAVE_LIBWS2_32)
|
||||||
if (HAVE_LIBWS2_32)
|
#if (HAVE_LIBWS2_32 OR TRUE)
|
||||||
set(EXTRALIBS ${EXTRALIBS} ws2_32)
|
set(WINDLLS ${WINDLLS} ws2_32)
|
||||||
endif (HAVE_LIBWS2_32)
|
#endif (HAVE_LIBWS2_32)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
check_library_exists(judy Judy1Set "" HAVE_LIBJUDY)
|
check_library_exists(judy Judy1Set "" HAVE_LIBJUDY)
|
||||||
|
@ -17,6 +17,7 @@ site_name( YAP_SITE )
|
|||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set (YAP_ARCH $ENV{PROCESSOR_ARCHITECTURE})
|
set (YAP_ARCH $ENV{PROCESSOR_ARCHITECTURE})
|
||||||
|
set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "MS_WIN64=1" )
|
||||||
set(YAP_SYSTEM_OPTIONS "windows " ${YAP_SYSTEM_OPTIONS})
|
set(YAP_SYSTEM_OPTIONS "windows " ${YAP_SYSTEM_OPTIONS})
|
||||||
endif()
|
endif()
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
|
@ -138,11 +138,11 @@ endif()
|
|||||||
set ( includedir "${prefix}/include")
|
set ( includedir "${prefix}/include")
|
||||||
set ( exec_prefix "${prefix}")
|
set ( exec_prefix "${prefix}")
|
||||||
set ( libdir "${exec_prefix}/lib")
|
set ( libdir "${exec_prefix}/lib")
|
||||||
set ( dlls "${exec_prefix}/lib/Yap")
|
|
||||||
set ( datadir "${datarootdir}")
|
set ( datadir "${datarootdir}")
|
||||||
set ( mandir "${datarootdir}/man")
|
set ( mandir "${datarootdir}/man")
|
||||||
set ( bindir "${exec_prefix}/bin")
|
set ( bindir "${exec_prefix}/bin")
|
||||||
set ( docdir "${datarootdir}/doc/Yap")
|
set ( docdir "${datarootdir}/doc/Yap")
|
||||||
|
set ( dlls "${exec_prefix}/lib/Yap")
|
||||||
|
|
||||||
set(YAP_ROOTDIR ${prefix})
|
set(YAP_ROOTDIR ${prefix})
|
||||||
|
|
||||||
@ -164,4 +164,3 @@ set(YAP_ROOTDIR "${prefix}")
|
|||||||
include (cudd NO-POLICY-SCOPE)
|
include (cudd NO-POLICY-SCOPE)
|
||||||
include (python NO-POLICY-SCOPE)
|
include (python NO-POLICY-SCOPE)
|
||||||
include (java NO-POLICY-SCOPE)
|
include (java NO-POLICY-SCOPE)
|
||||||
|
|
@ -124,13 +124,13 @@ list(APPEND LIBYAP_SOURCES ${C_INTERFACE_SOURCES} ${ENGINE_SOURCES})
|
|||||||
H/attvar.h
|
H/attvar.h
|
||||||
H/blobs.h
|
H/blobs.h
|
||||||
H/clause.h
|
H/clause.h
|
||||||
H/compile.h
|
H/YapCompile.h
|
||||||
H/corout.h
|
H/corout.h
|
||||||
H/dlmalloc.h
|
H/dlmalloc.h
|
||||||
H/generated/dglobals.h
|
H/generated/dglobals.h
|
||||||
H/generated/dlocals.h
|
H/generated/dlocals.h
|
||||||
H/generated/dhstruct.h
|
H/generated/dhstruct.h
|
||||||
H/eval.h
|
H/YapEval.h
|
||||||
H/heapgc.h
|
H/heapgc.h
|
||||||
H/generated/hglobals.h
|
H/generated/hglobals.h
|
||||||
H/generated/hlocals.h
|
H/generated/hlocals.h
|
||||||
|
@ -1,40 +1,73 @@
|
|||||||
|
|
||||||
option (WITH_PYTHON
|
option (WITH_PYTHON
|
||||||
"Allow Python->YAP and YAP->Python" ON)
|
"Allow Python->YAP and YAP->Python" ON)
|
||||||
|
|
||||||
|
|
||||||
|
# PYTHONLIBS_FOUND - have the Python libs been found
|
||||||
|
# PYTHON_LIBRARIES - path to the python library
|
||||||
|
# PYTHON_INCLUDE_PATH - path to where Python.h is found (deprecated)
|
||||||
|
# PYTHON_INCLUDE_DIRS - path to where Python.h is found
|
||||||
|
# PYTHON_DEBUG_LIBRARIES - path to the debug library (deprecated)
|
||||||
|
# PYTHONLIBS_VERSION_STRING - version of the Python libs found (since CMake 2.8.8)
|
||||||
|
#
|
||||||
|
#
|
||||||
IF (WITH_PYTHON)
|
IF (WITH_PYTHON)
|
||||||
|
set (Python_ADDITIONAL_VERSIONS 3.5 3.6 3.4 3.3)
|
||||||
|
|
||||||
#BREW install for Python3
|
find_package(PythonInterp)
|
||||||
|
# find_package(PythonLibs)
|
||||||
|
|
||||||
|
|
||||||
if (APPLE)
|
execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print( sysconfig.get_path( 'include' ) )"
|
||||||
foreach (i 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
|
OUTPUT_VARIABLE _ABS_PYTHON_INCLUDE_PATH
|
||||||
set (PYTHON_INCLUDE_DIRS /usr/local/Frameworks/Python.framework/Versions/${i}/Headers)
|
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||||
message("Trying Python ${i}")
|
get_filename_component ( ABS_PYTHON_INCLUDE_PATH ${_ABS_PYTHON_INCLUDE_PATH} ABSOLUTE )
|
||||||
if (EXISTS ${PYTHON_INCLUDE_DIRS})
|
|
||||||
set (PYTHON_EXECUTABLE /usr/local/bin/python${i} CACHE FILEPATH "Path to a program" FORCE )
|
set ( PYTHON_INCLUDE_DIR
|
||||||
set (PYTHON_INCLUDE_DIR /usr/local/Frameworks/Python.framework/Versions/${i}/include/python${i}m
|
${ABS_PYTHON_INCLUDE_PATH}
|
||||||
CACHE PATH "Path to a file." FORCE )
|
CACHE "PATH" "Directory with Python.h "
|
||||||
set (PYTHON_LIBRARY /usr/local/Frameworks/Python.framework/Versions/${i}/lib/libpython${i}.dylib
|
)
|
||||||
CACHE FILEPATH "Path to a library" FORCE )
|
|
||||||
break()
|
set ( PYTHON_INCLUDE_DIRS
|
||||||
endif()
|
${ABS_PYTHON_INCLUDE_PATH}
|
||||||
endforeach()
|
CACHE "PATH" "Python.h Dir (Deprecated)"
|
||||||
|
)
|
||||||
|
|
||||||
|
execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print( sysconfig.get_path( 'stdlib' ) )"
|
||||||
|
OUTPUT_VARIABLE _ABS_PYTHON_SYSLIB_PATH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||||
|
|
||||||
|
set( _ABS_PYTHON_SYSLIB_PATH
|
||||||
|
${_ABS_PYTHON_SYSLIB_PATH}/../${CMAKE_SHARED_LIBRARY_PREFIX}python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}m${CMAKE_SHARED_LIBRARY_SUFFIX} )
|
||||||
|
message("${_ABS_PYTHON_SYSLIB_PATH}")
|
||||||
|
get_filename_component ( ABS_PYTHON_SYSLIB_PATH ${_ABS_PYTHON_SYSLIB_PATH} ABSOLUTE )
|
||||||
|
|
||||||
|
|
||||||
|
set ( PYTHON_LIBRARY
|
||||||
|
${ABS_PYTHON_SYSLIB_PATH}
|
||||||
|
CACHE "FILEPATH" "Python Library"
|
||||||
|
)
|
||||||
|
set ( PYTHON_LIBRARIES
|
||||||
|
${PYTHON_LIBRARY}
|
||||||
|
CACHE "FILEPATH" "Python Library (Deprecated)"
|
||||||
|
)
|
||||||
|
if ( (EXISTS PYTHON_LIBRARY) AND ( EXISTS ${PYTHON_INCLUDE_DIR}) )
|
||||||
|
set ( PYTHONLIBS_FOUND ON)
|
||||||
else()
|
else()
|
||||||
set (Python_ADDITIONAL_VERSIONS 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.8 2.6 2.5)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(PythonInterp)
|
|
||||||
find_package(PythonLibs)
|
find_package(PythonLibs)
|
||||||
|
endif()
|
||||||
|
|
||||||
macro_log_feature (PYTHONLIBS_FOUND "Python"
|
macro_log_feature (PYTHONLIBS_FOUND "Python"
|
||||||
"Use Python System"
|
"Use Python System"
|
||||||
"http://www.python.org" FALSE)
|
"http://www.python.org" FALSE)
|
||||||
|
|
||||||
#include_directories( ${PYTHON_INCLUDE_DIRS} )
|
|
||||||
|
|
||||||
set( CMAKE_REQUIRED_INCLUDES ${PYTHON_INCLUDE_DIRS} ${CMAKE_REQUIRED_INCLUDES} )
|
include_directories( BEFORE ${PYTHON_INCLUDE_DIR} )
|
||||||
check_include_file(Python.h HAVE_PYTHON_H)
|
|
||||||
|
LIST( APPEND
|
||||||
|
CMAKE_REQUIRED_INCLUDES ${PYTHON_INCLUDE_DIR} ${CMAKE_REQUIRED_INCLUDES} )
|
||||||
|
|
||||||
|
check_include_file(Python.h HAVE_PYTHON_H)
|
||||||
|
|
||||||
|
|
||||||
endif(WITH_PYTHON)
|
endif(WITH_PYTHON)
|
||||||
|
|
||||||
|
@ -2036,5 +2036,30 @@ calls it, or to nothing if 'inline' is not supported under any name. */
|
|||||||
#define free(pt) my_free(pt)
|
#define free(pt) my_free(pt)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#ifndef __WINDOWS__
|
||||||
|
#define __WINDOWS__ 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* X_API macro
|
||||||
|
*
|
||||||
|
* @brief Linux exports all symbols by default, but WIN32 does
|
||||||
|
* not. cmake can enable exports, using CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
|
||||||
|
*
|
||||||
|
* @param _WIN32
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
#if _WIN32 && !defined(YAP_KERNEL)
|
||||||
|
#define X_API __declspec(dllimport)
|
||||||
|
#else
|
||||||
|
#define X_API
|
||||||
|
#endif
|
||||||
|
#define O_API
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
15
configure
vendored
15
configure
vendored
@ -28,13 +28,14 @@ BUILD_TYPE="Debug"
|
|||||||
PREFIX=/usr/local
|
PREFIX=/usr/local
|
||||||
LIBDIR=
|
LIBDIR=
|
||||||
CMAKE_ARGS=
|
CMAKE_ARGS=
|
||||||
|
GENERATOR=""
|
||||||
|
|
||||||
if [ -e "${TOP_SRCDIR}/.configure-custom.sh" ]; then
|
if [ -e "${TOP_SRCDIR}/.configure-custom.sh" ]; then
|
||||||
. "${TOP_SRCDIR}/.configure-custom.sh"
|
. "${TOP_SRCDIR}/.configure-custom.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
quote() {
|
quote() {
|
||||||
echo "$1" | sed -e "s|'|'\\\\''|g; 1s/^/'/; \$s/\$/'/"
|
echo "$*" | sed -e "s|'|'\\\\''|g; 1s/^/'/; \$s/\$/'/"
|
||||||
}
|
}
|
||||||
|
|
||||||
extract_var_string() {
|
extract_var_string() {
|
||||||
@ -163,6 +164,8 @@ print_help() {
|
|||||||
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
|
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
|
||||||
--mandir=DIR man documentation [DATAROOTDIR/man]
|
--mandir=DIR man documentation [DATAROOTDIR/man]
|
||||||
--docdir=DIR documentation root [DATAROOTDIR/doc/PROJECT_NAME]
|
--docdir=DIR documentation root [DATAROOTDIR/doc/PROJECT_NAME]
|
||||||
|
|
||||||
|
--generato=Generator Specify the tool used to send callss
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
first=y
|
first=y
|
||||||
@ -288,6 +291,13 @@ while [ $# != 0 ]; do
|
|||||||
"--docdir")
|
"--docdir")
|
||||||
CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_DOCDIR=$(quote "$2")"; shift;;
|
CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_DOCDIR=$(quote "$2")"; shift;;
|
||||||
|
|
||||||
|
"--generator="*)
|
||||||
|
GENERATOR="$CMAKE_ARGS -G $(1#*=)";;
|
||||||
|
|
||||||
|
"-G"|"--generator")
|
||||||
|
GENERATOR="$CMAKE_ARGS -G$(quote "$2")";
|
||||||
|
shift;;
|
||||||
|
|
||||||
"CC="*)
|
"CC="*)
|
||||||
CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_C_COMPILER=$(quote "${1#*=}")";;
|
CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_C_COMPILER=$(quote "${1#*=}")";;
|
||||||
"CXX="*)
|
"CXX="*)
|
||||||
@ -362,4 +372,5 @@ if [ "x${LDFLAGS}" != "x" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
CMAKE_CMD="${CMAKE} ${TOP_SRCDIR}"
|
CMAKE_CMD="${CMAKE} ${TOP_SRCDIR}"
|
||||||
${CMAKE_CMD} ${TOP_SRCDIR} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_INSTALL_LIBDIR=${LIBDIR} ${CMAKE_ARGS}
|
|
||||||
|
${CMAKE_CMD} "${GENERATOR}" ${TOP_SRCDIR} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_INSTALL_LIBDIR=${LIBDIR} ${CMAKE_ARGS}
|
||||||
|
46
gtags.conf
Normal file
46
gtags.conf
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 1998, 1999, 2000, 2001, 2002, 2003, 2010, 2011, 2013,
|
||||||
|
# 2015, 2016
|
||||||
|
# Tama Communications Corporation
|
||||||
|
#
|
||||||
|
# This file is part of GNU GLOBAL.
|
||||||
|
#
|
||||||
|
# This file is free software; as a special exception the author gives
|
||||||
|
# unlimited permission to copy and/or distribute it, with or without
|
||||||
|
# modifications, as long as this notice is preserved.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
|
||||||
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# *
|
||||||
|
# Configuration file for GNU GLOBAL source code tag system.
|
||||||
|
#
|
||||||
|
# Basically, GLOBAL doesn't need this file ('gtags.conf'), because it has
|
||||||
|
# default values in itsself. If you have the file as '/etc/gtags.conf' or
|
||||||
|
# "$HOME/.globalrc" in your system then GLOBAL overwrite the default values
|
||||||
|
# with the values in the file.
|
||||||
|
#
|
||||||
|
# The format is similar to termcap(5). You can specify a target with
|
||||||
|
# GTAGSLABEL environment variable. Default target is 'default'.
|
||||||
|
#
|
||||||
|
# If you want to have a common record for yourself, it is recommended to
|
||||||
|
# use the following method:
|
||||||
|
#
|
||||||
|
|
||||||
|
common:
|
||||||
|
:skip=Debug/,Release/,Threads/,mxe/,xcode/,codeblocks/,Qt/,xcode/,android/,compile_commands.json,xml/,YAPDroid/app/build/,YAPDroid/lib/build/:HTML/,HTML.pub/,tags,TAGS,ID,y.tab.c,y.tab.h,gtags.files,cscope.files,cscope.out,cscope.po.out,cscope.in.out,SCCS/,RCS/,CVS/,CVSROOT/,{arch}/,autom4te.cache/,*.orig,*.rej,*.bak,*~,#*#,*.swp,*.tmp,*_flymake.*,*_flymake:
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# A common map for both Exuberant Ctags and Universal Ctags.
|
||||||
|
# Don't include definitions of ctagscom and ctagslib in this entry.
|
||||||
|
#
|
||||||
|
default:\
|
||||||
|
yap:native:user:
|
||||||
|
|
||||||
|
yap:\
|
||||||
|
:tc=common:\
|
||||||
|
:langmap=Prolog\:.pl.yap.ypp.P.prolog:\
|
||||||
|
:gtags_parser=Prolog\:$ctagslib:
|
||||||
|
|
@ -18,7 +18,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//=== includes ===============================================================
|
//=== includes ===============================================================
|
||||||
#ifdef _YAP_NOT_INSTALLED_
|
#ifdef YAP_KERNEL
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -26,9 +26,13 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if USE_GMP && !defined(__cplusplus)
|
#if USE_GMP
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#include <gmpxx.h>
|
||||||
|
#else
|
||||||
#include <gmp.h>
|
#include <gmp.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -36,12 +40,14 @@ extern "C" {
|
|||||||
|
|
||||||
#include "YapInterface.h"
|
#include "YapInterface.h"
|
||||||
#else
|
#else
|
||||||
#include <Yap/src/config.h>
|
#if _YAP_NOT_INSTALLED_
|
||||||
#if USE_GMP
|
#include <config.h>
|
||||||
#include <gmp.h>
|
#include <YapInterface.h>
|
||||||
#endif
|
#else
|
||||||
|
#include <Yap/pl/config.h>
|
||||||
#include <Yap/YapInterface.h>
|
#include <Yap/YapInterface.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
@ -85,35 +91,9 @@ See SWI-Prolog.h, containing the same code for an explanation on this
|
|||||||
stuff.
|
stuff.
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||||
|
|
||||||
#ifndef _PL_EXPORT_DONE
|
#define PL_EXPORT(type) extern X_API type
|
||||||
#define _PL_EXPORT_DONE
|
#define PL_EXPORT_DATA(type) extern X_API type
|
||||||
|
#define install_t O_API void
|
||||||
#if (defined(__WINDOWS__) || defined(__CYGWIN__) || defined(__MINGW32__)) && !defined(__LCC__)
|
|
||||||
#define HAVE_DECLSPEC
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_DECLSPEC
|
|
||||||
# ifdef _YAP_NOT_INSTALLED_
|
|
||||||
#define PL_EXPORT(type) __declspec(dllexport) type
|
|
||||||
#define PL_EXPORT_DATA(type) __declspec(dllexport) type
|
|
||||||
#define install_t void
|
|
||||||
# else
|
|
||||||
# ifdef __BORLANDC__
|
|
||||||
#define PL_EXPORT(type) type _stdcall
|
|
||||||
#define PL_EXPORT_DATA(type) extern type
|
|
||||||
# else
|
|
||||||
#define PL_EXPORT(type) extern type
|
|
||||||
#define PL_EXPORT_DATA(type) __declspec(dllimport) type
|
|
||||||
# endif
|
|
||||||
#define install_t __declspec(dllexport) void
|
|
||||||
# endif
|
|
||||||
#else /*HAVE_DECLSPEC*/
|
|
||||||
#define PL_EXPORT(type) extern type
|
|
||||||
#define PL_EXPORT_DATA(type) extern type
|
|
||||||
#define install_t void
|
|
||||||
#endif /*HAVE_DECLSPEC*/
|
|
||||||
#endif /*_PL_EXPORT_DONE*/
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************
|
/*******************************
|
||||||
* GCC ATTRIBUTES *
|
* GCC ATTRIBUTES *
|
||||||
@ -403,102 +383,101 @@ PL_EXPORT(int) PL_chars_to_term(const char *chars,
|
|||||||
#define PL_fail return FALSE /* fail */
|
#define PL_fail return FALSE /* fail */
|
||||||
#define PL_succeed return TRUE /* success */
|
#define PL_succeed return TRUE /* success */
|
||||||
|
|
||||||
extern X_API PL_agc_hook_t PL_agc_hook(PL_agc_hook_t);
|
PL_EXPORT( PL_agc_hook_t ) PL_agc_hook(PL_agc_hook_t);
|
||||||
extern X_API char* PL_atom_chars(atom_t);
|
PL_EXPORT( char* ) PL_atom_chars(atom_t);
|
||||||
extern X_API char* PL_atom_nchars(atom_t, size_t *);
|
PL_EXPORT( char* ) PL_atom_nchars(atom_t, size_t *);
|
||||||
extern X_API term_t PL_copy_term_ref(term_t);
|
PL_EXPORT( term_t ) PL_copy_term_ref(term_t);
|
||||||
extern X_API term_t PL_new_term_ref(void);
|
PL_EXPORT( term_t ) PL_new_term_ref(void);
|
||||||
extern X_API term_t PL_new_term_refs(int);
|
PL_EXPORT( term_t ) PL_new_term_refs(int);
|
||||||
extern X_API void PL_reset_term_refs(term_t);
|
PL_EXPORT( void ) PL_reset_term_refs(term_t);
|
||||||
/* begin PL_get_* functions =============================*/
|
/* begin PL_get_* functions =============================*/
|
||||||
extern X_API int PL_get_arg(int, term_t, term_t);
|
PL_EXPORT( int ) PL_get_arg(int, term_t, term_t);
|
||||||
extern X_API int _PL_get_arg(int, term_t, term_t);
|
PL_EXPORT( int ) PL_get_atom(term_t, atom_t *);
|
||||||
extern X_API int PL_get_atom(term_t, atom_t *);
|
PL_EXPORT( int ) PL_get_atom_chars(term_t, char **);
|
||||||
extern X_API int PL_get_atom_chars(term_t, char **);
|
PL_EXPORT( int ) PL_get_atom_nchars(term_t, size_t *, char **);
|
||||||
extern X_API int PL_get_atom_nchars(term_t, size_t *, char **);
|
PL_EXPORT( int ) PL_get_bool(term_t, int *);
|
||||||
extern X_API int PL_get_bool(term_t, int *);
|
PL_EXPORT( int ) PL_get_chars(term_t, char **, unsigned);
|
||||||
extern X_API int PL_get_chars(term_t, char **, unsigned);
|
PL_EXPORT( int ) PL_get_nchars(term_t, size_t *, char **, unsigned);
|
||||||
extern X_API int PL_get_nchars(term_t, size_t *, char **, unsigned);
|
PL_EXPORT( int ) PL_get_wchars(term_t, size_t *, wchar_t **, unsigned);
|
||||||
extern X_API int PL_get_wchars(term_t, size_t *, wchar_t **, unsigned);
|
PL_EXPORT( int ) PL_get_functor(term_t, functor_t *);
|
||||||
extern X_API int PL_get_functor(term_t, functor_t *);
|
PL_EXPORT( int ) PL_get_compound_name_arity(term_t t, atom_t *ap, int *ip);
|
||||||
extern X_API int PL_get_compound_name_arity(term_t t, atom_t *ap, int *ip);
|
PL_EXPORT( int ) PL_get_float(term_t, double *);
|
||||||
extern X_API int PL_get_float(term_t, double *);
|
PL_EXPORT( int ) PL_get_head(term_t, term_t);
|
||||||
extern X_API int PL_get_head(term_t, term_t);
|
PL_EXPORT( int ) PL_get_int64(term_t, int64_t *);
|
||||||
extern X_API int PL_get_int64(term_t, int64_t *);
|
PL_EXPORT( int ) PL_get_integer(term_t, int *);
|
||||||
extern X_API int PL_get_integer(term_t, int *);
|
PL_EXPORT( int ) PL_get_list(term_t, term_t, term_t);
|
||||||
extern X_API int PL_get_list(term_t, term_t, term_t);
|
PL_EXPORT( int ) PL_get_long(term_t, long *);
|
||||||
extern X_API int PL_get_long(term_t, long *);
|
PL_EXPORT( int ) PL_get_list_chars(term_t, char **, unsigned);
|
||||||
extern X_API int PL_get_list_chars(term_t, char **, unsigned);
|
PL_EXPORT( int ) PL_get_list_nchars(term_t, size_t *, char **, unsigned);
|
||||||
extern X_API int PL_get_list_nchars(term_t, size_t *, char **, unsigned);
|
PL_EXPORT( int ) PL_get_module(term_t, module_t *);
|
||||||
extern X_API int PL_get_module(term_t, module_t *);
|
PL_EXPORT( module_t ) PL_context(void);
|
||||||
extern X_API module_t PL_context(void);
|
PL_EXPORT( int ) PL_strip_module(term_t, module_t *, term_t);
|
||||||
extern X_API int PL_strip_module(term_t, module_t *, term_t);
|
PL_EXPORT( atom_t ) PL_module_name(module_t);
|
||||||
extern X_API atom_t PL_module_name(module_t);
|
PL_EXPORT( module_t ) PL_new_module(atom_t);
|
||||||
extern X_API module_t PL_new_module(atom_t);
|
PL_EXPORT( int ) PL_get_name_arity(term_t, atom_t *, int *);
|
||||||
extern X_API int PL_get_name_arity(term_t, atom_t *, int *);
|
PL_EXPORT( int ) PL_get_nil(term_t);
|
||||||
extern X_API int PL_get_nil(term_t);
|
PL_EXPORT( int ) PL_get_pointer(term_t, void **);
|
||||||
extern X_API int PL_get_pointer(term_t, void **);
|
PL_EXPORT( int ) PL_get_intptr(term_t, intptr_t *);
|
||||||
extern X_API int PL_get_intptr(term_t, intptr_t *);
|
PL_EXPORT( int ) PL_get_uintptr(term_t, uintptr_t *);
|
||||||
extern X_API int PL_get_uintptr(term_t, uintptr_t *);
|
PL_EXPORT( int ) PL_get_tail(term_t, term_t);
|
||||||
extern X_API int PL_get_tail(term_t, term_t);
|
|
||||||
/* end PL_get_* functions =============================*/
|
/* end PL_get_* functions =============================*/
|
||||||
/* begin PL_new_* functions =============================*/
|
/* begin PL_new_* functions =============================*/
|
||||||
extern X_API atom_t PL_new_atom(const char *);
|
PL_EXPORT( atom_t ) PL_new_atom(const char *);
|
||||||
extern X_API atom_t PL_new_atom_nchars(size_t, const char *);
|
PL_EXPORT( atom_t ) PL_new_atom_nchars(size_t, const char *);
|
||||||
extern X_API atom_t PL_new_atom_wchars(size_t, const pl_wchar_t *);
|
PL_EXPORT( atom_t ) PL_new_atom_wchars(size_t, const pl_wchar_t *);
|
||||||
extern X_API char *PL_atom_nchars(atom_t, size_t *);
|
PL_EXPORT( char *) PL_atom_nchars(atom_t, size_t *);
|
||||||
extern X_API pl_wchar_t *PL_atom_wchars(atom_t, size_t *);
|
PL_EXPORT( pl_wchar_t *) PL_atom_wchars(atom_t, size_t *);
|
||||||
extern X_API functor_t PL_new_functor(atom_t, int);
|
PL_EXPORT( functor_t ) PL_new_functor(atom_t, int);
|
||||||
extern X_API atom_t PL_functor_name(functor_t);
|
PL_EXPORT( atom_t ) PL_functor_name(functor_t);
|
||||||
extern X_API int PL_functor_arity(functor_t);
|
PL_EXPORT( int ) PL_functor_arity(functor_t);
|
||||||
/* end PL_new_* functions =============================*/
|
/* end PL_new_* functions =============================*/
|
||||||
/* begin PL_put_* functions =============================*/
|
/* begin PL_put_* functions =============================*/
|
||||||
extern X_API int PL_cons_functor(term_t, functor_t,...);
|
PL_EXPORT( int ) PL_cons_functor(term_t, functor_t,...);
|
||||||
extern X_API int PL_cons_functor_v(term_t, functor_t,term_t);
|
PL_EXPORT( int ) PL_cons_functor_v(term_t, functor_t,term_t);
|
||||||
extern X_API int PL_cons_list(term_t, term_t, term_t);
|
PL_EXPORT( int ) PL_cons_list(term_t, term_t, term_t);
|
||||||
extern X_API int PL_put_atom(term_t, atom_t);
|
PL_EXPORT( int ) PL_put_atom(term_t, atom_t);
|
||||||
extern X_API int PL_put_atom_chars(term_t, const char *);
|
PL_EXPORT( int ) PL_put_atom_chars(term_t, const char *);
|
||||||
extern X_API int PL_put_atom_nchars(term_t, size_t ,const char *);
|
PL_EXPORT( int ) PL_put_atom_nchars(term_t, size_t ,const char *);
|
||||||
extern X_API int PL_put_boolean(term_t, uintptr_t);
|
PL_EXPORT( int ) PL_put_boolean(term_t, uintptr_t);
|
||||||
extern X_API int PL_put_float(term_t, double);
|
PL_EXPORT( int ) PL_put_float(term_t, double);
|
||||||
extern X_API int PL_put_functor(term_t, functor_t t);
|
PL_EXPORT( int ) PL_put_functor(term_t, functor_t t);
|
||||||
extern X_API int PL_put_int64(term_t, int64_t);
|
PL_EXPORT( int ) PL_put_int64(term_t, int64_t);
|
||||||
extern X_API int PL_put_integer(term_t, long);
|
PL_EXPORT( int ) PL_put_integer(term_t, long);
|
||||||
extern X_API int PL_put_list(term_t);
|
PL_EXPORT( int ) PL_put_list(term_t);
|
||||||
extern X_API int PL_put_list_chars(term_t, const char *);
|
PL_EXPORT( int ) PL_put_list_chars(term_t, const char *);
|
||||||
extern X_API void PL_put_nil(term_t);
|
PL_EXPORT( void ) PL_put_nil(term_t);
|
||||||
extern X_API int PL_put_pointer(term_t, void *);
|
PL_EXPORT( int ) PL_put_pointer(term_t, void *);
|
||||||
extern X_API int PL_put_string_chars(term_t, const char *);
|
PL_EXPORT( int ) PL_put_string_chars(term_t, const char *);
|
||||||
extern X_API int PL_put_string_nchars(term_t, size_t, const char *);
|
PL_EXPORT( int ) PL_put_string_nchars(term_t, size_t, const char *);
|
||||||
extern X_API int PL_put_term(term_t, term_t);
|
PL_EXPORT( int ) PL_put_term(term_t, term_t);
|
||||||
extern X_API int PL_put_variable(term_t);
|
PL_EXPORT( int ) PL_put_variable(term_t);
|
||||||
extern X_API int PL_put_intptr(term_t t, intptr_t n);
|
PL_EXPORT( int ) PL_put_intptr(term_t t, intptr_t n);
|
||||||
extern X_API int PL_put_uintptr(term_t t, uintptr_t n);
|
PL_EXPORT( int ) PL_put_uintptr(term_t t, uintptr_t n);
|
||||||
extern X_API int PL_compare(term_t, term_t);
|
PL_EXPORT( int ) PL_compare(term_t, term_t);
|
||||||
/* end PL_put_* functions =============================*/
|
/* end PL_put_* functions =============================*/
|
||||||
/* begin PL_unify_* functions =============================*/
|
/* begin PL_unify_* functions =============================*/
|
||||||
extern X_API int PL_unify(term_t, term_t);
|
PL_EXPORT( int ) PL_unify(term_t, term_t);
|
||||||
extern X_API int PL_unify_atom(term_t, atom_t);
|
PL_EXPORT( int ) PL_unify_atom(term_t, atom_t);
|
||||||
extern X_API int PL_unify_arg(int, term_t, term_t);
|
PL_EXPORT( int ) PL_unify_arg(int, term_t, term_t);
|
||||||
extern X_API int PL_unify_atom_chars(term_t, const char *);
|
PL_EXPORT( int ) PL_unify_atom_chars(term_t, const char *);
|
||||||
extern X_API int PL_unify_atom_nchars(term_t, size_t len, const char *);
|
PL_EXPORT( int ) PL_unify_atom_nchars(term_t, size_t len, const char *);
|
||||||
extern X_API int PL_unify_float(term_t, double);
|
PL_EXPORT( int ) PL_unify_float(term_t, double);
|
||||||
extern X_API int PL_unify_functor(term_t, functor_t);
|
PL_EXPORT( int ) PL_unify_functor(term_t, functor_t);
|
||||||
extern X_API int PL_unify_int64(term_t, int64_t);
|
PL_EXPORT( int ) PL_unify_int64(term_t, int64_t);
|
||||||
extern X_API int PL_unify_intptr(term_t, intptr_t);
|
PL_EXPORT( int ) PL_unify_intptr(term_t, intptr_t);
|
||||||
extern X_API int PL_unify_uintptr(term_t, uintptr_t);
|
PL_EXPORT( int ) PL_unify_uintptr(term_t, uintptr_t);
|
||||||
extern X_API int PL_unify_integer(term_t, long);
|
PL_EXPORT( int ) PL_unify_integer(term_t, long);
|
||||||
extern X_API int PL_unify_list(term_t, term_t, term_t);
|
PL_EXPORT( int ) PL_unify_list(term_t, term_t, term_t);
|
||||||
extern X_API int PL_unify_list_chars(term_t, const char *);
|
PL_EXPORT( int ) PL_unify_list_chars(term_t, const char *);
|
||||||
extern X_API int PL_unify_list_ncodes(term_t, size_t, const char *);
|
PL_EXPORT( int ) PL_unify_list_ncodes(term_t, size_t, const char *);
|
||||||
extern X_API int PL_unify_nil(term_t);
|
PL_EXPORT( int ) PL_unify_nil(term_t);
|
||||||
extern X_API int PL_unify_pointer(term_t, void *);
|
PL_EXPORT( int ) PL_unify_pointer(term_t, void *);
|
||||||
extern X_API int PL_unify_bool(term_t, int);
|
PL_EXPORT( int ) PL_unify_bool(term_t, int);
|
||||||
extern X_API int PL_unify_string_chars(term_t, const char *);
|
PL_EXPORT( int ) PL_unify_string_chars(term_t, const char *);
|
||||||
extern X_API int PL_unify_string_nchars(term_t, size_t, const char *);
|
PL_EXPORT( int ) PL_unify_string_nchars(term_t, size_t, const char *);
|
||||||
extern X_API int PL_unify_term(term_t,...);
|
PL_EXPORT( int ) PL_unify_term(term_t,...);
|
||||||
extern X_API int PL_unify_chars(term_t, int, size_t, const char *);
|
PL_EXPORT( int ) PL_unify_chars(term_t, int, size_t, const char *);
|
||||||
extern X_API int PL_unify_chars_diff(term_t, term_t, int, size_t, const char *);
|
PL_EXPORT( int ) PL_unify_chars_diff(term_t, term_t, int, size_t, const char *);
|
||||||
/*******************************
|
/*******************************
|
||||||
* LISTS *
|
* LISTS *
|
||||||
*******************************/
|
*******************************/
|
||||||
@ -506,92 +485,92 @@ extern X_API int PL_unify_chars_diff(term_t, term_t, int, size_t, const char *)
|
|||||||
PL_EXPORT(int) PL_skip_list(term_t list, term_t tail, size_t *len);
|
PL_EXPORT(int) PL_skip_list(term_t list, term_t tail, size_t *len);
|
||||||
|
|
||||||
|
|
||||||
extern X_API int PL_unify_wchars(term_t, int, size_t, const pl_wchar_t *);
|
PL_EXPORT( int ) PL_unify_wchars(term_t, int, size_t, const pl_wchar_t *);
|
||||||
extern X_API int PL_unify_wchars_diff(term_t, 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 *);
|
||||||
extern X_API int PL_chars_to_term(const char *,term_t);
|
PL_EXPORT( int ) PL_chars_to_term(const char *,term_t);
|
||||||
/* begin PL_is_* functions =============================*/
|
/* begin PL_is_* functions =============================*/
|
||||||
extern X_API int PL_is_atom(term_t);
|
PL_EXPORT( int ) PL_is_atom(term_t);
|
||||||
extern X_API int PL_is_atomic(term_t);
|
PL_EXPORT( int ) PL_is_atomic(term_t);
|
||||||
extern X_API int PL_is_compound(term_t);
|
PL_EXPORT( int ) PL_is_compound(term_t);
|
||||||
extern X_API int PL_is_float(term_t);
|
PL_EXPORT( int ) PL_is_float(term_t);
|
||||||
extern X_API int PL_is_functor(term_t, functor_t);
|
PL_EXPORT( int ) PL_is_functor(term_t, functor_t);
|
||||||
extern X_API int PL_is_ground(term_t);
|
PL_EXPORT( int ) PL_is_ground(term_t);
|
||||||
extern X_API int PL_is_callable(term_t);
|
PL_EXPORT( int ) PL_is_callable(term_t);
|
||||||
extern X_API int PL_is_integer(term_t);
|
PL_EXPORT( int ) PL_is_integer(term_t);
|
||||||
extern X_API int PL_is_pair(term_t);
|
PL_EXPORT( int ) PL_is_pair(term_t);
|
||||||
extern X_API int PL_is_list(term_t);
|
PL_EXPORT( int ) PL_is_list(term_t);
|
||||||
extern X_API int PL_is_pair(term_t);
|
PL_EXPORT( int ) PL_is_pair(term_t);
|
||||||
extern X_API int PL_is_number(term_t);
|
PL_EXPORT( int ) PL_is_number(term_t);
|
||||||
extern X_API int PL_is_string(term_t);
|
PL_EXPORT( int ) PL_is_string(term_t);
|
||||||
extern X_API int PL_is_variable(term_t);
|
PL_EXPORT( int ) PL_is_variable(term_t);
|
||||||
extern X_API int PL_term_type(term_t);
|
PL_EXPORT( int ) PL_term_type(term_t);
|
||||||
extern X_API int PL_is_inf(term_t);
|
PL_EXPORT( int ) PL_is_inf(term_t);
|
||||||
extern X_API int PL_is_acyclic(term_t t);
|
PL_EXPORT( int ) PL_is_acyclic(term_t t);
|
||||||
/* end PL_is_* functions =============================*/
|
/* end PL_is_* functions =============================*/
|
||||||
extern X_API void PL_halt(int);
|
PL_EXPORT( void ) PL_halt(int);
|
||||||
extern X_API int PL_initialise(int, char **);
|
PL_EXPORT( int ) PL_initialise(int, char **);
|
||||||
extern X_API int PL_is_initialised(int *, char ***);
|
PL_EXPORT( int ) PL_is_initialised(int *, char ***);
|
||||||
extern X_API void PL_close_foreign_frame(fid_t);
|
PL_EXPORT( void ) PL_close_foreign_frame(fid_t);
|
||||||
extern X_API void PL_discard_foreign_frame(fid_t);
|
PL_EXPORT( void ) PL_discard_foreign_frame(fid_t);
|
||||||
extern X_API void PL_rewind_foreign_frame(fid_t);
|
PL_EXPORT( void ) PL_rewind_foreign_frame(fid_t);
|
||||||
extern X_API fid_t PL_open_foreign_frame(void);
|
PL_EXPORT( fid_t ) PL_open_foreign_frame(void);
|
||||||
extern X_API int PL_raise_exception(term_t);
|
PL_EXPORT( int ) PL_raise_exception(term_t);
|
||||||
extern X_API int PL_throw(term_t);
|
PL_EXPORT( int ) PL_throw(term_t);
|
||||||
extern X_API void PL_clear_exception(void);
|
PL_EXPORT( void ) PL_clear_exception(void);
|
||||||
extern X_API void PL_register_atom(atom_t);
|
PL_EXPORT( void ) PL_register_atom(atom_t);
|
||||||
extern X_API void PL_unregister_atom(atom_t);
|
PL_EXPORT( void ) PL_unregister_atom(atom_t);
|
||||||
extern X_API predicate_t PL_pred(functor_t, module_t);
|
PL_EXPORT( predicate_t ) PL_pred(functor_t, module_t);
|
||||||
extern X_API predicate_t PL_predicate(const char *, int, const char *);
|
PL_EXPORT( predicate_t ) PL_predicate(const char *, int, const char *);
|
||||||
#define GP_NAMEARITY 0x100 /* or'ed mask */
|
#define GP_NAMEARITY 0x100 /* or'ed mask */
|
||||||
extern X_API int PL_unify_predicate(term_t head, predicate_t pred, int how);
|
PL_EXPORT( int ) PL_unify_predicate(term_t head, predicate_t pred, int how);
|
||||||
extern X_API void PL_predicate_info(predicate_t, atom_t *, int *, module_t *);
|
PL_EXPORT( void ) PL_predicate_info(predicate_t, atom_t *, int *, module_t *);
|
||||||
extern X_API qid_t PL_open_query(module_t, int, predicate_t, term_t);
|
PL_EXPORT( qid_t ) PL_open_query(module_t, int, predicate_t, term_t);
|
||||||
extern X_API int PL_next_solution(qid_t);
|
PL_EXPORT( int ) PL_next_solution(qid_t);
|
||||||
extern X_API void PL_cut_query(qid_t);
|
PL_EXPORT( void ) PL_cut_query(qid_t);
|
||||||
extern X_API void PL_close_query(qid_t);
|
PL_EXPORT( void ) PL_close_query(qid_t);
|
||||||
extern X_API int PL_toplevel(void);
|
PL_EXPORT( int ) PL_toplevel(void);
|
||||||
extern X_API term_t PL_exception(qid_t);
|
PL_EXPORT( term_t ) PL_exception(qid_t);
|
||||||
extern X_API term_t PL_exception(qid_t);
|
PL_EXPORT( term_t ) PL_exception(qid_t);
|
||||||
extern X_API int PL_call_predicate(module_t, int, predicate_t, term_t);
|
PL_EXPORT( int ) PL_call_predicate(module_t, int, predicate_t, term_t);
|
||||||
extern X_API int PL_call(term_t, module_t);
|
PL_EXPORT( int ) PL_call(term_t, module_t);
|
||||||
extern X_API void PL_register_foreign(const char *, int, pl_function_t, int);
|
PL_EXPORT( void ) PL_register_foreign(const char *, int, pl_function_t, int);
|
||||||
extern X_API void PL_register_foreign_in_module(const char *, const char *, int, pl_function_t, int);
|
PL_EXPORT( void ) PL_register_foreign_in_module(const char *, const char *, int, pl_function_t, int);
|
||||||
extern X_API void PL_register_extensions(const PL_extension *);
|
PL_EXPORT( void ) PL_register_extensions(const PL_extension *);
|
||||||
extern X_API void PL_register_extensions_in_module(const char *module, const PL_extension *);
|
PL_EXPORT( void ) PL_register_extensions_in_module(const char *module, const PL_extension *);
|
||||||
extern X_API void PL_load_extensions(const PL_extension *);
|
PL_EXPORT( void ) PL_load_extensions(const PL_extension *);
|
||||||
extern X_API int PL_handle_signals(void);
|
PL_EXPORT( int ) PL_handle_signals(void);
|
||||||
extern X_API int PL_thread_self(void);
|
PL_EXPORT( int ) PL_thread_self(void);
|
||||||
extern X_API int PL_unify_thread_id(term_t, int);
|
PL_EXPORT( int ) PL_unify_thread_id(term_t, int);
|
||||||
extern X_API int PL_thread_attach_engine(const PL_thread_attr_t *);
|
PL_EXPORT( int ) PL_thread_attach_engine(const PL_thread_attr_t *);
|
||||||
extern X_API int PL_thread_destroy_engine(void);
|
PL_EXPORT( int ) PL_thread_destroy_engine(void);
|
||||||
extern X_API int PL_thread_at_exit(void (*)(void *), void *, int);
|
PL_EXPORT( int ) PL_thread_at_exit(void (*)(void *), void *, int);
|
||||||
extern X_API int PL_thread_raise(int tid, int sig);
|
PL_EXPORT( int ) PL_thread_raise(int tid, int sig);
|
||||||
extern X_API PL_engine_t PL_create_engine(const PL_thread_attr_t *);
|
PL_EXPORT( PL_engine_t ) PL_create_engine(const PL_thread_attr_t *);
|
||||||
extern X_API int PL_destroy_engine(PL_engine_t);
|
PL_EXPORT( int ) PL_destroy_engine(PL_engine_t);
|
||||||
extern X_API int PL_set_engine(PL_engine_t,PL_engine_t *);
|
PL_EXPORT( int ) PL_set_engine(PL_engine_t,PL_engine_t *);
|
||||||
extern X_API int PL_get_string(term_t, char **, size_t *);
|
PL_EXPORT( int ) PL_get_string(term_t, char **, size_t *);
|
||||||
extern X_API int PL_get_string_chars(term_t, char **, size_t *);
|
PL_EXPORT( int ) PL_get_string_chars(term_t, char **, size_t *);
|
||||||
extern X_API record_t PL_record(term_t);
|
PL_EXPORT( record_t ) PL_record(term_t);
|
||||||
extern X_API int PL_recorded(record_t, term_t);
|
PL_EXPORT( int ) PL_recorded(record_t, term_t);
|
||||||
extern X_API record_t PL_duplicate_record(record_t);
|
PL_EXPORT( record_t ) PL_duplicate_record(record_t);
|
||||||
extern X_API void PL_erase(record_t);
|
PL_EXPORT( void ) PL_erase(record_t);
|
||||||
/* only partial implementation, does not guarantee export between different architectures and versions of YAP */
|
/* only partial implementation, does not guarantee export between different architectures and versions of YAP */
|
||||||
extern X_API char *PL_record_external(term_t, size_t *);
|
PL_EXPORT( char *) PL_record_external(term_t, size_t *);
|
||||||
extern X_API int PL_recorded_external(const char *, term_t);
|
PL_EXPORT( int ) PL_recorded_external(const char *, term_t);
|
||||||
extern X_API int PL_erase_external(char *);
|
PL_EXPORT( int ) PL_erase_external(char *);
|
||||||
extern X_API int PL_action(int,...);
|
PL_EXPORT( int ) PL_action(int,...);
|
||||||
extern X_API void PL_on_halt(int (*)(int, void *), void *);
|
PL_EXPORT( void ) PL_on_halt(int (*)(int, void *), void *);
|
||||||
extern X_API void *PL_malloc(size_t);
|
PL_EXPORT( void *) PL_malloc(size_t);
|
||||||
extern X_API void *PL_malloc_uncollectable(size_t s);
|
PL_EXPORT( void *) PL_malloc_uncollectable(size_t s);
|
||||||
extern X_API void *PL_realloc(void*,size_t);
|
PL_EXPORT( void *) PL_realloc(void*,size_t);
|
||||||
extern X_API void PL_free(void *);
|
PL_EXPORT( void ) PL_free(void *);
|
||||||
extern X_API int PL_eval_expression_to_int64_ex(term_t t, int64_t *val);
|
PL_EXPORT( int ) PL_eval_expression_to_int64_ex(term_t t, int64_t *val);
|
||||||
extern X_API void PL_cleanup_fork(void);
|
PL_EXPORT( void ) PL_cleanup_fork(void);
|
||||||
extern X_API int PL_get_signum_ex(term_t sig, int *n);
|
PL_EXPORT( int ) PL_get_signum_ex(term_t sig, int *n);
|
||||||
|
|
||||||
extern X_API size_t PL_utf8_strlen(const char *s, size_t len);
|
PL_EXPORT( size_t ) PL_utf8_strlen(const char *s, size_t len);
|
||||||
|
|
||||||
extern X_API int PL_unify_list_codes(term_t l, const char *chars);
|
PL_EXPORT( int ) PL_unify_list_codes(term_t l, const char *chas);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -607,8 +586,6 @@ extern X_API void PL_fatal_error(const char *msg);
|
|||||||
extern X_API int Sprintf(const char * fm,...);
|
extern X_API int Sprintf(const char * fm,...);
|
||||||
extern X_API int Sdprintf(const char *,...);
|
extern X_API int Sdprintf(const char *,...);
|
||||||
|
|
||||||
extern X_API char *PL_prompt_string(int fd);
|
|
||||||
|
|
||||||
/*******************************
|
/*******************************
|
||||||
* FILENAME SUPPORT *
|
* FILENAME SUPPORT *
|
||||||
*******************************/
|
*******************************/
|
||||||
|
@ -23,8 +23,12 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
typedef uintptr_t uid_t;
|
#ifndef uid_t
|
||||||
typedef uintptr_t gid_t;
|
#define uid_t int
|
||||||
|
#endif
|
||||||
|
#ifndef gid_t
|
||||||
|
#define gid_t int
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -42,7 +42,11 @@ struct yami *Yap_Error__(const char *file, const char *function, int lineno,
|
|||||||
yap_error_number err, YAP_Term wheret, ...);
|
yap_error_number err, YAP_Term wheret, ...);
|
||||||
|
|
||||||
void Yap_ThrowError__(const char *file, const char *function, int lineno,
|
void Yap_ThrowError__(const char *file, const char *function, int lineno,
|
||||||
yap_error_number err, YAP_Term wheret, ...) __attribute__ ((noreturn));
|
yap_error_number err, YAP_Term wheret, ...)
|
||||||
|
#ifndef MSC_VER
|
||||||
|
__attribute__ ((noreturn))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
#define Yap_NilError(id, ...) \
|
#define Yap_NilError(id, ...) \
|
||||||
|
61
include/YapFormat.h
Normal file
61
include/YapFormat.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
#ifndef YAP_FORMAT
|
||||||
|
|
||||||
|
#if defined(_WIN64)
|
||||||
|
|
||||||
|
typedef int64_t Int;
|
||||||
|
typedef uint64_t UInt;
|
||||||
|
#define Int_FORMAT "%I64d"
|
||||||
|
#define UInt_FORMAT "%I64u"
|
||||||
|
#define Int_F "I64d"
|
||||||
|
#define UInt_F "I64u"
|
||||||
|
#define UXInt_F "I64xu"
|
||||||
|
#define Sizet_F "Id"
|
||||||
|
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
|
||||||
|
typedef int32_t Int;
|
||||||
|
typedef uint32_t UInt;
|
||||||
|
#define Int_FORMAT "%I32d"
|
||||||
|
#define UInt_FORMAT "%I32u"
|
||||||
|
#define Int_F "I32d"
|
||||||
|
#define UInt_F "I32u"
|
||||||
|
#define UInt_FORMAT "%I32u"
|
||||||
|
#define UXInt_FORMAT "%I32xu"
|
||||||
|
#define Sizet_F "Id"
|
||||||
|
|
||||||
|
#elif defined(PRIdPTR)
|
||||||
|
#define Int_FORMAT "%" PRIdPTR
|
||||||
|
#define Int_ANYFORMAT "%" PRIuPTR
|
||||||
|
#define UInt_FORMAT "%" PRIuPTR
|
||||||
|
#define Int_F PRIdPTR
|
||||||
|
#define Int_ANYF PRIuPTR
|
||||||
|
#define UInt_F PRIuPTR
|
||||||
|
#define UXInt_F PRIxPTR
|
||||||
|
#define Sizet_F "zd"
|
||||||
|
|
||||||
|
#elif SIZEOF_LONG_INT == SIZEOF_INT_P
|
||||||
|
|
||||||
|
typedef long int Int;
|
||||||
|
typedef unsigned long int UInt;
|
||||||
|
#define Int_FORMAT "%ld"
|
||||||
|
#define UInt_FORMAT "%uld"
|
||||||
|
#define Int_F "ld"
|
||||||
|
#define UInt_F "uld"
|
||||||
|
#define UXInt_F "ulxd"
|
||||||
|
#define Sizet_F "uld"
|
||||||
|
|
||||||
|
#elif SIZEOF_INT == SIZEOF_INT_P
|
||||||
|
|
||||||
|
typedef int Int;
|
||||||
|
typedef unsigned int UInt;
|
||||||
|
#define Int_FORMAT "%l"
|
||||||
|
#define UInt_FORMAT "%ul"
|
||||||
|
#define Int_F "l"
|
||||||
|
#define UInt_F "ul"
|
||||||
|
#define UXInt_F "uld"
|
||||||
|
#define Sizet_F "ux"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -72,50 +72,9 @@ __BEGIN_DECLS
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
#if defined(_WIN32)
|
|
||||||
#if YAP_H
|
|
||||||
#define X_API __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define X_API __declspec(dllimport)
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define X_API
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef Int_FORMAT
|
#include "YapFormat.h"
|
||||||
|
|
||||||
#ifdef PRIdPTR
|
|
||||||
#define Int_FORMAT "%" PRIdPTR
|
|
||||||
#elif _WIN64
|
|
||||||
#define Int_FORMAT "%I64d"
|
|
||||||
#elif _WIN32
|
|
||||||
#define Int_FORMAT "%I32d"
|
|
||||||
#else
|
|
||||||
#define Int_FORMAT "%ld"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PRIiPTR
|
|
||||||
#define Int_ANYFORMAT "%" PRIiPTR
|
|
||||||
#elif _WIN64
|
|
||||||
#define Int_ANYFORMAT "%I64i"
|
|
||||||
#elif _WIN32
|
|
||||||
#define Int_ANYFORMAT "%I32i"
|
|
||||||
#else
|
|
||||||
#define Int_ANYFORMAT "%li"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PRIuPTR
|
|
||||||
#define UInt_FORMAT "%" PRIuPTR
|
|
||||||
#elif _WIN64
|
|
||||||
#define UInt_FORMAT "%I64ud"
|
|
||||||
#elif _WIN32
|
|
||||||
#define UInt_FORMAT "%I32ud"
|
|
||||||
#else
|
|
||||||
#define UInt_FORMAT "%lu"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* portable form of formatted output for Prolog terms */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Primitive Functions */
|
/* Primitive Functions */
|
||||||
|
|
||||||
@ -173,6 +132,9 @@ extern X_API YAP_Bool YAP_IsDbRefTerm(YAP_Term);
|
|||||||
/* YAP_Bool IsAtomTerm(YAP_Term) */
|
/* YAP_Bool IsAtomTerm(YAP_Term) */
|
||||||
extern X_API YAP_Bool YAP_IsAtomTerm(YAP_Term);
|
extern X_API YAP_Bool YAP_IsAtomTerm(YAP_Term);
|
||||||
|
|
||||||
|
/* YAP_Bool IsAtomTerm(YAP_Term) */
|
||||||
|
extern X_API YAP_Bool YAP_IsStringTerm(YAP_Term);
|
||||||
|
|
||||||
/* YAP_Bool IsPairTerm(YAP_Term) */
|
/* YAP_Bool IsPairTerm(YAP_Term) */
|
||||||
extern X_API YAP_Bool YAP_IsPairTerm(YAP_Term);
|
extern X_API YAP_Bool YAP_IsPairTerm(YAP_Term);
|
||||||
|
|
||||||
@ -185,12 +147,24 @@ extern X_API YAP_Bool YAP_IsCompoundTerm(YAP_Term);
|
|||||||
/* Term MkIntTerm(YAP_Int) */
|
/* Term MkIntTerm(YAP_Int) */
|
||||||
extern X_API YAP_Term YAP_MkIntTerm(YAP_Int);
|
extern X_API YAP_Term YAP_MkIntTerm(YAP_Int);
|
||||||
|
|
||||||
|
/* Term MkIntTerm(YAP_Int) */
|
||||||
|
extern X_API YAP_Term YAP_MkStringTerm(const char *);
|
||||||
|
|
||||||
|
/* Term MkIntTerm(YAP_Int) */
|
||||||
|
extern X_API YAP_Term YAP_MkUnsignedStringTerm(const unsigned char *);
|
||||||
|
|
||||||
/* Term MkBigNumTerm(void *) */
|
/* Term MkBigNumTerm(void *) */
|
||||||
extern X_API YAP_Term YAP_MkBigNumTerm(void *);
|
extern X_API YAP_Term YAP_MkBigNumTerm(void *);
|
||||||
|
|
||||||
/* Term MkRationalTerm(void *) */
|
/* Term MkRationalTerm(void *) */
|
||||||
extern X_API YAP_Term YAP_MkRationalTerm(void *);
|
extern X_API YAP_Term YAP_MkRationalTerm(void *);
|
||||||
|
|
||||||
|
/* YAP_Int IntOfTerm(Term) */
|
||||||
|
extern X_API const unsigned char *YAP_UnsignedStringOfTerm(YAP_Term);
|
||||||
|
|
||||||
|
/* YAP_Int StribgOfTerm(Term) */
|
||||||
|
extern X_API const char *YAP_StringOfTerm(YAP_Term);
|
||||||
|
|
||||||
/* YAP_Int IntOfTerm(Term) */
|
/* YAP_Int IntOfTerm(Term) */
|
||||||
extern X_API YAP_Int YAP_IntOfTerm(YAP_Term);
|
extern X_API YAP_Int YAP_IntOfTerm(YAP_Term);
|
||||||
|
|
||||||
|
@ -36,7 +36,9 @@ static char SccsId[] = "%W% %G%";
|
|||||||
#define ALIASES_BLOCK_SIZE 8
|
#define ALIASES_BLOCK_SIZE 8
|
||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
|
#ifndef USE_SOCKET
|
||||||
#define USE_SOCKET 1
|
#define USE_SOCKET 1
|
||||||
|
#endif
|
||||||
#define HAVE_SOCKET 1
|
#define HAVE_SOCKET 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@ string(TIMESTAMP YAP_TIMESTAMP)
|
|||||||
|
|
||||||
string( SUBSTRING ${CMAKE_SHARED_LIBRARY_SUFFIX} 1 -1 SO_EXT )
|
string( SUBSTRING ${CMAKE_SHARED_LIBRARY_SUFFIX} 1 -1 SO_EXT )
|
||||||
|
|
||||||
|
|
||||||
set_property(DIRECTORY PROPERTY CXX_STANDARD 11)
|
set_property(DIRECTORY PROPERTY CXX_STANDARD 11)
|
||||||
|
|
||||||
# rpath stuff, hopefully it works
|
# rpath stuff, hopefully it works
|
||||||
|
@ -13,6 +13,8 @@ MY_set_target_properties(libswi
|
|||||||
POSITION_INDEPENDENT_CODE ON
|
POSITION_INDEPENDENT_CODE ON
|
||||||
)
|
)
|
||||||
|
|
||||||
|
SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS YAP_KERNEL=1 )
|
||||||
|
|
||||||
include_directories (../../../H ../.../../include ../os ${CMAKE_BINARY_DIR} ${GMP_INCLUDE_DIR})
|
include_directories (../../../H ../.../../include ../os ${CMAKE_BINARY_DIR} ${GMP_INCLUDE_DIR})
|
||||||
|
|
||||||
set (YAP_SWILIB $<TARGET_FILE_NAME:libswi> )
|
set (YAP_SWILIB $<TARGET_FILE_NAME:libswi> )
|
||||||
|
@ -29,8 +29,8 @@ Moyle. All rights reserved.
|
|||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
|
||||||
#include <Yap.h>
|
#include <Yap.h>
|
||||||
|
#include <YapEval.h>
|
||||||
#include <Yatom.h>
|
#include <Yatom.h>
|
||||||
#include <eval.h>
|
|
||||||
|
|
||||||
#include "swi.h"
|
#include "swi.h"
|
||||||
#include <YapHeap.h>
|
#include <YapHeap.h>
|
||||||
@ -216,6 +216,7 @@ X_API int PL_get_nchars(term_t l, size_t *lengthp, char **s, unsigned flags) {
|
|||||||
|
|
||||||
if (flags & BUF_MALLOC) {
|
if (flags & BUF_MALLOC) {
|
||||||
out.type |= YAP_STRING_MALLOC;
|
out.type |= YAP_STRING_MALLOC;
|
||||||
|
out.val.c = NULL;
|
||||||
}
|
}
|
||||||
if (lengthp) {
|
if (lengthp) {
|
||||||
out.type |= YAP_STRING_NCHARS;
|
out.type |= YAP_STRING_NCHARS;
|
||||||
@ -245,6 +246,7 @@ int PL_get_wchars(term_t l, size_t *lengthp, wchar_t **s, unsigned flags) {
|
|||||||
out.type = YAP_STRING_WCHARS;
|
out.type = YAP_STRING_WCHARS;
|
||||||
if (flags & BUF_MALLOC) {
|
if (flags & BUF_MALLOC) {
|
||||||
out.type |= YAP_STRING_MALLOC;
|
out.type |= YAP_STRING_MALLOC;
|
||||||
|
out.val.c = NULL;
|
||||||
}
|
}
|
||||||
if (lengthp) {
|
if (lengthp) {
|
||||||
out.type |= YAP_STRING_NCHARS;
|
out.type |= YAP_STRING_NCHARS;
|
||||||
@ -278,9 +280,7 @@ X_API int PL_unify_chars(term_t l, int flags, size_t length, const char *s) {
|
|||||||
} else if (flags & PL_CHAR_LIST) {
|
} else if (flags & PL_CHAR_LIST) {
|
||||||
out.type = YAP_STRING_ATOMS;
|
out.type = YAP_STRING_ATOMS;
|
||||||
}
|
}
|
||||||
if (length != (size_t)-1) {
|
|
||||||
out.max = length;
|
out.max = length;
|
||||||
}
|
|
||||||
if (!Yap_CVT_Text(&inp, &out PASS_REGS))
|
if (!Yap_CVT_Text(&inp, &out PASS_REGS))
|
||||||
return 0L;
|
return 0L;
|
||||||
return Yap_unify(Yap_GetFromSlot(l), out.val.t);
|
return Yap_unify(Yap_GetFromSlot(l), out.val.t);
|
||||||
@ -345,8 +345,7 @@ X_API term_t PL_new_term_refs(int n) {
|
|||||||
*/
|
*/
|
||||||
X_API void PL_reset_term_refs(term_t after) {
|
X_API void PL_reset_term_refs(term_t after) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
term_t new = Yap_NewSlots(1);
|
LOCAL_CurSlot = after;
|
||||||
Yap_RecoverSlots(after - new, new);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @}
|
/** @}
|
||||||
@ -629,9 +628,17 @@ X_API int PL_get_atom_chars(term_t ts, char **a) /* SAM check type */
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
if (!IsAtomTerm(t))
|
char *src;
|
||||||
|
if (!IsAtomTerm(t)) {
|
||||||
return 0;
|
return 0;
|
||||||
*a = RepAtom(AtomOfTerm(t))->StrOfAE;
|
}
|
||||||
|
src = (char *)RepAtom(AtomOfTerm(t))->StrOfAE;
|
||||||
|
if (!a)
|
||||||
|
return 0;
|
||||||
|
if (*a && *a != src)
|
||||||
|
strcpy(*a, src);
|
||||||
|
else
|
||||||
|
*a = src;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -644,10 +651,14 @@ X_API int PL_get_atom_nchars(term_t ts, size_t *len,
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
if (!IsAtomTerm(t))
|
if (!IsAtomTerm(t)) {
|
||||||
return 0;
|
return 0;
|
||||||
*s = RepAtom(AtomOfTerm(t))->StrOfAE;
|
}
|
||||||
|
if (s)
|
||||||
|
*s = (char*)RepAtom(AtomOfTerm(t))->StrOfAE;
|
||||||
|
if (len) {
|
||||||
*len = strlen(*s);
|
*len = strlen(*s);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -800,7 +811,7 @@ X_API int PL_unify_bool(term_t t, int a) {
|
|||||||
#if USE_GMP
|
#if USE_GMP
|
||||||
|
|
||||||
/*******************************
|
/*******************************
|
||||||
* GMP *
|
* GMP *
|
||||||
*******************************/
|
*******************************/
|
||||||
|
|
||||||
X_API int PL_get_mpz(term_t t, mpz_t mpz) {
|
X_API int PL_get_mpz(term_t t, mpz_t mpz) {
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#ifdef __YAP_PROLOG__
|
#ifdef __YAP_PROLOG__
|
||||||
#include "Yatom.h"
|
#include "Yatom.h"
|
||||||
#include "pl-ctype.h"
|
#include "pl-ctype.h"
|
||||||
#include "eval.h"
|
#include "YapEval.h"
|
||||||
#else
|
#else
|
||||||
#include "os/pl-ctype.h"
|
#include "os/pl-ctype.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -82,6 +82,7 @@ if (MPI_C_FOUND)
|
|||||||
|
|
||||||
install(TARGETS yap_mpi
|
install(TARGETS yap_mpi
|
||||||
LIBRARY DESTINATION ${dlls}
|
LIBRARY DESTINATION ${dlls}
|
||||||
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls}
|
ARCHIVE DESTINATION ${dlls}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ extern int GLOBAL_argc;
|
|||||||
static hashtable requests=NULL;
|
static hashtable requests=NULL;
|
||||||
static hashtable broadcasts=NULL;
|
static hashtable broadcasts=NULL;
|
||||||
|
|
||||||
void init_mpi(void);
|
X_API void init_mpi(void);
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* Time accounting
|
* Time accounting
|
||||||
@ -1003,7 +1003,7 @@ mpi_default_buffer_size(void)
|
|||||||
/********************************************************************
|
/********************************************************************
|
||||||
* Init
|
* Init
|
||||||
*******************************************************************/
|
*******************************************************************/
|
||||||
void
|
X_API void
|
||||||
init_mpi(void) {
|
init_mpi(void) {
|
||||||
|
|
||||||
requests=new_hashtable(HASHSIZE);
|
requests=new_hashtable(HASHSIZE);
|
||||||
|
@ -17,7 +17,7 @@ if (MATLAB_FOUND)
|
|||||||
target_link_libraries(matlab libYap $(MATLAB_LIBRARIES) )
|
target_link_libraries(matlab libYap $(MATLAB_LIBRARIES) )
|
||||||
|
|
||||||
install(TARGETS matlab
|
install(TARGETS matlab
|
||||||
LIBRARY DESTINATION ${dlls}
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls} )
|
ARCHIVE DESTINATION ${dlls} )
|
||||||
|
|
||||||
endif (MATLAB_FOUND)
|
endif (MATLAB_FOUND)
|
||||||
|
@ -6,7 +6,8 @@ target_link_libraries(matrix libYap)
|
|||||||
set_target_properties (matrix PROPERTIES PREFIX "")
|
set_target_properties (matrix PROPERTIES PREFIX "")
|
||||||
|
|
||||||
install(TARGETS matrix
|
install(TARGETS matrix
|
||||||
LIBRARY DESTINATION ${dlls}
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls}
|
ARCHIVE DESTINATION ${dlls}
|
||||||
|
LIBRARY DESTINATION ${dlls}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -3244,9 +3244,9 @@ is_matrix(void)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_matrix( void );
|
X_API void init_matrix( void );
|
||||||
|
|
||||||
void
|
X_API void
|
||||||
init_matrix(void)
|
init_matrix(void)
|
||||||
{
|
{
|
||||||
AtomC = YAP_LookupAtom("c");
|
AtomC = YAP_LookupAtom("c");
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void init_random( void );
|
X_API void init_random( void );
|
||||||
|
|
||||||
static short a1 = 27314, b1 = 9213, c1 = 17773;
|
static short a1 = 27314, b1 = 9213, c1 = 17773;
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ p_getrand(void)
|
|||||||
YAP_Unify(YAP_ARG3,YAP_MkIntTerm(c1)));
|
YAP_Unify(YAP_ARG3,YAP_MkIntTerm(c1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
X_API void
|
||||||
init_random(void)
|
init_random(void)
|
||||||
{
|
{
|
||||||
YAP_UserCPredicate("random", p_random, 1);
|
YAP_UserCPredicate("random", p_random, 1);
|
||||||
|
@ -1,17 +1,23 @@
|
|||||||
|
|
||||||
set ( REGEX_SOURCES
|
set ( REGEX_INCLUDES
|
||||||
cclass.h
|
cclass.h
|
||||||
cname.h
|
cname.h
|
||||||
collate.h
|
collate.h
|
||||||
utils.h
|
utils.h
|
||||||
yapregex.h
|
yapregex.h
|
||||||
engine.c
|
engine.c
|
||||||
|
)
|
||||||
|
|
||||||
|
set ( REGEX_SOURCES
|
||||||
regcomp.c
|
regcomp.c
|
||||||
regerror.c
|
regerror.c
|
||||||
regexec.c
|
regexec.c
|
||||||
regfree.c
|
regfree.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
INCLUDE_DIRECTORIES(BEFORE
|
||||||
|
.
|
||||||
|
)
|
||||||
add_library (regexp SHARED regexp.c ${REGEX_SOURCES})
|
add_library (regexp SHARED regexp.c ${REGEX_SOURCES})
|
||||||
|
|
||||||
target_link_libraries(regexp libYap)
|
target_link_libraries(regexp libYap)
|
||||||
@ -19,6 +25,7 @@ target_link_libraries(regexp libYap)
|
|||||||
set_target_properties (regexp PROPERTIES PREFIX "")
|
set_target_properties (regexp PROPERTIES PREFIX "")
|
||||||
|
|
||||||
install(TARGETS regexp
|
install(TARGETS regexp
|
||||||
LIBRARY DESTINATION ${dlls}
|
LIBRARY DESTINATION ${libdir}
|
||||||
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls} )
|
ARCHIVE DESTINATION ${dlls} )
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ static char sccsid[] = "@(#)regexec.c 8.3 (Berkeley) 3/20/94";
|
|||||||
|
|
||||||
#ifndef HAVE_REGEXEC
|
#ifndef HAVE_REGEXEC
|
||||||
|
|
||||||
#include "c_interface.h"
|
#include "YapInterface.h"
|
||||||
#if HAVE_SYS_TYPES_H
|
#if HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
@ -68,8 +68,8 @@ static char sccsid[] = "@(#)regexec.c 8.3 (Berkeley) 3/20/94";
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "regex2.h"
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "regex2.h"
|
||||||
#include "yapregex.h"
|
#include "yapregex.h"
|
||||||
|
|
||||||
#if used
|
#if used
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -42,6 +42,7 @@ endif()
|
|||||||
|
|
||||||
MY_install(TARGETS sys
|
MY_install(TARGETS sys
|
||||||
LIBRARY DESTINATION ${dlls}
|
LIBRARY DESTINATION ${dlls}
|
||||||
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls} )
|
ARCHIVE DESTINATION ${dlls} )
|
||||||
|
|
||||||
configure_file ("sys_config.h.cmake" "sys_config.h" )
|
configure_file ("sys_config.h.cmake" "sys_config.h" )
|
||||||
|
@ -85,7 +85,7 @@
|
|||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void init_sys(void);
|
X_API void init_sys(void);
|
||||||
|
|
||||||
#if defined(__MINGW32__) || _MSC_VER
|
#if defined(__MINGW32__) || _MSC_VER
|
||||||
static YAP_Term WinError(void) {
|
static YAP_Term WinError(void) {
|
||||||
@ -1034,7 +1034,7 @@ static YAP_Bool error_message(void) {
|
|||||||
return YAP_Unify(YAP_ARG2, YAP_ARG1);
|
return YAP_Unify(YAP_ARG2, YAP_ARG1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
void init_sys(void) {
|
X_API void init_sys(void) {
|
||||||
#if HAVE_MKTIME
|
#if HAVE_MKTIME
|
||||||
tzset();
|
tzset();
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
||||||
|
|
||||||
set ( TRIES_SOURCES
|
set ( TRIES_SOURCES
|
||||||
core_tries.c
|
core_tries.c
|
||||||
@ -13,6 +14,7 @@ set_target_properties (tries PROPERTIES PREFIX "")
|
|||||||
|
|
||||||
install(TARGETS tries
|
install(TARGETS tries
|
||||||
LIBRARY DESTINATION ${dlls}
|
LIBRARY DESTINATION ${dlls}
|
||||||
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls})
|
ARCHIVE DESTINATION ${dlls})
|
||||||
|
|
||||||
|
|
||||||
@ -22,6 +24,9 @@ set ( ITRIES_SOURCES
|
|||||||
itries.c
|
itries.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (ANDROID OR WIN32)
|
||||||
|
add_component ( otries ${TRIES_SOURCES} )
|
||||||
|
endif()
|
||||||
add_library (itries SHARED ${ITRIES_SOURCES})
|
add_library (itries SHARED ${ITRIES_SOURCES})
|
||||||
|
|
||||||
target_link_libraries(itries libYap)
|
target_link_libraries(itries libYap)
|
||||||
@ -30,5 +35,6 @@ set_target_properties (itries PROPERTIES PREFIX "")
|
|||||||
|
|
||||||
install(TARGETS itries
|
install(TARGETS itries
|
||||||
LIBRARY DESTINATION ${dlls}
|
LIBRARY DESTINATION ${dlls}
|
||||||
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls} )
|
ARCHIVE DESTINATION ${dlls} )
|
||||||
|
|
||||||
|
@ -843,7 +843,7 @@ int traverse_get_counter(TrNode node) {
|
|||||||
|
|
||||||
YAP_Term generate_label(YAP_Int Index) {
|
YAP_Term generate_label(YAP_Int Index) {
|
||||||
char label[20];
|
char label[20];
|
||||||
sprintf(label,"L%ld", Index);
|
sprintf(label,"L%" Int_F, Index);
|
||||||
return YAP_MkAtomTerm(YAP_LookupAtom(label));
|
return YAP_MkAtomTerm(YAP_LookupAtom(label));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1004,7 +1004,7 @@ YAP_Int core_db_trie_get_optimization_level_count(YAP_Int opt_level) {
|
|||||||
void displaynode(TrNode node) {
|
void displaynode(TrNode node) {
|
||||||
if (node != NULL) {
|
if (node != NULL) {
|
||||||
if (IS_HASH_NODE(node))
|
if (IS_HASH_NODE(node))
|
||||||
printf("HASH n%i, b%i, p%li\n", TrHash_num_nodes((TrHash) node), TrHash_num_buckets((TrHash) node), (long) node);
|
printf("HASH n%i, b%i, p%p\n", TrHash_num_nodes((TrHash) node), TrHash_num_buckets((TrHash) node), node);
|
||||||
else if (TrNode_entry(node) == PairInitTag)
|
else if (TrNode_entry(node) == PairInitTag)
|
||||||
printf("PairInitTag\n");
|
printf("PairInitTag\n");
|
||||||
else if (TrNode_entry(node) == PairEndTag)
|
else if (TrNode_entry(node) == PairEndTag)
|
||||||
@ -1012,7 +1012,7 @@ void displaynode(TrNode node) {
|
|||||||
else if (IS_FUNCTOR_NODE(node))
|
else if (IS_FUNCTOR_NODE(node))
|
||||||
printf("functor(%s)\n", YAP_AtomName(YAP_NameOfFunctor((YAP_Functor)( ~ApplTag & TrNode_entry(node)))));
|
printf("functor(%s)\n", YAP_AtomName(YAP_NameOfFunctor((YAP_Functor)( ~ApplTag & TrNode_entry(node)))));
|
||||||
else if (YAP_IsIntTerm(TrNode_entry(node)))
|
else if (YAP_IsIntTerm(TrNode_entry(node)))
|
||||||
printf("int(%ld)\n", YAP_IntOfTerm(TrNode_entry(node)));
|
printf("int(%"Int_F")\n", YAP_IntOfTerm(TrNode_entry(node)));
|
||||||
else if (YAP_IsAtomTerm(TrNode_entry(node)))
|
else if (YAP_IsAtomTerm(TrNode_entry(node)))
|
||||||
printf("atom(%s)\n", YAP_AtomName(YAP_AtomOfTerm(TrNode_entry(node))));
|
printf("atom(%s)\n", YAP_AtomName(YAP_AtomOfTerm(TrNode_entry(node))));
|
||||||
else
|
else
|
||||||
@ -1040,7 +1040,7 @@ void displayterm(YAP_Term term) {
|
|||||||
else if (YAP_IsApplTerm(term))
|
else if (YAP_IsApplTerm(term))
|
||||||
printf("functor(%s)\n", YAP_AtomName(YAP_NameOfFunctor((YAP_Functor)( ~ApplTag & term))));
|
printf("functor(%s)\n", YAP_AtomName(YAP_NameOfFunctor((YAP_Functor)( ~ApplTag & term))));
|
||||||
else if (YAP_IsIntTerm(term))
|
else if (YAP_IsIntTerm(term))
|
||||||
printf("int(%ld)\n", YAP_IntOfTerm(term));
|
printf("int(%"Int_F")\n", YAP_IntOfTerm(term));
|
||||||
else if (YAP_IsAtomTerm(term))
|
else if (YAP_IsAtomTerm(term))
|
||||||
printf("atom(%s)\n", YAP_AtomName(YAP_AtomOfTerm(term)));
|
printf("atom(%s)\n", YAP_AtomName(YAP_AtomOfTerm(term)));
|
||||||
else
|
else
|
||||||
@ -1070,7 +1070,7 @@ void display_trie_inner(TrNode node) {
|
|||||||
void trie_display_node(TrNode node) {
|
void trie_display_node(TrNode node) {
|
||||||
if (node != NULL) {
|
if (node != NULL) {
|
||||||
if (IS_HASH_NODE(node))
|
if (IS_HASH_NODE(node))
|
||||||
printf("HASH(n%i, b%i, p%li), ", TrHash_num_nodes((TrHash) node), TrHash_num_buckets((TrHash) node), (long) node);
|
printf("HASH(n%i, b%i, p%p), ", TrHash_num_nodes((TrHash) node), TrHash_num_buckets((TrHash) node), node);
|
||||||
else if (TrNode_entry(node) == PairInitTag)
|
else if (TrNode_entry(node) == PairInitTag)
|
||||||
printf("PairInitTag, ");
|
printf("PairInitTag, ");
|
||||||
else if (TrNode_entry(node) == PairEndTag)
|
else if (TrNode_entry(node) == PairEndTag)
|
||||||
@ -1078,7 +1078,7 @@ void trie_display_node(TrNode node) {
|
|||||||
else if (IS_FUNCTOR_NODE(node))
|
else if (IS_FUNCTOR_NODE(node))
|
||||||
printf("functor(%s), ", YAP_AtomName(YAP_NameOfFunctor((YAP_Functor)( ~ApplTag & TrNode_entry(node)))));
|
printf("functor(%s), ", YAP_AtomName(YAP_NameOfFunctor((YAP_Functor)( ~ApplTag & TrNode_entry(node)))));
|
||||||
else if (YAP_IsIntTerm(TrNode_entry(node)))
|
else if (YAP_IsIntTerm(TrNode_entry(node)))
|
||||||
printf("int(%ld), ", YAP_IntOfTerm(TrNode_entry(node)));
|
printf("int(%" Int_F"), ", YAP_IntOfTerm(TrNode_entry(node)));
|
||||||
else if (YAP_IsAtomTerm(TrNode_entry(node)))
|
else if (YAP_IsAtomTerm(TrNode_entry(node)))
|
||||||
printf("atom(%s), ", YAP_AtomName(YAP_AtomOfTerm(TrNode_entry(node))));
|
printf("atom(%s), ", YAP_AtomName(YAP_AtomOfTerm(TrNode_entry(node))));
|
||||||
else
|
else
|
||||||
|
@ -31,7 +31,7 @@ typedef struct {
|
|||||||
/* Procedures */
|
/* Procedures */
|
||||||
/* -------------------------- */
|
/* -------------------------- */
|
||||||
|
|
||||||
void init_tries(void);
|
O_API void init_tries(void);
|
||||||
static YAP_Bool p_trie_open(void);
|
static YAP_Bool p_trie_open(void);
|
||||||
static YAP_Bool p_trie_close(void);
|
static YAP_Bool p_trie_close(void);
|
||||||
static YAP_Bool p_trie_close_all(void);
|
static YAP_Bool p_trie_close_all(void);
|
||||||
@ -87,7 +87,7 @@ static YAP_Bool p_print_trie(void);
|
|||||||
/* Module Init Procedure */
|
/* Module Init Procedure */
|
||||||
/* -------------------------- */
|
/* -------------------------- */
|
||||||
|
|
||||||
void init_tries(void) {
|
O_API void init_tries(void) {
|
||||||
trie_init_module();
|
trie_init_module();
|
||||||
|
|
||||||
YAP_UserCPredicate("trie_open", p_trie_open, 1);
|
YAP_UserCPredicate("trie_open", p_trie_open, 1);
|
||||||
@ -955,3 +955,27 @@ static YAP_Bool p_trie_db_opt_min_prefix(void) {
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#undef min_prefix
|
#undef min_prefix
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
int WINAPI win_tries(HANDLE, DWORD, LPVOID);
|
||||||
|
|
||||||
|
int WINAPI win_tries(HANDLE hinst, DWORD reason, LPVOID reserved)
|
||||||
|
{
|
||||||
|
switch (reason)
|
||||||
|
{
|
||||||
|
case DLL_PROCESS_ATTACH:
|
||||||
|
break;
|
||||||
|
case DLL_PROCESS_DETACH:
|
||||||
|
break;
|
||||||
|
case DLL_THREAD_ATTACH:
|
||||||
|
break;
|
||||||
|
case DLL_THREAD_DETACH:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -23,13 +23,13 @@ gen_fields(Inp,Out) :-
|
|||||||
split_unquoted(Inp," ",["A",Atom,_,_]), !,
|
split_unquoted(Inp," ",["A",Atom,_,_]), !,
|
||||||
( Atom = [C|_], code_type(C, alpha), Atom \= "Trail"
|
( Atom = [C|_], code_type(C, alpha), Atom \= "Trail"
|
||||||
->
|
->
|
||||||
append(["EXTERNAL Atom Atom",Atom,"; EXTERNAL Term Term",Atom,";"], Out)
|
append(["X_API EXTERNAL Atom Atom",Atom,"; X_API EXTERNAL Term Term",Atom,";"], Out)
|
||||||
;
|
;
|
||||||
append(["EXTERNAL Atom Atom",Atom,";"], Out)
|
append(["X_API EXTERNAL Atom Atom",Atom,";"], Out)
|
||||||
).
|
).
|
||||||
gen_fields(Inp,Out) :-
|
gen_fields(Inp,Out) :-
|
||||||
split_unquoted(Inp," ",["F",Name,_,_]), !,
|
split_unquoted(Inp," ",["F",Name,_,_]), !,
|
||||||
append(["EXTERNAL Functor Functor",Name,";\n"],Out).
|
append(["X_API EXTERNAL Functor Functor",Name,";\n"],Out).
|
||||||
|
|
||||||
gen_rcov(Inp,Out) :-
|
gen_rcov(Inp,Out) :-
|
||||||
split_unquoted(Inp," ",["A",Atom,_,_]), !,
|
split_unquoted(Inp," ",["A",Atom,_,_]), !,
|
||||||
|
13
misc/mktags
Normal file
13
misc/mktags
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
# etags
|
||||||
|
|
||||||
|
/bin/rm -f TAGS
|
||||||
|
find . -name '*.c' | xargs etags -a -Q
|
||||||
|
find . -name '*.h' | xargs etags -a -Q
|
||||||
|
find . -name '*.pl' | xargs etags -a -Q -lprolog
|
||||||
|
find . -name '*.yap' | xargs etags -a -Q -lprolog
|
||||||
|
find . -name '*.cxx' | xargs etags -a -Q
|
||||||
|
find . -name '*.hh' | xargs etags -a -Q
|
||||||
|
find . -name '*.py' | xargs etags -a -Q
|
||||||
|
|
||||||
|
|
@ -38,7 +38,9 @@ set (YAPOS_HEADERS
|
|||||||
|
|
||||||
include_directories (../H ../include ../OPTYap . ${GMP_INCLUDE_DIR} ${PROJECT_BINARY_DIR})
|
include_directories (../H ../include ../OPTYap . ${GMP_INCLUDE_DIR} ${PROJECT_BINARY_DIR})
|
||||||
|
|
||||||
set (POSITION_INDEPENDENT_CODE TRUE)
|
SET_PROPERTY(DIRECTORY PROPERTY COMPILE_DEFINITIONS YAP_KERNEL=1 )
|
||||||
|
|
||||||
|
set (POSITION_INDEPENDENT_CODE TRUE)
|
||||||
|
|
||||||
add_component (libYAPOs
|
add_component (libYAPOs
|
||||||
${YAPOS_SOURCES}
|
${YAPOS_SOURCES}
|
||||||
|
@ -30,7 +30,7 @@ static char SccsId[] = "%W% %G%";
|
|||||||
#include "YapHeap.h"
|
#include "YapHeap.h"
|
||||||
#include "YapText.h"
|
#include "YapText.h"
|
||||||
#include "Yatom.h"
|
#include "Yatom.h"
|
||||||
#include "eval.h"
|
#include "YapEval.h"
|
||||||
#include "yapio.h"
|
#include "yapio.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#if HAVE_STDARG_H
|
#if HAVE_STDARG_H
|
||||||
@ -500,13 +500,16 @@ static void reset_regs(TokEntry *tokstart, FEnv *fe) {
|
|||||||
static Term get_variables(FEnv *fe, TokEntry *tokstart) {
|
static Term get_variables(FEnv *fe, TokEntry *tokstart) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term v;
|
Term v;
|
||||||
|
jmp_buf j;
|
||||||
|
LOCAL_IOBotch = &j;
|
||||||
if (fe->vp) {
|
if (fe->vp) {
|
||||||
while (true) {
|
while (true) {
|
||||||
fe->old_H = HR;
|
fe->old_H = HR;
|
||||||
|
|
||||||
if (setjmp(LOCAL_IOBotch) == 0) {
|
if (setjmp(j) == 0) {
|
||||||
if ((v = Yap_Variables(LOCAL_VarTable, TermNil))) {
|
if ((v = Yap_Variables(LOCAL_VarTable, TermNil))) {
|
||||||
fe->old_H = HR;
|
fe->old_H = HR;
|
||||||
|
LOCAL_IOBotch = NULL;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -514,19 +517,23 @@ static Term get_variables(FEnv *fe, TokEntry *tokstart) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LOCAL_IOBotch = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Term get_varnames(FEnv *fe, TokEntry *tokstart) {
|
static Term get_varnames(FEnv *fe, TokEntry *tokstart) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term v;
|
Term v;
|
||||||
|
jmp_buf j;
|
||||||
|
LOCAL_IOBotch = &j;
|
||||||
if (fe->np) {
|
if (fe->np) {
|
||||||
while (true) {
|
while (true) {
|
||||||
fe->old_H = HR;
|
fe->old_H = HR;
|
||||||
|
|
||||||
if (setjmp(LOCAL_IOBotch) == 0) {
|
if (setjmp(j) == 0) {
|
||||||
if ((v = Yap_VarNames(LOCAL_VarTable, TermNil))) {
|
if ((v = Yap_VarNames(LOCAL_VarTable, TermNil))) {
|
||||||
fe->old_H = HR;
|
fe->old_H = HR;
|
||||||
|
LOCAL_IOBotch = NULL;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -534,24 +541,30 @@ static Term get_varnames(FEnv *fe, TokEntry *tokstart) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LOCAL_IOBotch = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Term get_singletons(FEnv *fe, TokEntry *tokstart) {
|
static Term get_singletons(FEnv *fe, TokEntry *tokstart) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term v;
|
Term v;
|
||||||
|
jmp_buf j;
|
||||||
|
LOCAL_IOBotch = &j;
|
||||||
if (fe->sp) {
|
if (fe->sp) {
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
fe->old_H = HR;
|
fe->old_H = HR;
|
||||||
|
|
||||||
if (setjmp(LOCAL_IOBotch) == 0) {
|
if (setjmp(j) == 0) {
|
||||||
if ((v = Yap_Singletons(LOCAL_VarTable, TermNil)))
|
if ((v = Yap_Singletons(LOCAL_VarTable, TermNil))) {
|
||||||
|
LOCAL_IOBotch = NULL;
|
||||||
return v;
|
return v;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
reset_regs(tokstart, fe);
|
reset_regs(tokstart, fe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LOCAL_IOBotch = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -580,18 +593,23 @@ static void warn_singletons(FEnv *fe, TokEntry *tokstart) {
|
|||||||
static Term get_stream_position(FEnv *fe, TokEntry *tokstart) {
|
static Term get_stream_position(FEnv *fe, TokEntry *tokstart) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term v;
|
Term v;
|
||||||
|
jmp_buf j;
|
||||||
|
LOCAL_IOBotch = &j;
|
||||||
if (fe->tp) {
|
if (fe->tp) {
|
||||||
while (true) {
|
while (true) {
|
||||||
fe->old_H = HR;
|
fe->old_H = HR;
|
||||||
|
|
||||||
if (setjmp(LOCAL_IOBotch) == 0) {
|
if (setjmp(j) == 0) {
|
||||||
if ((v = CurrentPositionToTerm()))
|
if ((v = CurrentPositionToTerm())) {
|
||||||
|
LOCAL_IOBotch = NULL;
|
||||||
return v;
|
return v;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
reset_regs(tokstart, fe);
|
reset_regs(tokstart, fe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LOCAL_IOBotch = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
129
os/time.c
129
os/time.c
@ -142,18 +142,23 @@ void Yap_systime_interval(Int *now, Int *interval) {
|
|||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
static FILETIME StartOfTimes, last_time;
|
typedef union {
|
||||||
|
FILETIME f;
|
||||||
|
__int64 t;
|
||||||
|
} win64_time_t;
|
||||||
|
|
||||||
static FILETIME StartOfTimes_sys, last_time_sys;
|
static win64_time_t StartOfTimes, last_time;
|
||||||
|
|
||||||
|
static win64_time_t StartOfTimes_sys, last_time_sys;
|
||||||
|
|
||||||
static clock_t TimesStartOfTimes, Times_last_time;
|
static clock_t TimesStartOfTimes, Times_last_time;
|
||||||
|
|
||||||
/* store user time in this variable */
|
/* store user time in this variable */
|
||||||
void Yap_InitTime(int wid) {
|
void Yap_InitTime(int wid) {
|
||||||
HANDLE hProcess = GetCurrentProcess();
|
HANDLE hProcess = GetCurrentProcess();
|
||||||
FILETIME CreationTime, ExitTime, KernelTime, UserTime;
|
win64_time_t CreationTime, ExitTime, KernelTime, UserTime;
|
||||||
if (!GetProcessTimes(hProcess, &CreationTime, &ExitTime, &KernelTime,
|
if (!GetProcessTimes(hProcess, &CreationTime.f, &ExitTime.f, &KernelTime.f,
|
||||||
&UserTime)) {
|
&UserTime.f)) {
|
||||||
/* WIN98 */
|
/* WIN98 */
|
||||||
clock_t t;
|
clock_t t;
|
||||||
t = clock();
|
t = clock();
|
||||||
@ -161,125 +166,89 @@ void Yap_InitTime(int wid) {
|
|||||||
} else {
|
} else {
|
||||||
#if THREADS
|
#if THREADS
|
||||||
REMOTE_ThreadHandle(wid).start_of_timesp =
|
REMOTE_ThreadHandle(wid).start_of_timesp =
|
||||||
(struct _FILETIME *)malloc(sizeof(FILETIME));
|
(struct _win64_time_t *)malloc(sizeof(win64_time_t));
|
||||||
REMOTE_ThreadHandle(wid).last_timep =
|
REMOTE_ThreadHandle(wid).last_timep =
|
||||||
(struct _FILETIME *)malloc(sizeof(FILETIME));
|
(struct _win64_time_t *)malloc(sizeof(win64_time_t));
|
||||||
REMOTE_ThreadHandle(wid).start_of_times_sysp =
|
REMOTE_ThreadHandle(wid).start_of_times_sysp =
|
||||||
(struct _FILETIME *)malloc(sizeof(FILETIME));
|
(struct _win64_time_t *)malloc(sizeof(win64_time_t));
|
||||||
REMOTE_ThreadHandle(wid).last_time_sysp =
|
REMOTE_ThreadHandle(wid).last_time_sysp =
|
||||||
(struct _FILETIME *)malloc(sizeof(FILETIME));
|
(struct _win64_time_t *)malloc(sizeof(win64_time_t));
|
||||||
(*REMOTE_ThreadHandle(wid).last_timep).dwLowDateTime =
|
(*REMOTE_ThreadHandle(wid).last_timep).f.dwLowDateTime =
|
||||||
UserTime.dwLowDateTime;
|
UserTime.dwLowDateTime;
|
||||||
(*REMOTE_ThreadHandle(wid).last_timep).dwHighDateTime =
|
(*REMOTE_ThreadHandle(wid).last_timep).dwHighDateTime =
|
||||||
UserTime.dwHighDateTime;
|
UserTime.dwHighDateTime;
|
||||||
(*REMOTE_ThreadHandle(wid).start_of_timesp).dwLowDateTime =
|
(*REMOTE_ThreadHandle(wid).start_of_timesp).f.dwLowDateTime =
|
||||||
UserTime.dwLowDateTime;
|
UserTime.dwLowDateTime;
|
||||||
(*REMOTE_ThreadHandle(wid).start_of_timesp).dwHighDateTime =
|
(*REMOTE_ThreadHandle(wid).start_of_timesp).f.dwHighDateTime =
|
||||||
UserTime.dwHighDateTime;
|
UserTime.dwHighDateTime;
|
||||||
(*REMOTE_ThreadHandle(wid).last_time_sysp).dwLowDateTime =
|
(*REMOTE_ThreadHandle(wid).last_time_sysp).f.dwLowDateTime =
|
||||||
KernelTime.dwLowDateTime;
|
KernelTime.dwLowDateTime;
|
||||||
(*REMOTE_ThreadHandle(wid).last_time_sysp).dwHighDateTime =
|
(*REMOTE_ThreadHandle(wid).last_time_sysp).f.dwHighDateTime =
|
||||||
KernelTime.dwHighDateTime;
|
KernelTime.dwHighDateTime;
|
||||||
(*REMOTE_ThreadHandle(wid).start_of_times_sysp).dwLowDateTime =
|
(*REMOTE_ThreadHandle(wid).start_of_times_sysp).f.dwLowDateTime =
|
||||||
KernelTime.dwLowDateTime;
|
KernelTime.dwLowDateTime;
|
||||||
(*REMOTE_ThreadHandle(wid).start_of_times_sysp).dwHighDateTime =
|
(*REMOTE_ThreadHandle(wid).start_of_times_sysp).f.dwHighDateTime =
|
||||||
KernelTime.dwHighDateTime;
|
KernelTime.dwHighDateTime;
|
||||||
#else
|
#else
|
||||||
last_time.dwLowDateTime = UserTime.dwLowDateTime;
|
last_time.f.dwLowDateTime = UserTime.f.dwLowDateTime;
|
||||||
last_time.dwHighDateTime = UserTime.dwHighDateTime;
|
last_time.f.dwHighDateTime = UserTime.f.dwHighDateTime;
|
||||||
StartOfTimes.dwLowDateTime = UserTime.dwLowDateTime;
|
StartOfTimes.f.dwLowDateTime = UserTime.f.dwLowDateTime;
|
||||||
StartOfTimes.dwHighDateTime = UserTime.dwHighDateTime;
|
StartOfTimes.f.dwHighDateTime = UserTime.f.dwHighDateTime;
|
||||||
last_time_sys.dwLowDateTime = KernelTime.dwLowDateTime;
|
last_time_sys.f.dwLowDateTime = KernelTime.f.dwLowDateTime;
|
||||||
last_time_sys.dwHighDateTime = KernelTime.dwHighDateTime;
|
last_time_sys.f.dwHighDateTime = KernelTime.f.dwHighDateTime;
|
||||||
StartOfTimes_sys.dwLowDateTime = KernelTime.dwLowDateTime;
|
StartOfTimes_sys.f.dwLowDateTime = KernelTime.f.dwLowDateTime;
|
||||||
StartOfTimes_sys.dwHighDateTime = KernelTime.dwHighDateTime;
|
StartOfTimes_sys.f.dwHighDateTime = KernelTime.f.dwHighDateTime;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
static unsigned long long int sub_utime(FILETIME t1, FILETIME t2) {
|
|
||||||
ULARGE_INTEGER u[2];
|
|
||||||
memcpy((void *)u, (void *)&t1, sizeof(FILETIME));
|
|
||||||
memcpy((void *)(u + 1), (void *)&t2, sizeof(FILETIME));
|
|
||||||
return u[0].QuadPart - u[1].QuadPart;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
UInt Yap_cputime(void) {
|
UInt Yap_cputime(void) {
|
||||||
HANDLE hProcess = GetCurrentProcess();
|
HANDLE hProcess = GetCurrentProcess();
|
||||||
FILETIME CreationTime, ExitTime, KernelTime, UserTime;
|
win64_time_t CreationTime, ExitTime, KernelTime, UserTime;
|
||||||
if (!GetProcessTimes(hProcess, &CreationTime, &ExitTime, &KernelTime,
|
if (!GetProcessTimes(hProcess, &CreationTime.f, & ExitTime.f, &KernelTime.f,
|
||||||
&UserTime)) {
|
&UserTime.f)) {
|
||||||
clock_t t;
|
clock_t t;
|
||||||
t = clock();
|
t = clock();
|
||||||
return (((t - TimesStartOfTimes) * 1000) / CLOCKS_PER_SEC);
|
return (((t - TimesStartOfTimes) * 1000) / CLOCKS_PER_SEC);
|
||||||
} else {
|
} else {
|
||||||
#ifdef __GNUC__
|
__int64 t = UserTime.t - StartOfTimes.t;
|
||||||
unsigned long long int t = sub_utime(UserTime, StartOfTimes);
|
|
||||||
do_div(t, 10000);
|
|
||||||
return ((Int)t);
|
|
||||||
#endif
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
__int64 t = *(__int64 *)&UserTime - *(__int64 *)&StartOfTimes;
|
|
||||||
return ((Int)(t / 10000));
|
return ((Int)(t / 10000));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Yap_cputime_interval(Int *now, Int *interval) {
|
void Yap_cputime_interval(Int *now, Int *interval) {
|
||||||
HANDLE hProcess = GetCurrentProcess();
|
HANDLE hProcess = GetCurrentProcess();
|
||||||
FILETIME CreationTime, ExitTime, KernelTime, UserTime;
|
win64_time_t CreationTime, ExitTime, KernelTime, UserTime;
|
||||||
if (!GetProcessTimes(hProcess, &CreationTime, &ExitTime, &KernelTime,
|
if (!GetProcessTimes(hProcess, &CreationTime.f, & ExitTime.f, &KernelTime.f,
|
||||||
&UserTime)) {
|
&UserTime.f)) {
|
||||||
clock_t t;
|
clock_t t;
|
||||||
t = clock();
|
t = clock();
|
||||||
*now = ((t - TimesStartOfTimes) * 1000) / CLOCKS_PER_SEC;
|
*now = ((t - TimesStartOfTimes) * 1000) / CLOCKS_PER_SEC;
|
||||||
*interval = (t - Times_last_time) * 1000 / CLOCKS_PER_SEC;
|
*interval = (t - Times_last_time) * 1000 / CLOCKS_PER_SEC;
|
||||||
Times_last_time = t;
|
Times_last_time = t;
|
||||||
} else {
|
} else {
|
||||||
#ifdef __GNUC__
|
__int64 t1 = UserTime.t - StartOfTimes.t;
|
||||||
unsigned long long int t1 = sub_utime(UserTime, StartOfTimes);
|
__int64 t2 = UserTime.t - last_time.t;
|
||||||
unsigned long long int t2 = sub_utime(UserTime, last_time);
|
|
||||||
do_div(t1, 10000);
|
|
||||||
*now = (Int)t1;
|
|
||||||
do_div(t2, 10000);
|
|
||||||
*interval = (Int)t2;
|
|
||||||
#endif
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
__int64 t1 = *(__int64 *)&UserTime - *(__int64 *)&StartOfTimes;
|
|
||||||
__int64 t2 = *(__int64 *)&UserTime - *(__int64 *)&last_time;
|
|
||||||
*now = (Int)(t1 / 10000);
|
*now = (Int)(t1 / 10000);
|
||||||
*interval = (Int)(t2 / 10000);
|
*interval = (Int)(t2 / 10000);
|
||||||
#endif
|
last_time.f.dwLowDateTime = UserTime.f.dwLowDateTime;
|
||||||
last_time.dwLowDateTime = UserTime.dwLowDateTime;
|
last_time.f.dwHighDateTime = UserTime.f.dwHighDateTime;
|
||||||
last_time.dwHighDateTime = UserTime.dwHighDateTime;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Yap_systime_interval(Int *now, Int *interval) {
|
void Yap_systime_interval(Int *now, Int *interval) {
|
||||||
HANDLE hProcess = GetCurrentProcess();
|
HANDLE hProcess = GetCurrentProcess();
|
||||||
FILETIME CreationTime, ExitTime, KernelTime, UserTime;
|
win64_time_t CreationTime, ExitTime, KernelTime, UserTime;
|
||||||
if (!GetProcessTimes(hProcess, &CreationTime, &ExitTime, &KernelTime,
|
if (!GetProcessTimes(hProcess, &CreationTime.f, &ExitTime.f, &KernelTime.f,
|
||||||
&UserTime)) {
|
&UserTime.f)) {
|
||||||
*now = *interval = 0; /* not available */
|
*now = *interval = 0; /* not available */
|
||||||
} else {
|
} else {
|
||||||
#ifdef __GNUC__
|
__int64 t1 = KernelTime.t - StartOfTimes_sys.t;
|
||||||
unsigned long long int t1 = sub_utime(KernelTime, StartOfTimes_sys);
|
__int64 t2 = KernelTime.t - last_time_sys.t;
|
||||||
unsigned long long int t2 = sub_utime(KernelTime, last_time_sys);
|
|
||||||
do_div(t1, 10000);
|
|
||||||
*now = (Int)t1;
|
|
||||||
do_div(t2, 10000);
|
|
||||||
*interval = (Int)t2;
|
|
||||||
#endif
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
__int64 t1 = *(__int64 *)&KernelTime - *(__int64 *)&StartOfTimes_sys;
|
|
||||||
__int64 t2 = *(__int64 *)&KernelTime - *(__int64 *)&last_time_sys;
|
|
||||||
*now = (Int)(t1 / 10000);
|
*now = (Int)(t1 / 10000);
|
||||||
*interval = (Int)(t2 / 10000);
|
*interval = (Int)(t2 / 10000);
|
||||||
#endif
|
last_time_sys.f.dwLowDateTime = KernelTime.f.dwLowDateTime;
|
||||||
last_time_sys.dwLowDateTime = KernelTime.dwLowDateTime;
|
last_time_sys.f.dwHighDateTime = KernelTime.f.dwHighDateTime;
|
||||||
last_time_sys.dwHighDateTime = KernelTime.dwHighDateTime;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,9 +345,9 @@ static void InitTime(int wid) {
|
|||||||
struct timeval tp;
|
struct timeval tp;
|
||||||
|
|
||||||
gettimeofday(&tp, NULL);
|
gettimeofday(&tp, NULL);
|
||||||
(*REMOTE_ThreadHandle(wid).last_timep).tv_sec =
|
(*REMOTE_ThreadHandle(wid).last_timep).f.tv_sec =
|
||||||
(*REMOTE_ThreadHandle.start_of_timesp(wid)).tv_sec = tp.tv_sec;
|
(*REMOTE_ThreadHandle.start_of_timesp(wid)).tv_sec = tp.tv_sec;
|
||||||
(*REMOTE_ThreadHandle(wid).last_timep).tv_usec =
|
(*REMOTE_ThreadHandle(wid).last_timep).f.tv_usec =
|
||||||
(*REMOTE_ThreadHandle.start_of_timesp(wid)).tv_usec = tp.tv_usec;
|
(*REMOTE_ThreadHandle.start_of_timesp(wid)).tv_usec = tp.tv_usec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ static char SccsId[] = "%W% %G%";
|
|||||||
#include "Yatom.h"
|
#include "Yatom.h"
|
||||||
#include "YapHeap.h"
|
#include "YapHeap.h"
|
||||||
#include "yapio.h"
|
#include "yapio.h"
|
||||||
#include "eval.h"
|
#include "YapEval.h"
|
||||||
#include "YapText.h"
|
#include "YapText.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#if HAVE_STDARG_H
|
#if HAVE_STDARG_H
|
||||||
|
62
packages/CMakeLists.txt
Normal file
62
packages/CMakeLists.txt
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
#TODO: change macro_log_feature to check both WITH_{$name} and ${name}_FOUND
|
||||||
|
#TODO: improve FindGecode.cmake to be similar to other Find*.cmake
|
||||||
|
#CHECK: GECODE
|
||||||
|
|
||||||
|
macro_optional_find_package (Gecode ON)
|
||||||
|
macro_log_feature (GECODE_FOUND "libgecode"
|
||||||
|
"Use Generic Constraint Development Environment (GECODE) library"
|
||||||
|
"http://www.gecode.org" FALSE)
|
||||||
|
|
||||||
|
if (GECODE_FOUND)
|
||||||
|
#DEFINES:
|
||||||
|
# GECODE_INCLUDE_DIR
|
||||||
|
# GECODE_VERSION
|
||||||
|
# GECODE_LIBRARIES
|
||||||
|
|
||||||
|
#set (EXTRALIBS gecode)
|
||||||
|
|
||||||
|
string(SUBSTRING ${GECODE_VERSION} 0 1 GECODE_MAJOR )
|
||||||
|
|
||||||
|
set (GECODE_SOURCES gecode${GECODE_MAJOR}_yap.cc
|
||||||
|
gecode${GECODE_MAJOR}-common.icc
|
||||||
|
${GECODE_VERSION}/gecode_yap_cc_impl_auto_generated.icc
|
||||||
|
${GECODE_VERSION}/gecode_yap_cc_init_auto_generated.icc
|
||||||
|
${GECODE_VERSION}/gecode_yap_cc_forward_auto_generated.icc
|
||||||
|
disjunctor.icc
|
||||||
|
disjunctor.hh )
|
||||||
|
|
||||||
|
add_custom_target (gecodeyap ALL DEPENDS gecode${GECODE_MAJOR}_yap_hand_written.yap ${GECODE_VERSION}/gecode_yap_auto_generated.yap gecode_yap
|
||||||
|
) # WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
|
||||||
|
|
||||||
|
# create a startup.yss on the top directory.
|
||||||
|
add_custom_command (TARGET gecodeyap
|
||||||
|
COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/gecode${GECODE_MAJOR}_yap_hand_written.yap ${CMAKE_CURRENT_SOURCE_DIR}/${GECODE_VERSION}/gecode_yap_auto_generated.yap > gecode.yap
|
||||||
|
VERBATIM
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library (gecode_yap SHARED ${GECODE_SOURCES})
|
||||||
|
|
||||||
|
target_link_libraries(gecode_yap libYap ${GECODE_LIBRARIES})
|
||||||
|
|
||||||
|
set_target_properties (gecode_yap PROPERTIES PREFIX "")
|
||||||
|
|
||||||
|
include_directories (${GECODE_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${GECODE_VERSION})
|
||||||
|
|
||||||
|
install(TARGETS gecode_yap
|
||||||
|
LIBRARY DESTINATION ${dlls}
|
||||||
|
RUNTIME DESTINATION ${dlls}
|
||||||
|
ARCHIVE DESTINATION ${dlls}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gecode.yap
|
||||||
|
DESTINATION ${libpl}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(FILES clpfd.yap
|
||||||
|
DESTINATION ${libpl}/gecode
|
||||||
|
)
|
||||||
|
|
||||||
|
endif (GECODE_FOUND)
|
||||||
|
|
84
packages/Makefile.in
Normal file
84
packages/Makefile.in
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#
|
||||||
|
# default base directory for YAP installation
|
||||||
|
# (EROOT for architecture-dependent files)
|
||||||
|
#
|
||||||
|
prefix = @prefix@
|
||||||
|
exec_prefix = @exec_prefix@
|
||||||
|
ROOTDIR = $(prefix)
|
||||||
|
EROOTDIR = @exec_prefix@
|
||||||
|
abs_top_builddir = @abs_top_builddir@
|
||||||
|
#
|
||||||
|
# where the binary should be
|
||||||
|
#
|
||||||
|
BINDIR = $(EROOTDIR)/bin
|
||||||
|
#
|
||||||
|
# where YAP should look for libraries
|
||||||
|
#
|
||||||
|
LIBDIR=@libdir@
|
||||||
|
YAPLIBDIR=@libdir@/Yap
|
||||||
|
#
|
||||||
|
# where YAP should look for architecture-independent Prolog libraries
|
||||||
|
#
|
||||||
|
SHAREDIR=$(ROOTDIR)/share
|
||||||
|
#
|
||||||
|
#
|
||||||
|
CXX=@CXX@
|
||||||
|
CXXFLAGS= @SHLIB_CXXFLAGS@ $(YAP_EXTRAS) $(DEFS) -I. -I$(srcdir) -I../.. -I$(srcdir)/../../include -I$(srcdir)/../../os -I @GECODE_INCLUDES@
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# You shouldn't need to change what follows.
|
||||||
|
#
|
||||||
|
INSTALL=@INSTALL@
|
||||||
|
INSTALL_DATA=@INSTALL_DATA@
|
||||||
|
INSTALL_PROGRAM=@INSTALL_PROGRAM@
|
||||||
|
SHELL=/bin/sh
|
||||||
|
RANLIB=@RANLIB@
|
||||||
|
srcdir=@srcdir@
|
||||||
|
SO=@SO@
|
||||||
|
#4.1VPATH=@srcdir@:@srcdir@/OPTYap
|
||||||
|
CWD=$(PWD)
|
||||||
|
#
|
||||||
|
|
||||||
|
OBJS=gecode_yap.o
|
||||||
|
SOBJS=gecode_yap.@SO@
|
||||||
|
|
||||||
|
GECODE_VERSION = @GECODE_VERSION@
|
||||||
|
DISJUNCTOR = -DDISJUNCTOR
|
||||||
|
GECODE_LIBS = @GECODE_EXTRALIBS@
|
||||||
|
GECODE_MAJOR = @GECODE_MAJOR@
|
||||||
|
all: $(SOBJS) gecode.yap
|
||||||
|
|
||||||
|
gecode_yap.o: \
|
||||||
|
$(srcdir)/gecode$(GECODE_MAJOR)_yap.cc \
|
||||||
|
$(srcdir)/gecode$(GECODE_MAJOR)-common.icc \
|
||||||
|
$(srcdir)/$(GECODE_VERSION)/gecode_yap_cc_impl_auto_generated.icc \
|
||||||
|
$(srcdir)/$(GECODE_VERSION)/gecode_yap_cc_init_auto_generated.icc \
|
||||||
|
$(srcdir)/$(GECODE_VERSION)/gecode_yap_cc_forward_auto_generated.icc \
|
||||||
|
$(srcdir)/disjunctor.icc \
|
||||||
|
$(srcdir)/disjunctor.hh
|
||||||
|
$(CXX) -c -I$(srcdir)/$(GECODE_VERSION) $(CXXFLAGS) $(DISJUNCTOR) -o $@ $<
|
||||||
|
|
||||||
|
@DO_SECOND_LD@gecode_yap.@SO@: gecode_yap.o
|
||||||
|
@DO_SECOND_LD@ @SHLIB_CXX_LD@ -o gecode_yap.@SO@ gecode_yap.o $(LDFLAGS) $(GECODE_LIBS) @EXTRA_LIBS_FOR_DLLS@
|
||||||
|
|
||||||
|
gecode.yap: $(srcdir)/gecode$(GECODE_MAJOR)_yap_hand_written.yap $(srcdir)/$(GECODE_VERSION)/gecode_yap_auto_generated.yap
|
||||||
|
cat $^ > $@
|
||||||
|
|
||||||
|
.PHONY: all clean install
|
||||||
|
|
||||||
|
clean:
|
||||||
|
-rm -f *.o $(SOBJS) *~ gecode.yap
|
||||||
|
|
||||||
|
distclean:
|
||||||
|
-rm -f $(SOBJS) Makefile
|
||||||
|
|
||||||
|
install: all install-examples
|
||||||
|
mkdir -p $(DESTDIR)$(YAPLIBDIR)
|
||||||
|
mkdir -p $(DESTDIR)$(SHAREDIR)/Yap
|
||||||
|
mkdir -p $(DESTDIR)$(SHAREDIR)/Yap/gecode
|
||||||
|
$(INSTALL_PROGRAM) $(SOBJS) $(DESTDIR)$(YAPLIBDIR)
|
||||||
|
$(INSTALL) gecode.yap $(DESTDIR)$(SHAREDIR)/Yap
|
||||||
|
$(INSTALL) $(srcdir)/clpfd.yap $(DESTDIR)$(SHAREDIR)/Yap/gecode
|
||||||
|
|
||||||
|
install-examples:
|
||||||
|
|
12
packages/README
Normal file
12
packages/README
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
Development of gecode/yap takes place in:
|
||||||
|
|
||||||
|
git@github.com:denys-duchier/yap-6.3.git
|
||||||
|
|
||||||
|
which tracks the official yap repository and is also regularly pulled into it.
|
||||||
|
see:
|
||||||
|
https://github.com/denys-duchier/yap-6.3
|
||||||
|
|
||||||
|
Enquiries/bug reports can be made either on the yap mailing list or to the
|
||||||
|
author denys.duchier /AT/ univ-orleans.fr.
|
||||||
|
|
||||||
|
What litle documentation there is can be found in file DOC.txt.
|
@ -52,6 +52,7 @@ IF (CUDD_FOUND)
|
|||||||
|
|
||||||
install(TARGETS cudd
|
install(TARGETS cudd
|
||||||
LIBRARY DESTINATION ${dlls}
|
LIBRARY DESTINATION ${dlls}
|
||||||
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls}
|
ARCHIVE DESTINATION ${dlls}
|
||||||
|
|
||||||
)
|
)
|
||||||
|
@ -104,6 +104,16 @@ bdd_new(T, Vars, cudd(M,X,VS,TrueVars)) :-
|
|||||||
VS =.. [vs|TrueVars],
|
VS =.. [vs|TrueVars],
|
||||||
findall(Manager-Cudd, set_bdd(T, VS, Manager, Cudd), [M-X]).
|
findall(Manager-Cudd, set_bdd(T, VS, Manager, Cudd), [M-X]).
|
||||||
|
|
||||||
|
|
||||||
|
set_bdd(T, VS, Manager, Cudd) :-
|
||||||
|
numbervars(VS,0,_),
|
||||||
|
( ground(T)
|
||||||
|
->
|
||||||
|
term_to_cudd(T,Manager,Cudd)
|
||||||
|
;
|
||||||
|
writeln(throw(error(instantiation_error,T)))
|
||||||
|
).
|
||||||
|
|
||||||
/** @pred bdd_from_list(? _List_, ?_Vars_, - _BddHandle_)
|
/** @pred bdd_from_list(? _List_, ?_Vars_, - _BddHandle_)
|
||||||
|
|
||||||
Convert a _List_ of logical expressions of the form above, that
|
Convert a _List_ of logical expressions of the form above, that
|
||||||
@ -116,15 +126,6 @@ bdd_from_list(List, Vars, cudd(M,X,VS,TrueVars)) :-
|
|||||||
VS =.. [vs|TrueVars],
|
VS =.. [vs|TrueVars],
|
||||||
findall(Manager-Cudd, set_bdd_from_list(List, VS, Manager, Cudd), [M-X]).
|
findall(Manager-Cudd, set_bdd_from_list(List, VS, Manager, Cudd), [M-X]).
|
||||||
|
|
||||||
set_bdd(T, VS, Manager, Cudd) :-
|
|
||||||
numbervars(VS,0,_),
|
|
||||||
( ground(T)
|
|
||||||
->
|
|
||||||
term_to_cudd(T,Manager,Cudd)
|
|
||||||
;
|
|
||||||
writeln(throw(error(instantiation_error,T)))
|
|
||||||
).
|
|
||||||
|
|
||||||
set_bdd_from_list(T0, VS, Manager, Cudd) :-
|
set_bdd_from_list(T0, VS, Manager, Cudd) :-
|
||||||
numbervars(VS,0,_),
|
numbervars(VS,0,_),
|
||||||
generate_releases(T0, Manager, T),
|
generate_releases(T0, Manager, T),
|
||||||
|
@ -33,9 +33,10 @@ extract_vars((_-V).MapList, V.Vs) :-
|
|||||||
extract_vars(MapList, Vs).
|
extract_vars(MapList, Vs).
|
||||||
|
|
||||||
complex_to_andor(empty, Map, Map, 0).
|
complex_to_andor(empty, Map, Map, 0).
|
||||||
complex_to_andor([endlist], Map, Map, 0) :- !.
|
|
||||||
complex_to_andor([list(Els)], Map0, MapF, Tree) :- !,
|
complex_to_andor([list(Els)], Map0, MapF, Tree) :- !,
|
||||||
complex_to_andor(Els, Map0, MapF, Tree).
|
complex_to_andor(Els, Map0, MapF, Tree).
|
||||||
|
complex_to_andor([endlist|_], Map, Map, 1) :- !.
|
||||||
|
El1 == endlist, !.
|
||||||
complex_to_andor([El1,El2|Els], Map0, MapF, or(T1,T2)) :- !,
|
complex_to_andor([El1,El2|Els], Map0, MapF, or(T1,T2)) :- !,
|
||||||
complex_to_and(El1, Map0, MapI, T1),
|
complex_to_and(El1, Map0, MapI, T1),
|
||||||
complex_to_andor([El2|Els], MapI, MapF, T2).
|
complex_to_andor([El2|Els], MapI, MapF, T2).
|
||||||
@ -44,8 +45,8 @@ complex_to_andor([Els], Map0, MapF, V) :-
|
|||||||
|
|
||||||
complex_to_and(int(A1,[endlist]), Map0, MapF, V) :- !,
|
complex_to_and(int(A1,[endlist]), Map0, MapF, V) :- !,
|
||||||
check(Map0, A1, V, MapF).
|
check(Map0, A1, V, MapF).
|
||||||
|
complex_to_and(atom(true,[endlist]), Map0, MapF, 1) :- !.
|
||||||
complex_to_and(atom(A1,[endlist]), Map0, MapF, V) :- !,
|
complex_to_and(atom(A1,[endlist]), Map0, MapF, V) :- !,
|
||||||
check(Map0, A1, V, MapF).
|
|
||||||
complex_to_and(functor(not,1,[int(A1,[endlist])]), Map0, MapF, not(V)) :- !,
|
complex_to_and(functor(not,1,[int(A1,[endlist])]), Map0, MapF, not(V)) :- !,
|
||||||
check(Map0, A1, V, MapF).
|
check(Map0, A1, V, MapF).
|
||||||
complex_to_and(functor(not,1,[atom(A1,[endlist])]), Map0, MapF, not(V)) :- !,
|
complex_to_and(functor(not,1,[atom(A1,[endlist])]), Map0, MapF, not(V)) :- !,
|
||||||
@ -76,6 +77,7 @@ complex_to_and(functor(not,1,[int(A1,Els)|More]), Map0, MapF, or(NOTV1,O2)) :-
|
|||||||
complex_to_and(functor(not,1,More), MapI2, MapF, O2).
|
complex_to_and(functor(not,1,More), MapI2, MapF, O2).
|
||||||
complex_to_and(functor(not,1,[atom(A1,Els)|More]), Map0, MapF, or(NOTV1,O2)) :-
|
complex_to_and(functor(not,1,[atom(A1,Els)|More]), Map0, MapF, or(NOTV1,O2)) :-
|
||||||
check(Map0, A1, V, MapI),
|
check(Map0, A1, V, MapI),
|
||||||
|
check(Map0, A1, V, MapF).
|
||||||
(Els == [endlist]
|
(Els == [endlist]
|
||||||
->
|
->
|
||||||
NOTV1 = not(V),
|
NOTV1 = not(V),
|
||||||
@ -86,17 +88,18 @@ complex_to_and(functor(not,1,[atom(A1,Els)|More]), Map0, MapF, or(NOTV1,O2)) :-
|
|||||||
),
|
),
|
||||||
complex_to_and(functor(not,1,More), MapI2, MapF, O2).
|
complex_to_and(functor(not,1,More), MapI2, MapF, O2).
|
||||||
|
|
||||||
|
tabled_complex_to_andor(empty, Map, Map, Tab, Tab, 0).
|
||||||
tabled_complex_to_andor(T, Map, Map, Tab, Tab, V) :-
|
tabled_complex_to_andor(T, Map, Map, Tab, Tab, V) :-
|
||||||
rb_lookup(T, V, Tab), !,
|
rb_lookup(T, V, Tab), !,
|
||||||
increment_ref_count(V).
|
increment_ref_count(V).
|
||||||
tabled_complex_to_andor(IN, Map0, MapF, Tab0, TabF, OUT) :-
|
tabled_complex_to_andor(IN, Map, Map, Tab, Tab, 1) :-
|
||||||
IN = [El1,El2|Els], !,
|
IN = !.
|
||||||
OUT = or(0,_,T1,T2),
|
|
||||||
rb_insert(Tab0, IN, OUT, Tab1),
|
|
||||||
tabled_complex_to_and(El1, Map0, MapI, Tab1, TabI, T1),
|
|
||||||
tabled_complex_to_andor(El2.Els, MapI, MapF, TabI, TabF, T2).
|
|
||||||
tabled_complex_to_andor([Els], Map0, MapF, Tab0, TabF, V) :-
|
tabled_complex_to_andor([Els], Map0, MapF, Tab0, TabF, V) :-
|
||||||
tabled_complex_to_and(Els, Map0, MapF, Tab0, TabF, V).
|
tabled_complex_to_and(Els, Map0, MapF, Tab0, TabF, V).
|
||||||
|
rb_insert(Tab0, IN, OUT, Tab1),
|
||||||
|
tabled_complex_to_andor([El1,Dl2], Map0, MapF, Tab0, TabF, or(T1,T2)) :-
|
||||||
|
tabled_complex_to_and(El1, Map0, MapI, Tab1, TabI, T1),
|
||||||
|
tabled_complex_to_andor(El2.Els, MapI, MapF, TabI, TabF, T2).
|
||||||
|
|
||||||
tabled_complex_to_and(int(A1,[endlist]), Map0, MapF, Tab, Tab, V) :- !,
|
tabled_complex_to_and(int(A1,[endlist]), Map0, MapF, Tab, Tab, V) :- !,
|
||||||
check(Map0, A1, V, MapF).
|
check(Map0, A1, V, MapF).
|
||||||
@ -141,5 +144,3 @@ increment_ref_count(V) :-
|
|||||||
arg(1,V,I0),
|
arg(1,V,I0),
|
||||||
I is I0+1,
|
I is I0+1,
|
||||||
setarg(1,V,I).
|
setarg(1,V,I).
|
||||||
|
|
||||||
|
|
||||||
|
129
packages/clp_examples/3jugs.yap
Normal file
129
packages/clp_examples/3jugs.yap
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
% Example with matrices,based on:
|
||||||
|
%
|
||||||
|
% Three jugs problem in Minzinc modelled as a shortest path problem.
|
||||||
|
%
|
||||||
|
% Problem from Taha "Introduction to Operations Research", page 245
|
||||||
|
%
|
||||||
|
% Model created by Hakan Kjellerstrand, hakank@bonetmail.com
|
||||||
|
% See also my MiniZinc page: http://www.hakank.org/minizinc
|
||||||
|
|
||||||
|
%
|
||||||
|
% VSC: had to transpose the matrix, and change the constraints....
|
||||||
|
%
|
||||||
|
|
||||||
|
:- style_check( all ).
|
||||||
|
|
||||||
|
:- use_module(library(gecode/clpfd)).
|
||||||
|
:- use_module(library(maplist)).
|
||||||
|
:- use_module(library(lists)).
|
||||||
|
|
||||||
|
main :-
|
||||||
|
problem(Z, X, InFlow, OutFlow, N),
|
||||||
|
out(Z, X, InFlow, OutFlow, N),
|
||||||
|
fail.
|
||||||
|
main.
|
||||||
|
|
||||||
|
problem(Z, X, InFlow, OutFlow, N) :-
|
||||||
|
N = 15,
|
||||||
|
Start = 1,
|
||||||
|
End = 15,
|
||||||
|
M = 999,
|
||||||
|
d( M, DD ),
|
||||||
|
D <== array[1..N,1..N] of DD, % distance
|
||||||
|
RHS <== array[1..N] of _, % requirements (right hand statement)
|
||||||
|
X <== array[1..N, 1..N] of 0..1, % the resulting matrix, 1 if connected, 0 else
|
||||||
|
OutFlow <== array[1..N] of 0..1,
|
||||||
|
InFlow <== array[1..N] of 0..1,
|
||||||
|
|
||||||
|
% objective to minimize
|
||||||
|
Z in 0..M,
|
||||||
|
Z #= sum( [I in 1..N, J in 1..N] where D[I,J]<M,
|
||||||
|
D[I,J]*X[I,J]),
|
||||||
|
|
||||||
|
% solve minimize z;
|
||||||
|
% alternative solve statements which may give faster solution
|
||||||
|
%solve :: int_search([ x[i,j] | i,j in 1..n], first_fail, indomain_min, complete) minimize z;
|
||||||
|
% solve minimize z;
|
||||||
|
minimize(Z),
|
||||||
|
|
||||||
|
|
||||||
|
% constraint
|
||||||
|
foreach(I in 1..N,
|
||||||
|
( I == Start ->
|
||||||
|
RHS[I] <== 1 ;
|
||||||
|
I == End ->
|
||||||
|
RHS[I] <== -1 ;
|
||||||
|
RHS[I] <== 0 )
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
% must be larger than 0??
|
||||||
|
foreach( [I in 1..N, J in 1..N],
|
||||||
|
( D[J,I] = M ->
|
||||||
|
X[J,I] #= 0 ;
|
||||||
|
true )
|
||||||
|
),
|
||||||
|
% outflow constraint
|
||||||
|
foreach(I in 1..N,
|
||||||
|
OutFlow[I] #= sum(J in 1..N where D[J,I]<M, X[J,I])
|
||||||
|
),
|
||||||
|
% inflow constraint
|
||||||
|
foreach(J in 1..N,
|
||||||
|
InFlow[J] #= sum(I in 1..N where D[J,I]<M, X[J,I])
|
||||||
|
),
|
||||||
|
% inflow = outflow
|
||||||
|
foreach(I in 1..N, OutFlow[I]-InFlow[I]#=RHS[I]),
|
||||||
|
|
||||||
|
% labeling
|
||||||
|
labeling( [], X).
|
||||||
|
|
||||||
|
% data
|
||||||
|
d(M, [
|
||||||
|
M, 1, M, M, M, M, M, M, 1, M, M, M, M, M, M,
|
||||||
|
M, M, 1, M, M, M, M, M, M, M, M, M, M, M, M,
|
||||||
|
M, M, M, 1, M, M, M, M, 1, M, M, M, M, M, M,
|
||||||
|
M, M, M, M, 1, M, M, M, M, M, M, M, M, M, M,
|
||||||
|
M, M, M, M, M, 1, M, M, 1, M, M, M, M, M, M,
|
||||||
|
M, M, M, M, M, M, 1, M, M, M, M, M, M, M, M,
|
||||||
|
M, M, M, M, M, M, M, 1, 1, M, M, M, M, M, M,
|
||||||
|
M, M, M, M, M, M, M, M, M, M, M, M, M, M, 1,
|
||||||
|
M, M, M, M, M, M, M, M, M, 1, M, M, M, M, M,
|
||||||
|
M, 1, M, M, M, M, M, M, M, M, 1, M, M, M, M,
|
||||||
|
M, M, M, M, M, M, M, M, M, M, M, 1, M, M, M,
|
||||||
|
M, 1, M, M, M, M, M, M, M, M, M, M, 1, M, M,
|
||||||
|
M, M, M, M, M, M, M, M, M, M, M, M, M, 1, M,
|
||||||
|
M, 1, M, M, M, M, M, M, M, M, M, M, M, M, 1,
|
||||||
|
M, M, M, M, M, M, M, M, M, M, M, M, M, M, M
|
||||||
|
]).
|
||||||
|
|
||||||
|
/*
|
||||||
|
% shows the result matrix
|
||||||
|
output [
|
||||||
|
if i = 1 /\ j = 1 then
|
||||||
|
"z: " ++ show(z) ++ "\n" ++
|
||||||
|
"inFlow: " ++ show(inFlow) ++ "\n" ++ "outFlow: " ++ show(outFlow) ++ "\n" ++
|
||||||
|
" 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5\n"
|
||||||
|
else "" endif ++
|
||||||
|
if j = 1 then show(i) ++ " : " else "" endif ++
|
||||||
|
show(x[i,j]) ++ if j = n then "\n" else " " endif
|
||||||
|
| i in 1..n, j in 1..n
|
||||||
|
];
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
out(Cost, Ts, Ins, Out, N) :-
|
||||||
|
format('cost = ~d~n', [Cost]),
|
||||||
|
InsL <== list(Ins),
|
||||||
|
OutL <== list(Out),
|
||||||
|
format('Inputs =', []), maplist(out, InsL), nl,
|
||||||
|
format('Outputs =', []), maplist(out, OutL), nl,
|
||||||
|
format('transitions =~n', []),
|
||||||
|
foreach(I in 1..N, outl(Ts[_,I]) ).
|
||||||
|
|
||||||
|
outl( X ) :-
|
||||||
|
L <== X, % evaluate matrix notation to Prolog lists.
|
||||||
|
format(' ', []),
|
||||||
|
maplist(out, L), nl.
|
||||||
|
|
||||||
|
out(0) :- format(' .', []).
|
||||||
|
out(1) :- format(' 1', []).
|
85
packages/clp_examples/photo.yap
Normal file
85
packages/clp_examples/photo.yap
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
%% -*- prolog -*-
|
||||||
|
%%=============================================================================
|
||||||
|
%% Copyright (C) 2011 by Denys Duchier
|
||||||
|
%%
|
||||||
|
%% This program is free software: you can redistribute it and/or modify it
|
||||||
|
%% under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
%% Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
%% option) any later version.
|
||||||
|
%%
|
||||||
|
%% This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
%% more details.
|
||||||
|
%%
|
||||||
|
%% You should have received a copy of the GNU Lesser General Public License
|
||||||
|
%% along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
%%=============================================================================
|
||||||
|
|
||||||
|
:- use_module(library(gecode/clpfd)).
|
||||||
|
:- use_module(library(maplist)).
|
||||||
|
|
||||||
|
main :- ex(Ex, People, Names, _Preferences),
|
||||||
|
photo(Ex, People, Amount ),
|
||||||
|
format( 'Example ~a: ~w~n', [Ex, Amount]),
|
||||||
|
maplist(join, People, Names, PeopleNames),
|
||||||
|
keysort( PeopleNames, SortedPeopleNames),
|
||||||
|
maplist(join, _People, SortedNames, SortedPeopleNames),
|
||||||
|
maplist(output, SortedNames ),
|
||||||
|
fail.
|
||||||
|
main.
|
||||||
|
|
||||||
|
join( Key, El, Key-El ).
|
||||||
|
|
||||||
|
output( Name ) :- format(' ~a~n', [Name]).
|
||||||
|
|
||||||
|
% 5 people want to have a photograph together, but they have preferences.
|
||||||
|
photo(Ex, People, Amount) :-
|
||||||
|
ex(Ex, People, _, Preferences),
|
||||||
|
length(People, Len),
|
||||||
|
Len0 is Len-1,
|
||||||
|
People ins 0..Len0,
|
||||||
|
all_distinct(People),
|
||||||
|
% Bools are the satisfied constraints
|
||||||
|
maplist(preference_satisfied, Preferences, Bools),
|
||||||
|
length(Preferences, PLen),
|
||||||
|
Amount in 0..PLen,
|
||||||
|
sum( Bools ) #= Amount,
|
||||||
|
% add all satisfied constraints
|
||||||
|
maximize(Amount),
|
||||||
|
labeling([], People).
|
||||||
|
|
||||||
|
%reification, use with care
|
||||||
|
preference_satisfied(X-Y, B) :-
|
||||||
|
abs(X - Y) #= 1 #<==> B.
|
||||||
|
|
||||||
|
ex(s,[Alice,Bob,Carl,Deb,Evan],
|
||||||
|
['Alice','Bob','Carl','Deb','Evan'],
|
||||||
|
[Alice-Carl,
|
||||||
|
Carl-Deb,
|
||||||
|
Deb-Alice,
|
||||||
|
Evan-Alice,
|
||||||
|
Bob-Evan,
|
||||||
|
Carl-Evan,
|
||||||
|
Deb-Evan,
|
||||||
|
Evan-Bob]).
|
||||||
|
|
||||||
|
ex(l,[Betty,Chris,Donald,Fred,Gary,Mary,Paul,Peter,Susan],
|
||||||
|
['Betty','Chris','Donald','Fred','Gary','Mary','Paul','Peter','Susan'],
|
||||||
|
[Betty-Donald,
|
||||||
|
Betty-Gary,
|
||||||
|
Betty-Peter,
|
||||||
|
Chris-Gary,
|
||||||
|
Chris-Susan,
|
||||||
|
Donald-Fred,
|
||||||
|
Donald-Gary,
|
||||||
|
Fred-Betty,
|
||||||
|
Fred-Gary,
|
||||||
|
Gary-Mary,
|
||||||
|
Gary-Betty,
|
||||||
|
Mary-Betty,
|
||||||
|
Mary-Susan,
|
||||||
|
Paul-Donald,
|
||||||
|
Paul-Peter,
|
||||||
|
Peter-Susan,
|
||||||
|
Peter-Paul]).
|
49
packages/clp_examples/queens.yap
Normal file
49
packages/clp_examples/queens.yap
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
|
||||||
|
:- use_module(library(gecode/clpfd)).
|
||||||
|
:- use_module(library(maplist)).
|
||||||
|
|
||||||
|
main :-
|
||||||
|
between(1,10,N),
|
||||||
|
I is N*100,
|
||||||
|
statistics( runtime, _ ),
|
||||||
|
once( queens(I, _Queens) ),
|
||||||
|
statistics( runtime, [DT|_] ),
|
||||||
|
% findall(Queens, queens(I, Queens), Solutions ),
|
||||||
|
% length( Solutions, N),
|
||||||
|
format('~d took ~w msec to find first solution.~n', [I, DT]),
|
||||||
|
fail.
|
||||||
|
main.
|
||||||
|
|
||||||
|
queens(N, Queens) :-
|
||||||
|
length(Queens, N),
|
||||||
|
Queens ins 1..N,
|
||||||
|
all_distinct(Queens),
|
||||||
|
foldl(inc, Queens, Inc, 0, _), % [0, 1, 2, .... ]
|
||||||
|
foldl(dec, Queens, Dec, 0, _), % [0, -1, -2, ... ]
|
||||||
|
all_distinct(Inc,Queens),
|
||||||
|
all_distinct(Dec,Queens),
|
||||||
|
labeling([], Queens).
|
||||||
|
|
||||||
|
inc(_, I0, I0, I) :-
|
||||||
|
I is I0+1.
|
||||||
|
|
||||||
|
dec(_, I0, I0, I) :-
|
||||||
|
I is I0-1.
|
||||||
|
|
||||||
|
lqueens(N, Queens) :-
|
||||||
|
length(Queens, N),
|
||||||
|
Queens ins 1..N,
|
||||||
|
all_distinct(Queens),
|
||||||
|
lconstrain( Queens, 0 ),
|
||||||
|
labeling([], Queens).
|
||||||
|
|
||||||
|
lconstrain([], _).
|
||||||
|
lconstrain( [Q|Queens], I0) :-
|
||||||
|
I is I0+1,
|
||||||
|
foldl(constrain(Q, I0), Queens, I, _),
|
||||||
|
lconstrain( Queens, I).
|
||||||
|
|
||||||
|
constrain(Q, I, R, J, J1) :-
|
||||||
|
J1 is J+1,
|
||||||
|
Q + I #\= R + J,
|
||||||
|
Q - I #\= R - J.
|
44
packages/clp_examples/send_more_money.yap
Normal file
44
packages/clp_examples/send_more_money.yap
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
%% -*- prolog -*-
|
||||||
|
%%=============================================================================
|
||||||
|
%% Copyright (C) 2011, 2013 by Denys Duchier, Vitor Santos Costa
|
||||||
|
%%
|
||||||
|
%% This program is free software: you can redistribute it and/or modify it
|
||||||
|
%% under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
%% Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
%% option) any later version.
|
||||||
|
%%
|
||||||
|
%% This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
%% more details.
|
||||||
|
%%
|
||||||
|
%% You should have received a copy of the GNU Lesser General Public License
|
||||||
|
%% along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
%%=============================================================================
|
||||||
|
|
||||||
|
:- use_module(library(gecode/clpfd)).
|
||||||
|
|
||||||
|
main :-
|
||||||
|
statistics( runtime, _ ),
|
||||||
|
once( send_more_money(Letters) ),
|
||||||
|
statistics( runtime, [DT|_] ),
|
||||||
|
% findall(Queens, queens(I, Queens), Solutions ),
|
||||||
|
% length( Solutions, N),
|
||||||
|
format('took ~w msec to find first solution, ~w.~n', [I, DT, Letters]),
|
||||||
|
fail.
|
||||||
|
main.
|
||||||
|
|
||||||
|
% S E N D
|
||||||
|
% + M O R E
|
||||||
|
% ---------
|
||||||
|
% M O N E Y
|
||||||
|
send_more_money(Letters) :-
|
||||||
|
[S,E,N,D,M,O,R,Y] = Letters,
|
||||||
|
Letters ins 0..9,
|
||||||
|
M #\= 0,
|
||||||
|
S #\= 0,
|
||||||
|
all_distinct(Letters),
|
||||||
|
1000*S + 100*E + 10*N + D +
|
||||||
|
1000*M + 100*O + 10*R + E #=
|
||||||
|
10000*M + 1000*O + 100*N + 10*E + Y,
|
||||||
|
labeling([], Letters).
|
47
packages/clp_examples/send_most_money.yap
Normal file
47
packages/clp_examples/send_most_money.yap
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
%% -*- prolog -*-
|
||||||
|
%%=============================================================================
|
||||||
|
%% Copyright (C) 2011, 2013 by Denys Duchier, Vitor Santos Costa
|
||||||
|
%%
|
||||||
|
%% This program is free software: you can redistribute it and/or modify it
|
||||||
|
%% under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
%% Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
%% option) any later version.
|
||||||
|
%%
|
||||||
|
%% This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
%% more details.
|
||||||
|
%%
|
||||||
|
%% You should have received a copy of the GNU Lesser General Public License
|
||||||
|
%% along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
%%=============================================================================
|
||||||
|
|
||||||
|
:- use_module(library(gecode/clpfd)).
|
||||||
|
|
||||||
|
|
||||||
|
main :-
|
||||||
|
statistics( runtime, _ ),
|
||||||
|
once( send_most_money(Letters, Money) ),
|
||||||
|
statistics( runtime, [DT|_] ),
|
||||||
|
% findall(Queens, queens(I, Queens), Solutions ),
|
||||||
|
% length( Solutions, N),
|
||||||
|
format('took ~w msec to find first solution, ~w.~n', [DT, Letters:Money]),
|
||||||
|
fail.
|
||||||
|
main.
|
||||||
|
|
||||||
|
% S E N D
|
||||||
|
% + M O S T
|
||||||
|
% ---------
|
||||||
|
% M O N E Y
|
||||||
|
send_most_money(Letters, Money) :-
|
||||||
|
[S,E,N,D,M,O,T,Y] = Letters,
|
||||||
|
Letters ins 0..9,
|
||||||
|
Money in 0..99999,
|
||||||
|
M #\= 0,
|
||||||
|
S #\= 0,
|
||||||
|
all_distinct(Letters),
|
||||||
|
1000*S + 100*E + 10*N + D +
|
||||||
|
1000*M + 100*O + 10*S + T #= Money,
|
||||||
|
10000*M + 1000*O + 100*N + 10*E + Y #= Money,
|
||||||
|
maximize(Money),
|
||||||
|
labeling([], Letters).
|
84
packages/clp_examples/sudoku.yap
Normal file
84
packages/clp_examples/sudoku.yap
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
|
||||||
|
|
||||||
|
:- style_check(all).
|
||||||
|
|
||||||
|
:- use_module(library(gecode/clpfd)).
|
||||||
|
:- use_module(library(maplist)).
|
||||||
|
|
||||||
|
main :-
|
||||||
|
ex(Ex, _),
|
||||||
|
sudoku(Ex, _My),
|
||||||
|
fail.
|
||||||
|
main.
|
||||||
|
|
||||||
|
sudoku( Ex, Els ) :-
|
||||||
|
problem(Ex, Els),
|
||||||
|
output(Els).
|
||||||
|
|
||||||
|
%
|
||||||
|
% gecode constraints
|
||||||
|
%
|
||||||
|
problem(Ex, Els) :-
|
||||||
|
length(Els, 81),
|
||||||
|
Els ins 1..9,
|
||||||
|
M <== matrix( Els, [dim=[9,9]] ),
|
||||||
|
% select rows
|
||||||
|
foreach( I in 0..8 , all_different(M[I,_]) ),
|
||||||
|
% select cols
|
||||||
|
foreach( J in 0..8, all_different(M[_,J]) ),
|
||||||
|
% select squares
|
||||||
|
foreach( [I,J] ins 0..2 ,
|
||||||
|
all_different(M[I*3+(0..2),J*3+(0..2)]) ),
|
||||||
|
ex(Ex, Els),
|
||||||
|
% maplist( bound, Els, Exs),
|
||||||
|
labeling( [], Els ).
|
||||||
|
|
||||||
|
|
||||||
|
% The gecode interface doesn't support wake-ups on binding constained variables, this is the closest.
|
||||||
|
%
|
||||||
|
bound(El, X) :-
|
||||||
|
( nonvar(X) -> El #= X ; true ).
|
||||||
|
|
||||||
|
%
|
||||||
|
% output using matrix library
|
||||||
|
%
|
||||||
|
output(Els) :-
|
||||||
|
M <== matrix( Els, [dim=[9,9]] ),
|
||||||
|
foreach( I in 0..2 , output(M, I) ),
|
||||||
|
output_line.
|
||||||
|
|
||||||
|
output(M, I) :-
|
||||||
|
output_line,
|
||||||
|
foreach( J in 0..2 , output_row(M, J+I*3) ).
|
||||||
|
|
||||||
|
output_row( M, Row ) :-
|
||||||
|
L <== M[Row,_],
|
||||||
|
format('| ~d ~d ~d | ~d ~d ~d | ~d ~d ~d |~n', L).
|
||||||
|
|
||||||
|
output_line :-
|
||||||
|
format(' ~|~`-t~24+~n', []).
|
||||||
|
|
||||||
|
ex( 1, [
|
||||||
|
_,6,_,1,_,4,_,5,_,
|
||||||
|
_,_,8,3,_,5,6,_,_,
|
||||||
|
2,_,_,_,_,_,_,_,1,
|
||||||
|
8,_,_,4,_,7,_,_,6,
|
||||||
|
_,_,6,_,_,_,3,_,_,
|
||||||
|
7,_,_,9,_,1,_,_,4,
|
||||||
|
5,_,_,_,_,_,_,_,2,
|
||||||
|
_,_,7,2,_,6,9,_,_,
|
||||||
|
_,4,_,5,_,8,_,7,_
|
||||||
|
] ).
|
||||||
|
|
||||||
|
|
||||||
|
ex(2, [
|
||||||
|
_,_,1,_,8,_,6,_,4,
|
||||||
|
_,3,7,6,_,_,_,_,_,
|
||||||
|
5,_,_,_,_,_,_,_,_,
|
||||||
|
_,_,_,_,_,5,_,_,_,
|
||||||
|
_,_,6,_,1,_,8,_,_,
|
||||||
|
_,_,_,4,_,_,_,_,_,
|
||||||
|
_,_,_,_,_,_,_,_,3,
|
||||||
|
_,_,_,_,_,7,5,2,_,
|
||||||
|
8,_,2,_,9,_,7,_,_
|
||||||
|
] ).
|
BIN
packages/clp_examples/test.yap
Normal file
BIN
packages/clp_examples/test.yap
Normal file
Binary file not shown.
1318
packages/clpfd.yap
Normal file
1318
packages/clpfd.yap
Normal file
File diff suppressed because it is too large
Load Diff
@ -147,7 +147,8 @@ IF (CUDD_FOUND)
|
|||||||
)
|
)
|
||||||
|
|
||||||
install(TARGETS bddem
|
install(TARGETS bddem
|
||||||
LIBRARY DESTINATION ${dlls}
|
LIBRARY DESTINATION ${libdir}
|
||||||
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls}
|
ARCHIVE DESTINATION ${dlls}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -169,7 +170,8 @@ IF (CUDD_FOUND)
|
|||||||
add_subDIRECTORY ( approx/simplecuddLPADs )
|
add_subDIRECTORY ( approx/simplecuddLPADs )
|
||||||
|
|
||||||
install(TARGETS cplint
|
install(TARGETS cplint
|
||||||
LIBRARY DESTINATION ${dlls}
|
LIBRARY DESTINATION ${libdir}
|
||||||
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls}
|
ARCHIVE DESTINATION ${dlls}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ endif( THRUST_INCLUDE_DIR )
|
|||||||
)
|
)
|
||||||
|
|
||||||
install(TARGETS libcuda
|
install(TARGETS libcuda
|
||||||
LIBRARY DESTINATION ${dlls}
|
RUNTIME DESTINATION ${dlls}
|
||||||
ARCHIVE DESTINATION ${dlls}
|
ARCHIVE DESTINATION ${dlls}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
80
packages/examples/photo.yap
Normal file
80
packages/examples/photo.yap
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
%% -*- prolog -*-
|
||||||
|
%%=============================================================================
|
||||||
|
%% Copyright (C) 2011 by Denys Duchier
|
||||||
|
%%
|
||||||
|
%% This program is free software: you can redistribute it and/or modify it
|
||||||
|
%% under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
%% Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
%% option) any later version.
|
||||||
|
%%
|
||||||
|
%% This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
%% more details.
|
||||||
|
%%
|
||||||
|
%% You should have received a copy of the GNU Lesser General Public License
|
||||||
|
%% along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
%%=============================================================================
|
||||||
|
|
||||||
|
:- use_module(library(gecode)).
|
||||||
|
:- use_module(library(maplist)).
|
||||||
|
|
||||||
|
% 5 people want to have a photograph together, but they have preferences.
|
||||||
|
photo(Ex, Solution,Amount) :-
|
||||||
|
db(Ex, People, Preferences),
|
||||||
|
Space := space,
|
||||||
|
length(People, Len),
|
||||||
|
Len0 is Len-1,
|
||||||
|
People := intvars(Space,Len,0,Len0),
|
||||||
|
Space += distinct(People),
|
||||||
|
% Bools are the satisfied constraints
|
||||||
|
maplist(preferences(Space, Len), Preferences, Bools),
|
||||||
|
length(Preferences, PLen),
|
||||||
|
Sum := intvar(Space,0,PLen),
|
||||||
|
Space += linear(Bools,'IRT_EQ',Sum),
|
||||||
|
% add all satisfied constraints
|
||||||
|
Space += maximize(Sum),
|
||||||
|
Space += branch(People,'INT_VAR_SIZE_MIN','INT_VAL_MIN'),
|
||||||
|
SolSpace := search(Space),
|
||||||
|
Solution := val(SolSpace,People),
|
||||||
|
Amount := val(SolSpace,Sum).
|
||||||
|
|
||||||
|
%reification, use with care
|
||||||
|
preferences(Space, Len, X-Y, B) :-
|
||||||
|
NLen is -Len,
|
||||||
|
I0 := intvar(Space, NLen, Len),
|
||||||
|
I := intvar(Space, 0, Len),
|
||||||
|
B := boolvar(Space),
|
||||||
|
Space += reify(B, 'RM_EQV', R),
|
||||||
|
Space += linear([1,-1],[X,Y],'IRT_EQ', I0),
|
||||||
|
Space += abs(I0, I),
|
||||||
|
Space += rel(I, 'IRT_EQ', 1, R).
|
||||||
|
|
||||||
|
|
||||||
|
db(s,[Alice,Bob,Carl,Deb,Evan], [Alice-Carl,
|
||||||
|
Carl-Deb,
|
||||||
|
Deb-Alice,
|
||||||
|
Evan-Alice,
|
||||||
|
Bob-Evan,
|
||||||
|
Carl-Evan,
|
||||||
|
Deb-Evan,
|
||||||
|
Evan-Bob]).
|
||||||
|
|
||||||
|
db(l,[Betty,Chris,Donald,Fred,Gary,Mary,Paul,Peter,Susan],
|
||||||
|
[Betty-Donald,
|
||||||
|
Betty-Gary,
|
||||||
|
Betty-Peter,
|
||||||
|
Chris-Gary,
|
||||||
|
Chris-Susan,
|
||||||
|
Donald-Fred,
|
||||||
|
Donald-Gary,
|
||||||
|
Fred-Betty,
|
||||||
|
Fred-Gary,
|
||||||
|
Gary-Mary,
|
||||||
|
Gary-Betty,
|
||||||
|
Mary-Betty,
|
||||||
|
Mary-Susan,
|
||||||
|
Paul-Donald,
|
||||||
|
Paul-Peter,
|
||||||
|
Peter-Susan,
|
||||||
|
Peter-Paul]).
|
67
packages/examples/queens.yap
Normal file
67
packages/examples/queens.yap
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
%% -*- prolog -*-
|
||||||
|
%%=============================================================================
|
||||||
|
%% Copyright (C) 2011 by Denys Duchier
|
||||||
|
%%
|
||||||
|
%% This program is free software: you can redistribute it and/or modify it
|
||||||
|
%% under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
%% Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
%% option) any later version.
|
||||||
|
%%
|
||||||
|
%% This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
%% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
%% more details.
|
||||||
|
%%
|
||||||
|
%% You should have received a copy of the GNU Lesser General Public License
|
||||||
|
%% along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
%%=============================================================================
|
||||||
|
|
||||||
|
:- use_module(library(gecode)).
|
||||||
|
:- use_module(library(maplist)).
|
||||||
|
|
||||||
|
% use alldiff constraints
|
||||||
|
queens(N, Solution) :-
|
||||||
|
Space := space,
|
||||||
|
length(Queens, N),
|
||||||
|
Queens := intvars(Space,N,1,N),
|
||||||
|
Space += distinct(Queens),
|
||||||
|
foldl(inc, Queens, Inc, 0, _),
|
||||||
|
foldl(dec, Queens, Dec, 0, _),
|
||||||
|
Space += distinct(Inc,Queens),
|
||||||
|
Space += distinct(Dec,Queens),
|
||||||
|
Space += branch(Queens, 'INT_VAR_SIZE_MIN', 'INT_VAL_MIN'),
|
||||||
|
SolSpace := search(Space),
|
||||||
|
Solution := val(SolSpace,Queens).
|
||||||
|
|
||||||
|
inc(_, I0, I0, I) :-
|
||||||
|
I is I0+1.
|
||||||
|
|
||||||
|
dec(_, I0, I0, I) :-
|
||||||
|
I is I0-1.
|
||||||
|
|
||||||
|
%
|
||||||
|
% Using gecode linear constraints for diagonals.
|
||||||
|
%
|
||||||
|
lqueens(N, Solution) :-
|
||||||
|
Space := space,
|
||||||
|
length(Queens, N),
|
||||||
|
Queens := intvars(Space,N,1,N),
|
||||||
|
Space += distinct(Queens),
|
||||||
|
lconstrain( Queens, Space, 0),
|
||||||
|
Space += branch(Queens, 'INT_VAR_SIZE_MIN', 'INT_VAL_MIN'),
|
||||||
|
SolSpace := search(Space),
|
||||||
|
Solution := val(SolSpace,Queens).
|
||||||
|
|
||||||
|
lconstrain([], _, _).
|
||||||
|
lconstrain( [Q|Queens], Space, I0) :-
|
||||||
|
I is I0+1,
|
||||||
|
foldl(constrain(Q, I0, Space), Queens, I, _),
|
||||||
|
lconstrain( Queens, Space, I).
|
||||||
|
|
||||||
|
constrain(Q, I, Space, R, J, J1) :-
|
||||||
|
% Q+I != R+J, Q-I != R-J <=> Q-R != J-I, Q-R != I-J,
|
||||||
|
J1 is J+1,
|
||||||
|
Sum is I-J,
|
||||||
|
Diff is J-I,
|
||||||
|
Space += linear([1,-1], [Q,R], 'IRT_NQ', Diff),
|
||||||
|
Space += linear([1,-1], [Q,R], 'IRT_NQ', Sum).
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user