|
|
1.1 root 1: /* Fundamental definitions for GNU Emacs Lisp interpreter.
2: Copyright (C) 1985 Richard M. Stallman.
3:
4: This file is part of GNU Emacs.
5:
6: GNU Emacs is distributed in the hope that it will be useful,
7: but WITHOUT ANY WARRANTY. No author or distributor
8: accepts responsibility to anyone for the consequences of using it
9: or for whether it serves any particular purpose or works at all,
10: unless he says so in writing. Refer to the GNU Emacs General Public
11: License for full details.
12:
13: Everyone is granted permission to copy, modify and redistribute
14: GNU Emacs, but only under the conditions described in the
15: GNU Emacs General Public License. A copy of this license is
16: supposed to have been given to you along with GNU Emacs so you
17: can know your rights and responsibilities. It should be in a
18: file named COPYING. Among other things, the copyright notice
19: and this notice must be preserved on all copies. */
20:
21:
22: /* Define the fundamental Lisp data structures */
23:
24: /* This is the set of Lisp data types */
25:
26: enum Lisp_Type
27: {
28: /* Integer. object.v.integer is the integer value. */
29: Lisp_Int,
30:
31: /* Symbol. object.v.symbol points to a struct Lisp_Symbol. */
32: Lisp_Symbol,
33:
34: /* Marker (editor pointer). object.v.marker points to a struct Lisp_Marker. */
35: Lisp_Marker,
36:
37: /* String. object.v.string points to a struct Lisp_String.
38: The length of the string, and its contents, are stored therein. */
39: Lisp_String,
40:
41: /* Vector of Lisp objects. object.v.vector points to a struct Lisp_Vector.
42: The length of the vector, and its contents, are stored therein. */
43: Lisp_Vector,
44:
45: /* Cons. object.v.cons points to a struct Lisp_Cons. */
46: Lisp_Cons,
47:
48: /* Treated like vector in GC, except do not set its mark bit.
49: Used for internal data blocks that will be explicitly freed
50: but which, while active, are reached by GC mark exactly once
51: and should be marked through like a vector. */
52: Lisp_Temp_Vector,
53:
54: /* Editor buffer. obj.v.buffer points to a struct buffer.
55: No buffer is ever truly freed; they can be "killed", but this
56: just marks them as dead. */
57: Lisp_Buffer,
58:
59: /* Built-in function. obj.v.subr points to a struct Lisp_Subr
60: which describes how to call the function, and its documentation,
61: as well as pointing to the code. */
62: Lisp_Subr,
63:
64: /* Internal value return by subroutines of read.
65: The user never sees this data type.
66: Its value is just a number. */
67: Lisp_Internal,
68:
69: /* Forwarding pointer to an int variable.
70: This is allowed only in the value cell of a symbol,
71: and it means that the symbol's value really lives in the
72: specified int variable.
73: obj.v.intptr points to the int variable. */
74: Lisp_Intfwd,
75:
76: /* Boolean forwarding pointer to an int variable.
77: This is like Lisp_Intfwd except that the ostensible "value" of the symbol
78: is t if the int variable is nonzero, nil if it is zero.
79: obj.v.intptr points to the int variable. */
80: Lisp_Boolfwd,
81:
82: /* Object describing a connection to a subprocess.
83: It points to storage of type struct Lisp_Process */
84: Lisp_Process,
85:
86: /* Forwarding pointer to a Lisp_Object variable.
87: This is allowed only in the value cell of a symbol,
88: and it means that the symbol's value really lives in the
89: specified variable.
90: obj.v.objfwd points to the Lisp_Object variable. */
91: Lisp_Objfwd,
92:
93: /* Used when the core address of a function needs to be passed
94: in an argument of type Lisp_Object.
95: obj.v.function is the pointer-to-function.
96: The user will never see this data type. */
97: Lisp_Internal_Function,
98:
99: /* Used when a FILE * value needs to be passed
100: in an argument of type Lisp_Object.
101: You must do (FILE *) obj.v.integer to get the value.
102: The user will never see this data type. */
103: Lisp_Internal_Stream,
104:
105: /* Used in a symbol value cell when the symbol's value is per-buffer.
106: The actual contents are a cons cell which starts a list like this:
107: (REALVALUE BUFFER CURRENT-ALIST-ELEMENT . DEFAULT-VALUE)).
108:
109: BUFFER is the last buffer for which this symbol's value was
110: made up to date.
111:
112: CURRENT-ALIST-ELEMENT is a pointer to an element of BUFFER's
113: b_local_var_alist, that being the element whose car is this variable.
114: Or it can be a pointer to the (CURRENT-ALIST-ELEMENT . DEFAULT-VALUE), if BUFFER
115: does not have an element in its alist for this variable
116: (that is, if BUFFER sees the default value of this variable).
117:
118: If we want to examine or set the value and BUFFER is current,
119: we just examine or set REALVALUE.
120: If BUFFER is not current, we store the current REALVALUE value into
121: CURRENT-ALIST-ELEMENT, then find the appropriate alist element for
122: the buffer now current and set up CURRENT-ALIST-ELEMENT.
123: Then we set REALVALUE out of that element, and store into BUFFER.
124:
125: If we are setting the variable and the current buffer does not have
126: an alist entry for this variable, an alist entry is created.
127:
128: Note that REALVALUE can be a forwarding pointer.
129: Each time it is examined or set, forwarding must be done. */
130: Lisp_Buffer_Local_Value,
131:
132: /* Like Lisp_Buffer_Local_Value with one difference:
133: merely setting the variable while some buffer is current
134: does not cause that buffer to have its own local value of this variable.
135: Only make-local-variable does that. */
136: Lisp_Some_Buffer_Local_Value,
137:
138:
139: /* Like Lisp_Objfwd except that value lives in a slot
140: in the current buffer. Value is byte index of slot within buffer */
141: Lisp_Buffer_Objfwd,
142:
143: /* In symbol value cell, means var is unbound.
144: In symbol function cell, means function name is undefined. */
145: Lisp_Void,
146:
147: /* Window used for Emacs display.
148: Data inside looks like a Lisp_Vector. */
149: Lisp_Window
150: };
151:
152: #ifndef NO_UNION_TYPE
153:
154: #ifndef BIG_ENDIAN
155:
156: /* Definition of Lisp_Object for little-endian machines. */
157:
158: typedef
159: union Lisp_Object
160: {
161: /* Used for comparing two Lisp_Objects;
162: also, positive integers can be accessed fast this way. */
163: int i;
164:
165: struct
166: {
167: int val: 24;
168: char type;
169: } s;
170: struct
171: {
172: unsigned int val: 24;
173: char type;
174: } u;
175: struct
176: {
177: unsigned int val: 24;
178: enum Lisp_Type type: 7;
179: /* The markbit is not really part of the value of a Lisp_Object,
180: and is always zero except during garbage collection. */
181: unsigned int markbit: 1;
182: } gu;
183: }
184: Lisp_Object;
185:
186: #else /* If BIG_ENDIAN */
187:
188: typedef
189: union Lisp_Object
190: {
191: /* Used for comparing two Lisp_Objects;
192: also, positive integers can be accessed fast this way. */
193: int i;
194:
195: struct
196: {
197: char type;
198: int val: 24;
199: } s;
200: struct
201: {
202: char type;
203: unsigned int val: 24;
204: } u;
205: struct
206: {
207: /* The markbit is not really part of the value of a Lisp_Object,
208: and is always zero except during garbage collection. */
209: unsigned int markbit: 1;
210: enum Lisp_Type type: 7;
211: unsigned int val: 24;
212: } gu;
213: }
214: Lisp_Object;
215:
216: #endif BIG_ENDIAN
217:
218: #endif NO_UNION_TYPE
219:
220:
221: /* If union type is not wanted, define Lisp_Object as just a number
222: and define the macros below to extract fields by shifting */
223:
224: #ifdef NO_UNION_TYPE
225:
226: #define Lisp_Object int
227:
228: /* These values are overridden by the m- file on some machines. */
229: #ifndef VALBITS
230: #define VALBITS 24
231: #endif
232:
233: #ifndef GCTYPEBITS
234: #define GCTYPEBITS 7
235: #endif
236:
237: #define VALMASK ((1<<VALBITS) - 1)
238: #define GCTYPEMASK ((1<<GCTYPEBITS) - 1)
239: #define MARKBIT (1 << (VALBITS + GCTYPEBITS))
240:
241: #endif NO_UNION_TYPE
242:
243: /* These macros extract various sorts of values from a Lisp_Object.
244: For example, if tem is a Lisp_Object whose type is Lisp_Cons,
245: XCONS (tem) is the struct Lisp_Cons * pointing to the memory for that cons. */
246:
247: #ifdef NO_UNION_TYPE
248:
249: #define XTYPE(a) ((enum Lisp_Type) ((a) >> VALBITS))
250: #define XSETTYPE(a, b) ((a) = ((a) & VALMASK) + ((int)(b) << VALBITS))
251:
252: /* Use XFASTINT for fast retrieval and storage of integers known
253: to be positive. This takes advantage of the fact that Lisp_Int is 0. */
254: #define XFASTINT(a) (a)
255:
256: #define XINT(a) (((a) << INTBITS-VALBITS) >> INTBITS-VALBITS)
257: #define XUINT(a) ((a) & VALMASK)
258:
259: #define XSETINT(a, b) ((a) = ((a) & ~VALMASK) + ((b) & VALMASK))
260: #define XSETUINT(a, b) ((a) = ((a) & ~VALMASK) + ((b) & VALMASK))
261:
262: #define XSET(var, type, ptr) \
263: ((var) = ((int)(type) << VALBITS) + ((int) (ptr) & VALMASK))
264:
265: /* During garbage collection, XGCTYPE must be used for extracting types
266: so that the mark bit is ignored. XMARKBIT access the markbit.
267: Markbits are used only in particular slots of particular structure types.
268: Other markbits are always zero.
269: Outside of garbage collection, all mark bits are always zero. */
270:
271: #define XGCTYPE(a) ((enum Lisp_Type) (((a) >> VALBITS) & GCTYPEMASK))
272: #define XMARKBIT(a) ((a) & MARKBIT)
273: #define XSETMARKBIT(a,b) ((a) = ((a) & ~MARKBIT) + (b))
274: #define XMARK(a) ((a) |= MARKBIT)
275: #define XUNMARK(a) ((a) &= ~MARKBIT)
276:
277: #endif
278:
279: #ifndef NO_UNION_TYPE
280:
281: #define XTYPE(a) ((enum Lisp_Type) (a).u.type)
282: #define XSETTYPE(a, b) ((a).u.type = (char) (b))
283:
284: /* Use XFASTINT for fast retrieval and storage of integers known
285: to be positive. This takes advantage of the fact that Lisp_Int is 0. */
286: #define XFASTINT(a) ((a).i)
287:
288: #ifdef EXPLICIT_SIGN_EXTEND
289: /* Make sure we sign-extend; compilers have been known to fail to do so. */
290: #define XINT(a) (((a).i << 8) >> 8)
291: #else
292: #define XINT(a) ((a).s.val)
293: #endif
294:
295: #define XUINT(a) ((a).u.val)
296: #define XSETINT(a, b) ((a).s.val = (int) (b))
297: #define XSETUINT(a, b) ((a).s.val = (int) (b))
298:
299: #define XSET(var, vartype, ptr) \
300: (((var).s.type = ((char) (vartype))), ((var).s.val = ((int) (ptr))))
301:
302: /* During garbage collection, XGCTYPE must be used for extracting types
303: so that the mark bit is ignored. XMARKBIT access the markbit.
304: Markbits are used only in particular slots of particular structure types.
305: Other markbits are always zero.
306: Outside of garbage collection, all mark bits are always zero. */
307:
308: #define XGCTYPE(a) ((a).gu.type)
309: #define XMARKBIT(a) ((a).gu.markbit)
310: #define XSETMARKBIT(a,b) (XMARKBIT(a) = (b))
311: #define XMARK(a) (XMARKBIT(a) = 1)
312: #define XUNMARK(a) (XMARKBIT(a) = 0)
313:
314: #endif NO_UNION_TYPE
315:
316:
317: #define XCONS(a) ((struct Lisp_Cons *) XUINT(a))
318: #define XBUFFER(a) ((struct buffer *) XUINT(a))
319: #define XVECTOR(a) ((struct Lisp_Vector *) XUINT(a))
320: #define XSUBR(a) ((struct Lisp_Subr *) XUINT(a))
321: #define XSTRING(a) ((struct Lisp_String *) XUINT(a))
322: #define XSYMBOL(a) ((struct Lisp_Symbol *) XUINT(a))
323: #define XFUNCTION(a) ((Lisp_Object (*)()) XUINT(a))
324: #define XMARKER(a) ((struct Lisp_Marker *) XUINT(a))
325: #define XOBJFWD(a) ((Lisp_Object *) XUINT(a))
326: #define XINTPTR(a) ((int *) XUINT(a))
327: #define XWINDOW(a) ((struct window *) XUINT(a))
328: #define XPROCESS(a) ((struct Lisp_Process *) XUINT(a))
329:
330: #define XSETCONS(a, b) XSETUINT(a, (int) (b))
331: #define XSETBUFFER(a, b) XSETUINT(a, (int) (b))
332: #define XSETVECTOR(a, b) XSETUINT(a, (int) (b))
333: #define XSETSUBR(a, b) XSETUINT(a, (int) (b))
334: #define XSETSTRING(a, b) XSETUINT(a, (int) (b))
335: #define XSETSYMBOL(a, b) XSETUINT(a, (int) (b))
336: #define XSETFUNCTION(a, b) XSETUINT(a, (int) (b))
337: #define XSETMARKER(a, b) XSETUINT(a, (int) (b))
338: #define XSETOBJFWD(a, b) XSETUINT(a, (int) (b))
339: #define XSETINTPTR(a, b) XSETUINT(a, (int) (b))
340: #define XSETWINDOW(a, b) XSETUINT(a, (int) (b))
341: #define XSETPROCESS(a, b) XSETUINT(a, (int) (b))
342:
343: /* In a cons, the markbit of the car is the gc mark bit */
344:
345: struct Lisp_Cons
346: {
347: Lisp_Object car, cdr;
348: };
349:
350: /* Like a cons, but records info on where the text lives that it was read from */
351: /* This is not really in use now */
352:
353: struct Lisp_Buffer_Cons
354: {
355: Lisp_Object car, cdr;
356: struct buffer *buffer;
357: int bufpos;
358: };
359:
360: /* In a string or vector, the sign bit of the `size' is the gc mark bit */
361:
362: struct Lisp_String
363: {
364: int size;
365: unsigned char data[1];
366: };
367:
368: struct Lisp_Vector
369: {
370: int size;
371: struct Lisp_Vector *next;
372: Lisp_Object contents[1];
373: };
374:
375: /* In a symbol, the markbit of the plist is used as the gc mark bit */
376:
377: struct Lisp_Symbol
378: {
379: struct Lisp_String *name;
380: Lisp_Object value;
381: Lisp_Object function;
382: Lisp_Object plist;
383: struct Lisp_Symbol *next; /* -> next symbol in this obarray bucket */
384: };
385:
386: struct Lisp_Subr
387: {
388: Lisp_Object (*function) ();
389: short min_args, max_args;
390: char *symbol_name;
391: char *prompt;
392: char *doc;
393: };
394:
395: /* In a marker, the markbit of the chain field is used as the gc mark bit */
396:
397: struct Lisp_Marker
398: {
399: struct buffer *buffer;
400: Lisp_Object chain;
401: int bufpos;
402: int modified;
403: };
404:
405: /* Data type checking */
406:
407: #define NULL(x) (XFASTINT (x) == XFASTINT (Qnil))
408: #define LISTP(x) (XTYPE ((x)) == Lisp_Cons)
409: #define EQ(x, y) (XFASTINT (x) == XFASTINT (y))
410:
411: #define CHECK_STRING(x, i) \
412: { if (XTYPE ((x)) != Lisp_String) x = wrong_type_argument (Qstringp, (x)); }
413:
414: #define CHECK_SYMBOL(x, i) \
415: { if (XTYPE ((x)) != Lisp_Symbol) x = wrong_type_argument (Qsymbolp, (x)); }
416:
417: #define CHECK_VECTOR(x, i) \
418: { if (XTYPE ((x)) != Lisp_Vector) x = wrong_type_argument (Qvectorp, (x)); }
419:
420: #define CHECK_BUFFER(x, i) \
421: { if (XTYPE ((x)) != Lisp_Buffer) x = wrong_type_argument (Qbufferp, (x)); }
422:
423: #define CHECK_WINDOW(x, i) \
424: { if (XTYPE ((x)) != Lisp_Window) x = wrong_type_argument (Qwindowp, (x)); }
425:
426: #define CHECK_PROCESS(x, i) \
427: { if (XTYPE ((x)) != Lisp_Process) x = wrong_type_argument (Qprocessp, (x)); }
428:
429: #define CHECK_NUMBER(x, i) \
430: { if (XTYPE ((x)) != Lisp_Int) x = wrong_type_argument (Qintegerp, (x)); }
431:
432: #define CHECK_MARKER(x, i) \
433: { if (XTYPE ((x)) != Lisp_Marker) x = wrong_type_argument (Qmarkerp, (x)); }
434:
435: #define CHECK_NUMBER_COERCE_MARKER(x, i) \
436: { if (XTYPE ((x)) == Lisp_Marker) XFASTINT (x) = marker_position (x); \
437: else if (XTYPE ((x)) != Lisp_Int) x = wrong_type_argument (Qinteger_or_marker_p, (x)); }
438:
439: #ifdef VIRT_ADDR_VARIES
440: /* For machines like APOLLO where text and data can go anywhere
441: in virtual memory. */
442: #define CHECK_IMPURE(obj) \
443: { extern int pure[]; \
444: if (XUINT (obj) < (int) ((char *) pure + PURESIZE) \
445: && XUINT (obj) >= (int) pure) \
446: pure_write_error (); }
447:
448: #else /* not VIRT_ADDR_VARIES */
449:
450: #define CHECK_IMPURE(obj) \
451: { extern int my_edata; \
452: if (XUINT (obj) < (unsigned int) &my_edata) \
453: pure_write_error (); }
454: #endif /* not VIRT_ADDR_VARIES */
455:
456: /* Define a built-in function for calling from Lisp.
457: `lname' should be the name to give the function in Lisp,
458: as a null-terminated C string.
459: `fnname' should be the name of the function in C.
460: By convention, it starts with F.
461: `sname' should be the name for the C constant structure
462: that records information on this function for internal use.
463: By convention, it should be the same as `fnname' but with S instead of F.
464: It's too bad that C macros can't compute this from `fnname'.
465: `minargs' should be a number, the minimum number of arguments allowed.
466: `maxargs' should be a number, the maximum number of arguments allowed,
467: or else MANY or UNEVALLED.
468: MANY means pass a vector of evaluated arguments,
469: in the form of an integer number-of-arguments
470: followed by the address of a vector of Lisp_Objects
471: which contains the argument values.
472: UNEVALLED means pass the list of unevaluated arguments
473: `prompt' says how to read arguments for an interactive call.
474: This can be zero or a C string.
475: Zero means that interactive calls are not allowed.
476: A string is interpreted in a hairy way:
477: it should contain one line for each argument to be read, terminated by \n.
478: The first character of the line controls the type of parsing:
479: s -- read a string.
480: S -- read a symbol.
481: k -- read a key sequence and return it as a string.
482: a -- read a function name (symbol) with completion.
483: C -- read a command name (symbol) with completion.
484: v -- read a variable name (symbol) with completion.
485: b -- read a buffer name (a string) with completion.
486: B -- buffer name, may be existing buffer or may not be.
487: f -- read a file name, file must exist.
488: F -- read a file name, file need not exist.
489: n -- read a number.
490: c -- read a character and return it as a number.
491: p -- use the numeric value of the prefix argument.
492: P -- use raw value of prefix - can be nil, -, (NUMBER) or NUMBER.
493: x -- read a Lisp object from the minibuffer.
494: X -- read a Lisp form from the minibuffer and use its value.
495: A null string means call interactively with no arguments.
496: `doc' is documentation for the user.
497: */
498:
499: #define DEFUN(lname, fnname, sname, minargs, maxargs, prompt, doc) \
500: Lisp_Object fnname (); \
501: struct Lisp_Subr sname = {fnname, minargs, maxargs, lname, prompt, 0}; \
502: Lisp_Object fnname
503:
504: /* defsubr (Sname);
505: is how we define the symbol for function `name' at start-up time. */
506: extern void defsubr ();
507:
508: #define MANY -2
509: #define UNEVALLED -1
510:
511: #define DEFSIMPLE(lname, fnname, sname, doc, valtype, setcomp, exp) \
512: DEFUN (lname, fnname, sname, 0, 0, 0, 0) () \
513: { \
514: Lisp_Object val; \
515: XSET (val, valtype, exp); \
516: return val; }
517:
518: #define DEFPRED(lname, fnname, sname, doc, boolexp) \
519: DEFUN (lname, fnname, sname, 0, 0, 0, 0) () \
520: { if (boolexp) return Qt; return Qnil; }
521:
522: /* Structure for recording Lisp call stack for backtrace purposes */
523:
524: struct specbinding
525: {
526: Lisp_Object symbol, old_value;
527: };
528:
529: extern struct specbinding *specpdl;
530: extern struct specbinding *specpdl_ptr;
531: extern int specpdl_size;
532:
533: struct handler
534: {
535: Lisp_Object handler;
536: Lisp_Object var;
537: struct catchtag *tag;
538: struct handler *next;
539: };
540:
541: extern struct handler *handlerlist;
542:
543: /* Check quit-flag and quit if it is non-nil. */
544:
545: #define QUIT \
546: if (!NULL (Vquit_flag) && NULL (Vinhibit_quit)) \
547: { Vquit_flag = Qnil; Fsignal (Qquit, Qnil); }
548:
549: /* number of bytes of structure consed since last GC */
550:
551: extern int consing_since_gc;
552:
553: /* threshold for doing another gc */
554:
555: extern int gc_cons_threshold;
556:
557: /* Structure for recording stack slots that need marking */
558:
559: /* This is a chain of structures, each of which points at a Lisp_Object variable
560: whose value should be marked in garbage collection.
561: Normally every link of the chain is an automatic variable of a function,
562: and its `val' points to some argument or local variable of the function.
563: On exit to the function, the chain is set back to the value it had on entry.
564: This way, no link remains in the chain when the stack frame containing the link disappears.
565:
566: Every function that can call Feval must protect in this fashion all
567: Lisp_Object variables whose contents will be used again. */
568:
569: extern struct gcpro *gcprolist;
570:
571: struct gcpro
572: {
573: struct gcpro *next;
574: Lisp_Object *var; /* Address of first protected variable */
575: int nvars; /* Number of consecutive protected variables */
576: };
577:
578: #define GCPRO1(varname) \
579: {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \
580: gcprolist = &gcpro1; }
581:
582: #define GCPRO2(varname1, varname2) \
583: {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
584: gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
585: gcprolist = &gcpro2; }
586:
587: #define GCPRO3(varname1, varname2, varname3) \
588: {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
589: gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
590: gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
591: gcprolist = &gcpro3; }
592:
593: #define GCPRO4(varname1, varname2, varname3, varname4) \
594: {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
595: gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
596: gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
597: gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
598: gcprolist = &gcpro4; }
599:
600: /* Call staticpro (&var) to protect static variable `var'. */
601:
602: void staticpro();
603:
604: #define UNGCPRO (gcprolist = gcpro1.next)
605:
606: /* Defined in data.c */
607: extern Lisp_Object Qnil, Qt, Qquote, Qlambda, Qsubr, Qunbound;
608: extern Lisp_Object Qerror_conditions, Qerror_message, Qtop_level;
609: extern Lisp_Object Qerror, Qquit, Qwrong_type_argument, Qargs_out_of_range;
610: extern Lisp_Object Qvoid_variable, Qvoid_function;
611: extern Lisp_Object Qsetting_constant, Qinvalid_read_syntax;
612: extern Lisp_Object Qinvalid_function, Qwrong_number_of_arguments, Qno_catch;
613: extern Lisp_Object Qend_of_file, Qarith_error;
614: extern Lisp_Object Qbeginning_of_buffer, Qend_of_buffer, Qbuffer_read_only;
615:
616: extern Lisp_Object Qintegerp, Qnatnump, Qsymbolp, Qlistp, Qconsp;
617: extern Lisp_Object Qstringp, Qarrayp, Qsequencep, Qbufferp;
618: extern Lisp_Object Qchar_or_string_p, Qmarkerp, Qvectorp;
619: extern Lisp_Object Qinteger_or_marker_p, Qboundp, Qfboundp;
620: extern Lisp_Object Qcdr;
621:
622: extern Lisp_Object Feq (), Fnull (), Flistp (), Fconsp (), Fatom (), Fnlistp ();
623: extern Lisp_Object Fintegerp (), Fnatnump (), Fsymbolp ();
624: extern Lisp_Object Fvectorp (), Fstringp (), Farrayp (), Fsequencep ();
625: extern Lisp_Object Fbufferp (), Fmarkerp (), Fsubrp (), Fchar_or_string_p ();
626: extern Lisp_Object Finteger_or_marker_p ();
627:
628: extern Lisp_Object Fcar (), Fcar_safe(), Fcdr (), Fcdr_safe();
629: extern Lisp_Object Fsetcar (), Fsetcdr ();
630: extern Lisp_Object Fboundp (), Ffboundp (), Fmakunbound (), Ffmakunbound ();
631: extern Lisp_Object Fsymbol_function (), Fsymbol_plist (), Fsymbol_name ();
632: extern Lisp_Object Ffset (), Fsetplist ();
633: extern Lisp_Object Fsymbol_value (), Fset ();
634: extern Lisp_Object Fdefault_value (), Fset_default ();
635:
636: extern Lisp_Object Faref (), Faset (), Farray_length ();
637:
638: extern Lisp_Object Fstring_to_int (), Fint_to_string ();
639: extern Lisp_Object Feqlsign (), Fgtr (), Flss (), Fgeq (), Fleq (), Fneq (), Fzerop ();
640: extern Lisp_Object Fplus (), Fminus (), Ftimes (), Fquo (), Frem (), Fmax (), Fmin ();
641: extern Lisp_Object Flogand (), Flogior (), Flogxor (), Flognot (), Flsh (), Fash ();
642: extern Lisp_Object Fadd1 (), Fsub1 ();
643:
644: extern Lisp_Object make_number ();
645: extern Lisp_Object wrong_type_argument ();
646:
647: /* Defined in fns.c */
648: extern Lisp_Object Qstring_lessp;
649: extern Lisp_Object Vfeatures;
650: extern Lisp_Object Fidentity (), Frandom ();
651: extern Lisp_Object Flength (), Fstring_equal (), Fstring_lessp ();
652: extern Lisp_Object Fappend (), Fconcat (), Fvconcat (), Fcopy_sequence (), Fsubstring ();
653: extern Lisp_Object Fnth (), Fnthcdr (), Fmemq (), Fassq (), Fassoc ();
654: extern Lisp_Object Frassq (), Fdelq (), Fsort ();
655: extern Lisp_Object Freverse (), Fnreverse (), Fget (), Fput (), Fequal ();
656: extern Lisp_Object Ffillarray (), Fnconc (), Fmapcar (), Fmapconcat ();
657: extern Lisp_Object Fy_or_n_p (), Fyes_or_no_p ();
658: extern Lisp_Object Ffeaturep (), Frequire () , Fprovide ();
659: extern Lisp_Object concat2 (), nconc2 ();
660:
661: /* Defined in alloc.c */
662: extern Lisp_Object Vpurify_flag;
663: extern Lisp_Object Fcons (), Flist(), Fmake_list ();
664: extern Lisp_Object Fmake_vector (), Fvector (), Fmake_symbol (), Fmake_marker ();
665: extern Lisp_Object Fmake_string (), build_string (), make_string();
666: extern Lisp_Object Fpurecopy (), make_pure_string ();
667: extern Lisp_Object pure_cons (), make_pure_vector ();
668: extern Lisp_Object Fgarbage_collect ();
669:
670: /* Defined in print.c */
671: extern Lisp_Object Vprin1_to_string_buffer;
672: extern Lisp_Object Fprin1 (), Fprin1_to_string (), Fprinc ();
673: extern Lisp_Object Fterpri (), Fprint ();
674: extern Lisp_Object Vstandard_output, Qstandard_output;
675: extern temp_output_buffer_setup (), temp_output_buffer_show ();
676:
677: /* Defined in read.c */
678: extern Lisp_Object Qvariable_documentation;
679: extern Lisp_Object Vobarray, Vstandard_input;
680: extern Lisp_Object Fread (), Fread_from_string ();
681: extern Lisp_Object Fintern (), Fintern_soft (), Fload ();
682: extern Lisp_Object Fget_file_char (), Fread_char ();
683: extern Lisp_Object Feval_current_buffer (), Feval_region ();
684: extern Lisp_Object intern (), oblookup ();
685:
686: /* Defined in eval.c */
687: extern Lisp_Object Qautoload, Qexit, Qinteractive, Qcommandp, Qdefun, Qmacro;
688: extern Lisp_Object Vinhibit_quit, Vquit_flag;
689: extern Lisp_Object Vmocklisp_arguments, Qmocklisp, Qmocklisp_arguments;
690: extern Lisp_Object Vautoload_queue;
691: extern Lisp_Object Fand (), For (), Fif (), Fprogn (), Fprog1 (), Fprog2 ();
692: extern Lisp_Object Fsetq (), Fquote ();
693: extern Lisp_Object Fuser_variable_p ();
694: extern Lisp_Object Fdefun (), Flet (), FletX (), Fwhile ();
695: extern Lisp_Object Fcatch (), Fthrow (), Funwind_protect ();
696: extern Lisp_Object Fcondition_case (), Fsignal ();
697: extern Lisp_Object Ffunction_type (), Fautoload (), Fdocumentation (), Fcommandp ();
698: extern Lisp_Object Feval (), Fapply (), Ffuncall ();
699: extern Lisp_Object Fglobal_set (), Fglobal_value (), Fbacktrace ();
700: extern Lisp_Object call1 (), call2 (), call3 ();
701: extern Lisp_Object apply_lambda ();
702: extern Lisp_Object internal_catch ();
703: extern Lisp_Object internal_condition_case ();
704: extern void unbind_to ();
705: extern void error ();
706:
707: /* Defined in editfns.c */
708: extern Lisp_Object Vprefix_arg, Qminus, Vcurrent_prefix_arg;
709: extern Lisp_Object Finteractive_p (), Fgoto_char ();
710: extern Lisp_Object Fpoint_min_marker (), Fpoint_max_marker ();
711: extern Lisp_Object Fpoint_min (), Fpoint_max ();
712: extern Lisp_Object Fpoint (), Fmark (), Fpoint_marker (), Fmark_marker ();
713: extern Lisp_Object Ffollchar (), Fprevchar (), Fchar_after (), Finsert ();
714: extern Lisp_Object Feolp (), Feobp (), Fbolp (), Fbobp (), Fset_mark ();
715: extern Lisp_Object Fformat (), format1 ();
716: extern Lisp_Object Fgetenv ();
717: extern Lisp_Object Fbuffer_substring (), Fbuffer_string ();
718: extern Lisp_Object save_excursion_save (), save_restriction_save ();
719: extern Lisp_Object save_excursion_restore (), save_restriction_restore ();
720: extern Lisp_Object Fchar_to_string ();
721:
722: /* defined in buffer.c */
723: extern Lisp_Object Vbuffer_alist;
724: extern Lisp_Object Fget_buffer (), Fget_buffer_create (), Fset_buffer ();
725: extern Lisp_Object Fbarf_if_buffer_read_only ();
726: extern Lisp_Object Fcurrent_buffer (), Fswitch_to_buffer (), Fpop_to_buffer ();
727: extern Lisp_Object Fother_buffer ();
728: extern struct buffer *all_buffers;
729:
730: /* defined in marker.c */
731:
732: extern Lisp_Object Fmarker_position (), Fmarker_buffer ();
733: extern Lisp_Object Fcopy_marker ();
734:
735: /* Defined in fileio.c */
736:
737: extern Lisp_Object Qfile_error;
738: extern Lisp_Object Fexpand_file_name (), Ffile_name_nondirectory ();
739: extern Lisp_Object Fsubstitute_in_file_name ();
740: extern Lisp_Object Ffile_symlink_p ();
741:
742: /* Defined in abbrev.c */
743:
744: extern Lisp_Object Vfundamental_mode_abbrev_table;
745:
746: /* defined in search.c */
747:
748: extern Lisp_Object Fstring_match ();
749: extern Lisp_Object Fscan_buffer ();
750:
751: /* defined in minibuf.c */
752:
753: extern Lisp_Object last_minibuf_string;
754: extern Lisp_Object read_minibuf_string (), Fcompleting_read ();
755: extern Lisp_Object Fread_from_minibuffer ();
756: extern Lisp_Object Fread_variable ();
757: extern Lisp_Object Fread_minibuffer (), Feval_minibuffer ();
758: extern Lisp_Object Fread_string (), Fread_file_name ();
759: extern Lisp_Object Fread_no_blanks_input ();
760:
761: /* Defined in callint.c */
762:
763: extern Lisp_Object Vcommand_history;
764: extern Lisp_Object Qcall_interactively;
765: extern Lisp_Object Fcall_interactively ();
766: extern Lisp_Object Fprefix_numeric_value ();
767:
768: /* defined in casefiddle.c */
769:
770: extern Lisp_Object Fdowncase (), Fupcase (), Fcapitalize ();
771:
772: /* defined in keyboard.c */
773:
774: extern Lisp_Object Vhelp_form, Vtop_level;
775: extern Lisp_Object Fdiscard_input (), Frecursive_edit ();
776: extern Lisp_Object Fcommand_execute (), Finput_pending_p ();
777:
778: /* defined in keymap.c */
779:
780: extern Lisp_Object Qkeymap;
781: extern Lisp_Object Fkey_description (), Fsingle_key_description ();
782: extern Lisp_Object Fwhere_is_internal ();
783: extern Lisp_Object access_keymap (), store_in_keymap ();
784: extern Lisp_Object get_keyelt (), get_keymap();
785:
786: /* defined in indent.c */
787: extern Lisp_Object Fvertical_motion (), Findent_to (), Fcurrent_column ();
788:
789: /* defined in window.c */
790: extern Lisp_Object Qwindowp;
791: extern Lisp_Object Fget_buffer_window ();
792: extern Lisp_Object Fsave_window_excursion ();
793: extern Lisp_Object save_window_save ();
794: extern Lisp_Object save_window_restore ();
795:
796: /* defined in emacs.c */
797: extern Lisp_Object decode_env_path ();
798: /* Nonzero means don't do interactive redisplay and don't change tty modes */
799: extern int noninteractive;
800:
801: /* defined in process.c */
802: extern Lisp_Object Fget_process (), Fget_buffer_process (), Fprocessp ();
803: extern Lisp_Object Fprocess_status (), Fkill_process ();
804:
805: /* defined in callproc.c */
806: extern Lisp_Object Vexec_path, Vexec_directory;
807:
808: /* defined in doc.c */
809: extern Lisp_Object Vdoc_file_name;
810: extern Lisp_Object Fsubstitute_command_keys ();
811:
812: /* defined in bytecode.c */
813: extern Lisp_Object Qbytecode;
814:
815: /* defined in macros.c */
816: extern Lisp_Object Fexecute_kbd_macro ();
817:
818: extern void debugger ();
819:
820: extern char *malloc (), *realloc (), *getenv (), *ctime (), *getwd ();
821: extern long *xmalloc (), *xrealloc ();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.