fixes for non-JIT build
This commit is contained in:
parent
09046b46dd
commit
695039626c
|
@ -36,8 +36,6 @@ READ_ONLY static Scheme_Object *unshadowable_symbol;
|
|||
/* If locked, these are probably sharable: */
|
||||
THREAD_LOCAL_DECL(static Scheme_Hash_Table *toplevels_ht);
|
||||
THREAD_LOCAL_DECL(static Scheme_Hash_Table *locals_ht[2]);
|
||||
THREAD_LOCAL_DECL(static int intdef_counter);
|
||||
THREAD_LOCAL_DECL(static int builtin_ref_counter);
|
||||
THREAD_LOCAL_DECL(static int env_uid_counter);
|
||||
|
||||
#define ARBITRARY_USE 0x1
|
||||
|
@ -87,6 +85,22 @@ void scheme_init_compenv()
|
|||
#endif
|
||||
}
|
||||
|
||||
void scheme_init_compenv_places(void)
|
||||
{
|
||||
REGISTER_SO(toplevels_ht);
|
||||
REGISTER_SO(locals_ht[0]);
|
||||
REGISTER_SO(locals_ht[1]);
|
||||
|
||||
{
|
||||
Scheme_Hash_Table *ht;
|
||||
toplevels_ht = scheme_make_hash_table_equal();
|
||||
ht = scheme_make_hash_table(SCHEME_hash_ptr);
|
||||
locals_ht[0] = ht;
|
||||
ht = scheme_make_hash_table(SCHEME_hash_ptr);
|
||||
locals_ht[1] = ht;
|
||||
}
|
||||
}
|
||||
|
||||
/*========================================================================*/
|
||||
/* compilation info management */
|
||||
/*========================================================================*/
|
||||
|
|
|
@ -62,6 +62,8 @@ ROSYM static Scheme_Object *quote_symbol;
|
|||
ROSYM static Scheme_Object *letrec_syntaxes_symbol;
|
||||
ROSYM static Scheme_Object *values_symbol;
|
||||
|
||||
THREAD_LOCAL_DECL(static Scheme_Object *quick_stx);
|
||||
|
||||
/* locals */
|
||||
static Scheme_Object *lambda_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec);
|
||||
static Scheme_Object *lambda_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec);
|
||||
|
@ -131,7 +133,7 @@ static void register_traversers(void);
|
|||
/* initialization */
|
||||
/**********************************************************************/
|
||||
|
||||
void scheme_init_syntax (Scheme_Env *env)
|
||||
void scheme_init_compile (Scheme_Env *env)
|
||||
{
|
||||
#ifdef MZ_PRECISE_GC
|
||||
register_traversers();
|
||||
|
@ -299,6 +301,11 @@ void scheme_init_syntax (Scheme_Env *env)
|
|||
scheme_init_marshal(env);
|
||||
}
|
||||
|
||||
void scheme_init_compile_places()
|
||||
{
|
||||
REGISTER_SO(quick_stx);
|
||||
}
|
||||
|
||||
Scheme_Object *
|
||||
scheme_make_compiled_syntax(Scheme_Syntax *proc,
|
||||
Scheme_Syntax_Expander *eproc)
|
||||
|
@ -1449,9 +1456,11 @@ Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int mode)
|
|||
if (mode == 2) {
|
||||
/* sfs */
|
||||
return (Scheme_Object *)cl2;
|
||||
#ifdef MZ_USE_JIT
|
||||
} else if (mode == 1) {
|
||||
/* JIT */
|
||||
return scheme_case_lambda_jit((Scheme_Object *)cl2);
|
||||
#endif
|
||||
} else
|
||||
return (Scheme_Object *)cl2;
|
||||
}
|
||||
|
|
|
@ -53,6 +53,9 @@ READ_ONLY static Scheme_Env *unsafe_env;
|
|||
READ_ONLY static Scheme_Env *flfxnum_env;
|
||||
READ_ONLY static Scheme_Env *futures_env;
|
||||
|
||||
THREAD_LOCAL_DECL(static int builtin_ref_counter);
|
||||
THREAD_LOCAL_DECL(static int intdef_counter);
|
||||
|
||||
/* local functions */
|
||||
static void make_kernel_env(void);
|
||||
|
||||
|
@ -217,22 +220,6 @@ Scheme_Env *scheme_basic_env()
|
|||
return env;
|
||||
}
|
||||
|
||||
static void init_toplevel_local_offsets_hashtable_caches()
|
||||
{
|
||||
REGISTER_SO(toplevels_ht);
|
||||
REGISTER_SO(locals_ht[0]);
|
||||
REGISTER_SO(locals_ht[1]);
|
||||
|
||||
{
|
||||
Scheme_Hash_Table *ht;
|
||||
toplevels_ht = scheme_make_hash_table_equal();
|
||||
ht = scheme_make_hash_table(SCHEME_hash_ptr);
|
||||
locals_ht[0] = ht;
|
||||
ht = scheme_make_hash_table(SCHEME_hash_ptr);
|
||||
locals_ht[1] = ht;
|
||||
}
|
||||
}
|
||||
|
||||
/* READ-ONLY GLOBAL structures ONE-TIME initialization */
|
||||
Scheme_Env *scheme_engine_instance_init() {
|
||||
Scheme_Env *env;
|
||||
|
@ -414,7 +401,7 @@ static Scheme_Env *place_instance_init(void *stack_base, int initial_main_os_thr
|
|||
|
||||
scheme_init_thread_lwc();
|
||||
|
||||
init_toplevel_local_offsets_hashtable_caches();
|
||||
scheme_init_compenv_places();
|
||||
|
||||
#ifdef TIME_STARTUP_PROCESS
|
||||
printf("pre-process @ %" PRIdPTR "\n", scheme_get_process_milliseconds());
|
||||
|
@ -450,6 +437,7 @@ static Scheme_Env *place_instance_init(void *stack_base, int initial_main_os_thr
|
|||
scheme_init_string_places();
|
||||
scheme_init_logger();
|
||||
scheme_init_eval_places();
|
||||
scheme_init_compile_places();
|
||||
scheme_init_regexp_places();
|
||||
scheme_init_stx_places(initial_main_os_thread);
|
||||
scheme_init_sema_places();
|
||||
|
@ -482,7 +470,7 @@ static Scheme_Env *place_instance_init(void *stack_base, int initial_main_os_thr
|
|||
scheme_init_expand_observe(env);
|
||||
scheme_init_place(env);
|
||||
/* END PRIMITIVE MODULES */
|
||||
#if defined(MZ_USE_PLACES)
|
||||
#if defined(MZ_USE_PLACES) && defined(MZ_USE_JIT)
|
||||
scheme_jit_fill_threadlocal_table();
|
||||
#endif
|
||||
scheme_init_futures_per_place();
|
||||
|
@ -578,7 +566,7 @@ static void make_kernel_env(void)
|
|||
MZTIMEIT(vector, scheme_init_vector(env));
|
||||
MZTIMEIT(char, scheme_init_char(env));
|
||||
MZTIMEIT(bool, scheme_init_bool(env));
|
||||
MZTIMEIT(syntax, scheme_init_syntax(env));
|
||||
MZTIMEIT(syntax, scheme_init_compile(env));
|
||||
MZTIMEIT(eval, scheme_init_eval(env));
|
||||
MZTIMEIT(error, scheme_init_error(env));
|
||||
MZTIMEIT(struct, scheme_init_struct(env));
|
||||
|
|
|
@ -168,7 +168,6 @@ THREAD_LOCAL_DECL(volatile int scheme_fuel_counter);
|
|||
THREAD_LOCAL_DECL(uintptr_t scheme_stack_boundary);
|
||||
THREAD_LOCAL_DECL(uintptr_t volatile scheme_jit_stack_boundary);
|
||||
#endif
|
||||
THREAD_LOCAL_DECL(static Scheme_Object *quick_stx);
|
||||
THREAD_LOCAL_DECL(int scheme_continuation_application_count);
|
||||
THREAD_LOCAL_DECL(static int generate_lifts_count);
|
||||
THREAD_LOCAL_DECL(int scheme_overflow_count);
|
||||
|
@ -348,8 +347,6 @@ scheme_init_eval (Scheme_Env *env)
|
|||
|
||||
void scheme_init_eval_places()
|
||||
{
|
||||
REGISTER_SO(quick_stx);
|
||||
|
||||
#ifdef MZ_PRECISE_GC
|
||||
scheme_prefix_finalize = (Scheme_Prefix *)0x1; /* 0x1 acts as a sentenel */
|
||||
GC_set_post_propagate_hook(mark_pruned_prefixes);
|
||||
|
|
|
@ -35,6 +35,8 @@
|
|||
|
||||
#ifdef MZ_USE_JIT
|
||||
|
||||
static Scheme_Object *do_define_syntaxes_clone(Scheme_Object *expr, int jit);
|
||||
|
||||
static Scheme_Object *jit_application(Scheme_Object *o)
|
||||
{
|
||||
Scheme_Object *orig, *naya = NULL;
|
||||
|
@ -476,44 +478,14 @@ static Scheme_Object *begin0_jit(Scheme_Object *data)
|
|||
return (Scheme_Object *)seq2;
|
||||
}
|
||||
|
||||
static Scheme_Object *do_define_syntaxes_jit(Scheme_Object *expr, int jit)
|
||||
{
|
||||
Resolve_Prefix *rp, *orig_rp;
|
||||
Scheme_Object *naya, *rhs;
|
||||
|
||||
rhs = SCHEME_VEC_ELS(expr)[0];
|
||||
if (jit)
|
||||
naya = scheme_jit_expr(rhs);
|
||||
else
|
||||
naya = rhs;
|
||||
|
||||
orig_rp = (Resolve_Prefix *)SCHEME_VEC_ELS(expr)[1];
|
||||
rp = scheme_prefix_eval_clone(orig_rp);
|
||||
|
||||
if (SAME_OBJ(naya, rhs)
|
||||
&& SAME_OBJ(orig_rp, rp))
|
||||
return expr;
|
||||
else {
|
||||
expr = scheme_clone_vector(expr, 0, 1);
|
||||
SCHEME_VEC_ELS(expr)[0] = naya;
|
||||
SCHEME_VEC_ELS(expr)[1] = (Scheme_Object *)rp;
|
||||
return expr;
|
||||
}
|
||||
}
|
||||
|
||||
static Scheme_Object *define_syntaxes_jit(Scheme_Object *expr)
|
||||
{
|
||||
return do_define_syntaxes_jit(expr, 1);
|
||||
return do_define_syntaxes_clone(expr, 1);
|
||||
}
|
||||
|
||||
static Scheme_Object *define_for_syntaxes_jit(Scheme_Object *expr)
|
||||
{
|
||||
return do_define_syntaxes_jit(expr, 1);
|
||||
}
|
||||
|
||||
Scheme_Object *scheme_syntaxes_eval_clone(Scheme_Object *expr)
|
||||
{
|
||||
return do_define_syntaxes_jit(expr, 0);
|
||||
return do_define_syntaxes_clone(expr, 1);
|
||||
}
|
||||
|
||||
/*========================================================================*/
|
||||
|
@ -642,3 +614,35 @@ Scheme_Object *scheme_jit_expr(Scheme_Object *expr)
|
|||
}
|
||||
|
||||
#endif
|
||||
|
||||
static Scheme_Object *do_define_syntaxes_clone(Scheme_Object *expr, int jit)
|
||||
{
|
||||
Resolve_Prefix *rp, *orig_rp;
|
||||
Scheme_Object *naya, *rhs;
|
||||
|
||||
rhs = SCHEME_VEC_ELS(expr)[0];
|
||||
#ifdef MZ_USE_JIT
|
||||
if (jit)
|
||||
naya = scheme_jit_expr(rhs);
|
||||
else
|
||||
#endif
|
||||
naya = rhs;
|
||||
|
||||
orig_rp = (Resolve_Prefix *)SCHEME_VEC_ELS(expr)[1];
|
||||
rp = scheme_prefix_eval_clone(orig_rp);
|
||||
|
||||
if (SAME_OBJ(naya, rhs)
|
||||
&& SAME_OBJ(orig_rp, rp))
|
||||
return expr;
|
||||
else {
|
||||
expr = scheme_clone_vector(expr, 0, 1);
|
||||
SCHEME_VEC_ELS(expr)[0] = naya;
|
||||
SCHEME_VEC_ELS(expr)[1] = (Scheme_Object *)rp;
|
||||
return expr;
|
||||
}
|
||||
}
|
||||
|
||||
Scheme_Object *scheme_syntaxes_eval_clone(Scheme_Object *expr)
|
||||
{
|
||||
return do_define_syntaxes_clone(expr, 0);
|
||||
}
|
||||
|
|
|
@ -226,6 +226,7 @@ void scheme_init_promise(Scheme_Env *env);
|
|||
void scheme_init_struct(Scheme_Env *env);
|
||||
void scheme_init_reduced_proc_struct(Scheme_Env *env);
|
||||
void scheme_init_fun(Scheme_Env *env);
|
||||
void scheme_init_compile(Scheme_Env *env);
|
||||
void scheme_init_symbol(Scheme_Env *env);
|
||||
void scheme_init_char(Scheme_Env *env);
|
||||
void scheme_init_bool(Scheme_Env *env);
|
||||
|
@ -267,6 +268,8 @@ void scheme_init_print_buffers_places(void);
|
|||
void scheme_init_string_places(void);
|
||||
void scheme_init_thread_places(void);
|
||||
void scheme_init_eval_places(void);
|
||||
void scheme_init_compile_places(void);
|
||||
void scheme_init_compenv_places(void);
|
||||
void scheme_init_port_places(void);
|
||||
void scheme_init_regexp_places(void);
|
||||
void scheme_init_stx_places(int initial_main_os_thread);
|
||||
|
|
Loading…
Reference in New Issue
Block a user