diff --git a/C/agc.c b/C/agc.c index 24e31e88b..fe13d64bb 100755 --- a/C/agc.c +++ b/C/agc.c @@ -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) diff --git a/C/cdmgr.c b/C/cdmgr.c index 17128c49d..b8c7cd038 100644 --- a/C/cdmgr.c +++ b/C/cdmgr.c @@ -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; + } } diff --git a/H/rheap.h b/H/rheap.h index 06176cd68..33b96b1ea 100755 --- a/H/rheap.h +++ b/H/rheap.h @@ -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 */ diff --git a/pl/tabling.yap b/pl/tabling.yap index 20f694b2c..53b15ed78 100644 --- a/pl/tabling.yap +++ b/pl/tabling.yap @@ -14,7 +14,7 @@ :- meta_predicate table(:), is_tabled(:), - tabling_mode(:), + tabling_mode(:,?), abolish_table(:), show_table(:), table_statistics(:),