Changeset a3cbddc80d866383727c108410305366cc2e77ab
- Timestamp:
- 04/03/10 23:34:38 (2 years ago)
- Author:
- Philip Herron <redbrain@…>
- Parents:
- 6165c39a0d5efebafa91849836d99de5e00fc950
- Children:
- 04f48fcb11b23adb59ed7282d589e53b8676e870
- git-committer:
- Philip Herron <redbrain@omicron.(none)> / 2010-04-03T23:34:38Z+0100
- Message:
-
garbage collector cleanups
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r6165c39
|
ra3cbddc
|
|
| 41 | 41 | extern crl_table *crl_functors, *crl_rules; |
| 42 | 42 | extern crl_stack *crl_parse_stk, *crl_lex_stack; |
| | 43 | |
| 43 | 44 | // the runtime symbol stack! |
| 44 | 45 | extern crl_context_table *crl_runtime_ctx_table; |
| 45 | | crl_stack* crl_runtime_gbg= NULL; |
| | 46 | static crl_stack* crl_runtime_gbg= NULL; |
| 46 | 47 | |
| 47 | 48 | static void free_hash_table_symbols( crl_table ** ); |
| … |
… |
|
| 51 | 52 | if( crl_lex_stack ) |
| 52 | 53 | { |
| 53 | | char * o= crl_stack_pop( crl_lex_stack ); |
| 54 | | while( o ) |
| | 54 | char * o; |
| | 55 | while( (o= crl_stack_pop( crl_lex_stack )) ) |
| 55 | 56 | { |
| 56 | 57 | crl_free( o ); |
| 57 | | o= crl_stack_pop( crl_lex_stack ); |
| 58 | 58 | } |
| 59 | 59 | crl_stack_free( crl_lex_stack ); |
| … |
… |
|
| 66 | 66 | if( crl_runtime_gbg ) |
| 67 | 67 | { |
| 68 | | crl_debug("garbage collection running...\n"); |
| | 68 | crl_debug("garbage collector running...\n"); |
| 69 | 69 | crl_symbol_obj *p_obj; |
| 70 | | while( (p_obj= crl_stack_pop( crl_runtime_gbg )) ) |
| 71 | | { |
| 72 | | crl_garbage_free_obj( &p_obj ); |
| 73 | | } |
| | 70 | unsigned int i = crl_stack_get_size( crl_runtime_gbg ); |
| | 71 | unsigned int idx = 0; |
| | 72 | |
| | 73 | while( idx < i ) |
| | 74 | { |
| | 75 | p_obj = (crl_symbol_obj*) crl_runtime_gbg->array[ idx ]; |
| | 76 | crl_debug("deleting object <%p>!\n", (void*)&p_obj ); |
| | 77 | idx++; crl_garbage_free_obj( &p_obj ); |
| | 78 | } |
| 74 | 79 | crl_stack_free( crl_runtime_gbg ); |
| 75 | | crl_runtime_gbg= NULL; |
| | 80 | crl_runtime_gbg = NULL; |
| 76 | 81 | } |
| 77 | 82 | } |
| … |
… |
|
| 276 | 281 | { |
| 277 | 282 | crl_branch_context *branch= (*ctx); |
| 278 | | if( branch->return_address ) |
| 279 | | crl_garbage_mark_obj( &(branch->return_address) ); |
| 280 | | |
| | 283 | if( (branch->return_ctx) || (branch->loop_ctx) ) |
| | 284 | { |
| | 285 | if( branch->return_address ) |
| | 286 | crl_garbage_mark_obj( &(branch->return_address) ); |
| | 287 | } |
| 281 | 288 | if( branch->table ) |
| 282 | 289 | crl_garbage_free_hash_table( &(branch->table) ); |