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