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: */
|
/* If locked, these are probably sharable: */
|
||||||
THREAD_LOCAL_DECL(static Scheme_Hash_Table *toplevels_ht);
|
THREAD_LOCAL_DECL(static Scheme_Hash_Table *toplevels_ht);
|
||||||
THREAD_LOCAL_DECL(static Scheme_Hash_Table *locals_ht[2]);
|
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);
|
THREAD_LOCAL_DECL(static int env_uid_counter);
|
||||||
|
|
||||||
#define ARBITRARY_USE 0x1
|
#define ARBITRARY_USE 0x1
|
||||||
|
@ -87,6 +85,22 @@ void scheme_init_compenv()
|
||||||
#endif
|
#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 */
|
/* compilation info management */
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
|
|
|
@ -62,6 +62,8 @@ ROSYM static Scheme_Object *quote_symbol;
|
||||||
ROSYM static Scheme_Object *letrec_syntaxes_symbol;
|
ROSYM static Scheme_Object *letrec_syntaxes_symbol;
|
||||||
ROSYM static Scheme_Object *values_symbol;
|
ROSYM static Scheme_Object *values_symbol;
|
||||||
|
|
||||||
|
THREAD_LOCAL_DECL(static Scheme_Object *quick_stx);
|
||||||
|
|
||||||
/* locals */
|
/* locals */
|
||||||
static Scheme_Object *lambda_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec);
|
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);
|
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 */
|
/* initialization */
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
||||||
void scheme_init_syntax (Scheme_Env *env)
|
void scheme_init_compile (Scheme_Env *env)
|
||||||
{
|
{
|
||||||
#ifdef MZ_PRECISE_GC
|
#ifdef MZ_PRECISE_GC
|
||||||
register_traversers();
|
register_traversers();
|
||||||
|
@ -299,6 +301,11 @@ void scheme_init_syntax (Scheme_Env *env)
|
||||||
scheme_init_marshal(env);
|
scheme_init_marshal(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scheme_init_compile_places()
|
||||||
|
{
|
||||||
|
REGISTER_SO(quick_stx);
|
||||||
|
}
|
||||||
|
|
||||||
Scheme_Object *
|
Scheme_Object *
|
||||||
scheme_make_compiled_syntax(Scheme_Syntax *proc,
|
scheme_make_compiled_syntax(Scheme_Syntax *proc,
|
||||||
Scheme_Syntax_Expander *eproc)
|
Scheme_Syntax_Expander *eproc)
|
||||||
|
@ -1449,9 +1456,11 @@ Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int mode)
|
||||||
if (mode == 2) {
|
if (mode == 2) {
|
||||||
/* sfs */
|
/* sfs */
|
||||||
return (Scheme_Object *)cl2;
|
return (Scheme_Object *)cl2;
|
||||||
|
#ifdef MZ_USE_JIT
|
||||||
} else if (mode == 1) {
|
} else if (mode == 1) {
|
||||||
/* JIT */
|
/* JIT */
|
||||||
return scheme_case_lambda_jit((Scheme_Object *)cl2);
|
return scheme_case_lambda_jit((Scheme_Object *)cl2);
|
||||||
|
#endif
|
||||||
} else
|
} else
|
||||||
return (Scheme_Object *)cl2;
|
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 *flfxnum_env;
|
||||||
READ_ONLY static Scheme_Env *futures_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 */
|
/* local functions */
|
||||||
static void make_kernel_env(void);
|
static void make_kernel_env(void);
|
||||||
|
|
||||||
|
@ -217,22 +220,6 @@ Scheme_Env *scheme_basic_env()
|
||||||
return 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 */
|
/* READ-ONLY GLOBAL structures ONE-TIME initialization */
|
||||||
Scheme_Env *scheme_engine_instance_init() {
|
Scheme_Env *scheme_engine_instance_init() {
|
||||||
Scheme_Env *env;
|
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();
|
scheme_init_thread_lwc();
|
||||||
|
|
||||||
init_toplevel_local_offsets_hashtable_caches();
|
scheme_init_compenv_places();
|
||||||
|
|
||||||
#ifdef TIME_STARTUP_PROCESS
|
#ifdef TIME_STARTUP_PROCESS
|
||||||
printf("pre-process @ %" PRIdPTR "\n", scheme_get_process_milliseconds());
|
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_string_places();
|
||||||
scheme_init_logger();
|
scheme_init_logger();
|
||||||
scheme_init_eval_places();
|
scheme_init_eval_places();
|
||||||
|
scheme_init_compile_places();
|
||||||
scheme_init_regexp_places();
|
scheme_init_regexp_places();
|
||||||
scheme_init_stx_places(initial_main_os_thread);
|
scheme_init_stx_places(initial_main_os_thread);
|
||||||
scheme_init_sema_places();
|
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_expand_observe(env);
|
||||||
scheme_init_place(env);
|
scheme_init_place(env);
|
||||||
/* END PRIMITIVE MODULES */
|
/* END PRIMITIVE MODULES */
|
||||||
#if defined(MZ_USE_PLACES)
|
#if defined(MZ_USE_PLACES) && defined(MZ_USE_JIT)
|
||||||
scheme_jit_fill_threadlocal_table();
|
scheme_jit_fill_threadlocal_table();
|
||||||
#endif
|
#endif
|
||||||
scheme_init_futures_per_place();
|
scheme_init_futures_per_place();
|
||||||
|
@ -578,7 +566,7 @@ static void make_kernel_env(void)
|
||||||
MZTIMEIT(vector, scheme_init_vector(env));
|
MZTIMEIT(vector, scheme_init_vector(env));
|
||||||
MZTIMEIT(char, scheme_init_char(env));
|
MZTIMEIT(char, scheme_init_char(env));
|
||||||
MZTIMEIT(bool, scheme_init_bool(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(eval, scheme_init_eval(env));
|
||||||
MZTIMEIT(error, scheme_init_error(env));
|
MZTIMEIT(error, scheme_init_error(env));
|
||||||
MZTIMEIT(struct, scheme_init_struct(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 scheme_stack_boundary);
|
||||||
THREAD_LOCAL_DECL(uintptr_t volatile scheme_jit_stack_boundary);
|
THREAD_LOCAL_DECL(uintptr_t volatile scheme_jit_stack_boundary);
|
||||||
#endif
|
#endif
|
||||||
THREAD_LOCAL_DECL(static Scheme_Object *quick_stx);
|
|
||||||
THREAD_LOCAL_DECL(int scheme_continuation_application_count);
|
THREAD_LOCAL_DECL(int scheme_continuation_application_count);
|
||||||
THREAD_LOCAL_DECL(static int generate_lifts_count);
|
THREAD_LOCAL_DECL(static int generate_lifts_count);
|
||||||
THREAD_LOCAL_DECL(int scheme_overflow_count);
|
THREAD_LOCAL_DECL(int scheme_overflow_count);
|
||||||
|
@ -348,8 +347,6 @@ scheme_init_eval (Scheme_Env *env)
|
||||||
|
|
||||||
void scheme_init_eval_places()
|
void scheme_init_eval_places()
|
||||||
{
|
{
|
||||||
REGISTER_SO(quick_stx);
|
|
||||||
|
|
||||||
#ifdef MZ_PRECISE_GC
|
#ifdef MZ_PRECISE_GC
|
||||||
scheme_prefix_finalize = (Scheme_Prefix *)0x1; /* 0x1 acts as a sentenel */
|
scheme_prefix_finalize = (Scheme_Prefix *)0x1; /* 0x1 acts as a sentenel */
|
||||||
GC_set_post_propagate_hook(mark_pruned_prefixes);
|
GC_set_post_propagate_hook(mark_pruned_prefixes);
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
|
|
||||||
#ifdef MZ_USE_JIT
|
#ifdef MZ_USE_JIT
|
||||||
|
|
||||||
|
static Scheme_Object *do_define_syntaxes_clone(Scheme_Object *expr, int jit);
|
||||||
|
|
||||||
static Scheme_Object *jit_application(Scheme_Object *o)
|
static Scheme_Object *jit_application(Scheme_Object *o)
|
||||||
{
|
{
|
||||||
Scheme_Object *orig, *naya = NULL;
|
Scheme_Object *orig, *naya = NULL;
|
||||||
|
@ -476,44 +478,14 @@ static Scheme_Object *begin0_jit(Scheme_Object *data)
|
||||||
return (Scheme_Object *)seq2;
|
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)
|
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)
|
static Scheme_Object *define_for_syntaxes_jit(Scheme_Object *expr)
|
||||||
{
|
{
|
||||||
return do_define_syntaxes_jit(expr, 1);
|
return do_define_syntaxes_clone(expr, 1);
|
||||||
}
|
|
||||||
|
|
||||||
Scheme_Object *scheme_syntaxes_eval_clone(Scheme_Object *expr)
|
|
||||||
{
|
|
||||||
return do_define_syntaxes_jit(expr, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
|
@ -642,3 +614,35 @@ Scheme_Object *scheme_jit_expr(Scheme_Object *expr)
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#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_struct(Scheme_Env *env);
|
||||||
void scheme_init_reduced_proc_struct(Scheme_Env *env);
|
void scheme_init_reduced_proc_struct(Scheme_Env *env);
|
||||||
void scheme_init_fun(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_symbol(Scheme_Env *env);
|
||||||
void scheme_init_char(Scheme_Env *env);
|
void scheme_init_char(Scheme_Env *env);
|
||||||
void scheme_init_bool(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_string_places(void);
|
||||||
void scheme_init_thread_places(void);
|
void scheme_init_thread_places(void);
|
||||||
void scheme_init_eval_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_port_places(void);
|
||||||
void scheme_init_regexp_places(void);
|
void scheme_init_regexp_places(void);
|
||||||
void scheme_init_stx_places(int initial_main_os_thread);
|
void scheme_init_stx_places(int initial_main_os_thread);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user