Index: jit-context.c =================================================================== RCS file: /sources/dotgnu-pnet/libjit/jit/jit-context.c,v retrieving revision 1.7 diff -u -r1.7 jit-context.c --- jit-context.c 4 Feb 2007 14:31:33 -0000 1.7 +++ jit-context.c 20 Dec 2007 19:26:12 -0000 @@ -88,7 +88,7 @@ jit_mutex_create(&(context->cache_lock)); context->functions = 0; context->last_function = 0; - context->on_demand_driver = 0; + context->on_demand_driver = _jit_function_compile_on_demand; return context; } @@ -204,7 +204,14 @@ @*/ void jit_context_set_on_demand_driver(jit_context_t context, jit_on_demand_driver_func driver) { - context->on_demand_driver = driver; + if (driver) + { + context->on_demand_driver = driver; + } + else + { + context->on_demand_driver = _jit_function_compile_on_demand; + } } /*@ Index: jit-function.c =================================================================== RCS file: /sources/dotgnu-pnet/libjit/jit/jit-function.c,v retrieving revision 1.32 diff -u -r1.32 jit-function.c --- jit-function.c 20 Dec 2007 13:47:23 -0000 1.32 +++ jit-function.c 20 Dec 2007 19:26:13 -0000 @@ -49,9 +49,6 @@ jit_function_t jit_function_create(jit_context_t context, jit_type_t signature) { jit_function_t func; -#if defined(jit_redirector_size) - jit_on_demand_driver_func on_demand_driver; -#endif #if defined(jit_redirector_size) || defined(jit_indirector_size) jit_cache_t cache; #endif @@ -111,13 +108,8 @@ /* If we aren't using interpretation, then point the function's initial entry point at the redirector, which in turn will invoke the on-demand compiler */ - on_demand_driver = context->on_demand_driver; - if(!on_demand_driver) - { - on_demand_driver = _jit_function_compile_on_demand; - } func->entry_point = _jit_create_redirector - (func->redirector, (void *) on_demand_driver, + (func->redirector, (void *) context->on_demand_driver, func, jit_type_get_abi(signature)); jit_flush_exec(func->redirector, jit_redirector_size); #endif @@ -1455,9 +1447,6 @@ (jit_function_t func, jit_type_t signature, void **args, void *return_area) { struct jit_backtrace call_trace; -#if defined(jit_redirector_size) - jit_on_demand_driver_func on_demand_driver; -#endif void *entry; jit_jmp_buf jbuf; @@ -1492,16 +1481,7 @@ } else { -#if defined(jit_redirector_size) - on_demand_driver = func->context->on_demand_driver; - if(!on_demand_driver) - { - on_demand_driver = _jit_function_compile_on_demand; - } - entry = (*on_demand_driver)(func); -#else - entry = _jit_function_compile_on_demand(func); -#endif + entry = (*func->context->on_demand_driver)(func); } /* Get the default signature if necessary */ Index: jit-interp.c =================================================================== RCS file: /sources/dotgnu-pnet/libjit/jit/jit-interp.c,v retrieving revision 1.17 diff -u -r1.17 jit-interp.c --- jit-interp.c 16 Oct 2006 02:27:24 -0000 1.17 +++ jit-interp.c 20 Dec 2007 19:26:14 -0000 @@ -3308,7 +3308,7 @@ _jit_backtrace_push(&call_trace, pc); if(!entry) { - entry = _jit_function_compile_on_demand(call_func); + entry = (*call_func->context->on_demand_driver)(call_func); } _jit_run_function((jit_function_interp_t)entry, stacktop, @@ -3324,7 +3324,7 @@ entry = call_func->entry_point; if(!entry) { - entry = _jit_function_compile_on_demand(call_func); + entry = (*call_func->context->on_demand_driver)(call_func); } VM_PERFORM_TAIL((jit_function_interp_t)entry); } @@ -3360,7 +3360,7 @@ _jit_backtrace_push(&call_trace, pc); if(!entry) { - entry = _jit_function_compile_on_demand(call_func); + entry = (*call_func->context->on_demand_driver)(call_func); } _jit_run_function((jit_function_interp_t)entry, stacktop, @@ -3380,7 +3380,7 @@ entry = call_func->entry_point; if(!entry) { - entry = _jit_function_compile_on_demand(call_func); + entry = (*call_func->context->on_demand_driver)(call_func); } VM_PERFORM_TAIL((jit_function_interp_t)entry); } @@ -5009,8 +5009,7 @@ } else { - entry = (jit_function_interp_t) - _jit_function_compile_on_demand(func); + entry = (jit_function_interp_t)(*func->context->on_demand_driver)(func); } /* Populate the low-level argument buffer */