records



for the record,

the new code has been committed to src/mlisp.lisp.
the functional changes to MSET appear to be the following
(after stripping off comments) --

diff -u -b -i mset.{old,new}
--- mset.old    2005-08-14 12:40:08.000000000 -0600
+++ mset.new    2005-08-14 12:42:26.000000000 -0600
@@ -20,8 +20,9 @@
                      (char= (getcharn x 1) #\&))
              (if munbindp (return nil))
              (if (mget x '$numer)
-                 (merror "~:M improper value assignment to a
numerical quantity" x)
-                 (merror "~:M improper value assignment" x)))
+                     (merror "~:M is a constant. Attempt to reassign it." x)
+                 (merror "~:M is an improper left-hand side for an
assignment" x))
+                )
            (let ((f (get x 'assign)))
              (if (and f (or (not (eq x y))
                             (memq f '(neverset read-only-assign))))
@@ -38,4 +39,6 @@
            (return (arrstore x y)))
           ((and $subscrmap (memq (caar x) '(mlist $matrix)))
            (return (outermap1 'mset x y)))
-          (t (merror "Improper value assignment:~%~M" x)))))
+             ((eq '$@ (caar x))
+              (return($mrecordassign x y)))
+             (t (merror "Improper left-hand side for an assignment:~%~M" x)))))

fwiw, 
robert dodier