fix cross-phase-persistent attribute of primitive modules

This commit is contained in:
Matthew Flatt 2013-08-01 05:54:46 -06:00
parent c71993badd
commit a6f8f00f55
10 changed files with 31 additions and 1 deletions

View File

@ -0,0 +1,17 @@
#lang racket/base
(require racket/place)
(define (go)
(place ch
(printf "running\n")
(parameterize ([current-namespace (make-base-namespace)])
(eval '(module with-contract-#%app-app racket/kernel
(#%require '#%network)
(#%declare #:cross-phase-persistent))))
(printf "done\n")))
(module+ main
(printf "creating place\n")
(define p (go))
(printf "waiting\n")
(place-wait p))

View File

@ -528,6 +528,7 @@ EXPORTS
scheme_save_initial_module_set scheme_save_initial_module_set
scheme_primitive_module scheme_primitive_module
scheme_finish_primitive_module scheme_finish_primitive_module
scheme_set_primitive_module_phaseless
scheme_protect_primitive_provide scheme_protect_primitive_provide
scheme_make_modidx scheme_make_modidx
scheme_apply_for_syntax_in_env scheme_apply_for_syntax_in_env

View File

@ -543,6 +543,7 @@ EXPORTS
scheme_save_initial_module_set scheme_save_initial_module_set
scheme_primitive_module scheme_primitive_module
scheme_finish_primitive_module scheme_finish_primitive_module
scheme_set_primitive_module_phaseless
scheme_protect_primitive_provide scheme_protect_primitive_provide
scheme_make_modidx scheme_make_modidx
scheme_apply_for_syntax_in_env scheme_apply_for_syntax_in_env

View File

@ -545,6 +545,7 @@ scheme_install_macro
scheme_save_initial_module_set scheme_save_initial_module_set
scheme_primitive_module scheme_primitive_module
scheme_finish_primitive_module scheme_finish_primitive_module
scheme_set_primitive_module_phaseless
scheme_protect_primitive_provide scheme_protect_primitive_provide
scheme_make_modidx scheme_make_modidx
scheme_apply_for_syntax_in_env scheme_apply_for_syntax_in_env

View File

@ -551,6 +551,7 @@ scheme_install_macro
scheme_save_initial_module_set scheme_save_initial_module_set
scheme_primitive_module scheme_primitive_module
scheme_finish_primitive_module scheme_finish_primitive_module
scheme_set_primitive_module_phaseless
scheme_protect_primitive_provide scheme_protect_primitive_provide
scheme_make_modidx scheme_make_modidx
scheme_apply_for_syntax_in_env scheme_apply_for_syntax_in_env

View File

@ -5862,7 +5862,7 @@ Scheme_Env *scheme_primitive_module(Scheme_Object *name, Scheme_Env *for_env)
m = MALLOC_ONE_TAGGED(Scheme_Module); m = MALLOC_ONE_TAGGED(Scheme_Module);
m->so.type = scheme_module_type; m->so.type = scheme_module_type;
m->predefined = scheme_starting_up; m->predefined = scheme_starting_up;
m->phaseless = (scheme_starting_up ? scheme_true : NULL); m->phaseless = scheme_true;
env = scheme_new_module_env(for_env, m, 0); env = scheme_new_module_env(for_env, m, 0);
@ -5923,6 +5923,11 @@ Scheme_Env *scheme_primitive_module(Scheme_Object *name, Scheme_Env *for_env)
return env; return env;
} }
void scheme_set_primitive_module_phaseless(Scheme_Env *env, int phaseless)
{
env->module->phaseless = (phaseless ? scheme_true : NULL);
}
void scheme_finish_primitive_module(Scheme_Env *env) void scheme_finish_primitive_module(Scheme_Env *env)
{ {
Scheme_Module *m = env->module; Scheme_Module *m = env->module;

View File

@ -1029,6 +1029,7 @@ MZ_EXTERN void scheme_install_macro(Scheme_Bucket *b, Scheme_Object *v);
MZ_EXTERN void scheme_save_initial_module_set(Scheme_Env *env); MZ_EXTERN void scheme_save_initial_module_set(Scheme_Env *env);
MZ_EXTERN Scheme_Env *scheme_primitive_module(Scheme_Object *name, Scheme_Env *for_env); MZ_EXTERN Scheme_Env *scheme_primitive_module(Scheme_Object *name, Scheme_Env *for_env);
MZ_EXTERN void scheme_finish_primitive_module(Scheme_Env *env); MZ_EXTERN void scheme_finish_primitive_module(Scheme_Env *env);
MZ_EXTERN void scheme_set_primitive_module_phaseless(Scheme_Env *env, int phaseless);
MZ_EXTERN void scheme_protect_primitive_provide(Scheme_Env *env, Scheme_Object *name); MZ_EXTERN void scheme_protect_primitive_provide(Scheme_Env *env, Scheme_Object *name);
MZ_EXTERN Scheme_Object *scheme_make_modidx(Scheme_Object *path, MZ_EXTERN Scheme_Object *scheme_make_modidx(Scheme_Object *path,

View File

@ -844,6 +844,7 @@ void (*scheme_install_macro)(Scheme_Bucket *b, Scheme_Object *v);
void (*scheme_save_initial_module_set)(Scheme_Env *env); void (*scheme_save_initial_module_set)(Scheme_Env *env);
Scheme_Env *(*scheme_primitive_module)(Scheme_Object *name, Scheme_Env *for_env); Scheme_Env *(*scheme_primitive_module)(Scheme_Object *name, Scheme_Env *for_env);
void (*scheme_finish_primitive_module)(Scheme_Env *env); void (*scheme_finish_primitive_module)(Scheme_Env *env);
void (*scheme_set_primitive_module_phaseless)(Scheme_Env *env, int phaseless);
void (*scheme_protect_primitive_provide)(Scheme_Env *env, Scheme_Object *name); void (*scheme_protect_primitive_provide)(Scheme_Env *env, Scheme_Object *name);
Scheme_Object *(*scheme_make_modidx)(Scheme_Object *path, Scheme_Object *(*scheme_make_modidx)(Scheme_Object *path,
Scheme_Object *base, Scheme_Object *base,

View File

@ -614,6 +614,7 @@
scheme_extension_table->scheme_save_initial_module_set = scheme_save_initial_module_set; scheme_extension_table->scheme_save_initial_module_set = scheme_save_initial_module_set;
scheme_extension_table->scheme_primitive_module = scheme_primitive_module; scheme_extension_table->scheme_primitive_module = scheme_primitive_module;
scheme_extension_table->scheme_finish_primitive_module = scheme_finish_primitive_module; scheme_extension_table->scheme_finish_primitive_module = scheme_finish_primitive_module;
scheme_extension_table->scheme_set_primitive_module_phaseless = scheme_set_primitive_module_phaseless;
scheme_extension_table->scheme_protect_primitive_provide = scheme_protect_primitive_provide; scheme_extension_table->scheme_protect_primitive_provide = scheme_protect_primitive_provide;
scheme_extension_table->scheme_make_modidx = scheme_make_modidx; scheme_extension_table->scheme_make_modidx = scheme_make_modidx;
scheme_extension_table->scheme_apply_for_syntax_in_env = scheme_apply_for_syntax_in_env; scheme_extension_table->scheme_apply_for_syntax_in_env = scheme_apply_for_syntax_in_env;

View File

@ -614,6 +614,7 @@
#define scheme_save_initial_module_set (scheme_extension_table->scheme_save_initial_module_set) #define scheme_save_initial_module_set (scheme_extension_table->scheme_save_initial_module_set)
#define scheme_primitive_module (scheme_extension_table->scheme_primitive_module) #define scheme_primitive_module (scheme_extension_table->scheme_primitive_module)
#define scheme_finish_primitive_module (scheme_extension_table->scheme_finish_primitive_module) #define scheme_finish_primitive_module (scheme_extension_table->scheme_finish_primitive_module)
#define scheme_set_primitive_module_phaseless (scheme_extension_table->scheme_set_primitive_module_phaseless)
#define scheme_protect_primitive_provide (scheme_extension_table->scheme_protect_primitive_provide) #define scheme_protect_primitive_provide (scheme_extension_table->scheme_protect_primitive_provide)
#define scheme_make_modidx (scheme_extension_table->scheme_make_modidx) #define scheme_make_modidx (scheme_extension_table->scheme_make_modidx)
#define scheme_apply_for_syntax_in_env (scheme_extension_table->scheme_apply_for_syntax_in_env) #define scheme_apply_for_syntax_in_env (scheme_extension_table->scheme_apply_for_syntax_in_env)