Small improvement on the situation in bug 163984: Wrong name on
define-record-type proceedures. Record constructors are now called "a-record-constructor" Record predicates are called "a-record-predicate" Record accessors are called "a-record-accessor" Record mutators are called "a-record-mutator"
This commit is contained in:
		
							parent
							
								
									0644542565
								
							
						
					
					
						commit
						888251df70
					
				|  | @ -257,37 +257,44 @@ | ||||||
|     (define (constructor main-rtd size prcd proto) |     (define (constructor main-rtd size prcd proto) | ||||||
|       (if (not prcd) ;;; base |       (if (not prcd) ;;; base | ||||||
|           (lambda (f*) |           (lambda (f*) | ||||||
|             (let ([v (lambda flds |             (let ([a-record-constructor | ||||||
|                        (let ([n (rtd-size main-rtd)]) |                    (lambda flds | ||||||
|                          (unless (= (length flds) size) |                       (let ([n (rtd-size main-rtd)]) | ||||||
|                            (error 'record-constructor  |                         (unless (= (length flds) size) | ||||||
|                               "main expecting args, got" n flds)) |                           (error 'record-constructor  | ||||||
|                          (let ([r ($make-struct main-rtd n)]) |                              "main expecting args, got" n flds)) | ||||||
|                            (let f ([i 0] [r r] [flds flds] [f* f*]) |                         (let ([r ($make-struct main-rtd n)]) | ||||||
|                              (cond |                           (let f ([i 0] [r r] [flds flds] [f* f*]) | ||||||
|                                [(null? flds) |                             (cond | ||||||
|                                 (if (null? f*) |                               [(null? flds) | ||||||
|                                     r |                                (if (null? f*) | ||||||
|                                     (f i r (car f*) (cdr f*)))] |                                    r | ||||||
|                                [else |                                    (f i r (car f*) (cdr f*)))] | ||||||
|                                 ($struct-set! r i (car flds)) |                               [else | ||||||
|                                 (f (add1 i) r (cdr flds) f*)])))))]) |                                ($struct-set! r i (car flds)) | ||||||
|               (if proto (proto v) v))) |                                (f (add1 i) r (cdr flds) f*)])))))]) | ||||||
|  |               (if proto | ||||||
|  |                  (proto a-record-constructor) | ||||||
|  |                  a-record-constructor))) | ||||||
|           (let ([pprcd (rcd-prcd prcd)] |           (let ([pprcd (rcd-prcd prcd)] | ||||||
|                 [sz (rtd-size (rcd-rtd prcd))]) |                 [sz (rtd-size (rcd-rtd prcd))]) | ||||||
|             (let ([p (constructor main-rtd sz pprcd (rcd-proc prcd))] |             (let ([p (constructor main-rtd sz pprcd (rcd-proc prcd))] | ||||||
|                   [n (- size sz)] |                   [n (- size sz)] | ||||||
|                   [proto  |                   [protocol | ||||||
|                    (if proto |                    (if proto | ||||||
|                        proto |                        proto | ||||||
|                        (lambda (new) |                        (lambda (new) | ||||||
|                          (lambda all-fields |                          (let ([a-record-constructor | ||||||
|                            (let-values ([(parent-fields myfields)  |                                 (lambda all-fields | ||||||
|                                          (split all-fields  |                                   (let-values ([(parent-fields myfields)  | ||||||
|                                            (- (length all-fields) (- size sz)))]) |                                                 (split all-fields  | ||||||
|                               (apply (apply new parent-fields) myfields)))))]) |                                                   (- (length all-fields) | ||||||
|  |                                                      (- size sz)))]) | ||||||
|  |                                      (apply (apply new parent-fields) | ||||||
|  |                                             myfields)))]) | ||||||
|  |                            a-record-constructor)))]) | ||||||
|               (lambda (f*) |               (lambda (f*) | ||||||
|                 (proto  |                 (protocol | ||||||
|                   (lambda fmls |                   (lambda fmls | ||||||
|                     (lambda flds |                     (lambda flds | ||||||
|                       (unless (= (length flds) n)  |                       (unless (= (length flds) n)  | ||||||
|  | @ -313,20 +320,22 @@ | ||||||
|       (let ([i (if p (+ k (rtd-size p)) k)]) |       (let ([i (if p (+ k (rtd-size p)) k)]) | ||||||
|         (unless (fx< i sz)  |         (unless (fx< i sz)  | ||||||
|           (error who "not a valid index" k)) |           (error who "not a valid index" k)) | ||||||
|         (lambda (x)  |         (let ([a-record-accessor | ||||||
|           (cond |                (lambda (x)  | ||||||
|             [($struct/rtd? x rtd) ($struct-ref x i)] |  | ||||||
|             [($struct? x) |  | ||||||
|              (let ([xrtd ($struct-rtd x)]) |  | ||||||
|                (unless (rtd? xrtd)  |  | ||||||
|                  (error who "invalid type" x rtd)) |  | ||||||
|                (let f ([prtd (rtd-parent xrtd)] [rtd rtd] [x x] [i i]) |  | ||||||
|                  (cond |                  (cond | ||||||
|                    [(eq? prtd rtd) ($struct-ref x i)] |                    [($struct/rtd? x rtd) ($struct-ref x i)] | ||||||
|                    [(not prtd)  |                    [($struct? x) | ||||||
|                     (error who "invalid type" x rtd)] |                     (let ([xrtd ($struct-rtd x)]) | ||||||
|                    [else (f (rtd-parent prtd) rtd x i)])))] |                       (unless (rtd? xrtd)  | ||||||
|             [else (error who "invalid type" x rtd)]))))) |                         (error who "invalid type" x rtd)) | ||||||
|  |                       (let f ([prtd (rtd-parent xrtd)] [rtd rtd] [x x] [i i]) | ||||||
|  |                         (cond | ||||||
|  |                           [(eq? prtd rtd) ($struct-ref x i)] | ||||||
|  |                           [(not prtd)  | ||||||
|  |                            (error who "invalid type" x rtd)] | ||||||
|  |                           [else (f (rtd-parent prtd) rtd x i)])))] | ||||||
|  |                    [else (error who "invalid type" x rtd)]))]) | ||||||
|  |           a-record-accessor)))) | ||||||
| 
 | 
 | ||||||
|   (define (record-mutator rtd k)  |   (define (record-mutator rtd k)  | ||||||
|     (define who 'record-mutator) |     (define who 'record-mutator) | ||||||
|  | @ -341,20 +350,22 @@ | ||||||
|           (error who "not a valid index" k)) |           (error who "not a valid index" k)) | ||||||
|         (unless (car (vector-ref (rtd-fields rtd) k)) |         (unless (car (vector-ref (rtd-fields rtd) k)) | ||||||
|           (error who "field is not mutable" k rtd)) |           (error who "field is not mutable" k rtd)) | ||||||
|         (lambda (x v)  |         (let ([a-record-mutator | ||||||
|           (cond |                (lambda (x v)  | ||||||
|             [($struct/rtd? x rtd) ($struct-set! x i v)] |  | ||||||
|             [($struct? x) |  | ||||||
|              (let ([xrtd ($struct-rtd x)]) |  | ||||||
|                (unless (rtd? xrtd)  |  | ||||||
|                  (error who "invalid type" x rtd)) |  | ||||||
|                (let f ([prtd (rtd-parent xrtd)] [rtd rtd] [x x] [i i] [v v]) |  | ||||||
|                  (cond |                  (cond | ||||||
|                    [(eq? prtd rtd) ($struct-set! x i v)] |                    [($struct/rtd? x rtd) ($struct-set! x i v)] | ||||||
|                    [(not prtd)  |                    [($struct? x) | ||||||
|                     (error who "invalid type" x rtd)] |                     (let ([xrtd ($struct-rtd x)]) | ||||||
|                    [else (f (rtd-parent prtd) rtd x i v)])))] |                       (unless (rtd? xrtd)  | ||||||
|             [else (error who "invalid type" x rtd)]))))) |                         (error who "invalid type" x rtd)) | ||||||
|  |                       (let f ([prtd (rtd-parent xrtd)] [rtd rtd] [x x] [i i] [v v]) | ||||||
|  |                         (cond | ||||||
|  |                           [(eq? prtd rtd) ($struct-set! x i v)] | ||||||
|  |                           [(not prtd)  | ||||||
|  |                            (error who "invalid type" x rtd)] | ||||||
|  |                           [else (f (rtd-parent prtd) rtd x i v)])))] | ||||||
|  |                    [else (error who "invalid type" x rtd)]))]) | ||||||
|  |           a-record-mutator)))) | ||||||
| 
 | 
 | ||||||
|   (define (record-predicate rtd)  |   (define (record-predicate rtd)  | ||||||
|     (define who 'record-predicate) |     (define who 'record-predicate) | ||||||
|  | @ -362,18 +373,20 @@ | ||||||
|       (error who "not an rtd" rtd)) |       (error who "not an rtd" rtd)) | ||||||
|     (let ([sz (rtd-size rtd)] |     (let ([sz (rtd-size rtd)] | ||||||
|           [p (rtd-parent rtd)]) |           [p (rtd-parent rtd)]) | ||||||
|        (lambda (x)  |       (let ([a-record-predicate | ||||||
|          (cond |              (lambda (x)  | ||||||
|            [($struct/rtd? x rtd) #t] |                (cond | ||||||
|            [($struct? x) |                  [($struct/rtd? x rtd) #t] | ||||||
|             (let ([xrtd ($struct-rtd x)]) |                  [($struct? x) | ||||||
|               (and (rtd? xrtd)  |                   (let ([xrtd ($struct-rtd x)]) | ||||||
|                    (let f ([prtd (rtd-parent xrtd)] [rtd rtd]) |                     (and (rtd? xrtd)  | ||||||
|                      (cond |                          (let f ([prtd (rtd-parent xrtd)] [rtd rtd]) | ||||||
|                        [(eq? prtd rtd) #t] |                            (cond | ||||||
|                        [(not prtd)     #f] |                              [(eq? prtd rtd) #t] | ||||||
|                        [else (f (rtd-parent prtd) rtd)]))))] |                              [(not prtd)     #f] | ||||||
|            [else #f])))) |                              [else (f (rtd-parent prtd) rtd)]))))] | ||||||
|  |                  [else #f]))]) | ||||||
|  |         a-record-predicate))) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   (define (record-field-mutable? rtd k)  |   (define (record-field-mutable? rtd k)  | ||||||
|  |  | ||||||
|  | @ -1 +1 @@ | ||||||
| 1096 | 1097 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Abdulaziz Ghuloum
						Abdulaziz Ghuloum