maintain compatibility with olde linuxen.

This commit is contained in:
Vitor Santos Costa 2018-09-29 14:43:27 -05:00
parent 87c6971bb6
commit f57377a23a
14 changed files with 57 additions and 54 deletions

2
C/cdmgr.c Normal file → Executable file
View 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
View 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
View 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

View File

@ -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
View 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);

View File

@ -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
View 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
View 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
View 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
View 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
View 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
View 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
View 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);

View File

@ -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),