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