aboutsummaryrefslogtreecommitdiffstats
path: root/lispref/internals.texi
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>1995-01-20 00:57:39 +0000
committerRichard M. Stallman <[email protected]>1995-01-20 00:57:39 +0000
commite610024ba61b19204d7ffea6da1e571c225f3115 (patch)
treed5b851b03bb7a0a07954a3a9c56c28c41cb5f2bc /lispref/internals.texi
parent4bb8c8b7921a2aaa46359e136fa6058b1ff3bad9 (diff)
entered into RCS
Diffstat (limited to 'lispref/internals.texi')
-rw-r--r--lispref/internals.texi23
1 files changed, 12 insertions, 11 deletions
diff --git a/lispref/internals.texi b/lispref/internals.texi
index df9672b05b..cc3550e483 100644
--- a/lispref/internals.texi
+++ b/lispref/internals.texi
@@ -503,17 +503,18 @@ must declare these explicitly, with type @code{struct gcpro}. Thus, if
you use @code{GCPRO2}, you must declare @code{gcpro1} and @code{gcpro2}.
Alas, we can't explain all the tricky details here.
- Remember that you must never initialise external variables (whether
-static or not). If you do that, the linker will put the variable into
-the initialised data area of the process, which on many architectures
-becomes read-only when emacs is dumped (@pxref {Pure Storage}).
-
- Remember also that the keyword @code{static} is defined as nothing on
-many architectures whose linkers would put every static variable in the
-initialised data area, which becomes read-only after dumping. This
-means that you must never use static local variables, because on those
-architectures they would lose the @code{static} specifier and become
-automatic. Use static external variables instead.
+ You must not use C initializers for static or global variables unless
+they are never written once Emacs is dumped. These variables with
+initializers are allocated in an area of memory that becomes read-only
+(on certain operating systems) as a result of dumping Emacs. @xref{Pure
+Storage}.
+
+ Do not use static variables within functions---place all static
+variables at top level in the file. This is necessary because Emacs on
+some operating systems defines the keyword @code{static} as a null
+macro. (This definition is used because those systems put all variables
+declared static in a place that becomes read-only after dumping, whether
+they have initializers or not.)
Defining the C function is not enough to make a Lisp primitive
available; you must also create the Lisp symbol for the primitive and