fix stack expansion with slots
This commit is contained in:
parent
6812940b8b
commit
d7d2e320a8
47
C/grow.c
47
C/grow.c
@ -435,24 +435,10 @@ AdjustTrail(bool adjusting_heap, bool thread_copying USES_REGS)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
AdjustLocal(bool thread_copying USES_REGS)
|
fixPointerCells(CELL *pt, CELL *pt_bot, bool thread_copying USES_REGS)
|
||||||
{
|
{
|
||||||
register CELL reg, *pt, *pt_bot;
|
|
||||||
|
|
||||||
/* Adjusting the local */
|
|
||||||
#if defined(YAPOR_THREADS)
|
|
||||||
if (thread_copying == STACK_INCREMENTAL_COPYING) {
|
|
||||||
pt = (CELL *) (LOCAL_end_local_copy);
|
|
||||||
pt_bot = (CELL *) (LOCAL_start_local_copy);
|
|
||||||
} else {
|
|
||||||
#endif
|
|
||||||
pt = LCL0;
|
|
||||||
pt_bot = ASP;
|
|
||||||
#if defined(YAPOR_THREADS)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
while (pt > pt_bot) {
|
while (pt > pt_bot) {
|
||||||
reg = *--pt;
|
CELL reg = *--pt;
|
||||||
if (IsVarTerm(reg)) {
|
if (IsVarTerm(reg)) {
|
||||||
if (IsOldLocal(reg))
|
if (IsOldLocal(reg))
|
||||||
*pt = LocalAdjust(reg);
|
*pt = LocalAdjust(reg);
|
||||||
@ -468,7 +454,36 @@ AdjustLocal(bool thread_copying USES_REGS)
|
|||||||
*pt = AdjustPair(reg PASS_REGS);
|
*pt = AdjustPair(reg PASS_REGS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
AdjustSlots(bool thread_copying USES_REGS)
|
||||||
|
{
|
||||||
|
CELL *pt = LOCAL_SlotBase+LOCAL_CurSlot;
|
||||||
|
CELL *pt_bot = LOCAL_SlotBase+1;
|
||||||
|
fixPointerCells( pt_bot, pt, thread_copying PASS_REGS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
AdjustLocal(bool thread_copying USES_REGS)
|
||||||
|
{
|
||||||
|
register CELL *pt, *pt_bot;
|
||||||
|
|
||||||
|
/* Adjusting the local */
|
||||||
|
#if defined(YAPOR_THREADS)
|
||||||
|
if (thread_copying == STACK_INCREMENTAL_COPYING) {
|
||||||
|
pt = (CELL *) (LOCAL_end_local_copy);
|
||||||
|
pt_bot = (CELL *) (LOCAL_start_local_copy);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
pt = LCL0;
|
||||||
|
pt_bot = ASP;
|
||||||
|
#if defined(YAPOR_THREADS)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
fixPointerCells( pt_bot, pt, thread_copying PASS_REGS);
|
||||||
|
AdjustSlots( thread_copying PASS_REGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Term
|
static Term
|
||||||
|
Reference in New Issue
Block a user