]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix optional parameter passing in calc-fin-* functions
authorRaimon Grau <raimonster@gmail.com>
Sat, 19 Oct 2019 09:46:17 +0000 (11:46 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 19 Oct 2019 09:46:17 +0000 (11:46 +0200)
* lisp/calc/calc-fin.el (calc-fin-pv, calc-fin-fv, calc-fin-pmt)
(calc-fin-pner, calc-fin-rate): Add support for an optional
parameter standing for an initial lump. The functions already
support it but the extra parameter was not taken into account in
stack mode. This commit it takes into consideration when deciding
if a function takes 3 or 4 parameters (bug#37649).

lisp/calc/calc-fin.el

index 813da2869e11e26459756263dd8083a1fdc93607..4302cbcf5aadceea6561c88414333b768e302a1c 100644 (file)
   (calc-slow-wrapper
    (if (calc-is-hyperbolic)
        (calc-enter-result 3 "pvl" (cons 'calcFunc-pvl (calc-top-list-n 3)))
-     (if (calc-is-inverse)
-        (calc-enter-result 3 "pvb" (cons 'calcFunc-pvb (calc-top-list-n 3)))
-       (calc-enter-result 3 "pv" (cons 'calcFunc-pv (calc-top-list-n 3)))))))
+     (let ((n (if (calc-is-option) 4 3)))
+      (if (calc-is-inverse)
+         (calc-enter-result n "pvb" (cons 'calcFunc-pvb (calc-top-list-n n)))
+        (calc-enter-result n "pv" (cons 'calcFunc-pv (calc-top-list-n n))))))))
 
 (defun calc-fin-npv (arg)
   (interactive "p")
   (calc-slow-wrapper
    (if (calc-is-hyperbolic)
        (calc-enter-result 3 "fvl" (cons 'calcFunc-fvl (calc-top-list-n 3)))
-     (if (calc-is-inverse)
-        (calc-enter-result 3 "fvb" (cons 'calcFunc-fvb (calc-top-list-n 3)))
-       (calc-enter-result 3 "fv" (cons 'calcFunc-fv (calc-top-list-n 3)))))))
+     (let ((n (if (calc-is-option) 4 3)))
+       (if (calc-is-inverse)
+          (calc-enter-result n "fvb" (cons 'calcFunc-fvb (calc-top-list-n n)))
+         (calc-enter-result n "fv" (cons 'calcFunc-fv (calc-top-list-n n))))))))
 
 (defun calc-fin-pmt ()
   (interactive)
   (calc-slow-wrapper
    (if (calc-is-hyperbolic)
        (calc-enter-result 3 "fvl" (cons 'calcFunc-fvl (calc-top-list-n 3)))
-     (if (calc-is-inverse)
-        (calc-enter-result 3 "pmtb" (cons 'calcFunc-pmtb (calc-top-list-n 3)))
-       (calc-enter-result 3 "pmt" (cons 'calcFunc-pmt (calc-top-list-n 3)))))))
+     (let ((n (if (calc-is-option) 4 3)))
+       (if (calc-is-inverse)
+               (calc-enter-result n "pmtb" (cons 'calcFunc-pmtb (calc-top-list-n n)))
+        (calc-enter-result n "pmt" (cons 'calcFunc-pmt (calc-top-list-n n))))))))
 
 (defun calc-fin-nper ()
   (interactive)
   (calc-slow-wrapper
    (if (calc-is-hyperbolic)
        (calc-enter-result 3 "nprl" (cons 'calcFunc-nperl (calc-top-list-n 3)))
-     (if (calc-is-inverse)
-        (calc-enter-result 3 "nprb" (cons 'calcFunc-nperb
-                                          (calc-top-list-n 3)))
-       (calc-enter-result 3 "nper" (cons 'calcFunc-nper
-                                        (calc-top-list-n 3)))))))
+     (let ((n (if (calc-is-option) 4 3)))
+       (if (calc-is-inverse)
+          (calc-enter-result n "nprb" (cons 'calcFunc-nperb
+                                            (calc-top-list-n n)))
+         (calc-enter-result n "nper" (cons 'calcFunc-nper
+                                          (calc-top-list-n n))))))))
 
 (defun calc-fin-rate ()
   (interactive)
   (calc-slow-wrapper
-   (calc-pop-push-record 3
-                        (if (calc-is-hyperbolic) "ratl"
-                          (if (calc-is-inverse) "ratb" "rate"))
-                        (calc-to-percentage
-                         (calc-normalize
-                          (cons (if (calc-is-hyperbolic) 'calcFunc-ratel
-                                  (if (calc-is-hyperbolic) 'calcFunc-rateb
-                                    'calcFunc-rate))
-                                (calc-top-list-n 3)))))))
+   (let ((n (if (and (not (calc-is-hyperbolic))
+                     (calc-is-option))
+                4 3)))
+     (calc-pop-push-record n
+      (if (calc-is-hyperbolic) "ratl"
+       (if (calc-is-inverse) "ratb" "rate"))
+      (calc-to-percentage
+       (calc-normalize
+       (cons (if (calc-is-hyperbolic) 'calcFunc-ratel
+               (if (calc-is-hyperbolic) 'calcFunc-rateb
+                 'calcFunc-rate))
+             (calc-top-list-n n))))))))
 
 (defun calc-fin-irr (arg)
   (interactive "P")