fix bad marking of dbterms (obs from Ines Dutra).

This commit is contained in:
Vítor Santos Costa 2010-12-12 16:45:39 +00:00
parent e7f5c50707
commit 378035a4b0
3 changed files with 27 additions and 7 deletions

18
C/agc.c
View File

@ -74,6 +74,7 @@ CleanAtomMarkedBit(Atom a)
return (Atom)c;
}
static inline Functor
FuncAdjust(Functor f)
{
@ -111,6 +112,22 @@ AtomAdjust(Atom a)
return(a);
}
static Term AdjustDBTerm(Term, Term *);
static Term
CodeComposedTermAdjust(Term t)
{
Term *base;
if (IsApplTerm(t)) {
base = RepAppl(t);
} else {
base = RepPair(t);
}
return AdjustDBTerm(t, base);
}
#define IsOldCode(P) FALSE
#define IsOldCodeCellPtr(P) FALSE
#define IsOldDelay(P) FALSE
@ -145,7 +162,6 @@ AtomAdjust(Atom a)
#define AtomEntryAdjust(P) (P)
#define GlobalEntryAdjust(P) (P)
#define BlobTermAdjust(P) (P)
#define CodeComposedTermAdjust(P) (P)
#define CellPtoHeapAdjust(P) (P)
#define PtoAtomHashEntryAdjust(P) (P)
#define CellPtoHeapCellAdjust(P) (P)

View File

@ -792,11 +792,13 @@ ConstantTermAdjust (Term t)
return AtomTermAdjust(t);
else if (IsIntTerm(t))
return t;
else if (IsApplTerm(t))
else if (IsApplTerm(t) && IsBlobFunctor(FunctorOfTerm(t))) {
return BlobTermAdjust(t);
else if (IsPairTerm(t))
} else if (IsApplTerm(t) || IsPairTerm(t)) {
return CodeComposedTermAdjust(t);
else return t;
} else {
return t;
}
}

View File

@ -246,11 +246,13 @@ ConstantTermAdjust (Term t)
return AtomTermAdjust(t);
else if (IsIntTerm(t))
return t;
else if (IsApplTerm(t))
else if (IsApplTerm(t) && IsBlobFunctor(FunctorOfTerm(t))) {
return BlobTermAdjust(t);
else if (IsPairTerm(t))
} else if (IsApplTerm(t) || IsPairTerm(t)) {
return CodeComposedTermAdjust(t);
else return t;
} else {
return t;
}
}
/* Now, everything on its place so you must adjust the pointers */