maintain compatibility with olde linuxen.
This commit is contained in:
parent
87c6971bb6
commit
f57377a23a
2
C/cdmgr.c
Normal file → Executable file
2
C/cdmgr.c
Normal file → Executable file
@ -3082,6 +3082,7 @@ static Int p_clean_up_dead_clauses(USES_REGS1) {
|
|||||||
void Yap_HidePred(PredEntry *pe) {
|
void Yap_HidePred(PredEntry *pe) {
|
||||||
|
|
||||||
pe->PredFlags |= (HiddenPredFlag | NoSpyPredFlag | NoTracePredFlag);
|
pe->PredFlags |= (HiddenPredFlag | NoSpyPredFlag | NoTracePredFlag);
|
||||||
|
/*
|
||||||
char newMod[1024];
|
char newMod[1024];
|
||||||
strncpy(newMod, "$$$--hidden-module--",1023);
|
strncpy(newMod, "$$$--hidden-module--",1023);
|
||||||
Term cmod = pe->ModuleOfPred;
|
Term cmod = pe->ModuleOfPred;
|
||||||
@ -3090,6 +3091,7 @@ void Yap_HidePred(PredEntry *pe) {
|
|||||||
else
|
else
|
||||||
strncat(newMod, RepAtom(AtomOfTerm(cmod))->StrOfAE, 1023-strlen(newMod));
|
strncat(newMod, RepAtom(AtomOfTerm(cmod))->StrOfAE, 1023-strlen(newMod));
|
||||||
pe->ModuleOfPred = MkAtomTerm(Yap_LookupAtom(newMod));
|
pe->ModuleOfPred = MkAtomTerm(Yap_LookupAtom(newMod));
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int /* $system_predicate(P) */
|
static Int /* $system_predicate(P) */
|
||||||
|
7
CMakeLists.txt
Normal file → Executable file
7
CMakeLists.txt
Normal file → Executable file
@ -334,9 +334,14 @@ find_package(GMP)
|
|||||||
list(APPEND YAP_SYSTEM_OPTIONS big_numbers)
|
list(APPEND YAP_SYSTEM_OPTIONS big_numbers)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (GMP_FOUND)
|
if (GMP_FOUND)
|
||||||
#config.h needs this (TODO: change in code latter)
|
#config.h needs this (TODO: change in code latter)
|
||||||
include_directories(${GMP_INCLUDE_DIRS})
|
include_directories(${GMP_INCLUDE_DIRS})
|
||||||
|
check_include_file(gmp.h HAVE_GMP_H)
|
||||||
|
check_include_file_cxx(gmpxx.h HAVE_GMPXX_H)
|
||||||
|
|
||||||
|
|
||||||
endif (GMP_FOUND)
|
endif (GMP_FOUND)
|
||||||
|
|
||||||
option(WITH_READLINE "use readline or libedit" ON)
|
option(WITH_READLINE "use readline or libedit" ON)
|
||||||
@ -416,7 +421,7 @@ set(DEF_TRAILSPACE 0)
|
|||||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS DEPTH_LIMIT=1;COROUTINING=1;RATIONAL_TREES=1)
|
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS DEPTH_LIMIT=1;COROUTINING=1;RATIONAL_TREES=1)
|
||||||
|
|
||||||
# inform we are compiling YAP
|
# inform we are compiling YAP
|
||||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "_YAP_NOT_INSTALLED_=1;HAVE_CONFIG_H=1;_GNU_SOURCE")
|
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "_YAP_NOT_INSTALLED_=1;HAVE_CONFIG_H=1;_GNU_SOURCE=1")
|
||||||
|
|
||||||
# Compilation model
|
# Compilation model
|
||||||
# target_compile_definitions(libYap PUBLIC _XOPEN_SOURCE=700 )
|
# target_compile_definitions(libYap PUBLIC _XOPEN_SOURCE=700 )
|
||||||
|
11
CXX/yapi.hh
Normal file → Executable file
11
CXX/yapi.hh
Normal file → Executable file
@ -8,11 +8,20 @@
|
|||||||
|
|
||||||
#define YAP_CPP_INTERFACE 1
|
#define YAP_CPP_INTERFACE 1
|
||||||
|
|
||||||
#include <gmpxx.h>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
extern "C"{
|
||||||
|
#include "config.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
#if HAVE_GMPXX_H
|
||||||
|
#include <gmpxx.h>
|
||||||
|
#elif HAVE_GMP_H
|
||||||
|
#include <gmp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
*
|
*
|
||||||
* @ingroup fli_c_cxx
|
* @ingroup fli_c_cxx
|
||||||
|
26
H/TermExt.h
26
H/TermExt.h
@ -388,26 +388,6 @@ INLINE_ONLY bool IsStringTerm(Term t) {
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#if !defined(__cplusplus)
|
|
||||||
#include <gmp.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
typedef UInt mp_limb_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
Int _mp_size, _mp_alloc;
|
|
||||||
mp_limb_t *_mp_d;
|
|
||||||
} MP_INT;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
MP_INT _mp_num;
|
|
||||||
MP_INT _mp_den;
|
|
||||||
} MP_RAT;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
INLINE_ONLY bool IsBigIntTerm(Term);
|
INLINE_ONLY bool IsBigIntTerm(Term);
|
||||||
|
|
||||||
INLINE_ONLY bool IsBigIntTerm(Term t) {
|
INLINE_ONLY bool IsBigIntTerm(Term t) {
|
||||||
@ -415,7 +395,11 @@ INLINE_ONLY bool IsBigIntTerm(Term t) {
|
|||||||
FunctorOfTerm(t) == FunctorBigInt;
|
FunctorOfTerm(t) == FunctorBigInt;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_GMP
|
|
||||||
|
#if !defined(__cplusplus)
|
||||||
|
#include <gmp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
Term Yap_MkBigIntTerm(MP_INT *);
|
Term Yap_MkBigIntTerm(MP_INT *);
|
||||||
MP_INT *Yap_BigIntOfTerm(Term);
|
MP_INT *Yap_BigIntOfTerm(Term);
|
||||||
|
4
H/YapEval.h
Normal file → Executable file
4
H/YapEval.h
Normal file → Executable file
@ -632,13 +632,13 @@ __Yap_Mk64IntegerTerm(YAP_LONG_LONG i USES_REGS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline static Term add_int(Int i, Int j USES_REGS) {
|
inline static Term add_int(Int i, Int j USES_REGS) {
|
||||||
#if defined(__clang__) || defined(__GNUC__)
|
#if defined(__clang__) || (defined(__GNUC__) && __GNUC__ > 4)
|
||||||
Int w;
|
Int w;
|
||||||
if (!__builtin_add_overflow(i, j, &w))
|
if (!__builtin_add_overflow(i, j, &w))
|
||||||
RINT(w);
|
RINT(w);
|
||||||
return Yap_gmp_add_ints(i, j);
|
return Yap_gmp_add_ints(i, j);
|
||||||
;
|
;
|
||||||
#elif defined(__GNUC__)
|
#elif defined(__GNUC__) && __GNUC__ > 4
|
||||||
Int w;
|
Int w;
|
||||||
if (!__builtin_add_overflow_p(i, j, w))
|
if (!__builtin_add_overflow_p(i, j, w))
|
||||||
RINT(w);
|
RINT(w);
|
||||||
|
@ -24,13 +24,13 @@ inline static int sub_overflow(Int x, Int i, Int j) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline static Term sub_int(Int i, Int j USES_REGS) {
|
inline static Term sub_int(Int i, Int j USES_REGS) {
|
||||||
#if defined(__clang__ ) || defined(__GNUC__)
|
#if defined(__clang__ ) || (defined(__GNUC__) && __GNUC__ > 4)
|
||||||
Int k;
|
Int k;
|
||||||
if (__builtin_sub_overflow(i,j,&k)) {
|
if (__builtin_sub_overflow(i,j,&k)) {
|
||||||
return Yap_gmp_sub_ints(i, j);
|
return Yap_gmp_sub_ints(i, j);
|
||||||
}
|
}
|
||||||
RINT(k);
|
RINT(k);
|
||||||
#elif defined(__GNUC__)
|
#elif defined(__GNUC__) && __GNUC__ >4
|
||||||
Int w;
|
Int w;
|
||||||
if (!__builtin_sub_overflow_p(i,j,w))
|
if (!__builtin_sub_overflow_p(i,j,w))
|
||||||
RINT(w);
|
RINT(w);
|
||||||
@ -64,7 +64,7 @@ inline static int mul_overflow(Int z, Int i1, Int i2) {
|
|||||||
return (i2 && z / i2 != i1);
|
return (i2 && z / i2 != i1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__clang__) || defined(__GNUC__)
|
#if defined(__clang__) || (defined(__GNUC__) && __GNUC__ > 4)
|
||||||
#define DO_MULTI() \
|
#define DO_MULTI() \
|
||||||
if (__builtin_mul_overflow(i1, i2, &z)) { \
|
if (__builtin_mul_overflow(i1, i2, &z)) { \
|
||||||
goto overflow; \
|
goto overflow; \
|
||||||
|
5
os/fmem.c
Normal file → Executable file
5
os/fmem.c
Normal file → Executable file
@ -23,6 +23,9 @@ static char SccsId[] = "%W% %G%";
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
|
|
||||||
#include "YapText.h"
|
#include "YapText.h"
|
||||||
#include "format.h"
|
#include "format.h"
|
||||||
#include "sysbits.h"
|
#include "sysbits.h"
|
||||||
@ -163,7 +166,7 @@ int Yap_open_buf_read_stream(const char *buf, size_t nchars,
|
|||||||
f = st->file = fmemopen((void *)buf, nchars, "r");
|
f = st->file = fmemopen((void *)buf, nchars, "r");
|
||||||
st->vfs = NULL;
|
st->vfs = NULL;
|
||||||
flags = Input_Stream_f | InMemory_Stream_f | Seekable_Stream_f;
|
flags = Input_Stream_f | InMemory_Stream_f | Seekable_Stream_f;
|
||||||
Yap_initStream(sno, f, RepAtom(fname)->StrOfAE, "r", uname, encoding, flags, NULL);
|
Yap_initStream(sno, f, fname, "r", uname, encoding, flags, NULL);
|
||||||
// like any file stream.
|
// like any file stream.
|
||||||
Yap_DefaultStreamOps(st);
|
Yap_DefaultStreamOps(st);
|
||||||
UNLOCK(st->streamlock);
|
UNLOCK(st->streamlock);
|
||||||
|
14
os/iopreds.c
Normal file → Executable file
14
os/iopreds.c
Normal file → Executable file
@ -1126,7 +1126,7 @@ static void check_bom(int sno, StreamDesc *st) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Yap_initStream(int sno, FILE *fd, const char *name, const char *io_mode,
|
bool Yap_initStream(int sno, FILE *fd, Atom name, const char *io_mode,
|
||||||
Term file_name, encoding_t encoding, stream_flags_t flags,
|
Term file_name, encoding_t encoding, stream_flags_t flags,
|
||||||
void *vfs) {
|
void *vfs) {
|
||||||
// fprintf(stderr,"+ %s --> %d\n", name, sno);
|
// fprintf(stderr,"+ %s --> %d\n", name, sno);
|
||||||
@ -1160,12 +1160,14 @@ bool Yap_initStream(int sno, FILE *fd, const char *name, const char *io_mode,
|
|||||||
} else {
|
} else {
|
||||||
st->encoding = encoding;
|
st->encoding = encoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = Yap_guessFileName(fd, sno, YAP_FILENAME_MAX);
|
|
||||||
if (!name)
|
if (!name)
|
||||||
|
name = Yap_guessFileName(fd, sno);
|
||||||
|
if (!name) {
|
||||||
Yap_Error(SYSTEM_ERROR_INTERNAL, file_name,
|
Yap_Error(SYSTEM_ERROR_INTERNAL, file_name,
|
||||||
"Yap_guessFileName failed: opening a file without a name");
|
"Yap_guessFileName failed: opening a file without a name");
|
||||||
st->name = Yap_LookupAtom(name);
|
return false;
|
||||||
|
}
|
||||||
|
st->name = name;
|
||||||
st->user_name = file_name;
|
st->user_name = file_name;
|
||||||
st->file = fd;
|
st->file = fd;
|
||||||
st->linepos = 0;
|
st->linepos = 0;
|
||||||
@ -1314,7 +1316,7 @@ static bool fill_stream(int sno, StreamDesc *st, Term tin, const char *io_mode,
|
|||||||
if (!strchr(io_mode, 'b') && binary_file(fname)) {
|
if (!strchr(io_mode, 'b') && binary_file(fname)) {
|
||||||
st->status |= Binary_Stream_f;
|
st->status |= Binary_Stream_f;
|
||||||
}
|
}
|
||||||
Yap_initStream(sno, st->file, fname, io_mode, user_name, LOCAL_encoding,
|
Yap_initStream(sno, st->file, Yap_LookupAtom(fname), io_mode, user_name, LOCAL_encoding,
|
||||||
st->status, vfsp);
|
st->status, vfsp);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
2
os/iopreds.h
Normal file → Executable file
2
os/iopreds.h
Normal file → Executable file
@ -31,7 +31,7 @@ INLINE_ONLY bool IsStreamTerm(Term t) {
|
|||||||
(IsApplTerm(t) && (FunctorOfTerm(t) == FunctorStream)));
|
(IsApplTerm(t) && (FunctorOfTerm(t) == FunctorStream)));
|
||||||
}
|
}
|
||||||
|
|
||||||
extern bool Yap_initStream(int sno, FILE *fd, const char *name, const char *io_mode, Term file_name, encoding_t encoding,
|
extern bool Yap_initStream(int sno, FILE *fd, Atom name, const char *io_mode, Term file_name, encoding_t encoding,
|
||||||
stream_flags_t flags, void *vfs);
|
stream_flags_t flags, void *vfs);
|
||||||
|
|
||||||
#define Yap_CheckStream(arg, kind, msg) \
|
#define Yap_CheckStream(arg, kind, msg) \
|
||||||
|
2
os/mem.c
Normal file → Executable file
2
os/mem.c
Normal file → Executable file
@ -225,7 +225,7 @@ int Yap_open_buf_read_stream(const char *buf, size_t nchars, encoding_t *encp,
|
|||||||
flags = Input_Stream_f | InMemory_Stream_f;
|
flags = Input_Stream_f | InMemory_Stream_f;
|
||||||
st->vfs = NULL;
|
st->vfs = NULL;
|
||||||
st->name = name;
|
st->name = name;
|
||||||
Yap_initStream(sno, f, "Memory Stream","wa", TermNil, encoding, flags, NULL);
|
Yap_initStream(sno, f, Yap_LookupAtom("Memory Stream"),"wa", TermNil, encoding, flags, NULL);
|
||||||
// like any file stream.
|
// like any file stream.
|
||||||
/* currently these streams are not seekable */
|
/* currently these streams are not seekable */
|
||||||
st->status = Input_Stream_f | InMemory_Stream_f;
|
st->status = Input_Stream_f | InMemory_Stream_f;
|
||||||
|
2
os/readline.c
Normal file → Executable file
2
os/readline.c
Normal file → Executable file
@ -218,7 +218,7 @@ static char **prolog_completion(const char *text, int start, int end) {
|
|||||||
} else if (start == 0) {
|
} else if (start == 0) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
const char *p;
|
const char *p;
|
||||||
while (isblank(text[i++]) && i <= end)
|
while (isspace(text[i++]) && i <= end)
|
||||||
;
|
;
|
||||||
p = text + i;
|
p = text + i;
|
||||||
|
|
||||||
|
26
os/streams.c
Normal file → Executable file
26
os/streams.c
Normal file → Executable file
@ -315,35 +315,35 @@ bool Yap_SetCurInpPos(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *Yap_guessFileName(FILE *file, int sno, size_t max) {
|
char *Yap_guessFileName(FILE *file, int sno) {
|
||||||
size_t maxs = Yap_Max(1023, max-1);
|
size_t maxs = YAP_FILENAME_MAX-1;
|
||||||
int i = push_text_stack();
|
char *nameb = malloc(maxs + 1);
|
||||||
char *nameb = Malloc(maxs + 1);
|
|
||||||
if (!file) {
|
if (!file) {
|
||||||
strncpy(nameb, "memory buffer", maxs);
|
strncpy(nameb, "memory buffer", maxs);
|
||||||
|
|
||||||
return pop_output_text_stack(i,nameb);
|
return nameb;
|
||||||
}
|
}
|
||||||
int f = fileno(file);
|
int f = fileno(file);
|
||||||
if (f < 0) {
|
if (f < 0) {
|
||||||
strcpy(nameb, "???");
|
strcpy(nameb, "???");
|
||||||
return pop_output_text_stack(i,nameb);
|
return nameb;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __linux__
|
#if __linux__
|
||||||
char *path = Malloc(1024);
|
char *path = malloc(1024);
|
||||||
if (snprintf(path, 1023, "/proc/self/fd/%d", f) &&
|
if (snprintf(path, 1023, "/proc/self/fd/%d", f) &&
|
||||||
readlink(path, nameb, maxs)) {
|
readlink(path, nameb, maxs)) {
|
||||||
return pop_output_text_stack(i,nameb);
|
free(path);
|
||||||
|
return nameb;
|
||||||
}
|
}
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
if (fcntl(f, F_GETPATH, nameb) != -1) {
|
if (fcntl(f, F_GETPATH, nameb) != -1) {
|
||||||
return pop_output_text_stack(i,nameb);
|
return nameb;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
TCHAR *path = Malloc(MAX_PATH + 1);
|
TCHAR *path = malloc(MAX_PATH + 1);
|
||||||
if (!GetFullPathName(path, MAX_PATH, path, NULL)) {
|
if (!GetFullPathName(path, MAX_PATH, path, NULL)) {
|
||||||
pop_text_stack(i);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
} else {
|
} else {
|
||||||
int i;
|
int i;
|
||||||
@ -351,14 +351,12 @@ char *Yap_guessFileName(FILE *file, int sno, size_t max) {
|
|||||||
for (i = 0; i < strlen(path); i++)
|
for (i = 0; i < strlen(path); i++)
|
||||||
ptr += put_utf8(ptr, path[i]);
|
ptr += put_utf8(ptr, path[i]);
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
return pop_output_text_stack(i,nameb);
|
return nameb;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!StreamName(sno)) {
|
if (!StreamName(sno)) {
|
||||||
pop_text_stack(i);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
pop_text_stack(i);
|
|
||||||
return RepAtom(AtomOfTerm(StreamName(sno)))->StrOfAE;
|
return RepAtom(AtomOfTerm(StreamName(sno)))->StrOfAE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
os/yapio.h
Normal file → Executable file
2
os/yapio.h
Normal file → Executable file
@ -126,7 +126,7 @@ extern X_API Term Yap_BufferToTermWithPrioBindings(const char *s, Term opts, Te
|
|||||||
int prio);
|
int prio);
|
||||||
extern FILE *Yap_GetInputStream(Term t, const char *m);
|
extern FILE *Yap_GetInputStream(Term t, const char *m);
|
||||||
extern FILE *Yap_GetOutputStream(Term t, const char *m);
|
extern FILE *Yap_GetOutputStream(Term t, const char *m);
|
||||||
extern char *Yap_guessFileName(FILE *f, int sno, size_t max);
|
extern char *Yap_guessFileName(FILE *f, int sno);
|
||||||
extern void Yap_plwrite(Term t, struct stream_desc *mywrite, int max_depth,
|
extern void Yap_plwrite(Term t, struct stream_desc *mywrite, int max_depth,
|
||||||
int flags, int priority);
|
int flags, int priority);
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ prolog:'$protect' :-
|
|||||||
'$new_system_predicate'(Name,Arity,M),
|
'$new_system_predicate'(Name,Arity,M),
|
||||||
sub_atom(Name,0,1,_, '$'),
|
sub_atom(Name,0,1,_, '$'),
|
||||||
functor(P,Name,Arity),
|
functor(P,Name,Arity),
|
||||||
'$hide_predicate'(P,M),
|
% '$hide_predicate'(P,M),
|
||||||
fail.
|
fail.
|
||||||
prolog:'$protect' :-
|
prolog:'$protect' :-
|
||||||
current_atom(Name),
|
current_atom(Name),
|
||||||
|
Reference in New Issue
Block a user