From e9916d8880561cc06b6cb73bafe7257b93ffbf4c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 20 Dec 2015 17:43:42 -0800 Subject: [PATCH] Revert some recent emacs-module commentary Most of the recently-added commentary was incorrect, due to the possibility of stack overflow. --- src/emacs-module.c | 11 ++++------- src/lisp.h | 13 +------------ 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/src/emacs-module.c b/src/emacs-module.c index 5d1b4dc8d6a..dca834973bd 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -86,7 +86,7 @@ struct emacs_env_private struct emacs_runtime_private { /* FIXME: Ideally, we would just define "struct emacs_runtime_private" - * as a synonym of "emacs_env", but I don't know how to do that in C. */ + as a synonym of "emacs_env", but I don't know how to do that in C. */ emacs_env pub; }; @@ -325,8 +325,7 @@ module_non_local_exit_get (emacs_env *env, emacs_value *sym, emacs_value *data) struct emacs_env_private *p = env->private_members; if (p->pending_non_local_exit != emacs_funcall_exit_return) { - /* FIXME: We cannot call lisp_to_value here because that can - exit non-locally. */ + /* FIXME: lisp_to_value can exit non-locally. */ *sym = lisp_to_value (p->non_local_exit_symbol); *data = lisp_to_value (p->non_local_exit_data); } @@ -436,7 +435,6 @@ module_is_not_nil (emacs_env *env, emacs_value value) check_main_thread (); if (module_non_local_exit_check (env) != emacs_funcall_exit_return) return false; - /* Assume that NILP never exits non-locally. */ return ! NILP (value_to_lisp (value)); } @@ -446,7 +444,6 @@ module_eq (emacs_env *env, emacs_value a, emacs_value b) check_main_thread (); if (module_non_local_exit_check (env) != emacs_funcall_exit_return) return false; - /* Assume that EQ never exits non-locally. */ return EQ (value_to_lisp (a), value_to_lisp (b)); } @@ -893,7 +890,7 @@ value_to_lisp_bits (emacs_value v) } /* If V was computed from lisp_to_value (O), then return O. - Must never fail or exit non-locally. */ + Exits non-locally only if the stack overflows. */ static Lisp_Object value_to_lisp (emacs_value v) { @@ -923,7 +920,7 @@ enum { HAVE_STRUCT_ATTRIBUTE_ALIGNED = 0 }; #endif /* Convert O to an emacs_value. Allocate storage if needed; this can - signal if memory is exhausted. Must be injective. */ + signal if memory is exhausted. Must be an injective function. */ static emacs_value lisp_to_value (Lisp_Object o) { diff --git a/src/lisp.h b/src/lisp.h index bcac4b694b7..995760a5019 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -329,15 +329,11 @@ error !; #define lisp_h_CHECK_TYPE(ok, predicate, x) \ ((ok) ? (void) 0 : (void) wrong_type_argument (predicate, x)) #define lisp_h_CONSP(x) (XTYPE (x) == Lisp_Cons) -/* lisp_h_EQ must never exit non-locally; emacs-module.c relies on - that. */ #define lisp_h_EQ(x, y) (XLI (x) == XLI (y)) #define lisp_h_FLOATP(x) (XTYPE (x) == Lisp_Float) #define lisp_h_INTEGERP(x) ((XTYPE (x) & (Lisp_Int0 | ~Lisp_Int1)) == Lisp_Int0) #define lisp_h_MARKERP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Marker) #define lisp_h_MISCP(x) (XTYPE (x) == Lisp_Misc) -/* lisp_h_NILP must never exit non-locally; emacs-module.c relies on - that. */ #define lisp_h_NILP(x) EQ (x, Qnil) #define lisp_h_SET_SYMBOL_VAL(sym, v) \ (eassert ((sym)->redirect == SYMBOL_PLAINVAL), (sym)->val.value = (v)) @@ -386,14 +382,11 @@ error !; # define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x) # define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK_TYPE (ok, predicate, x) # define CONSP(x) lisp_h_CONSP (x) -/* EQ must never exit non-locally; emacs-module.c relies on that. */ # define EQ(x, y) lisp_h_EQ (x, y) # define FLOATP(x) lisp_h_FLOATP (x) # define INTEGERP(x) lisp_h_INTEGERP (x) # define MARKERP(x) lisp_h_MARKERP (x) # define MISCP(x) lisp_h_MISCP (x) -/* NILP must never exit non-locally; emacs-module.c relies on - that. */ # define NILP(x) lisp_h_NILP (x) # define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_VAL (sym, v) # define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONSTANT_P (sym) @@ -995,8 +988,7 @@ make_natnum (EMACS_INT n) return USE_LSB_TAG ? make_number (n) : XIL (n + (int0 << VALBITS)); } -/* Return true if X and Y are the same object. Must never exit - non-locally; emacs-module.c relies on that. */ +/* Return true if X and Y are the same object. */ INLINE bool (EQ) (Lisp_Object x, Lisp_Object y) @@ -2573,9 +2565,6 @@ enum char_bits /* Data type checking. */ -/* Checks whether X is null. Must never exit non-locally; - emacs-module.c relies on that. */ - INLINE bool (NILP) (Lisp_Object x) { -- 2.39.2