original commit: ceaa3531a3988033c6c1e5626d4862fe05f884a6
This commit is contained in:
Matthew Flatt 2002-03-04 15:56:45 +00:00
parent 972ff377ec
commit a7b96ce7ff
2 changed files with 38 additions and 2 deletions

View File

@ -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)

View File

@ -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)