| 591 | |
| 592 | |
| 593 | static void convergeephemerons (global_State *g) { |
| 594 | int changed; |
| 595 | do { |
| 596 | GCObject *w; |
| 597 | GCObject *next = g->ephemeron; /* get ephemeron list */ |
| 598 | g->ephemeron = NULL; /* tables will return to this list when traversed */ |
| 599 | changed = 0; |
| 600 | while ((w = next) != NULL) { |
| 601 | next = gco2t(w)->gclist; |
| 602 | if (traverseephemeron(g, gco2t(w))) { /* traverse marked some value? */ |
| 603 | propagateall(g); /* propagate changes */ |
| 604 | changed = 1; /* will have to revisit all ephemeron tables */ |
| 605 | } |
| 606 | } |
| 607 | } while (changed); |
| 608 | } |
| 609 | |
| 610 | /* }====================================================== */ |
| 611 |
no test coverage detected