| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #include <stdio.h>
- #include "table.h"
- #include "mem.h"
- #include "func.h"
- static TFunc *function_root = NULL;
- /*
- ** Insert function in list for GC
- */
- void luaI_insertfunction (TFunc *f)
- {
- lua_pack();
- f->next = function_root;
- function_root = f;
- f->marked = 0;
- }
- /*
- ** Free function
- */
- static void freefunc (TFunc *f)
- {
- luaI_free (f->code);
- luaI_free (f);
- }
- /*
- ** Garbage collection function.
- ** This function traverse the function list freeing unindexed functions
- */
- Long luaI_funccollector (void)
- {
- TFunc *curr = function_root;
- TFunc *prev = NULL;
- Long counter = 0;
- while (curr)
- {
- TFunc *next = curr->next;
- if (!curr->marked)
- {
- if (prev == NULL)
- function_root = next;
- else
- prev->next = next;
- freefunc (curr);
- ++counter;
- }
- else
- {
- curr->marked = 0;
- prev = curr;
- }
- curr = next;
- }
- return counter;
- }
|