improve some function names, comments, and declarations

original commit: 795c391b8417d6aec3d7888e292efbac415029f7
This commit is contained in:
Matthew Flatt 2017-05-24 09:08:59 -06:00
parent 28f98ebc0b
commit da7a81e8cd

21
c/gc.c
View File

@ -51,6 +51,8 @@ static void sweep_dirty PROTO((void));
static void resweep_dirty_weak_pairs PROTO((void)); static void resweep_dirty_weak_pairs PROTO((void));
static void add_ephemeron_to_pending PROTO((ptr p)); static void add_ephemeron_to_pending PROTO((ptr p));
static void add_trigger_ephemerons_to_repending PROTO((ptr p)); static void add_trigger_ephemerons_to_repending PROTO((ptr p));
static void check_trigger_ephemerons PROTO((seginfo *si));
static void check_ephemeron PROTO((ptr pe, int add_to_trigger));
static void check_pending_ephemerons PROTO(()); static void check_pending_ephemerons PROTO(());
static int check_dirty_ephemeron PROTO((ptr pe, int tg, int youngest)); static int check_dirty_ephemeron PROTO((ptr pe, int tg, int youngest));
static void clear_trigger_ephemerons PROTO(()); static void clear_trigger_ephemerons PROTO(());
@ -190,7 +192,7 @@ static IBOOL search_locked(ptr p) {
#define locked(p) (sorted_locked_objects != FIX(0) && search_locked(p)) #define locked(p) (sorted_locked_objects != FIX(0) && search_locked(p))
static void check_trigger_ephemerons(si) seginfo *si; { FORCEINLINE void check_trigger_ephemerons(seginfo *si) {
/* Registering ephemerons to recheck at the granularity of a segment /* Registering ephemerons to recheck at the granularity of a segment
means that the worst-case complexity of GC is quadratic in the means that the worst-case complexity of GC is quadratic in the
number of objects that fit into a segment (but that only happens number of objects that fit into a segment (but that only happens
@ -2038,10 +2040,15 @@ static ptr trigger_ephemerons = NULL;
static ptr repending_ephemerons = NULL; static ptr repending_ephemerons = NULL;
/* Ephemerons in `trigger_ephemerons` that we need to inspect again, /* Ephemerons in `trigger_ephemerons` that we need to inspect again,
remove from the triggering segment and chained here through removed from the triggering segment and chained here through
`trigger-next`. */ `trigger-next`. */
static void add_ephemeron_to_pending(ptr pe) { static void add_ephemeron_to_pending(ptr pe) {
/* We could call check_ephemeron directly here, but the indirection
through `pending_ephemerons` can dramatically decrease the number
of times that we have to trigger re-checking, especially since
check_pending_pehemerons() is run only after all other sweep
opportunities are exhausted. */
EPHEMERONNEXT(pe) = pending_ephemerons; EPHEMERONNEXT(pe) = pending_ephemerons;
pending_ephemerons = pe; pending_ephemerons = pe;
} }
@ -2056,7 +2063,7 @@ static void add_trigger_ephemerons_to_repending(ptr pe) {
repending_ephemerons = pe; repending_ephemerons = pe;
} }
static void check_pending_ephemeron(ptr pe, int add_to_trigger) { static void check_ephemeron(ptr pe, int add_to_trigger) {
ptr p; ptr p;
seginfo *si; seginfo *si;
@ -2088,7 +2095,7 @@ static void check_pending_ephemerons() {
pending_ephemerons = NULL; pending_ephemerons = NULL;
while (pe != NULL) { while (pe != NULL) {
next_pe = EPHEMERONNEXT(pe); next_pe = EPHEMERONNEXT(pe);
check_pending_ephemeron(pe, 1); check_ephemeron(pe, 1);
pe = next_pe; pe = next_pe;
} }
@ -2096,12 +2103,12 @@ static void check_pending_ephemerons() {
repending_ephemerons = NULL; repending_ephemerons = NULL;
while (pe != NULL) { while (pe != NULL) {
next_pe = EPHEMERONTRIGGERNEXT(pe); next_pe = EPHEMERONTRIGGERNEXT(pe);
check_pending_ephemeron(pe, 0); check_ephemeron(pe, 0);
pe = next_pe; pe = next_pe;
} }
} }
/* Like check_pending_ephemeron(), but for a dirty, old-generation /* Like check_ephemeron(), but for a dirty, old-generation
ephemeron (that was not yet added to the pending list), so we can ephemeron (that was not yet added to the pending list), so we can
be less pessimistic than setting `youngest` to the target be less pessimistic than setting `youngest` to the target
generation: */ generation: */
@ -2154,7 +2161,7 @@ static void clear_trigger_ephemerons() {
trigger_ephemerons = NULL; trigger_ephemerons = NULL;
while (pe != NULL) { while (pe != NULL) {
if (EPHEMERONTRIGGERNEXT(pe) == Strue) { if (EPHEMERONTRIGGERNEXT(pe) == Strue) {
/* The ephemeron was triggers and retains its key and value */ /* The ephemeron was triggered and retains its key and value */
} else { } else {
seginfo *si; seginfo *si;
ptr p = Scar(pe); ptr p = Scar(pe);