use SWI opts for read
This commit is contained in:
parent
04f3fa4d9d
commit
5f3ff4fc73
360
C/iopreds.c
360
C/iopreds.c
@ -242,7 +242,7 @@ int beam_write (void)
|
|||||||
{
|
{
|
||||||
Yap_StartSlots();
|
Yap_StartSlots();
|
||||||
Yap_plwrite (ARG1, NULL, 0, 0, 1200);
|
Yap_plwrite (ARG1, NULL, 0, 0, 1200);
|
||||||
Yap_CloseSlots();
|
LOCAL_CurSlot = CurSlot;
|
||||||
if (EX != 0L) {
|
if (EX != 0L) {
|
||||||
Term ball = Yap_PopTermFromDB(EX);
|
Term ball = Yap_PopTermFromDB(EX);
|
||||||
EX = 0L;
|
EX = 0L;
|
||||||
@ -615,9 +615,9 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
Term terror;
|
Term terror;
|
||||||
GenerateSyntaxError(&terror, tokstart, inp_stream, MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage)) PASS_REGS);
|
|
||||||
if (LOCAL_ErrorMessage == NULL)
|
if (LOCAL_ErrorMessage == NULL)
|
||||||
LOCAL_ErrorMessage = "SYNTAX ERROR";
|
LOCAL_ErrorMessage = "SYNTAX ERROR";
|
||||||
|
GenerateSyntaxError(&terror, tokstart, inp_stream, MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage)) PASS_REGS);
|
||||||
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
rd->has_exception = TRUE;
|
rd->has_exception = TRUE;
|
||||||
@ -707,360 +707,6 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Assumes
|
|
||||||
Flag: ARG1
|
|
||||||
Term: ARG2
|
|
||||||
Module: ARG3
|
|
||||||
Vars: ARG4
|
|
||||||
Pos: ARG5
|
|
||||||
Err: ARG6
|
|
||||||
Comments: ARG7
|
|
||||||
*/
|
|
||||||
static Int
|
|
||||||
do_read(IOSTREAM *inp_stream, int nargs USES_REGS)
|
|
||||||
{
|
|
||||||
Term t, v;
|
|
||||||
TokEntry *tokstart;
|
|
||||||
Term tmod = Deref(ARG3), OCurrentModule = CurrentModule, tpos;
|
|
||||||
Term tcomms = Deref(ARG7);
|
|
||||||
int store_comments = IsVarTerm(tcomms);
|
|
||||||
|
|
||||||
if (IsVarTerm(tmod)) {
|
|
||||||
tmod = CurrentModule;
|
|
||||||
} else if (!IsAtomTerm(tmod)) {
|
|
||||||
Yap_Error(TYPE_ERROR_ATOM, tmod, "read_term/2");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
|
||||||
while (TRUE) {
|
|
||||||
CELL *old_H;
|
|
||||||
int64_t cpos = 0;
|
|
||||||
int seekable = inp_stream->functions->seek != NULL;
|
|
||||||
|
|
||||||
/* two cases where we can seek: memory and console */
|
|
||||||
if (seekable) {
|
|
||||||
cpos = inp_stream->posbuf.byteno;
|
|
||||||
}
|
|
||||||
/* Scans the term using stack space */
|
|
||||||
while (TRUE) {
|
|
||||||
old_H = H;
|
|
||||||
tpos = Yap_StreamPosition(inp_stream);
|
|
||||||
LOCAL_Comments = TermNil;
|
|
||||||
LOCAL_CommentsNextChar = LOCAL_CommentsTail = NULL;
|
|
||||||
tokstart = LOCAL_tokptr = LOCAL_toktide = Yap_tokenizer(inp_stream, store_comments, &tpos);
|
|
||||||
if (LOCAL_Error_TYPE != YAP_NO_ERROR && seekable) {
|
|
||||||
H = old_H;
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
|
||||||
if (seekable) {
|
|
||||||
Sseek64(inp_stream, cpos, SIO_SEEK_SET);
|
|
||||||
}
|
|
||||||
if (LOCAL_Error_TYPE == OUT_OF_TRAIL_ERROR) {
|
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
|
||||||
if (!Yap_growtrail (sizeof(CELL) * K16, FALSE)) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
} else if (LOCAL_Error_TYPE == OUT_OF_AUXSPACE_ERROR) {
|
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
|
||||||
if (!Yap_ExpandPreAllocCodeSpace(0, NULL, TRUE)) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
} else if (LOCAL_Error_TYPE == OUT_OF_HEAP_ERROR) {
|
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
|
||||||
if (!Yap_growheap(FALSE, 0, NULL)) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
} else if (LOCAL_Error_TYPE == OUT_OF_STACK_ERROR) {
|
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
|
||||||
if (!Yap_gcl(LOCAL_Error_Size, nargs, ENV, CP)) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* done with this */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!Yap_unify(tpos,ARG5)) {
|
|
||||||
/* do this early so that we do not have to protect it in case of stack expansion */
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
|
||||||
/* preserve value of H after scanning: otherwise we may lose strings
|
|
||||||
and floats */
|
|
||||||
old_H = H;
|
|
||||||
if (tokstart != NULL && tokstart->Tok == Ord (eot_tok)) {
|
|
||||||
/* did we get the end of file from an abort? */
|
|
||||||
if (LOCAL_ErrorMessage &&
|
|
||||||
!strcmp(LOCAL_ErrorMessage,"Abort")) {
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
|
||||||
return FALSE;
|
|
||||||
} else {
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
|
||||||
|
|
||||||
if (store_comments && !Yap_unify(LOCAL_Comments, ARG7))
|
|
||||||
return FALSE;
|
|
||||||
return Yap_unify_constant(ARG2, MkAtomTerm (AtomEof))
|
|
||||||
&& Yap_unify_constant(ARG4, TermNil);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
repeat_cycle:
|
|
||||||
CurrentModule = tmod;
|
|
||||||
if (LOCAL_ErrorMessage || (t = Yap_Parse()) == 0) {
|
|
||||||
CurrentModule = OCurrentModule;
|
|
||||||
if (LOCAL_ErrorMessage) {
|
|
||||||
int res;
|
|
||||||
|
|
||||||
if (!strcmp(LOCAL_ErrorMessage,"Stack Overflow") ||
|
|
||||||
!strcmp(LOCAL_ErrorMessage,"Trail Overflow") ||
|
|
||||||
!strcmp(LOCAL_ErrorMessage,"Heap Overflow")) {
|
|
||||||
/* ignore term we just built */
|
|
||||||
tr_fr_ptr old_TR = TR;
|
|
||||||
|
|
||||||
|
|
||||||
H = old_H;
|
|
||||||
TR = (tr_fr_ptr)LOCAL_ScannerStack;
|
|
||||||
|
|
||||||
if (!strcmp(LOCAL_ErrorMessage,"Stack Overflow"))
|
|
||||||
res = Yap_growstack_in_parser(&old_TR, &tokstart, &LOCAL_VarTable);
|
|
||||||
else if (!strcmp(LOCAL_ErrorMessage,"Heap Overflow"))
|
|
||||||
res = Yap_growheap_in_parser(&old_TR, &tokstart, &LOCAL_VarTable);
|
|
||||||
else
|
|
||||||
res = Yap_growtrail_in_parser(&old_TR, &tokstart, &LOCAL_VarTable);
|
|
||||||
if (res) {
|
|
||||||
LOCAL_ScannerStack = (char *)TR;
|
|
||||||
TR = old_TR;
|
|
||||||
old_H = H;
|
|
||||||
LOCAL_tokptr = LOCAL_toktide = tokstart;
|
|
||||||
LOCAL_ErrorMessage = NULL;
|
|
||||||
goto repeat_cycle;
|
|
||||||
}
|
|
||||||
LOCAL_ScannerStack = (char *)TR;
|
|
||||||
TR = old_TR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ParserErrorStyle == QUIET_ON_PARSER_ERROR) {
|
|
||||||
/* just fail */
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
|
||||||
return FALSE;
|
|
||||||
} else if (ParserErrorStyle == CONTINUE_ON_PARSER_ERROR) {
|
|
||||||
LOCAL_ErrorMessage = NULL;
|
|
||||||
/* try again */
|
|
||||||
goto repeat_cycle;
|
|
||||||
} else {
|
|
||||||
Term terr = syntax_error(tokstart, inp_stream, &ARG2);
|
|
||||||
if (LOCAL_ErrorMessage == NULL)
|
|
||||||
LOCAL_ErrorMessage = "SYNTAX ERROR";
|
|
||||||
|
|
||||||
if (ParserErrorStyle == EXCEPTION_ON_PARSER_ERROR) {
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
|
||||||
Yap_Error(SYNTAX_ERROR,terr,LOCAL_ErrorMessage);
|
|
||||||
return FALSE;
|
|
||||||
} else /* FAIL ON PARSER ERROR */ {
|
|
||||||
Term t[2];
|
|
||||||
t[0] = terr;
|
|
||||||
t[1] = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
|
||||||
return Yap_unify(ARG6,Yap_MkApplTerm(Yap_MkFunctor(AtomError,2),2,t));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
CurrentModule = OCurrentModule;
|
|
||||||
/* parsing succeeded */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!Yap_unify(t, ARG2))
|
|
||||||
return FALSE;
|
|
||||||
if (store_comments && !Yap_unify(LOCAL_Comments, ARG7))
|
|
||||||
return FALSE;
|
|
||||||
if (AtomOfTerm (Deref (ARG1)) == AtomTrue) {
|
|
||||||
while (TRUE) {
|
|
||||||
CELL *old_H = H;
|
|
||||||
|
|
||||||
if (setjmp(LOCAL_IOBotch) == 0) {
|
|
||||||
v = Yap_VarNames(LOCAL_VarTable, TermNil);
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
tr_fr_ptr old_TR;
|
|
||||||
restore_machine_regs();
|
|
||||||
|
|
||||||
old_TR = TR;
|
|
||||||
/* restart global */
|
|
||||||
H = old_H;
|
|
||||||
TR = (tr_fr_ptr)LOCAL_ScannerStack;
|
|
||||||
Yap_growstack_in_parser(&old_TR, &tokstart, &LOCAL_VarTable);
|
|
||||||
LOCAL_ScannerStack = (char *)TR;
|
|
||||||
TR = old_TR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
|
||||||
return Yap_unify (v, ARG4);
|
|
||||||
} else {
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static Int
|
|
||||||
p_read ( USES_REGS1 )
|
|
||||||
{ /* '$read'(+Flag,?Term,?Module,?Vars,-Pos,-Err) */
|
|
||||||
IOSTREAM *Yap_Scurin(void);
|
|
||||||
|
|
||||||
return do_read(Yap_Scurin(), 7 PASS_REGS);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Int
|
|
||||||
p_read2 ( USES_REGS1 )
|
|
||||||
{ /* '$read2'(+Flag,?Term,?Module,?Vars,-Pos,-Err,+Stream) */
|
|
||||||
IOSTREAM *inp_stream;
|
|
||||||
Int out;
|
|
||||||
Term t8 = Deref(ARG8);
|
|
||||||
|
|
||||||
if (IsVarTerm(t8)) {
|
|
||||||
Yap_Error(INSTANTIATION_ERROR,t8,"read_term/3");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (!IsAtomTerm(t8)) {
|
|
||||||
Yap_Error(TYPE_ERROR_LIST,t8,"read_term/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
if (!(inp_stream = Yap_GetInputStream(AtomOfTerm(t8))) ) {
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
out = do_read(inp_stream, 8 PASS_REGS);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if HAVE_SELECT && FALSE
|
|
||||||
/* stream_select(+Streams,+TimeOut,-Result) */
|
|
||||||
static Int
|
|
||||||
p_stream_select( USES_REGS1 )
|
|
||||||
{
|
|
||||||
Term t1 = Deref(ARG1), t2;
|
|
||||||
fd_set readfds, writefds, exceptfds;
|
|
||||||
struct timeval timeout, *ptime;
|
|
||||||
|
|
||||||
#if _MSC_VER
|
|
||||||
u_int fdmax=0;
|
|
||||||
#else
|
|
||||||
int fdmax=0;
|
|
||||||
#endif
|
|
||||||
Term tout = TermNil, ti, Head;
|
|
||||||
|
|
||||||
if (IsVarTerm(t1)) {
|
|
||||||
Yap_Error(INSTANTIATION_ERROR,t1,"stream_select/3");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (!IsPairTerm(t1)) {
|
|
||||||
Yap_Error(TYPE_ERROR_LIST,t1,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
FD_ZERO(&readfds);
|
|
||||||
FD_ZERO(&writefds);
|
|
||||||
FD_ZERO(&exceptfds);
|
|
||||||
ti = t1;
|
|
||||||
while (ti != TermNil) {
|
|
||||||
#if _MSC_VER
|
|
||||||
u_int fd;
|
|
||||||
#else
|
|
||||||
int fd;
|
|
||||||
#endif
|
|
||||||
int sno;
|
|
||||||
|
|
||||||
Head = HeadOfTerm(ti);
|
|
||||||
sno = CheckStream(Head, Input_Stream_f, "stream_select/3");
|
|
||||||
if (sno < 0)
|
|
||||||
return(FALSE);
|
|
||||||
fd = GetStreamFd(sno);
|
|
||||||
FD_SET(fd, &readfds);
|
|
||||||
UNLOCK(Stream[sno].streamlock);
|
|
||||||
if (fd > fdmax)
|
|
||||||
fdmax = fd;
|
|
||||||
ti = TailOfTerm(ti);
|
|
||||||
}
|
|
||||||
t2 = Deref(ARG2);
|
|
||||||
if (IsVarTerm(t2)) {
|
|
||||||
Yap_Error(INSTANTIATION_ERROR,t2,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
if (IsAtomTerm(t2)) {
|
|
||||||
if (t2 == MkAtomTerm(AtomOff)) {
|
|
||||||
/* wait indefinitely */
|
|
||||||
ptime = NULL;
|
|
||||||
} else {
|
|
||||||
Yap_Error(DOMAIN_ERROR_TIMEOUT_SPEC,t1,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Term t21, t22;
|
|
||||||
|
|
||||||
if (!IsApplTerm(t2) || FunctorOfTerm(t2) != FunctorModule) {
|
|
||||||
Yap_Error(DOMAIN_ERROR_TIMEOUT_SPEC,t2,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
t21 = ArgOfTerm(1, t2);
|
|
||||||
if (IsVarTerm(t21)) {
|
|
||||||
Yap_Error(INSTANTIATION_ERROR,t2,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
if (!IsIntegerTerm(t21)) {
|
|
||||||
Yap_Error(DOMAIN_ERROR_TIMEOUT_SPEC,t2,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
timeout.tv_sec = IntegerOfTerm(t21);
|
|
||||||
if (timeout.tv_sec < 0) {
|
|
||||||
Yap_Error(DOMAIN_ERROR_TIMEOUT_SPEC,t2,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
t22 = ArgOfTerm(2, t2);
|
|
||||||
if (IsVarTerm(t22)) {
|
|
||||||
Yap_Error(INSTANTIATION_ERROR,t2,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
if (!IsIntegerTerm(t22)) {
|
|
||||||
Yap_Error(DOMAIN_ERROR_TIMEOUT_SPEC,t2,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
timeout.tv_usec = IntegerOfTerm(t22);
|
|
||||||
if (timeout.tv_usec < 0) {
|
|
||||||
Yap_Error(DOMAIN_ERROR_TIMEOUT_SPEC,t2,"stream_select/3");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
ptime = &timeout;
|
|
||||||
}
|
|
||||||
/* do the real work */
|
|
||||||
if (select(fdmax+1, &readfds, &writefds, &exceptfds, ptime) < 0) {
|
|
||||||
#if HAVE_STRERROR
|
|
||||||
Yap_Error(SYSTEM_ERROR, TermNil,
|
|
||||||
"stream_select/3 (select: %s)", strerror(errno));
|
|
||||||
#else
|
|
||||||
Yap_Error(SYSTEM_ERROR, TermNil,
|
|
||||||
"stream_select/3 (select)");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
while (t1 != TermNil) {
|
|
||||||
int fd;
|
|
||||||
int sno;
|
|
||||||
|
|
||||||
Head = HeadOfTerm(t1);
|
|
||||||
sno = CheckStream(Head, Input_Stream_f, "stream_select/3");
|
|
||||||
fd = GetStreamFd(sno);
|
|
||||||
if (FD_ISSET(fd, &readfds))
|
|
||||||
tout = MkPairTerm(Head,tout);
|
|
||||||
else
|
|
||||||
tout = MkPairTerm(TermNil,tout);
|
|
||||||
UNLOCK(Stream[sno].streamlock);
|
|
||||||
t1 = TailOfTerm(t1);
|
|
||||||
}
|
|
||||||
/* we're done, just pass the info back */
|
|
||||||
return(Yap_unify(ARG3,tout));
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_change_type_of_char ( USES_REGS1 )
|
p_change_type_of_char ( USES_REGS1 )
|
||||||
{ /* change_type_of_char(+char,+type) */
|
{ /* change_type_of_char(+char,+type) */
|
||||||
@ -1282,8 +928,6 @@ Yap_InitIOPreds(void)
|
|||||||
/* here the Input/Output predicates */
|
/* here the Input/Output predicates */
|
||||||
Yap_InitCPred ("$set_read_error_handler", 1, p_set_read_error_handler, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("$set_read_error_handler", 1, p_set_read_error_handler, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("$get_read_error_handler", 1, p_get_read_error_handler, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("$get_read_error_handler", 1, p_get_read_error_handler, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("$read", 7, p_read, SyncPredFlag|UserCPredFlag);
|
|
||||||
Yap_InitCPred ("$read", 8, p_read2, SyncPredFlag|UserCPredFlag);
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Yap_InitCPred ("write_string", 2, p_write_string, SyncPredFlag|UserCPredFlag);
|
Yap_InitCPred ("write_string", 2, p_write_string, SyncPredFlag|UserCPredFlag);
|
||||||
#endif
|
#endif
|
||||||
|
@ -865,9 +865,9 @@ char *
|
|||||||
Yap_TermToString(Term t, char *s, size_t sz, size_t *length, int *encoding, int flags)
|
Yap_TermToString(Term t, char *s, size_t sz, size_t *length, int *encoding, int flags)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Int l;
|
Int l, CurSlot;
|
||||||
|
|
||||||
Yap_StartSlots( PASS_REGS1 );
|
CurSlot = Yap_StartSlots( PASS_REGS1 );
|
||||||
l = Yap_InitSlot(t PASS_REGS );
|
l = Yap_InitSlot(t PASS_REGS );
|
||||||
|
|
||||||
{ IOENC encodings[3];
|
{ IOENC encodings[3];
|
||||||
@ -910,8 +910,6 @@ Yap_TermToString(Term t, char *s, size_t sz, size_t *length, int *encoding, int
|
|||||||
strncpy(bf,buf,*length+1);
|
strncpy(bf,buf,*length+1);
|
||||||
r = bf;
|
r = bf;
|
||||||
}
|
}
|
||||||
/* go away */
|
|
||||||
Yap_CloseSlots( PASS_REGS1 );
|
|
||||||
return r;
|
return r;
|
||||||
} else
|
} else
|
||||||
{ Sclose(fd);
|
{ Sclose(fd);
|
||||||
@ -922,7 +920,7 @@ Yap_TermToString(Term t, char *s, size_t sz, size_t *length, int *encoding, int
|
|||||||
Sfree(r);
|
Sfree(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Yap_CloseSlots( PASS_REGS1 );
|
LOCAL_CurSlot = CurSlot;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
C/qlyr.c
1
C/qlyr.c
@ -1058,7 +1058,6 @@ p_read_program( USES_REGS1 )
|
|||||||
read_module(stream);
|
read_module(stream);
|
||||||
Sclose( stream );
|
Sclose( stream );
|
||||||
/* back to the top level we go */
|
/* back to the top level we go */
|
||||||
Yap_CloseSlots(PASS_REGS1);
|
|
||||||
ReInitProlog();
|
ReInitProlog();
|
||||||
Yap_RestartYap( 3 );
|
Yap_RestartYap( 3 );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
6
C/save.c
6
C/save.c
@ -617,7 +617,7 @@ do_save(int mode USES_REGS) {
|
|||||||
static Int
|
static Int
|
||||||
p_save2( USES_REGS1 )
|
p_save2( USES_REGS1 )
|
||||||
{
|
{
|
||||||
Int res;
|
Int res, CurSlot;
|
||||||
|
|
||||||
Term t;
|
Term t;
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
@ -640,9 +640,9 @@ p_save2( USES_REGS1 )
|
|||||||
if (!Yap_unify(ARG2,MkIntTerm(1)))
|
if (!Yap_unify(ARG2,MkIntTerm(1)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
which_save = 2;
|
which_save = 2;
|
||||||
Yap_StartSlots( PASS_REGS1 );
|
CurSlot = Yap_StartSlots( PASS_REGS1 );
|
||||||
res = do_save(DO_EVERYTHING PASS_REGS);
|
res = do_save(DO_EVERYTHING PASS_REGS);
|
||||||
Yap_CloseSlots( PASS_REGS1 );
|
LOCAL_CurSlot = CurSlot;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user