bunch of fixes for YAP's own IO
This commit is contained in:
parent
91d6faabc1
commit
f3b84af062
20
CXX/yapi.hh
20
CXX/yapi.hh
@ -18,6 +18,8 @@
|
|||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
// Bad export from Python
|
// Bad export from Python
|
||||||
#ifdef HAVE_STAT
|
#ifdef HAVE_STAT
|
||||||
#undef HAVE_STAT
|
#undef HAVE_STAT
|
||||||
@ -67,25 +69,19 @@ extern "C" {
|
|||||||
// taken from yap_structs.h
|
// taken from yap_structs.h
|
||||||
#include "iopreds.h"
|
#include "iopreds.h"
|
||||||
|
|
||||||
extern void YAP_UserCPredicate(const char *, YAP_UserCPred, YAP_Arity arity);
|
extern void YAP_UserCPredicate(const char *, YAP_UserCPred, YAP_Arity arity);
|
||||||
|
|
||||||
/* void UserCPredicateWithArgs(const char *name, int *fn(), unsigned int arity) */
|
/* void UserCPredicateWithArgs(const char *name, int *fn(), unsigned int arity) */
|
||||||
extern void YAP_UserCPredicateWithArgs(const char *, YAP_UserCPred, YAP_Arity, YAP_Term);
|
extern void YAP_UserCPredicateWithArgs(const char *, YAP_UserCPred, YAP_Arity, YAP_Term);
|
||||||
|
|
||||||
/* void UserBackCPredicate(const char *name, int *init(), int *cont(), int
|
/* void UserBackCPredicate(const char *name, int *init(), int *cont(), int
|
||||||
arity, int extra) */
|
arity, int extra) */
|
||||||
extern void YAP_UserBackCPredicate(const char *, YAP_UserCPred, YAP_UserCPred, YAP_Arity, unsigned int);
|
extern void YAP_UserBackCPredicate(const char *, YAP_UserCPred, YAP_UserCPred, YAP_Arity, unsigned int);
|
||||||
|
|
||||||
extern Term Yap_StringToTerm(const char *s, size_t len, encoding_t enc, int prio, Term *bindings_p);
|
|
||||||
|
|
||||||
|
|
||||||
|
extern Term Yap_StringToTerm(const char *s, size_t len, encoding_t enc, int prio, Term *bindings_p);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//#include <vector>
|
|
||||||
|
|
||||||
|
|
||||||
class YAPEngine;
|
class YAPEngine;
|
||||||
class YAPAtom;
|
class YAPAtom;
|
||||||
class YAPFunctor;
|
class YAPFunctor;
|
||||||
|
@ -118,6 +118,12 @@ public:
|
|||||||
};
|
};
|
||||||
/// current module for the engine
|
/// current module for the engine
|
||||||
YAPModule currentModule( ) { return YAPModule( ) ; }
|
YAPModule currentModule( ) { return YAPModule( ) ; }
|
||||||
|
/// current directory for the engine
|
||||||
|
const char *currentDir( ) {
|
||||||
|
char dir[1024];
|
||||||
|
std::string s = Yap_getcwd(dir, 1024-1);
|
||||||
|
return s.c_str();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* YAPQ_HH */
|
#endif /* YAPQ_HH */
|
||||||
|
@ -59,6 +59,7 @@ INLINE_ONLY inline EXTERN Term ArgOfTerm (int i, Term t);
|
|||||||
|
|
||||||
INLINE_ONLY inline EXTERN Term
|
INLINE_ONLY inline EXTERN Term
|
||||||
ArgOfTerm (int i, Term t)
|
ArgOfTerm (int i, Term t)
|
||||||
|
|
||||||
{
|
{
|
||||||
return (Term) (Derefa (RepAppl (t) + (i)));
|
return (Term) (Derefa (RepAppl (t) + (i)));
|
||||||
}
|
}
|
||||||
|
@ -218,6 +218,7 @@ CELL *Yap_GetFromArena(Term *,UInt,UInt);
|
|||||||
void Yap_InitGlobals(void);
|
void Yap_InitGlobals(void);
|
||||||
Term Yap_SaveTerm(Term);
|
Term Yap_SaveTerm(Term);
|
||||||
Term Yap_SetGlobalVal(Atom, Term);
|
Term Yap_SetGlobalVal(Atom, Term);
|
||||||
|
Term Yap_GetGlobal(Atom);
|
||||||
Int Yap_DeleteGlobal(Atom);
|
Int Yap_DeleteGlobal(Atom);
|
||||||
void Yap_AllocateDefaultArena(Int, Int, int);
|
void Yap_AllocateDefaultArena(Int, Int, int);
|
||||||
|
|
||||||
@ -327,8 +328,8 @@ void Yap_InitMPE(void);
|
|||||||
|
|
||||||
|
|
||||||
/* other.c */
|
/* other.c */
|
||||||
Term Yap_MkApplTerm(Functor,unsigned int,Term *);
|
Term Yap_MkApplTerm(Functor,arity_t,const Term *);
|
||||||
Term Yap_MkNewApplTerm(Functor,unsigned int);
|
Term Yap_MkNewApplTerm(Functor,arity_t);
|
||||||
Term Yap_MkNewPairTerm(void);
|
Term Yap_MkNewPairTerm(void);
|
||||||
Term Yap_Globalise(Term);
|
Term Yap_Globalise(Term);
|
||||||
|
|
||||||
|
@ -59,9 +59,6 @@ include_directories(../../CXX)
|
|||||||
|
|
||||||
qt5_use_modules(qtyap Widgets)
|
qt5_use_modules(qtyap Widgets)
|
||||||
|
|
||||||
qt5_use_modules(qtyap Core SerialPort)
|
|
||||||
#target_link_libraries(qtyap QtSerialPort)
|
|
||||||
|
|
||||||
|
|
||||||
install(TARGETS qtyap
|
install(TARGETS qtyap
|
||||||
RUNTIME DESTINATION ${bindir}
|
RUNTIME DESTINATION ${bindir}
|
||||||
|
@ -100,13 +100,14 @@ void SettingsDialog::apply()
|
|||||||
|
|
||||||
void SettingsDialog::checkCustomBaudRatePolicy(int idx)
|
void SettingsDialog::checkCustomBaudRatePolicy(int idx)
|
||||||
{
|
{
|
||||||
bool isCustomBaudRate = !ui->baudRateBox->itemData(idx).isValid();
|
/* bool isCustomBaudRate = !ui->baudRateBox->itemData(idx).isValid();
|
||||||
ui->baudRateBox->setEditable(isCustomBaudRate);
|
ui->baudRateBox->setEditable(isCustomBaudRate);
|
||||||
if (isCustomBaudRate) {
|
if (isCustomBaudRate) {
|
||||||
ui->baudRateBox->clearEditText();
|
ui->baudRateBox->clearEditText();
|
||||||
QLineEdit *edit = ui->baudRateBox->lineEdit();
|
QLineEdit *edit = ui->baudRateBox->lineEdit();
|
||||||
edit->setValidator(intValidator);
|
edit->setValidator(intValidator);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsDialog::checkCustomDevicePathPolicy(int idx)
|
void SettingsDialog::checkCustomDevicePathPolicy(int idx)
|
||||||
@ -119,7 +120,7 @@ void SettingsDialog::checkCustomDevicePathPolicy(int idx)
|
|||||||
|
|
||||||
void SettingsDialog::fillPortsParameters()
|
void SettingsDialog::fillPortsParameters()
|
||||||
{
|
{
|
||||||
ui->baudRateBox->addItem(QStringLiteral("9600"), QSerialPort::Baud9600);
|
/* ui->baudRateBox->addItem(QStringLiteral("9600"), QSerialPort::Baud9600);
|
||||||
ui->baudRateBox->addItem(QStringLiteral("19200"), QSerialPort::Baud19200);
|
ui->baudRateBox->addItem(QStringLiteral("19200"), QSerialPort::Baud19200);
|
||||||
ui->baudRateBox->addItem(QStringLiteral("38400"), QSerialPort::Baud38400);
|
ui->baudRateBox->addItem(QStringLiteral("38400"), QSerialPort::Baud38400);
|
||||||
ui->baudRateBox->addItem(QStringLiteral("115200"), QSerialPort::Baud115200);
|
ui->baudRateBox->addItem(QStringLiteral("115200"), QSerialPort::Baud115200);
|
||||||
@ -146,11 +147,12 @@ void SettingsDialog::fillPortsParameters()
|
|||||||
ui->flowControlBox->addItem(tr("None"), QSerialPort::NoFlowControl);
|
ui->flowControlBox->addItem(tr("None"), QSerialPort::NoFlowControl);
|
||||||
ui->flowControlBox->addItem(tr("RTS/CTS"), QSerialPort::HardwareControl);
|
ui->flowControlBox->addItem(tr("RTS/CTS"), QSerialPort::HardwareControl);
|
||||||
ui->flowControlBox->addItem(tr("XON/XOFF"), QSerialPort::SoftwareControl);
|
ui->flowControlBox->addItem(tr("XON/XOFF"), QSerialPort::SoftwareControl);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsDialog::fillPortsInfo()
|
void SettingsDialog::fillPortsInfo()
|
||||||
{
|
{
|
||||||
ui->serialPortInfoListBox->clear();
|
/* ui->serialPortInfoListBox->clear();
|
||||||
QString description;
|
QString description;
|
||||||
QString manufacturer;
|
QString manufacturer;
|
||||||
QString serialNumber;
|
QString serialNumber;
|
||||||
@ -171,12 +173,13 @@ void SettingsDialog::fillPortsInfo()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ui->serialPortInfoListBox->addItem(tr("Custom"));
|
ui->serialPortInfoListBox->addItem(tr("Custom"));
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsDialog::updateSettings()
|
void SettingsDialog::updateSettings()
|
||||||
{
|
{
|
||||||
currentSettings.name = ui->serialPortInfoListBox->currentText();
|
currentSettings.name = ui->serialPortInfoListBox->currentText();
|
||||||
|
/*
|
||||||
if (ui->baudRateBox->currentIndex() == 4) {
|
if (ui->baudRateBox->currentIndex() == 4) {
|
||||||
currentSettings.baudRate = ui->baudRateBox->currentText().toInt();
|
currentSettings.baudRate = ui->baudRateBox->currentText().toInt();
|
||||||
} else {
|
} else {
|
||||||
@ -201,5 +204,5 @@ void SettingsDialog::updateSettings()
|
|||||||
ui->flowControlBox->itemData(ui->flowControlBox->currentIndex()).toInt());
|
ui->flowControlBox->itemData(ui->flowControlBox->currentIndex()).toInt());
|
||||||
currentSettings.stringFlowControl = ui->flowControlBox->currentText();
|
currentSettings.stringFlowControl = ui->flowControlBox->currentText();
|
||||||
|
|
||||||
currentSettings.localEchoEnabled = ui->localEchoCheckBox->isChecked();
|
currentSettings.localEchoEnabled = ui->localEchoCheckBox->isChecked();*/
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,9 @@ struct swi_mutex* WithMutex void
|
|||||||
|
|
||||||
// streams
|
// streams
|
||||||
struct stream_desc* Stream void
|
struct stream_desc* Stream void
|
||||||
|
#if defined(THREADS)
|
||||||
|
lockvar StreamDescLock MkLock
|
||||||
|
#endif
|
||||||
|
|
||||||
// access to yap initial arguments
|
// access to yap initial arguments
|
||||||
char** argv void
|
char** argv void
|
||||||
|
@ -190,6 +190,7 @@ struct pred_entry *wake_up_code WakeUpCode MkPred AtomWakeUpGoal 2 PROLOG_MODU
|
|||||||
#endif
|
#endif
|
||||||
struct pred_entry *pred_goal_expansion PredGoalExpansion MkPred FunctorGoalExpansion USER_MODULE
|
struct pred_entry *pred_goal_expansion PredGoalExpansion MkPred FunctorGoalExpansion USER_MODULE
|
||||||
struct pred_entry *pred_meta_call PredMetaCall MkPred FunctorMetaCall PROLOG_MODULE
|
struct pred_entry *pred_meta_call PredMetaCall MkPred FunctorMetaCall PROLOG_MODULE
|
||||||
|
struct pred_entry *pred_trace_meta_call PredTraceMetaCall MkPred FunctorTraceMetaCall PROLOG_MODULE
|
||||||
struct pred_entry *pred_dollar_catch PredDollarCatch MkPred FunctorCatch PROLOG_MODULE
|
struct pred_entry *pred_dollar_catch PredDollarCatch MkPred FunctorCatch PROLOG_MODULE
|
||||||
struct pred_entry *pred_recorded_with_key PredRecordedWithKey MkPred FunctorRecordedWithKey PROLOG_MODULE
|
struct pred_entry *pred_recorded_with_key PredRecordedWithKey MkPred FunctorRecordedWithKey PROLOG_MODULE
|
||||||
struct pred_entry *pred_log_upd_clause PredLogUpdClause MkPred FunctorDoLogUpdClause PROLOG_MODULE
|
struct pred_entry *pred_log_upd_clause PredLogUpdClause MkPred FunctorDoLogUpdClause PROLOG_MODULE
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
:- use_module(library(lineutils),
|
:- use_module(library(lineutils),
|
||||||
[file_filter_with_initialization/5,
|
[file_filter_with_init/5,
|
||||||
split/3,
|
split/3,
|
||||||
glue/3]).
|
glue/3]).
|
||||||
|
|
||||||
@ -16,6 +16,9 @@
|
|||||||
|
|
||||||
:- style_check(all).
|
:- style_check(all).
|
||||||
|
|
||||||
|
file_filter_with_initialization(A,B,C,D,E) :-
|
||||||
|
file_filter_with_init(A,B,C,D,E).
|
||||||
|
|
||||||
main :-
|
main :-
|
||||||
warning(Warning),
|
warning(Warning),
|
||||||
%file_filter_with_initialization('misc/HEAPFIELDS','H/hstruct.h',gen_struct,Warning,['hstruct.h','HEAPFIELDS']),
|
%file_filter_with_initialization('misc/HEAPFIELDS','H/hstruct.h',gen_struct,Warning,['hstruct.h','HEAPFIELDS']),
|
||||||
|
@ -269,6 +269,7 @@ Yap_DeleteAliases (int sno)
|
|||||||
new_aliasp++;
|
new_aliasp++;
|
||||||
} else {
|
} else {
|
||||||
LOCAL_NOfFileAliases--;
|
LOCAL_NOfFileAliases--;
|
||||||
|
// printf("RM %p at %d/%d %d\n", new_aliasp->name, new_aliasp-LOCAL_FileAliases, new_aliasp->alias_stream, sno);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* avoid holes in alias array */
|
/* avoid holes in alias array */
|
||||||
@ -279,7 +280,7 @@ Yap_DeleteAliases (int sno)
|
|||||||
new_aliasp++;
|
new_aliasp++;
|
||||||
}
|
}
|
||||||
aliasp++;
|
aliasp++;
|
||||||
}
|
}/////
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if name is an alias */
|
/* check if name is an alias */
|
||||||
@ -365,10 +366,11 @@ Yap_RemoveAlias (Atom arg, int sno)
|
|||||||
}
|
}
|
||||||
aliasp++;
|
aliasp++;
|
||||||
}
|
}
|
||||||
|
//printf("RM %p at %d\n", arg, aliasp-LOCAL_FileAliases);
|
||||||
/* we have not found an alias neither a hole */
|
/* we have not found an alias neither a hole */
|
||||||
if (aliasp == LOCAL_FileAliases+LOCAL_SzOfFileAliases)
|
if (aliasp == LOCAL_FileAliases+LOCAL_SzOfFileAliases)
|
||||||
ExtendAliasArray();
|
ExtendAliasArray();
|
||||||
LOCAL_NOfFileAliases++;
|
LOCAL_NOfFileAliases--;
|
||||||
aliasp->name = arg;
|
aliasp->name = arg;
|
||||||
aliasp->alias_stream = sno;
|
aliasp->alias_stream = sno;
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
@ -393,6 +395,7 @@ Yap_AddAlias (Atom arg, int sno)
|
|||||||
if (aliasp == LOCAL_FileAliases+LOCAL_SzOfFileAliases)
|
if (aliasp == LOCAL_FileAliases+LOCAL_SzOfFileAliases)
|
||||||
ExtendAliasArray();
|
ExtendAliasArray();
|
||||||
LOCAL_NOfFileAliases++;
|
LOCAL_NOfFileAliases++;
|
||||||
|
// printf("ADD %p at %d\n", arg, aliasp-LOCAL_FileAliases);
|
||||||
aliasp->name = arg;
|
aliasp->name = arg;
|
||||||
aliasp->alias_stream = sno;
|
aliasp->alias_stream = sno;
|
||||||
return true;
|
return true;
|
||||||
|
@ -105,12 +105,12 @@ char *
|
|||||||
|
|
||||||
if (sno < 0)
|
if (sno < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
LOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
LOCAL_c_output_stream = sno;
|
LOCAL_c_output_stream = sno;
|
||||||
if (encp)
|
if (encp)
|
||||||
GLOBAL_Stream[sno].encoding = encp;
|
GLOBAL_Stream[sno].encoding = encp;
|
||||||
Yap_plwrite (t, GLOBAL_Stream+sno, 0, flags, 1200);
|
Yap_plwrite (t, GLOBAL_Stream+sno, 0, flags, 1200);
|
||||||
s[GLOBAL_Stream[sno].u.mem_string.pos] = '\0';
|
s[GLOBAL_Stream[sno].u.mem_string.pos] = '\0';
|
||||||
LOCK(GLOBAL_Stream[sno].streamlock);
|
|
||||||
GLOBAL_Stream[sno].status = Free_Stream_f;
|
GLOBAL_Stream[sno].status = Free_Stream_f;
|
||||||
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
LOCAL_c_output_stream = old_output_stream;
|
LOCAL_c_output_stream = old_output_stream;
|
||||||
|
@ -935,6 +935,7 @@ if (IsVarTerm(tin)) {
|
|||||||
}
|
}
|
||||||
UNLOCK(GLOBAL_Stream[output_stream].streamlock);
|
UNLOCK(GLOBAL_Stream[output_stream].streamlock);
|
||||||
out = Yap_Execute( Deref(ARG2) PASS_REGS);
|
out = Yap_Execute( Deref(ARG2) PASS_REGS);
|
||||||
|
LOCK(GLOBAL_Stream[output_stream].streamlock);
|
||||||
LOCAL_c_output_stream = old_out;
|
LOCAL_c_output_stream = old_out;
|
||||||
if (mem_stream) {
|
if (mem_stream) {
|
||||||
Term tat;
|
Term tat;
|
||||||
|
20
os/iopreds.c
20
os/iopreds.c
@ -267,7 +267,7 @@ Term Yap_StreamUserName(int sno)
|
|||||||
}
|
}
|
||||||
if ((atname = StreamName(sno)))
|
if ((atname = StreamName(sno)))
|
||||||
return atname;
|
return atname;
|
||||||
return 0;
|
return TermNil;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -409,7 +409,7 @@ void
|
|||||||
Yap_DebugPlWrite(Term t)
|
Yap_DebugPlWrite(Term t)
|
||||||
{
|
{
|
||||||
if (t != 0)
|
if (t != 0)
|
||||||
Yap_plwrite(t, NULL, 0, 0, 1200);
|
Yap_plwrite(t,GLOBAL_Stream+2, 0, 0, 1200);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1671,7 +1671,9 @@ Yap_OpenStream(FILE *fd, char *name, Term file_name, int flags)
|
|||||||
sname = AtomUserOut;
|
sname = AtomUserOut;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LOCK(GLOBAL_StreamDescLock);
|
||||||
if ((sno = Yap_CheckAlias(sname)) == -1) {
|
if ((sno = Yap_CheckAlias(sname)) == -1) {
|
||||||
|
UNLOCK(GLOBAL_StreamDescLock);
|
||||||
Yap_Error(EXISTENCE_ERROR_STREAM, arg, msg);
|
Yap_Error(EXISTENCE_ERROR_STREAM, arg, msg);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1684,15 +1686,17 @@ Yap_OpenStream(FILE *fd, char *name, Term file_name, int flags)
|
|||||||
if (sno < 0)
|
if (sno < 0)
|
||||||
{
|
{
|
||||||
Yap_Error(DOMAIN_ERROR_STREAM_OR_ALIAS, arg, msg);
|
Yap_Error(DOMAIN_ERROR_STREAM_OR_ALIAS, arg, msg);
|
||||||
|
UNLOCK(GLOBAL_StreamDescLock);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (GLOBAL_Stream[sno].status & Free_Stream_f)
|
||||||
|
{
|
||||||
|
PlIOError(EXISTENCE_ERROR_STREAM, arg, msg);
|
||||||
|
UNLOCK(GLOBAL_StreamDescLock);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
LOCK(GLOBAL_Stream[sno].streamlock);
|
LOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
if (GLOBAL_Stream[sno].status & Free_Stream_f)
|
UNLOCK(GLOBAL_StreamDescLock);
|
||||||
{
|
|
||||||
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
|
||||||
PlIOError(EXISTENCE_ERROR_STREAM, arg, msg);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
if ((GLOBAL_Stream[sno].status & kind) == 0)
|
if ((GLOBAL_Stream[sno].status & kind) == 0)
|
||||||
{
|
{
|
||||||
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
|
@ -160,6 +160,9 @@ typedef struct stream_desc
|
|||||||
Atom name;
|
Atom name;
|
||||||
Term user_name;
|
Term user_name;
|
||||||
FILE* file;
|
FILE* file;
|
||||||
|
// useful in memory streams
|
||||||
|
char *nbuf;
|
||||||
|
size_t nsize;
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
#define PLGETC_BUF_SIZE 4096
|
#define PLGETC_BUF_SIZE 4096
|
||||||
@ -405,8 +408,8 @@ CACHE_REGS
|
|||||||
cpos--;
|
cpos--;
|
||||||
}
|
}
|
||||||
sargs[0] = MkIntegerTerm (cpos);
|
sargs[0] = MkIntegerTerm (cpos);
|
||||||
sargs[1] = MkIntegerTerm (LOCAL_StartLine = GLOBAL_Stream[sno].linecount);
|
sargs[1] = MkIntegerTerm (LOCAL_StartLineCount = GLOBAL_Stream[sno].linecount);
|
||||||
sargs[2] = MkIntegerTerm (GLOBAL_Stream[sno].linepos);
|
sargs[2] = MkIntegerTerm (LOCAL_StartLinePos = GLOBAL_Stream[sno].linepos);
|
||||||
sargs[3] = sargs[4] = MkIntTerm (0);
|
sargs[3] = sargs[4] = MkIntTerm (0);
|
||||||
return Yap_MkApplTerm (FunctorStreamPos, 5, sargs);
|
return Yap_MkApplTerm (FunctorStreamPos, 5, sargs);
|
||||||
}
|
}
|
||||||
|
25
os/mem.c
25
os/mem.c
@ -265,7 +265,7 @@ Yap_open_buf_write_stream(char **nbufp, size_t *ncharsp)
|
|||||||
st->linecount = 1;
|
st->linecount = 1;
|
||||||
Yap_DefaultStreamOps( st );
|
Yap_DefaultStreamOps( st );
|
||||||
#if MAY_WRITE
|
#if MAY_WRITE
|
||||||
st->file = open_memstream(&nbuf, &nchars);
|
st->file = open_memstream(&st->nbuf, &st->nsize);
|
||||||
st->status = Output_Stream_f | InMemory_Stream_f|Seekable_Stream_f;
|
st->status = Output_Stream_f | InMemory_Stream_f|Seekable_Stream_f;
|
||||||
#else
|
#else
|
||||||
st->u.mem_string.pos = 0;
|
st->u.mem_string.pos = 0;
|
||||||
@ -319,7 +319,15 @@ open_mem_write_stream (USES_REGS1) /* $open_mem_write_stream(-Stream) */
|
|||||||
memHandle *
|
memHandle *
|
||||||
Yap_MemExportStreamPtrs( int sno )
|
Yap_MemExportStreamPtrs( int sno )
|
||||||
{
|
{
|
||||||
|
#if MAY_WRITE
|
||||||
|
if (fflush(GLOBAL_Stream[sno].file) == 0) {
|
||||||
|
GLOBAL_Stream[sno].nbuf[GLOBAL_Stream[sno].nsize] = '\0';
|
||||||
|
return (memHandle *)GLOBAL_Stream[sno].nbuf;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
#else
|
||||||
return &GLOBAL_Stream[sno].u.mem_string;
|
return &GLOBAL_Stream[sno].u.mem_string;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -327,17 +335,28 @@ static Int
|
|||||||
peek_mem_write_stream ( USES_REGS1 )
|
peek_mem_write_stream ( USES_REGS1 )
|
||||||
{ /* '$peek_mem_write_stream'(+GLOBAL_Stream,?S0,?S) */
|
{ /* '$peek_mem_write_stream'(+GLOBAL_Stream,?S0,?S) */
|
||||||
Int sno = Yap_CheckStream (ARG1, (Output_Stream_f | InMemory_Stream_f), "close/2");
|
Int sno = Yap_CheckStream (ARG1, (Output_Stream_f | InMemory_Stream_f), "close/2");
|
||||||
Int i = GLOBAL_Stream[sno].u.mem_string.pos;
|
Int i;
|
||||||
Term tf = ARG2;
|
Term tf = ARG2;
|
||||||
CELL *HI;
|
CELL *HI;
|
||||||
|
const char *ptr;
|
||||||
|
|
||||||
if (sno < 0)
|
if (sno < 0)
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
restart:
|
restart:
|
||||||
HI = HR;
|
HI = HR;
|
||||||
|
#if MAY_WRITE
|
||||||
|
if (fflush(GLOBAL_Stream[sno].file) == 0) {
|
||||||
|
ptr = GLOBAL_Stream[sno].nbuf;
|
||||||
|
i = GLOBAL_Stream[sno].nsize;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
size_t pos;
|
||||||
|
ptr = GLOBAL_Stream[sno].u.mem_string.buf;
|
||||||
|
i = GLOBAL_Stream[sno].u.mem_string.pos;
|
||||||
|
#endif
|
||||||
while (i > 0) {
|
while (i > 0) {
|
||||||
--i;
|
--i;
|
||||||
tf = MkPairTerm(MkIntTerm(GLOBAL_Stream[sno].u.mem_string.buf[i]),tf);
|
tf = MkPairTerm(MkIntTerm(ptr[i]),tf);
|
||||||
if (HR + 1024 >= ASP) {
|
if (HR + 1024 >= ASP) {
|
||||||
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
||||||
HR = HI;
|
HR = HI;
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* *
|
* *
|
||||||
* YAP Prolog *
|
* YAP Prolog *
|
||||||
@ -348,7 +347,7 @@ Yap_syntax_error (TokEntry * tokptr, int sno)
|
|||||||
t[2] = endline;
|
t[2] = endline;
|
||||||
tf[1] = Yap_MkApplTerm(Yap_MkFunctor(AtomBetween,3),3,t);
|
tf[1] = Yap_MkApplTerm(Yap_MkFunctor(AtomBetween,3),3,t);
|
||||||
}
|
}
|
||||||
tf[2] = TermDot;
|
tf[2] = tf[3] = TermDot;
|
||||||
tf[4] = MkIntegerTerm(count);
|
tf[4] = MkIntegerTerm(count);
|
||||||
tf[5] = out;
|
tf[5] = out;
|
||||||
tf[6] = Yap_StreamUserName(sno);
|
tf[6] = Yap_StreamUserName(sno);
|
||||||
@ -475,7 +474,7 @@ Int
|
|||||||
Yap_FirstLineInParse ( void )
|
Yap_FirstLineInParse ( void )
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
return LOCAL_StartLine;
|
return LOCAL_StartLineCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -540,21 +539,10 @@ complete_processing( FEnv *fe, TokEntry *tokstart )
|
|||||||
reset_regs(tokstart, fe);
|
reset_regs(tokstart, fe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!Yap_unify(v, fe->np))
|
if (!Yap_unify(v, fe->sp))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (fe->tp) {
|
if (fe->tp && !Yap_unify(fe->tpos, fe->tp)) {
|
||||||
while (TRUE) {
|
|
||||||
fe->old_H = HR;
|
|
||||||
|
|
||||||
if (setjmp(LOCAL_IOBotch) == 0) {
|
|
||||||
v = fe->tpos;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
reset_regs( tokstart, fe);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!Yap_unify(v, fe->tp))
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -603,14 +591,21 @@ scanEOF( FEnv *fe, int inp_stream)
|
|||||||
// return end_of_file
|
// return end_of_file
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
||||||
fe->t = MkAtomTerm (AtomEof);
|
fe->t = MkAtomTerm (AtomEof);
|
||||||
|
if (fe->np && !Yap_unify(TermNil, fe->np))
|
||||||
|
fe->t = 0;
|
||||||
|
if (fe->sp && !Yap_unify(TermNil, fe->sp))
|
||||||
|
fe->t = 0;
|
||||||
|
if (fe->vp && !Yap_unify(TermNil, fe->vp))
|
||||||
|
fe->t = 0;
|
||||||
|
if (fe->tp && !Yap_unify(fe->tp , fe->tpos))
|
||||||
|
fe->t = 0;
|
||||||
post_process_eof(GLOBAL_Stream + inp_stream);
|
post_process_eof(GLOBAL_Stream + inp_stream);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (GLOBAL_Option['p' - 'a' + 1] || true) {
|
if (GLOBAL_Option['p' - 'a' + 1]) {
|
||||||
fprintf(stderr, "[ end_of_file %p ]", GLOBAL_Stream[inp_stream].name);
|
fprintf(stderr, "[ end_of_file %p ]\n", GLOBAL_Stream[inp_stream].name);
|
||||||
Yap_DebugPlWrite(fe->t);
|
|
||||||
Yap_DebugPutc(stderr, ' ]\n');
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
TR = (tr_fr_ptr)LOCAL_ScannerStack;
|
||||||
return YAP_PARSING_FINISHED;
|
return YAP_PARSING_FINISHED;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -624,7 +619,6 @@ initParser(Term opts, FEnv *fe, REnv *re, int inp_stream, int nargs)
|
|||||||
LOCAL_ErrorMessage = NULL;
|
LOCAL_ErrorMessage = NULL;
|
||||||
fe->old_TR = TR;
|
fe->old_TR = TR;
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
||||||
fe->tpos = StreamPosition(inp_stream);
|
|
||||||
LOCAL_SourceFileName = GLOBAL_Stream[inp_stream].name;
|
LOCAL_SourceFileName = GLOBAL_Stream[inp_stream].name;
|
||||||
LOCAL_eot_before_eof = false;
|
LOCAL_eot_before_eof = false;
|
||||||
fe->tpos = StreamPosition(inp_stream);
|
fe->tpos = StreamPosition(inp_stream);
|
||||||
@ -669,7 +663,6 @@ static parser_state_t
|
|||||||
scanError(REnv *re, FEnv *fe, int inp_stream)
|
scanError(REnv *re, FEnv *fe, int inp_stream)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
|
|
||||||
fe->t = 0;
|
fe->t = 0;
|
||||||
// running out of memory
|
// running out of memory
|
||||||
if (LOCAL_Error_TYPE == OUT_OF_TRAIL_ERROR) {
|
if (LOCAL_Error_TYPE == OUT_OF_TRAIL_ERROR) {
|
||||||
@ -712,11 +705,11 @@ scanError(REnv *re, FEnv *fe, int inp_stream)
|
|||||||
return YAP_SCANNING;
|
return YAP_SCANNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static parser_state_t
|
static parser_state_t
|
||||||
parseError(REnv *re, FEnv *fe, int inp_stream)
|
parseError(REnv *re, FEnv *fe, int inp_stream)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
|
|
||||||
fe->t = 0;
|
fe->t = 0;
|
||||||
TokEntry * tokstart =
|
TokEntry * tokstart =
|
||||||
LOCAL_tokptr;
|
LOCAL_tokptr;
|
||||||
@ -738,7 +731,7 @@ parseError(REnv *re, FEnv *fe, int inp_stream)
|
|||||||
return YAP_PARSING_FINISHED;
|
return YAP_PARSING_FINISHED;
|
||||||
} else {
|
} else {
|
||||||
Yap_PrintWarning(terr);
|
Yap_PrintWarning(terr);
|
||||||
if (ParserErrorStyle ==TermDec10);
|
if (ParserErrorStyle == TermDec10);
|
||||||
return YAP_SCANNING;
|
return YAP_SCANNING;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -751,14 +744,17 @@ parse(REnv *re, FEnv *fe, int inp_stream)
|
|||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
TokEntry * tokstart =
|
TokEntry * tokstart =
|
||||||
LOCAL_tokptr;
|
LOCAL_tokptr;
|
||||||
|
|
||||||
fe->t = Yap_Parse(re->prio);
|
fe->t = Yap_Parse(re->prio);
|
||||||
if (fe->t == 0 || LOCAL_ErrorMessage)
|
if (fe->t == 0 || LOCAL_ErrorMessage)
|
||||||
return YAP_SCANNING_ERROR;
|
return YAP_PARSING_ERROR;
|
||||||
TR = (tr_fr_ptr)LOCAL_ScannerStack;
|
TR = (tr_fr_ptr)LOCAL_ScannerStack;
|
||||||
if (fe->reading_clause)
|
if (fe->reading_clause &&
|
||||||
complete_clause_processing( fe, tokstart, fe->t );
|
!complete_clause_processing( fe, tokstart, fe-> t ))
|
||||||
else
|
fe->t = 0;
|
||||||
complete_processing( fe, tokstart );
|
else if (!fe->reading_clause &&
|
||||||
|
!complete_processing( fe, tokstart ))
|
||||||
|
fe->t = 0;
|
||||||
#if EMACS
|
#if EMACS
|
||||||
first_char = tokstart->TokPos;
|
first_char = tokstart->TokPos;
|
||||||
#endif /* EMACS */
|
#endif /* EMACS */
|
||||||
@ -793,7 +789,6 @@ Term Yap_read_term(int inp_stream, Term opts, int nargs)
|
|||||||
int emacs_cares = FALSE;
|
int emacs_cares = FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
parser_state_t state = YAP_START_PARSING;
|
parser_state_t state = YAP_START_PARSING;
|
||||||
while (state != YAP_PARSING_FINISHED)
|
while (state != YAP_PARSING_FINISHED)
|
||||||
{
|
{
|
||||||
@ -906,8 +901,8 @@ static xarg * setClauseReadEnv( Term opts, FEnv *fe, struct renv *re, int inp_s
|
|||||||
re->sy = TermDec10;
|
re->sy = TermDec10;
|
||||||
}
|
}
|
||||||
fe->vp = 0;
|
fe->vp = 0;
|
||||||
if (args[READ_VARIABLE_NAMES].used) {
|
if (args[READ_CLAUSE_VARIABLE_NAMES].used) {
|
||||||
fe->np = args[READ_VARIABLE_NAMES].tvalue;
|
fe->np = args[READ_CLAUSE_VARIABLE_NAMES].tvalue;
|
||||||
} else {
|
} else {
|
||||||
fe->np = 0;
|
fe->np = 0;
|
||||||
}
|
}
|
||||||
@ -959,7 +954,6 @@ complete_clause_processing( FEnv *fe, TokEntry *tokstart, Term t )
|
|||||||
singls[0] = v;
|
singls[0] = v;
|
||||||
singls[1] = fe->tpos;
|
singls[1] = fe->tpos;
|
||||||
singls[2] = t;
|
singls[2] = t;
|
||||||
jmp_deb(1);
|
|
||||||
if (Yap_PrintWarning(Yap_MkApplTerm(Yap_MkFunctor(AtomSingleton,3),3,singls)))
|
if (Yap_PrintWarning(Yap_MkApplTerm(Yap_MkFunctor(AtomSingleton,3),3,singls)))
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
@ -989,7 +983,7 @@ complete_clause_processing( FEnv *fe, TokEntry *tokstart, Term t )
|
|||||||
/**
|
/**
|
||||||
* @pred read_clause( +_Stream_, -_Clause_, ?_Opts) is det
|
* @pred read_clause( +_Stream_, -_Clause_, ?_Opts) is det
|
||||||
*
|
*
|
||||||
* Same as read_clause/3, but from the standard input stream.
|
u* Same as read_clause/3, but from the standard input stream.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static Int
|
static Int
|
||||||
@ -1389,4 +1383,3 @@ Yap_InitReadTPreds(void)
|
|||||||
Yap_InitCPred ("$style_checker", 1, style_checker, SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred ("$style_checker", 1, style_checker, SyncPredFlag|HiddenPredFlag);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
102
os/streams.c
102
os/streams.c
@ -125,6 +125,7 @@ FILE *Yap_GetOutputStream(Term t, const char *msg)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
GetFreeStreamD(void)
|
GetFreeStreamD(void)
|
||||||
{
|
{
|
||||||
@ -521,22 +522,17 @@ eof_action ( int sno, Term t2 USES_REGS )
|
|||||||
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
do_stream_property (int sno, Term opts USES_REGS)
|
do_stream_property (int sno, xarg *args USES_REGS)
|
||||||
{ /* Init current_stream */
|
{ /* Init current_stream */
|
||||||
xarg *args;
|
|
||||||
stream_property_choices_t i;
|
stream_property_choices_t i;
|
||||||
bool rc = true;
|
bool rc = true;
|
||||||
|
|
||||||
|
|
||||||
args = Yap_ArgListToVector ( opts, stream_property_defs, STREAM_PROPERTY_END );
|
|
||||||
if (args == NULL) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (i=0; i < STREAM_PROPERTY_END; i ++) {
|
for (i=0; i < STREAM_PROPERTY_END; i ++) {
|
||||||
if (args[i].used) {
|
if (args[i].used) {
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case STREAM_PROPERTY_ALIAS:
|
case STREAM_PROPERTY_ALIAS:
|
||||||
rc = rc &&
|
rc = rc &
|
||||||
Yap_FetchStreamAlias ( sno, args[STREAM_PROPERTY_ALIAS].tvalue PASS_REGS);
|
Yap_FetchStreamAlias ( sno, args[STREAM_PROPERTY_ALIAS].tvalue PASS_REGS);
|
||||||
break;
|
break;
|
||||||
case STREAM_PROPERTY_BOM:
|
case STREAM_PROPERTY_BOM:
|
||||||
@ -605,53 +601,89 @@ do_stream_property (int sno, Term opts USES_REGS)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UNLOCK(GLOBAL_Stream[sno].streamlock);
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
cont_stream_property (USES_REGS1)
|
cont_stream_property (USES_REGS1)
|
||||||
{ /* current_stream */
|
{ /* current_stream */
|
||||||
int i = IntOfTerm (EXTRA_CBACK_ARG (2, 1)), i0;
|
bool det;
|
||||||
LOCK(GLOBAL_Stream[i].streamlock);
|
xarg *args;
|
||||||
i0=i;
|
int i = IntOfTerm (EXTRA_CBACK_ARG (2, 1));
|
||||||
while (i < MaxStreams) {
|
bool rc;
|
||||||
if (GLOBAL_Stream[i].status & Free_Stream_f) {
|
|
||||||
++i;
|
args = Yap_ArgListToVector ( Deref(ARG2), stream_property_defs, STREAM_PROPERTY_END );
|
||||||
continue;
|
if (args == NULL) {
|
||||||
}
|
|
||||||
if (i != i0) {
|
|
||||||
LOCK(GLOBAL_Stream[i].streamlock);
|
|
||||||
UNLOCK(GLOBAL_Stream[i0].streamlock);
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
EXTRA_CBACK_ARG (2, 1) = MkIntTerm (i);
|
|
||||||
if (i == MaxStreams)
|
|
||||||
do_cut( true );
|
|
||||||
if ( do_stream_property(i-1, Deref(ARG2) PASS_REGS) ) {
|
|
||||||
Yap_unify(ARG1, Yap_MkStream(i-1));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
UNLOCK(GLOBAL_Stream[i0].streamlock);
|
|
||||||
cut_fail();
|
cut_fail();
|
||||||
|
}
|
||||||
|
LOCK(GLOBAL_StreamDescLock);
|
||||||
|
if (args[STREAM_PROPERTY_ALIAS].tvalue &&
|
||||||
|
IsAtomTerm(args[STREAM_PROPERTY_ALIAS].tvalue)) {
|
||||||
|
// one solution only
|
||||||
|
det = true;
|
||||||
|
i = Yap_CheckAlias(AtomOfTerm(args[STREAM_PROPERTY_ALIAS].tvalue));
|
||||||
|
UNLOCK(GLOBAL_StreamDescLock);
|
||||||
|
if (i < 0) {
|
||||||
|
cut_fail();
|
||||||
|
}
|
||||||
|
rc = true;
|
||||||
|
} else {
|
||||||
|
while (GLOBAL_Stream[i].status & Free_Stream_f) {
|
||||||
|
++i;
|
||||||
|
if (i == MaxStreams)
|
||||||
|
cut_fail();
|
||||||
|
else
|
||||||
|
EXTRA_CBACK_ARG (2, 1) = MkIntTerm (i+1);
|
||||||
|
}
|
||||||
|
LOCK(GLOBAL_Stream[i].streamlock);
|
||||||
|
UNLOCK(GLOBAL_StreamDescLock);
|
||||||
|
rc = do_stream_property(i, args PASS_REGS);
|
||||||
|
UNLOCK(GLOBAL_Stream[i].streamlock);
|
||||||
|
}
|
||||||
|
if (rc)
|
||||||
|
rc = Yap_unify(ARG1, Yap_MkStream(i));
|
||||||
|
if (rc) {
|
||||||
|
if (det)
|
||||||
|
cut_succeed();
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
} else if (det)
|
||||||
|
cut_fail();
|
||||||
|
else
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
stream_property (USES_REGS1)
|
stream_property (USES_REGS1)
|
||||||
{ /* Init current_stream */
|
{ /* Init current_stream */
|
||||||
Term t1 = Deref(ARG1);
|
Term t1 = Deref(ARG1);
|
||||||
|
//Yap_DebugPlWrite(ARG1);fprintf(stderr,", ");
|
||||||
|
// Yap_DebugPlWrite(ARG2);fprintf(stderr,"\n");
|
||||||
|
|
||||||
/* make valgrind happy by always filling in memory */
|
/* make valgrind happy by always filling in memory */
|
||||||
EXTRA_CBACK_ARG (2, 1) = MkIntTerm (0);
|
EXTRA_CBACK_ARG (2, 1) = MkIntTerm (0);
|
||||||
if (!IsVarTerm(t1)) {
|
if (!IsVarTerm(t1)) {
|
||||||
Int i;
|
Int i;
|
||||||
|
xarg *args;
|
||||||
|
|
||||||
i = Yap_CheckStream (t1, Input_Stream_f|Output_Stream_f|Append_Stream_f, "current_stream/3");
|
i = Yap_CheckStream (t1, Input_Stream_f|Output_Stream_f|Append_Stream_f, "current_stream/3");
|
||||||
do_cut(0);
|
if (i < 0) {
|
||||||
if (i < 0)
|
cut_fail();
|
||||||
return false;
|
}
|
||||||
return do_stream_property( i, Deref(ARG2) PASS_REGS);
|
args = Yap_ArgListToVector ( Deref(ARG2), stream_property_defs, STREAM_PROPERTY_END );
|
||||||
|
if (args == NULL) {
|
||||||
|
UNLOCK(GLOBAL_Stream[i].streamlock);
|
||||||
|
cut_fail();
|
||||||
|
}
|
||||||
|
if ( do_stream_property( i, args PASS_REGS) ) {
|
||||||
|
UNLOCK(GLOBAL_Stream[i].streamlock);
|
||||||
|
cut_succeed();
|
||||||
} else {
|
} else {
|
||||||
return (cont_stream_property (PASS_REGS1));
|
UNLOCK(GLOBAL_Stream[i].streamlock);
|
||||||
|
cut_fail();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return cont_stream_property( PASS_REGS1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -445,7 +445,7 @@ write_canonical ( USES_REGS1 )
|
|||||||
args[WRITE_IGNORE_OPS].tvalue = TermTrue;
|
args[WRITE_IGNORE_OPS].tvalue = TermTrue;
|
||||||
args[WRITE_QUOTED].used = true;
|
args[WRITE_QUOTED].used = true;
|
||||||
args[WRITE_QUOTED].tvalue = TermTrue;
|
args[WRITE_QUOTED].tvalue = TermTrue;
|
||||||
write_term( output_stream, ARG1, args PASS_REGS);
|
write_term( output_stream, ARG2, args PASS_REGS);
|
||||||
UNLOCK(GLOBAL_Stream[output_stream].streamlock);
|
UNLOCK(GLOBAL_Stream[output_stream].streamlock);
|
||||||
Yap_CloseSlots( mySlots );
|
Yap_CloseSlots( mySlots );
|
||||||
if (EX != 0L) {
|
if (EX != 0L) {
|
||||||
|
@ -81,7 +81,7 @@ chtype(Int ch)
|
|||||||
#define ParserAuxSp LOCAL_ScannerStack
|
#define ParserAuxSp LOCAL_ScannerStack
|
||||||
|
|
||||||
/* routines in parser.c */
|
/* routines in parser.c */
|
||||||
VarEntry *Yap_LookupVar(char *);
|
VarEntry *Yap_LookupVar(const char *);
|
||||||
Term Yap_VarNames(VarEntry *,Term);
|
Term Yap_VarNames(VarEntry *,Term);
|
||||||
Term Yap_Variables(VarEntry *,Term);
|
Term Yap_Variables(VarEntry *,Term);
|
||||||
Term Yap_Singletons(VarEntry *,Term);
|
Term Yap_Singletons(VarEntry *,Term);
|
||||||
@ -178,17 +178,17 @@ void Yap_init_socks(char *host, long interface_port);
|
|||||||
extern int errno;
|
extern int errno;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
INLINE_ONLY EXTERN UInt inline HashFunction(unsigned char *);
|
INLINE_ONLY EXTERN UInt inline HashFunction(const char *);
|
||||||
INLINE_ONLY EXTERN UInt inline WideHashFunction(wchar_t *);
|
INLINE_ONLY EXTERN UInt inline WideHashFunction(wchar_t *);
|
||||||
|
|
||||||
INLINE_ONLY EXTERN inline UInt
|
INLINE_ONLY EXTERN inline UInt
|
||||||
HashFunction(unsigned char *CHP)
|
HashFunction(const char *CHP)
|
||||||
{
|
{
|
||||||
/* djb2 */
|
/* djb2 */
|
||||||
UInt hash = 5381;
|
UInt hash = 5381;
|
||||||
UInt c;
|
UInt c;
|
||||||
|
|
||||||
while ((c = *CHP++) != '\0') {
|
while ((c = (UInt)(*CHP++)) != '\0') {
|
||||||
/* hash = ((hash << 5) + hash) + c; hash * 33 + c */
|
/* hash = ((hash << 5) + hash) + c; hash * 33 + c */
|
||||||
hash = hash * 33 ^ c;
|
hash = hash * 33 ^ c;
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,6 @@ ${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_CELL.java
|
|||||||
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_CPredicate.java
|
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_CPredicate.java
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_Prop.java
|
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_Prop.java
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_Term.java
|
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_Term.java
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_YAP_Arity.java
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_YAP_Term.java
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_YAP_UserCPred.java
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_YAP_tag_t.java
|
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_YAP_tag_t.java
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_arity_t.java
|
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_arity_t.java
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_encoding_t.java
|
${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_encoding_t.java
|
||||||
|
Reference in New Issue
Block a user