eris: table nodes now have room to store sequence number

This commit is contained in:
2021-07-07 13:29:18 -04:00
parent 3bf8b1fadb
commit 70b33905da
7 changed files with 356 additions and 101 deletions

View File

@@ -383,9 +383,9 @@ static int traverseephemeron (global_State *g, Table *h) {
int i;
/* traverse array part (numeric keys are 'strong') */
for (i = 0; i < h->sizearray; i++) {
if (valiswhite(&h->array[i])) {
if (valiswhite(&h->array[i].i_val)) {
marked = 1;
reallymarkobject(g, gcvalue(&h->array[i]));
reallymarkobject(g, gcvalue(&h->array[i].i_val));
}
}
/* traverse hash part */
@@ -417,7 +417,7 @@ static void traversestrongtable (global_State *g, Table *h) {
Node *n, *limit = gnodelast(h);
int i;
for (i = 0; i < h->sizearray; i++) /* traverse array part */
markvalue(g, &h->array[i]);
markvalue(g, &h->array[i].i_val);
for (n = gnode(h, 0); n < limit; n++) { /* traverse hash part */
checkdeadkey(n);
if (ttisnil(gval(n))) /* entry is empty? */
@@ -646,7 +646,7 @@ static void clearvalues (global_State *g, GCObject *l, GCObject *f) {
Node *n, *limit = gnodelast(h);
int i;
for (i = 0; i < h->sizearray; i++) {
TValue *o = &h->array[i];
TValue *o = &h->array[i].i_val;
if (iscleared(g, o)) /* value was collected? */
setnilvalue(o); /* remove value */
}