+ (with-slots (entry-buffer name timestamp) parser
+ (if (string= name "table") ; special magic: prefill index-by-name
+ (loop for entry across entry-buffer do
+ (setf (gethash (second entry) *index-by-name*) (first entry))))
+ (format t "table-finalizer: ~a~%" name)
+ (let* ((table-index (gethash name *index-by-name*))
+ (meta-table (aref *meta-by-index* table-index))
+ (table (aref *table-by-index* table-index)))
+ (loop for entry across entry-buffer do
+ (let ((e (make-instance (table-entry-class table)))
+ (index (first entry))
+ (entries (table-entries table)))
+ ; extend array if necessary
+ (unless (> (fill-pointer entries) index)
+ (adjust-array entries (* 2 index) :fill-pointer t))
+ (setf (aref entries index) e)
+ (loop
+ for item in entry
+ for column across meta-table do
+ (setf (slot-value e (find-symbol (string-upcase (meta-name column)) (find-package "XDUMP-DATA"))) item))))
+ (setf (table-last-update table) timestamp))))