pretty print

This commit is contained in:
Vítor Santos Costa 2016-01-31 10:14:28 +00:00
parent d90a0f72b0
commit 9444c36ff4

View File

@ -3,49 +3,42 @@
#include "tracer.h" #include "tracer.h"
#ifdef YAPOR #ifdef YAPOR
#include "or.macros.h" #include "or.macros.h"
#endif /* YAPOR */ #endif /* YAPOR */
#include "clause_list.h" #include "clause_list.h"
/* need to fix overflow handling */ /* need to fix overflow handling */
static void static void mk_blob(int sz USES_REGS) {
mk_blob(int sz USES_REGS)
{
MP_INT *dst; MP_INT *dst;
HR[0] = (CELL)FunctorBigInt; HR[0] = (CELL)FunctorBigInt;
HR[1] = CLAUSE_LIST; HR[1] = CLAUSE_LIST;
dst = (MP_INT *)(HR+2); dst = (MP_INT *)(HR + 2);
dst->_mp_size = 0L; dst->_mp_size = 0L;
dst->_mp_alloc = sz; dst->_mp_alloc = sz;
HR += (1+sizeof(MP_INT)/sizeof(CELL)); HR += (1 + sizeof(MP_INT) / sizeof(CELL));
HR[sz] = EndSpecials; HR[sz] = EndSpecials;
HR += sz+1; HR += sz + 1;
} }
static CELL * static CELL *extend_blob(CELL *start, int sz USES_REGS) {
extend_blob(CELL *start, int sz USES_REGS)
{
UInt osize; UInt osize;
MP_INT *dst; MP_INT *dst;
if (HR + sz > ASP) if (HR + sz > ASP)
return NULL; return NULL;
dst = (MP_INT *)(start+2); dst = (MP_INT *)(start + 2);
osize = dst->_mp_alloc; osize = dst->_mp_alloc;
start += (1+sizeof(MP_INT)/sizeof(CELL)); start += (1 + sizeof(MP_INT) / sizeof(CELL));
start[sz+osize] = EndSpecials; start[sz + osize] = EndSpecials;
dst->_mp_alloc += sz; dst->_mp_alloc += sz;
HR += sz; HR += sz;
return start+osize; return start + osize;
} }
/*init of ClasuseList*/ /*init of ClasuseList*/
X_API clause_list_t clause_list_t Yap_ClauseListInit(clause_list_t in) {
Yap_ClauseListInit(clause_list_t in) CACHE_REGS in->n = 0;
{
CACHE_REGS
in->n = 0;
in->start = HR; in->start = HR;
mk_blob(0 PASS_REGS); mk_blob(0 PASS_REGS);
in->end = HR; in->end = HR;
@ -54,9 +47,7 @@ Yap_ClauseListInit(clause_list_t in)
/*add clause to ClauseList /*add clause to ClauseList
returns FALSE on error*/ returns FALSE on error*/
X_API int int Yap_ClauseListExtend(clause_list_t cl, void *clause, void *pred) {
Yap_ClauseListExtend(clause_list_t cl, void * clause, void *pred)
{
CACHE_REGS CACHE_REGS
PredEntry *ap = (PredEntry *)pred; PredEntry *ap = (PredEntry *)pred;
@ -65,15 +56,19 @@ Yap_ClauseListExtend(clause_list_t cl, void * clause, void *pred)
return FALSE; return FALSE;
if (cl->n == 0) { if (cl->n == 0) {
void **ptr; void **ptr;
if (!(ptr = (void **)extend_blob(cl->start,1 PASS_REGS))) return FALSE; if (!(ptr = (void **)extend_blob(cl->start, 1 PASS_REGS)))
return FALSE;
ptr[0] = clause; ptr[0] = clause;
} else if (cl->n == 1) { } else if (cl->n == 1) {
yamop **ptr; yamop **ptr;
yamop *code_p, *fclause; yamop *code_p, *fclause;
if (!(ptr = (yamop **)extend_blob(cl->start,2*(CELL)NEXTOP((yamop *)NULL,Otapl)/sizeof(CELL)-1 PASS_REGS))) return FALSE; if (!(ptr = (yamop **)extend_blob(
cl->start, 2 * (CELL)NEXTOP((yamop *)NULL, Otapl) / sizeof(CELL) -
1 PASS_REGS)))
return FALSE;
fclause = ptr[-1]; fclause = ptr[-1];
code_p = (yamop *)(ptr-1); code_p = (yamop *)(ptr - 1);
code_p->opc = Yap_opcode(_try_clause); code_p->opc = Yap_opcode(_try_clause);
code_p->y_u.Otapl.d = fclause; code_p->y_u.Otapl.d = fclause;
code_p->y_u.Otapl.s = ap->ArityOfPE; code_p->y_u.Otapl.s = ap->ArityOfPE;
@ -84,7 +79,7 @@ Yap_ClauseListExtend(clause_list_t cl, void * clause, void *pred)
#ifdef YAPOR #ifdef YAPOR
INIT_YAMOP_LTT(code_p, 0); INIT_YAMOP_LTT(code_p, 0);
#endif /* YAPOR */ #endif /* YAPOR */
code_p = NEXTOP(code_p,Otapl); code_p = NEXTOP(code_p, Otapl);
code_p->opc = Yap_opcode(_trust); code_p->opc = Yap_opcode(_trust);
code_p->y_u.Otapl.d = clause; code_p->y_u.Otapl.d = clause;
code_p->y_u.Otapl.s = ap->ArityOfPE; code_p->y_u.Otapl.s = ap->ArityOfPE;
@ -98,7 +93,10 @@ Yap_ClauseListExtend(clause_list_t cl, void * clause, void *pred)
} else { } else {
yamop *code_p; yamop *code_p;
if (!(code_p = (yamop *)extend_blob(cl->start,((CELL)NEXTOP((yamop *)NULL,Otapl))/sizeof(CELL) PASS_REGS))) return FALSE; if (!(code_p = (yamop *)extend_blob(cl->start,
((CELL)NEXTOP((yamop *)NULL, Otapl)) /
sizeof(CELL) PASS_REGS)))
return FALSE;
code_p->opc = Yap_opcode(_trust); code_p->opc = Yap_opcode(_trust);
code_p->y_u.Otapl.d = clause; code_p->y_u.Otapl.d = clause;
code_p->y_u.Otapl.s = ap->ArityOfPE; code_p->y_u.Otapl.s = ap->ArityOfPE;
@ -109,7 +107,7 @@ Yap_ClauseListExtend(clause_list_t cl, void * clause, void *pred)
#ifdef YAPOR #ifdef YAPOR
INIT_YAMOP_LTT(code_p, 0); INIT_YAMOP_LTT(code_p, 0);
#endif /* YAPOR */ #endif /* YAPOR */
code_p = PREVOP(code_p,Otapl); code_p = PREVOP(code_p, Otapl);
code_p->opc = Yap_opcode(_retry); code_p->opc = Yap_opcode(_retry);
} }
cl->end = HR; cl->end = HR;
@ -118,16 +116,11 @@ Yap_ClauseListExtend(clause_list_t cl, void * clause, void *pred)
} }
/*closes the clause list*/ /*closes the clause list*/
X_API void void Yap_ClauseListClose(clause_list_t cl) { /* no need to do nothing */
Yap_ClauseListClose(clause_list_t cl)
{
/* no need to do nothing */
} }
/*destroys the clause list freeing memory*/ /*destroys the clause list freeing memory*/
X_API int int Yap_ClauseListDestroy(clause_list_t cl) {
Yap_ClauseListDestroy(clause_list_t cl)
{
CACHE_REGS CACHE_REGS
if (cl->end != HR) if (cl->end != HR)
return FALSE; return FALSE;
@ -136,34 +129,25 @@ Yap_ClauseListDestroy(clause_list_t cl)
} }
/*destroys clause list and returns only first clause*/ /*destroys clause list and returns only first clause*/
X_API void * void *Yap_ClauseListToClause(clause_list_t cl) {
Yap_ClauseListToClause(clause_list_t cl)
{
CACHE_REGS CACHE_REGS
void **ptr; void **ptr;
if (cl->end != HR) if (cl->end != HR)
return NULL; return NULL;
if (cl->n != 1) if (cl->n != 1)
return NULL; return NULL;
if (!(ptr = (void **)extend_blob(cl->start,0 PASS_REGS))) return NULL; if (!(ptr = (void **)extend_blob(cl->start, 0 PASS_REGS)))
return NULL;
return ptr[-1]; return ptr[-1];
} }
/*return pointer to start of try-retry-trust sequence*/ /*return pointer to start of try-retry-trust sequence*/
X_API void * void *Yap_ClauseListCode(clause_list_t cl) {
Yap_ClauseListCode(clause_list_t cl)
{
CELL *ptr; CELL *ptr;
ptr = (CELL *)cl->start; ptr = (CELL *)cl->start;
ptr += (1+sizeof(MP_INT)/sizeof(CELL)); ptr += (1 + sizeof(MP_INT) / sizeof(CELL));
return (void *)ptr; return (void *)ptr;
} }
/* where to fail */ /* where to fail */
X_API void * void *Yap_FAILCODE(void) { return (void *)FAILCODE; }
Yap_FAILCODE(void)
{
return (void *)FAILCODE;
}