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) {
|
||||
|
||||
pe->PredFlags |= (HiddenPredFlag | NoSpyPredFlag | NoTracePredFlag);
|
||||
/*
|
||||
char newMod[1024];
|
||||
strncpy(newMod, "$$$--hidden-module--",1023);
|
||||
Term cmod = pe->ModuleOfPred;
|
||||
@ -3090,6 +3091,7 @@ void Yap_HidePred(PredEntry *pe) {
|
||||
else
|
||||
strncat(newMod, RepAtom(AtomOfTerm(cmod))->StrOfAE, 1023-strlen(newMod));
|
||||
pe->ModuleOfPred = MkAtomTerm(Yap_LookupAtom(newMod));
|
||||
*/
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
|
||||
|
||||
if (GMP_FOUND)
|
||||
#config.h needs this (TODO: change in code latter)
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
# 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
|
||||
# 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
|
||||
|
||||
#include <gmpxx.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#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
|
||||
|
26
H/TermExt.h
26
H/TermExt.h
@ -388,26 +388,6 @@ INLINE_ONLY bool IsStringTerm(Term t) {
|
||||
|
||||
#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 t) {
|
||||
@ -415,7 +395,11 @@ INLINE_ONLY bool IsBigIntTerm(Term t) {
|
||||
FunctorOfTerm(t) == FunctorBigInt;
|
||||
}
|
||||
|
||||
#ifdef USE_GMP
|
||||
|
||||
#if !defined(__cplusplus)
|
||||
#include <gmp.h>
|
||||
#endif
|
||||
|
||||
|
||||
Term Yap_MkBigIntTerm(MP_INT *);
|
||||
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) {
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
#if defined(__clang__) || (defined(__GNUC__) && __GNUC__ > 4)
|
||||
Int w;
|
||||
if (!__builtin_add_overflow(i, j, &w))
|
||||
RINT(w);
|
||||
return Yap_gmp_add_ints(i, j);
|
||||
;
|
||||
#elif defined(__GNUC__)
|
||||
#elif defined(__GNUC__) && __GNUC__ > 4
|
||||
Int w;
|
||||
if (!__builtin_add_overflow_p(i, j, 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) {
|
||||
#if defined(__clang__ ) || defined(__GNUC__)
|
||||
#if defined(__clang__ ) || (defined(__GNUC__) && __GNUC__ > 4)
|
||||
Int k;
|
||||
if (__builtin_sub_overflow(i,j,&k)) {
|
||||
return Yap_gmp_sub_ints(i, j);
|
||||
}
|
||||
RINT(k);
|
||||
#elif defined(__GNUC__)
|
||||
#elif defined(__GNUC__) && __GNUC__ >4
|
||||
Int w;
|
||||
if (!__builtin_sub_overflow_p(i,j,w))
|
||||
RINT(w);
|
||||
@ -64,7 +64,7 @@ inline static int mul_overflow(Int z, Int i1, Int i2) {
|
||||
return (i2 && z / i2 != i1);
|
||||
}
|
||||
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
#if defined(__clang__) || (defined(__GNUC__) && __GNUC__ > 4)
|
||||
#define DO_MULTI() \
|
||||
if (__builtin_mul_overflow(i1, i2, &z)) { \
|
||||
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 "format.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");
|
||||
st->vfs = NULL;
|
||||
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.
|
||||
Yap_DefaultStreamOps(st);
|
||||
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,
|
||||
void *vfs) {
|
||||
// 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 {
|
||||
st->encoding = encoding;
|
||||
}
|
||||
|
||||
name = Yap_guessFileName(fd, sno, YAP_FILENAME_MAX);
|
||||
if (!name)
|
||||
name = Yap_guessFileName(fd, sno);
|
||||
if (!name) {
|
||||
Yap_Error(SYSTEM_ERROR_INTERNAL, file_name,
|
||||
"Yap_guessFileName failed: opening a file without a name");
|
||||
st->name = Yap_LookupAtom(name);
|
||||
"Yap_guessFileName failed: opening a file without a name");
|
||||
return false;
|
||||
}
|
||||
st->name = name;
|
||||
st->user_name = file_name;
|
||||
st->file = fd;
|
||||
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)) {
|
||||
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);
|
||||
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)));
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
#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;
|
||||
st->vfs = NULL;
|
||||
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.
|
||||
/* currently these streams are not seekable */
|
||||
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) {
|
||||
int i = 0;
|
||||
const char *p;
|
||||
while (isblank(text[i++]) && i <= end)
|
||||
while (isspace(text[i++]) && i <= end)
|
||||
;
|
||||
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;
|
||||
}
|
||||
|
||||
char *Yap_guessFileName(FILE *file, int sno, size_t max) {
|
||||
size_t maxs = Yap_Max(1023, max-1);
|
||||
int i = push_text_stack();
|
||||
char *nameb = Malloc(maxs + 1);
|
||||
char *Yap_guessFileName(FILE *file, int sno) {
|
||||
size_t maxs = YAP_FILENAME_MAX-1;
|
||||
char *nameb = malloc(maxs + 1);
|
||||
if (!file) {
|
||||
strncpy(nameb, "memory buffer", maxs);
|
||||
|
||||
return pop_output_text_stack(i,nameb);
|
||||
return nameb;
|
||||
}
|
||||
int f = fileno(file);
|
||||
if (f < 0) {
|
||||
strcpy(nameb, "???");
|
||||
return pop_output_text_stack(i,nameb);
|
||||
return nameb;
|
||||
}
|
||||
|
||||
#if __linux__
|
||||
char *path = Malloc(1024);
|
||||
char *path = malloc(1024);
|
||||
if (snprintf(path, 1023, "/proc/self/fd/%d", f) &&
|
||||
readlink(path, nameb, maxs)) {
|
||||
return pop_output_text_stack(i,nameb);
|
||||
free(path);
|
||||
return nameb;
|
||||
}
|
||||
#elif __APPLE__
|
||||
if (fcntl(f, F_GETPATH, nameb) != -1) {
|
||||
return pop_output_text_stack(i,nameb);
|
||||
return nameb;
|
||||
}
|
||||
#else
|
||||
TCHAR *path = Malloc(MAX_PATH + 1);
|
||||
TCHAR *path = malloc(MAX_PATH + 1);
|
||||
if (!GetFullPathName(path, MAX_PATH, path, NULL)) {
|
||||
pop_text_stack(i);
|
||||
|
||||
return NULL;
|
||||
} else {
|
||||
int i;
|
||||
@ -351,14 +351,12 @@ char *Yap_guessFileName(FILE *file, int sno, size_t max) {
|
||||
for (i = 0; i < strlen(path); i++)
|
||||
ptr += put_utf8(ptr, path[i]);
|
||||
*ptr = '\0';
|
||||
return pop_output_text_stack(i,nameb);
|
||||
return nameb;
|
||||
}
|
||||
#endif
|
||||
if (!StreamName(sno)) {
|
||||
pop_text_stack(i);
|
||||
return NULL;
|
||||
}
|
||||
pop_text_stack(i);
|
||||
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);
|
||||
extern FILE *Yap_GetInputStream(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,
|
||||
int flags, int priority);
|
||||
|
||||
|
@ -48,7 +48,7 @@ prolog:'$protect' :-
|
||||
'$new_system_predicate'(Name,Arity,M),
|
||||
sub_atom(Name,0,1,_, '$'),
|
||||
functor(P,Name,Arity),
|
||||
'$hide_predicate'(P,M),
|
||||
% '$hide_predicate'(P,M),
|
||||
fail.
|
||||
prolog:'$protect' :-
|
||||
current_atom(Name),
|
||||
|
Reference in New Issue
Block a user