aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2019-06-26 18:02:26 +0300
committerEli Zaretskii2019-06-26 18:02:26 +0300
commit7648c125dfdd0232362c35c2898bbe355c874dc1 (patch)
tree34983c70e7bf506cec52fbc35fb1a46af432096d
parente62ad04963982ea9cc7622b32484778845bc2ec1 (diff)
downloademacs-7648c125dfdd0232362c35c2898bbe355c874dc1.tar.gz
emacs-7648c125dfdd0232362c35c2898bbe355c874dc1.zip
Clarify a subtle issue in the Internals chapter of lispref
* doc/lispref/internals.texi (Writing Emacs Primitives): Clarify the issue with relocation of buffer or string text as side effect of Lisp evaluation. (Bug#36392)
-rw-r--r--doc/lispref/internals.texi12
1 files changed, 8 insertions, 4 deletions
diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index 62a102e3845..7cbd2966839 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -825,10 +825,14 @@ the type explicitly using a suitable predicate (@pxref{Type Predicates}).
825@code{args} refers to objects controlled by Emacs's stack-marking 825@code{args} refers to objects controlled by Emacs's stack-marking
826garbage collector. Although the garbage collector does not reclaim 826garbage collector. Although the garbage collector does not reclaim
827objects reachable from C @code{Lisp_Object} stack variables, it may 827objects reachable from C @code{Lisp_Object} stack variables, it may
828move non-object components of an object, such as string contents; so 828move some of the components of an object, such as the contents of a
829functions that access non-object components must take care to refetch 829string or the text of a buffer. Therefore, functions that access
830their addresses after performing Lisp evaluation. Lisp evaluation can 830these components must take care to refetch their addresses after
831occur via calls to @code{eval_sub} or @code{Feval}, either directly or 831performing Lisp evaluation. This means that instead of keeping C
832pointers to string contents or buffer text, the code should keep the
833buffer or string position, and recompute the C pointer from the
834position after performing Lisp evaluation. Lisp evaluation can occur
835via calls to @code{eval_sub} or @code{Feval}, either directly or
832indirectly. 836indirectly.
833 837
834@cindex @code{maybe_quit}, use in Lisp primitives 838@cindex @code{maybe_quit}, use in Lisp primitives