state
This commit is contained in:
@@ -209,8 +209,14 @@ static const param_t read_defs[] = {READ_DEFS()};
|
||||
|
||||
static Term add_output(Term t, Term tail) {
|
||||
Term topt = Yap_MkNewApplTerm(Yap_MkFunctor(AtomOutput, 1), 1);
|
||||
tail = Deref(tail);
|
||||
if (IsVarTerm(tail)) {
|
||||
Yap_ThrowError(INSTANTIATION_ERROR, tail, "unbound list of options");
|
||||
}
|
||||
Yap_unify(t, ArgOfTerm(1, topt));
|
||||
if (IsPairTerm(tail) || tail == TermNil) {
|
||||
if (IsVarTerm(tail)) {
|
||||
Yap_ThrowError(INSTANTIATION_ERROR, tail, "unbound list of options");
|
||||
} else if (IsPairTerm(tail) || tail == TermNil) {
|
||||
return MkPairTerm(topt, tail);
|
||||
} else {
|
||||
return MkPairTerm(topt, MkPairTerm(tail, TermNil));
|
||||
@@ -220,7 +226,9 @@ static Term add_output(Term t, Term tail) {
|
||||
static Term add_names(Term t, Term tail) {
|
||||
Term topt = Yap_MkNewApplTerm(Yap_MkFunctor(AtomVariableNames, 1), 1);
|
||||
Yap_unify(t, ArgOfTerm(1, topt));
|
||||
if (IsPairTerm(tail) || tail == TermNil) {
|
||||
if (IsVarTerm(tail)) {
|
||||
Yap_ThrowError(INSTANTIATION_ERROR, tail, "unbound list of options");
|
||||
} else if (IsPairTerm(tail) || tail == TermNil) {
|
||||
return MkPairTerm(topt, tail);
|
||||
} else {
|
||||
return MkPairTerm(topt, MkPairTerm(tail, TermNil));
|
||||
@@ -230,7 +238,9 @@ static Term add_names(Term t, Term tail) {
|
||||
static Term add_priority(Term t, Term tail) {
|
||||
Term topt = Yap_MkNewApplTerm(Yap_MkFunctor(AtomPriority, 1), 1);
|
||||
Yap_unify(t, ArgOfTerm(1, topt));
|
||||
if (IsPairTerm(tail) || tail == TermNil) {
|
||||
if (IsVarTerm(tail)) {
|
||||
Yap_ThrowError(INSTANTIATION_ERROR, tail, "unbound list of options");
|
||||
} else if (IsPairTerm(tail) || tail == TermNil) {
|
||||
return MkPairTerm(topt, tail);
|
||||
} else {
|
||||
return MkPairTerm(topt, MkPairTerm(tail, TermNil));
|
||||
@@ -342,11 +352,11 @@ static Term syntax_error(TokEntry *errtok, int sno, Term cmod, Int newpos) {
|
||||
if (!LOCAL_ErrorMessage) {
|
||||
LOCAL_ErrorMessage = "syntax error";
|
||||
}
|
||||
tm = MkStringTerm(LOCAL_ErrorMessage);
|
||||
tm = MkStringTerm(LOCAL_ErrorMessage);
|
||||
{
|
||||
char *s = malloc( strlen(LOCAL_ErrorMessage)+1);
|
||||
strcpy(s,LOCAL_ErrorMessage );
|
||||
Yap_local.ActiveError->errorMsg = s;
|
||||
char *s = malloc(strlen(LOCAL_ErrorMessage) + 1);
|
||||
strcpy(s, LOCAL_ErrorMessage);
|
||||
Yap_local.ActiveError->errorMsg = s;
|
||||
}
|
||||
if (GLOBAL_Stream[sno].status & Seekable_Stream_f) {
|
||||
if (errpos && newpos >= 0) {
|
||||
@@ -469,10 +479,9 @@ static xarg *setReadEnv(Term opts, FEnv *fe, struct renv *re, int inp_stream) {
|
||||
LOCAL_VarTable = NULL;
|
||||
LOCAL_AnonVarTable = NULL;
|
||||
fe->enc = GLOBAL_Stream[inp_stream].encoding;
|
||||
xarg *args = Yap_ArgListToVector(opts, read_defs, READ_END);
|
||||
xarg *args =
|
||||
Yap_ArgListToVector(opts, read_defs, READ_END, DOMAIN_ERROR_READ_OPTION);
|
||||
if (args == NULL) {
|
||||
if (LOCAL_Error_TYPE == DOMAIN_ERROR_GENERIC_ARGUMENT)
|
||||
LOCAL_Error_TYPE = DOMAIN_ERROR_READ_OPTION;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -541,9 +550,9 @@ static xarg *setReadEnv(Term opts, FEnv *fe, struct renv *re, int inp_stream) {
|
||||
if (args[READ_PRIORITY].used) {
|
||||
re->prio = IntegerOfTerm(args[READ_PRIORITY].tvalue);
|
||||
if (re->prio > GLOBAL_MaxPriority) {
|
||||
Yap_Error(DOMAIN_ERROR_OPERATOR_PRIORITY, opts,
|
||||
"max priority in Prolog is %d, not %ld", GLOBAL_MaxPriority,
|
||||
re->prio);
|
||||
Yap_ThrowError(DOMAIN_ERROR_OPERATOR_PRIORITY, opts,
|
||||
"max priority in Prolog is %d, not %ld",
|
||||
GLOBAL_MaxPriority, re->prio);
|
||||
}
|
||||
} else {
|
||||
re->prio = LOCAL_default_priority;
|
||||
@@ -998,10 +1007,9 @@ Term Yap_read_term(int sno, Term opts, bool clause) {
|
||||
int emacs_cares = FALSE;
|
||||
#endif
|
||||
|
||||
yap_error_descriptor_t new;
|
||||
yap_error_descriptor_t *new = malloc(sizeof *new);
|
||||
|
||||
|
||||
bool err = Yap_pushErrorContext(true,&new);
|
||||
bool err = Yap_pushErrorContext(true, new);
|
||||
int lvl = push_text_stack();
|
||||
parser_state_t state = YAP_START_PARSING;
|
||||
while (true) {
|
||||
@@ -1010,8 +1018,8 @@ Term Yap_read_term(int sno, Term opts, bool clause) {
|
||||
state = initParser(opts, &fe, &re, sno, clause);
|
||||
if (state == YAP_PARSING_FINISHED) {
|
||||
pop_text_stack(lvl);
|
||||
Yap_popErrorContext(err, true);
|
||||
return 0;
|
||||
Yap_popErrorContext(err, true);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case YAP_SCANNING:
|
||||
@@ -1050,7 +1058,7 @@ Term Yap_read_term(int sno, Term opts, bool clause) {
|
||||
}
|
||||
}
|
||||
}
|
||||
Yap_popErrorContext(err,true);
|
||||
Yap_popErrorContext(err, true);
|
||||
pop_text_stack(lvl);
|
||||
return 0;
|
||||
}
|
||||
@@ -1104,10 +1112,9 @@ static const param_t read_clause_defs[] = {READ_CLAUSE_DEFS()};
|
||||
static xarg *setClauseReadEnv(Term opts, FEnv *fe, struct renv *re, int sno) {
|
||||
CACHE_REGS
|
||||
|
||||
xarg *args = Yap_ArgListToVector(opts, read_clause_defs, READ_CLAUSE_END);
|
||||
xarg *args = Yap_ArgListToVector(opts, read_clause_defs, READ_CLAUSE_END,
|
||||
DOMAIN_ERROR_READ_OPTION);
|
||||
if (args == NULL) {
|
||||
if (LOCAL_Error_TYPE == DOMAIN_ERROR_GENERIC_ARGUMENT)
|
||||
LOCAL_Error_TYPE = DOMAIN_ERROR_READ_OPTION;
|
||||
return NULL;
|
||||
}
|
||||
if (args[READ_CLAUSE_OUTPUT].used) {
|
||||
@@ -1387,32 +1394,33 @@ static Int style_checker(USES_REGS1) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Term Yap_BufferToTerm(const char *s, Term opts) {
|
||||
Term rval;
|
||||
int sno;
|
||||
encoding_t l = ENC_ISO_UTF8;
|
||||
sno = Yap_open_buf_read_stream((char *)s, strlen((const char *)s), &l,
|
||||
MEM_BUF_USER);
|
||||
Term Yap_BufferToTerm(const char *s, Term opts) {
|
||||
Term rval;
|
||||
int sno;
|
||||
encoding_t l = ENC_ISO_UTF8;
|
||||
sno = Yap_open_buf_read_stream((char *)s, strlen((const char *)s), &l,
|
||||
MEM_BUF_USER);
|
||||
|
||||
GLOBAL_Stream[sno].status |= CloseOnException_Stream_f;
|
||||
rval = Yap_read_term(sno, opts, false);
|
||||
Yap_CloseStream(sno);
|
||||
return rval;
|
||||
GLOBAL_Stream[sno].status |= CloseOnException_Stream_f;
|
||||
rval = Yap_read_term(sno, opts, false);
|
||||
Yap_CloseStream(sno);
|
||||
return rval;
|
||||
}
|
||||
|
||||
Term Yap_UBufferToTerm(const unsigned char *s, Term opts) {
|
||||
Term rval;
|
||||
int sno;
|
||||
encoding_t l = ENC_ISO_UTF8;
|
||||
sno = Yap_open_buf_read_stream((char *)s, strlen((const char *)s), &l,
|
||||
MEM_BUF_USER);
|
||||
GLOBAL_Stream[sno].status |= CloseOnException_Stream_f;
|
||||
rval = Yap_read_term(sno, opts, false);
|
||||
Yap_CloseStream(sno);
|
||||
return rval;
|
||||
Term Yap_UBufferToTerm(const unsigned char *s, Term opts) {
|
||||
Term rval;
|
||||
int sno;
|
||||
encoding_t l = ENC_ISO_UTF8;
|
||||
sno = Yap_open_buf_read_stream((char *)s, strlen((const char *)s), &l,
|
||||
MEM_BUF_USER);
|
||||
GLOBAL_Stream[sno].status |= CloseOnException_Stream_f;
|
||||
rval = Yap_read_term(sno, opts, false);
|
||||
Yap_CloseStream(sno);
|
||||
return rval;
|
||||
}
|
||||
|
||||
X_API Term Yap_BufferToTermWithPrioBindings(const char *s, Term opts, Term bindings, size_t len,
|
||||
X_API Term Yap_BufferToTermWithPrioBindings(const char *s, Term opts,
|
||||
Term bindings, size_t len,
|
||||
int prio) {
|
||||
CACHE_REGS
|
||||
Term ctl;
|
||||
|
Reference in New Issue
Block a user