*** empty log message ***

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1683 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2006-08-05 03:06:31 +00:00
parent 089e864621
commit f69ba78f02
6 changed files with 64 additions and 22 deletions

View File

@ -2379,6 +2379,9 @@ p_still_variant(void)
link_entry *lp = (link_entry *)(dbt->Contents+dbt->NOfCells);
link_entry link;
if (!dbt->NOfCells) {
return IsVarTerm(t2);
}
while ((link = *lp++)) {
Term t2 = Deref(old_h[link-1]);
if (IsUnboundVar(dbt->Contents+(link-1))) {

View File

@ -1098,12 +1098,12 @@ mark_variable(CELL_PTR current)
CELL_PTR next;
register CELL ccur;
unsigned int arity;
char *local_bp = Yap_bp;
begin:
if (MARKED_PTR(current)) {
if (UNMARKED_MARK(current,local_bp)) {
POP_CONTINUATION();
}
MARK(current);
if (current >= H0 && current < H) {
total_marked++;
if (current < HGEN) {
@ -1203,14 +1203,35 @@ mark_variable(CELL_PTR current)
#endif
}
POP_CONTINUATION();
} else if (IsAtomOrIntTerm(ccur)) {
#ifdef INSTRUMENT_GC
if (IsAtomTerm(ccur))
inc_vars_of_type(current,gc_atom);
else
inc_vars_of_type(current, gc_int);
#endif
POP_CONTINUATION();
} else if (IsPairTerm(ccur)) {
#ifdef INSTRUMENT_GC
inc_vars_of_type(current,gc_list);
#endif
if (ONHEAP(next)) {
PUSH_CONTINUATION(next+1,1);
current = next;
goto begin;
/* speedup for strings */
if (IsAtomOrIntTerm(*next)) {
if (!UNMARKED_MARK(next,local_bp)) {
total_marked++;
if (next < HGEN) {
total_oldies++;
}
PUSH_POINTER(next);
}
current = next+1;
goto begin;
} else {
PUSH_CONTINUATION(next+1,1);
current = next;
goto begin;
}
} else if (ONCODE(next)) {
mark_db_fixed(RepPair(ccur));
}
@ -1323,13 +1344,6 @@ mark_variable(CELL_PTR current)
PUSH_CONTINUATION(current+1,arity-1);
goto begin;
}
#ifdef INSTRUMENT_GC
else if (IsAtomTerm(ccur))
inc_vars_of_type(current,gc_atom);
else
inc_vars_of_type(current, gc_int);
#endif
POP_CONTINUATION();
}
void
@ -3451,18 +3465,17 @@ static void
sweep_oldgen(CELL *max, CELL *base)
{
CELL *ptr = base;
long int nof = 0;
char *bpb = Yap_bp+(base-(CELL*)Yap_GlobalBase);
while (ptr < max) {
if (MARKED_PTR(ptr)) {
nof++;
UNMARK(ptr);
if (*bpb & MARK_BIT) {
if (HEAP_PTR(*ptr)) {
into_relocation_chain(ptr, GET_NEXT(*ptr));
}
}
ptr++;
bpb++;
}
/* fprintf(stderr,"found %d, %p-%p\n", nof, base, max); */
}
#ifdef COROUTINING

View File

@ -120,7 +120,6 @@ p_stream_to_codes(void)
RESET_VARIABLE(h0);
ARG4 = AbsPair(HBASE);
ARG5 = (CELL)h0;
fprintf(stderr,"+ %p-%p=%p\n",HBASE,H,H-HBASE);
if (!Yap_gc(5, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, ARG1, "read_stream_to_codes/3");
return FALSE;
@ -128,7 +127,6 @@ p_stream_to_codes(void)
/* build a legal term again */
h0 = (CELL *)ARG5;
HBASE = RepPair(ARG4);
fprintf(stderr,"- %p-%p=%d\n",HBASE,h0,h0-HBASE);
}
}
if (H == HBASE)

View File

@ -355,6 +355,16 @@ static Int p_stop_low_level_trace(void)
return(TRUE);
}
volatile int vsc_wait;
static Int p_vsc_wait(void)
{
fprintf(stderr,"attach %d\n",getpid());
while (!vsc_wait);
vsc_wait=1;
return(TRUE);
}
void
Yap_InitLowLevelTrace(void)
{
@ -363,6 +373,7 @@ Yap_InitLowLevelTrace(void)
Yap_InitCPred("start_low_level_trace", 1, p_start_low_level_trace2, SafePredFlag);
#endif
Yap_InitCPred("stop_low_level_trace", 0, p_stop_low_level_trace, SafePredFlag);
Yap_InitCPred("vsc_wait", 0, p_vsc_wait, SafePredFlag);
}
#endif

View File

@ -96,7 +96,7 @@ extern char *Yap_bp;
#define MARK_BIT 1
#define RMARK_BIT 2
#define mcell(X) Yap_bp[X-(CELL *)Yap_GlobalBase]
#define mcell(X) Yap_bp[(X)-(CELL *)Yap_GlobalBase]
static inline Int
MARKED_PTR(CELL* ptr)
@ -104,6 +104,18 @@ MARKED_PTR(CELL* ptr)
return mcell(ptr) & MARK_BIT;
}
static inline Int
UNMARKED_MARK(CELL* ptr, char *bp)
{
Int pos = ptr - (CELL *)Yap_GlobalBase;
char t = bp[pos];
if (t & MARK_BIT) {
return TRUE;
}
bp[pos] = t | MARK_BIT;
return FALSE;
}
static inline void
MARK(CELL* ptr)
{
@ -116,6 +128,9 @@ UNMARK(CELL* ptr)
mcell(ptr) = mcell(ptr) & ~MARK_BIT;
}
/* not really that useful */
#define MAY_UNMARK(X)
#define UNMARK_CELL(X) (X)
static inline void

View File

@ -16,8 +16,10 @@
<h2>Yap-5.1.2:</h2>
<ul>
<li> NEW: a first cut at readutil.yap (request from Stefan Weinbrenner)</li>
<li> FIXED: compile | as a disjunction (obs from Ole Edsberg)</li>
<li> FIXED: recordaifnot(a,_,_) was broken (obs from Jesse Davis).</li>
<li> SPEEDUP: some speedups to garbage collector (obs from Nicos Angelopoulos).</li>
<li> NEW: a first cut at readutil.yap (request from Stefan Weinbrenner).</li>
<li> FIXED: compile | as a disjunction (obs from Ole Edsberg).</li>
<li> NEW: rbqueues keeps a simple db queue</li>
<li> NEW: cut_up_to_next_disjunction/0 tries to prune until the closest
choice-point from the parent disjunction (think query packs).</li>