fix
This commit is contained in:
parent
4c25aa21c5
commit
fdf7bb516f
@ -930,6 +930,8 @@ static void undef_goal(USES_REGS1) {
|
|||||||
if (UndefCode == NULL || UndefCode->OpcodeOfPred == UNDEF_OPCODE) {
|
if (UndefCode == NULL || UndefCode->OpcodeOfPred == UNDEF_OPCODE) {
|
||||||
fprintf(stderr,"call to undefined Predicates %s ->", IndicatorOfPred(pe));
|
fprintf(stderr,"call to undefined Predicates %s ->", IndicatorOfPred(pe));
|
||||||
Yap_DebugPlWriteln(ARG1);
|
Yap_DebugPlWriteln(ARG1);
|
||||||
|
fputc(':', stderr);
|
||||||
|
Yap_DebugPlWriteln(ARG2);
|
||||||
fprintf(stderr," error handler not available, failing\n");
|
fprintf(stderr," error handler not available, failing\n");
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
UNLOCKPE(19, PP);
|
UNLOCKPE(19, PP);
|
||||||
|
@ -2136,7 +2136,7 @@ X_API int YAP_InitConsult(int mode, const char *fname, char *full, int *osnop) {
|
|||||||
GLOBAL_Stream[sno].name = Yap_LookupAtom(fl);
|
GLOBAL_Stream[sno].name = Yap_LookupAtom(fl);
|
||||||
GLOBAL_Stream[sno].user_name = MkAtomTerm(Yap_LookupAtom(fname));
|
GLOBAL_Stream[sno].user_name = MkAtomTerm(Yap_LookupAtom(fname));
|
||||||
GLOBAL_Stream[sno].encoding = LOCAL_encoding;
|
GLOBAL_Stream[sno].encoding = LOCAL_encoding;
|
||||||
|
pop_text_stack(lvl);
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
return sno;
|
return sno;
|
||||||
@ -2191,10 +2191,10 @@ X_API Term YAP_ReadFromStream(int sno) {
|
|||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API Term YAP_ReadClauseFromStream(int sno) {
|
X_API Term YAP_ReadClauseFromStream(int sno, Term vs) {
|
||||||
|
|
||||||
BACKUP_MACHINE_REGS();
|
BACKUP_MACHINE_REGS();
|
||||||
Term t = Yap_read_term(sno, TermNil, true);
|
Term t = Yap_read_term(sno, t = MkPairTerm(Yap_MkApplTerm(Yap_MkFunctor(AtomVariableNames,1),1,&vs), TermNil), true);
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
26
C/scanner.c
26
C/scanner.c
@ -1247,16 +1247,16 @@ const char *Yap_tokText(void *tokptre) {
|
|||||||
return "<QQ>";
|
return "<QQ>";
|
||||||
case Number_tok:
|
case Number_tok:
|
||||||
if (IsIntegerTerm(info)) {
|
if (IsIntegerTerm(info)) {
|
||||||
char *s = Malloc(36);
|
char *s = malloc(36);
|
||||||
snprintf(s, 35, Int_FORMAT, IntegerOfTerm(info));
|
snprintf(s, 35, Int_FORMAT, IntegerOfTerm(info));
|
||||||
return s;
|
return s;
|
||||||
} else if (IsFloatTerm(info)) {
|
} else if (IsFloatTerm(info)) {
|
||||||
char *s = Malloc(64);
|
char *s = malloc(64);
|
||||||
snprintf(s, 63, "%6g", FloatOfTerm(info));
|
snprintf(s, 63, "%6g", FloatOfTerm(info));
|
||||||
return s;
|
return s;
|
||||||
} else {
|
} else {
|
||||||
size_t len = Yap_gmp_to_size(info, 10);
|
size_t len = Yap_gmp_to_size(info, 10);
|
||||||
char *s = Malloc(len + 2);
|
char *s = malloc(len + 2);
|
||||||
return Yap_gmp_to_string(info, s, len + 1, 10);
|
return Yap_gmp_to_string(info, s, len + 1, 10);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1413,7 +1413,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
int32_t och = ch;
|
int32_t och = ch;
|
||||||
ch = getchr(st);
|
ch = getchr(st);
|
||||||
size_t sz = 512;
|
size_t sz = 512;
|
||||||
TokImage = Malloc(sz PASS_REGS);
|
TokImage = malloc(sz PASS_REGS);
|
||||||
scan_name:
|
scan_name:
|
||||||
charp = (unsigned char *)TokImage;
|
charp = (unsigned char *)TokImage;
|
||||||
isvar = (chtype(och) != LC);
|
isvar = (chtype(och) != LC);
|
||||||
@ -1443,7 +1443,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
Atom ae;
|
Atom ae;
|
||||||
/* don't do this in iso */
|
/* don't do this in iso */
|
||||||
ae = Yap_ULookupAtom(TokImage);
|
ae = Yap_ULookupAtom(TokImage);
|
||||||
Free(TokImage);
|
free(TokImage);
|
||||||
if (ae == NIL) {
|
if (ae == NIL) {
|
||||||
return CodeSpaceError(t, p, l);
|
return CodeSpaceError(t, p, l);
|
||||||
}
|
}
|
||||||
@ -1453,7 +1453,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
t->Tok = Ord(kind = Name_tok);
|
t->Tok = Ord(kind = Name_tok);
|
||||||
} else {
|
} else {
|
||||||
VarEntry *ve = Yap_LookupVar((const char *)TokImage);
|
VarEntry *ve = Yap_LookupVar((const char *)TokImage);
|
||||||
Free(TokImage);
|
free(TokImage);
|
||||||
t->TokInfo = Unsigned(ve);
|
t->TokInfo = Unsigned(ve);
|
||||||
if (cur_qq) {
|
if (cur_qq) {
|
||||||
ve->refs++;
|
ve->refs++;
|
||||||
@ -1500,7 +1500,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
case 'e':
|
case 'e':
|
||||||
case 'E':
|
case 'E':
|
||||||
och = cherr;
|
och = cherr;
|
||||||
TokImage = Malloc(1024 PASS_REGS);
|
TokImage = malloc(1024 PASS_REGS);
|
||||||
goto scan_name;
|
goto scan_name;
|
||||||
break;
|
break;
|
||||||
case '=':
|
case '=':
|
||||||
@ -1569,7 +1569,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
case QT:
|
case QT:
|
||||||
case DC:
|
case DC:
|
||||||
quoted_string:
|
quoted_string:
|
||||||
TokImage = Malloc(1048);
|
TokImage = malloc(1048);
|
||||||
charp = TokImage;
|
charp = TokImage;
|
||||||
quote = ch;
|
quote = ch;
|
||||||
len = 0;
|
len = 0;
|
||||||
@ -1633,7 +1633,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
if (!(t->TokInfo)) {
|
if (!(t->TokInfo)) {
|
||||||
return CodeSpaceError(t, p, l);
|
return CodeSpaceError(t, p, l);
|
||||||
}
|
}
|
||||||
Free(TokImage);
|
free(TokImage);
|
||||||
t->Tok = Ord(kind = Name_tok);
|
t->Tok = Ord(kind = Name_tok);
|
||||||
if (ch == '(')
|
if (ch == '(')
|
||||||
solo_flag = false;
|
solo_flag = false;
|
||||||
@ -1746,7 +1746,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
} else {
|
} else {
|
||||||
Atom ae;
|
Atom ae;
|
||||||
sz = 1024;
|
sz = 1024;
|
||||||
TokImage = Malloc(sz);
|
TokImage = malloc(sz);
|
||||||
charp = TokImage;
|
charp = TokImage;
|
||||||
add_ch_to_buff(och);
|
add_ch_to_buff(och);
|
||||||
for (; chtype(ch) == SY; ch = getchr(st)) {
|
for (; chtype(ch) == SY; ch = getchr(st)) {
|
||||||
@ -1767,7 +1767,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
if (t->TokInfo == (CELL)NIL) {
|
if (t->TokInfo == (CELL)NIL) {
|
||||||
return CodeSpaceError(t, p, l);
|
return CodeSpaceError(t, p, l);
|
||||||
}
|
}
|
||||||
Free(TokImage);
|
free(TokImage);
|
||||||
t->Tok = Ord(kind = Name_tok);
|
t->Tok = Ord(kind = Name_tok);
|
||||||
if (ch == '(')
|
if (ch == '(')
|
||||||
solo_flag = false;
|
solo_flag = false;
|
||||||
@ -1890,7 +1890,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
t->Tok = Ord(kind = QuasiQuotes_tok);
|
t->Tok = Ord(kind = QuasiQuotes_tok);
|
||||||
ch = getchr(st);
|
ch = getchr(st);
|
||||||
sz = 1024;
|
sz = 1024;
|
||||||
TokImage = Malloc(sz);
|
TokImage = malloc(sz);
|
||||||
if (!TokImage) {
|
if (!TokImage) {
|
||||||
LOCAL_ErrorMessage =
|
LOCAL_ErrorMessage =
|
||||||
"not enough heap space to read in a quasi quoted atom";
|
"not enough heap space to read in a quasi quoted atom";
|
||||||
@ -1914,7 +1914,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *st, bool store_comments,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (chtype(ch) == EF) {
|
} else if (chtype(ch) == EF) {
|
||||||
Free(TokImage);
|
free(TokImage);
|
||||||
mark_eof(st);
|
mark_eof(st);
|
||||||
t->Tok = Ord(kind = eot_tok);
|
t->Tok = Ord(kind = eot_tok);
|
||||||
t->TokInfo = TermOutOfHeapError;
|
t->TokInfo = TermOutOfHeapError;
|
||||||
|
24
C/yap-args.c
24
C/yap-args.c
@ -159,15 +159,14 @@ const char *Yap_BINDIR, *Yap_ROOTDIR, *Yap_SHAREDIR, *Yap_LIBDIR, *Yap_DLLDIR,
|
|||||||
*Yap_PLDIR, *Yap_BOOTPLDIR, *Yap_BOOTSTRAPPLDIR, *Yap_COMMONSDIR,
|
*Yap_PLDIR, *Yap_BOOTPLDIR, *Yap_BOOTSTRAPPLDIR, *Yap_COMMONSDIR,
|
||||||
*Yap_STARTUP, *Yap_BOOTFILE;
|
*Yap_STARTUP, *Yap_BOOTFILE;
|
||||||
|
|
||||||
static int yap_lineno = 0;
|
|
||||||
|
|
||||||
/* do initial boot by consulting the file boot.yap */
|
/* do initial boot by consulting the file boot.yap */
|
||||||
static void consult(const char *b_file USES_REGS) {
|
static void consult(const char *b_file USES_REGS) {
|
||||||
Term t;
|
Term t;
|
||||||
int boot_stream, osno;
|
int boot_stream, osno;
|
||||||
Functor functor_query = Yap_MkFunctor(Yap_LookupAtom("?-"), 1);
|
Functor functor_query = Yap_MkFunctor(Yap_LookupAtom("?-"), 1);
|
||||||
Functor functor_command1 = Yap_MkFunctor(Yap_LookupAtom(":-"), 1);
|
Functor functor_command1 = Yap_MkFunctor(Yap_LookupAtom(":-"), 1);
|
||||||
Functor functor_compile2 = Yap_MkFunctor(Yap_LookupAtom("c_compile"), 2);
|
Functor functor_compile2 = Yap_MkFunctor(Yap_LookupAtom("c_compile"), 1);
|
||||||
|
Functor functor_bc = Yap_MkFunctor(Yap_LookupAtom("$bc"), 2);
|
||||||
|
|
||||||
/* consult boot.pl */
|
/* consult boot.pl */
|
||||||
char *full = malloc(YAP_FILENAME_MAX + 1);
|
char *full = malloc(YAP_FILENAME_MAX + 1);
|
||||||
@ -175,7 +174,7 @@ static void consult(const char *b_file USES_REGS) {
|
|||||||
/* the consult mode does not matter here, really */
|
/* the consult mode does not matter here, really */
|
||||||
boot_stream = YAP_InitConsult(YAP_BOOT_MODE, b_file, full, &osno);
|
boot_stream = YAP_InitConsult(YAP_BOOT_MODE, b_file, full, &osno);
|
||||||
if (boot_stream < 0) {
|
if (boot_stream < 0) {
|
||||||
fprintf(stderr, "[ FATAL ERROR: could not open boot_stream %s ]\n", b_file);
|
fprintf(stderr, "[ FATAL ERROR: could not open stream %s ]\n", b_file);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,20 +182,25 @@ do {
|
|||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Reset(YAP_FULL_RESET, false);
|
YAP_Reset(YAP_FULL_RESET, false);
|
||||||
Yap_StartSlots();
|
Yap_StartSlots();
|
||||||
t = YAP_ReadClauseFromStream(boot_stream);
|
Term vs = YAP_MkVarTerm();
|
||||||
|
t = YAP_ReadClauseFromStream(boot_stream, vs);
|
||||||
//Yap_GetNèwSlot(t);
|
//Yap_GetNèwSlot(t);
|
||||||
if (t == 0) {
|
if (t == 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"[ SYNTAX ERROR: while parsing boot_stream %s at line %d ]\n",
|
"[ SYNTAX ERROR: while parsing stream %s at line %ld ]\n",
|
||||||
b_file, yap_lineno);
|
b_file, GLOBAL_Stream[boot_stream].linecount);
|
||||||
} else if (IsVarTerm(t) || t == TermNil) {
|
} else if (IsVarTerm(t) || t == TermNil) {
|
||||||
fprintf(stderr, "[ line %d: term cannot be compiled ]", yap_lineno);
|
fprintf(stderr, "[ line %d: term cannot be compiled ]", GLOBAL_Stream[boot_stream].linecount);
|
||||||
} else if (IsApplTerm(t) && (FunctorOfTerm(t) == functor_query ||
|
} else if (IsApplTerm(t) && (FunctorOfTerm(t) == functor_query ||
|
||||||
FunctorOfTerm(t) == functor_command1)) {
|
FunctorOfTerm(t) == functor_command1)) {
|
||||||
t = ArgOfTerm(1, t);
|
t = ArgOfTerm(1, t);
|
||||||
if (IsApplTerm(t) && FunctorOfTerm(t) == functor_compile2) {
|
if (IsApplTerm(t) && FunctorOfTerm(t) == functor_compile2) {
|
||||||
consult( RepAtom(AtomOfTerm(ArgOfTerm(1,t)))->StrOfAE);
|
consult( RepAtom(AtomOfTerm(ArgOfTerm(1,t)))->StrOfAE);
|
||||||
} else {
|
} else {
|
||||||
|
YAP_Term ts[2];
|
||||||
|
ts[0] = t;
|
||||||
|
ts[1] = vs;
|
||||||
|
t = YAP_MkApplTerm(functor_bc, 2, ts);
|
||||||
YAP_RunGoalOnce(t);
|
YAP_RunGoalOnce(t);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -227,7 +231,7 @@ do {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief A simple language for detecting where YAP stuff cn be found
|
/** @brief A simple language for detecting where YAP stuff can be found
|
||||||
*
|
*
|
||||||
* @long The options are
|
* @long The options are
|
||||||
* `[V]` use a configuration variable YAP_XXXDIR, prefixed by "DESTDIR"
|
* `[V]` use a configuration variable YAP_XXXDIR, prefixed by "DESTDIR"
|
||||||
@ -1194,7 +1198,7 @@ return end_init(yap_init, YAP_QLY);
|
|||||||
start_modules();
|
start_modules();
|
||||||
consult(Yap_BOOTFILE PASS_REGS);
|
consult(Yap_BOOTFILE PASS_REGS);
|
||||||
setAtomicGlobalPrologFlag(RESOURCE_DATABASE_FLAG,
|
setAtomicGlobalPrologFlag(RESOURCE_DATABASE_FLAG,
|
||||||
MkAtomTerm(Yap_BOOTFILE));
|
MkAtomTerm(Yap_LookupAtom(Yap_BOOTFILE)));
|
||||||
setBooleanGlobalPrologFlag(SAVED_PROGRAM_FLAG, false);
|
setBooleanGlobalPrologFlag(SAVED_PROGRAM_FLAG, false);
|
||||||
return end_init(yap_init, YAP_BOOT_PL);
|
return end_init(yap_init, YAP_BOOT_PL);
|
||||||
}
|
}
|
||||||
|
2
H/ATOMS
2
H/ATOMS
@ -222,7 +222,7 @@ A Least N "least"
|
|||||||
A Length F "length"
|
A Length F "length"
|
||||||
A List N "list"
|
A List N "list"
|
||||||
A Line N "line"
|
A Line N "line"
|
||||||
A Live F "$live"
|
A Live F "live"
|
||||||
A LoadAnswers N "load_answers"
|
A LoadAnswers N "load_answers"
|
||||||
A Local N "local"
|
A Local N "local"
|
||||||
A LocalSp N "local_sp"
|
A LocalSp N "local_sp"
|
||||||
|
@ -217,7 +217,7 @@
|
|||||||
AtomLength = Yap_FullLookupAtom("length"); TermLength = MkAtomTerm(AtomLength);
|
AtomLength = Yap_FullLookupAtom("length"); TermLength = MkAtomTerm(AtomLength);
|
||||||
AtomList = Yap_LookupAtom("list"); TermList = MkAtomTerm(AtomList);
|
AtomList = Yap_LookupAtom("list"); TermList = MkAtomTerm(AtomList);
|
||||||
AtomLine = Yap_LookupAtom("line"); TermLine = MkAtomTerm(AtomLine);
|
AtomLine = Yap_LookupAtom("line"); TermLine = MkAtomTerm(AtomLine);
|
||||||
AtomLive = Yap_FullLookupAtom("$live"); TermLive = MkAtomTerm(AtomLive);
|
AtomLive = Yap_FullLookupAtom("live"); TermLive = MkAtomTerm(AtomLive);
|
||||||
AtomLoadAnswers = Yap_LookupAtom("load_answers"); TermLoadAnswers = MkAtomTerm(AtomLoadAnswers);
|
AtomLoadAnswers = Yap_LookupAtom("load_answers"); TermLoadAnswers = MkAtomTerm(AtomLoadAnswers);
|
||||||
AtomLocal = Yap_LookupAtom("local"); TermLocal = MkAtomTerm(AtomLocal);
|
AtomLocal = Yap_LookupAtom("local"); TermLocal = MkAtomTerm(AtomLocal);
|
||||||
AtomLocalSp = Yap_LookupAtom("local_sp"); TermLocalSp = MkAtomTerm(AtomLocalSp);
|
AtomLocalSp = Yap_LookupAtom("local_sp"); TermLocalSp = MkAtomTerm(AtomLocalSp);
|
||||||
@ -226,7 +226,6 @@
|
|||||||
AtomMaximum = Yap_LookupAtom("maximum"); TermMaximum = MkAtomTerm(AtomMaximum);
|
AtomMaximum = Yap_LookupAtom("maximum"); TermMaximum = MkAtomTerm(AtomMaximum);
|
||||||
AtomMaxArity = Yap_LookupAtom("max_arity"); TermMaxArity = MkAtomTerm(AtomMaxArity);
|
AtomMaxArity = Yap_LookupAtom("max_arity"); TermMaxArity = MkAtomTerm(AtomMaxArity);
|
||||||
AtomMaxFiles = Yap_LookupAtom("max_files"); TermMaxFiles = MkAtomTerm(AtomMaxFiles);
|
AtomMaxFiles = Yap_LookupAtom("max_files"); TermMaxFiles = MkAtomTerm(AtomMaxFiles);
|
||||||
|
|
||||||
AtomMegaClause = Yap_FullLookupAtom("$mega_clause"); TermMegaClause = MkAtomTerm(AtomMegaClause);
|
AtomMegaClause = Yap_FullLookupAtom("$mega_clause"); TermMegaClause = MkAtomTerm(AtomMegaClause);
|
||||||
AtomMetaCall = Yap_FullLookupAtom("$call"); TermMetaCall = MkAtomTerm(AtomMetaCall);
|
AtomMetaCall = Yap_FullLookupAtom("$call"); TermMetaCall = MkAtomTerm(AtomMetaCall);
|
||||||
AtomMfClause = Yap_FullLookupAtom("$mf_clause"); TermMfClause = MkAtomTerm(AtomMfClause);
|
AtomMfClause = Yap_FullLookupAtom("$mf_clause"); TermMfClause = MkAtomTerm(AtomMfClause);
|
||||||
|
@ -58,8 +58,8 @@
|
|||||||
#include <ieeefp.h>
|
#include <ieeefp.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void do_top_goal(YAP_Term Goal);
|
static bool do_top_goal(YAP_Term Goal);
|
||||||
static void exec_top_level(int BootMode, YAP_init_args *iap);
|
static bool exec_top_level(int BootMode, YAP_init_args *iap);
|
||||||
|
|
||||||
#ifdef lint
|
#ifdef lint
|
||||||
/* VARARGS1 */
|
/* VARARGS1 */
|
||||||
@ -69,7 +69,7 @@ static void exec_top_level(int BootMode, YAP_init_args *iap);
|
|||||||
long _stksize = 32000;
|
long _stksize = 32000;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void do_top_goal(YAP_Term Goal) { YAP_RunGoalOnce(Goal); }
|
static bool do_top_goal(YAP_Term Goal) { return YAP_RunGoalOnce(Goal); }
|
||||||
|
|
||||||
static int init_standard_system(int argc, char *argv[], YAP_init_args *iap) {
|
static int init_standard_system(int argc, char *argv[], YAP_init_args *iap) {
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ static int init_standard_system(int argc, char *argv[], YAP_init_args *iap) {
|
|||||||
return BootMode;
|
return BootMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void exec_top_level(int BootMode, YAP_init_args *iap) {
|
static bool exec_top_level(int BootMode, YAP_init_args *iap) {
|
||||||
YAP_Term atomfalse;
|
YAP_Term atomfalse;
|
||||||
YAP_Atom livegoal;
|
YAP_Atom livegoal;
|
||||||
|
|
||||||
@ -94,19 +94,22 @@ static void exec_top_level(int BootMode, YAP_init_args *iap) {
|
|||||||
/* continue executing from the frozen stacks */
|
/* continue executing from the frozen stacks */
|
||||||
YAP_ContinueGoal();
|
YAP_ContinueGoal();
|
||||||
}
|
}
|
||||||
livegoal = YAP_FullLookupAtom("$live");
|
livegoal = YAP_FullLookupAtom("live");
|
||||||
/* the top-level is now ready */
|
/* the top-level is now ready */
|
||||||
|
|
||||||
/* read it before case someone, that is, Ashwin, hides
|
/* read it before case someone, that is, Ashwin, hides
|
||||||
the atom false away ;-).
|
the atom false away ;-).
|
||||||
*/
|
*/
|
||||||
atomfalse = YAP_MkAtomTerm(YAP_FullLookupAtom("$false"));
|
atomfalse = YAP_MkAtomTerm(YAP_FullLookupAtom("false"));
|
||||||
while (YAP_GetValue(livegoal) != atomfalse) {
|
while (YAP_GetValue(livegoal) != atomfalse) {
|
||||||
YAP_Reset(YAP_FULL_RESET, false);
|
YAP_Reset(YAP_FULL_RESET, false);
|
||||||
do_top_goal(YAP_MkAtomTerm(livegoal));
|
if (!do_top_goal(YAP_MkAtomTerm(livegoal))) {
|
||||||
livegoal = YAP_FullLookupAtom("$live");
|
return false;
|
||||||
|
};
|
||||||
|
livegoal = YAP_FullLookupAtom("live");
|
||||||
}
|
}
|
||||||
YAP_Exit(EXIT_SUCCESS);
|
return true;
|
||||||
|
//YAP_Exit(EXIT_SUCCESS);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +147,7 @@ int main(int argc, char **argv)
|
|||||||
YAP_Reset(YAP_FULL_RESET, false);
|
YAP_Reset(YAP_FULL_RESET, false);
|
||||||
/* End preprocessor code */
|
/* End preprocessor code */
|
||||||
|
|
||||||
exec_top_level(BootMode, &init_args);
|
bool rc = exec_top_level(BootMode, &init_args);
|
||||||
|
|
||||||
return (0);
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -400,7 +400,7 @@ extern X_API YAP_Term YAP_ReadFromStream(int s);
|
|||||||
|
|
||||||
/// read a Prolog clause from a Prolog opened stream $s$. Similar to
|
/// read a Prolog clause from a Prolog opened stream $s$. Similar to
|
||||||
/// YAP_ReadFromStream() but takes /// default options from read_clause/3.
|
/// YAP_ReadFromStream() but takes /// default options from read_clause/3.
|
||||||
extern X_API YAP_Term YAP_ReadClauseFromStream(int s);
|
extern X_API YAP_Term YAP_ReadClauseFromStream(int s, YAP_Term varNames);
|
||||||
|
|
||||||
extern X_API void YAP_Write(YAP_Term t, FILE *s, int);
|
extern X_API void YAP_Write(YAP_Term t, FILE *s, int);
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ INLINE_ONLY inline EXTERN Int CharOfAtom(Atom at) {
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
int peekWideWithGetwc(int sno){
|
int Yap_peekWideWithGetwc(int sno){
|
||||||
StreamDesc *s;
|
StreamDesc *s;
|
||||||
s = GLOBAL_Stream + sno;
|
s = GLOBAL_Stream + sno;
|
||||||
int ch = getwc(s->file);
|
int ch = getwc(s->file);
|
||||||
@ -102,7 +102,7 @@ int peekWideWithGetwc(int sno){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Yap_peekWithGetw(int sno) {
|
int Yap_peekWithGetc(int sno) {
|
||||||
StreamDesc *s;
|
StreamDesc *s;
|
||||||
s = GLOBAL_Stream + sno;
|
s = GLOBAL_Stream + sno;
|
||||||
int ch = getc(s->file);
|
int ch = getc(s->file);
|
||||||
@ -114,7 +114,7 @@ int Yap_peekWithGetw(int sno) {
|
|||||||
int Yap_peekWideWithSeek(int sno) {
|
int Yap_peekWideWithSeek(int sno) {
|
||||||
StreamDesc *s;
|
StreamDesc *s;
|
||||||
s = GLOBAL_Stream + sno;
|
s = GLOBAL_Stream + sno;
|
||||||
Int pos = s->charcount;
|
Int pos = IntegerOfTerm(Yap_StreamPosition(sno));
|
||||||
Int line = s->linecount;
|
Int line = s->linecount;
|
||||||
Int lpos = s->linepos;
|
Int lpos = s->linepos;
|
||||||
int ch = s->stream_wgetc(sno);
|
int ch = s->stream_wgetc(sno);
|
||||||
@ -135,7 +135,7 @@ int Yap_peekWideWithSeek(int sno) {
|
|||||||
int Yap_peekWithSeek(int sno) {
|
int Yap_peekWithSeek(int sno) {
|
||||||
StreamDesc *s;
|
StreamDesc *s;
|
||||||
s = GLOBAL_Stream + sno;
|
s = GLOBAL_Stream + sno;
|
||||||
Int pos = s->charcount;
|
Int pos = IntegerOfTerm(Yap_StreamPosition(sno));
|
||||||
Int line = s->linecount;
|
Int line = s->linecount;
|
||||||
Int lpos = s->linepos;
|
Int lpos = s->linepos;
|
||||||
int ch = s->stream_getc(sno);
|
int ch = s->stream_getc(sno);
|
||||||
|
@ -352,7 +352,11 @@ void Yap_DefaultStreamOps(StreamDesc *st) {
|
|||||||
st->stream_getc = Yap_popChar;
|
st->stream_getc = Yap_popChar;
|
||||||
st->stream_wgetc = Yap_popChar;
|
st->stream_wgetc = Yap_popChar;
|
||||||
}
|
}
|
||||||
if (st->status & Seekable_Stream_f ) {
|
if (st->file) {
|
||||||
|
st->stream_peek = Yap_peekWithGetc;
|
||||||
|
st->stream_wpeek = Yap_peekWideWithGetwc;
|
||||||
|
|
||||||
|
} else if (st->status & Seekable_Stream_f ) {
|
||||||
st->stream_peek = Yap_peekWithSeek;
|
st->stream_peek = Yap_peekWithSeek;
|
||||||
st->stream_wpeek = Yap_peekWideWithSeek;
|
st->stream_wpeek = Yap_peekWideWithSeek;
|
||||||
} else {
|
} else {
|
||||||
|
56
os/iopreds.h
56
os/iopreds.h
@ -153,9 +153,9 @@ extern void Yap_InitWriteTPreds(void);
|
|||||||
extern void Yap_InitReadTPreds(void);
|
extern void Yap_InitReadTPreds(void);
|
||||||
extern void Yap_socketStream(StreamDesc *s);
|
extern void Yap_socketStream(StreamDesc *s);
|
||||||
extern void Yap_ReadlineFlush(int sno);
|
extern void Yap_ReadlineFlush(int sno);
|
||||||
int Yap_ReadlinePeekChar(int sno);
|
extern int Yap_ReadlinePeekChar(int sno);
|
||||||
int Yap_ReadlineForSIGINT(void);
|
extern int Yap_ReadlineForSIGINT(void);
|
||||||
bool Yap_DoPrompt(StreamDesc *s);
|
extern bool Yap_DoPrompt(StreamDesc *s);
|
||||||
|
|
||||||
extern int Yap_peek(int sno);
|
extern int Yap_peek(int sno);
|
||||||
extern int Yap_MemPeekc(int sno);
|
extern int Yap_MemPeekc(int sno);
|
||||||
@ -169,42 +169,42 @@ extern int Yap_peekWide(int sno);
|
|||||||
extern int Yap_peekChar(int sno);
|
extern int Yap_peekChar(int sno);
|
||||||
|
|
||||||
|
|
||||||
Term Yap_syntax_error(TokEntry *tokptr, int sno);
|
extern Term Yap_syntax_error(TokEntry *tokptr, int sno);
|
||||||
|
|
||||||
int console_post_process_read_char(int, StreamDesc *);
|
extern int console_post_process_read_char(int, StreamDesc *);
|
||||||
int console_post_process_eof(StreamDesc *);
|
extern int console_post_process_eof(StreamDesc *);
|
||||||
int post_process_read_wchar(int, size_t, StreamDesc *);
|
extern int post_process_read_wchar(int, size_t, StreamDesc *);
|
||||||
int post_process_weof(StreamDesc *);
|
extern int post_process_weof(StreamDesc *);
|
||||||
|
|
||||||
bool is_same_tty(FILE *f1, FILE *f2);
|
extern bool is_same_tty(FILE *f1, FILE *f2);
|
||||||
|
|
||||||
int ISOWGetc(int sno);
|
extern int ISOWGetc(int sno);
|
||||||
int GetUTF8(int sno);
|
extern int GetUTF8(int sno);
|
||||||
Term read_line(int sno);
|
extern Term read_line(int sno);
|
||||||
int PlGets(int sno, UInt size, char *buf);
|
extern int PlGets(int sno, UInt size, char *buf);
|
||||||
GetsFunc PlGetsFunc(void);
|
extern GetsFunc PlGetsFunc(void);
|
||||||
int PlGetc(int sno);
|
extern int PlGetc(int sno);
|
||||||
int FilePutc(int sno, int c);
|
extern int FilePutc(int sno, int c);
|
||||||
int DefaultGets(int, UInt, char *);
|
extern int DefaultGets(int, UInt, char *);
|
||||||
int put_wchar(int sno, wchar_t ch);
|
extern int put_wchar(int sno, wchar_t ch);
|
||||||
Int GetStreamFd(int sno);
|
extern Int GetStreamFd(int sno);
|
||||||
int ResetEOF(StreamDesc *s);
|
extern int ResetEOF(StreamDesc *s);
|
||||||
int EOFPeek(int sno);
|
extern int EOFPeek(int sno);
|
||||||
int EOFWPeek(int sno);
|
extern int EOFWPeek(int sno);
|
||||||
|
|
||||||
extern void Yap_SetAlias(Atom arg, int sno);
|
extern void Yap_SetAlias(Atom arg, int sno);
|
||||||
bool Yap_AddAlias(Atom arg, int sno);
|
extern bool Yap_AddAlias(Atom arg, int sno);
|
||||||
int Yap_CheckAlias(Atom arg);
|
extern int Yap_CheckAlias(Atom arg);
|
||||||
int Yap_RemoveAlias(Atom arg, int snoinline);
|
extern int Yap_RemoveAlias(Atom arg, int snoinline);
|
||||||
extern void Yap_SetAlias(Atom arg, int sno);
|
extern void Yap_SetAlias(Atom arg, int sno);
|
||||||
void Yap_InitAliases(void);
|
extern void Yap_InitAliases(void);
|
||||||
void Yap_DeleteAliases(int sno);
|
extern void Yap_DeleteAliases(int sno);
|
||||||
extern bool Yap_FindStreamForAlias(Atom al);
|
extern bool Yap_FindStreamForAlias(Atom al);
|
||||||
extern bool Yap_FetchStreamAlias(int sno, Term t2 USES_REGS);
|
extern bool Yap_FetchStreamAlias(int sno, Term t2 USES_REGS);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN void count_output_char(int ch, StreamDesc *s);
|
INLINE_ONLY inline EXTERN void count_output_char(int ch, StreamDesc *s);
|
||||||
|
|
||||||
Term Yap_StreamUserName(int sno);
|
extern Term Yap_StreamUserName(int sno);
|
||||||
|
|
||||||
INLINE_ONLY inline EXTERN void count_output_char(int ch, StreamDesc *s) {
|
INLINE_ONLY inline EXTERN void count_output_char(int ch, StreamDesc *s) {
|
||||||
if (ch == '\n') {
|
if (ch == '\n') {
|
||||||
|
414
pl/boot.yap
414
pl/boot.yap
@ -27,6 +27,32 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
'$bc'(G , VL) :-
|
||||||
|
'$pred_exists'( expand_term((:- G), O),prolog),
|
||||||
|
% allow user expansion
|
||||||
|
expand_term((:- G), O),
|
||||||
|
!,
|
||||||
|
(
|
||||||
|
O = (:- G1)
|
||||||
|
->
|
||||||
|
'$yap_strip_module'(G1, M, G2)
|
||||||
|
;
|
||||||
|
'$yap_strip_module'(O, M, G2)
|
||||||
|
),
|
||||||
|
'$b2'(G2, VL, M).
|
||||||
|
|
||||||
|
'$bc'(G,_VL) :-
|
||||||
|
'$yap_strip_module'(G, M, G2),
|
||||||
|
'$execute'(M:G2).
|
||||||
|
|
||||||
|
'$b2'(G2, VL, M) :-
|
||||||
|
(
|
||||||
|
'$directive'(G2)
|
||||||
|
->
|
||||||
|
'$exec_directives'(G2, _Option, M, VL, _Pos)
|
||||||
|
;
|
||||||
|
'$execute'(M:G2)
|
||||||
|
).
|
||||||
|
|
||||||
system_module(_Mod, _SysExps, _Decls).
|
system_module(_Mod, _SysExps, _Decls).
|
||||||
% new_system_module(Mod).
|
% new_system_module(Mod).
|
||||||
@ -66,7 +92,6 @@ private(_).
|
|||||||
'$inform_as_reconsulted'/2,
|
'$inform_as_reconsulted'/2,
|
||||||
'$init_system'/0,
|
'$init_system'/0,
|
||||||
'$init_win_graphics'/0,
|
'$init_win_graphics'/0,
|
||||||
'$live'/0,
|
|
||||||
'$loop'/2,
|
'$loop'/2,
|
||||||
'$meta_call'/2,
|
'$meta_call'/2,
|
||||||
'$prompt_alternatives_on'/1,
|
'$prompt_alternatives_on'/1,
|
||||||
@ -110,15 +135,8 @@ private(_).
|
|||||||
|
|
||||||
% be careful here not to generate an undefined exception.
|
% be careful here not to generate an undefined exception.
|
||||||
|
|
||||||
|
'$undefp0'([prolog_complete|print_message(_,_), _Action) :-
|
||||||
|
format( user_error, '~w in bootstrap: got ~w~n',[L,E]).
|
||||||
'$undefp0'([_M|'$imported_predicate'(G, _ImportingMod, G, prolog)], _Action) :-
|
|
||||||
nonvar(G), '$is_system_predicate'(G, prolog), !.
|
|
||||||
'$undefp0'([_M|print_message(A,B)], _Action) :-
|
|
||||||
!.
|
|
||||||
'$undefp0'([_M|sort(A,B)], _Action) :-
|
|
||||||
!,
|
|
||||||
'$sort'(A,B).
|
|
||||||
'$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)),
|
||||||
@ -129,7 +147,17 @@ private(_).
|
|||||||
:- '$undefp_handler'('$undefp0'(_,_),prolog).
|
:- '$undefp_handler'('$undefp0'(_,_),prolog).
|
||||||
|
|
||||||
|
|
||||||
|
%'$undefp0'([_M|'$imported_predicate'(G, _ImportingMod, G, prolog)], _Action) :-
|
||||||
|
% nonvar(G), '$is_system_predicate'(G, prolog), !.
|
||||||
|
%'$undefp0'([_M|print_message(A,B)], _Action) :-
|
||||||
|
% !.
|
||||||
|
%'$undefp0'([_M|sort(A,B)], _Action) :-
|
||||||
|
% !,
|
||||||
|
% '$sort'(A,B).
|
||||||
|
|
||||||
|
|
||||||
live :-
|
live :-
|
||||||
|
initialize_prolog,
|
||||||
repeat,
|
repeat,
|
||||||
'$current_module'(Module),
|
'$current_module'(Module),
|
||||||
( Module==user ->
|
( Module==user ->
|
||||||
@ -385,7 +413,7 @@ initialize_prolog :-
|
|||||||
->
|
->
|
||||||
'$yap_strip_module'(G1, M, G2),
|
'$yap_strip_module'(G1, M, G2),
|
||||||
|
|
||||||
'$process_directive'(G2, Option, M, VL, Pos)
|
'$process_directives'(G2, Option, M, VL, Pos)
|
||||||
;
|
;
|
||||||
'$execute_commands'(G1,VL,Pos,Option,O)
|
'$execute_commands'(G1,VL,Pos,Option,O)
|
||||||
).
|
).
|
||||||
@ -1353,6 +1381,7 @@ log_event( String, Args ) :-
|
|||||||
:- compile_expressions.
|
:- compile_expressions.
|
||||||
|
|
||||||
|
|
||||||
|
:- c_compile('directives.yap').
|
||||||
:- c_compile('imports.yap').
|
:- c_compile('imports.yap').
|
||||||
:- c_compile('bootutils.yap').
|
:- c_compile('bootutils.yap').
|
||||||
:- c_compile('bootlists.yap').
|
:- c_compile('bootlists.yap').
|
||||||
@ -1581,368 +1610,5 @@ If this hook predicate succeeds it must instantiate the _Action_ argument to th
|
|||||||
:- dynamic user:exception/3.
|
:- dynamic user:exception/3.
|
||||||
|
|
||||||
:- ensure_loaded('../pl/pathconf.yap').
|
:- ensure_loaded('../pl/pathconf.yap').
|
||||||
/*
|
|
||||||
Add some tests
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
:- yap_flag(user:unknown,error).
|
:- yap_flag(user:unknown,error).
|
||||||
|
|
||||||
/*
|
|
||||||
:- if(predicate_property(run_tests, static)).
|
|
||||||
|
|
||||||
aa b.
|
|
||||||
|
|
||||||
p(X,Y) :- Y is X*X.
|
|
||||||
|
|
||||||
prefix(information, '% ', S, user_error) --> [].
|
|
||||||
|
|
||||||
:- format('~d~n', [a]).
|
|
||||||
|
|
||||||
:- format('~d~n', []).
|
|
||||||
|
|
||||||
:- p(X,Y).
|
|
||||||
|
|
||||||
a(1).
|
|
||||||
|
|
||||||
a.
|
|
||||||
|
|
||||||
a(2).
|
|
||||||
a(2).
|
|
||||||
|
|
||||||
lists:member(1,[1]).
|
|
||||||
|
|
||||||
clause_to_indicator(T, M:Name/Arity) :- ,
|
|
||||||
strip_module(T, M, T1),
|
|
||||||
pred_arity( T1, Name, Arity ).
|
|
||||||
:- endif.
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
|
|
||||||
@{
|
|
||||||
@defgroup library The Prolog library
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@addtogroup YAPControl
|
|
||||||
@ingroup builtins
|
|
||||||
@{
|
|
||||||
*/
|
|
||||||
:- '$system_predicate'(
|
|
||||||
[!/0,
|
|
||||||
':-'/1,
|
|
||||||
'?-'/1,
|
|
||||||
[]/0,
|
|
||||||
extensions_to_present_answer/1,
|
|
||||||
fail/0,
|
|
||||||
false/0,
|
|
||||||
goal_expansion/2,
|
|
||||||
goal_expansion/3,
|
|
||||||
otherwise/0,
|
|
||||||
term_expansion/2,
|
|
||||||
version/2]).
|
|
||||||
|
|
||||||
%:- start_low_level_trace.
|
|
||||||
|
|
||||||
% This is the YAP init file
|
|
||||||
% should be consulted first step after booting
|
|
||||||
|
|
||||||
% These are pseudo declarations
|
|
||||||
% so that the user will get a redefining system predicate
|
|
||||||
|
|
||||||
:- '$init_pred_flag_vals'('$flag_info'(a,0), prolog).
|
|
||||||
|
|
||||||
/** @pred fail is iso
|
|
||||||
|
|
||||||
Always fails.
|
|
||||||
*/
|
|
||||||
fail :- fail.
|
|
||||||
|
|
||||||
/** @pred false is iso
|
|
||||||
|
|
||||||
|
|
||||||
The same as fail.
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
false :- fail.
|
|
||||||
|
|
||||||
otherwise.
|
|
||||||
|
|
||||||
!.
|
|
||||||
|
|
||||||
(:- G) :- '$execute'(G), !.
|
|
||||||
|
|
||||||
(?- G) :- '$execute'(G).
|
|
||||||
|
|
||||||
'$$!'(CP) :- '$cut_by'(CP).
|
|
||||||
|
|
||||||
[] :- true.
|
|
||||||
|
|
||||||
% just create a choice-point
|
|
||||||
% the 6th argument marks the time-stamp.
|
|
||||||
'$do_log_upd_clause'(_,_,_,_,_,_).
|
|
||||||
'$do_log_upd_clause'(A,B,C,D,E,_) :-
|
|
||||||
'$continue_log_update_clause'(A,B,C,D,E).
|
|
||||||
'$do_log_upd_clause'(_,_,_,_,_,_).
|
|
||||||
|
|
||||||
|
|
||||||
'$do_log_upd_clause_erase'(_,_,_,_,_,_).
|
|
||||||
'$do_log_upd_clause_erase'(A,B,C,D,E,_) :-
|
|
||||||
'$continue_log_update_clause_erase'(A,B,C,D,E).
|
|
||||||
'$do_log_upd_clause_erase'(_,_,_,_,_,_).
|
|
||||||
|
|
||||||
'$do_log_upd_clause0'(_,_,_,_,_,_).
|
|
||||||
'$do_log_upd_clause0'(A,B,C,D,_,_) :-
|
|
||||||
'$continue_log_update_clause'(A,B,C,D).
|
|
||||||
'$do_log_upd_clause0'(_,_,_,_,_,_).
|
|
||||||
|
|
||||||
|
|
||||||
'$do_static_clause'(_,_,_,_,_).
|
|
||||||
'$do_static_clause'(A,B,C,D,E) :-
|
|
||||||
'$continue_static_clause'(A,B,C,D,E).
|
|
||||||
'$do_static_clause'(_,_,_,_,_).
|
|
||||||
|
|
||||||
:- c_compile('arith.yap', prolog).
|
|
||||||
|
|
||||||
:- '$all_current_modules'(M), yap_flag(M:unknown, error) ; true.
|
|
||||||
|
|
||||||
:- compile_expressions.
|
|
||||||
|
|
||||||
|
|
||||||
:- c_compile('bootutils.yap', prolog).
|
|
||||||
:- c_compile('bootlists.yap', prolog).
|
|
||||||
:- c_compile('consult.yap', prolog).
|
|
||||||
:- c_compile('preddecls.yap', prolog).
|
|
||||||
:- c_compile('preddyns.yap', prolog).
|
|
||||||
:- c_compile('meta.yap', prolog).
|
|
||||||
:- c_compile('newmod.yap', prolog).
|
|
||||||
|
|
||||||
:- c_compile('atoms.yap', prolog).
|
|
||||||
:- c_compile('os.yap', prolog).
|
|
||||||
:- c_compile('grammar.yap', prolog).
|
|
||||||
:- c_compile('directives.yap', prolog).
|
|
||||||
:- c_compile('absf.yap', prolog).
|
|
||||||
|
|
||||||
:- dynamic prolog:'$parent_module'/2.
|
|
||||||
%:- set_prolog_flag(verbose_file_search, true ).
|
|
||||||
%:- yap_flag(write_strings,on).
|
|
||||||
%:- start_low_level_trace.
|
|
||||||
|
|
||||||
:- ensure_loaded([
|
|
||||||
'preds.yap',
|
|
||||||
'modules.yap'
|
|
||||||
]).
|
|
||||||
%:-stop_low_level_trace.
|
|
||||||
|
|
||||||
:- use_module('error.yap').
|
|
||||||
|
|
||||||
|
|
||||||
:- ensure_loaded([
|
|
||||||
'errors.yap',
|
|
||||||
'utils.yap',
|
|
||||||
'control.yap',
|
|
||||||
'flags.yap'
|
|
||||||
]).
|
|
||||||
|
|
||||||
|
|
||||||
:- ensure_loaded([
|
|
||||||
% lists is often used.
|
|
||||||
'../os/yio.yap',
|
|
||||||
'debug.yap',
|
|
||||||
'checker.yap',
|
|
||||||
'depth_bound.yap',
|
|
||||||
'ground.yap',
|
|
||||||
'listing.yap',
|
|
||||||
'arithpreds.yap',
|
|
||||||
% modules must be after preds, otherwise we will have trouble
|
|
||||||
% with meta-predicate expansion being invoked
|
|
||||||
% must follow grammar
|
|
||||||
'eval.yap',
|
|
||||||
'signals.yap',
|
|
||||||
'profile.yap',
|
|
||||||
'callcount.yap',
|
|
||||||
'load_foreign.yap',
|
|
||||||
% 'save.yap',
|
|
||||||
'setof.yap',
|
|
||||||
'sort.yap',
|
|
||||||
'statistics.yap',
|
|
||||||
'strict_iso.yap',
|
|
||||||
'tabling.yap',
|
|
||||||
'threads.yap',
|
|
||||||
'eam.yap',
|
|
||||||
'yapor.yap',
|
|
||||||
'qly.yap',
|
|
||||||
'spy.yap',
|
|
||||||
'udi.yap']).
|
|
||||||
|
|
||||||
|
|
||||||
:- meta_predicate(log_event(+,:)).
|
|
||||||
|
|
||||||
:- dynamic prolog:'$user_defined_flag'/4.
|
|
||||||
|
|
||||||
:- multifile prolog:debug_action_hook/1.
|
|
||||||
|
|
||||||
:- multifile prolog:'$system_predicate'/2.
|
|
||||||
|
|
||||||
:- ensure_loaded(['protect.yap']).
|
|
||||||
|
|
||||||
version(yap,[6,3]).
|
|
||||||
|
|
||||||
:- op(1150,fx,(mode)).
|
|
||||||
|
|
||||||
:- dynamic 'extensions_to_present_answer'/1.
|
|
||||||
|
|
||||||
:- ensure_loaded(['arrays.yap']).
|
|
||||||
%:- start_low_level_trace.
|
|
||||||
|
|
||||||
:- multifile user:portray_message/2.
|
|
||||||
|
|
||||||
:- dynamic user:portray_message/2.
|
|
||||||
|
|
||||||
/** @pred _CurrentModule_:goal_expansion(+ _G_,+ _M_,- _NG_), user:goal_expansion(+ _G_,+ _M_,- _NG_)
|
|
||||||
|
|
||||||
|
|
||||||
YAP now supports goal_expansion/3. This is an user-defined
|
|
||||||
procedure that is called after term expansion when compiling or
|
|
||||||
asserting goals for each sub-goal in a clause. The first argument is
|
|
||||||
bound to the goal and the second to the module under which the goal
|
|
||||||
_G_ will execute. If goal_expansion/3 succeeds the new
|
|
||||||
sub-goal _NG_ will replace _G_ and will be processed in the same
|
|
||||||
way. If goal_expansion/3 fails the system will use the defaultyap+flrules.
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
:- multifile user:goal_expansion/3.
|
|
||||||
|
|
||||||
:- dynamic user:goal_expansion/3.
|
|
||||||
|
|
||||||
:- multifile user:goal_expansion/2.
|
|
||||||
|
|
||||||
:- dynamic user:goal_expansion/2.
|
|
||||||
|
|
||||||
:- multifile system:goal_expansion/2.
|
|
||||||
|
|
||||||
:- dynamic system:goal_expansion/2.
|
|
||||||
|
|
||||||
:- multifile goal_expansion/2.
|
|
||||||
|
|
||||||
:- dynamic goal_expansion/2.
|
|
||||||
|
|
||||||
:- use_module('messages.yap').
|
|
||||||
|
|
||||||
:- ensure_loaded(['undefined.yap']).
|
|
||||||
|
|
||||||
:- use_module('hacks.yap').
|
|
||||||
|
|
||||||
|
|
||||||
:- use_module('attributes.yap').
|
|
||||||
:- use_module('corout.yap').
|
|
||||||
:- use_module('dialect.yap').
|
|
||||||
:- use_module('dbload.yap').
|
|
||||||
:- use_module('../library/ypp.yap').
|
|
||||||
:- use_module('../os/chartypes.yap').
|
|
||||||
:- ensure_loaded('../os/edio.yap').
|
|
||||||
|
|
||||||
yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
|
|
||||||
|
|
||||||
:- '$change_type_of_char'(36,7). % Make $ a symbol character
|
|
||||||
|
|
||||||
:- set_prolog_flag(generate_debug_info,true).
|
|
||||||
|
|
||||||
%
|
|
||||||
% cleanup ensure loaded and recover some data-base space.
|
|
||||||
%
|
|
||||||
:- ( recorded('$lf_loaded',_,R), erase(R), fail ; true ).
|
|
||||||
:- ( recorded('$lf_loaded',_,R), erase(R), fail ; true ).
|
|
||||||
:- ( recorded('$module',_,R), erase(R), fail ; true ).
|
|
||||||
|
|
||||||
:- set_value('$user_module',user), '$protect'.
|
|
||||||
|
|
||||||
:- style_check([+discontiguous,+multiple,+single_var]).
|
|
||||||
|
|
||||||
%
|
|
||||||
% moved this to init_gc in gc.c to separate the alpha
|
|
||||||
%
|
|
||||||
% :- yap_flag(gc,on).
|
|
||||||
|
|
||||||
% :- yap_flag(gc_trace,verbose).
|
|
||||||
|
|
||||||
:- multifile
|
|
||||||
prolog:comment_hook/3.
|
|
||||||
|
|
||||||
:- source.
|
|
||||||
|
|
||||||
:- module(user).
|
|
||||||
|
|
||||||
|
|
||||||
/** @pred _CurrentModule_:term_expansion( _T_,- _X_), user:term_expansion( _T_,- _X_)
|
|
||||||
|
|
||||||
|
|
||||||
This user-defined predicate is called by `expand_term/3` to
|
|
||||||
preprocess all terms read when consulting a file. If it succeeds:
|
|
||||||
|
|
||||||
+
|
|
||||||
If _X_ is of the form `:- G` or `?- G`, it is processed as
|
|
||||||
a directive.
|
|
||||||
+
|
|
||||||
If _X_ is of the form `$source_location`( _File_, _Line_): _Clause_` it is processed as if from `File` and line `Line`.
|
|
||||||
|
|
||||||
+
|
|
||||||
If _X_ is a list, all terms of the list are asserted or processed
|
|
||||||
as directives.
|
|
||||||
+ The term _X_ is asserted instead of _T_.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
:- multifile term_expansion/2.
|
|
||||||
|
|
||||||
:- dynamic term_expansion/2.
|
|
||||||
|
|
||||||
:- multifile system:term_expansion/2.
|
|
||||||
|
|
||||||
:- dynamic system:term_expansion/2.
|
|
||||||
|
|
||||||
:- multifile swi:swi_predicate_table/4.
|
|
||||||
|
|
||||||
/** @pred user:message_hook(+ _Term_, + _Kind_, + _Lines_)
|
|
||||||
|
|
||||||
|
|
||||||
Hook predicate that may be define in the module `user` to intercept
|
|
||||||
messages from print_message/2. _Term_ and _Kind_ are the
|
|
||||||
same as passed to print_message/2. _Lines_ is a list of
|
|
||||||
format statements as described with print_message_lines/3.
|
|
||||||
|
|
||||||
This predicate should be defined dynamic and multifile to allow other
|
|
||||||
modules defining clauses for it too.
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
:- multifile user:message_hook/3.
|
|
||||||
|
|
||||||
:- dynamic user:message_hook/3.
|
|
||||||
|
|
||||||
/** @pred exception(+ _Exception_, + _Context_, - _Action_)
|
|
||||||
|
|
||||||
|
|
||||||
Dynamic predicate, normally not defined. Called by the Prolog system on run-time exceptions that can be repaired `just-in-time`. The values for _Exception_ are described below. See also catch/3 and throw/1.
|
|
||||||
If this hook predicate succeeds it must instantiate the _Action_ argument to the atom `fail` to make the operation fail silently, `retry` to tell Prolog to retry the operation or `error` to make the system generate an exception. The action `retry` only makes sense if this hook modified the environment such that the operation can now succeed without error.
|
|
||||||
|
|
||||||
+ `undefined_predicate`
|
|
||||||
_Context_ is instantiated to a predicate-indicator ( _Module:Name/Arity_). If the predicate fails Prolog will generate an existence_error exception. The hook is intended to implement alternatives to the SWI built-in autoloader, such as autoloading code from a database. Do not use this hook to suppress existence errors on predicates. See also `unknown`.
|
|
||||||
+ `undefined_global_variable`
|
|
||||||
_Context_ is instantiated to the name of the missing global variable. The hook must call nb_setval/2 or b_setval/2 before returning with the action retry.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
:- multifile user:exception/3.
|
|
||||||
|
|
||||||
:- dynamic user:exception/3.
|
|
||||||
|
|
||||||
:- ensure_loaded('pathconf.yap').
|
|
||||||
|
|
||||||
:- yap_flag(user:unknown,error).
|
|
||||||
|
|
||||||
|
|
||||||
:- halt(0).
|
|
||||||
|
@ -152,8 +152,8 @@ considered.
|
|||||||
'$exec_directive'(module(N,P,Op), Status, _, _, _) :-
|
'$exec_directive'(module(N,P,Op), Status, _, _, _) :-
|
||||||
'$module'(Status,N,P,Op).
|
'$module'(Status,N,P,Op).
|
||||||
'$exec_directive'(meta_predicate(P), _, M, _, _) :-
|
'$exec_directive'(meta_predicate(P), _, M, _, _) :-
|
||||||
strip_module(M:P,M0,P0),
|
'$yap_strip_module'(M:P,M0,P0),
|
||||||
'$meta_predicate'(M0:P0).
|
'$meta_predicate'(P0,M0).
|
||||||
'$exec_directive'(module_transparent(P), _, M, _, _) :-
|
'$exec_directive'(module_transparent(P), _, M, _, _) :-
|
||||||
'$module_transparent'(P, M).
|
'$module_transparent'(P, M).
|
||||||
'$exec_directive'(noprofile(P), _, M, _, _) :-
|
'$exec_directive'(noprofile(P), _, M, _, _) :-
|
||||||
|
49
pl/meta.yap
49
pl/meta.yap
@ -40,29 +40,41 @@ meta_predicate declaration
|
|||||||
'$full_clause_optimisation'/4.
|
'$full_clause_optimisation'/4.
|
||||||
|
|
||||||
|
|
||||||
'$meta_predicate'(M:P) :-
|
'$meta_predicate'(P,M) :-
|
||||||
var(P),
|
var(P),
|
||||||
|
!,
|
||||||
'$do_error'(instantiation_error,meta_predicate(M:P)).
|
'$do_error'(instantiation_error,meta_predicate(M:P)).
|
||||||
'$meta_predicate'(M:P) :-
|
'$meta_predicate'(P,M) :-
|
||||||
var(M),
|
var(M),
|
||||||
|
!,
|
||||||
'$do_error'(instantiation_error,meta_predicate(M:P)).
|
'$do_error'(instantiation_error,meta_predicate(M:P)).
|
||||||
'$meta_predicate'(M:(P,Ps)) :- !,
|
'$meta_predicate'((P,_Ps),M) :-
|
||||||
'$meta_predicate'(M:P),
|
'$meta_predicate'(P,M),
|
||||||
'$meta_predicate'(M:Ps).
|
fail.
|
||||||
'$meta_predicate'( M:D ) :-
|
'$meta_predicate'((_P,Ps),M) :-
|
||||||
|
!,
|
||||||
|
'$meta_predicate'(Ps,M).
|
||||||
|
'$meta_predicate'( D, M ) :-
|
||||||
'$yap_strip_module'( M:D, M1, P),
|
'$yap_strip_module'( M:D, M1, P),
|
||||||
'$install_meta_predicate'(M1:P).
|
P\==D,
|
||||||
|
!,
|
||||||
|
'$meta_predicate'( P, M1 ).
|
||||||
|
'$meta_predicate'( D, M ) :-
|
||||||
|
functor(D,F,N),
|
||||||
|
( M = prolog -> M2 = _ ; M2 = M),
|
||||||
|
'$install_meta_predicate'(D,M2,F,N),
|
||||||
|
fail.
|
||||||
|
'$meta_predicate'( _D, _M ).
|
||||||
|
|
||||||
'$install_meta_predicate'(M1:P) :-
|
'$install_meta_predicate'(P,M,F,N) :-
|
||||||
functor(P,F,N),
|
writeln(P),
|
||||||
( M1 = prolog -> M = _ ; M1 = M),
|
retractall(prolog:'$meta_predicate'(F,M,N,_)),
|
||||||
( retractall(prolog:'$meta_predicate'(F,M,N,_)), fail ; true),
|
fail.
|
||||||
'$compile'(('$meta_predicate'(F,M,N,P) :- true),assertz,'$meta_predicate'(F,M,N,P),prolog,_).
|
'$install_meta_predicate'(P,M,F,N) :-
|
||||||
|
assertz('$meta_predicate'(F,M,N,P)).
|
||||||
|
|
||||||
% comma has its own problems.
|
% comma has its own problems.
|
||||||
|
|
||||||
:- '$install_meta_predicate'(prolog:','(0,0)).
|
|
||||||
|
|
||||||
%% handle module transparent predicates by defining a
|
%% handle module transparent predicates by defining a
|
||||||
%% new context module.
|
%% new context module.
|
||||||
'$is_mt'(H, B, HM, _SM, M, (context_module(CM),B), CM) :-
|
'$is_mt'(H, B, HM, _SM, M, (context_module(CM),B), CM) :-
|
||||||
@ -482,7 +494,9 @@ expand_goal(Input, Output) :-
|
|||||||
'$expand_goals'(IG, _, GF0, M, SM, M, HVars-G),
|
'$expand_goals'(IG, _, GF0, M, SM, M, HVars-G),
|
||||||
'$yap_strip_module'(M:GF0, MF, GF).
|
'$yap_strip_module'(M:GF0, MF, GF).
|
||||||
|
|
||||||
:- '$meta_predicate'(prolog:(
|
:- '$install_meta_predicate'((_,_),_,(','),2).
|
||||||
|
|
||||||
|
:- meta_predicate
|
||||||
abolish(:),
|
abolish(:),
|
||||||
abolish(:,+),
|
abolish(:,+),
|
||||||
all(?,0,-),
|
all(?,0,-),
|
||||||
@ -572,13 +586,12 @@ expand_goal(Input, Output) :-
|
|||||||
'->'(0 , 0),
|
'->'(0 , 0),
|
||||||
'*->'(0 , 0),
|
'*->'(0 , 0),
|
||||||
';'(0 , 0),
|
';'(0 , 0),
|
||||||
% ','(0 , 0),
|
|
||||||
^(+,0),
|
^(+,0),
|
||||||
{}(0,?,?),
|
{}(0,?,?),
|
||||||
','(2,2,?,?),
|
','(2,2,?,?),
|
||||||
;(2,2,?,?),
|
';'(2,2,?,?),
|
||||||
'|'(2,2,?,?),
|
'|'(2,2,?,?),
|
||||||
->(2,2,?,?),
|
->(2,2,?,?),
|
||||||
\+(2,?,?),
|
\+(2,?,?),
|
||||||
\+( 0 )
|
\+( 0 )
|
||||||
)).
|
.
|
||||||
|
@ -261,10 +261,11 @@ retractall(V) :-
|
|||||||
'$retractall'(M:V,_) :- !,
|
'$retractall'(M:V,_) :- !,
|
||||||
'$retractall'(V,M).
|
'$retractall'(V,M).
|
||||||
'$retractall'(T,M) :-
|
'$retractall'(T,M) :-
|
||||||
|
functor(T,Na,Ar),
|
||||||
(
|
(
|
||||||
'$is_log_updatable'(T, M) ->
|
'$is_log_updatable'(T, M) ->
|
||||||
( '$is_multifile'(T, M) ->
|
( '$is_multifile'(T, M) ->
|
||||||
'$retractall_lu_mf'(T,M)
|
'$retractall_lu_mf'(T,M,Na,Ar)
|
||||||
;
|
;
|
||||||
'$retractall_lu'(T,M)
|
'$retractall_lu'(T,M)
|
||||||
)
|
)
|
||||||
@ -273,13 +274,11 @@ retractall(V) :-
|
|||||||
'$do_error'(type_error(callable,T),retractall(T))
|
'$do_error'(type_error(callable,T),retractall(T))
|
||||||
;
|
;
|
||||||
'$undefined'(T,M) ->
|
'$undefined'(T,M) ->
|
||||||
functor(T,Na,Ar),
|
|
||||||
'$dynamic'(Na/Ar,M), !
|
'$dynamic'(Na/Ar,M), !
|
||||||
;
|
;
|
||||||
'$is_dynamic'(T,M) ->
|
'$is_dynamic'(T,M) ->
|
||||||
'$erase_all_clauses_for_dynamic'(T, M)
|
'$erase_all_clauses_for_dynamic'(T, M)
|
||||||
;
|
;
|
||||||
functor(T,Na,Ar),
|
|
||||||
'$do_error'(permission_error(modify,static_procedure,Na/Ar),retractall(T))
|
'$do_error'(permission_error(modify,static_procedure,Na/Ar),retractall(T))
|
||||||
).
|
).
|
||||||
|
|
||||||
@ -292,12 +291,12 @@ retractall(V) :-
|
|||||||
fail.
|
fail.
|
||||||
'$retractall_lu'(_,_).
|
'$retractall_lu'(_,_).
|
||||||
|
|
||||||
'$retractall_lu_mf'(T,M) :-
|
'$retractall_lu_mf'(T,M,Na,Ar) :-
|
||||||
'$log_update_clause'(T,M,_,R),
|
'$log_update_clause'(T,M,_,R),
|
||||||
( recorded('$mf','$mf_clause'(_,_,_,_,R),MR), erase(MR), fail ; true),
|
( recorded('$mf','$mf_clause'(_,Na,Ar,M,R),MR), erase(MR), fail ; true),
|
||||||
erase(R),
|
erase(R),
|
||||||
fail.
|
fail.
|
||||||
'$retractall_lu_mf'(_,_).
|
'$retractall_lu_mf'(_,_,_,_).
|
||||||
|
|
||||||
'$erase_all_clauses_for_dynamic'(T, M) :-
|
'$erase_all_clauses_for_dynamic'(T, M) :-
|
||||||
'$recordedp'(M:T,(T :- _),R), erase(R), fail.
|
'$recordedp'(M:T,(T :- _),R), erase(R), fail.
|
||||||
|
Reference in New Issue
Block a user