From 3effaa28f58a5d1648ce8361ab11879397e2e580 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Thu, 25 Nov 2004 06:29:11 +0000 Subject: [PATCH] Finish making previous changes. --- lisp/calc/calc-units.el | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 03864ce3f07..9386dae8952 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -665,25 +665,25 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).") (defvar math-fbu-base) (defvar math-fbu-entry) -(defun math-find-base-units (entry) - (if (eq (nth 4 entry) 'boom) - (error "Circular definition involving unit %s" (car entry))) - (or (nth 4 entry) - (let (base) - (setcar (nthcdr 4 entry) 'boom) - (math-find-base-units-rec (nth 1 entry) 1) - '(or base - (error "Dimensionless definition for unit %s" (car entry))) - (while (eq (cdr (car base)) 0) - (setq base (cdr base))) - (let ((b base)) +(defun math-find-base-units (math-fbu-entry) + (if (eq (nth 4 math-fbu-entry) 'boom) + (error "Circular definition involving unit %s" (car math-fbu-entry))) + (or (nth 4 math-fbu-entry) + (let (math-fbu-base) + (setcar (nthcdr 4 math-fbu-entry) 'boom) + (math-find-base-units-rec (nth 1 math-fbu-entry) 1) + '(or math-fbu-base + (error "Dimensionless definition for unit %s" (car math-fbu-entry))) + (while (eq (cdr (car math-fbu-base)) 0) + (setq math-fbu-base (cdr math-fbu-base))) + (let ((b math-fbu-base)) (while (cdr b) (if (eq (cdr (car (cdr b))) 0) (setcdr b (cdr (cdr b))) (setq b (cdr b))))) - (setq base (sort base 'math-compare-unit-names)) - (setcar (nthcdr 4 entry) base) - base))) + (setq math-fbu-base (sort math-fbu-base 'math-compare-unit-names)) + (setcar (nthcdr 4 math-fbu-entry) math-fbu-base) + math-fbu-base))) (defun math-compare-unit-names (a b) (memq (car b) (cdr (memq (car a) math-cu-unit-list)))) @@ -694,10 +694,11 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).") (let ((ulist (math-find-base-units u))) (while ulist (let ((p (* (cdr (car ulist)) pow)) - (old (assq (car (car ulist)) base))) + (old (assq (car (car ulist)) math-fbu-base))) (if old (setcdr old (+ (cdr old) p)) - (setq base (cons (cons (car (car ulist)) p) base)))) + (setq math-fbu-base + (cons (cons (car (car ulist)) p) math-fbu-base)))) (setq ulist (cdr ulist))))) ((math-scalarp expr)) ((and (eq (car expr) '^) @@ -716,8 +717,8 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).") ((eq (car expr) 'var) (or (eq (nth 1 expr) 'pi) (error "Unknown name %s in defining expression for unit %s" - (nth 1 expr) (car entry)))) - (t (error "Malformed defining expression for unit %s" (car entry)))))) + (nth 1 expr) (car math-fbu-entry)))) + (t (error "Malformed defining expression for unit %s" (car math-fbu-entry)))))) (defun math-units-in-expr-p (expr sub-exprs) -- 2.39.2