fixes
This commit is contained in:
parent
fadf853e96
commit
34c6ace8be
@ -305,11 +305,16 @@ static char tmpbuf[YAP_BUF_SIZE];
|
|||||||
#include "YapErrors.h"
|
#include "YapErrors.h"
|
||||||
//
|
//
|
||||||
void Yap_pushErrorContext(yap_error_descriptor_t *new_error) {
|
void Yap_pushErrorContext(yap_error_descriptor_t *new_error) {
|
||||||
|
memset(new_error, 0, sizeof(yap_error_descriptor_t));
|
||||||
new_error->top_error = LOCAL_ActiveError;
|
new_error->top_error = LOCAL_ActiveError;
|
||||||
LOCAL_ActiveError = new_error;
|
LOCAL_ActiveError = new_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
yap_error_descriptor_t *Yap_popErrorContext(void) {
|
yap_error_descriptor_t *Yap_popErrorContext(bool pass) {
|
||||||
|
if (pass && LOCAL_ActiveError->top_error->errorNo == YAP_NO_ERROR &&
|
||||||
|
LOCAL_ActiveError->errorNo != YAP_NO_ERROR)
|
||||||
|
memcpy(LOCAL_ActiveError->top_error, LOCAL_ActiveError,
|
||||||
|
sizeof(yap_error_descriptor_t));
|
||||||
yap_error_descriptor_t *new_error = LOCAL_ActiveError;
|
yap_error_descriptor_t *new_error = LOCAL_ActiveError;
|
||||||
LOCAL_ActiveError = LOCAL_ActiveError->top_error;
|
LOCAL_ActiveError = LOCAL_ActiveError->top_error;
|
||||||
return new_error;
|
return new_error;
|
||||||
|
@ -1013,8 +1013,8 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (LOCAL_tokptr->Tok <= Ord(String_tok)) {
|
if (LOCAL_tokptr->Tok <= Ord(String_tok)) {
|
||||||
syntax_msg("line %d: expected operator, got \'%s\'", LOCAL_tokptr->TokLine,
|
syntax_msg("line %d: expected operator, got \'%s\'",
|
||||||
Yap_tokText(LOCAL_tokptr));
|
LOCAL_tokptr->TokLine, Yap_tokText(LOCAL_tokptr));
|
||||||
FAIL;
|
FAIL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1036,6 +1036,7 @@ Term Yap_Parse(UInt prio, encoding_t enc, Term cmod) {
|
|||||||
t = ParseTerm(prio, &FailBuff, enc, cmod PASS_REGS);
|
t = ParseTerm(prio, &FailBuff, enc, cmod PASS_REGS);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (GLOBAL_Option['p' - 'a' + 1]) {
|
if (GLOBAL_Option['p' - 'a' + 1]) {
|
||||||
|
Yap_DebugPlWrite(MkIntTerm(LOCAL_tokptr->TokLine));
|
||||||
Yap_DebugPutc(stderr, '[');
|
Yap_DebugPutc(stderr, '[');
|
||||||
if (t == 0)
|
if (t == 0)
|
||||||
Yap_DebugPlWrite(MkIntTerm(0));
|
Yap_DebugPlWrite(MkIntTerm(0));
|
||||||
|
32
C/write.c
32
C/write.c
@ -9,10 +9,9 @@
|
|||||||
* *
|
* *
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
* *
|
* *
|
||||||
* File: write.c *
|
* File: write.c * Last
|
||||||
* Last rev: *
|
*rev: * mods:
|
||||||
* mods: *
|
** comments: Writing a Prolog Term *
|
||||||
* comments: Writing a Prolog Term *
|
|
||||||
* *
|
* *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
#ifdef SCCS
|
#ifdef SCCS
|
||||||
@ -84,25 +83,21 @@ typedef struct write_globs {
|
|||||||
#define lastw wglb->lw
|
#define lastw wglb->lw
|
||||||
#define last_minus wglb->last_atom_minus
|
#define last_minus wglb->last_atom_minus
|
||||||
|
|
||||||
static bool callPortray(Term t, struct DB_TERM **old_EXp, int sno USES_REGS) {
|
static bool callPortray(Term t, int sno USES_REGS) {
|
||||||
PredEntry *pe;
|
PredEntry *pe;
|
||||||
Int b0 = LCL0 - (CELL *)B;
|
Int b0 = LCL0 - (CELL *)B;
|
||||||
|
|
||||||
*old_EXp = Yap_RefToException();
|
|
||||||
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
if ((pe = RepPredProp(Yap_GetPredPropByFunc(FunctorPortray, USER_MODULE))) &&
|
if ((pe = RepPredProp(Yap_GetPredPropByFunc(FunctorPortray, USER_MODULE))) &&
|
||||||
pe->OpcodeOfPred != FAIL_OPCODE && pe->OpcodeOfPred != UNDEF_OPCODE &&
|
pe->OpcodeOfPred != FAIL_OPCODE && pe->OpcodeOfPred != UNDEF_OPCODE &&
|
||||||
Yap_execute_pred(pe, &t, true PASS_REGS)) {
|
Yap_execute_pred(pe, &t, true PASS_REGS)) {
|
||||||
choiceptr B0 = (choiceptr)(LCL0 - b0);
|
choiceptr B0 = (choiceptr)(LCL0 - b0);
|
||||||
if (Yap_HasException() && !*old_EXp)
|
|
||||||
*old_EXp = Yap_RefToException();
|
|
||||||
Yap_fail_all(B0 PASS_REGS);
|
Yap_fail_all(B0 PASS_REGS);
|
||||||
LOCK(GLOBAL_Stream[sno].streamlock);
|
LOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
LOCK(GLOBAL_Stream[sno].streamlock);
|
LOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
if (Yap_HasException() && !*old_EXp)
|
|
||||||
*old_EXp = Yap_RefToException();
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,7 +566,9 @@ static void wrputref(CODEADDR ref, int Quote_illegal,
|
|||||||
if (chr == '\0') {
|
if (chr == '\0') {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (delta == 0) {chr = *ptr++; }
|
if (delta == 0) {
|
||||||
|
chr = *ptr++;
|
||||||
|
}
|
||||||
write_quoted(chr, qt, stream);
|
write_quoted(chr, qt, stream);
|
||||||
} while (true);
|
} while (true);
|
||||||
wrputc(qt, stream);
|
wrputc(qt, stream);
|
||||||
@ -884,8 +881,6 @@ static void wrputref(CODEADDR ref, int Quote_illegal,
|
|||||||
putAtom(Atom3Dots, wglb->Quote_illegal, wglb);
|
putAtom(Atom3Dots, wglb->Quote_illegal, wglb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DBTerm *ex;
|
|
||||||
Yap_ResetException(worker_id);
|
|
||||||
t = Deref(t);
|
t = Deref(t);
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
write_var((CELL *)t, wglb, &nrwt);
|
write_var((CELL *)t, wglb, &nrwt);
|
||||||
@ -910,9 +905,7 @@ static void wrputref(CODEADDR ref, int Quote_illegal,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (wglb->Use_portray)
|
if (wglb->Use_portray)
|
||||||
if (callPortray(t, &ex, wglb->stream - GLOBAL_Stream PASS_REGS)) {
|
if (callPortray(t, wglb->stream - GLOBAL_Stream PASS_REGS)) {
|
||||||
Yap_CopyException(ex);
|
|
||||||
Yap_RaiseException();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (trueGlobalPrologFlag(WRITE_STRINGS_FLAG) && IsCodesTerm(t)) {
|
if (trueGlobalPrologFlag(WRITE_STRINGS_FLAG) && IsCodesTerm(t)) {
|
||||||
@ -985,9 +978,7 @@ static void wrputref(CODEADDR ref, int Quote_illegal,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (wglb->Use_portray) {
|
if (wglb->Use_portray) {
|
||||||
if (callPortray(t, &ex, wglb->stream - GLOBAL_Stream PASS_REGS)) {
|
if (callPortray(t, wglb->stream - GLOBAL_Stream PASS_REGS)) {
|
||||||
Yap_CopyException(ex);
|
|
||||||
Yap_RaiseException();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1239,7 +1230,10 @@ static void wrputref(CODEADDR ref, int Quote_illegal,
|
|||||||
wglb.Ignore_ops = flags & Ignore_ops_f;
|
wglb.Ignore_ops = flags & Ignore_ops_f;
|
||||||
wglb.Write_strings = flags & BackQuote_String_f;
|
wglb.Write_strings = flags & BackQuote_String_f;
|
||||||
/* protect slots for portray */
|
/* protect slots for portray */
|
||||||
|
yap_error_descriptor_t ne;
|
||||||
|
Yap_pushErrorContext(&ne);
|
||||||
writeTerm(from_pointer(&t, &rwt, &wglb), priority, 1, FALSE, &wglb, &rwt);
|
writeTerm(from_pointer(&t, &rwt, &wglb), priority, 1, FALSE, &wglb, &rwt);
|
||||||
|
Yap_popErrorContext(true);
|
||||||
if (flags & New_Line_f) {
|
if (flags & New_Line_f) {
|
||||||
if (flags & Fullstop_f) {
|
if (flags & Fullstop_f) {
|
||||||
wrputc('.', wglb.stream);
|
wrputc('.', wglb.stream);
|
||||||
|
@ -440,7 +440,7 @@ static const char *find_directory(YAP_init_args *iap, const char *paths[],
|
|||||||
const char *inp;
|
const char *inp;
|
||||||
if (filename) {
|
if (filename) {
|
||||||
strcpy(out, filename);
|
strcpy(out, filename);
|
||||||
if (Yap_IsAbsolutePath(out, false)) {
|
if (Yap_IsAbsolutePath(out, true)) {
|
||||||
out = pop_output_text_stack(lvl, out);
|
out = pop_output_text_stack(lvl, out);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
/* The YAP main types */
|
/* The YAP main types */
|
||||||
#include "YapTerm.h"
|
#include "YapTerm.h"
|
||||||
|
|
||||||
@ -75,17 +74,14 @@
|
|||||||
typedef bool YAP_Bool;
|
typedef bool YAP_Bool;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This term can never be constructed as a valid term, so it is
|
This term can never be constructed as a valid term, so it is
|
||||||
used as a "BAD" term
|
used as a "BAD" term
|
||||||
*/
|
*/
|
||||||
#define TermZERO ((Term)0)
|
#define TermZERO ((Term)0)
|
||||||
|
|
||||||
|
|
||||||
#include "YapConfig.h"
|
#include "YapConfig.h"
|
||||||
|
|
||||||
|
|
||||||
typedef void *YAP_PredEntryPtr;
|
typedef void *YAP_PredEntryPtr;
|
||||||
|
|
||||||
typedef size_t YAP_Arity;
|
typedef size_t YAP_Arity;
|
||||||
@ -175,7 +171,6 @@ typedef enum {
|
|||||||
#define YAP_RECONSULT_MODE 1
|
#define YAP_RECONSULT_MODE 1
|
||||||
#define YAP_BOOT_MODE 2
|
#define YAP_BOOT_MODE 2
|
||||||
|
|
||||||
|
|
||||||
X_API YAP_file_type_t Yap_InitDefaults(void *init_args, char saved_state[],
|
X_API YAP_file_type_t Yap_InitDefaults(void *init_args, char saved_state[],
|
||||||
int Argc, char *Argv[]);
|
int Argc, char *Argv[]);
|
||||||
|
|
||||||
@ -199,7 +194,7 @@ typedef struct yap_boot_params {
|
|||||||
//> if NON-NULL, name for a Prolog file to use when booting
|
//> if NON-NULL, name for a Prolog file to use when booting
|
||||||
const char *PrologBootFile;
|
const char *PrologBootFile;
|
||||||
//> if NON-NULL, directory for a Prolog file to be when booting
|
//> if NON-NULL, directory for a Prolog file to be when booting
|
||||||
const char *PlBootDir;
|
const char *BootPlDir;
|
||||||
//> if NON-NULL, path where we can find the saved state
|
//> if NON-NULL, path where we can find the saved state
|
||||||
const char *SavedState;
|
const char *SavedState;
|
||||||
//> bootstrapping mode: YAP is not properly installed
|
//> bootstrapping mode: YAP is not properly installed
|
||||||
|
@ -238,6 +238,6 @@ INLINE_ONLY extern inline Term Yap_ensure_atom__(const char *fu, const char *fi,
|
|||||||
extern const char *Yap_errorClassName(yap_error_class_number e);
|
extern const char *Yap_errorClassName(yap_error_class_number e);
|
||||||
|
|
||||||
extern void Yap_pushErrorContext(yap_error_descriptor_t * new_error);
|
extern void Yap_pushErrorContext(yap_error_descriptor_t * new_error);
|
||||||
extern yap_error_descriptor_t *Yap_popErrorContext(void);
|
extern yap_error_descriptor_t *Yap_popErrorContext(bool pass);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -153,9 +153,6 @@ int Yap_peekWithSeek(int sno) {
|
|||||||
int Yap_popChar(int sno) {
|
int Yap_popChar(int sno) {
|
||||||
StreamDesc *s = GLOBAL_Stream + sno;
|
StreamDesc *s = GLOBAL_Stream + sno;
|
||||||
s->buf.on = false;
|
s->buf.on = false;
|
||||||
s->charcount = s->buf.pos;
|
|
||||||
s->linecount = s->buf.line;
|
|
||||||
s->linepos = s->buf.lpos;
|
|
||||||
Yap_DefaultStreamOps(s);
|
Yap_DefaultStreamOps(s);
|
||||||
return s->buf.ch;
|
return s->buf.ch;
|
||||||
}
|
}
|
||||||
@ -174,9 +171,6 @@ int Yap_peekWide(int sno) {
|
|||||||
} else {
|
} else {
|
||||||
s->buf.on = true;
|
s->buf.on = true;
|
||||||
s->buf.ch = ch;
|
s->buf.ch = ch;
|
||||||
s->buf.pos = s->charcount;
|
|
||||||
s->buf.line = s->linecount;
|
|
||||||
s->buf.lpos = s->linepos;
|
|
||||||
s->charcount = pos;
|
s->charcount = pos;
|
||||||
s->linecount = line;
|
s->linecount = line;
|
||||||
s->linepos = lpos;
|
s->linepos = lpos;
|
||||||
@ -205,9 +199,6 @@ int Yap_peekChar(int sno) {
|
|||||||
} else {
|
} else {
|
||||||
s->buf.on = true;
|
s->buf.on = true;
|
||||||
s->buf.ch = ch;
|
s->buf.ch = ch;
|
||||||
s->buf.pos = s->charcount;
|
|
||||||
s->buf.line = s->linecount;
|
|
||||||
s->buf.lpos = s->linepos;
|
|
||||||
s->charcount = pos;
|
s->charcount = pos;
|
||||||
s->linecount = line;
|
s->linecount = line;
|
||||||
s->linepos = lpos;
|
s->linepos = lpos;
|
||||||
|
@ -224,13 +224,11 @@
|
|||||||
|
|
||||||
:- yap_flag(unknown,error).
|
:- yap_flag(unknown,error).
|
||||||
:- style_check(single_var).
|
:- style_check(single_var).
|
||||||
:- start_low_level_trace.
|
|
||||||
:- initialization((
|
:- initialization((
|
||||||
bb_put(logger_filename,'out.dat'),
|
bb_put(logger_filename,'out.dat'),
|
||||||
bb_put(logger_delimiter,';'),
|
bb_put(logger_delimiter,';'),
|
||||||
bb_put(logger_variables,[])
|
bb_put(logger_variables,[])
|
||||||
)).
|
)).
|
||||||
:- stopS_low_level_trace.
|
|
||||||
|
|
||||||
%========================================================================
|
%========================================================================
|
||||||
%= Defines a new variable, possible types are: int, float and time
|
%= Defines a new variable, possible types are: int, float and time
|
||||||
|
@ -8,7 +8,6 @@ set(PL_BOOT_SOURCES
|
|||||||
boot.yap
|
boot.yap
|
||||||
bootlists.yap
|
bootlists.yap
|
||||||
bootutils.yap
|
bootutils.yap
|
||||||
builtins.yap
|
|
||||||
callcount.yap
|
callcount.yap
|
||||||
checker.yap
|
checker.yap
|
||||||
consult.yap
|
consult.yap
|
||||||
@ -27,7 +26,7 @@ set(PL_BOOT_SOURCES
|
|||||||
grammar.yap
|
grammar.yap
|
||||||
ground.yap
|
ground.yap
|
||||||
hacks.yap
|
hacks.yap
|
||||||
imports.yap
|
init.yap
|
||||||
listing.yap
|
listing.yap
|
||||||
load_foreign.yap
|
load_foreign.yap
|
||||||
messages.yap
|
messages.yap
|
||||||
@ -52,7 +51,6 @@ set(PL_BOOT_SOURCES
|
|||||||
swi.yap
|
swi.yap
|
||||||
tabling.yap
|
tabling.yap
|
||||||
threads.yap
|
threads.yap
|
||||||
top.yap
|
|
||||||
udi.yap
|
udi.yap
|
||||||
undefined.yap
|
undefined.yap
|
||||||
utils.yap
|
utils.yap
|
||||||
@ -61,29 +59,39 @@ set(PL_BOOT_SOURCES
|
|||||||
|
|
||||||
add_to_group(PL_BOOT_SOURCES pl_boot_library)
|
add_to_group(PL_BOOT_SOURCES pl_boot_library)
|
||||||
|
|
||||||
|
if (ANDROID)
|
||||||
|
add_custom_target(STARTUP
|
||||||
|
DEPENDS ${PL_BOOT_SOURCES}
|
||||||
|
)
|
||||||
|
file (INSTALL ${PL_BOOT_SOURCES} DESTINATION ${libpl}/pl)
|
||||||
|
elif(CMAKE_CROSSCOMPILING)
|
||||||
|
add_custom_target(STARTUP ALL SOURCES
|
||||||
|
DEPENDS ${PL_BOOT_SOURCES}
|
||||||
|
)
|
||||||
|
else ()
|
||||||
|
add_custom_target(STARTUP ALL
|
||||||
|
DEPENDS ${CMAKE_TOP_BINARY_DIR}/${YAP_STARTUP}
|
||||||
|
)
|
||||||
|
add_custom_command(OUTPUT ${CMAKE_TOP_BINARY_DIR}/${YAP_STARTUP}
|
||||||
|
COMMAND yap-bin -B${CMAKE_SOURCE_DIR}/pl --output-saved-state=${CMAKE_TOP_BINARY_DIR}/${YAP_STARTUP}
|
||||||
|
VERBATIM
|
||||||
|
DEPENDS ${PL_BOOT_SOURCES} yap-bin
|
||||||
|
)
|
||||||
|
|
||||||
|
# install(CODE "execute_process(COMMAND ./yap -B
|
||||||
|
# WORKING_DIRECTORY ${CMAKE_TOP_BINARY_DIR})"
|
||||||
|
# DEPENDS Py4YAP ${PL_BOOT_SOURCES} yap-bin )
|
||||||
|
|
||||||
|
|
||||||
|
install(FILES ${CMAKE_TOP_BINARY_DIR}/${YAP_STARTUP}
|
||||||
|
DESTINATION ${YAP_INSTALL_DLLDIR}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
install(FILES ${PL_BOOT_SOURCES}
|
install(FILES ${PL_BOOT_SOURCES}
|
||||||
DESTINATION ${libpl}/pl
|
DESTINATION ${libpl}/pl
|
||||||
)
|
)
|
||||||
install(FILES ../library/ypp.yap
|
install(FILES ../library/ypp.yap
|
||||||
DESTINATION ${libpl}/library)
|
DESTINATION ${libpl}/library
|
||||||
# )
|
|
||||||
# if (ANDROID OR CMAKE_CROSSCOMPILING)
|
|
||||||
# add_custom_target(STARTUP
|
|
||||||
# )
|
|
||||||
# else()
|
|
||||||
add_custom_target(STARTUP ALL
|
|
||||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/startup.yss)
|
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/startup.yss
|
|
||||||
COMMAND yap-bin -B${CMAKE_CURRENT_SOURCE_DIR} --output-saved-state=${CMAKE_CURRENT_BINARY_DIR}/startup.yss
|
|
||||||
DEPENDS ${PL_BOOT_SOURCES} yap-bin
|
|
||||||
)
|
)
|
||||||
#else ()
|
|
||||||
#add_custom_target(STARTUP ALL
|
|
||||||
# DEPENDS ${CMAKE_TOP_BINARY_DIR}/${YAP_STARTUP}
|
|
||||||
# )
|
|
||||||
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/startup.yss DESTINATION ${dlls} )
|
|
||||||
|
|
||||||
|
|
||||||
#endif()
|
|
||||||
|
@ -513,7 +513,7 @@ path(Path) :-
|
|||||||
'$in_path'(X) :-
|
'$in_path'(X) :-
|
||||||
recorded('$path',Path,_),
|
recorded('$path',Path,_),
|
||||||
atom_codes(Path,S),
|
atom_codes(Path,S),
|
||||||
( S = "" -> X = '.' ;
|
( S = [] -> X = '.' ;
|
||||||
atom_codes(X,S) ).
|
atom_codes(X,S) ).
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
16
pl/boot.yap
16
pl/boot.yap
@ -120,6 +120,7 @@ print_message(L,E) :-
|
|||||||
).
|
).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
'$undefp0'([M|G], _Action) :-
|
'$undefp0'([M|G], _Action) :-
|
||||||
stream_property( loop_stream, file_name(F)),
|
stream_property( loop_stream, file_name(F)),
|
||||||
stream_property( loop_stream, line_number(L)),
|
stream_property( loop_stream, line_number(L)),
|
||||||
@ -165,6 +166,9 @@ print_message(L,E) :-
|
|||||||
% This is the YAP init file
|
% This is the YAP init file
|
||||||
% should be consulted first step after booting
|
% should be consulted first step after booting
|
||||||
|
|
||||||
|
|
||||||
|
:- yap_flag(prolog:unknown, error).
|
||||||
|
|
||||||
:- c_compile('top.yap').
|
:- c_compile('top.yap').
|
||||||
|
|
||||||
% These are pseudo declarations
|
% These are pseudo declarations
|
||||||
@ -200,14 +204,17 @@ print_message(L,E) :-
|
|||||||
|
|
||||||
'$command'(C,VL,Pos,Con) :-
|
'$command'(C,VL,Pos,Con) :-
|
||||||
current_prolog_flag(strict_iso, true), !, /* strict_iso on */
|
current_prolog_flag(strict_iso, true), !, /* strict_iso on */
|
||||||
'$execute_command'(C,VL,Pos,Con,_Source).
|
'$yap_strip_module'(C, EM, EG),
|
||||||
|
'$execute_command'(EM,EG,VL,Pos,Con,_Source).
|
||||||
'$command'(C,VL,Pos,Con) :-
|
'$command'(C,VL,Pos,Con) :-
|
||||||
( (Con = top ; var(C) ; C = [_|_]) ->
|
( (Con = top ; var(C) ; C = [_|_]) ->
|
||||||
'$execute_command'(C,VL,Pos,Con,C), ! ;
|
'$yap_strip_module'(C, EM, EG),
|
||||||
|
'$execute_command'(EG,EM,VL,Pos,Con,C), ! ;
|
||||||
% do term expansion
|
% do term expansion
|
||||||
'$expand_term'(C, EC),
|
'$expand_term'(C, EC),
|
||||||
|
'$yap_strip_module'(EC, EM, EG),
|
||||||
% execute a list of commands
|
% execute a list of commands
|
||||||
'$execute_commands'(EC,VL,Pos,Con,_Source),
|
'$execute_commands'(EG,EM,VL,Pos,Con,_Source),
|
||||||
% succeed only if the *original* was at end of file.
|
% succeed only if the *original* was at end of file.
|
||||||
C == end_of_file
|
C == end_of_file
|
||||||
).
|
).
|
||||||
@ -217,8 +224,6 @@ print_message(L,E) :-
|
|||||||
|
|
||||||
:- '$init_prolog'.
|
:- '$init_prolog'.
|
||||||
|
|
||||||
:- '$all_current_modules'(M), yap_flag(M:unknown, error) ; true.
|
|
||||||
|
|
||||||
:- compile_expressions.
|
:- compile_expressions.
|
||||||
|
|
||||||
|
|
||||||
@ -453,4 +458,3 @@ If this hook predicate succeeds it must instantiate the _Action_ argument to th
|
|||||||
:- ensure_loaded('../pl/pathconf.yap').
|
:- ensure_loaded('../pl/pathconf.yap').
|
||||||
|
|
||||||
:- yap_flag(user:unknown,error).
|
:- yap_flag(user:unknown,error).
|
||||||
|
|
||||||
|
@ -1403,16 +1403,17 @@ Similar to initialization/1, but allows for specifying when
|
|||||||
Do not execute _Goal_ while loading the program, but only when restoring a state (not implemented yet).
|
Do not execute _Goal_ while loading the program, but only when restoring a state (not implemented yet).
|
||||||
|
|
||||||
*/
|
*/
|
||||||
initialization(G0,OPT) :-
|
initialization(G,OPT) :-
|
||||||
expand_goal(G0, G),
|
|
||||||
catch('$initialization'(G, OPT), Error, '$LoopError'( Error, consult ) ),
|
catch('$initialization'(G, OPT), Error, '$LoopError'( Error, consult ) ),
|
||||||
fail.
|
fail.
|
||||||
initialization(_G,_OPT).
|
initialization(_G,_OPT).
|
||||||
|
|
||||||
'$initialization'(G,OPT) :-
|
'$initialization'(G0,OPT) :-
|
||||||
must_be_of_type(callable, G, initialization(G,OPT)),
|
must_be_of_type(callable, G0, initialization(G0,OPT)),
|
||||||
must_be_of_type(oneof([after_load, now, restore]),
|
must_be_of_type(oneof([after_load, now, restore]),
|
||||||
OPT, initialization(G,OPT)),
|
OPT, initialization(G0,OPT)),
|
||||||
|
'$yap_strip_module'(G0,M,G1),
|
||||||
|
'$expand_term'((M:G1), G),
|
||||||
(
|
(
|
||||||
OPT == now
|
OPT == now
|
||||||
->
|
->
|
||||||
@ -1426,7 +1427,7 @@ initialization(_G,_OPT).
|
|||||||
->
|
->
|
||||||
recordz('$call_at_restore', G, _ )
|
recordz('$call_at_restore', G, _ )
|
||||||
).
|
).
|
||||||
:- .
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
@}
|
@}
|
||||||
|
@ -222,8 +222,8 @@ beautify_hidden_goal('$system_catch'(G,Mod,Exc,Handler),prolog) -->
|
|||||||
[catch(Mod:G, Exc, Handler)].
|
[catch(Mod:G, Exc, Handler)].
|
||||||
beautify_hidden_goal('$catch'(G,Exc,Handler),prolog) -->
|
beautify_hidden_goal('$catch'(G,Exc,Handler),prolog) -->
|
||||||
[catch(G, Exc, Handler)].
|
[catch(G, Exc, Handler)].
|
||||||
beautify_hidden_goal('$execute_command'(Query,V,P,Option,Source),prolog) -->
|
beautify_hidden_goal('$execute_command'(Query,M,V,P,Option,Source),prolog) -->
|
||||||
[toplevel_query(Query, V, P, Option, Source)].
|
[toplevel_query(M:Query, V, P, Option, Source)].
|
||||||
beautify_hidden_goal('$process_directive'(Gs,_Mode,_VL),prolog) -->
|
beautify_hidden_goal('$process_directive'(Gs,_Mode,_VL),prolog) -->
|
||||||
[(:- Gs)].
|
[(:- Gs)].
|
||||||
beautify_hidden_goal('$loop'(Stream,Option),prolog) -->
|
beautify_hidden_goal('$loop'(Stream,Option),prolog) -->
|
||||||
|
58
pl/top.yap
58
pl/top.yap
@ -117,7 +117,7 @@ live :- '$live'.
|
|||||||
throw(E).
|
throw(E).
|
||||||
|
|
||||||
|
|
||||||
/** @pred stream_property( _Stream_, _Prop_)
|
/** @pred stream_property( Stream, Prop )
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ current_prolog_flag(break_level, BreakLevel),
|
|||||||
eraseall('$$set'),
|
eraseall('$$set'),
|
||||||
eraseall('$$one'),
|
eraseall('$$one'),
|
||||||
eraseall('$reconsulted'), fail.
|
eraseall('$reconsulted'), fail.
|
||||||
'$erase_sets' :- \+ recorded('$path',_,_), recorda('$path',"",_).
|
'$erase_sets' :- \+ recorded('$path',_,_), recorda('$path',[],_).
|
||||||
'$erase_sets'.
|
'$erase_sets'.
|
||||||
|
|
||||||
'$start_corouts' :-
|
'$start_corouts' :-
|
||||||
@ -176,59 +176,59 @@ current_prolog_flag(break_level, BreakLevel),
|
|||||||
%
|
%
|
||||||
% Hack in case expand_term has created a list of commands.
|
% Hack in case expand_term has created a list of commands.
|
||||||
%
|
%
|
||||||
'$execute_commands'(V,_,_,_,Source) :- var(V), !,
|
'$execute_commands'(V,_,_,_,_,Source) :- var(V), !,
|
||||||
'$do_error'(instantiation_error,meta_call(Source)).
|
'$do_error'(instantiation_error,meta_call(Source)).
|
||||||
'$execute_commands'([],_,_,_,_) :- !.
|
'$execute_commands'([],_,_,_,_,_) :- !.
|
||||||
'$execute_commands'([C|Cs],VL,Pos,Con,Source) :-
|
'$execute_commands'([C|Cs],M,VL,Pos,Con,Source) :-
|
||||||
!,
|
!,
|
||||||
(
|
(
|
||||||
'$system_catch'('$execute_command'(C,VL,Pos,Con,Source),prolog,Error,'$LoopError'(Error, Con)),
|
'$system_catch'('$execute_command'(C,M,VL,Pos,Con,Source),prolog,Error,'$LoopError'(Error, Con)),
|
||||||
fail
|
fail
|
||||||
;
|
;
|
||||||
'$execute_commands'(Cs,VL,Pos,Con,Source)
|
'$execute_commands'(Cs,M,VL,Pos,Con,Source)
|
||||||
).
|
).
|
||||||
'$execute_commands'(C,VL,Pos,Con,Source) :-
|
'$execute_commands'(C,M,VL,Pos,Con,Source) :-
|
||||||
'$execute_command'(C,VL,Pos,Con,Source).
|
'$execute_command'(C,M,VL,Pos,Con,Source).
|
||||||
|
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
|
|
||||||
'$execute_command'(C,_,_,top,Source) :-
|
'$execute_command'(C,_,_,_,_,Source) :-
|
||||||
var(C),
|
var(C),
|
||||||
!,
|
!,
|
||||||
'$do_error'(instantiation_error,meta_call(Source)).
|
'$do_error'(instantiation_error,meta_call(Source)).
|
||||||
'$execute_command'(C,_,_,top,Source) :-
|
'$execute_command'(C,_,_,_,_top,Source) :-
|
||||||
number(C),
|
number(C),
|
||||||
!,
|
!,
|
||||||
'$do_error'(type_error(callable,C),meta_call(Source)).
|
'$do_error'(type_error(callable,C),meta_call(Source)).
|
||||||
'$execute_command'(R,_,_,top,Source) :-
|
'$execute_command'(R,_,_,_,_top,Source) :-
|
||||||
db_reference(R),
|
db_reference(R),
|
||||||
!,
|
!,
|
||||||
'$do_error'(type_error(callable,R),meta_call(Source)).
|
'$do_error'(type_error(callable,R),meta_call(Source)).
|
||||||
'$execute_command'(end_of_file,_,_,_,_) :- !.
|
'$execute_command'(end_of_file,_,_,_,_,_) :- !.
|
||||||
'$execute_command'(Command,_,_,_,_) :-
|
'$execute_command'(Command,_,_,_,_,_) :-
|
||||||
'__NB_getval__'('$if_skip_mode', skip, fail),
|
'__NB_getval__'('$if_skip_mode', skip, fail),
|
||||||
\+ '$if_directive'(Command),
|
\+ '$if_directive'(Command),
|
||||||
!.
|
!.
|
||||||
'$execute_command'((:-G),VL,Pos,Option,_) :-
|
'$execute_command'((:-G),M,VL,Pos,Option,_) :-
|
||||||
Option \= top,
|
Option \= top,
|
||||||
!, % allow user expansion
|
!, % allow user expansion
|
||||||
'$expand_term'((:- G), O),
|
'$expand_term'((:- M:G), O),
|
||||||
|
'$yap_strip_module'(O, NM, NO),
|
||||||
(
|
(
|
||||||
O = (:- G1)
|
NO = (:- G1)
|
||||||
->
|
->
|
||||||
'$yap_strip_module'(G1, M, NG),
|
'$process_directive'(G1, Option, NM, VL, Pos)
|
||||||
'$process_directive'(NG, Option, M, VL, Pos)
|
|
||||||
;
|
;
|
||||||
'$execute_commands'(G1,VL,Pos,Option,O)
|
'$execute_commands'(G1,NM,VL,Pos,Option,O)
|
||||||
).
|
).
|
||||||
'$execute_command'((?-G), VL, Pos, Option, Source) :-
|
'$execute_command'((?-G), M, VL, Pos, Option, Source) :-
|
||||||
Option \= top,
|
Option \= top,
|
||||||
!,
|
!,
|
||||||
'$execute_command'(G, VL, Pos, top, Source).
|
'$execute_command'(G, M, VL, Pos, top, Source).
|
||||||
'$execute_command'(G, VL, Pos, Option, Source) :-
|
'$execute_command'(G, M, VL, Pos, Option, Source) :-
|
||||||
'$continue_with_command'(Option, VL, Pos, G, Source).
|
'$continue_with_command'(Option, VL, Pos, M:G, Source).
|
||||||
|
|
||||||
'$expand_term'(T,O) :-
|
'$expand_term'(T,O) :-
|
||||||
catch( '$expand_term0'(T,O), _,( '$disable_debugging', fail) ),
|
catch( '$expand_term0'(T,O), _,( '$disable_debugging', fail) ),
|
||||||
@ -241,9 +241,7 @@ current_prolog_flag(break_level, BreakLevel),
|
|||||||
'$expand_term0'(T,T).
|
'$expand_term0'(T,T).
|
||||||
|
|
||||||
'$expand_term1'(T,O) :-
|
'$expand_term1'(T,O) :-
|
||||||
'$yap_strip_module'(T1, M, G2),
|
'$expand_meta_call'(T, [], O),
|
||||||
'$is_metapredicate'(G2,M),
|
|
||||||
'$expand_meta_call'(M:G2, [], O),
|
|
||||||
!.
|
!.
|
||||||
'$expand_term1'(O,O).
|
'$expand_term1'(O,O).
|
||||||
|
|
||||||
@ -680,8 +678,10 @@ write_query_answer( Bindings ) :-
|
|||||||
|
|
||||||
'$call'(M:_,_,G0,_) :- var(M), !,
|
'$call'(M:_,_,G0,_) :- var(M), !,
|
||||||
'$do_error'(instantiation_error,call(G0)).
|
'$do_error'(instantiation_error,call(G0)).
|
||||||
'$call'(M:G,CP,G0,_) :- !,
|
'$call'(M:G,CP,G0,_M0) :- !,
|
||||||
'$call'(G,CP,G0,M).
|
'$expand_meta_call'(M:G, [], NG),
|
||||||
|
'$yap_strip_module'(NG,NM,NC),
|
||||||
|
'$call'(NC,CP,G0,NM).
|
||||||
'$call'((X,Y),CP,G0,M) :- !,
|
'$call'((X,Y),CP,G0,M) :- !,
|
||||||
'$call'(X,CP,G0,M),
|
'$call'(X,CP,G0,M),
|
||||||
'$call'(Y,CP,G0,M).
|
'$call'(Y,CP,G0,M).
|
||||||
|
Reference in New Issue
Block a user