changeset 110:dae58f4aa15e

value: Destroy expressions when setting (overwriting) them; implement yvalue_free_all()
author Lewin Bormann <lbo@spheniscida.de>
date Thu, 29 Aug 2019 22:24:59 +0200
parents 7217a4cb2b97
children 20559e59878f
files src/value.c src/value.h
diffstat 2 files changed, 13 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/value.c	Thu Aug 29 22:24:31 2019 +0200
+++ b/src/value.c	Thu Aug 29 22:24:59 2019 +0200
@@ -214,6 +214,7 @@
         assert(yvalue_is_valid(id));
         yvalue_t* valp = yvalue_get(yref_new_id(id));
         assert(valp != NULL);
+        if (valp->typ == YVALUE_EXPR) yexpr_destroy(&valp->value.expr);
         *valp = *val;
         return ref;
     }
@@ -240,3 +241,10 @@
         return NULL;
     }
 }
+
+void yvalue_free_all(void) {
+    for (yvalue_id_t i = 0; i < yvalue_counter - YVALUE_COUNTER_OFFSET; i++) {
+        yexpr_destroy(YVEC_AT(&yvalue_table, i, yexpr_t));
+    }
+}
+
--- a/src/value.h	Thu Aug 29 22:24:31 2019 +0200
+++ b/src/value.h	Thu Aug 29 22:24:59 2019 +0200
@@ -158,6 +158,11 @@
 yvalue_t* yvalue_get(yref_t ref);
 
 /**
+ * @brief Free all stored values.
+ */
+void yvalue_free_all(void);
+
+/**
  * @}
  */