From a524ee77abb9ce48a2e909644767770716a2d3a4 Mon Sep 17 00:00:00 2001 From: Robby Zambito Date: Sun, 11 Jun 2023 19:12:57 -0400 Subject: Use internal record to store JSON record data. --- lib/zambyte/meta/gauche.scm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'lib/zambyte/meta/gauche.scm') diff --git a/lib/zambyte/meta/gauche.scm b/lib/zambyte/meta/gauche.scm index 51972a0..373c408 100644 --- a/lib/zambyte/meta/gauche.scm +++ b/lib/zambyte/meta/gauche.scm @@ -24,7 +24,7 @@ (assoc (symbol->string key) obj) #t) (and (json-record? obj) - (json-object-contains-key? (json-record->fields obj) key)))) + (json-object-contains-key? ((json-record->typeless obj)) key)))) (define array-handler list->vector) (define object-handler identity) @@ -51,7 +51,10 @@ (cdr pair) ((json-key-not-found))))) ((json-record? json) - (json-object-ref (json-record->fields json) key)) + (or (and-let* ((pair (assoc key (json-record->accessors json))) + (accessor (cdr pair))) + (accessor (json-record->internal-record json))) + (error "json-object-ref: no accessor for field" (json-record->name json) key))) (else ((json-key-not-found))))) (define (json-object-set! json key value) @@ -66,8 +69,8 @@ (append! json (list (cons (symbol->string key) value)))) ((json-record? json) (or (and-let* ((pair (assoc key (json-record->mutators json))) - (mutator (cdr pair))) - (mutator json value) + (mutator! (cdr pair))) + (mutator! (json-record->internal-record json) value) json) (error "json-object-set!: no mutator for field" (json-record->name json) key))))) -- cgit