Work on migrating to the new dictionary implementation.

This commit is contained in:
Dominik Pantůček 2023-04-09 20:36:49 +02:00
parent 42466416cd
commit ced789ca06
7 changed files with 69 additions and 68 deletions

View file

@ -37,7 +37,7 @@
(chicken irregex)
member-record
testing
dictionary
util-dict-list
month
period
util-list
@ -163,9 +163,9 @@
;; number, known multikeys as lists of pairs of value and line
;; number.
(define (process-member-file mr)
(let loop ((parsed (dict-ref mr 'parsed))
(let loop ((parsed (ldict-ref mr 'parsed))
(mr mr)
(processed (make-dict)))
(processed (make-ldict)))
(if (null? parsed)
(member-record-set mr #:processed processed)
(let* ((line (car parsed))
@ -173,18 +173,18 @@
(value (cadr line))
(number (caddr line)))
(if (member key known-keys)
(if (dict-has-key? processed key)
(if (ldict-contains? processed key)
(loop (cdr parsed)
(member-record-add-highlight mr number "Duplicate key" 2 'error)
processed)
(loop (cdr parsed)
mr
(dict-set processed key (cons value number))))
(ldict-set processed key (cons value number))))
(if (member key known-multikeys)
(loop (cdr parsed)
mr
(dict-set processed key (cons (cons value number)
(dict-ref processed key '()))))
(ldict-set processed key (cons (cons value number)
(ldict-ref processed key '()))))
(loop (cdr parsed)
(if (member key ignored-keys)
mr
@ -194,14 +194,14 @@
;; Pass 3+: Single interpreter pass - input must be
;; dictionary. Output is top-level key of member record.
(define (interpreter-pass mr output input pass-proc)
(let loop ((keys (dict-keys input))
(mr (dict-set mr output (make-dict))))
(let loop ((keys (ldict-keys input))
(mr (ldict-set mr output (make-ldict))))
(if (null? keys)
mr
(let ((key (car keys)))
(loop (cdr keys)
(pass-proc mr output key
(dict-ref input key)))))))
(ldict-ref input key)))))))
;; Pass 3+: Interpreter passes
(define (interpret-member-file mr . starts)
@ -218,7 +218,7 @@
(pass-proc (cadr pass)))
(loop (cdr passes)
(caar passes)
(interpreter-pass mr pass-name (dict-ref mr prev-name) pass-proc)))))))
(interpreter-pass mr pass-name (ldict-ref mr prev-name) pass-proc)))))))
;; Loads member file source. Performs passes 0, 1 and 2.
(define (load-member-file mr)