Exemple #1
0
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;
    }
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}