1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-30 09:00:31 -08:00

Restore fixclosure together with explanation.

Copied from Perforce
 Change: 194314
This commit is contained in:
Gareth Rees 2018-06-29 13:54:55 +01:00
parent 953062f412
commit 66c9375253
2 changed files with 17 additions and 4 deletions

View file

@ -1,7 +1,7 @@
/* mpmst.h: MEMORY POOL MANAGER DATA STRUCTURES
*
* $Id$
* Copyright (c) 2001-2016 Ravenbrook Limited. See end of file for license.
* Copyright (c) 2001-2018 Ravenbrook Limited. See end of file for license.
* Portions copyright (C) 2001 Global Graphics Software.
*
* .design: This header file crosses module boundaries. The relevant
@ -398,6 +398,11 @@ typedef struct mps_fmt_s {
* through the MPS interface to optimise the critical path scan loop.
* See ["The critical path through the MPS"](../design/critical-path.txt).
*
* .ss.fix-closure: The fixClosure member allows the caller of the
* scanning protocol to pass data through to this fix function. This
* is not used in the public MPS, but is needed by the transforms
* extension.
*
* .ss.zone: For binary compatibility, the zone shift is exported as
* a word rather than a shift, so that the external mps_ss_s is a uniform
* three-word structure. See <code/mps.h#ss> and <design/interface-c>.
@ -419,6 +424,7 @@ typedef struct ScanStateStruct {
struct mps_ss_s ss_s; /* .ss <http://bash.org/?400459> */
Arena arena; /* owning arena */
SegFixMethod fix; /* third stage fix function */
void *fixClosure; /* see .ss.fix-closure */
TraceSet traces; /* traces to scan for */
Rank rank; /* reference rank of scanning */
Bool wasMarked; /* design.mps.fix.protocol.was-ready */
@ -450,6 +456,7 @@ typedef struct TraceStruct {
Rank band; /* current band */
Bool firstStretch; /* in first stretch of band (see accessor) */
SegFixMethod fix; /* fix method to apply to references */
void *fixClosure; /* see .ss.fix-closure */
Chain chain; /* chain being incrementally collected */
STATISTIC_DECL(Size preTraceArenaReserved) /* ArenaReserved before this trace */
Size condemned; /* condemned bytes */
@ -817,7 +824,7 @@ typedef struct AllocPatternStruct {
/* C. COPYRIGHT AND LICENSE
*
* Copyright (C) 2001-2016 Ravenbrook Limited <http://www.ravenbrook.com/>.
* Copyright (C) 2001-2018 Ravenbrook Limited <http://www.ravenbrook.com/>.
* All rights reserved. This is an open source license. Contact
* Ravenbrook for commercial licensing options.
*

View file

@ -1,7 +1,7 @@
/* trace.c: GENERIC TRACER IMPLEMENTATION
*
* $Id$
* Copyright (c) 2001-2016 Ravenbrook Limited.
* Copyright (c) 2001-2018 Ravenbrook Limited.
* See end of file for license.
* Portions copyright (C) 2002 Global Graphics Software.
*
@ -38,6 +38,7 @@ Bool ScanStateCheck(ScanState ss)
CHECKS(ScanState, ss);
CHECKL(FUNCHECK(ss->fix));
/* Can't check ss->fixClosure. */
CHECKL(ScanStateZoneShift(ss) == ss->arena->zoneShift);
white = ZoneSetEMPTY;
TRACE_SET_ITER(ti, trace, ss->traces, ss->arena)
@ -73,11 +74,14 @@ void ScanStateInit(ScanState ss, TraceSet ts, Arena arena,
necessary to dispatch to the fix methods of sets of traces in
TraceFix. */
ss->fix = NULL;
ss->fixClosure = NULL;
TRACE_SET_ITER(ti, trace, ts, arena) {
if (ss->fix == NULL) {
ss->fix = trace->fix;
ss->fixClosure = trace->fixClosure;
} else {
AVER(ss->fix == trace->fix);
AVER(ss->fixClosure == trace->fixClosure);
}
} TRACE_SET_ITER_END(ti, trace, ts, arena);
AVER(ss->fix != NULL);
@ -188,6 +192,7 @@ Bool TraceCheck(Trace trace)
CHECKU(Chain, trace->chain);
}
CHECKL(FUNCHECK(trace->fix));
/* Can't check trace->fixClosure. */
/* @@@@ checks for counts missing */
@ -669,6 +674,7 @@ found:
trace->state = TraceINIT;
trace->band = RankMIN;
trace->fix = SegFix;
trace->fixClosure = NULL;
trace->chain = NULL;
STATISTIC(trace->preTraceArenaReserved = ArenaReserved(arena));
trace->condemned = (Size)0; /* nothing condemned yet */
@ -1860,7 +1866,7 @@ Res TraceDescribe(Trace trace, mps_lib_FILE *stream, Count depth)
/* C. COPYRIGHT AND LICENSE
*
* Copyright (C) 2001-2016 Ravenbrook Limited
* Copyright (C) 2001-2018 Ravenbrook Limited
* <http://www.ravenbrook.com/>.
* All rights reserved. This is an open source license. Contact
* Ravenbrook for commercial licensing options.