fix problem with syntax-local-lift-require
Closes PR 13797
Merge to v6.0.1
(cherry picked from commit 414507699b
)
This commit is contained in:
parent
7c4fe52b37
commit
a130b66588
|
@ -1087,6 +1087,25 @@
|
|||
|
||||
(err/rt-test (dynamic-require ''disallowed-definition-avoider #f)
|
||||
exn:fail:contract:variable?)
|
||||
|
||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Check that `syntax-local-lift-require` works interactively
|
||||
;; with a namespace from `module->namespace`:
|
||||
(let ()
|
||||
(define ns (make-base-namespace))
|
||||
(parameterize ([current-namespace ns])
|
||||
(eval '(module m racket/base
|
||||
(require (for-syntax racket/base))
|
||||
(define-syntax (m stx)
|
||||
(syntax-case stx ()
|
||||
[(_)
|
||||
(syntax-local-introduce
|
||||
(syntax-local-lift-require
|
||||
'racket/list
|
||||
(datum->syntax stx 'empty)))]))))
|
||||
(eval '(require 'm))
|
||||
(parameterize ([current-namespace (module->namespace ''m)])
|
||||
(eval '(m)))))
|
||||
|
||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
|
|
@ -2337,6 +2337,7 @@ Scheme_Object *scheme_local_lift_require(Scheme_Object *form, Scheme_Object *ori
|
|||
{
|
||||
Scheme_Object *mark, *data, *pr;
|
||||
Scheme_Object *req_form;
|
||||
int need_prepare = 0;
|
||||
|
||||
data = NULL;
|
||||
|
||||
|
@ -2363,8 +2364,10 @@ Scheme_Object *scheme_local_lift_require(Scheme_Object *form, Scheme_Object *ori
|
|||
|
||||
if (SCHEME_RPAIRP(data))
|
||||
form = scheme_parse_lifted_require(form, phase, mark, SCHEME_CAR(data));
|
||||
else
|
||||
else {
|
||||
form = scheme_toplevel_require_for_expand(form, phase, env, mark);
|
||||
need_prepare = 1;
|
||||
}
|
||||
|
||||
pr = scheme_make_pair(form, SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[6]);
|
||||
SCHEME_VEC_ELS(COMPILE_DATA(env)->lifts)[6] = pr;
|
||||
|
@ -2379,7 +2382,7 @@ Scheme_Object *scheme_local_lift_require(Scheme_Object *form, Scheme_Object *ori
|
|||
SCHEME_EXPAND_OBSERVE_LIFT_REQUIRE(scheme_get_expand_observe(), req_form, orig_form, form);
|
||||
|
||||
/* In a top-level context, may need to force compile-time evaluation: */
|
||||
if (!env->genv->module)
|
||||
if (need_prepare)
|
||||
scheme_prepare_compile_env(env->genv);
|
||||
|
||||
return form;
|
||||
|
|
Loading…
Reference in New Issue
Block a user