.
original commit: ceaa3531a3988033c6c1e5626d4862fe05f884a6
This commit is contained in:
parent
972ff377ec
commit
a7b96ce7ff
|
@ -164,10 +164,10 @@
|
||||||
(syntax-case (car omissions) ()
|
(syntax-case (car omissions) ()
|
||||||
[-selectors
|
[-selectors
|
||||||
(literal? -selectors)
|
(literal? -selectors)
|
||||||
(loop rest names #t no-sel?)]
|
(loop rest names no-sel? #t)]
|
||||||
[-setters
|
[-setters
|
||||||
(literal? -setters)
|
(literal? -setters)
|
||||||
(loop rest names no-set? #t)]
|
(loop rest names #t no-set?)]
|
||||||
[(- name)
|
[(- name)
|
||||||
(and (literal? -) (identifier? (syntax name)))
|
(and (literal? -) (identifier? (syntax name)))
|
||||||
(loop rest (cons (syntax name) names)
|
(loop rest (cons (syntax name) names)
|
||||||
|
|
|
@ -534,5 +534,41 @@
|
||||||
(list x 10))
|
(list x 10))
|
||||||
(x))))
|
(x))))
|
||||||
|
|
||||||
|
;; Check -setters, -selectors, and -
|
||||||
|
|
||||||
|
(let ([foo-bar 10]
|
||||||
|
[set-foo-bar! 100]
|
||||||
|
[foo@ (unit/sig ((struct foo (bar)))
|
||||||
|
(import)
|
||||||
|
(define-struct foo (bar)))])
|
||||||
|
(define-syntax (go stx)
|
||||||
|
(syntax-case stx ()
|
||||||
|
[(_ lookup omit ...)
|
||||||
|
(syntax
|
||||||
|
(invoke-unit/sig
|
||||||
|
(compound-unit/sig
|
||||||
|
(import)
|
||||||
|
(link [FOO : ((struct foo (bar))) (foo@)]
|
||||||
|
[CLIENT : () ((unit/sig ()
|
||||||
|
(import ((struct foo (bar) omit ...)))
|
||||||
|
(if (eq? 'foo-bar 'lookup)
|
||||||
|
foo-bar
|
||||||
|
set-foo-bar!))
|
||||||
|
(FOO : ((struct foo (bar) omit ...))))])
|
||||||
|
(export))))]))
|
||||||
|
|
||||||
|
(test #t struct-accessor-procedure? (go foo-bar))
|
||||||
|
(test #t struct-mutator-procedure? (go set-foo-bar!))
|
||||||
|
(test 10 'no-sel (go foo-bar -selectors))
|
||||||
|
(test #t struct-mutator-procedure? (go set-foo-bar! -selectors))
|
||||||
|
(test #t struct-accessor-procedure? (go foo-bar -setters))
|
||||||
|
(test 100 'no-set (go set-foo-bar! -setters))
|
||||||
|
(test 10 'no-sel (go foo-bar (- foo-bar)))
|
||||||
|
(test 100 'no-set (go set-foo-bar! (- set-foo-bar!)))
|
||||||
|
(test #t struct-accessor-procedure? (go foo-bar (- set-foo-bar!)))
|
||||||
|
(test #t struct-mutator-procedure? (go set-foo-bar! (- foo-bar)))
|
||||||
|
(test #t struct-accessor-procedure? (go foo-bar (- make-foo)))
|
||||||
|
(test #t struct-mutator-procedure? (go set-foo-bar! (- make-foo))))
|
||||||
|
|
||||||
(report-errs)
|
(report-errs)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user