fix internal-definition expansion
The code added to handle expressions mixed with definitions was not introduced in the right way; fix it to be like macro-introduced code. Closes PR 13452
This commit is contained in:
parent
79266fcf36
commit
9210437b3f
|
@ -1752,6 +1752,25 @@
|
|||
(syntax-test #'(letrec) #rx"missing binding")
|
||||
(syntax-test #'(letrec ([x 3])) #rx"missing body")
|
||||
|
||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Check that expansion generated for internal definitions
|
||||
;; introduces `values' and `begin' as if by macros:
|
||||
|
||||
(let ()
|
||||
(define (int-def-check)
|
||||
(define (values) (error 'hygiene "is broken"))
|
||||
1 ; expansion uses `values' and `begin'
|
||||
(define x 2)
|
||||
3)
|
||||
(test 3 int-def-check)
|
||||
|
||||
(define (int-def-check2)
|
||||
(define (begin) (error 'hygiene "is broken"))
|
||||
1
|
||||
(define x 2)
|
||||
30)
|
||||
(test 30 int-def-check2))
|
||||
|
||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(report-errs)
|
||||
|
|
|
@ -5624,18 +5624,22 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env,
|
|||
int cnt;
|
||||
|
||||
if (!SCHEME_NULLP(pre_exprs)) {
|
||||
Scheme_Object *begin_stx, *values_app_stx;
|
||||
Scheme_Object *begin_stx, *values_app_stx, *exp_mark;
|
||||
|
||||
pre_exprs = scheme_reverse(pre_exprs);
|
||||
|
||||
exp_mark = scheme_new_mark();
|
||||
|
||||
begin_stx = scheme_datum_to_syntax(begin_symbol,
|
||||
scheme_false,
|
||||
scheme_sys_wraps(env),
|
||||
0, 0);
|
||||
begin_stx = scheme_add_remove_mark(begin_stx, exp_mark);
|
||||
values_app_stx = scheme_datum_to_syntax(scheme_make_pair(values_symbol, scheme_null),
|
||||
scheme_false,
|
||||
scheme_sys_wraps(env),
|
||||
0, 0);
|
||||
values_app_stx = scheme_add_remove_mark(values_app_stx, exp_mark);
|
||||
|
||||
while (SCHEME_PAIRP(pre_exprs)) {
|
||||
v = scheme_make_pair(scheme_null,
|
||||
|
|
Loading…
Reference in New Issue
Block a user