From 6d77c3c306eb87ac0ca6852363d39547c57f0807 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sat, 9 Apr 2022 07:18:24 +0800 Subject: [PATCH] partial changes --- bindings/guile/gnc-kvp-guile.cpp | 22 ++++++++++++---------- bindings/guile/test/test-scm-apputils.scm | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/bindings/guile/gnc-kvp-guile.cpp b/bindings/guile/gnc-kvp-guile.cpp index 34b6e7cd144..6062305b0ce 100644 --- a/bindings/guile/gnc-kvp-guile.cpp +++ b/bindings/guile/gnc-kvp-guile.cpp @@ -24,13 +24,15 @@ extern "C" static bool scm_is_list_of_string_pairs (SCM val) { - restart: - if (scm_is_null (val)) return true; - if (!scm_is_pair (val)) return false; - if (!scm_is_pair (scm_car (val))) return false; - if (!scm_is_string (scm_caar (val))) return false; - val = scm_cdr (val); - goto restart; // poor man's tailcall optimization + if (scm_is_null (val)) + return false; // A null value on the original val is not a list of pairs + for (; !scm_is_null (val); val = scm_cdr (val)) + { + if (!(scm_is_pair (val) && scm_is_pair (scm_car (val)) && + scm_is_string (scm_caar (val)))) + return false; + } + return true; } KvpValue * @@ -74,7 +76,7 @@ gnc_scm_to_kvp_value_ptr(SCM val) else if (scm_is_list_of_string_pairs (val)) { auto frame = new KvpFrame; - for (SCM n = val; !scm_is_null (val); val = scm_cdr (val)) + for (; !scm_is_null (val); val = scm_cdr (val)) { auto key_str = scm_to_utf8_stringn (scm_caar (val), nullptr); auto val_scm = scm_cdar (val); @@ -89,9 +91,9 @@ gnc_scm_to_kvp_value_ptr(SCM val) else if (scm_is_list (val)) { GList *kvplist = nullptr; - for (SCM node = val; !scm_is_null (node); node = scm_cdr (node)) + for (; !scm_is_null (val); node = scm_cdr (val)) { - auto elt = gnc_scm_to_kvp_value_ptr (scm_car (node)); + auto elt = gnc_scm_to_kvp_value_ptr (scm_car (val)); kvplist = g_list_prepend (kvplist, elt); } return new KvpValue (g_list_reverse (kvplist)); diff --git a/bindings/guile/test/test-scm-apputils.scm b/bindings/guile/test/test-scm-apputils.scm index 3ea221385df..dd321600cd1 100644 --- a/bindings/guile/test/test-scm-apputils.scm +++ b/bindings/guile/test/test-scm-apputils.scm @@ -43,7 +43,7 @@ '(("lvl2" ("lvl3" . "baf"))) (qof-book-get-option book '("top" "lvl1c"))) - ;; this tests the reading & writing of hash-table, copying branch + ;; this tests the reading & writing of KvpFrame, copying branch ;; from top/lvl1c to top/lvl1d (qof-book-set-option book (qof-book-get-option book '("top" "lvl1c"))