# HG changeset patch # User Jay Belanger # Date 1100898228 0 # Node ID 285e9f39fa7d8852d28bbc9aff70b4328e1f3df7 # Parent a945a6396351f4b1caba1b284fd255bfb2d11b40 (calc-rewrite-selection): Make rules a local variable. (calc-rewr-sel): New variable. (calc-rewrite-selection, calc-locate-selection-marker, calc-rewrite): Use the declared variable calc-rewr-sel instead of sel. (math-rewrite): Use let* to declare variables. (math-mt-many): Declare it. (math-rewrite-whole-expr): New variable. (math-rewrite, math-rewrite-phase): Replace variable expr by declared variable. (math-import-list): Declare it. (math-rewrite-heads-heads, math-rewrite-heads-skips) (math-rewrite-heads-blanks ): New variables. (math-rewrite-heads, math-rewrite-heads-rec): Replace variables heads, skips and blanks by declared variables. (math-regs, math-num-regs, math-prog-last, math-bound-vars) (math-conds, math-copy-neg, math-rhs, math-pattern, math-remembering) (math-aliased-vars): Declare them. (math-rwcomp-subst-old, math-rwcomp-subst-new) (math-rwcomp-subst-old-func, math-rwcomp-subst-new-func): New variables. (math-rwcomp-substitute, math-rwcomp-subst-rec): Replace variables old, new, old-func and new-func by declared variables. (math-rwcomp-assoc-args, math-rwcomp-addsub-args): Remove unnecessary variable. (math-rewrite-phase): Declare it. (math-apply-rw-regs): New variable. (math-apply-rewrites, math-rwapply-replace-regs, math-rwapply-reg-looks-negp): Replace variable regs by declared variable. (math-apply-rw-ruleset): New variable. (math-apply-rewrites, math-rwapply-remember): Replace variable ruleset by declared variable. diff -r a945a6396351 -r 285e9f39fa7d lisp/calc/calc-rewr.el --- a/lisp/calc/calc-rewr.el Fri Nov 19 20:07:39 2004 +0000 +++ b/lisp/calc/calc-rewr.el Fri Nov 19 21:03:48 2004 +0000 @@ -3,8 +3,7 @@ ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. ;; Author: David Gillespie -;; Maintainers: D. Goel -;; Colin Walters +;; Maintainer: Jay Belanger ;; This file is part of GNU Emacs. @@ -36,6 +35,11 @@ (defvar math-rewrite-default-iters 100) + +;; The variable calc-rewr-sel is local to calc-rewrite-selection and +;; calc-rewrite, but is used by calc-locate-selection-marker. +(defvar calc-rewr-sel) + (defun calc-rewrite-selection (rules-str &optional many prefix) (interactive "sRewrite rule(s): \np") (calc-slow-wrapper @@ -43,9 +47,10 @@ (let* ((num (max 1 (calc-locate-cursor-element (point)))) (reselect t) (pop-rules nil) + rules (entry (calc-top num 'entry)) (expr (car entry)) - (sel (calc-auto-selection entry)) + (calc-rewr-sel (calc-auto-selection entry)) (math-rewrite-selections t) (math-rewrite-default-iters 1)) (if (or (null rules-str) (equal rules-str "") (equal rules-str "$")) @@ -73,10 +78,10 @@ (if (eq many 0) (setq many '(var inf var-inf)) (if many (setq many (prefix-numeric-value many)))) - (if sel + (if calc-rewr-sel (setq expr (calc-replace-sub-formula (car entry) - sel - (list 'calcFunc-select sel))) + calc-rewr-sel + (list 'calcFunc-select calc-rewr-sel))) (setq expr (car entry) reselect nil math-rewrite-selections nil)) @@ -85,22 +90,22 @@ (math-rewrite (calc-normalize expr) rules many))) - sel nil + calc-rewr-sel nil expr (calc-locate-select-marker expr)) - (or (consp sel) (setq sel nil)) + (or (consp calc-rewr-sel) (setq calc-rewr-sel nil)) (if pop-rules (calc-pop-stack 1)) (calc-pop-push-record-list 1 (or prefix "rwrt") (list expr) (- num (if pop-rules 1 0)) - (list (and reselect sel)))) + (list (and reselect calc-rewr-sel)))) (calc-handle-whys))) -(defun calc-locate-select-marker (expr) ; changes "sel" +(defun calc-locate-select-marker (expr) (if (Math-primp expr) expr (if (and (eq (car expr) 'calcFunc-select) (= (length expr) 2)) (progn - (setq sel (if sel t (nth 1 expr))) + (setq calc-rewr-sel (if calc-rewr-sel t (nth 1 expr))) (nth 1 expr)) (cons (car expr) (mapcar 'calc-locate-select-marker (cdr expr)))))) @@ -138,7 +143,7 @@ (setq many '(var inf var-inf)) (if many (setq many (prefix-numeric-value many)))) (setq expr (calc-normalize (math-rewrite expr rules many))) - (let (sel) + (let (calc-rewr-sel) (setq expr (calc-locate-select-marker expr))) (calc-pop-push-record-list n "rwrt" (list expr))) (calc-handle-whys))) @@ -165,33 +170,38 @@ (calc-enter-result n "mtch" (math-match-patterns pat expr nil)))))) +(defvar math-mt-many) -(defun math-rewrite (whole-expr rules &optional math-mt-many) - (let ((crules (math-compile-rewrites rules)) - (heads (math-rewrite-heads whole-expr)) - (trace-buffer (get-buffer "*Trace*")) - (calc-display-just 'center) - (calc-display-origin 39) - (calc-line-breaking 78) - (calc-line-numbering nil) - (calc-show-selections t) - (calc-why nil) - (math-mt-func (function - (lambda (x) - (let ((result (math-apply-rewrites x (cdr crules) - heads crules))) - (if result - (progn - (if trace-buffer - (let ((fmt (math-format-stack-value - (list result nil nil)))) - (save-excursion - (set-buffer trace-buffer) - (insert "\nrewrite to\n" fmt "\n")))) - (setq heads (math-rewrite-heads result heads t)))) - result))))) +;; The variable math-rewrite-whole-expr is local to math-rewrite, +;; but is used by math-rewrite-phase +(defvar math-rewrite-whole-expr) + +(defun math-rewrite (math-rewrite-whole-expr rules &optional math-mt-many) + (let* ((crules (math-compile-rewrites rules)) + (heads (math-rewrite-heads math-rewrite-whole-expr)) + (trace-buffer (get-buffer "*Trace*")) + (calc-display-just 'center) + (calc-display-origin 39) + (calc-line-breaking 78) + (calc-line-numbering nil) + (calc-show-selections t) + (calc-why nil) + (math-mt-func (function + (lambda (x) + (let ((result (math-apply-rewrites x (cdr crules) + heads crules))) + (if result + (progn + (if trace-buffer + (let ((fmt (math-format-stack-value + (list result nil nil)))) + (save-excursion + (set-buffer trace-buffer) + (insert "\nrewrite to\n" fmt "\n")))) + (setq heads (math-rewrite-heads result heads t)))) + result))))) (if trace-buffer - (let ((fmt (math-format-stack-value (list whole-expr nil nil)))) + (let ((fmt (math-format-stack-value (list math-rewrite-whole-expr nil nil)))) (save-excursion (set-buffer trace-buffer) (setq truncate-lines t) @@ -203,26 +213,27 @@ (if (equal math-mt-many '(neg (var inf var-inf))) (setq math-mt-many -1000000)) (math-rewrite-phase (nth 3 (car crules))) (if trace-buffer - (let ((fmt (math-format-stack-value (list whole-expr nil nil)))) + (let ((fmt (math-format-stack-value (list math-rewrite-whole-expr nil nil)))) (save-excursion (set-buffer trace-buffer) (insert "\nDone rewriting" (if (= math-mt-many 0) " (reached iteration limit)" "") ":\n" fmt "\n")))) - whole-expr)) + math-rewrite-whole-expr)) (defun math-rewrite-phase (sched) (while (and sched (/= math-mt-many 0)) (if (listp (car sched)) - (while (let ((save-expr whole-expr)) + (while (let ((save-expr math-rewrite-whole-expr)) (math-rewrite-phase (car sched)) - (not (equal whole-expr save-expr)))) + (not (equal math-rewrite-whole-expr save-expr)))) (if (symbolp (car sched)) (progn - (setq whole-expr (math-normalize (list (car sched) whole-expr))) + (setq math-rewrite-whole-expr + (math-normalize (list (car sched) math-rewrite-whole-expr))) (if trace-buffer (let ((fmt (math-format-stack-value - (list whole-expr nil nil)))) + (list math-rewrite-whole-expr nil nil)))) (save-excursion (set-buffer trace-buffer) (insert "\ncall " @@ -233,10 +244,10 @@ (save-excursion (set-buffer trace-buffer) (insert (format "\n(Phase %d)\n" math-rewrite-phase)))) - (while (let ((save-expr whole-expr)) - (setq whole-expr (math-normalize - (math-map-tree-rec whole-expr))) - (not (equal whole-expr save-expr))))))) + (while (let ((save-expr math-rewrite-whole-expr)) + (setq math-rewrite-whole-expr (math-normalize + (math-map-tree-rec math-rewrite-whole-expr))) + (not (equal math-rewrite-whole-expr save-expr))))))) (setq sched (cdr sched)))) (defun calcFunc-rewrite (expr rules &optional many) @@ -488,6 +499,28 @@ (defvar math-rewrite-whole nil) (defvar math-make-import-list nil) + +;; The variable math-import-list is local to part of math-compile-rewrites, +;; but is also used in a different part, and so the local version could +;; be affected by the non-local version when math-compile-rewrites calls itself. +(defvar math-import-list nil) + +;; The variables math-regs, math-num-regs, math-prog-last, math-bound-vars, +;; math-conds, math-copy-neg, math-rhs, math-pattern, math-remembering and +;; math-aliased-vars are local to math-compile-rewrites, +;; but are used by many functions math-rwcomp-*, which are called by +;; math-compile-rewrites. +(defvar math-regs) +(defvar math-num-regs) +(defvar math-prog-last) +(defvar math-bound-vars) +(defvar math-conds) +(defvar math-copy-neg) +(defvar math-rhs) +(defvar math-pattern) +(defvar math-remembering) +(defvar math-aliased-vars) + (defun math-compile-rewrites (rules &optional name) (if (eq (car-safe rules) 'var) (let ((prop (get (nth 2 rules) 'math-rewrite-cache)) @@ -731,26 +764,34 @@ (math-flatten-lands (nth 2 expr))) (list expr))) +;; The variables math-rewrite-heads-heads (i.e.; heads for math-rewrite-heads) +;; math-rewrite-heads-blanks and math-rewrite-heads-skips are local to +;; math-rewrite-heads, but used by math-rewrite-heads-rec, which is called by +;; math-rewrite-heads. +(defvar math-rewrite-heads-heads) +(defvar math-rewrite-heads-skips) +(defvar math-rewrite-heads-blanks) + (defun math-rewrite-heads (expr &optional more all) - (let ((heads more) - (skips (and (not all) + (let ((math-rewrite-heads-heads more) + (math-rewrite-heads-skips (and (not all) '(calcFunc-apply calcFunc-condition calcFunc-opt calcFunc-por calcFunc-pnot))) - (blanks (and (not all) + (math-rewrite-heads-blanks (and (not all) '(calcFunc-quote calcFunc-plain calcFunc-select calcFunc-cons calcFunc-rcons calcFunc-pand)))) (or (Math-primp expr) (math-rewrite-heads-rec expr)) - heads)) + math-rewrite-heads-heads)) (defun math-rewrite-heads-rec (expr) - (or (memq (car expr) skips) + (or (memq (car expr) math-rewrite-heads-skips) (progn - (or (memq (car expr) heads) - (memq (car expr) blanks) + (or (memq (car expr) math-rewrite-heads-heads) + (memq (car expr) math-rewrite-heads-blanks) (memq 'algebraic (get (car expr) 'math-rewrite-props)) - (setq heads (cons (car expr) heads))) + (setq math-rewrite-heads-heads (cons (car expr) math-rewrite-heads-heads))) (while (setq expr (cdr expr)) (or (Math-primp (car expr)) (math-rewrite-heads-rec (car expr))))))) @@ -793,21 +834,31 @@ (list 'neg (list 'calcFunc-register (nth 1 entry))) (list 'calcFunc-register (nth 1 entry))))) -(defun math-rwcomp-substitute (expr old new) - (if (and (eq (car-safe old) 'var) - (memq (car-safe new) '(var calcFunc-lambda))) - (let ((old-func (math-var-to-calcFunc old)) - (new-func (math-var-to-calcFunc new))) +;; The variables math-rwcomp-subst-old, math-rwcomp-subst-new, +;; math-rwcomp-subst-old-func and math-rwcomp-subst-new-func +;; are local to math-rwcomp-substitute, but are used by +;; math-rwcomp-subst-rec, which is called by math-rwcomp-substitute. +(defvar math-rwcomp-subst-new) +(defvar math-rwcomp-subst-old) +(defvar math-rwcomp-subst-new-func) +(defvar math-rwcomp-subst-old-func) + +(defun math-rwcomp-substitute (expr math-rwcomp-subst-old math-rwcomp-subst-new) + (if (and (eq (car-safe math-rwcomp-subst-old) 'var) + (memq (car-safe math-rwcomp-subst-new) '(var calcFunc-lambda))) + (let ((math-rwcomp-subst-old-func (math-var-to-calcFunc math-rwcomp-subst-old)) + (math-rwcomp-subst-new-func (math-var-to-calcFunc math-rwcomp-subst-new))) (math-rwcomp-subst-rec expr)) - (let ((old-func nil)) + (let ((math-rwcomp-subst-old-func nil)) (math-rwcomp-subst-rec expr)))) (defun math-rwcomp-subst-rec (expr) - (cond ((equal expr old) new) + (cond ((equal expr math-rwcomp-subst-old) math-rwcomp-subst-new) ((Math-primp expr) expr) - (t (if (eq (car expr) old-func) - (math-build-call new-func (mapcar 'math-rwcomp-subst-rec - (cdr expr))) + (t (if (eq (car expr) math-rwcomp-subst-old-func) + (math-build-call math-rwcomp-subst-new-func + (mapcar 'math-rwcomp-subst-rec + (cdr expr))) (cons (car expr) (mapcar 'math-rwcomp-subst-rec (cdr expr))))))) @@ -1268,22 +1319,18 @@ (defun math-rwcomp-assoc-args (expr) (if (and (eq (car-safe (nth 1 expr)) (car expr)) (= (length (nth 1 expr)) 3)) - (math-rwcomp-assoc-args (nth 1 expr)) - (setq math-args (cons (nth 1 expr) math-args))) + (math-rwcomp-assoc-args (nth 1 expr))) (if (and (eq (car-safe (nth 2 expr)) (car expr)) (= (length (nth 2 expr)) 3)) - (math-rwcomp-assoc-args (nth 2 expr)) - (setq math-args (cons (nth 2 expr) math-args)))) + (math-rwcomp-assoc-args (nth 2 expr)))) (defun math-rwcomp-addsub-args (expr) (if (memq (car-safe (nth 1 expr)) '(+ -)) - (math-rwcomp-addsub-args (nth 1 expr)) - (setq math-args (cons (nth 1 expr) math-args))) + (math-rwcomp-addsub-args (nth 1 expr))) (if (eq (car expr) '-) - (setq math-args (cons (math-rwcomp-neg (nth 2 expr)) math-args)) + () (if (eq (car-safe (nth 2 expr)) '+) - (math-rwcomp-addsub-args (nth 2 expr)) - (setq math-args (cons (nth 2 expr) math-args))))) + (math-rwcomp-addsub-args (nth 2 expr))))) (defun math-rwcomp-order (a b) (< (math-rwcomp-priority (car a)) @@ -1419,14 +1466,23 @@ form '(setcar rules orig)))) -(setq math-rewrite-phase 1) +(defvar math-rewrite-phase 1) -(defun math-apply-rewrites (expr rules &optional heads ruleset) +;; The variable math-apply-rw-regs is local to math-apply-rewrites, +;; but is used by math-rwapply-replace-regs and math-rwapply-reg-looks-negp +;; which are called by math-apply-rewrites. +(defvar math-apply-rw-regs) + +;; The variable math-apply-rw-ruleset is local to math-apply-rewrites, +;; but is used by math-rwapply-remember. +(defvar math-apply-rw-ruleset) + +(defun math-apply-rewrites (expr rules &optional heads math-apply-rw-ruleset) (and (setq rules (cdr (or (assq (car-safe expr) rules) (assq nil rules)))) (let ((result nil) - op regs inst part pc mark btrack + op math-apply-rw-regs inst part pc mark btrack (tracing math-rwcomp-tracing) (phase math-rewrite-phase)) (while rules @@ -1437,35 +1493,37 @@ (and (setq part (nth 3 (car rules))) (not (memq phase part))) (progn - (setq regs (car (car rules)) + (setq math-apply-rw-regs (car (car rules)) pc (nth 1 (car rules)) btrack nil) - (aset regs 0 expr) + (aset math-apply-rw-regs 0 expr) (while pc (and tracing (progn (terpri) (princ (car pc)) (if (and (natnump (nth 1 (car pc))) - (< (nth 1 (car pc)) (length regs))) - (princ (format "\n part = %s" - (aref regs (nth 1 (car pc)))))))) + (< (nth 1 (car pc)) (length math-apply-rw-regs))) + (princ + (format "\n part = %s" + (aref math-apply-rw-regs (nth 1 (car pc)))))))) (cond ((eq (setq op (car (setq inst (car pc)))) 'func) - (if (and (consp (setq part (aref regs (car (cdr inst))))) + (if (and (consp + (setq part (aref math-apply-rw-regs (car (cdr inst))))) (eq (car part) (car (setq inst (cdr (cdr inst))))) (progn (while (and (setq inst (cdr inst) part (cdr part)) inst) - (aset regs (car inst) (car part))) + (aset math-apply-rw-regs (car inst) (car part))) (not (or inst part)))) (setq pc (cdr pc)) (math-rwfail))) ((eq op 'same) - (if (or (equal (setq part (aref regs (nth 1 inst))) - (setq mark (aref regs (nth 2 inst)))) + (if (or (equal (setq part (aref math-apply-rw-regs (nth 1 inst))) + (setq mark (aref math-apply-rw-regs (nth 2 inst)))) (Math-equal part mark)) (setq pc (cdr pc)) (math-rwfail))) @@ -1474,22 +1532,23 @@ calc-matrix-mode (not (eq calc-matrix-mode 'scalar)) (eq (car (nth 2 inst)) '*) - (consp (setq part (aref regs (car (cdr inst))))) + (consp (setq part (aref math-apply-rw-regs (car (cdr inst))))) (eq (car part) '*) (not (math-known-scalarp part))) (setq mark (nth 3 inst) pc (cdr pc)) (if (aref mark 4) (progn - (aset regs (nth 4 inst) (nth 2 part)) + (aset math-apply-rw-regs (nth 4 inst) (nth 2 part)) (aset mark 1 (cdr (cdr part)))) - (aset regs (nth 4 inst) (nth 1 part)) + (aset math-apply-rw-regs (nth 4 inst) (nth 1 part)) (aset mark 1 (cdr part))) (aset mark 0 (cdr part)) (aset mark 2 0)) ((eq op 'try) - (if (and (consp (setq part (aref regs (car (cdr inst))))) + (if (and (consp (setq part + (aref math-apply-rw-regs (car (cdr inst))))) (memq (car part) (nth 2 inst)) (= (length part) 3) (or (not (eq (car part) '/)) @@ -1525,7 +1584,7 @@ op)) btrack (cons pc btrack) pc (cdr pc)) - (aset regs (nth 2 inst) (car op)) + (aset math-apply-rw-regs (nth 2 inst) (car op)) (aset mark 0 op) (aset mark 1 op) (aset mark 2 (if (cdr (cdr op)) 1 0))) @@ -1537,12 +1596,12 @@ (progn (setq mark (nth 3 inst) pc (cdr pc)) - (aset regs (nth 4 inst) (nth 1 part)) + (aset math-apply-rw-regs (nth 4 inst) (nth 1 part)) (aset mark 1 -1) (aset mark 2 4)) (setq mark (nth 3 inst) pc (cdr pc)) - (aset regs (nth 4 inst) part) + (aset math-apply-rw-regs (nth 4 inst) part) (aset mark 2 3)) (math-rwfail)))) @@ -1551,7 +1610,7 @@ mark (nth 3 part) op (aref mark 2) pc (cdr pc)) - (aset regs (nth 2 inst) + (aset math-apply-rw-regs (nth 2 inst) (cond ((eq op 0) (if (eq (aref mark 0) (aref mark 1)) @@ -1591,17 +1650,17 @@ ((eq op 'select) (setq pc (cdr pc)) - (if (and (consp (setq part (aref regs (nth 1 inst)))) + (if (and (consp (setq part (aref math-apply-rw-regs (nth 1 inst)))) (eq (car part) 'calcFunc-select)) - (aset regs (nth 2 inst) (nth 1 part)) + (aset math-apply-rw-regs (nth 2 inst) (nth 1 part)) (if math-rewrite-selections (math-rwfail) - (aset regs (nth 2 inst) part)))) + (aset math-apply-rw-regs (nth 2 inst) part)))) ((eq op 'same-neg) - (if (or (equal (setq part (aref regs (nth 1 inst))) + (if (or (equal (setq part (aref math-apply-rw-regs (nth 1 inst))) (setq mark (math-neg - (aref regs (nth 2 inst))))) + (aref math-apply-rw-regs (nth 2 inst))))) (Math-equal part mark)) (setq pc (cdr pc)) (math-rwfail))) @@ -1613,22 +1672,24 @@ op (aref mark 2)) (cond ((eq op 0) (if (setq op (cdr (aref mark 1))) - (aset regs (nth 4 inst) (car (aset mark 1 op))) + (aset math-apply-rw-regs (nth 4 inst) + (car (aset mark 1 op))) (if (nth 5 inst) (progn (aset mark 2 3) - (aset regs (nth 4 inst) - (aref regs (nth 1 inst)))) + (aset math-apply-rw-regs (nth 4 inst) + (aref math-apply-rw-regs (nth 1 inst)))) (math-rwfail t)))) ((eq op 1) (if (setq op (cdr (aref mark 1))) - (aset regs (nth 4 inst) (car (aset mark 1 op))) + (aset math-apply-rw-regs (nth 4 inst) + (car (aset mark 1 op))) (if (= (aref mark 3) 1) (if (nth 5 inst) (progn (aset mark 2 3) - (aset regs (nth 4 inst) - (aref regs (nth 1 inst)))) + (aset math-apply-rw-regs (nth 4 inst) + (aref math-apply-rw-regs (nth 1 inst)))) (math-rwfail t)) (aset mark 2 2) (aset mark 1 (cons nil (aref mark 0))) @@ -1666,19 +1727,20 @@ (list '- part (nth 1 (car mark))) (list op part (car mark)))))) - (aset regs (nth 4 inst) part)) + (aset math-apply-rw-regs (nth 4 inst) part)) (if (nth 5 inst) (progn (aset mark 2 3) - (aset regs (nth 4 inst) - (aref regs (nth 1 inst)))) + (aset math-apply-rw-regs (nth 4 inst) + (aref math-apply-rw-regs (nth 1 inst)))) (math-rwfail t)))) ((eq op 4) (setq btrack (cdr btrack))) (t (math-rwfail t)))) ((eq op 'integer) - (if (Math-integerp (setq part (aref regs (nth 1 inst)))) + (if (Math-integerp (setq part + (aref math-apply-rw-regs (nth 1 inst)))) (setq pc (cdr pc)) (if (Math-primp part) (math-rwfail) @@ -1688,7 +1750,7 @@ (math-rwfail))))) ((eq op 'real) - (if (Math-realp (setq part (aref regs (nth 1 inst)))) + (if (Math-realp (setq part (aref math-apply-rw-regs (nth 1 inst)))) (setq pc (cdr pc)) (if (Math-primp part) (math-rwfail) @@ -1698,7 +1760,7 @@ (math-rwfail))))) ((eq op 'constant) - (if (math-constp (setq part (aref regs (nth 1 inst)))) + (if (math-constp (setq part (aref math-apply-rw-regs (nth 1 inst)))) (setq pc (cdr pc)) (if (Math-primp part) (math-rwfail) @@ -1708,7 +1770,8 @@ (math-rwfail))))) ((eq op 'negative) - (if (math-looks-negp (setq part (aref regs (nth 1 inst)))) + (if (math-looks-negp (setq part + (aref math-apply-rw-regs (nth 1 inst)))) (setq pc (cdr pc)) (if (Math-primp part) (math-rwfail) @@ -1718,15 +1781,16 @@ (math-rwfail))))) ((eq op 'rel) - (setq part (math-compare (aref regs (nth 1 inst)) - (aref regs (nth 3 inst))) + (setq part (math-compare (aref math-apply-rw-regs (nth 1 inst)) + (aref math-apply-rw-regs (nth 3 inst))) op (nth 2 inst)) (if (= part 2) (setq part (math-rweval (math-simplify (calcFunc-sign - (math-sub (aref regs (nth 1 inst)) - (aref regs (nth 3 inst)))))))) + (math-sub + (aref math-apply-rw-regs (nth 1 inst)) + (aref math-apply-rw-regs (nth 3 inst)))))))) (if (cond ((eq op 'calcFunc-eq) (eq part 0)) ((eq op 'calcFunc-neq) @@ -1743,44 +1807,48 @@ (math-rwfail))) ((eq op 'func-def) - (if (and (consp (setq part (aref regs (car (cdr inst))))) - (eq (car part) - (car (setq inst (cdr (cdr inst)))))) + (if (and + (consp (setq part (aref math-apply-rw-regs (car (cdr inst))))) + (eq (car part) + (car (setq inst (cdr (cdr inst)))))) (progn (setq inst (cdr inst) mark (car inst)) (while (and (setq inst (cdr inst) part (cdr part)) inst) - (aset regs (car inst) (car part))) + (aset math-apply-rw-regs (car inst) (car part))) (if (or inst part) (setq pc (cdr pc)) (while (eq (car (car (setq pc (cdr pc)))) 'func-def)) (setq pc (cdr pc)) ; skip over "func" (while mark - (aset regs (cdr (car mark)) (car (car mark))) + (aset math-apply-rw-regs (cdr (car mark)) (car (car mark))) (setq mark (cdr mark))))) (math-rwfail))) ((eq op 'func-opt) - (if (or (not (and (consp - (setq part (aref regs (car (cdr inst))))) - (eq (car part) (nth 2 inst)))) + (if (or (not + (and + (consp + (setq part (aref math-apply-rw-regs (car (cdr inst))))) + (eq (car part) (nth 2 inst)))) (and (= (length part) 2) (setq part (nth 1 part)))) (progn (setq mark (nth 3 inst)) - (aset regs (nth 4 inst) part) + (aset math-apply-rw-regs (nth 4 inst) part) (while (eq (car (car (setq pc (cdr pc)))) 'func-def)) (setq pc (cdr pc)) ; skip over "func" (while mark - (aset regs (cdr (car mark)) (car (car mark))) + (aset math-apply-rw-regs (cdr (car mark)) (car (car mark))) (setq mark (cdr mark)))) (setq pc (cdr pc)))) ((eq op 'mod) - (if (if (Math-zerop (setq part (aref regs (nth 1 inst)))) + (if (if (Math-zerop + (setq part (aref math-apply-rw-regs (nth 1 inst)))) (Math-zerop (nth 3 inst)) (and (not (Math-zerop (nth 2 inst))) (progn @@ -1793,34 +1861,38 @@ (math-rwfail))) ((eq op 'apply) - (if (and (consp (setq part (aref regs (car (cdr inst))))) + (if (and (consp + (setq part (aref math-apply-rw-regs (car (cdr inst))))) (not (Math-objvecp part)) (not (eq (car part) 'var))) (progn - (aset regs (nth 2 inst) + (aset math-apply-rw-regs (nth 2 inst) (math-calcFunc-to-var (car part))) - (aset regs (nth 3 inst) + (aset math-apply-rw-regs (nth 3 inst) (cons 'vec (cdr part))) (setq pc (cdr pc))) (math-rwfail))) ((eq op 'cons) - (if (and (consp (setq part (aref regs (car (cdr inst))))) + (if (and (consp + (setq part (aref math-apply-rw-regs (car (cdr inst))))) (eq (car part) 'vec) (cdr part)) (progn - (aset regs (nth 2 inst) (nth 1 part)) - (aset regs (nth 3 inst) (cons 'vec (cdr (cdr part)))) + (aset math-apply-rw-regs (nth 2 inst) (nth 1 part)) + (aset math-apply-rw-regs (nth 3 inst) + (cons 'vec (cdr (cdr part)))) (setq pc (cdr pc))) (math-rwfail))) ((eq op 'rcons) - (if (and (consp (setq part (aref regs (car (cdr inst))))) + (if (and (consp + (setq part (aref math-apply-rw-regs (car (cdr inst))))) (eq (car part) 'vec) (cdr part)) (progn - (aset regs (nth 2 inst) (calcFunc-rhead part)) - (aset regs (nth 3 inst) (calcFunc-rtail part)) + (aset math-apply-rw-regs (nth 2 inst) (calcFunc-rhead part)) + (aset math-apply-rw-regs (nth 3 inst) (calcFunc-rtail part)) (setq pc (cdr pc))) (math-rwfail))) @@ -1833,19 +1905,20 @@ (math-rwfail))) ((eq op 'let) - (aset regs (nth 1 inst) + (aset math-apply-rw-regs (nth 1 inst) (math-rweval (math-normalize (math-rwapply-replace-regs (nth 2 inst))))) (setq pc (cdr pc))) ((eq op 'copy) - (aset regs (nth 2 inst) (aref regs (nth 1 inst))) + (aset math-apply-rw-regs (nth 2 inst) + (aref math-apply-rw-regs (nth 1 inst))) (setq pc (cdr pc))) ((eq op 'copy-neg) - (aset regs (nth 2 inst) - (math-rwapply-neg (aref regs (nth 1 inst)))) + (aset math-apply-rw-regs (nth 2 inst) + (math-rwapply-neg (aref math-apply-rw-regs (nth 1 inst)))) (setq pc (cdr pc))) ((eq op 'alt) @@ -1904,7 +1977,7 @@ (cond ((Math-primp expr) expr) ((eq (car expr) 'calcFunc-register) - (setq expr (aref regs (nth 1 expr))) + (setq expr (aref math-apply-rw-regs (nth 1 expr))) (if (eq (car-safe expr) '*) (if (eq (nth 1 expr) -1) (math-neg (nth 2 expr)) @@ -1953,7 +2026,7 @@ (math-rwapply-reg-neg (nth 1 expr))) ((and (eq (car expr) 'neg) (eq (car-safe (nth 1 expr)) 'calcFunc-register) - (math-scalarp (aref regs (nth 1 (nth 1 expr))))) + (math-scalarp (aref math-apply-rw-regs (nth 1 (nth 1 expr))))) (math-neg (math-rwapply-replace-regs (nth 1 expr)))) ((and (eq (car expr) '+) (math-rwapply-reg-looks-negp (nth 1 expr))) @@ -2001,14 +2074,14 @@ (if (Math-primp (nth 1 expr)) (nth 1 expr) (if (eq (car (nth 1 expr)) 'calcFunc-register) - (aref regs (nth 1 (nth 1 expr))) + (aref math-apply-rw-regs (nth 1 (nth 1 expr))) (cons (car (nth 1 expr)) (mapcar 'math-rwapply-replace-regs (cdr (nth 1 expr))))))) (t (cons (car expr) (mapcar 'math-rwapply-replace-regs (cdr expr)))))) (defun math-rwapply-reg-looks-negp (expr) (if (eq (car-safe expr) 'calcFunc-register) - (math-looks-negp (aref regs (nth 1 expr))) + (math-looks-negp (aref math-apply-rw-regs (nth 1 expr))) (if (memq (car-safe expr) '(* /)) (or (math-rwapply-reg-looks-negp (nth 1 expr)) (math-rwapply-reg-looks-negp (nth 2 expr)))))) @@ -2025,8 +2098,8 @@ (math-rwapply-reg-neg (nth 2 expr))))))) (defun math-rwapply-remember (old new) - (let ((varval (symbol-value (nth 2 (car ruleset)))) - (rules (assq (car-safe old) ruleset))) + (let ((varval (symbol-value (nth 2 (car math-apply-rw-ruleset)))) + (rules (assq (car-safe old) math-apply-rw-ruleset))) (if (and (eq (car-safe varval) 'vec) (not (memq (car-safe old) '(nil schedule + -))) rules)