Merge /home/vsc/github/yap-6.3
This commit is contained in:
commit
75befc69f7
@ -2390,9 +2390,9 @@ X_API YAP_file_type_t YAP_Init(YAP_init_args *yap_init) {
|
||||
#if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA)
|
||||
Yap_init_yapor_global_local_memory();
|
||||
#endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA */
|
||||
// GLOBAL_PrologShouldHandleInterrupts =
|
||||
// yap_init->PrologShouldHandleInterrupts &&
|
||||
if (!yap_init->Embedded) {
|
||||
GLOBAL_PrologShouldHandleInterrupts =
|
||||
~yap_init->PrologCannotHandleInterrupts;
|
||||
Yap_InitSysbits(0); /* init signal handling and time, required by later
|
||||
functions */
|
||||
GLOBAL_argv = yap_init->Argv;
|
||||
|
14
C/cmppreds.c
14
C/cmppreds.c
@ -540,7 +540,7 @@ Int p_compare(USES_REGS1) { /* compare(?Op,?T1,?T2) */
|
||||
return Yap_unify_constant(ARG1, MkAtomTerm(p));
|
||||
}
|
||||
|
||||
/** @pred _X_ \== _Y_ is iso
|
||||
/** @pred X \== Y is iso
|
||||
|
||||
Terms _X_ and _Y_ are not strictly identical.
|
||||
*/
|
||||
@ -548,7 +548,7 @@ static Int a_noteq(Term t1, Term t2) { return (compare(t1, t2) != 0); }
|
||||
|
||||
static Int a_gen_lt(Term t1, Term t2) { return (compare(t1, t2) < 0); }
|
||||
|
||||
/** @pred _X_ @=< _Y_ is iso
|
||||
/** @pred X @=< Y is iso
|
||||
|
||||
|
||||
Term _X_ does not follow term _Y_ in the standard order.
|
||||
@ -556,14 +556,14 @@ Term _X_ does not follow term _Y_ in the standard order.
|
||||
*/
|
||||
static Int a_gen_le(Term t1, Term t2) { return (compare(t1, t2) <= 0); }
|
||||
|
||||
/** @pred _X_ @> _Y_ is iso
|
||||
/** @pred X @> Y is iso
|
||||
|
||||
|
||||
Term _X_ does not follow term _Y_ in the standard order
|
||||
*/
|
||||
static Int a_gen_gt(Term t1, Term t2) { return compare(t1, t2) > 0; }
|
||||
|
||||
/** @pred _X_ @>= _Y_ is iso
|
||||
/** @pred X @>= Y is iso
|
||||
|
||||
Term _X_ does not precede term _Y_ in the standard order.
|
||||
*/
|
||||
@ -778,7 +778,7 @@ static Int a_gt(Term t1, Term t2) { /* A > B */
|
||||
}
|
||||
|
||||
/**
|
||||
@pred +_X_ >= +_Y_ is iso
|
||||
@pred +X >= +Y is iso
|
||||
Greater than or equal to arithmetic expressions
|
||||
|
||||
The value of the expression _X_ is greater than or equal to the
|
||||
@ -791,7 +791,7 @@ static Int a_ge(Term t1, Term t2) { /* A >= B */
|
||||
}
|
||||
|
||||
/**
|
||||
@pred +_X_ \< +_Y_ is iso
|
||||
@pred +X < +Y is iso
|
||||
Lesser than arithmetic expressions
|
||||
|
||||
The value of the expression _X_ is less than the value of expression
|
||||
@ -806,7 +806,7 @@ static Int a_lt(Term t1, Term t2) { /* A < B */
|
||||
|
||||
/**
|
||||
*
|
||||
@pred _X_ =< + _Y_
|
||||
@pred +X =< +Y
|
||||
Lesser than or equal to arithmetic expressions
|
||||
|
||||
|
||||
|
12
C/signals.c
12
C/signals.c
@ -28,9 +28,9 @@ static char SccsId[] = "%W% %G%";
|
||||
#include <io.h>
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#include "YapEval.h"
|
||||
#include "YapHeap.h"
|
||||
#include "Yatom.h"
|
||||
#include "YapEval.h"
|
||||
#include "yapio.h"
|
||||
#ifdef TABLING
|
||||
#include "tab.macros.h"
|
||||
@ -67,8 +67,6 @@ static yap_signals InteractSIGINT(int ch) {
|
||||
#if PUSH_REGS
|
||||
// restore_absmi_regs(&Yap_standard_regs);
|
||||
#endif
|
||||
LOCAL_RestartEnv = malloc( sizeof(sigjmp_buf) );
|
||||
siglongjmp(*LOCAL_RestartEnv, 4);
|
||||
return YAP_ABORT_SIGNAL;
|
||||
case 'b':
|
||||
/* continue */
|
||||
@ -112,9 +110,11 @@ static yap_signals InteractSIGINT(int ch) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
This function talks to the user about a signal. We assume we are in
|
||||
the context of the main Prolog thread (trivial in Unix, but hard in WIN32)
|
||||
/**
|
||||
This function interacts with the user about a signal. We assume we are in
|
||||
the context of the main Prolog thread (trivial in Unix, but hard in WIN32).
|
||||
|
||||
|
||||
*/
|
||||
static yap_signals ProcessSIGINT(void) {
|
||||
CACHE_REGS
|
||||
|
@ -1155,9 +1155,12 @@ bool Yap_find_prolog_culprit(USES_REGS1) {
|
||||
|
||||
while (curCP != YESCODE) {
|
||||
curENV = (CELL *)(curENV[E_E]);
|
||||
if (curENV == NULL)
|
||||
if (curENV < ASP || curENV >= LCL0)
|
||||
break;
|
||||
pe = EnvPreg(curCP);
|
||||
if (pe==NULL) {
|
||||
pe = PredMetaCall;
|
||||
}
|
||||
if (pe->ModuleOfPred)
|
||||
return set_clause_info(curCP, pe);
|
||||
curCP = (yamop *)(curENV[E_CP]);
|
||||
|
@ -116,7 +116,7 @@ ENDIF (WITH_PYTHON)
|
||||
List (APPEND YLIBS $<TARGET_OBJECTS:Yapsqlite3> )
|
||||
List (APPEND YLIBS $<TARGET_OBJECTS:YAP++> )
|
||||
if (WITH_PYTHON )
|
||||
List (APPEND YLIBS $<TARGET_OBJECTS:Obj4Py> )
|
||||
List (APPEND YLIBS $<TARGET_OBJECTS:Py4YAP> )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
@ -254,6 +254,7 @@ class X_API YAPPrologPredicate : public YAPPredicate {
|
||||
public:
|
||||
YAPPrologPredicate(YAPTerm t) : YAPPredicate(t){};
|
||||
YAPPrologPredicate(const char *s, arity_t arity) : YAPPredicate(s, arity){};
|
||||
YAPPrologPredicate(YAPAtom s, arity_t arity) : YAPPredicate(s, arity){};
|
||||
/// add a new clause
|
||||
bool assertClause(YAPTerm clause, bool last = true,
|
||||
YAPTerm source = YAPTerm());
|
||||
|
@ -4,11 +4,10 @@
|
||||
register CELL d0; \
|
||||
PredEntry *pt0; \
|
||||
register CELL *ENV_YREG = (YREG); \
|
||||
pt0 = (*_PREG)->u.pp.p;
|
||||
pt0 = (*_PREG)->u.Osbpp.p;
|
||||
|
||||
#ifdef LOW_LEVEL_TRACER
|
||||
#define EXECUTE_LOW_LEVEL_TRACER \
|
||||
low_level_trace(enter_pred,pt0,XREGS+1);
|
||||
#define EXECUTE_LOW_LEVEL_TRACER low_level_trace(enter_pred, pt0, XREGS + 1);
|
||||
#endif
|
||||
|
||||
#define EXECUTE_POST_LOW_LEVEL_TRACER \
|
||||
@ -27,8 +26,7 @@
|
||||
if (pt0->ModuleOfPred) { \
|
||||
if (DEPTH == MkIntTerm(0)) { \
|
||||
YAAM_FAIL; \
|
||||
} \
|
||||
else { \
|
||||
} else { \
|
||||
DEPTH = RESET_DEPTH(); \
|
||||
} \
|
||||
}
|
||||
@ -37,30 +35,29 @@
|
||||
FAILED = 0; \
|
||||
DEPTH -= MkIntConstant(2);
|
||||
|
||||
#define EXECUTE_DEPTH_END \
|
||||
FAILED = 0;
|
||||
#define EXECUTE_DEPTH_END FAILED = 0;
|
||||
#endif
|
||||
|
||||
#define EXECUTE_END_END \
|
||||
BLOCK = (CELL)EXECUTE_END_END; \
|
||||
if (!FAILED) { \
|
||||
ALWAYS_GONext(); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define DEXECUTE_INSTINIT \
|
||||
print_instruction((*_PREG), ON_NATIVE); \
|
||||
BLOCKADDRESS = (CELL)(*_PREG); \
|
||||
BLOCKADDRESS = (CELL)(*_PREG);
|
||||
|
||||
#ifdef LOW_LEVEL_TRACER
|
||||
#define DEXECUTE_LOW_LEVEL_TRACER \
|
||||
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1);
|
||||
low_level_trace(enter_pred, (*_PREG)->u.Osbpp.p, XREGS + 1);
|
||||
#endif
|
||||
|
||||
#define DEXECUTE_POST_LOW_LEVEL_TRACER \
|
||||
CACHE_Y_AS_ENV(YREG); \
|
||||
PredEntry *pt0; \
|
||||
CACHE_A1(); \
|
||||
pt0 = (*_PREG)->u.pp.p;
|
||||
pt0 = (*_PREG)->u.Osbpp.p;
|
||||
|
||||
#ifdef DEPTH_LIMIT
|
||||
#define DEXECUTE_DEPTH_MINOR \
|
||||
@ -68,8 +65,7 @@
|
||||
if (pt0->ModuleOfPred) { \
|
||||
if (DEPTH == MkIntTerm(0)) { \
|
||||
YAAM_FAIL; \
|
||||
} \
|
||||
else { \
|
||||
} else { \
|
||||
DEPTH = RESET_DEPTH(); \
|
||||
} \
|
||||
}
|
||||
@ -78,8 +74,7 @@
|
||||
FAILED = 0; \
|
||||
DEPTH -= MkIntConstant(2);
|
||||
|
||||
#define DEXECUTE_DEPTH_END \
|
||||
FAILED = 0;
|
||||
#define DEXECUTE_DEPTH_END FAILED = 0;
|
||||
#endif
|
||||
|
||||
#ifdef FROZEN_STACKS
|
||||
@ -94,8 +89,7 @@
|
||||
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
||||
if (ENV_YREG > (CELL *)top_b || ENV_YREG < HR) { \
|
||||
ENV_YREG = (CELL *)top_b; \
|
||||
} \
|
||||
else { \
|
||||
} else { \
|
||||
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
||||
} \
|
||||
WRITEBACK_Y_AS_ENV(); \
|
||||
@ -114,8 +108,7 @@
|
||||
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
||||
if (ENV_YREG > (CELL *)top_b) { \
|
||||
ENV_YREG = (CELL *)top_b; \
|
||||
} \
|
||||
else { \
|
||||
} else { \
|
||||
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
||||
} \
|
||||
WRITEBACK_Y_AS_ENV(); \
|
||||
@ -134,8 +127,7 @@
|
||||
ENV_YREG = ENV = (CELL *)ENV_YREG[E_E]; \
|
||||
if (ENV_YREG > (CELL *)B) { \
|
||||
ENV_YREG = (CELL *)B; \
|
||||
} \
|
||||
else { \
|
||||
} else { \
|
||||
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
||||
} \
|
||||
WRITEBACK_Y_AS_ENV(); \
|
||||
@ -183,7 +175,7 @@
|
||||
ENV_YREG = (CELL *)(((char *)ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
||||
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
||||
(*_PREG) = pt->CodeOfPred; \
|
||||
save_pc(); \
|
||||
save_pc();
|
||||
|
||||
#ifdef DEPTH_LIMIT
|
||||
#define CALL_DEPTH_MINOR \
|
||||
@ -200,8 +192,7 @@
|
||||
FAILED = 0; \
|
||||
DEPTH -= MkIntConstant(2);
|
||||
|
||||
#define CALL_DEPTH_END \
|
||||
FAILED = 0;
|
||||
#define CALL_DEPTH_END FAILED = 0;
|
||||
#endif
|
||||
|
||||
#ifdef YAPOR
|
||||
@ -304,8 +295,7 @@
|
||||
ENV_YREG = ENV;
|
||||
|
||||
#ifdef DEPTH_LIMIT
|
||||
#define PROCCEED_DEPTH \
|
||||
DEPTH = ENV_YREG[E_DEPTH];
|
||||
#define PROCCEED_DEPTH DEPTH = ENV_YREG[E_DEPTH];
|
||||
#endif
|
||||
|
||||
#define PROCCEED_END \
|
||||
@ -322,8 +312,7 @@
|
||||
ENV_YREG[E_E] = (CELL)ENV;
|
||||
|
||||
#ifdef DEPTH_LIMIT
|
||||
#define ALLOCATE_DEPTH \
|
||||
ENV_YREG[E_DEPTH] = DEPTH;
|
||||
#define ALLOCATE_DEPTH ENV_YREG[E_DEPTH] = DEPTH;
|
||||
#endif
|
||||
|
||||
#define ALLOCATE_END \
|
||||
@ -331,8 +320,7 @@
|
||||
ENDCACHE_Y_AS_ENV(); \
|
||||
GONext();
|
||||
|
||||
#define DEALLOCATE_INSTINIT \
|
||||
print_instruction((*_PREG), ON_NATIVE); \
|
||||
#define DEALLOCATE_INSTINIT print_instruction((*_PREG), ON_NATIVE);
|
||||
|
||||
#define DEALLOCATE_POST_CHECK \
|
||||
CACHE_Y_AS_ENV(YREG); \
|
||||
@ -342,8 +330,7 @@
|
||||
ENV = ENV_YREG = (CELL *)ENV_YREG[E_E];
|
||||
|
||||
#ifdef DEPTH_LIMIT
|
||||
#define DEALLOCATE_DEPTH \
|
||||
DEPTH = ENV_YREG[E_DEPTH];
|
||||
#define DEALLOCATE_DEPTH DEPTH = ENV_YREG[E_DEPTH];
|
||||
#endif
|
||||
|
||||
#ifdef FROZEN_STACKS
|
||||
@ -370,10 +357,8 @@
|
||||
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size(CPREG));
|
||||
#endif /* FROZEN_STACKS */
|
||||
|
||||
#define DEALLOCATE_POST_FROZEN \
|
||||
WRITEBACK_Y_AS_ENV();
|
||||
#define DEALLOCATE_POST_FROZEN WRITEBACK_Y_AS_ENV();
|
||||
|
||||
#define DEALLOCATE_END \
|
||||
ENDCACHE_Y_AS_ENV(); \
|
||||
GONext();
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
set (Python_ADDITIONAL_VERSIONS 3.7 3.6 3.5 3.6 3.4 )
|
||||
set (Python_ADDITIONAL_VERSIONS 3.7 3.6 ) #3.5 3.6 3.4 )
|
||||
|
||||
|
||||
# PYTHONLIBS_FOUND - have the Python libs been found
|
||||
@ -9,9 +9,9 @@ set (Python_ADDITIONAL_VERSIONS 3.7 3.6 3.5 3.6 3.4 )
|
||||
# PYTHONLIBS_VERSION_STRING - version of the Python libs found (since CMake 2.8.8)
|
||||
##
|
||||
#
|
||||
if (WIN32)
|
||||
if (WIN320)
|
||||
set (PYTHONLIBS_FOUND YES CACHE BOOL "MINGW/MSYS2" FORCE )
|
||||
set (PYTHON_LIBRARY C:/msys64/mingw64/lib/libpython3.5m.dll.a CACHE FILEPATH "MINGW/MSYS2" FORCE )
|
||||
set (PYTHON_LIBRARY C:/msys64/mingw64/lib/libpython3.6m.dll.a CACHE FILEPATH "MINGW/MSYS2" FORCE )
|
||||
set (PYTHON_LIBRARIES C:/msys64/mingw64/lib/libpython3.5m.dll.a CACHE FILEPATH "MINGW/MSYS2" FORCE )
|
||||
set (PYTHON_INCLUDE_PATH C:/msys64/mingw64/include/python3.5m CACHE PATH "MINGW/MSYS2" FORCE )
|
||||
set (PYTHON_INCLUDE_DIRS C:/msys64/mingw64/include/python3.5m CACHE PATH "MINGW/MSYS2" FORCE )
|
||||
|
@ -1153,9 +1153,10 @@ HTML_STYLESHEET =
|
||||
# list). For an example see the documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_STYLESHEET = @CMAKE_SOURCE_DIR@/docs/custom/customdoxygen.css \
|
||||
HTML_EXTRA_STYLESHEET = \
|
||||
@CMAKE_SOURCE_DIR@/docs/custom/customdoxygen.css \
|
||||
@CMAKE_SOURCE_DIR@/docs/custom/pygments.css \
|
||||
@CMAKE_SOURCE_DIR@/docs/solarized-light.css
|
||||
@CMAKE_SOURCE_DIR@/docs/custom/solarized-light.css \
|
||||
|
||||
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||
# other source files which should be copied to the HTML output directory. Note
|
||||
|
@ -29,7 +29,7 @@ interface.
|
||||
+ @ref sicsatts
|
||||
+ @ref New_Style_Attribute_Declarations
|
||||
+ @ref AttributedVariables_Builtins
|
||||
+ @ref corout
|
||||
+ @ref CohYroutining
|
||||
|
||||
### SICStus Style attribute declarations. {#SICS_attributes}
|
||||
|
||||
@ -374,7 +374,6 @@ The argument to `wait/1` is a predicate descriptor or a conjunction
|
||||
of these predicates. These predicates will suspend until their first
|
||||
argument is bound.
|
||||
|
||||
|
||||
The following primitives can be used:
|
||||
|
||||
- freeze/2
|
||||
@ -385,6 +384,7 @@ The following primitives can be used:
|
||||
|
||||
- frozen/2
|
||||
|
||||
See @ref attscorouts for more details.
|
||||
|
||||
@}
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
*/
|
||||
|
||||
/** @pred db_usage
|
||||
|
||||
Give general overview of data-base usage in the system.
|
||||
*/
|
||||
db_usage :-
|
||||
|
@ -309,7 +309,7 @@ flag_group_chk(FlagGroup):-
|
||||
flag_type(Type):-
|
||||
flags_type_definition(Type, _, _).
|
||||
|
||||
% flags_type_definition(TypeName, TypeHandler, TypeValidator).
|
||||
%% @pred flags_type_definition(TypeName, TypeHandler, TypeValidator).
|
||||
flags_type_definition(nonvar, nonvar, true).
|
||||
flags_type_definition(atom, atom, true).
|
||||
flags_type_definition(atomic, atomic, true).
|
||||
@ -586,4 +586,4 @@ defined_flag(FlagName, FlagGroup, FlagType, DefaultValue, Description, Access, H
|
||||
nonvar(FlagName), nonvar(FlagGroup),
|
||||
'$defined_flag$'(FlagName, FlagGroup, FlagType, DefaultValue, Description, Access, Handler).
|
||||
|
||||
%% @}
|
||||
%% @}
|
||||
|
@ -147,7 +147,7 @@ open_log(F) :-
|
||||
).
|
||||
|
||||
/**
|
||||
* @pred `<--`( +Tag , :Goal )
|
||||
* @pred +Tag <-- :Goal
|
||||
*
|
||||
* @param [in] output goal _Goal_ before and after being evaluated, but only
|
||||
* taking the first solution. The _Tag_ must be an atom or a string.
|
||||
|
@ -44,6 +44,8 @@
|
||||
rb_key_fold/4,
|
||||
list_to_rbtree/2,
|
||||
ord_list_to_rbtree/2,
|
||||
keys_to_rbtree/2,
|
||||
ord_keys_to_rbtree/2,
|
||||
is_rbtree/1,
|
||||
rb_size/2,
|
||||
rb_in/3
|
||||
@ -610,8 +612,8 @@ pretty_print(black(L,K,_,R),D) :-
|
||||
rb_delete(t(Nil,T), K, t(Nil,NT)) :-
|
||||
delete(T, K, _, NT, _).
|
||||
|
||||
%% rb_delete(+T, +Key, -TN).
|
||||
%% rb_delete(+T, +Key, -Val, -TN).
|
||||
%% @pred rb_delete(+T, +Key, -TN).
|
||||
%% @pred rb_delete(+T, +Key, -Val, -TN).
|
||||
%
|
||||
% Delete element with key Key from the tree T, returning the value
|
||||
% Val associated with the key and a new tree TN.
|
||||
@ -646,7 +648,7 @@ delete(black(L,_,V,R), _, V, OUT, Flag) :-
|
||||
% K == K0,
|
||||
delete_black_node(L,R,OUT,Flag).
|
||||
|
||||
%% rb_del_min(+T, -Key, -Val, -TN)
|
||||
%% @pred rb_del_min(+T, -Key, -Val, -TN)
|
||||
%
|
||||
% Delete the least element from the tree T, returning the key Key,
|
||||
% the value Val associated with the key and a new tree TN.
|
||||
@ -666,7 +668,7 @@ del_min(black(L,K0,V0,R), K, V, Nil, NT, Flag) :-
|
||||
fixup_left(Flag0,black(NL,K0,V0,R),NT, Flag).
|
||||
|
||||
|
||||
%% rb_del_max(+T, -Key, -Val, -TN)
|
||||
%% @pred rb_del_max( +T, -Key, -Val, -TN)
|
||||
%
|
||||
% Delete the largest element from the tree T, returning the key
|
||||
% Key, the value Val associated with the key and a new tree TN.
|
||||
@ -1027,6 +1029,24 @@ keys(black(L,K,_,R),L0,Lf) :-
|
||||
%
|
||||
% T is the red-black tree corresponding to the mapping in list L.
|
||||
|
||||
keys_to_rbtree(List, T) :-
|
||||
sort(List,Sorted),
|
||||
ord_keys_to_rbtree(Sorted, T).
|
||||
|
||||
%% list_to_rbtree(+L, -T) is det.
|
||||
%
|
||||
% T is the red-black tree corresponding to the mapping in list L.
|
||||
|
||||
ord_keys_to_rbtree(List, T) :-
|
||||
maplist(paux, List, Sorted),
|
||||
ord_list_to_rbtree(Sorted, T).
|
||||
|
||||
paux(K, K-_).
|
||||
|
||||
%% list_to_rbtree(+L, -T) is det.
|
||||
%
|
||||
% T is the red-black tree corresponding to the mapping in list L.
|
||||
|
||||
list_to_rbtree(List, T) :-
|
||||
sort(List,Sorted),
|
||||
ord_list_to_rbtree(Sorted, T).
|
||||
@ -1434,4 +1454,3 @@ with _NewVal_. Fails if it cannot find _Key_ in _T_.
|
||||
*/
|
||||
|
||||
%%! @}
|
||||
|
||||
|
@ -18,7 +18,9 @@
|
||||
static char SccsId[] = "%W% %G%";
|
||||
#endif
|
||||
|
||||
/*
|
||||
/** @file readline.c
|
||||
*
|
||||
*
|
||||
* This file includes the interface to the readline library, if installed in the
|
||||
*system.
|
||||
*
|
||||
@ -339,22 +341,22 @@ static bool getLine(int inp) {
|
||||
/* window of vulnerability opened */
|
||||
LOCAL_PrologMode |= ConsoleGetcMode;
|
||||
if (Yap_DoPrompt(s)) { // no output so far
|
||||
rl_set_signals();
|
||||
myrl_line = (unsigned char *)readline(LOCAL_Prompt);
|
||||
s->stream_getc = ReadlineGetc;
|
||||
rl_clear_signals();
|
||||
} else {
|
||||
rl_set_signals();
|
||||
myrl_line = (unsigned char *)readline(NULL);
|
||||
rl_clear_signals();
|
||||
}
|
||||
/* Do it the gnu way */
|
||||
if (LOCAL_PrologMode & InterruptMode) {
|
||||
Yap_external_signal(0, YAP_INT_SIGNAL);
|
||||
LOCAL_PrologMode &= ~ConsoleGetcMode;
|
||||
if (LOCAL_PrologMode & AbortMode) {
|
||||
Yap_Error(ABORT_EVENT, TermNil, "");
|
||||
LOCAL_ErrorMessage = "Abort";
|
||||
return console_post_process_eof(s);
|
||||
if (rl_pending_signal()) {
|
||||
LOCAL_PrologMode |= InterruptMode;
|
||||
}
|
||||
if (LOCAL_PrologMode & InterruptMode) {
|
||||
Yap_HandleSIGINT();
|
||||
} else {
|
||||
LOCAL_PrologMode &= ~ConsoleGetcMode;
|
||||
LOCAL_newline = true;
|
||||
}
|
||||
strncpy(LOCAL_Prompt, RepAtom(LOCAL_AtPrompt)->StrOfAE, MAX_PROMPT);
|
||||
@ -437,7 +439,6 @@ int Yap_ReadlineForSIGINT(void) {
|
||||
int ch;
|
||||
StreamDesc *s = &GLOBAL_Stream[StdInStream];
|
||||
const unsigned char *myrl_line = s->u.irl.buf;
|
||||
|
||||
if ((LOCAL_PrologMode & ConsoleGetcMode) && myrl_line != NULL) {
|
||||
ch = myrl_line[0];
|
||||
free((void *)myrl_line);
|
||||
|
4
os/sig.c
4
os/sig.c
@ -317,7 +317,9 @@ static bool set_fpu_exceptions(Term flag) {
|
||||
static void ReceiveSignal(int s, void *x, void *y) {
|
||||
CACHE_REGS
|
||||
LOCAL_PrologMode |= InterruptMode;
|
||||
printf("11ooo\n");
|
||||
if (s == SIGINT && (LOCAL_PrologMode & ConsoleGetcMode)) {
|
||||
return;
|
||||
}
|
||||
my_signal(s, ReceiveSignal);
|
||||
switch (s) {
|
||||
case SIGINT:
|
||||
|
@ -16,6 +16,7 @@
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//=============================================================================
|
||||
|
||||
|
||||
static YAP_Term gecode_RM_NONE;
|
||||
static YAP_Term gecode_RM_CONSTANT;
|
||||
static YAP_Term gecode_RM_LINEAR;
|
||||
@ -1397,33 +1398,29 @@ static YAP_Bool gecode_constraint_min_313(void)
|
||||
|
||||
static YAP_Bool gecode_constraint_when_456(void)
|
||||
{
|
||||
return YAP_Error("SYSTEN_ERROR", TermNil, "Unsupported"); /*
|
||||
GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
|
||||
BoolVar X2 = gecode_BoolVar_from_term(space,YAP_ARG2);
|
||||
std::function<void(Space&home)> X3 = gecode_std::function<void(Space&home)>_from_term(YAP_ARG3);
|
||||
std::function<void(Space&home)> X3 = gecode_StdFunctionSpace_from_term(YAP_ARG3);
|
||||
IntPropLevel X4 = gecode_IntPropLevel_from_term(YAP_ARG4);
|
||||
when(*space,X2,X3,X4);
|
||||
return TRUE; */
|
||||
return false;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static YAP_Bool gecode_constraint_when_457(void)
|
||||
{
|
||||
return YAP_Error("SYSTEN_ERROR", TermNil, "Unsupported"); /*
|
||||
|
||||
GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
|
||||
BoolVar X2 = gecode_BoolVar_from_term(space,YAP_ARG2);
|
||||
std::function<void(Space&home)> X3 = gecode_std::function<void(Space&home)>_from_term(YAP_ARG3);
|
||||
std::function<void(Space&home)> X4 = gecode_std::function<void(Space&home)>_from_term(YAP_ARG4);
|
||||
std::function<void(Space&home)> X3 = gecode_StdFunctionSpace_from_term(YAP_ARG3);
|
||||
std::function<void(Space&home)> X4 = gecode_StdFunctionSpace_from_term(YAP_ARG4);
|
||||
when(*space,X2,X3,X4);
|
||||
return TRUE;*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static YAP_Bool gecode_constraint_cardinality_71(void)
|
||||
{
|
||||
GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
|
||||
SetVarArgs X2 = gecode_SetVarArgs_from_term(space,YAP_ARG2);
|
||||
int X3 = gecode_int_from_term(YAP_ARG3)289;
|
||||
int X3 = gecode_int_from_term(YAP_ARG3);
|
||||
int X4 = gecode_int_from_term(YAP_ARG4);
|
||||
cardinality(*space,X2,X3,X4);
|
||||
return TRUE;
|
||||
@ -2247,7 +2244,7 @@ static YAP_Bool gecode_constraint_when_455(void)
|
||||
{
|
||||
GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
|
||||
BoolVar X2 = gecode_BoolVar_from_term(space,YAP_ARG2);
|
||||
std::function<void(Space&home)> X3 = gecode_std::function<void(Space&home)>_from_term(YAP_ARG3);
|
||||
std::function<void(Space&home)> X3 = gecode_StdFunctionSpace_from_term(YAP_ARG3);
|
||||
when(*space,X2,X3);
|
||||
return TRUE;
|
||||
}
|
||||
@ -2888,11 +2885,10 @@ static YAP_Bool gecode_constraint_channel_74(void)
|
||||
|
||||
static YAP_Bool gecode_constraint_when_458(void)
|
||||
{
|
||||
|
||||
GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
|
||||
BoolVar X2 = gecode_BoolVar_from_term(space,YAP_ARG2);
|
||||
std::function<void(Space&home)> X3 = gecode_std::function<void(Space&home)>_from_term(YAP_ARG3);
|
||||
std::function<void(Space&home)> X4 = gecode_std::function<void(Space&home)>_from_term(YAP_ARG4);
|
||||
std::function<void(Space&home)> X3 = gecode_StdFunctionSpace_from_term(YAP_ARG3);
|
||||
std::function<void(Space&home)> X4 = gecode_StdFunctionSpace_from_term(YAP_ARG4);
|
||||
IntPropLevel X5 = gecode_IntPropLevel_from_term(YAP_ARG5);
|
||||
when(*space,X2,X3,X4,X5);
|
||||
return TRUE;
|
||||
@ -3145,7 +3141,7 @@ static YAP_Bool gecode_constraint_binpacking_40(void)
|
||||
static YAP_Bool gecode_constraint_branch_1(void)
|
||||
{
|
||||
GenericSpace* space = gecode_Space_from_term(YAP_ARG1);
|
||||
std::function<void(Space&home)> X2 = gecode_std::function<void(Space&home)>_from_term(YAP_ARG2);
|
||||
std::function<void(Space&home)> X2 = gecode_StdFunctionSpace_from_term(YAP_ARG2);
|
||||
branch(*space,X2);
|
||||
return TRUE;
|
||||
}
|
||||
@ -5174,3 +5170,4 @@ static YAP_Bool gecode_constraint_ite_254(void)
|
||||
ite(*space,X2,X3,X4,X5,X6);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -554,7 +554,11 @@ class YAPEnumImpl(object):
|
||||
print
|
||||
|
||||
def _generate_from_term(self):
|
||||
print "static %s gecode_%s_from_term(YAP_Term X)" % (self.TYPE,self.TYPE)
|
||||
if self.TYPE == "std::function<void(Space&home)>":
|
||||
t2 = "StdFunctionSpace"
|
||||
else:
|
||||
t2 = self.TYPE
|
||||
print "static %s gecode_%s_from_term(YAP_Term X)" % (self.TYPE,t2)
|
||||
print "{"
|
||||
for x in self.ENUM:
|
||||
print " if (X==gecode_%s) return %s;" % (x,x)
|
||||
@ -563,11 +567,16 @@ class YAPEnumImpl(object):
|
||||
print
|
||||
|
||||
def _generate_from_term_forward_decl(self):
|
||||
print "static %s gecode_%s_from_term(YAP_Term);" % (self.TYPE,self.TYPE)
|
||||
if self.TYPE == "std::function<void(Space&home)>":
|
||||
t2 = "StdFunctionSpace"
|
||||
else:
|
||||
t2 = self.TYPE
|
||||
print "static %s gecode_%s_from_term(YAP_Term);" % (self.TYPE,t2)
|
||||
|
||||
class YAPEnumImplGenerator(object):
|
||||
|
||||
def generate(self):
|
||||
generate_space_function();
|
||||
for c in enum_classes():
|
||||
class C(c,YAPEnumImpl): pass
|
||||
o = C()
|
||||
@ -576,6 +585,7 @@ class YAPEnumImplGenerator(object):
|
||||
class YAPEnumForwardGenerator(object):
|
||||
|
||||
def generate(self):
|
||||
generate_space_function_forward();
|
||||
for c in enum_classes():
|
||||
class C(c,YAPEnumImpl): pass
|
||||
o = C()
|
||||
@ -642,12 +652,16 @@ class CCDescriptor(object):
|
||||
has_space = True
|
||||
else:
|
||||
extra = ""
|
||||
t2 = t
|
||||
if t in ("IntVar","BoolVar","SetVar","FloatVar","IntVarArgs","BoolVarArgs","SetVarArgs","FloatVarArgs"):
|
||||
extra = "space,"
|
||||
if has_space == False:
|
||||
print " GenericSpace* space = gecode_Space_from_term(%s);" % a
|
||||
has_space = True
|
||||
print " %s %s = gecode_%s_from_term(%s%s);" % (t,v,t,extra,a)
|
||||
else:
|
||||
if t == "std::function<void(Space&home)>":
|
||||
t2 = "StdFunctionSpace"
|
||||
print " %s %s = gecode_%s_from_term(%s%s);" % (t,v,t2,extra,a)
|
||||
args.append(v)
|
||||
i += 1
|
||||
print " %s(%s);" % (self.name, ",".join(args))
|
||||
|
@ -186,6 +186,18 @@ static inline BoolAssign&
|
||||
return *(DFA *) YAP_OpaqueObjectFromTerm(t);
|
||||
}
|
||||
|
||||
static inline Rnd&
|
||||
gecode_Rnd_from_term(YAP_Term t)
|
||||
{
|
||||
return *(Rnd *) YAP_OpaqueObjectFromTerm(t);
|
||||
}
|
||||
|
||||
static inline std::function<void(Space&home)>&
|
||||
gecode_StdFunctionSpace_from_term(YAP_Term t)
|
||||
{
|
||||
return *(std::function<void(Space&home)> *) YAP_OpaqueObjectFromTerm(t);
|
||||
}
|
||||
|
||||
static inline FloatNum
|
||||
gecode_FloatNum_from_term(YAP_Term t)
|
||||
{
|
||||
@ -379,6 +391,7 @@ static YAP_Term gecode_BOOL_VAR_RND;
|
||||
static YAP_Term gecode_FLOAT_VAR_SIZE_MIN;
|
||||
static YAP_Term gecode_FLOAT_VAR_SIZE_MAX;
|
||||
static YAP_Term gecode_FLOAT_VAR_DEGREE_SIZE_MAX;
|
||||
static YAP_Term gecode_FLOAT_VAR_DEGREE_SIZE_MIN;
|
||||
|
||||
static inline FloatVarBranch
|
||||
gecode_FloatVarBranch_from_term(YAP_Term t)
|
||||
@ -386,7 +399,6 @@ static YAP_Term gecode_BOOL_VAR_RND;
|
||||
if (YAP_IsAtomTerm(t)) {
|
||||
if ( t == gecode_FLOAT_VAR_SIZE_MIN)
|
||||
return FLOAT_VAR_SIZE_MIN();
|
||||
static YAP_Term gecode_FLOAT_VAR_DEGREE_SIZE_MIN;
|
||||
if ( t == gecode_FLOAT_VAR_SIZE_MAX)
|
||||
return FLOAT_VAR_SIZE_MAX();
|
||||
if ( t == gecode_FLOAT_VAR_NONE)
|
||||
|
@ -1,5 +1,5 @@
|
||||
The MYDDAS Data-base interface {#myddas}
|
||||
===============================
|
||||
|
||||
## The MYDDAS Data-base interface {#myddas}
|
||||
|
||||
The MYDDAS database project was developed within a FCT project aiming at
|
||||
the development of a highly efficient deductive database system, based
|
||||
@ -63,8 +63,8 @@ The MYDDAS Data-base interface {#myddas}
|
||||
Prolog cut operator, which has exactly the same behaviour from
|
||||
predicates defined in the Prolog program source code, or from predicates
|
||||
defined in database as relations.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Name = 'John Doe',
|
||||
Number = 123456789 ?
|
||||
yes
|
||||
@ -92,9 +92,6 @@ The MYDDAS Data-base interface {#myddas}
|
||||
|
||||
|
||||
@pred db view(+,+,+).
|
||||
|
||||
|
||||
|
||||
@pred db view(+,+).
|
||||
|
||||
|
||||
@ -186,9 +183,6 @@ The MYDDAS Data-base interface {#myddas}
|
||||
|
||||
|
||||
@pred db_sql(+,+,?).
|
||||
|
||||
|
||||
|
||||
@pred db_sql(+,?).
|
||||
|
||||
|
||||
@ -284,15 +278,7 @@ The MYDDAS Data-base interface {#myddas}
|
||||
|
||||
|
||||
@pred db_get_attributes_types(+,+,?).
|
||||
|
||||
|
||||
|
||||
@pred db_get_attributes_types(+,?).
|
||||
|
||||
|
||||
|
||||
|
||||
The prototype for this predicate is the following:
|
||||
otype for this predicate is the following:
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
?- db_get_attributes_types(Conn,RelationName,ListOfFields).
|
||||
@ -552,9 +538,6 @@ The MYDDAS Data-base interface {#myddas}
|
||||
this by doing again `db_my_result_set(store_result)`.
|
||||
|
||||
@pred db_my_sql_mode(+Conn,?SQL_Mode).
|
||||
|
||||
|
||||
|
||||
@pred db_my_sql_mode(?SQL_Mode).
|
||||
|
||||
|
||||
@ -570,4 +553,4 @@ The MYDDAS Data-base interface {#myddas}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
You can see the available SQL Modes at the MySQL homepage at
|
||||
<http://www.mysql.org>.
|
||||
b
|
||||
|
@ -32,7 +32,9 @@ static PyObject *s_to_python(const char *s, bool eval, PyObject *p0) {
|
||||
Py_INCREF(o);
|
||||
return CHECKNULL(YAP_MkStringTerm(s), o);
|
||||
} else {
|
||||
PyObject *pobj = PyUnicode_DecodeUTF8(s, strlen(s), NULL);
|
||||
//char *ns = Py_Malloc(strlen(s)+1);
|
||||
///strcpy(ns,s);
|
||||
PyObject *pobj = PyUnicode_FromString(s);
|
||||
return pobj;
|
||||
}
|
||||
}
|
||||
@ -150,19 +152,19 @@ PyObject *term_to_python(term_t t, bool eval, PyObject *o) {
|
||||
out = PyList_New(len);
|
||||
if (!out) {
|
||||
PL_reset_term_refs(tail);
|
||||
return CHECKNULL(t, Py_None);
|
||||
YAPPy_ThrowError(SYSTEM_ERROR_INTERNAL, t, "list->python");
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (!PL_get_list(t, arg, t)) {
|
||||
PL_reset_term_refs(tail);
|
||||
return Py_None;
|
||||
YAPPy_ThrowError(SYSTEM_ERROR_INTERNAL, t, "list->python");
|
||||
}
|
||||
a = term_to_python(arg, eval, o);
|
||||
if (a) {
|
||||
if (PyList_SetItem(out, i, a) < 0) {
|
||||
PL_reset_term_refs(tail);
|
||||
return Py_None;
|
||||
YAPPy_ThrowError(SYSTEM_ERROR_INTERNAL, t, "list->python");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -170,11 +172,33 @@ PyObject *term_to_python(term_t t, bool eval, PyObject *o) {
|
||||
return CHECKNULL(t, out);
|
||||
} else {
|
||||
functor_t fun;
|
||||
atom_t name;
|
||||
int arity;
|
||||
PyObject *rc;
|
||||
|
||||
if (!PL_get_functor(t, &fun)) {
|
||||
PL_reset_term_refs(tail);
|
||||
return CHECKNULL(t, Py_None);
|
||||
YAPPy_ThrowError(SYSTEM_ERROR_INTERNAL, t, "list->python");
|
||||
}
|
||||
AOK(PL_get_name_arity(t, &name, &arity), NULL);
|
||||
if (name == ATOM_t) {
|
||||
int i;
|
||||
rc = PyTuple_New(arity);
|
||||
for (i = 0; i < len; i++) {
|
||||
term_t arg = PL_new_term_ref();
|
||||
if (!PL_get_arg(i+1, t, arg)) {
|
||||
PL_reset_term_refs(arg);
|
||||
YAPPy_ThrowError(SYSTEM_ERROR_INTERNAL, t, "t(...)->python");
|
||||
}
|
||||
PyObject *a = term_to_python(arg, eval, o);
|
||||
if (a) {
|
||||
if (PyTuple_SetItem(rc, i, a) < 0) {
|
||||
PL_reset_term_refs(arg);
|
||||
YAPPy_ThrowError(SYSTEM_ERROR_INTERNAL, t, "t(...)->python");
|
||||
}
|
||||
}
|
||||
PL_reset_term_refs(arg);
|
||||
}
|
||||
}
|
||||
if (eval)
|
||||
rc = compound_to_pyeval(t, o);
|
||||
@ -185,7 +209,7 @@ PyObject *term_to_python(term_t t, bool eval, PyObject *o) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return CHECKNULL(t, Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
PyObject *yap_to_python(YAP_Term t, bool eval, PyObject *o) {
|
||||
@ -209,3 +233,7 @@ PyObject *deref_term_to_python(term_t t) {
|
||||
}
|
||||
return term_to_python(t, false, NULL);
|
||||
}
|
||||
|
||||
|
||||
void YAPPy_ThrowError__(const char *file, const char *function, int lineno,
|
||||
yap_error_number type, term_t where, ...);
|
||||
|
@ -698,7 +698,7 @@ static PyObject *structseq_repr(PyObject *iobj) {
|
||||
|
||||
PyObject *term_to_nametuple(const char *s, arity_t arity, PyObject *tuple) {
|
||||
PyObject *o;
|
||||
#if PY_MAJOR_VERSION >= 30
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
PyTypeObject *typp;
|
||||
PyObject *key = PyUnicode_FromString(s);
|
||||
if (py_F2P && PyDict_Contains(py_F2P, key)) {
|
||||
@ -729,7 +729,6 @@ PyObject *term_to_nametuple(const char *s, arity_t arity, PyObject *tuple) {
|
||||
}
|
||||
o = PyStructSequence_New(typp);
|
||||
Py_INCREF(typp);
|
||||
fprintf(stderr, "<<< %p\n",typp);
|
||||
arity_t i;
|
||||
for (i = 0; i < arity; i++) {
|
||||
PyObject *pArg = PyTuple_GET_ITEM(tuple, i);
|
||||
|
@ -24,9 +24,7 @@ SET_SOURCE_FILES_PROPERTIES(../../swig/yap.i PROPERTIES SWIG_MODULE_NAME yap)
|
||||
|
||||
if (WIN32)
|
||||
|
||||
set (SYS_DLLS ${GMP_LIBRARIES})
|
||||
|
||||
set (SYS_DLLS c:/msys64/mingw64/bin/libgmp-10.dll)
|
||||
set (SYS_DLLS ${GMP_LIBRARIES} c:/msys64/mingw64/bin/libgmp-10.dll)
|
||||
|
||||
endif()
|
||||
|
||||
@ -41,7 +39,8 @@ endif()
|
||||
# )
|
||||
|
||||
|
||||
set (python_dlls $<TARGET_FILE:matrix>
|
||||
set (python_dlls ${SYS_DLLS}
|
||||
$<TARGET_FILE:matrix>
|
||||
$<TARGET_FILE:regexp>
|
||||
$<TARGET_FILE:yap_rl>
|
||||
$<TARGET_FILE:tries>
|
||||
@ -61,20 +60,31 @@ endif()
|
||||
set (PL ${pl_library} ${PROLOG_SOURCES} )
|
||||
|
||||
add_custom_target( YAP4PY_SETUP
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/packages/swig/yap.i ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/config.h ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${python_dlls} ${SYS_DLLS} ${CMAKE_BINARY_DIR}/libYap${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${PYTHON_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${PL} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${pl_boot_library} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${pl_os_library} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os
|
||||
DEPENDS YAP4PY_SETUP_DIRS STARTUP ${python_dlls} ${PYTHON_SOURCES} ${PROLOG_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/setup.py ${SWIG_MODULE_Py2YAP_REAL_NAME} )
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${python_dlls} yap4py
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/libYap${CMAKE_SHARED_LIBRARY_SUFFIX} yap4py
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
DEPENDS YAP4PY_SETUP_PL STARTUP ${python_dlls} libYap )
|
||||
|
||||
add_custom_target( YAP4PY_SETUP_PL
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${PL} yap4py/prolog
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${pl_boot_library} yap4py/prolog/pl
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${pl_os_library} yap4py/prolog/os
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/yap.i ${PYTHON_SOURCES} ${PL} ${pl_boot_library} ${pl_os_library} )
|
||||
|
||||
add_custom_target( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/yap.i
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/packages/swig/yap.i yap.i
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCES} yap4py
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
DEPENDS YAP4PY_SETUP_DIRS ${PYTHON_SOURCES} )
|
||||
|
||||
add_custom_target( YAP4PY_SETUP_DIRS
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory yap4py
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory yap4py/prolog
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory yap4py/prolog/pl
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory yap4py/prolog/os
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
||||
|
||||
add_custom_target( YAP4PY ALL
|
||||
|
@ -3,6 +3,8 @@
|
||||
See:
|
||||
https://packaging.python.org/en/latest/distributing.html
|
||||
https://github.com/pypa/sampleproject
|
||||
|
||||
|
||||
"""
|
||||
|
||||
# Always prefer setuptools over distutils
|
||||
|
@ -68,6 +68,8 @@ cplus = ['']
|
||||
bpy2yap = []
|
||||
native_sources = ['yap_wrap.cpp']
|
||||
here = path.abspath(path.dirname(__file__))
|
||||
gmp_dir = path.abspath(path.dirname("${GMP_LIBRARIES}"))
|
||||
python_libdir = path.abspath(path.dirname("${PYTHON_LIBRARIES}"))
|
||||
|
||||
# Get the long description from the README file
|
||||
|
||||
@ -79,14 +81,14 @@ extensions = [Extension('_yap', native_sources,
|
||||
('_YAP_NOT_INSTALLED_', '1'),
|
||||
('YAP_PYTHON', '1'),
|
||||
('_GNU_SOURCE', '1')],
|
||||
runtime_library_dirs=['yap4py', '${libdir}', '${bindir}'],
|
||||
runtime_library_dirs=['yap4py', '${libdir}', '${bindir}', '${gmp_dir}', '${python_libdir}'],
|
||||
swig_opts=['-modern', '-c++', '-py3',
|
||||
'-DX_API', '-I${CMAKE_SOURCE_DIR}/CXX', '-I${CMAKE_SOURCE_DIR}/include',
|
||||
'-I${CMAKE_SOURCE_DIR}/H', '-I${CMAKE_SOURCE_DIR}/H/generated',
|
||||
'-I${CMAKE_SOURCE_DIR}/os', '-I${CMAKE_SOURCE_DIR}/OPTYap', '-I../../..'],
|
||||
library_dirs=['../../..', '../../../CXX', '..', "${dlls}", "${bindir}", '.'],
|
||||
extra_link_args=my_extra_link_args,
|
||||
libraries=['Yap','${PYTHON_LIBRARIES}','${GMP_LIBRARIES}']+win_libs+local_libs,
|
||||
libraries=['Yap','gmp']+win_libs+local_libs,
|
||||
include_dirs=['../../..',
|
||||
'${GMP_INCLUDE_DIRS}',
|
||||
'${CMAKE_SOURCE_DIR}/H',
|
||||
|
@ -137,7 +137,7 @@ def answer(q):
|
||||
return False
|
||||
|
||||
def query_prolog(engine, s):
|
||||
import pdb; pdb.set_trace()
|
||||
# import pdb; pdb.set_trace()
|
||||
#
|
||||
# construct a query from a one-line string
|
||||
# q is opaque to Python
|
||||
@ -209,15 +209,7 @@ def live(**kwargs):
|
||||
#
|
||||
|
||||
def boot_yap(**kwargs):
|
||||
args = EngineArgs(**kwarg)
|
||||
yap_lib_path = os.path.dirname(__file__)
|
||||
args.setYapShareDir(os.path.join(yap_lib_path,"prolog"))
|
||||
args.setYapLibDir(yap_lib_path)
|
||||
args.setSavedState(os.path.join(yap_lib_path,"startup.yss"))
|
||||
engine = YAPEngine(args)
|
||||
engine.goal( set_prolog_flag('verbose', 'silent' ) )
|
||||
engine.goal( use_module(library('yapi') ) )
|
||||
return engine
|
||||
return Engine(**kwargs)
|
||||
|
||||
if __name__ == "__main__":
|
||||
engine = boot_yap()
|
||||
|
@ -55,7 +55,7 @@ all_attvars/1,
|
||||
:- dynamic attributed_module/3.
|
||||
|
||||
|
||||
/** @pred get_attr(+ _Var_,+ _Module_,- _Value_)
|
||||
/** @pred get_attr( + Var,+ Module,- Value)
|
||||
|
||||
Request the current _value_ for the attribute named _Module_. If
|
||||
_Var_ is not an attributed variable or the named attribute is not
|
||||
@ -339,7 +339,7 @@ printing and other special purpose operations.
|
||||
|
||||
*/
|
||||
|
||||
/** @pred _Module_:attribute_goal( _-Var_, _-Goal_)
|
||||
/** @pred Module:attribute_goal( -Var, Goal)
|
||||
|
||||
User-defined procedure, called to convert the attributes in _Var_ to
|
||||
a _Goal_. Should fail when no interpretation is available.
|
||||
@ -469,11 +469,11 @@ att_vars([_|LGs], AttVars) :-
|
||||
% make sure we set the suspended goal list to its previous state!
|
||||
% make sure we have installed a SICStus like constraint solver.
|
||||
|
||||
/** @pred _Module_:project_attributes(+AttrVars, +Goal)
|
||||
/** @pred Module:project_attributes( +AttrVars, +Goal)
|
||||
|
||||
|
||||
|
||||
Given a goal _Goa]l_ with variables _QueryVars_ and list of attributed
|
||||
Given a goal _Goal_ with variables _QueryVars_ and list of attributed
|
||||
variables _AttrVars_, project all attributes in _AttrVars_ to
|
||||
_QueryVars_. Although projection is constraint system dependent,
|
||||
typically this will involve expressing all constraints in terms of
|
||||
|
@ -41,7 +41,7 @@ should be read as "p( _X_) if q( _X_) or r( _X_)".
|
||||
|
||||
*/
|
||||
|
||||
/** @pred \+ :_P_ is iso
|
||||
/** @pred \+ 0:P is iso
|
||||
Negation by failure.
|
||||
|
||||
Goal _P_ is not provable. The execution of this predicate fails if
|
||||
@ -68,7 +68,7 @@ If _P_ includes cuts, the cuts are defined to be scoped by _P_: they cannot cut
|
||||
|
||||
*/
|
||||
|
||||
/** @pred :_Condition__ -> :_Action_ is iso
|
||||
/** @pred 0:Condition -> 0:Action is iso
|
||||
|
||||
|
||||
@short If _Condition__ has a solution, call _Action_;
|
||||
@ -119,7 +119,7 @@ arguments.
|
||||
|
||||
*/
|
||||
|
||||
/** @pred :_Condition_ *-> :_Action_ is iso
|
||||
/** @pred 0:Condition *-> 0:Action is iso
|
||||
|
||||
This construct implements the so-called <em>soft-cut</em>. The control is
|
||||
defined as follows:
|
||||
|
@ -41,7 +41,7 @@
|
||||
|
||||
|
||||
/**
|
||||
* @defgroup corout Implementing Attributed Variables and Co-Routining
|
||||
* @defgroup attscorouts Implementing Attributed Variables and Co-Routining
|
||||
*
|
||||
* @ingroup attributes
|
||||
* @{
|
||||
|
@ -791,6 +791,7 @@ be lost.
|
||||
nodebug,
|
||||
abort.
|
||||
'$action'(0'b,_,_,_,_,_) :- !, % 'b break
|
||||
'$stop_creeping'(_),
|
||||
'$skipeol'(0'b),
|
||||
break,
|
||||
fail.
|
||||
@ -802,7 +803,6 @@ be lost.
|
||||
'$skipeol'(0'c),
|
||||
'__NB_setval__'('$debug_jump',false).
|
||||
'$action'(0'e,_,_,_,_,_) :- !, % 'e exit
|
||||
'$skipeol'(0'e),
|
||||
halt.
|
||||
'$action'(0'f,_,CallId,_,_,_) :- !, % 'f fail
|
||||
'$scan_number'(0'f, CallId, GoalId), %'f
|
||||
|
@ -18,9 +18,9 @@
|
||||
* @file flagd.ysp
|
||||
*
|
||||
* @defgroup Flags Yap Flags
|
||||
*n@{}
|
||||
* @{}
|
||||
* @ingroup builtins
|
||||
* @}@[ ]
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
unknown(_,error).
|
||||
|
||||
|
||||
/** @pred create_prolog_flag(+ _Flag_,+ _Value_,+ _Options_)
|
||||
/** @pred create_prolog_flag( +Flag, +Value, +Options)
|
||||
|
||||
Create a new YAP Prolog flag. _Options_ include
|
||||
|
||||
|
@ -789,4 +789,4 @@ module_state :-
|
||||
fail.
|
||||
module_state.
|
||||
|
||||
// @}
|
||||
%% @}
|
Reference in New Issue
Block a user