/** * CTRWalkerRunBlock * * Processes the execution of a block of code. */ ctr_object* ctr_cwlk_run(ctr_tnode* program) { ctr_object* result = NULL; char wasReturn = 0; ctr_tlistitem* li; li = program->nodes; while(li) { ctr_tnode* node = li->node; if (!li->node) { fprintf(stderr, CTR_ERR_MISSING ); exit(1); } wasReturn = 0; result = ctr_cwlk_expr(node, &wasReturn); if ( wasReturn ) { break; } /* Perform garbage collection cycle */ if ( ( ( ctr_gc_mode & 1 ) && ctr_gc_alloc > ( ctr_gc_memlimit * 0.8 ) ) || ctr_gc_mode & 4 ) { ctr_gc_internal_collect(); } if (!li->next) break; li = li->next; } if (wasReturn == 0) result = NULL; return result; }
ctr_object * ctr_cwlk_run (ctr_tnode * program) { ctr_cwlk_msg_level++; ctr_object *result = NULL; char wasReturn = 0; ctr_tlistitem *li; li = program->nodes; while (li) { ctr_tnode *node = li->node; if (!li->node) { // printf("Missing parse node\n"); // exit(1); CtrStdFlow = ctr_build_string_from_cstring ("Missing Parse Node"); return NULL; } wasReturn = 0; result = ctr_cwlk_expr (node, &wasReturn); if (ctr_internal_next_return) { wasReturn = 1; ctr_internal_next_return = 0; break; } if (wasReturn) { break; } /* Perform garbage collection cycle */ if (((ctr_gc_mode & 1) && ctr_gc_alloc > (ctr_gc_memlimit * 0.8)) || ctr_gc_mode & 4) { ctr_gc_internal_collect (); //collect on limit mode } if (!li->next) break; li = li->next; } if (wasReturn == 0 && !program->lexical) //let the last value be returned on BLOCKMAP result = NULL; ctr_cwlk_msg_level--; return result; }