Merge branch 'master' of ssh://git.dcc.fc.up.pt/yap-6.3
This commit is contained in:
commit
9743c81f05
82
C/grow.c
82
C/grow.c
@ -168,7 +168,7 @@ SetHeapRegs(bool copying_threads USES_REGS)
|
|||||||
if (IsOldGlobalPtr(S))
|
if (IsOldGlobalPtr(S))
|
||||||
S = PtoGloAdjust(S);
|
S = PtoGloAdjust(S);
|
||||||
else if (IsOldLocalPtr(S))
|
else if (IsOldLocalPtr(S))
|
||||||
S = PtoLocAdjust(S);
|
S = PtoLocAdjust(S);
|
||||||
if (!copying_threads) {
|
if (!copying_threads) {
|
||||||
if (LOCAL_GlobalArena)
|
if (LOCAL_GlobalArena)
|
||||||
LOCAL_GlobalArena = AbsAppl(PtoGloAdjust(RepAppl(LOCAL_GlobalArena)));
|
LOCAL_GlobalArena = AbsAppl(PtoGloAdjust(RepAppl(LOCAL_GlobalArena)));
|
||||||
@ -262,7 +262,7 @@ RestoreTrail(int worker_p USES_REGS)
|
|||||||
*((CELL *) aux_cell) = worker_p_binding(worker_p, CellPtr(aux_cell));
|
*((CELL *) aux_cell) = worker_p_binding(worker_p, CellPtr(aux_cell));
|
||||||
#endif /* TABLING */
|
#endif /* TABLING */
|
||||||
}
|
}
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
} else if (IsPairTerm(aux_cell)) {
|
} else if (IsPairTerm(aux_cell)) {
|
||||||
/* avoid frozen segments */
|
/* avoid frozen segments */
|
||||||
aux_cell = (CELL) RepPair(aux_cell);
|
aux_cell = (CELL) RepPair(aux_cell);
|
||||||
@ -273,7 +273,7 @@ RestoreTrail(int worker_p USES_REGS)
|
|||||||
#ifdef MULTI_ASSIGNMENT_VARIABLES
|
#ifdef MULTI_ASSIGNMENT_VARIABLES
|
||||||
} else if (IsApplTerm(aux_cell)) {
|
} else if (IsApplTerm(aux_cell)) {
|
||||||
CELL *cell_ptr = RepAppl(aux_cell);
|
CELL *cell_ptr = RepAppl(aux_cell);
|
||||||
if (((CELL *)aux_cell < Get_LOCAL_top_cp()->cp_h ||
|
if (((CELL *)aux_cell < Get_LOCAL_top_cp()->cp_h ||
|
||||||
EQUAL_OR_YOUNGER_CP(Get_LOCAL_top_cp(), (choiceptr)aux_cell)) &&
|
EQUAL_OR_YOUNGER_CP(Get_LOCAL_top_cp(), (choiceptr)aux_cell)) &&
|
||||||
!Yap_lookup_ma_var(cell_ptr PASS_REGS)) {
|
!Yap_lookup_ma_var(cell_ptr PASS_REGS)) {
|
||||||
/* first time we found the variable, let's put the new value */
|
/* first time we found the variable, let's put the new value */
|
||||||
@ -297,9 +297,9 @@ MoveGlobal( USES_REGS1 )
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* cpcellsd(To,From,NOfCells) - copy the cells downwards - in
|
* cpcellsd(To,From,NOfCells) - copy the cells downwards - in
|
||||||
* absmi.asm
|
* absmi.asm
|
||||||
*/
|
*/
|
||||||
cpcellsd((CELL *)LOCAL_GlobalBase, (CELL *)LOCAL_OldGlobalBase, LOCAL_OldH - (CELL *)LOCAL_OldGlobalBase);
|
cpcellsd((CELL *)LOCAL_GlobalBase, (CELL *)LOCAL_OldGlobalBase, LOCAL_OldH - (CELL *)LOCAL_OldGlobalBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -307,9 +307,9 @@ MoveExpandedGlobal( USES_REGS1 )
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* cpcellsd(To,From,NOfCells) - copy the cells downwards - in
|
* cpcellsd(To,From,NOfCells) - copy the cells downwards - in
|
||||||
* absmi.asm
|
* absmi.asm
|
||||||
*/
|
*/
|
||||||
cpcellsd((CELL *)(LOCAL_GlobalBase+(LOCAL_GDiff-LOCAL_BaseDiff)), (CELL *)LOCAL_GlobalBase, LOCAL_OldH - (CELL *)LOCAL_OldGlobalBase);
|
cpcellsd((CELL *)(LOCAL_GlobalBase+(LOCAL_GDiff-LOCAL_BaseDiff)), (CELL *)LOCAL_GlobalBase, LOCAL_OldH - (CELL *)LOCAL_OldGlobalBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -317,12 +317,12 @@ MoveGlobalWithHole( USES_REGS1 )
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* cpcellsd(To,From,NOfCells) - copy the cells downwards - in
|
* cpcellsd(To,From,NOfCells) - copy the cells downwards - in
|
||||||
* absmi.asm
|
* absmi.asm
|
||||||
*/
|
*/
|
||||||
#if USE_SYSTEM_MALLOC
|
#if USE_SYSTEM_MALLOC
|
||||||
cpcellsd((CELL *)((char *)LOCAL_GlobalBase+(LOCAL_GDiff0-LOCAL_BaseDiff)), (CELL *)LOCAL_GlobalBase, LOCAL_OldH - (CELL *)LOCAL_OldGlobalBase);
|
cpcellsd((CELL *)((char *)LOCAL_GlobalBase+(LOCAL_GDiff0-LOCAL_BaseDiff)), (CELL *)LOCAL_GlobalBase, LOCAL_OldH - (CELL *)LOCAL_OldGlobalBase);
|
||||||
#else
|
#else
|
||||||
cpcellsd((CELL *)((char *)LOCAL_OldGlobalBase+LOCAL_GDiff0), (CELL *)LOCAL_OldGlobalBase, LOCAL_OldH - (CELL *)LOCAL_OldGlobalBase);
|
cpcellsd((CELL *)((char *)LOCAL_OldGlobalBase+LOCAL_GDiff0), (CELL *)LOCAL_OldGlobalBase, LOCAL_OldH - (CELL *)LOCAL_OldGlobalBase);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,7 +331,7 @@ MoveHalfGlobal(CELL *OldPt USES_REGS)
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* cpcellsd(To,From,NOfCells) - copy the cells downwards - in
|
* cpcellsd(To,From,NOfCells) - copy the cells downwards - in
|
||||||
* absmi.asm
|
* absmi.asm
|
||||||
*/
|
*/
|
||||||
UInt diff = LOCAL_OldH-OldPt;
|
UInt diff = LOCAL_OldH-OldPt;
|
||||||
CELL *NewPt = (CELL *)((char*)OldPt+LOCAL_GDiff);
|
CELL *NewPt = (CELL *)((char*)OldPt+LOCAL_GDiff);
|
||||||
@ -527,7 +527,7 @@ AdjustGlobal(Int sz, bool thread_copying USES_REGS)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* to clean the global now that functors are just variables pointing to
|
* to clean the global now that functors are just variables pointing to
|
||||||
* the code
|
* the code
|
||||||
*/
|
*/
|
||||||
#if defined(YAPOR_THREADS)
|
#if defined(YAPOR_THREADS)
|
||||||
if (thread_copying == STACK_INCREMENTAL_COPYING) {
|
if (thread_copying == STACK_INCREMENTAL_COPYING) {
|
||||||
@ -673,7 +673,7 @@ AdjustRegs(int n USES_REGS)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
CELL reg;
|
CELL reg;
|
||||||
|
|
||||||
for (i = 1; i < n; ++i) {
|
for (i = 1; i < n; ++i) {
|
||||||
reg = (CELL) XREGS[i];
|
reg = (CELL) XREGS[i];
|
||||||
if (IsVarTerm(reg)) {
|
if (IsVarTerm(reg)) {
|
||||||
@ -734,11 +734,13 @@ AdjustScannerStacks(TokEntry **tksp, VarEntry **vep USES_REGS)
|
|||||||
if (IsApplTerm(tks->TokInfo)) {
|
if (IsApplTerm(tks->TokInfo)) {
|
||||||
tks->TokInfo = AdjustAppl(tks->TokInfo PASS_REGS);
|
tks->TokInfo = AdjustAppl(tks->TokInfo PASS_REGS);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Var_tok:
|
case Var_tok:
|
||||||
case String_tok:
|
case String_tok:
|
||||||
if (IsOldTrail(tks->TokInfo))
|
case WString_tok:
|
||||||
tks->TokInfo = TrailAdjust(tks->TokInfo);
|
case StringTerm_tok:
|
||||||
|
if (IsOldTrail(tks->TokInfo))
|
||||||
|
tks->TokInfo = TrailAdjust(tks->TokInfo);
|
||||||
break;
|
break;
|
||||||
case Name_tok:
|
case Name_tok:
|
||||||
tks->TokInfo = (Term)AtomAdjust((Atom)(tks->TokInfo));
|
tks->TokInfo = (Term)AtomAdjust((Atom)(tks->TokInfo));
|
||||||
@ -854,7 +856,7 @@ static_growheap(size_t esize, bool fix_code, struct intermediates *cip, tr_fr_pt
|
|||||||
}
|
}
|
||||||
AdjustRegs(MaxTemps PASS_REGS);
|
AdjustRegs(MaxTemps PASS_REGS);
|
||||||
ASP += 256;
|
ASP += 256;
|
||||||
if (minimal_request)
|
if (minimal_request)
|
||||||
Yap_AllocHole(minimal_request, size);
|
Yap_AllocHole(minimal_request, size);
|
||||||
YAPLeaveCriticalSection();
|
YAPLeaveCriticalSection();
|
||||||
growth_time = Yap_cputime()-start_growth_time;
|
growth_time = Yap_cputime()-start_growth_time;
|
||||||
@ -914,7 +916,7 @@ static_growglobal(size_t request, CELL **ptr, CELL *hsplit USES_REGS)
|
|||||||
if (Unsigned(HR)+size < Unsigned(ASP)-CreepFlag) {
|
if (Unsigned(HR)+size < Unsigned(ASP)-CreepFlag) {
|
||||||
/* we can just ask for more room */
|
/* we can just ask for more room */
|
||||||
do_grow = FALSE;
|
do_grow = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (do_grow) {
|
if (do_grow) {
|
||||||
if (size < YAP_ALLOC_SIZE)
|
if (size < YAP_ALLOC_SIZE)
|
||||||
@ -934,7 +936,7 @@ static_growglobal(size_t request, CELL **ptr, CELL *hsplit USES_REGS)
|
|||||||
if (!GLOBAL_AllowGlobalExpansion || !Yap_ExtendWorkSpace(size)) {
|
if (!GLOBAL_AllowGlobalExpansion || !Yap_ExtendWorkSpace(size)) {
|
||||||
/* always fails when using malloc */
|
/* always fails when using malloc */
|
||||||
LOCAL_ErrorMessage = NULL;
|
LOCAL_ErrorMessage = NULL;
|
||||||
size += AdjustPageSize(((CELL)LOCAL_TrailTop-(CELL)LOCAL_GlobalBase)+MinHeapGap);
|
size += AdjustPageSize(((CELL)LOCAL_TrailTop-(CELL)LOCAL_GlobalBase)+MinHeapGap);
|
||||||
minimal_request = size;
|
minimal_request = size;
|
||||||
size = Yap_ExtendWorkSpaceThroughHole(size);
|
size = Yap_ExtendWorkSpaceThroughHole(size);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
@ -985,7 +987,7 @@ static_growglobal(size_t request, CELL **ptr, CELL *hsplit USES_REGS)
|
|||||||
LOCAL_LDiff = LOCAL_TrDiff = 0;
|
LOCAL_LDiff = LOCAL_TrDiff = 0;
|
||||||
LOCAL_BaseDiff = 0;
|
LOCAL_BaseDiff = 0;
|
||||||
}
|
}
|
||||||
/* now, remember we have delay -- global with a hole in delay or a
|
/* now, remember we have delay -- global with a hole in delay or a
|
||||||
hole in global */
|
hole in global */
|
||||||
if (!hsplit) {
|
if (!hsplit) {
|
||||||
if (!do_grow) {
|
if (!do_grow) {
|
||||||
@ -1251,7 +1253,7 @@ fix_compiler_instructions(PInstr *pcpc USES_REGS)
|
|||||||
|
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
static void
|
static void
|
||||||
fix_tabling_info( USES_REGS1 )
|
fix_tabling_info( USES_REGS1 )
|
||||||
{
|
{
|
||||||
/* we must fix the dependency frames and the subgoal frames, as they are
|
/* we must fix the dependency frames and the subgoal frames, as they are
|
||||||
pointing back to the global stack. */
|
pointing back to the global stack. */
|
||||||
@ -1575,7 +1577,7 @@ execute_growstack(size_t esize0, bool from_trail, bool in_parser, tr_fr_ptr *old
|
|||||||
Int size0 = esize0;
|
Int size0 = esize0;
|
||||||
Int size = size0;
|
Int size = size0;
|
||||||
ADDR old_LOCAL_GlobalBase = LOCAL_GlobalBase;
|
ADDR old_LOCAL_GlobalBase = LOCAL_GlobalBase;
|
||||||
|
|
||||||
if (!GLOBAL_AllowGlobalExpansion) {
|
if (!GLOBAL_AllowGlobalExpansion) {
|
||||||
LOCAL_ErrorMessage = "Database crashed against stacks";
|
LOCAL_ErrorMessage = "Database crashed against stacks";
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -1583,7 +1585,7 @@ execute_growstack(size_t esize0, bool from_trail, bool in_parser, tr_fr_ptr *old
|
|||||||
if (!Yap_ExtendWorkSpace(size)) {
|
if (!Yap_ExtendWorkSpace(size)) {
|
||||||
/* make sure stacks and trail are contiguous */
|
/* make sure stacks and trail are contiguous */
|
||||||
|
|
||||||
LOCAL_ErrorMessage = NULL;
|
LOCAL_ErrorMessage = NULL;
|
||||||
minimal_request = AdjustPageSize(((CELL)LOCAL_TrailTop-(CELL)LOCAL_GlobalBase)+4*MinHeapGap+size0);
|
minimal_request = AdjustPageSize(((CELL)LOCAL_TrailTop-(CELL)LOCAL_GlobalBase)+4*MinHeapGap+size0);
|
||||||
|
|
||||||
size = Yap_ExtendWorkSpaceThroughHole(minimal_request);
|
size = Yap_ExtendWorkSpaceThroughHole(minimal_request);
|
||||||
@ -1667,7 +1669,7 @@ execute_growstack(size_t esize0, bool from_trail, bool in_parser, tr_fr_ptr *old
|
|||||||
}
|
}
|
||||||
YAPLeaveCriticalSection();
|
YAPLeaveCriticalSection();
|
||||||
ASP += 256;
|
ASP += 256;
|
||||||
if (minimal_request)
|
if (minimal_request)
|
||||||
Yap_AllocHole(minimal_request, size);
|
Yap_AllocHole(minimal_request, size);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -1762,7 +1764,7 @@ static int do_growtrail(size_t esize, bool contiguous_only, bool in_parser, tr_f
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
#endif
|
#endif
|
||||||
/* at least 64K for trail */
|
/* at least 64K for trail */
|
||||||
if (!size)
|
if (!size)
|
||||||
size = ((ADDR)TR-LOCAL_TrailBase);
|
size = ((ADDR)TR-LOCAL_TrailBase);
|
||||||
size *= 2;
|
size *= 2;
|
||||||
if (size < YAP_ALLOC_SIZE)
|
if (size < YAP_ALLOC_SIZE)
|
||||||
@ -1829,7 +1831,7 @@ static int do_growtrail(size_t esize, bool contiguous_only, bool in_parser, tr_f
|
|||||||
/* Used by do_goal() when we're short of stack space */
|
/* Used by do_goal() when we're short of stack space */
|
||||||
int
|
int
|
||||||
Yap_growtrail(size_t size, bool contiguous_only)
|
Yap_growtrail(size_t size, bool contiguous_only)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
rc = do_growtrail(size, contiguous_only, FALSE, NULL, NULL, NULL PASS_REGS);
|
rc = do_growtrail(size, contiguous_only, FALSE, NULL, NULL, NULL PASS_REGS);
|
||||||
@ -1839,7 +1841,7 @@ Yap_growtrail(size_t size, bool contiguous_only)
|
|||||||
/* Used by do_goal() when we're short of stack space */
|
/* Used by do_goal() when we're short of stack space */
|
||||||
int
|
int
|
||||||
Yap_locked_growtrail(size_t size, bool contiguous_only)
|
Yap_locked_growtrail(size_t size, bool contiguous_only)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
return do_growtrail(size, contiguous_only, FALSE, NULL, NULL, NULL PASS_REGS);
|
return do_growtrail(size, contiguous_only, FALSE, NULL, NULL, NULL PASS_REGS);
|
||||||
}
|
}
|
||||||
@ -1871,7 +1873,7 @@ Yap_shift_visit(CELL **to_visit, CELL ***to_visit_maxp, CELL ***to_visit_base)
|
|||||||
char *newb = Yap_ExpandPreAllocCodeSpace(0, NULL, FALSE);
|
char *newb = Yap_ExpandPreAllocCodeSpace(0, NULL, FALSE);
|
||||||
|
|
||||||
if (newb == NULL) {
|
if (newb == NULL) {
|
||||||
Yap_Error(OUT_OF_HEAP_ERROR,TermNil,"cannot allocate temporary space for unification (%p)", to_visit);
|
Yap_Error(OUT_OF_HEAP_ERROR,TermNil,"cannot allocate temporary space for unification (%p)", to_visit);
|
||||||
return to_visit;
|
return to_visit;
|
||||||
}
|
}
|
||||||
/* check new size */
|
/* check new size */
|
||||||
@ -1879,7 +1881,7 @@ Yap_shift_visit(CELL **to_visit, CELL ***to_visit_maxp, CELL ***to_visit_base)
|
|||||||
/* how much we grew */
|
/* how much we grew */
|
||||||
dsz = totalsz-totalsz0;
|
dsz = totalsz-totalsz0;
|
||||||
if (dsz == 0) {
|
if (dsz == 0) {
|
||||||
Yap_Error(OUT_OF_HEAP_ERROR,TermNil,"cannot allocate temporary space for unification (%p)", to_visit);
|
Yap_Error(OUT_OF_HEAP_ERROR,TermNil,"cannot allocate temporary space for unification (%p)", to_visit);
|
||||||
return to_visit;
|
return to_visit;
|
||||||
}
|
}
|
||||||
/* copy whole block to end */
|
/* copy whole block to end */
|
||||||
@ -1898,7 +1900,7 @@ p_inform_trail_overflows( USES_REGS1 )
|
|||||||
{
|
{
|
||||||
Term tn = MkIntTerm(LOCAL_trail_overflows);
|
Term tn = MkIntTerm(LOCAL_trail_overflows);
|
||||||
Term tt = MkIntegerTerm(LOCAL_total_trail_overflow_time);
|
Term tt = MkIntegerTerm(LOCAL_total_trail_overflow_time);
|
||||||
|
|
||||||
return(Yap_unify(tn, ARG1) && Yap_unify(tt, ARG2));
|
return(Yap_unify(tn, ARG1) && Yap_unify(tt, ARG2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1928,7 +1930,7 @@ p_inform_heap_overflows( USES_REGS1 )
|
|||||||
{
|
{
|
||||||
Term tn = MkIntTerm(LOCAL_heap_overflows);
|
Term tn = MkIntTerm(LOCAL_heap_overflows);
|
||||||
Term tt = MkIntegerTerm(LOCAL_total_heap_overflow_time);
|
Term tt = MkIntegerTerm(LOCAL_total_heap_overflow_time);
|
||||||
|
|
||||||
return(Yap_unify(tn, ARG1) && Yap_unify(tt, ARG2));
|
return(Yap_unify(tn, ARG1) && Yap_unify(tt, ARG2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1973,13 +1975,13 @@ Yap_CopyThreadStacks(int worker_q, int worker_p, bool incremental)
|
|||||||
YAPEnterCriticalSection();
|
YAPEnterCriticalSection();
|
||||||
SetHeapRegs(FALSE PASS_REGS);
|
SetHeapRegs(FALSE PASS_REGS);
|
||||||
{
|
{
|
||||||
choiceptr imageB;
|
choiceptr imageB;
|
||||||
|
|
||||||
LOCAL_OldLCL0 = LCL0;
|
LOCAL_OldLCL0 = LCL0;
|
||||||
LCL0 = REMOTE_ThreadHandle(0).current_yaam_regs->LCL0_;
|
LCL0 = REMOTE_ThreadHandle(0).current_yaam_regs->LCL0_;
|
||||||
imageB = Get_GLOBAL_root_cp();
|
imageB = Get_GLOBAL_root_cp();
|
||||||
/* we know B */
|
/* we know B */
|
||||||
B->cp_tr = TR =
|
B->cp_tr = TR =
|
||||||
(tr_fr_ptr)((CELL)(imageB->cp_tr)+((CELL)LOCAL_OldLCL0-(CELL)LCL0));
|
(tr_fr_ptr)((CELL)(imageB->cp_tr)+((CELL)LOCAL_OldLCL0-(CELL)LCL0));
|
||||||
LCL0 = LOCAL_OldLCL0;
|
LCL0 = LOCAL_OldLCL0;
|
||||||
B->cp_h = H0;
|
B->cp_h = H0;
|
||||||
@ -2024,17 +2026,17 @@ Yap_CopyThreadStacks(int worker_q, int worker_p, bool incremental)
|
|||||||
SetHeapRegs(TRUE PASS_REGS);
|
SetHeapRegs(TRUE PASS_REGS);
|
||||||
if (incremental) {
|
if (incremental) {
|
||||||
IncrementalCopyStacksFromWorker( PASS_REGS1 );
|
IncrementalCopyStacksFromWorker( PASS_REGS1 );
|
||||||
LOCAL_start_global_copy =
|
LOCAL_start_global_copy =
|
||||||
(CELL)PtoGloAdjust((CELL *)LOCAL_start_global_copy);
|
(CELL)PtoGloAdjust((CELL *)LOCAL_start_global_copy);
|
||||||
LOCAL_end_global_copy =
|
LOCAL_end_global_copy =
|
||||||
(CELL)PtoGloAdjust((CELL *)LOCAL_end_global_copy);
|
(CELL)PtoGloAdjust((CELL *)LOCAL_end_global_copy);
|
||||||
LOCAL_start_local_copy =
|
LOCAL_start_local_copy =
|
||||||
(CELL)PtoLocAdjust((CELL *)LOCAL_start_local_copy);
|
(CELL)PtoLocAdjust((CELL *)LOCAL_start_local_copy);
|
||||||
LOCAL_end_local_copy =
|
LOCAL_end_local_copy =
|
||||||
(CELL)PtoLocAdjust((CELL *)LOCAL_end_local_copy);
|
(CELL)PtoLocAdjust((CELL *)LOCAL_end_local_copy);
|
||||||
LOCAL_start_trail_copy =
|
LOCAL_start_trail_copy =
|
||||||
(CELL)PtoTRAdjust((tr_fr_ptr)LOCAL_start_trail_copy);
|
(CELL)PtoTRAdjust((tr_fr_ptr)LOCAL_start_trail_copy);
|
||||||
LOCAL_end_trail_copy =
|
LOCAL_end_trail_copy =
|
||||||
(CELL)PtoTRAdjust((tr_fr_ptr)LOCAL_end_trail_copy);
|
(CELL)PtoTRAdjust((tr_fr_ptr)LOCAL_end_trail_copy);
|
||||||
AdjustStacksAndTrail(0, STACK_INCREMENTAL_COPYING PASS_REGS);
|
AdjustStacksAndTrail(0, STACK_INCREMENTAL_COPYING PASS_REGS);
|
||||||
RestoreTrail(worker_p PASS_REGS);
|
RestoreTrail(worker_p PASS_REGS);
|
||||||
@ -2073,7 +2075,7 @@ p_inform_stack_overflows( USES_REGS1 )
|
|||||||
{ /* */
|
{ /* */
|
||||||
Term tn = MkIntTerm(LOCAL_stack_overflows);
|
Term tn = MkIntTerm(LOCAL_stack_overflows);
|
||||||
Term tt = MkIntegerTerm(LOCAL_total_stack_overflow_time);
|
Term tt = MkIntegerTerm(LOCAL_total_stack_overflow_time);
|
||||||
|
|
||||||
return(Yap_unify(tn, ARG1) && Yap_unify(tt, ARG2));
|
return(Yap_unify(tn, ARG1) && Yap_unify(tt, ARG2));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
108
C/iopreds.c
108
C/iopreds.c
@ -20,7 +20,7 @@ static char SccsId[] = "%W% %G%";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* This file includes the definition of a miscellania of standard predicates
|
* This file includes the definition of a miscellania of standard predicates
|
||||||
* for yap refering to: Files and Streams, Simple Input/Output,
|
* for yap refering to: Files and Streams, Simple Input/Output,
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ static char SccsId[] = "%W% %G%";
|
|||||||
#ifdef HAVE_SYS_STAT_H
|
#ifdef HAVE_SYS_STAT_H
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_SYS_SELECT_H && !_MSC_VER && !defined(__MINGW32__)
|
#if HAVE_SYS_SELECT_H && !_MSC_VER && !defined(__MINGW32__)
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
@ -79,7 +79,7 @@ static char SccsId[] = "%W% %G%";
|
|||||||
#if !HAVE_STRNCPY
|
#if !HAVE_STRNCPY
|
||||||
#define strncpy(X,Y,Z) strcpy(X,Y)
|
#define strncpy(X,Y,Z) strcpy(X,Y)
|
||||||
#endif
|
#endif
|
||||||
#if _MSC_VER || defined(__MINGW32__)
|
#if _MSC_VER || defined(__MINGW32__)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#ifndef S_ISDIR
|
#ifndef S_ISDIR
|
||||||
#define S_ISDIR(x) (((x)&_S_IFDIR)==_S_IFDIR)
|
#define S_ISDIR(x) (((x)&_S_IFDIR)==_S_IFDIR)
|
||||||
@ -132,7 +132,7 @@ static YP_File curfile;
|
|||||||
|
|
||||||
#ifdef MACC
|
#ifdef MACC
|
||||||
|
|
||||||
static void
|
static void
|
||||||
InTTYLine(char *line)
|
InTTYLine(char *line)
|
||||||
{
|
{
|
||||||
char *p = line;
|
char *p = line;
|
||||||
@ -149,7 +149,7 @@ InTTYLine(char *line)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
Yap_DebugSetIFile(char *fname)
|
Yap_DebugSetIFile(char *fname)
|
||||||
{
|
{
|
||||||
if (curfile)
|
if (curfile)
|
||||||
@ -161,14 +161,14 @@ Yap_DebugSetIFile(char *fname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Yap_DebugEndline()
|
Yap_DebugEndline()
|
||||||
{
|
{
|
||||||
*lp = 0;
|
*lp = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Yap_DebugGetc()
|
Yap_DebugGetc()
|
||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
@ -191,7 +191,7 @@ Yap_DebugGetc()
|
|||||||
return (ch);
|
return (ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Yap_DebugPutc(int sno, wchar_t ch)
|
Yap_DebugPutc(int sno, wchar_t ch)
|
||||||
{
|
{
|
||||||
if (GLOBAL_Option['l' - 96])
|
if (GLOBAL_Option['l' - 96])
|
||||||
@ -199,7 +199,7 @@ Yap_DebugPutc(int sno, wchar_t ch)
|
|||||||
return (Sputc(ch, GLOBAL_stderr));
|
return (Sputc(ch, GLOBAL_stderr));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
Yap_DebugPuts(int sno, const char * s)
|
Yap_DebugPuts(int sno, const char * s)
|
||||||
{
|
{
|
||||||
if (GLOBAL_Option['l' - 96])
|
if (GLOBAL_Option['l' - 96])
|
||||||
@ -213,14 +213,14 @@ Yap_DebugPlWrite(Term t)
|
|||||||
Yap_plwrite(t, NULL, 15, 0, 1200);
|
Yap_plwrite(t, NULL, 15, 0, 1200);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Yap_DebugErrorPutc(int c)
|
Yap_DebugErrorPutc(int c)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Yap_DebugPutc (LOCAL_c_error_stream, c);
|
Yap_DebugPutc (LOCAL_c_error_stream, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Yap_DebugErrorPuts(const char *s)
|
Yap_DebugErrorPuts(const char *s)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
@ -350,19 +350,25 @@ syntax_error (TokEntry * tokptr, IOSTREAM *st, Term *outp)
|
|||||||
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomGVar,3),3,t);
|
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomGVar,3),3,t);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case String_tok:
|
case String_tok:
|
||||||
{
|
{
|
||||||
Term t0 = Yap_CharsToListOfCodes((const char *)info PASS_REGS);
|
Term t0 = Yap_CharsToListOfCodes((const char *)info PASS_REGS);
|
||||||
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomString,1),1,&t0);
|
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomString,1),1,&t0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WString_tok:
|
case StringTerm_tok:
|
||||||
{
|
{
|
||||||
Term t0 = Yap_WCharsToListOfCodes((const wchar_t *)info PASS_REGS);
|
Term t0 = MkStringTerm((const char *)info);
|
||||||
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomString,1),1,&t0);
|
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomString,1),1,&t0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Error_tok:
|
case WString_tok:
|
||||||
|
{
|
||||||
|
Term t0 = Yap_WCharsToListOfCodes((const wchar_t *)info PASS_REGS);
|
||||||
|
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomString,1),1,&t0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Error_tok:
|
||||||
case eot_tok:
|
case eot_tok:
|
||||||
break;
|
break;
|
||||||
case Ponctuation_tok:
|
case Ponctuation_tok:
|
||||||
@ -370,7 +376,7 @@ syntax_error (TokEntry * tokptr, IOSTREAM *st, Term *outp)
|
|||||||
char s[2];
|
char s[2];
|
||||||
s[1] = '\0';
|
s[1] = '\0';
|
||||||
s[0] = (char)info;
|
s[0] = (char)info;
|
||||||
if (s[0] == 'l')
|
if (s[0] == 'l')
|
||||||
s[0] = '(';
|
s[0] = '(';
|
||||||
ts[0] = MkAtomTerm(Yap_LookupAtom(s));
|
ts[0] = MkAtomTerm(Yap_LookupAtom(s));
|
||||||
}
|
}
|
||||||
@ -587,7 +593,7 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
|
|
||||||
HR = old_H;
|
HR = old_H;
|
||||||
TR = (tr_fr_ptr)LOCAL_ScannerStack;
|
TR = (tr_fr_ptr)LOCAL_ScannerStack;
|
||||||
|
|
||||||
if (!strcmp(LOCAL_ErrorMessage,"Stack Overflow"))
|
if (!strcmp(LOCAL_ErrorMessage,"Stack Overflow"))
|
||||||
res = Yap_growstack_in_parser(&old_TR, &tokstart, &LOCAL_VarTable);
|
res = Yap_growstack_in_parser(&old_TR, &tokstart, &LOCAL_VarTable);
|
||||||
else if (!strcmp(LOCAL_ErrorMessage,"Heap Overflow"))
|
else if (!strcmp(LOCAL_ErrorMessage,"Heap Overflow"))
|
||||||
@ -611,7 +617,7 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
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);
|
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;
|
||||||
rd->exception = Yap_InitSlot(terror PASS_REGS);
|
rd->exception = Yap_InitSlot(terror PASS_REGS);
|
||||||
@ -745,7 +751,7 @@ p_type_of_char ( USES_REGS1 )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_force_char_conversion( USES_REGS1 )
|
p_force_char_conversion( USES_REGS1 )
|
||||||
{
|
{
|
||||||
/* don't actually enable it until someone tries to add a conversion */
|
/* don't actually enable it until someone tries to add a conversion */
|
||||||
@ -755,14 +761,14 @@ p_force_char_conversion( USES_REGS1 )
|
|||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_disable_char_conversion( USES_REGS1 )
|
p_disable_char_conversion( USES_REGS1 )
|
||||||
{
|
{
|
||||||
CharConversionTable = NULL;
|
CharConversionTable = NULL;
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_char_conversion( USES_REGS1 )
|
p_char_conversion( USES_REGS1 )
|
||||||
{
|
{
|
||||||
Term t0 = Deref(ARG1), t1 = Deref(ARG2);
|
Term t0 = Deref(ARG1), t1 = Deref(ARG2);
|
||||||
@ -770,29 +776,29 @@ p_char_conversion( USES_REGS1 )
|
|||||||
|
|
||||||
if (IsVarTerm(t0)) {
|
if (IsVarTerm(t0)) {
|
||||||
Yap_Error(INSTANTIATION_ERROR, t0, "char_conversion/2");
|
Yap_Error(INSTANTIATION_ERROR, t0, "char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
if (!IsAtomTerm(t0)) {
|
if (!IsAtomTerm(t0)) {
|
||||||
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t0, "char_conversion/2");
|
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t0, "char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
s0 = RepAtom(AtomOfTerm(t0))->StrOfAE;
|
s0 = RepAtom(AtomOfTerm(t0))->StrOfAE;
|
||||||
if (s0[1] != '\0') {
|
if (s0[1] != '\0') {
|
||||||
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t0, "char_conversion/2");
|
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t0, "char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
if (IsVarTerm(t1)) {
|
if (IsVarTerm(t1)) {
|
||||||
Yap_Error(INSTANTIATION_ERROR, t1, "char_conversion/2");
|
Yap_Error(INSTANTIATION_ERROR, t1, "char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
if (!IsAtomTerm(t1)) {
|
if (!IsAtomTerm(t1)) {
|
||||||
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t1, "char_conversion/2");
|
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t1, "char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
s1 = RepAtom(AtomOfTerm(t1))->StrOfAE;
|
s1 = RepAtom(AtomOfTerm(t1))->StrOfAE;
|
||||||
if (s1[1] != '\0') {
|
if (s1[1] != '\0') {
|
||||||
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t1, "char_conversion/2");
|
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t1, "char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
/* check if we do have a table for converting characters */
|
/* check if we do have a table for converting characters */
|
||||||
if (CharConversionTable2 == NULL) {
|
if (CharConversionTable2 == NULL) {
|
||||||
@ -813,7 +819,7 @@ p_char_conversion( USES_REGS1 )
|
|||||||
if (p_force_char_conversion( PASS_REGS1 ) == FALSE)
|
if (p_force_char_conversion( PASS_REGS1 ) == FALSE)
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
for (i = 0; i < NUMBER_OF_CHARS; i++)
|
for (i = 0; i < NUMBER_OF_CHARS; i++)
|
||||||
CharConversionTable2[i] = i;
|
CharConversionTable2[i] = i;
|
||||||
}
|
}
|
||||||
/* just add the new entry */
|
/* just add the new entry */
|
||||||
@ -822,7 +828,7 @@ p_char_conversion( USES_REGS1 )
|
|||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_current_char_conversion( USES_REGS1 )
|
p_current_char_conversion( USES_REGS1 )
|
||||||
{
|
{
|
||||||
Term t0, t1;
|
Term t0, t1;
|
||||||
@ -834,16 +840,16 @@ p_current_char_conversion( USES_REGS1 )
|
|||||||
t0 = Deref(ARG1);
|
t0 = Deref(ARG1);
|
||||||
if (IsVarTerm(t0)) {
|
if (IsVarTerm(t0)) {
|
||||||
Yap_Error(INSTANTIATION_ERROR, t0, "current_char_conversion/2");
|
Yap_Error(INSTANTIATION_ERROR, t0, "current_char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
if (!IsAtomTerm(t0)) {
|
if (!IsAtomTerm(t0)) {
|
||||||
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t0, "current_char_conversion/2");
|
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t0, "current_char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
s0 = RepAtom(AtomOfTerm(t0))->StrOfAE;
|
s0 = RepAtom(AtomOfTerm(t0))->StrOfAE;
|
||||||
if (s0[1] != '\0') {
|
if (s0[1] != '\0') {
|
||||||
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t0, "current_char_conversion/2");
|
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t0, "current_char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
t1 = Deref(ARG2);
|
t1 = Deref(ARG2);
|
||||||
if (IsVarTerm(t1)) {
|
if (IsVarTerm(t1)) {
|
||||||
@ -855,19 +861,19 @@ p_current_char_conversion( USES_REGS1 )
|
|||||||
}
|
}
|
||||||
if (!IsAtomTerm(t1)) {
|
if (!IsAtomTerm(t1)) {
|
||||||
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t1, "current_char_conversion/2");
|
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t1, "current_char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
s1 = RepAtom(AtomOfTerm(t1))->StrOfAE;
|
s1 = RepAtom(AtomOfTerm(t1))->StrOfAE;
|
||||||
if (s1[1] != '\0') {
|
if (s1[1] != '\0') {
|
||||||
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t1, "current_char_conversion/2");
|
Yap_Error(REPRESENTATION_ERROR_CHARACTER, t1, "current_char_conversion/2");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
} else {
|
} else {
|
||||||
return (CharConversionTable[(int)s0[0]] == '\0' &&
|
return (CharConversionTable[(int)s0[0]] == '\0' &&
|
||||||
CharConversionTable[(int)s0[0]] == s1[0] );
|
CharConversionTable[(int)s0[0]] == s1[0] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_all_char_conversions( USES_REGS1 )
|
p_all_char_conversions( USES_REGS1 )
|
||||||
{
|
{
|
||||||
Term out = TermNil;
|
Term out = TermNil;
|
||||||
@ -904,7 +910,7 @@ p_float_format( USES_REGS1 )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_style_checker( USES_REGS1 )
|
p_style_checker( USES_REGS1 )
|
||||||
{
|
{
|
||||||
Term t = Deref( ARG1 );
|
Term t = Deref( ARG1 );
|
||||||
@ -940,7 +946,7 @@ p_style_checker( USES_REGS1 )
|
|||||||
|
|
||||||
if (IsVarTerm(h)) {
|
if (IsVarTerm(h)) {
|
||||||
Yap_Error(INSTANTIATION_ERROR, t, "style_check/1");
|
Yap_Error(INSTANTIATION_ERROR, t, "style_check/1");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
} if (IsAtomTerm(h)) {
|
} if (IsAtomTerm(h)) {
|
||||||
Atom at = AtomOfTerm( h );
|
Atom at = AtomOfTerm( h );
|
||||||
if (at == AtomAtom) debugstatus.styleCheck |= LONGATOM_CHECK;
|
if (at == AtomAtom) debugstatus.styleCheck |= LONGATOM_CHECK;
|
||||||
@ -999,7 +1005,7 @@ Yap_InitIOPreds(void)
|
|||||||
Yap_InitCPred ("$change_type_of_char", 2, p_change_type_of_char, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("$change_type_of_char", 2, p_change_type_of_char, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("$type_of_char", 2, p_type_of_char, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("$type_of_char", 2, p_type_of_char, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("char_conversion", 2, p_char_conversion, SyncPredFlag);
|
Yap_InitCPred ("char_conversion", 2, p_char_conversion, SyncPredFlag);
|
||||||
/** @pred char_conversion(+ _IN_,+ _OUT_) is iso
|
/** @pred char_conversion(+ _IN_,+ _OUT_) is iso
|
||||||
|
|
||||||
|
|
||||||
While reading terms convert unquoted occurrences of the character
|
While reading terms convert unquoted occurrences of the character
|
||||||
@ -1014,7 +1020,7 @@ convert characters from the ISO-LATIN-1 character set to ASCII.
|
|||||||
If _IN_ is the same character as _OUT_, char_conversion/2
|
If _IN_ is the same character as _OUT_, char_conversion/2
|
||||||
will remove this conversion from the table.
|
will remove this conversion from the table.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
Yap_InitCPred ("$current_char_conversion", 2, p_current_char_conversion, SyncPredFlag);
|
Yap_InitCPred ("$current_char_conversion", 2, p_current_char_conversion, SyncPredFlag);
|
||||||
Yap_InitCPred ("$all_char_conversions", 1, p_all_char_conversions, SyncPredFlag);
|
Yap_InitCPred ("$all_char_conversions", 1, p_all_char_conversions, SyncPredFlag);
|
||||||
@ -1022,11 +1028,11 @@ will remove this conversion from the table.
|
|||||||
Yap_InitCPred ("$disable_char_conversion", 0, p_disable_char_conversion, SyncPredFlag);
|
Yap_InitCPred ("$disable_char_conversion", 0, p_disable_char_conversion, SyncPredFlag);
|
||||||
#if HAVE_SELECT
|
#if HAVE_SELECT
|
||||||
// Yap_InitCPred ("stream_select", 3, p_stream_select, SafePredFlag|SyncPredFlag);
|
// Yap_InitCPred ("stream_select", 3, p_stream_select, SafePredFlag|SyncPredFlag);
|
||||||
/** @pred stream_select(+ _STREAMS_,+ _TIMEOUT_,- _READSTREAMS_)
|
/** @pred stream_select(+ _STREAMS_,+ _TIMEOUT_,- _READSTREAMS_)
|
||||||
|
|
||||||
|
|
||||||
Given a list of open _STREAMS_ opened in read mode and a _TIMEOUT_
|
Given a list of open _STREAMS_ opened in read mode and a _TIMEOUT_
|
||||||
return a list of streams who are now available for reading.
|
return a list of streams who are now available for reading.
|
||||||
|
|
||||||
If the _TIMEOUT_ is instantiated to `off`,
|
If the _TIMEOUT_ is instantiated to `off`,
|
||||||
stream_select/3 will wait indefinitely for a stream to become
|
stream_select/3 will wait indefinitely for a stream to become
|
||||||
@ -1037,7 +1043,7 @@ and `USECS` adds the number of micro-seconds.
|
|||||||
This built-in is only defined if the system call `select` is
|
This built-in is only defined if the system call `select` is
|
||||||
available in the system.
|
available in the system.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
Yap_InitCPred ("$float_format", 1, p_float_format, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("$float_format", 1, p_float_format, SafePredFlag|SyncPredFlag);
|
||||||
|
993
C/parser.c
993
C/parser.c
File diff suppressed because it is too large
Load Diff
1807
C/scanner.c
1807
C/scanner.c
File diff suppressed because it is too large
Load Diff
@ -509,13 +509,18 @@ ADD_SUBDIRECTORY(swi/library)
|
|||||||
# ADD_SUBDIRECTORY(os)
|
# ADD_SUBDIRECTORY(os)
|
||||||
# ADD_SUBDIRECTORY(packages)
|
# ADD_SUBDIRECTORY(packages)
|
||||||
|
|
||||||
if (BUILD_JIT)
|
macro_optional_find_package (LLVM ON)
|
||||||
add_definitions (-DYAP_JIT=1)
|
macro_log_feature (LLVM_FOUND "LLVM JIT generator"
|
||||||
INCLUDE_DIRECTORIES(JIT JIT/HPP)
|
"The LLVM Compiler Infrastructure" "http://www.llvm.org")
|
||||||
macro_optional_add_subdirectory(JIT ON)
|
|
||||||
endif()
|
if (LLVM_FOUND)
|
||||||
|
add_definitions (-DYAP_JIT=1)
|
||||||
|
INCLUDE_DIRECTORIES(JIT JIT/HPP)
|
||||||
|
macro_optional_add_subdirectory(JIT)
|
||||||
|
endif()
|
||||||
|
|
||||||
macro_optional_add_subdirectory(library/mpi)
|
macro_optional_add_subdirectory(library/mpi)
|
||||||
|
|
||||||
macro_optional_add_subdirectory(library/lammpi)
|
macro_optional_add_subdirectory(library/lammpi)
|
||||||
|
|
||||||
macro_optional_add_subdirectory (packages/gecode)
|
macro_optional_add_subdirectory (packages/gecode)
|
||||||
|
@ -4,6 +4,7 @@ typedef enum TokenKinds {
|
|||||||
Var_tok,
|
Var_tok,
|
||||||
String_tok,
|
String_tok,
|
||||||
WString_tok,
|
WString_tok,
|
||||||
|
StringTerm_tok,
|
||||||
Ponctuation_tok,
|
Ponctuation_tok,
|
||||||
Error_tok,
|
Error_tok,
|
||||||
QuasiQuotes_tok,
|
QuasiQuotes_tok,
|
||||||
@ -29,4 +30,3 @@ typedef struct VARSTRUCT {
|
|||||||
struct VARSTRUCT *VarLeft, *VarRight;
|
struct VARSTRUCT *VarLeft, *VarRight;
|
||||||
char VarRep[1];
|
char VarRep[1];
|
||||||
} VarEntry;
|
} VarEntry;
|
||||||
|
|
||||||
|
@ -336,7 +336,7 @@ typedef struct environment {
|
|||||||
|
|
||||||
#if YAP_JIT
|
#if YAP_JIT
|
||||||
/* Enumeration for types of basic blocks -- used on trace construction */
|
/* Enumeration for types of basic blocks -- used on trace construction */
|
||||||
typedef enum {
|
typedef enum block_try {
|
||||||
NONE, // untyped
|
NONE, // untyped
|
||||||
SIMPLE_ENTRY, // first basic block of any yaam opcode
|
SIMPLE_ENTRY, // first basic block of any yaam opcode
|
||||||
SIMPLE, // any other basic block of any yaam opcode
|
SIMPLE, // any other basic block of any yaam opcode
|
||||||
|
32
H/yapio.h
32
H/yapio.h
@ -149,36 +149,6 @@ extern YP_FILE yp_iob[YP_MAX_FILES];
|
|||||||
|
|
||||||
typedef YP_FILE *YP_File;
|
typedef YP_FILE *YP_File;
|
||||||
|
|
||||||
/* ricardo
|
|
||||||
typedef enum TokenKinds {
|
|
||||||
Name_tok,
|
|
||||||
Number_tok,
|
|
||||||
Var_tok,
|
|
||||||
String_tok,
|
|
||||||
WString_tok,
|
|
||||||
Ponctuation_tok,
|
|
||||||
Error_tok,
|
|
||||||
eot_tok
|
|
||||||
} tkinds;
|
|
||||||
|
|
||||||
typedef struct TOKEN {
|
|
||||||
enum TokenKinds Tok;
|
|
||||||
Term TokInfo;
|
|
||||||
int TokPos;
|
|
||||||
struct TOKEN *TokNext;
|
|
||||||
} TokEntry;
|
|
||||||
|
|
||||||
#define Ord(X) ((enum TokenKinds) (X))
|
|
||||||
|
|
||||||
#define NextToken GNextToken( PASS_REGS1 )
|
|
||||||
|
|
||||||
typedef struct VARSTRUCT {
|
|
||||||
Term VarAdr;
|
|
||||||
CELL hv;
|
|
||||||
struct VARSTRUCT *VarLeft, *VarRight;
|
|
||||||
char VarRep[1];
|
|
||||||
} VarEntry;
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _PL_WRITE_
|
#ifndef _PL_WRITE_
|
||||||
|
|
||||||
@ -351,5 +321,3 @@ WideHashFunction(wchar_t *CHP)
|
|||||||
#define QUIET_ON_PARSER_ERROR 1
|
#define QUIET_ON_PARSER_ERROR 1
|
||||||
#define CONTINUE_ON_PARSER_ERROR 2
|
#define CONTINUE_ON_PARSER_ERROR 2
|
||||||
#define EXCEPTION_ON_PARSER_ERROR 3
|
#define EXCEPTION_ON_PARSER_ERROR 3
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,17 +10,12 @@ set(LIBJIT_SOURCES
|
|||||||
jit_statisticpreds.c
|
jit_statisticpreds.c
|
||||||
jit_codegenpreds.c
|
jit_codegenpreds.c
|
||||||
jit_debugpreds.c
|
jit_debugpreds.c
|
||||||
jit_traced.c
|
jit_traced.c
|
||||||
jit_transformpreds.c
|
jit_transformpreds.c
|
||||||
JIT_Compiler.cpp
|
JIT_Compiler.cpp
|
||||||
JIT_Init.cpp
|
JIT_Init.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
macro_optional_find_package (LLVM ON)
|
|
||||||
macro_log_feature (LLVM_FOUND "LLVM JIT generator"
|
|
||||||
"The LLVM Compiler Infrastructure" "http://www.llvm.org")
|
|
||||||
|
|
||||||
|
|
||||||
# The following variables are defined:
|
# The following variables are defined:
|
||||||
# LLVM_FOUND - true if LLVM was found
|
# LLVM_FOUND - true if LLVM was found
|
||||||
# LLVM_CXXFLAGS - C++ compiler flags for files that include LLVM headers.
|
# LLVM_CXXFLAGS - C++ compiler flags for files that include LLVM headers.
|
||||||
|
@ -298,7 +298,7 @@ setUnknown(term_t value, atom_t a, Module m)
|
|||||||
return PL_error(NULL, 0, NULL, ERR_PERMISSION,
|
return PL_error(NULL, 0, NULL, ERR_PERMISSION,
|
||||||
ATOM_modify, ATOM_flag, key);
|
ATOM_modify, ATOM_flag, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !SYSTEM_MODE )
|
if ( !SYSTEM_MODE )
|
||||||
printMessage(ATOM_warning, PL_CHARS, "unknown_in_module_user");
|
printMessage(ATOM_warning, PL_CHARS, "unknown_in_module_user");
|
||||||
}
|
}
|
||||||
@ -1074,7 +1074,7 @@ pl_prolog_flag(term_t name, term_t value, control_t h)
|
|||||||
static void
|
static void
|
||||||
initPrologFlagTable(void)
|
initPrologFlagTable(void)
|
||||||
{ if ( !GD->prolog_flag.table )
|
{ if ( !GD->prolog_flag.table )
|
||||||
{
|
{
|
||||||
#ifndef __YAP_PROLOG__
|
#ifndef __YAP_PROLOG__
|
||||||
initPrologThreads(); /* may be called before PL_initialise() */
|
initPrologThreads(); /* may be called before PL_initialise() */
|
||||||
#endif
|
#endif
|
||||||
@ -1194,7 +1194,7 @@ initPrologFlags(void)
|
|||||||
setPrologFlag("colon_sets_calling_context", FT_BOOL|FF_READONLY, TRUE, 0);
|
setPrologFlag("colon_sets_calling_context", FT_BOOL|FF_READONLY, TRUE, 0);
|
||||||
setPrologFlag("character_escapes", FT_BOOL, TRUE, PLFLAG_CHARESCAPE);
|
setPrologFlag("character_escapes", FT_BOOL, TRUE, PLFLAG_CHARESCAPE);
|
||||||
setPrologFlag("char_conversion", FT_BOOL, FALSE, PLFLAG_CHARCONVERSION);
|
setPrologFlag("char_conversion", FT_BOOL, FALSE, PLFLAG_CHARCONVERSION);
|
||||||
setPrologFlag("backquoted_string", FT_BOOL, FALSE, PLFLAG_BACKQUOTED_STRING);
|
setPrologFlag("backquoted_string", FT_BOOL, TRUE, PLFLAG_BACKQUOTED_STRING);
|
||||||
#ifdef O_QUASIQUOTATIONS
|
#ifdef O_QUASIQUOTATIONS
|
||||||
setPrologFlag("quasi_quotations", FT_BOOL, TRUE, PLFLAG_QUASI_QUOTES);
|
setPrologFlag("quasi_quotations", FT_BOOL, TRUE, PLFLAG_QUASI_QUOTES);
|
||||||
#endif
|
#endif
|
||||||
@ -1329,4 +1329,3 @@ BeginPredDefs(prologflag)
|
|||||||
EndPredDefs
|
EndPredDefs
|
||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
44
os/pl-utf8.c
44
os/pl-utf8.c
@ -152,27 +152,27 @@ char *
|
|||||||
_PL__utf8_skip_char(const char *in)
|
_PL__utf8_skip_char(const char *in)
|
||||||
{ /* 2-byte, 0x80-0x7ff */
|
{ /* 2-byte, 0x80-0x7ff */
|
||||||
if ( (in[0]&0xe0) == 0xc0 && CONT(1) )
|
if ( (in[0]&0xe0) == 0xc0 && CONT(1) )
|
||||||
{
|
{
|
||||||
return (char *)in+2;
|
return (char *)in+2;
|
||||||
}
|
}
|
||||||
/* 3-byte, 0x800-0xffff */
|
/* 3-byte, 0x800-0xffff */
|
||||||
if ( (in[0]&0xf0) == 0xe0 && CONT(1) && CONT(2) )
|
if ( (in[0]&0xf0) == 0xe0 && CONT(1) && CONT(2) )
|
||||||
{
|
{
|
||||||
return (char *)in+3;
|
return (char *)in+3;
|
||||||
}
|
}
|
||||||
/* 4-byte, 0x10000-0x1FFFFF */
|
/* 4-byte, 0x10000-0x1FFFFF */
|
||||||
if ( (in[0]&0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3) )
|
if ( (in[0]&0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3) )
|
||||||
{
|
{
|
||||||
return (char *)in+4;
|
return (char *)in+4;
|
||||||
}
|
}
|
||||||
/* 5-byte, 0x200000-0x3FFFFFF */
|
/* 5-byte, 0x200000-0x3FFFFFF */
|
||||||
if ( (in[0]&0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4) )
|
if ( (in[0]&0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4) )
|
||||||
{
|
{
|
||||||
return (char *)in+5;
|
return (char *)in+5;
|
||||||
}
|
}
|
||||||
/* 6-byte, 0x400000-0x7FFFFFF */
|
/* 6-byte, 0x400000-0x7FFFFFF */
|
||||||
if ( (in[0]&0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5) )
|
if ( (in[0]&0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5) )
|
||||||
{
|
{
|
||||||
return (char *)in+4;
|
return (char *)in+4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,11 +197,11 @@ utf8_strlen(const char *s, size_t len)
|
|||||||
|
|
||||||
size_t
|
size_t
|
||||||
utf8_strlen1(const char *s)
|
utf8_strlen1(const char *s)
|
||||||
{
|
{
|
||||||
unsigned int l = 0;
|
unsigned int l = 0;
|
||||||
|
|
||||||
while( s [0] )
|
while( s [0] )
|
||||||
{
|
{
|
||||||
s = utf8_skip_char(s);
|
s = utf8_skip_char(s);
|
||||||
l++;
|
l++;
|
||||||
}
|
}
|
||||||
@ -211,9 +211,9 @@ utf8_strlen1(const char *s)
|
|||||||
|
|
||||||
const char *
|
const char *
|
||||||
utf8_skip(const char *s, int n)
|
utf8_skip(const char *s, int n)
|
||||||
{
|
{
|
||||||
while(n--)
|
while(n--)
|
||||||
{
|
{
|
||||||
if (!s[0]) return NULL;
|
if (!s[0]) return NULL;
|
||||||
s = utf8_skip_char(s);
|
s = utf8_skip_char(s);
|
||||||
}
|
}
|
||||||
@ -223,8 +223,8 @@ utf8_skip(const char *s, int n)
|
|||||||
|
|
||||||
int
|
int
|
||||||
utf8_strncmp(const char *s1, const char *s2, size_t n)
|
utf8_strncmp(const char *s1, const char *s2, size_t n)
|
||||||
{
|
{
|
||||||
|
|
||||||
while(n-- >0)
|
while(n-- >0)
|
||||||
{ int chr1, chr2;
|
{ int chr1, chr2;
|
||||||
|
|
||||||
@ -239,8 +239,8 @@ utf8_strncmp(const char *s1, const char *s2, size_t n)
|
|||||||
|
|
||||||
int
|
int
|
||||||
utf8_strprefix(const char *s1, const char *s2)
|
utf8_strprefix(const char *s1, const char *s2)
|
||||||
{
|
{
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{ int chr1, chr2;
|
{ int chr1, chr2;
|
||||||
|
|
||||||
@ -252,3 +252,21 @@ utf8_strprefix(const char *s1, const char *s2)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
utf8_wcscpy(char *sf, const wchar_t *s0)
|
||||||
|
{
|
||||||
|
char *sf0 = sf;
|
||||||
|
while(1)
|
||||||
|
{ int chr1;
|
||||||
|
|
||||||
|
chr1 = * s0++;
|
||||||
|
if (chr1 == '\0') {
|
||||||
|
*sf++ = '\0';
|
||||||
|
return sf0;
|
||||||
|
}
|
||||||
|
sf = utf8_put_char(sf, chr1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
#ifndef UTF8_H_INCLUDED
|
#ifndef UTF8_H_INCLUDED
|
||||||
#define UTF8_H_INCLUDED
|
#define UTF8_H_INCLUDED
|
||||||
|
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
#define PL_MB_LEN_MAX 16
|
#define PL_MB_LEN_MAX 16
|
||||||
|
|
||||||
#define UTF8_MALFORMED_REPLACEMENT 0xfffd
|
#define UTF8_MALFORMED_REPLACEMENT 0xfffd
|
||||||
@ -66,6 +68,8 @@ extern size_t utf8_strlen1(const char *s);
|
|||||||
extern const char * utf8_skip(const char *s, int n);
|
extern const char * utf8_skip(const char *s, int n);
|
||||||
extern int utf8_strncmp(const char *s1, const char *s2, size_t n);
|
extern int utf8_strncmp(const char *s1, const char *s2, size_t n);
|
||||||
extern int utf8_strprefix(const char *s1, const char *s2);
|
extern int utf8_strprefix(const char *s1, const char *s2);
|
||||||
|
/// copy a wide string to an UTF-8 version.
|
||||||
|
extern char *utf8_wcscpy(char *sf, const wchar_t *s0);
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
S_ASCII,
|
S_ASCII,
|
||||||
|
@ -95,7 +95,7 @@ pl_nl1(term_t stream)
|
|||||||
fail;
|
fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred nl is iso
|
/** @pred nl is iso
|
||||||
|
|
||||||
Outputs a new line to the current output stream.
|
Outputs a new line to the current output stream.
|
||||||
|
|
||||||
@ -219,7 +219,7 @@ bind_varnames(term_t varnames ARG_LD)
|
|||||||
|
|
||||||
char *
|
char *
|
||||||
varName(term_t t, char *name)
|
varName(term_t t, char *name)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
CELL *adr = (CELL *)Yap_GetFromSlot(t PASS_REGS);
|
CELL *adr = (CELL *)Yap_GetFromSlot(t PASS_REGS);
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ writeTopTerm(term_t t, int prec, write_options *options)
|
|||||||
UInt yap_flag = Use_SWI_Stream_f;
|
UInt yap_flag = Use_SWI_Stream_f;
|
||||||
int flags = options->flags;
|
int flags = options->flags;
|
||||||
Term old_module;
|
Term old_module;
|
||||||
|
|
||||||
if (flags & PL_WRT_QUOTED)
|
if (flags & PL_WRT_QUOTED)
|
||||||
yap_flag |= Quote_illegal_f;
|
yap_flag |= Quote_illegal_f;
|
||||||
if (options->flags & PL_WRT_NUMBERVARS)
|
if (options->flags & PL_WRT_NUMBERVARS)
|
||||||
@ -486,7 +486,7 @@ pl_write_term3(term_t stream, term_t term, term_t opts)
|
|||||||
|
|
||||||
options.module = lookupModule(mname);
|
options.module = lookupModule(mname);
|
||||||
if ( charescape == TRUE ||
|
if ( charescape == TRUE ||
|
||||||
(charescape == -1
|
(charescape == -1
|
||||||
#ifndef __YAP_PROLOG__
|
#ifndef __YAP_PROLOG__
|
||||||
&& True(options.module, M_CHARESCAPE)
|
&& True(options.module, M_CHARESCAPE)
|
||||||
#endif
|
#endif
|
||||||
@ -543,7 +543,7 @@ out:
|
|||||||
Displays term _T_ on the current output stream, according to the same
|
Displays term _T_ on the current output stream, according to the same
|
||||||
options used by `write_term/3`.
|
options used by `write_term/3`.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/// @memberof write_term/3
|
/// @memberof write_term/3
|
||||||
word
|
word
|
||||||
@ -551,7 +551,7 @@ pl_write_term(term_t term, term_t options)
|
|||||||
{ return pl_write_term3(0, term, options);
|
{ return pl_write_term3(0, term, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred write_term(+ _T_, + _Opts_) is iso
|
/** @pred write_term(+ _T_, + _Opts_) is iso
|
||||||
|
|
||||||
|
|
||||||
Displays term _T_ on the current output stream, according to the
|
Displays term _T_ on the current output stream, according to the
|
||||||
@ -592,7 +592,7 @@ unlimited depth.
|
|||||||
|
|
||||||
+ priority(+ _Piority_)
|
+ priority(+ _Piority_)
|
||||||
|
|
||||||
If `Priority` is a positive integer smaller than `1200`,
|
If `Priority` is a positive integer smaller than `1200`,
|
||||||
give the context priority. The default is `1200`.
|
give the context priority. The default is `1200`.
|
||||||
|
|
||||||
+ cycles(+ _Bool_)
|
+ cycles(+ _Bool_)
|
||||||
@ -628,9 +628,9 @@ do_write2(term_t stream, term_t term, int flags)
|
|||||||
options.flags = flags;
|
options.flags = flags;
|
||||||
options.out = s;
|
options.out = s;
|
||||||
options.module = MODULE_user;
|
options.module = MODULE_user;
|
||||||
if ( options.module
|
if ( options.module
|
||||||
#ifndef __YAP_PROLOG__
|
#ifndef __YAP_PROLOG__
|
||||||
&& True(options.module, M_CHARESCAPE)
|
&& True(options.module, M_CHARESCAPE)
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
options.flags |= PL_WRT_CHARESCAPES;
|
options.flags |= PL_WRT_CHARESCAPES;
|
||||||
@ -654,7 +654,7 @@ do_write2(term_t stream, term_t term, int flags)
|
|||||||
Writes term _T_ to stream _S_ instead of to the current output
|
Writes term _T_ to stream _S_ instead of to the current output
|
||||||
stream.
|
stream.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/// @memberof write/2
|
/// @memberof write/2
|
||||||
word
|
word
|
||||||
@ -666,7 +666,7 @@ pl_write2(term_t stream, term_t term)
|
|||||||
|
|
||||||
As writeq/1, but the output is sent to the stream _S_.
|
As writeq/1, but the output is sent to the stream _S_.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/// @memberof writeq/2
|
/// @memberof writeq/2
|
||||||
word
|
word
|
||||||
@ -679,7 +679,7 @@ pl_writeq2(term_t stream, term_t term)
|
|||||||
Prints term _T_ to the stream _S_ instead of to the current output
|
Prints term _T_ to the stream _S_ instead of to the current output
|
||||||
stream.
|
stream.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/// @memberof print/2
|
/// @memberof print/2
|
||||||
word
|
word
|
||||||
@ -693,7 +693,7 @@ pl_print2(term_t stream, term_t term)
|
|||||||
Displays term _T_ on the stream _S_. Atoms are quoted when
|
Displays term _T_ on the stream _S_. Atoms are quoted when
|
||||||
necessary, and operators are ignored.
|
necessary, and operators are ignored.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/// @memberof write_canonical/2
|
/// @memberof write_canonical/2
|
||||||
word
|
word
|
||||||
@ -711,7 +711,7 @@ pl_write_canonical2(term_t stream, term_t term)
|
|||||||
|
|
||||||
rc = ( numberVars(term, &options, 0 PASS_LD) >= 0 &&
|
rc = ( numberVars(term, &options, 0 PASS_LD) >= 0 &&
|
||||||
do_write2(stream, term,
|
do_write2(stream, term,
|
||||||
PL_WRT_QUOTED|PL_WRT_IGNOREOPS|PL_WRT_NUMBERVARS)
|
PL_WRT_QUOTED|PL_WRT_IGNOREOPS|PL_WRT_NUMBERVARS|PLFLAG_BACKQUOTED_STRING)
|
||||||
);
|
);
|
||||||
|
|
||||||
END_NUMBERVARS(TRUE);
|
END_NUMBERVARS(TRUE);
|
||||||
@ -719,7 +719,7 @@ pl_write_canonical2(term_t stream, term_t term)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred write( _T_) is iso
|
/** @pred write( _T_) is iso
|
||||||
|
|
||||||
|
|
||||||
The term _T_ is written to the current output stream according to
|
The term _T_ is written to the current output stream according to
|
||||||
@ -732,17 +732,17 @@ pl_write(term_t term)
|
|||||||
}
|
}
|
||||||
|
|
||||||
word
|
word
|
||||||
/** @pred writeq( _T_) is iso
|
/** @pred writeq( _T_) is iso
|
||||||
|
|
||||||
Writes the term _T_, quoting names to make the result acceptable to
|
Writes the term _T_, quoting names to make the result acceptable to
|
||||||
the predicate `read` whenever necessary.
|
the predicate `read` whenever necessary.
|
||||||
*/
|
*/
|
||||||
/// @memberof writeq/1
|
/// @memberof writeq/1
|
||||||
pl_writeq(term_t term)
|
pl_writeq(term_t term)
|
||||||
{ return pl_writeq2(0, term);
|
{ return pl_writeq2(0, term);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred print( _T_)
|
/** @pred print( _T_)
|
||||||
|
|
||||||
|
|
||||||
Prints the term _T_ to the current output stream using write/1
|
Prints the term _T_ to the current output stream using write/1
|
||||||
@ -750,7 +750,7 @@ unless T is bound and a call to the user-defined predicate
|
|||||||
`portray/1` succeeds. To do pretty printing of terms the user should
|
`portray/1` succeeds. To do pretty printing of terms the user should
|
||||||
define suitable clauses for `portray/1` and use print/1.
|
define suitable clauses for `portray/1` and use print/1.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/// @memberof print/1
|
/// @memberof print/1
|
||||||
word
|
word
|
||||||
@ -758,14 +758,14 @@ pl_print(term_t term)
|
|||||||
{ return pl_print2(0, term);
|
{ return pl_print2(0, term);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred write_canonical(+ _T_) is iso
|
/** @pred write_canonical(+ _T_) is iso
|
||||||
|
|
||||||
|
|
||||||
Displays term _T_ on the current output stream. Atoms are quoted
|
Displays term _T_ on the current output stream. Atoms are quoted
|
||||||
when necessary, and operators are ignored, that is, the term is written
|
when necessary, and operators are ignored, that is, the term is written
|
||||||
in standard parenthesized prefix notation.
|
in standard parenthesized prefix notation.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/// @memberof write_canonical/1
|
/// @memberof write_canonical/1
|
||||||
word
|
word
|
||||||
@ -773,13 +773,13 @@ pl_write_canonical(term_t term)
|
|||||||
{ return pl_write_canonical2(0, term);
|
{ return pl_write_canonical2(0, term);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred writeln( _T_)
|
/** @pred writeln( _T_)
|
||||||
|
|
||||||
|
|
||||||
Prints the term _T_ to the current output stream using write/1,
|
Prints the term _T_ to the current output stream using write/1,
|
||||||
followed by a newline.
|
followed by a newline.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/// @memberof writeln/1
|
/// @memberof writeln/1
|
||||||
word
|
word
|
||||||
@ -796,5 +796,3 @@ pl_writeln(term_t term)
|
|||||||
|
|
||||||
BeginPredDefs(write)
|
BeginPredDefs(write)
|
||||||
EndPredDefs
|
EndPredDefs
|
||||||
|
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 849232fea0f549f6704b16afa1c986e0d50ec177
|
Subproject commit 8257467ff9a7bb901d1688e6a75ad072e0246aba
|
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
|||||||
Subproject commit d0d1ee4d58373cc611676103e0a50a3ae451a023
|
Subproject commit 9972458293415b2d72276bd67875767bfeed00df
|
@ -1,4 +1,7 @@
|
|||||||
|
|
||||||
|
#ifdef _XOPEN_SOURCE
|
||||||
|
#undef _XOPEN_SOURCE // python does its own thing
|
||||||
|
#endif
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
#include <SWI-Stream.h>
|
#include <SWI-Stream.h>
|
||||||
#include <SWI-Prolog.h>
|
#include <SWI-Prolog.h>
|
||||||
@ -13,26 +16,26 @@ static atom_t ATOM_true,
|
|||||||
ATOM_t;
|
ATOM_t;
|
||||||
|
|
||||||
static functor_t FUNCTOR_dollar1,
|
static functor_t FUNCTOR_dollar1,
|
||||||
FUNCTOR_abs1,
|
FUNCTOR_abs1,
|
||||||
FUNCTOR_all1,
|
FUNCTOR_all1,
|
||||||
FUNCTOR_any1,
|
FUNCTOR_any1,
|
||||||
FUNCTOR_bin1,
|
FUNCTOR_bin1,
|
||||||
FUNCTOR_dir1,
|
FUNCTOR_dir1,
|
||||||
FUNCTOR_float1,
|
FUNCTOR_float1,
|
||||||
FUNCTOR_int1,
|
FUNCTOR_int1,
|
||||||
FUNCTOR_iter1,
|
FUNCTOR_iter1,
|
||||||
FUNCTOR_iter2,
|
FUNCTOR_iter2,
|
||||||
FUNCTOR_long1,
|
FUNCTOR_long1,
|
||||||
FUNCTOR_len1,
|
FUNCTOR_len1,
|
||||||
FUNCTOR_curly1,
|
FUNCTOR_curly1,
|
||||||
FUNCTOR_ord1,
|
FUNCTOR_ord1,
|
||||||
FUNCTOR_range1,
|
FUNCTOR_range1,
|
||||||
FUNCTOR_range2,
|
FUNCTOR_range2,
|
||||||
FUNCTOR_range3,
|
FUNCTOR_range3,
|
||||||
FUNCTOR_sum1,
|
FUNCTOR_sum1,
|
||||||
FUNCTOR_pointer1,
|
FUNCTOR_pointer1,
|
||||||
FUNCTOR_complex2,
|
FUNCTOR_complex2,
|
||||||
FUNCTOR_plus2,
|
FUNCTOR_plus2,
|
||||||
FUNCTOR_sub2,
|
FUNCTOR_sub2,
|
||||||
FUNCTOR_mul2,
|
FUNCTOR_mul2,
|
||||||
FUNCTOR_div2,
|
FUNCTOR_div2,
|
||||||
@ -135,7 +138,7 @@ static PyObject *
|
|||||||
bip_abs(term_t t)
|
bip_abs(term_t t)
|
||||||
{
|
{
|
||||||
PyObject *pVal;
|
PyObject *pVal;
|
||||||
|
|
||||||
if (! PL_get_arg(1, t, t) )
|
if (! PL_get_arg(1, t, t) )
|
||||||
return NULL;
|
return NULL;
|
||||||
pVal = term_to_python(t);
|
pVal = term_to_python(t);
|
||||||
@ -239,7 +242,7 @@ static PyObject *
|
|||||||
bip_float(term_t t)
|
bip_float(term_t t)
|
||||||
{
|
{
|
||||||
PyObject *pVal, *o;
|
PyObject *pVal, *o;
|
||||||
|
|
||||||
if (! PL_get_arg(1, t, t) )
|
if (! PL_get_arg(1, t, t) )
|
||||||
return NULL;
|
return NULL;
|
||||||
pVal = term_to_python(t);
|
pVal = term_to_python(t);
|
||||||
@ -261,7 +264,7 @@ static PyObject *
|
|||||||
bip_int(term_t t)
|
bip_int(term_t t)
|
||||||
{
|
{
|
||||||
PyObject *pVal, *o;
|
PyObject *pVal, *o;
|
||||||
|
|
||||||
if (! PL_get_arg(1, t, t) )
|
if (! PL_get_arg(1, t, t) )
|
||||||
return NULL;
|
return NULL;
|
||||||
pVal = term_to_python(t);
|
pVal = term_to_python(t);
|
||||||
@ -290,7 +293,7 @@ static PyObject *
|
|||||||
bip_long(term_t t)
|
bip_long(term_t t)
|
||||||
{
|
{
|
||||||
PyObject *pVal, *o;
|
PyObject *pVal, *o;
|
||||||
|
|
||||||
if (! PL_get_arg(1, t, t) )
|
if (! PL_get_arg(1, t, t) )
|
||||||
return NULL;
|
return NULL;
|
||||||
pVal = term_to_python(t);
|
pVal = term_to_python(t);
|
||||||
@ -312,7 +315,7 @@ static PyObject *
|
|||||||
bip_iter(term_t t)
|
bip_iter(term_t t)
|
||||||
{
|
{
|
||||||
PyObject *v;
|
PyObject *v;
|
||||||
|
|
||||||
if (! PL_get_arg(1, t, t) )
|
if (! PL_get_arg(1, t, t) )
|
||||||
return NULL;
|
return NULL;
|
||||||
v = term_to_python(t);
|
v = term_to_python(t);
|
||||||
@ -325,7 +328,7 @@ bip_ord(term_t t)
|
|||||||
{
|
{
|
||||||
PyObject *pVal;
|
PyObject *pVal;
|
||||||
Py_ssize_t size;
|
Py_ssize_t size;
|
||||||
|
|
||||||
if (! PL_get_arg(1, t, t) )
|
if (! PL_get_arg(1, t, t) )
|
||||||
return NULL;
|
return NULL;
|
||||||
pVal = term_to_python(t);
|
pVal = term_to_python(t);
|
||||||
@ -361,7 +364,7 @@ bip_ord(term_t t)
|
|||||||
#else
|
#else
|
||||||
return PyLong_FromLong(s[0]);
|
return PyLong_FromLong(s[0]);
|
||||||
#endif
|
#endif
|
||||||
} else
|
} else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -661,7 +664,7 @@ term_to_python(term_t t)
|
|||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
atom_t at;
|
atom_t at;
|
||||||
|
|
||||||
if (PL_get_atom(t, &at)) {
|
if (PL_get_atom(t, &at)) {
|
||||||
if (at == ATOM_true) return Py_True;
|
if (at == ATOM_true) return Py_True;
|
||||||
if (at == ATOM_false) return Py_False;
|
if (at == ATOM_false) return Py_False;
|
||||||
@ -711,7 +714,7 @@ term_to_python(term_t t)
|
|||||||
out = PyList_New(len);
|
out = PyList_New(len);
|
||||||
if (!out)
|
if (!out)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (i=0; i< len; i++) {
|
for (i=0; i< len; i++) {
|
||||||
if (!PL_get_list(t, arg, t)) {
|
if (!PL_get_list(t, arg, t)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -896,7 +899,7 @@ term_to_python(term_t t)
|
|||||||
rhs = term_to_python(targ);
|
rhs = term_to_python(targ);
|
||||||
if (PySequence_Check(lhs) && (
|
if (PySequence_Check(lhs) && (
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
PyInt_Check(rhs) ||
|
PyInt_Check(rhs) ||
|
||||||
#endif
|
#endif
|
||||||
PyLong_Check(rhs)) ){
|
PyLong_Check(rhs)) ){
|
||||||
return PySequence_Repeat(lhs, get_p_int(rhs, 0));
|
return PySequence_Repeat(lhs, get_p_int(rhs, 0));
|
||||||
@ -923,7 +926,7 @@ term_to_python(term_t t)
|
|||||||
PyNumber_Divide(lhs, rhs);
|
PyNumber_Divide(lhs, rhs);
|
||||||
#else
|
#else
|
||||||
return
|
return
|
||||||
PyNumber_TrueDivide(lhs, rhs);
|
PyNumber_TrueDivide(lhs, rhs);
|
||||||
#endif
|
#endif
|
||||||
} else if (fun == FUNCTOR_hat2) {
|
} else if (fun == FUNCTOR_hat2) {
|
||||||
term_t targ = PL_new_term_ref(), trhs = PL_new_term_ref();
|
term_t targ = PL_new_term_ref(), trhs = PL_new_term_ref();
|
||||||
@ -964,7 +967,7 @@ term_to_python(term_t t)
|
|||||||
if (!o)
|
if (!o)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (! PL_get_arg(2, t, t) )
|
if (! PL_get_arg(2, t, t) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!PL_get_functor(t, &fun))
|
if (!PL_get_functor(t, &fun))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -979,7 +982,7 @@ term_to_python(term_t t)
|
|||||||
return NULL;
|
return NULL;
|
||||||
if ((pValue = PyObject_GetAttrString(o, s)) == NULL) {
|
if ((pValue = PyObject_GetAttrString(o, s)) == NULL) {
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return pValue;
|
return pValue;
|
||||||
}
|
}
|
||||||
@ -1044,7 +1047,7 @@ assign_python(PyObject *root, term_t t, PyObject *e)
|
|||||||
case PL_ATOM:
|
case PL_ATOM:
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
if (!PL_get_atom_chars(t, &s)) {
|
if (!PL_get_atom_chars(t, &s)) {
|
||||||
wchar_t *w;
|
wchar_t *w;
|
||||||
atom_t at;
|
atom_t at;
|
||||||
@ -1056,13 +1059,13 @@ assign_python(PyObject *root, term_t t, PyObject *e)
|
|||||||
if (!(w = PL_atom_wchars(at, &len)))
|
if (!(w = PL_atom_wchars(at, &len)))
|
||||||
return -1;
|
return -1;
|
||||||
wo = PyUnicode_FromWideChar(w, wcslen(w) );
|
wo = PyUnicode_FromWideChar(w, wcslen(w) );
|
||||||
return PyObject_SetAttr(root, wo, e);
|
return PyObject_SetAttr(root, wo, e);
|
||||||
}
|
}
|
||||||
if (proper_ascii_string(s)) {
|
if (proper_ascii_string(s)) {
|
||||||
return PyObject_SetAttrString(root, s, e);
|
return PyObject_SetAttrString(root, s, e);
|
||||||
} else {
|
} else {
|
||||||
PyObject *wo= PyUnicode_DecodeLatin1(s, strlen(s), NULL);
|
PyObject *wo= PyUnicode_DecodeLatin1(s, strlen(s), NULL);
|
||||||
return PyObject_SetAttr(root, wo, e);
|
return PyObject_SetAttr(root, wo, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case PL_INTEGER:
|
case PL_INTEGER:
|
||||||
@ -1080,7 +1083,7 @@ assign_python(PyObject *root, term_t t, PyObject *e)
|
|||||||
if (fun == FUNCTOR_dollar1) {
|
if (fun == FUNCTOR_dollar1) {
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
|
|
||||||
if (! PL_get_arg(1, t, t) )
|
if (! PL_get_arg(1, t, t) )
|
||||||
return -1;
|
return -1;
|
||||||
if (!PL_get_atom_chars(t, &s)) {
|
if (!PL_get_atom_chars(t, &s)) {
|
||||||
@ -1147,7 +1150,7 @@ address_to_term(PyObject *pVal, term_t t)
|
|||||||
PL_put_pointer(t1, (void *)pVal);
|
PL_put_pointer(t1, (void *)pVal);
|
||||||
PL_cons_functor(to, FUNCTOR_pointer1, t1);
|
PL_cons_functor(to, FUNCTOR_pointer1, t1);
|
||||||
Py_INCREF(pVal);
|
Py_INCREF(pVal);
|
||||||
return PL_unify(t, to);
|
return PL_unify(t, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
@ -1225,7 +1228,7 @@ python_to_term(PyObject *pVal, term_t t)
|
|||||||
term_t to = PL_new_term_ref(), ti = to;
|
term_t to = PL_new_term_ref(), ti = to;
|
||||||
int left = PyDict_Size(pVal);
|
int left = PyDict_Size(pVal);
|
||||||
PyObject *key, *value;
|
PyObject *key, *value;
|
||||||
|
|
||||||
while (PyDict_Next(pVal, &pos, &key, &value)) {
|
while (PyDict_Next(pVal, &pos, &key, &value)) {
|
||||||
term_t tkey = PL_new_term_ref(), tval = PL_new_term_ref(), tint, tnew = PL_new_term_ref();
|
term_t tkey = PL_new_term_ref(), tval = PL_new_term_ref(), tint, tnew = PL_new_term_ref();
|
||||||
/* do something interesting with the values... */
|
/* do something interesting with the values... */
|
||||||
@ -1257,12 +1260,12 @@ python_to_term(PyObject *pVal, term_t t)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
python_import(term_t mname, term_t mod)
|
python_import(term_t mname, term_t mod)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
size_t len;
|
size_t len;
|
||||||
PyObject *pName, *pModule;
|
PyObject *pName, *pModule;
|
||||||
|
|
||||||
if ( !PL_get_nchars(mname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
if ( !PL_get_nchars(mname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
@ -1285,7 +1288,7 @@ python_import(term_t mname, term_t mod)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
python_f(term_t tmod, term_t fname, term_t tf)
|
python_f(term_t tmod, term_t fname, term_t tf)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
size_t len;
|
size_t len;
|
||||||
PyObject *pF, *pModule;
|
PyObject *pF, *pModule;
|
||||||
@ -1294,7 +1297,7 @@ python_f(term_t tmod, term_t fname, term_t tf)
|
|||||||
if ( PL_is_atom(tmod) ) {
|
if ( PL_is_atom(tmod) ) {
|
||||||
PyObject *pName;
|
PyObject *pName;
|
||||||
|
|
||||||
if ( !PL_get_nchars(fname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
if ( !PL_get_nchars(fname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
@ -1308,7 +1311,7 @@ python_f(term_t tmod, term_t fname, term_t tf)
|
|||||||
pModule = PyImport_Import(pName);
|
pModule = PyImport_Import(pName);
|
||||||
} else if (!(pModule = term_to_python(tmod)))
|
} else if (!(pModule = term_to_python(tmod)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if ( !PL_get_nchars(fname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
if ( !PL_get_nchars(fname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
pF = PyObject_GetAttrString(pModule, s);
|
pF = PyObject_GetAttrString(pModule, s);
|
||||||
@ -1322,13 +1325,13 @@ python_f(term_t tmod, term_t fname, term_t tf)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
python_o(term_t tmod, term_t fname, term_t tf)
|
python_o(term_t tmod, term_t fname, term_t tf)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
size_t len;
|
size_t len;
|
||||||
PyObject *pO, *pModule;
|
PyObject *pO, *pModule;
|
||||||
|
|
||||||
pModule = term_to_python(tmod);
|
pModule = term_to_python(tmod);
|
||||||
if ( !PL_get_nchars(fname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
if ( !PL_get_nchars(fname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
pO = PyObject_GetAttrString(pModule, s);
|
pO = PyObject_GetAttrString(pModule, s);
|
||||||
@ -1340,7 +1343,7 @@ python_o(term_t tmod, term_t fname, term_t tf)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
python_len(term_t tobj, term_t tf)
|
python_len(term_t tobj, term_t tf)
|
||||||
{
|
{
|
||||||
Py_ssize_t len;
|
Py_ssize_t len;
|
||||||
PyObject *o;
|
PyObject *o;
|
||||||
|
|
||||||
@ -1353,7 +1356,7 @@ python_len(term_t tobj, term_t tf)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
python_dir(term_t tobj, term_t tf)
|
python_dir(term_t tobj, term_t tf)
|
||||||
{
|
{
|
||||||
PyObject *dir;
|
PyObject *dir;
|
||||||
PyObject *o;
|
PyObject *o;
|
||||||
|
|
||||||
@ -1366,7 +1369,7 @@ python_dir(term_t tobj, term_t tf)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
python_is(term_t tobj, term_t tf)
|
python_is(term_t tobj, term_t tf)
|
||||||
{
|
{
|
||||||
PyObject *o;
|
PyObject *o;
|
||||||
|
|
||||||
o = term_to_python(tobj);
|
o = term_to_python(tobj);
|
||||||
@ -1377,7 +1380,7 @@ python_is(term_t tobj, term_t tf)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
python_apply(term_t tin, term_t targs, term_t keywds, term_t tf)
|
python_apply(term_t tin, term_t targs, term_t keywds, term_t tf)
|
||||||
{
|
{
|
||||||
PyObject *pF, *pValue;
|
PyObject *pF, *pValue;
|
||||||
PyObject *pArgs, *pKeywords;
|
PyObject *pArgs, *pKeywords;
|
||||||
int i, arity;
|
int i, arity;
|
||||||
@ -1397,7 +1400,7 @@ python_apply(term_t tin, term_t targs, term_t keywds, term_t tf)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (aname == ATOM_t) {
|
if (aname == ATOM_t) {
|
||||||
if (arity == 0)
|
if (arity == 0)
|
||||||
pArgs = NULL;
|
pArgs = NULL;
|
||||||
else
|
else
|
||||||
pArgs = term_to_python( targs );
|
pArgs = term_to_python( targs );
|
||||||
@ -1473,7 +1476,7 @@ python_access(term_t obj, term_t f, term_t out)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
if ((pValue = PyObject_GetAttrString(o, s)) == NULL) {
|
if ((pValue = PyObject_GetAttrString(o, s)) == NULL) {
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return python_to_term(pValue, out);
|
return python_to_term(pValue, out);
|
||||||
}
|
}
|
||||||
@ -1490,18 +1493,18 @@ python_access(term_t obj, term_t f, term_t out)
|
|||||||
lhs = term_to_python(tleft);
|
lhs = term_to_python(tleft);
|
||||||
if ((o = PyObject_GetAttr(o, lhs)) == NULL) {
|
if ((o = PyObject_GetAttr(o, lhs)) == NULL) {
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (! PL_get_arg(2, f, f) )
|
if (! PL_get_arg(2, f, f) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (! PL_get_name_arity( f, &name, &arity) ) {
|
if (! PL_get_name_arity( f, &name, &arity) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s = PL_atom_chars(name);
|
s = PL_atom_chars(name);
|
||||||
if ((pF = PyObject_GetAttrString(o, s)) == NULL) {
|
if ((pF = PyObject_GetAttrString(o, s)) == NULL) {
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
pArgs = PyTuple_New(arity);
|
pArgs = PyTuple_New(arity);
|
||||||
for (i = 0 ; i < arity; i++) {
|
for (i = 0 ; i < arity; i++) {
|
||||||
@ -1554,13 +1557,13 @@ python_field(term_t f, term_t tobj, term_t tname, term_t tout)
|
|||||||
} else if ((o = PyObject_GetAttr(o, lhs)) == NULL) {
|
} else if ((o = PyObject_GetAttr(o, lhs)) == NULL) {
|
||||||
// PyErr_Print();
|
// PyErr_Print();
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (! PL_get_arg(2, f, f) )
|
if (! PL_get_arg(2, f, f) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (! PL_get_name_arity( f, &name, &arity) ) {
|
if (! PL_get_name_arity( f, &name, &arity) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s = PL_atom_chars(name);
|
s = PL_atom_chars(name);
|
||||||
if (!s || !o) {
|
if (!s || !o) {
|
||||||
@ -1568,7 +1571,7 @@ python_field(term_t f, term_t tobj, term_t tname, term_t tout)
|
|||||||
} else if ((pF = PyObject_GetAttrString(o, s)) == NULL) {
|
} else if ((pF = PyObject_GetAttrString(o, s)) == NULL) {
|
||||||
// PyErr_Print();
|
// PyErr_Print();
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
address_to_term(pF, tobj) &&
|
address_to_term(pF, tobj) &&
|
||||||
@ -1578,13 +1581,13 @@ python_field(term_t f, term_t tobj, term_t tname, term_t tout)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
python_main_module(term_t mod)
|
python_main_module(term_t mod)
|
||||||
{
|
{
|
||||||
return address_to_term(py_Main, mod);
|
return address_to_term(py_Main, mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
python_function(term_t tobj)
|
python_function(term_t tobj)
|
||||||
{
|
{
|
||||||
PyObject *obj = term_to_python(tobj);
|
PyObject *obj = term_to_python(tobj);
|
||||||
|
|
||||||
return PyFunction_Check(obj);
|
return PyFunction_Check(obj);
|
||||||
@ -1592,11 +1595,11 @@ python_function(term_t tobj)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
python_run_command(term_t cmd)
|
python_run_command(term_t cmd)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
if ( PL_get_nchars(cmd, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
if ( PL_get_nchars(cmd, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
||||||
PyRun_SimpleString(s);
|
PyRun_SimpleString(s);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -1606,7 +1609,7 @@ python_run_command(term_t cmd)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
init_python(void)
|
init_python(void)
|
||||||
{
|
{
|
||||||
Py_Initialize();
|
Py_Initialize();
|
||||||
py_Main = PyImport_AddModule("__main__");
|
py_Main = PyImport_AddModule("__main__");
|
||||||
|
|
||||||
@ -1615,7 +1618,7 @@ init_python(void)
|
|||||||
|
|
||||||
static foreign_t
|
static foreign_t
|
||||||
end_python(void)
|
end_python(void)
|
||||||
{
|
{
|
||||||
Py_Finalize();
|
Py_Finalize();
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -1677,4 +1680,3 @@ install_python(void)
|
|||||||
PL_register_foreign("python_run_command", 1, python_run_command, 0);
|
PL_register_foreign("python_run_command", 1, python_run_command, 0);
|
||||||
PL_register_foreign("python_main_module", 1, python_main_module, 0);
|
PL_register_foreign("python_main_module", 1, python_main_module, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 34d9f645721645aac9f4f40c815fe4fe2c6511e6
|
Subproject commit 36f99e3c3c978fef25f899dc4fab1ffee334d73c
|
@ -1,5 +1,30 @@
|
|||||||
package pt.up.fc.dcc.yap;
|
package pt.up.fc.dcc.yap;
|
||||||
|
|
||||||
|
/**** using sqlite
|
||||||
|
For example,the following:
|
||||||
|
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
|
||||||
|
should be replaced with:
|
||||||
|
|
||||||
|
import org.sqlite.database.sqlite.SQLiteDatabase;
|
||||||
|
|
||||||
|
As well as replacing all uses of the classes in the android.database.sqlite.* namespace, the application must also be sure to use the following two:
|
||||||
|
|
||||||
|
org.sqlite.database.SQLException
|
||||||
|
org.sqlite.database.DatabaseErrorHandler
|
||||||
|
|
||||||
|
instead of:
|
||||||
|
|
||||||
|
android.database.SQLException
|
||||||
|
android.database.DatabaseErrorHandler
|
||||||
|
|
||||||
|
Aside from namespace changes, there are other differences from the stock Android interface that applications need to be aware of:
|
||||||
|
|
||||||
|
The SQLiteStatement.simpleQueryForBlobFileDescriptor() API is not available. The collation sequence "UNICODE" is not available. The collation sequence "LOCALIZED", which normally changes with the system's current locale, is always equivalent to SQLite's built in collation BINARY.
|
||||||
|
|
||||||
|
****/
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -18,6 +43,7 @@ import org.sqlite.database.sqlite.SQLiteStatement;
|
|||||||
import org.sqlite.database.sqlite.SQLiteDatabaseCorruptException;
|
import org.sqlite.database.sqlite.SQLiteDatabaseCorruptException;
|
||||||
import org.sqlite.database.sqlite.SQLiteOpenHelper;
|
import org.sqlite.database.sqlite.SQLiteOpenHelper;
|
||||||
|
|
||||||
|
import org.sqlite.database.SQLException;
|
||||||
import org.sqlite.database.DatabaseErrorHandler;
|
import org.sqlite.database.DatabaseErrorHandler;
|
||||||
class DoNotDeleteErrorHandler implements DatabaseErrorHandler {
|
class DoNotDeleteErrorHandler implements DatabaseErrorHandler {
|
||||||
private static final String TAG = "DoNotDeleteErrorHandler";
|
private static final String TAG = "DoNotDeleteErrorHandler";
|
||||||
@ -49,7 +75,7 @@ public class JavaYap extends Activity
|
|||||||
// text.setText("");
|
// text.setText("");
|
||||||
if (vs0.nil()) {
|
if (vs0.nil()) {
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
Log.i(TAG, "q=");
|
Log.i(TAG, "q0=\n");
|
||||||
}
|
}
|
||||||
if (q.next()) {
|
if (q.next()) {
|
||||||
outputText.append( "yes\n" );
|
outputText.append( "yes\n" );
|
||||||
@ -59,12 +85,12 @@ public class JavaYap extends Activity
|
|||||||
} else {
|
} else {
|
||||||
int i=1;
|
int i=1;
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
Log.i(TAG, "q=");
|
Log.i(TAG, "q1= "+vs0.text()+"\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
while (rc = q.next()) {
|
while (rc = q.next()) {
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
Log.i(TAG, "q=");
|
Log.i(TAG, "q= "+vs0.text()+"\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
YAPListTerm vs = vs0;
|
YAPListTerm vs = vs0;
|
||||||
|
Reference in New Issue
Block a user