diff options
author | Andy Wingo <wingo@pobox.com> | 2019-10-22 13:59:33 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2019-10-22 13:59:33 +0200 |
commit | f7b4055b16336aa5af8b48f53c0267c9d7182c2e (patch) | |
tree | 5420e6d197d430131a22e3238812a3036ae16894 | |
parent | 0c8d20d2d022e4b990002d7960699af74732409b (diff) | |
download | guile-f7b4055b16336aa5af8b48f53c0267c9d7182c2e.tar.gz |
Deprecate two-arg `record-constructor'
* module/ice-9/boot-9.scm (record-constructor): Deprecate the two-arg
form.
-rw-r--r-- | module/ice-9/boot-9.scm | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm index cbe8b5e39..2e6adde83 100644 --- a/module/ice-9/boot-9.scm +++ b/module/ice-9/boot-9.scm @@ -1282,17 +1282,24 @@ VALUE." (struct-ref obj (+ 1 vtable-offset-user)) (error 'not-a-record-type obj))) -(define* (record-constructor rtd #:optional field-names) - (if (not field-names) - (struct-ref rtd (+ 2 vtable-offset-user)) - (primitive-eval - `(lambda ,field-names - (make-struct/no-tail ',rtd - ,@(map (lambda (f) - (if (memq f field-names) - f - #f)) - (record-type-fields rtd))))))) +(define record-constructor + (case-lambda + ((rtd) + (struct-ref rtd (+ 2 vtable-offset-user))) + ((rtd field-names) + (issue-deprecation-warning + "Calling `record-constructor' with two arguments (the record type" + " and a list of field names) is deprecated. Instead, call with just" + " one argument, and provide a wrapper around that constructor if" + " needed.") + (primitive-eval + `(lambda ,field-names + (make-struct/no-tail ',rtd + ,@(map (lambda (f) + (if (memq f field-names) + f + #f)) + (record-type-fields rtd)))))))) (define (record-predicate rtd) (lambda (obj) (and (struct? obj) (eq? rtd (struct-vtable obj))))) |