.
original commit: a34321d80bc6c79fb96dd1ebfeae0938d7820fcf
This commit is contained in:
parent
bc23159364
commit
bbb274eb0a
1124
collects/mzlib/signedunit.ss
Normal file
1124
collects/mzlib/signedunit.ss
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -217,25 +217,30 @@
|
|||
(set! id tmp)))]
|
||||
[(bound-identifier=? (car evars) id)
|
||||
;; set! exported id:
|
||||
(with-syntax ([loc (car elocs)]
|
||||
[tmp
|
||||
(if name
|
||||
(with-syntax ([tmp tmp]
|
||||
[name name])
|
||||
(syntax (let ([name tmp])
|
||||
name)))
|
||||
tmp)])
|
||||
(with-syntax
|
||||
([loc (car elocs)]
|
||||
[tmp
|
||||
(if name
|
||||
(with-syntax
|
||||
([tmp tmp]
|
||||
[name name])
|
||||
(syntax
|
||||
(let ([name tmp])
|
||||
name)))
|
||||
tmp)])
|
||||
(syntax/loc
|
||||
defn-or-expr
|
||||
(set-box! loc tmp)))]
|
||||
[else (loop (cdr evars) (cdr elocs))])))])
|
||||
[else (loop (cdr evars)
|
||||
(cdr elocs))])))])
|
||||
(if (null? (cdr ids))
|
||||
(do-one (car ids) (syntax expr) (car ids))
|
||||
(let ([tmps (generate-temporaries ids)])
|
||||
(with-syntax ([(tmp ...) tmps]
|
||||
[(set ...) (map (lambda (id tmp)
|
||||
(do-one id tmp #f))
|
||||
ids tmps)])
|
||||
[(set ...)
|
||||
(map (lambda (id tmp)
|
||||
(do-one id tmp #f))
|
||||
ids tmps)])
|
||||
(syntax/loc
|
||||
defn-or-expr
|
||||
(let-values ([(tmp ...) expr])
|
||||
|
@ -254,20 +259,23 @@
|
|||
(with-syntax ([rest (loop (cdr l))]
|
||||
[(var loc) (car l)])
|
||||
(syntax
|
||||
((letrec-syntax ([var
|
||||
(set!-expander
|
||||
(lambda (sstx)
|
||||
(syntax-case sstx (set!)
|
||||
[vr (identifier? (syntax vr)) (syntax (unbox loc))]
|
||||
[(set! vr val)
|
||||
(raise-syntax-error
|
||||
'unit
|
||||
"cannot set! imported or exported variables"
|
||||
sstx)]
|
||||
[(vr . args) (syntax ((unbox loc) . args))])))])
|
||||
. rest))))))]
|
||||
[num-imports (datum->syntax (length (syntax->list (syntax (iloc ...))))
|
||||
#f (quote-syntax here))])
|
||||
((letrec-syntax
|
||||
([var
|
||||
(set!-expander
|
||||
(lambda (sstx)
|
||||
(syntax-case sstx (set!)
|
||||
[vr (identifier? (syntax vr))
|
||||
(syntax (unbox loc))]
|
||||
[(set! vr val)
|
||||
(raise-syntax-error
|
||||
'unit
|
||||
"cannot set! imported or exported variables"
|
||||
sstx)]
|
||||
[(vr . args) (syntax ((unbox loc) . args))])))])
|
||||
. rest))))))]
|
||||
[num-imports (datum->syntax
|
||||
(length (syntax->list (syntax (iloc ...))))
|
||||
#f (quote-syntax here))])
|
||||
(syntax/loc
|
||||
stx
|
||||
(make-unit
|
||||
|
|
Loading…
Reference in New Issue
Block a user