static void check_gc(CRB_Interpreter *inter) { #if 0 crb_garbage_collect(inter); #endif if (inter->heap.current_heap_size > inter->heap.current_threshold) { /* fprintf(stderr, "garbage collecting..."); */ crb_garbage_collect(inter); /* fprintf(stderr, "done.\n"); */ inter->heap.current_threshold = inter->heap.current_heap_size + HEAP_THRESHOLD_SIZE; } }
void CRB_interpret(CRB_Interpreter *interpreter) { int error_code; StatementResult result; crb_add_std_fp(interpreter); if ((error_code = setjmp(interpreter ->current_recovery_environment.environment)) == 0) { result = crb_execute_statement_list(interpreter, NULL, interpreter->statement_list); if (result.type != NORMAL_STATEMENT_RESULT) { crb_runtime_error(interpreter, NULL, 0, BREAK_OR_CONTINUE_REACHED_TOPLEVEL_ERR, CRB_MESSAGE_ARGUMENT_END); } } else { show_error_stack_trace(interpreter); crb_set_stack_pointer(interpreter, 0); interpreter->current_exception.type = CRB_NULL_VALUE; } DBG_assert(interpreter->stack.stack_pointer == 0, ("stack_pointer..%d\n", interpreter->stack.stack_pointer)); crb_garbage_collect(interpreter); }
void CRB_dispose_interpreter(CRB_Interpreter *interpreter) { release_global_strings(interpreter); if (interpreter->execute_storage) { MEM_dispose_storage(interpreter->execute_storage); } interpreter->variable = NULL; crb_garbage_collect(interpreter); DBG_assert(interpreter->heap.current_heap_size == 0, ("%d bytes leaked.\n", interpreter->heap.current_heap_size)); MEM_free(interpreter->stack.stack); crb_dispose_regexp_literals(interpreter); MEM_dispose_storage(interpreter->interpreter_storage); }
static void do_compile(CRB_Interpreter *inter) { extern int yyparse(void); int error_code; if ((error_code = setjmp(inter->current_recovery_environment.environment)) == 0) { if (yyparse()) { fprintf(stderr, "Error ! Error ! Error !\n"); exit(1); } } else { show_error_stack_trace(inter); crb_set_stack_pointer(inter, 0); inter->current_exception.type = CRB_NULL_VALUE; } crb_garbage_collect(inter); }