fix load handlers to match docs on parameters
Problems exposed by setting `read-accept-lang' to #f.
This commit is contained in:
parent
a95739821b
commit
74844152bc
|
@ -249,9 +249,13 @@
|
||||||
(lambda () (void))
|
(lambda () (void))
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(parameterize ([read-accept-compiled #t]
|
(parameterize ([read-accept-compiled #t]
|
||||||
|
[read-accept-reader #t]
|
||||||
|
[read-accept-lang #t]
|
||||||
[read-on-demand-source (and (load-on-demand-enabled)
|
[read-on-demand-source (and (load-on-demand-enabled)
|
||||||
(path->complete-path filename))])
|
(path->complete-path filename))])
|
||||||
(if expected-module
|
(if expected-module
|
||||||
|
(with-module-reading-parameterization
|
||||||
|
(lambda ()
|
||||||
(jump-to-submodule
|
(jump-to-submodule
|
||||||
in-port
|
in-port
|
||||||
expected-module
|
expected-module
|
||||||
|
@ -269,7 +273,7 @@
|
||||||
(format "expected only a `module' declaration for `~s', but found an extra expression"
|
(format "expected only a `module' declaration for `~s', but found an extra expression"
|
||||||
expected-module)
|
expected-module)
|
||||||
second))
|
second))
|
||||||
(eval module-ized-exp))))))
|
(eval module-ized-exp))))))))
|
||||||
(let loop ([last-time-values (list (void))])
|
(let loop ([last-time-values (list (void))])
|
||||||
(let ([exp (read-syntax src in-port)])
|
(let ([exp (read-syntax src in-port)])
|
||||||
(if (eof-object? exp)
|
(if (eof-object? exp)
|
||||||
|
|
|
@ -114,7 +114,7 @@ port, unless the path has a @racket[".zo"] suffix. It also
|
||||||
@racket[parameterize]s each read to set @racket[read-accept-compiled],
|
@racket[parameterize]s each read to set @racket[read-accept-compiled],
|
||||||
@racket[read-accept-reader], and @racket[read-accept-lang] to
|
@racket[read-accept-reader], and @racket[read-accept-lang] to
|
||||||
@racket[#t]. In addition, if @racket[load-on-demand-enabled] is
|
@racket[#t]. In addition, if @racket[load-on-demand-enabled] is
|
||||||
@racket[#t], then @racket[read-on-demand-source] is effectively set to
|
@racket[#t], then @racket[read-on-demand-source] is set to
|
||||||
the @tech{cleanse}d, absolute form of @racket[path] during the
|
the @tech{cleanse}d, absolute form of @racket[path] during the
|
||||||
@racket[read-syntax] call. After reading a single form, the form is
|
@racket[read-syntax] call. After reading a single form, the form is
|
||||||
passed to the current @tech{evaluation handler}, wrapping the
|
passed to the current @tech{evaluation handler}, wrapping the
|
||||||
|
|
|
@ -13,7 +13,6 @@ static int mark_load_handler_data_MARK(void *p, struct NewGC *gc) {
|
||||||
gcMARK2(d->p, gc);
|
gcMARK2(d->p, gc);
|
||||||
gcMARK2(d->stxsrc, gc);
|
gcMARK2(d->stxsrc, gc);
|
||||||
gcMARK2(d->expected_module, gc);
|
gcMARK2(d->expected_module, gc);
|
||||||
gcMARK2(d->delay_load_info, gc);
|
|
||||||
|
|
||||||
return
|
return
|
||||||
gcBYTES_TO_WORDS(sizeof(LoadHandlerData));
|
gcBYTES_TO_WORDS(sizeof(LoadHandlerData));
|
||||||
|
@ -27,7 +26,6 @@ static int mark_load_handler_data_FIXUP(void *p, struct NewGC *gc) {
|
||||||
gcFIXUP2(d->p, gc);
|
gcFIXUP2(d->p, gc);
|
||||||
gcFIXUP2(d->stxsrc, gc);
|
gcFIXUP2(d->stxsrc, gc);
|
||||||
gcFIXUP2(d->expected_module, gc);
|
gcFIXUP2(d->expected_module, gc);
|
||||||
gcFIXUP2(d->delay_load_info, gc);
|
|
||||||
|
|
||||||
return
|
return
|
||||||
gcBYTES_TO_WORDS(sizeof(LoadHandlerData));
|
gcBYTES_TO_WORDS(sizeof(LoadHandlerData));
|
||||||
|
|
|
@ -1559,7 +1559,6 @@ mark_load_handler_data {
|
||||||
gcMARK2(d->p, gc);
|
gcMARK2(d->p, gc);
|
||||||
gcMARK2(d->stxsrc, gc);
|
gcMARK2(d->stxsrc, gc);
|
||||||
gcMARK2(d->expected_module, gc);
|
gcMARK2(d->expected_module, gc);
|
||||||
gcMARK2(d->delay_load_info, gc);
|
|
||||||
|
|
||||||
size:
|
size:
|
||||||
gcBYTES_TO_WORDS(sizeof(LoadHandlerData));
|
gcBYTES_TO_WORDS(sizeof(LoadHandlerData));
|
||||||
|
|
|
@ -4266,7 +4266,6 @@ typedef struct {
|
||||||
Scheme_Thread *p;
|
Scheme_Thread *p;
|
||||||
Scheme_Object *stxsrc;
|
Scheme_Object *stxsrc;
|
||||||
Scheme_Object *expected_module;
|
Scheme_Object *expected_module;
|
||||||
Scheme_Object *delay_load_info;
|
|
||||||
} LoadHandlerData;
|
} LoadHandlerData;
|
||||||
|
|
||||||
static void post_load_handler(void *data)
|
static void post_load_handler(void *data)
|
||||||
|
@ -4428,8 +4427,8 @@ static Scheme_Object *do_load_handler(void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((obj = scheme_internal_read(port, lhd->stxsrc, 1, 0, 0, 0, -1, NULL,
|
while ((obj = scheme_internal_read(port, lhd->stxsrc, -1, 0, 0, 0, -1, NULL,
|
||||||
NULL, NULL, lhd->delay_load_info))
|
NULL, NULL, NULL))
|
||||||
&& !SCHEME_EOFP(obj)) {
|
&& !SCHEME_EOFP(obj)) {
|
||||||
save_array = NULL;
|
save_array = NULL;
|
||||||
got_one = 1;
|
got_one = 1;
|
||||||
|
@ -4516,7 +4515,7 @@ static Scheme_Object *do_load_handler(void *data)
|
||||||
|
|
||||||
/* Check no more expressions: */
|
/* Check no more expressions: */
|
||||||
if (!skip_no_more_check) {
|
if (!skip_no_more_check) {
|
||||||
d = scheme_internal_read(port, lhd->stxsrc, 1, 0, 0, 0, -1, NULL, NULL, NULL, NULL);
|
d = scheme_internal_read(port, lhd->stxsrc, -1, 0, 0, 0, -1, NULL, NULL, NULL, NULL);
|
||||||
if (!SCHEME_EOFP(d)) {
|
if (!SCHEME_EOFP(d)) {
|
||||||
Scheme_Input_Port *ip;
|
Scheme_Input_Port *ip;
|
||||||
ip = scheme_input_port_record(port);
|
ip = scheme_input_port_record(port);
|
||||||
|
@ -4664,6 +4663,15 @@ static Scheme_Object *default_load(int argc, Scheme_Object *argv[])
|
||||||
config = scheme_extend_config(config, MZCONFIG_CAN_READ_LANG, scheme_true);
|
config = scheme_extend_config(config, MZCONFIG_CAN_READ_LANG, scheme_true);
|
||||||
config = scheme_extend_config(config, MZCONFIG_READ_DECIMAL_INEXACT, scheme_true);
|
config = scheme_extend_config(config, MZCONFIG_READ_DECIMAL_INEXACT, scheme_true);
|
||||||
config = scheme_extend_config(config, MZCONFIG_READTABLE, scheme_false);
|
config = scheme_extend_config(config, MZCONFIG_READTABLE, scheme_false);
|
||||||
|
} else {
|
||||||
|
config = scheme_extend_config(config, MZCONFIG_CAN_READ_COMPILED, scheme_true);
|
||||||
|
config = scheme_extend_config(config, MZCONFIG_CAN_READ_READER, scheme_true);
|
||||||
|
config = scheme_extend_config(config, MZCONFIG_CAN_READ_LANG, scheme_true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (use_delay_load) {
|
||||||
|
v = scheme_path_to_complete_path(argv[0], NULL);
|
||||||
|
config = scheme_extend_config(config, MZCONFIG_DELAY_LOAD_INFO, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
lhd = MALLOC_ONE_RT(LoadHandlerData);
|
lhd = MALLOC_ONE_RT(LoadHandlerData);
|
||||||
|
@ -4676,22 +4684,14 @@ static Scheme_Object *default_load(int argc, Scheme_Object *argv[])
|
||||||
name = scheme_input_port_record(port)->name;
|
name = scheme_input_port_record(port)->name;
|
||||||
lhd->stxsrc = name;
|
lhd->stxsrc = name;
|
||||||
lhd->expected_module = expected_module;
|
lhd->expected_module = expected_module;
|
||||||
if (use_delay_load) {
|
|
||||||
v = scheme_path_to_complete_path(argv[0], NULL);
|
|
||||||
lhd->delay_load_info = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SCHEME_TRUEP(expected_module)) {
|
|
||||||
scheme_push_continuation_frame(&cframe);
|
scheme_push_continuation_frame(&cframe);
|
||||||
scheme_set_cont_mark(scheme_parameterization_key, (Scheme_Object *)config);
|
scheme_set_cont_mark(scheme_parameterization_key, (Scheme_Object *)config);
|
||||||
}
|
|
||||||
|
|
||||||
v = scheme_dynamic_wind(NULL, do_load_handler, post_load_handler,
|
v = scheme_dynamic_wind(NULL, do_load_handler, post_load_handler,
|
||||||
NULL, (void *)lhd);
|
NULL, (void *)lhd);
|
||||||
|
|
||||||
if (SCHEME_TRUEP(expected_module)) {
|
|
||||||
scheme_pop_continuation_frame(&cframe);
|
scheme_pop_continuation_frame(&cframe);
|
||||||
}
|
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user