support loop_stream while at initial boot (doesn't really do work so far)
This commit is contained in:
parent
5c05b3be45
commit
04a2c10ebe
@ -2630,7 +2630,7 @@ YAP_ClearExceptions(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
X_API int
|
X_API int
|
||||||
YAP_InitConsult(int mode, const char *filename)
|
YAP_InitConsult(int mode, const char *filename, int *osnop)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
int sno;
|
int sno;
|
||||||
@ -2645,6 +2645,13 @@ YAP_InitConsult(int mode, const char *filename)
|
|||||||
if (!f)
|
if (!f)
|
||||||
return -1;
|
return -1;
|
||||||
sno = Yap_OpenStream(f, NULL, TermNil, Input_Stream_f );
|
sno = Yap_OpenStream(f, NULL, TermNil, Input_Stream_f );
|
||||||
|
*osnop = Yap_CheckAlias( AtomLoopStream );
|
||||||
|
if (!Yap_AddAlias(AtomLoopStream,sno)) {
|
||||||
|
Yap_CloseStream( sno);
|
||||||
|
sno = -1;
|
||||||
|
}
|
||||||
|
GLOBAL_Stream[sno].name = Yap_LookupAtom( filename );
|
||||||
|
GLOBAL_Stream[sno].user_name = MkAtomTerm( Yap_LookupAtom( filename ) );
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
return sno;
|
return sno;
|
||||||
@ -2667,10 +2674,12 @@ YAP_TermToStream(Term t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
X_API void
|
X_API void
|
||||||
YAP_EndConsult(int sno)
|
YAP_EndConsult(int sno, int *osnop)
|
||||||
{
|
{
|
||||||
BACKUP_MACHINE_REGS();
|
BACKUP_MACHINE_REGS();
|
||||||
Yap_CloseStream(sno);
|
Yap_CloseStream(sno);
|
||||||
|
if (osnop >= 0 )
|
||||||
|
Yap_AddAlias( AtomLoopStream, *osnop );
|
||||||
Yap_end_consult();
|
Yap_end_consult();
|
||||||
|
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
@ -2800,7 +2809,7 @@ static void
|
|||||||
do_bootfile (char *bootfilename USES_REGS)
|
do_bootfile (char *bootfilename USES_REGS)
|
||||||
{
|
{
|
||||||
Term t;
|
Term t;
|
||||||
int bootfile;
|
int bootfile, 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);
|
||||||
|
|
||||||
@ -2810,7 +2819,7 @@ do_bootfile (char *bootfilename USES_REGS)
|
|||||||
To be honest, YAP_InitConsult does not really do much,
|
To be honest, YAP_InitConsult does not really do much,
|
||||||
it's here for the future. It also makes what we want to do clearer.
|
it's here for the future. It also makes what we want to do clearer.
|
||||||
*/
|
*/
|
||||||
bootfile = YAP_InitConsult(YAP_BOOT_MODE,bootfilename);
|
bootfile = YAP_InitConsult(YAP_BOOT_MODE,bootfilename, &osno);
|
||||||
if (bootfile <0)
|
if (bootfile <0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "[ FATAL ERROR: could not open bootfile %s ]\n", bootfilename);
|
fprintf(stderr, "[ FATAL ERROR: could not open bootfile %s ]\n", bootfilename);
|
||||||
@ -2843,14 +2852,26 @@ do_bootfile (char *bootfilename USES_REGS)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *ErrorMessage = YAP_CompileClause(t);
|
Term ts[2];
|
||||||
|
char *ErrorMessage;
|
||||||
|
Functor fun = Yap_MkFunctor(Yap_LookupAtom("$prepare_clause"),2);
|
||||||
|
PredEntry *pe = RepPredProp(PredPropByFunc(fun,PROLOG_MODULE));
|
||||||
|
|
||||||
|
if (pe->OpcodeOfPred != UNDEF_OPCODE &&
|
||||||
|
pe->OpcodeOfPred != FAIL_OPCODE) {
|
||||||
|
ts[0] = t;
|
||||||
|
RESET_VARIABLE(ts+1);
|
||||||
|
if ( YAP_RunGoal(Yap_MkApplTerm( fun,2,ts)) )
|
||||||
|
t = ts[1];
|
||||||
|
}
|
||||||
|
ErrorMessage = YAP_CompileClause(t);
|
||||||
if (ErrorMessage) {
|
if (ErrorMessage) {
|
||||||
fprintf(stderr, "%s", ErrorMessage);
|
fprintf(stderr, "%s", ErrorMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (t != TermEof );
|
} while (t != TermEof );
|
||||||
|
|
||||||
YAP_EndConsult(bootfile);
|
YAP_EndConsult(bootfile, &osno);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (Yap_output_msg)
|
if (Yap_output_msg)
|
||||||
fprintf(stderr,"Boot loaded\n");
|
fprintf(stderr,"Boot loaded\n");
|
||||||
|
Reference in New Issue
Block a user