gnucash stable: [balance-forecast] optimise some loops

Christopher Lam clam at code.gnucash.org
Thu May 8 10:42:07 EDT 2025


Updated	 via  https://github.com/Gnucash/gnucash/commit/811ebf55 (commit)
	from  https://github.com/Gnucash/gnucash/commit/8bd2d10c (commit)



commit 811ebf5505fc3e354053c78699351feea7a507f7
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Mon May 5 19:03:22 2025 +0800

    [balance-forecast] optimise some loops
    
    fewer temporary lists and gc

diff --git a/gnucash/report/reports/standard/balance-forecast.scm b/gnucash/report/reports/standard/balance-forecast.scm
index f883033204..52ffeb2047 100644
--- a/gnucash/report/reports/standard/balance-forecast.scm
+++ b/gnucash/report/reports/standard/balance-forecast.scm
@@ -181,7 +181,7 @@ date point, a projected minimum balance including scheduled transactions."))
        (gnc:html-make-no-account-warning
         report-title (gnc:report-id report-obj))))
 
-     ((every zero? (map gnc:gnc-monetary-amount (apply append accounts-balancelist)))
+     ((every (lambda (lst) (every (compose zero? gnc:gnc-monetary-amount) lst)) accounts-balancelist)
       (gnc:html-document-add-object!
        document
        (gnc:html-make-empty-data-warning
@@ -191,10 +191,13 @@ date point, a projected minimum balance including scheduled transactions."))
       ;; initialize the SX balance accumulator with the instantiated SX
       ;; amounts starting from the earliest split date in the list of
       ;; accounts up to the report start date.
-      (let* ((accounts-dates (map (compose xaccTransGetDate xaccSplitGetParent car)
-                                  (filter pair?
-                                          (map xaccAccountGetSplits accounts))))
-             (earliest (and (pair? accounts-dates) (apply min accounts-dates)))
+      (let* ((earliest
+              (fold
+               (lambda (a b)
+                 (if (zero? (xaccAccountGetSplitsSize a)) b
+                     (let ((date (xaccTransGetDate (xaccSplitGetParent (car (xaccAccountGetSplits a))))))
+                       (if b (min date b) date))))
+               #f accounts))
              (sx-hash (if earliest
                           (gnc-sx-all-instantiate-cashflow-all earliest from-date)
                           (make-hash-table))))



Summary of changes:
 gnucash/report/reports/standard/balance-forecast.scm | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)



More information about the gnucash-changes mailing list