[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master ba2e3a8: Refactoring: Reduce code duplication
From: |
Philipp Stephani |
Subject: |
[Emacs-diffs] master ba2e3a8: Refactoring: Reduce code duplication |
Date: |
Fri, 19 Apr 2019 16:34:09 -0400 (EDT) |
branch: master
commit ba2e3a8abb5657e350d7653dd7580e1ebe84c7ab
Author: Philipp Stephani <address@hidden>
Commit: Philipp Stephani <address@hidden>
Refactoring: Reduce code duplication
* src/emacs-module.c (value_storage_contains_p): New function.
(module_free_global_ref, value_to_lisp): Use it.
---
src/emacs-module.c | 58 ++++++++++++++++++++++++++----------------------------
1 file changed, 28 insertions(+), 30 deletions(-)
diff --git a/src/emacs-module.c b/src/emacs-module.c
index ad32d3a..5467704 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -209,6 +209,8 @@ static void module_non_local_exit_throw_1 (emacs_env *,
Lisp_Object, Lisp_Object);
static void module_out_of_memory (emacs_env *);
static void module_reset_handlerlist (struct handler **);
+static bool value_storage_contains_p (const struct emacs_value_storage *,
+ emacs_value, ptrdiff_t *);
static bool module_assertions = false;
@@ -403,16 +405,8 @@ module_free_global_ref (emacs_env *env, emacs_value ref)
if (module_assertions)
{
ptrdiff_t count = 0;
- for (struct emacs_value_frame *frame = &global_storage.initial;
- frame != NULL; frame = frame->next)
- {
- for (int i = 0; i < frame->offset; ++i)
- {
- if (&frame->objects[i] == ref)
- return;
- ++count;
- }
- }
+ if (value_storage_contains_p (&global_storage, ref, &count))
+ return;
module_abort ("Global value was not found in list of %"pD"d globals",
count);
}
@@ -978,29 +972,13 @@ value_to_lisp (emacs_value v)
if (&priv->non_local_exit_symbol == v
|| &priv->non_local_exit_data == v)
goto ok;
- for (struct emacs_value_frame *frame = &priv->storage.initial;
- frame != NULL; frame = frame->next)
- {
- for (int i = 0; i < frame->offset; ++i)
- {
- if (&frame->objects[i] == v)
- goto ok;
- ++num_values;
- }
- }
+ if (value_storage_contains_p (&priv->storage, v, &num_values))
+ goto ok;
++num_environments;
}
/* Also check global values. */
- for (struct emacs_value_frame *frame = &global_storage.initial;
- frame != NULL; frame = frame->next)
- {
- for (int i = 0; i < frame->offset; ++i)
- {
- if (&frame->objects[i] == v)
- goto ok;
- ++num_values;
- }
- }
+ if (value_storage_contains_p (&global_storage, v, &num_values))
+ goto ok;
module_abort (("Emacs value not found in %"pD"d values "
"of %"pD"d environments"),
num_values, num_environments);
@@ -1215,6 +1193,26 @@ init_module_assertions (bool enable)
initialize_storage (&global_storage);
}
+/* Return whether STORAGE contains VALUE. Used to check module
+ assertions. Increment *COUNT by the number of values searched. */
+
+static bool
+value_storage_contains_p (const struct emacs_value_storage *storage,
+ emacs_value value, ptrdiff_t *count)
+{
+ for (const struct emacs_value_frame *frame = &storage->initial; frame !=
NULL;
+ frame = frame->next)
+ {
+ for (int i = 0; i < frame->offset; ++i)
+ {
+ if (&frame->objects[i] == value)
+ return true;
+ ++count;
+ }
+ }
+ return false;
+}
+
static AVOID ATTRIBUTE_FORMAT_PRINTF (1, 2)
module_abort (const char *format, ...)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master ba2e3a8: Refactoring: Reduce code duplication,
Philipp Stephani <=