| 606 | |
| 607 | |
| 608 | static void convergeephemerons (global_State *g) { |
| 609 | int changed; |
| 610 | do { |
| 611 | GCObject *w; |
| 612 | GCObject *next = g->ephemeron; /* get ephemeron list */ |
| 613 | g->ephemeron = NULL; /* tables may return to this list when traversed */ |
| 614 | changed = 0; |
| 615 | while ((w = next) != NULL) { |
| 616 | next = gco2t(w)->gclist; |
| 617 | if (traverseephemeron(g, gco2t(w))) { /* traverse marked some value? */ |
| 618 | propagateall(g); /* propagate changes */ |
| 619 | changed = 1; /* will have to revisit all ephemeron tables */ |
| 620 | } |
| 621 | } |
| 622 | } while (changed); |
| 623 | } |
| 624 | |
| 625 | /* }====================================================== */ |
| 626 |
no test coverage detected