Mercurial > hg > xemacs-beta
comparison src/bytecode.h @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 0293115a14e9 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:376386a54a3c |
---|---|
1 /* Definitions for bytecode interpretation and compiled-function objects. | |
2 Copyright (C) 1985, 1986, 1987, 1992, 1993 Free Software Foundation, Inc. | |
3 | |
4 This file is part of XEmacs. | |
5 | |
6 XEmacs is free software; you can redistribute it and/or modify it | |
7 under the terms of the GNU General Public License as published by the | |
8 Free Software Foundation; either version 2, or (at your option) any | |
9 later version. | |
10 | |
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with XEmacs; see the file COPYING. If not, write to | |
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
19 Boston, MA 02111-1307, USA. */ | |
20 | |
21 /* Synched up with: Not in FSF. */ | |
22 | |
23 /* Authorship: | |
24 | |
25 FSF: long ago. | |
26 Mly: rewrote for 19.8, properly abstracted. | |
27 Jon Reid: some changes for I18N3 (domain, etc), for 19.8. | |
28 */ | |
29 | |
30 #ifndef _XEMACS_BYTECODE_H_ | |
31 #define _XEMACS_BYTECODE_H_ | |
32 | |
33 /* Meanings of slots in a Lisp_Compiled_Function. | |
34 */ | |
35 #define COMPILED_ARGLIST 0 | |
36 #define COMPILED_BYTECODE 1 | |
37 #define COMPILED_CONSTANTS 2 | |
38 #define COMPILED_STACK_DEPTH 3 | |
39 #define COMPILED_DOC_STRING 4 | |
40 #define COMPILED_INTERACTIVE 5 | |
41 #define COMPILED_DOMAIN 6 | |
42 | |
43 #define COMPILED_FUNCTION_ANNOTATION_HACK | |
44 | |
45 struct Lisp_Compiled_Function | |
46 { | |
47 struct lrecord_header lheader; | |
48 unsigned short maxdepth; | |
49 struct | |
50 { | |
51 unsigned int documentationp: 1; | |
52 unsigned int interactivep: 1; | |
53 /* Only used if I18N3, but always defined for simplicity. */ | |
54 unsigned int domainp: 1; | |
55 } flags; | |
56 Lisp_Object bytecodes; | |
57 Lisp_Object constants; | |
58 Lisp_Object arglist; | |
59 /* This uses the minimal number of conses; see accessors in data.c. */ | |
60 Lisp_Object doc_and_interactive; | |
61 #ifdef COMPILED_FUNCTION_ANNOTATION_HACK | |
62 /* Something indicating where the bytecode came from */ | |
63 Lisp_Object annotated; | |
64 #endif | |
65 }; | |
66 | |
67 Lisp_Object compiled_function_documentation (struct Lisp_Compiled_Function *b); | |
68 Lisp_Object compiled_function_interactive (struct Lisp_Compiled_Function *b); | |
69 Lisp_Object compiled_function_domain (struct Lisp_Compiled_Function *b); | |
70 void set_compiled_function_documentation (struct Lisp_Compiled_Function *b, | |
71 Lisp_Object); | |
72 Lisp_Object compiled_function_annotation (struct Lisp_Compiled_Function *b); | |
73 | |
74 DECLARE_LRECORD (compiled_function, struct Lisp_Compiled_Function); | |
75 #define XCOMPILED_FUNCTION(x) XRECORD (x, compiled_function, \ | |
76 struct Lisp_Compiled_Function) | |
77 #define XSETCOMPILED_FUNCTION(x, p) XSETRECORD (x, p, compiled_function) | |
78 #define COMPILED_FUNCTIONP(x) RECORDP (x, compiled_function) | |
79 #define GC_COMPILED_FUNCTIONP(x) GC_RECORDP (x, compiled_function) | |
80 #define CHECK_COMPILED_FUNCTION(x) CHECK_RECORD (x, compiled_function) | |
81 #define CONCHECK_COMPILED_FUNCTION(x) CONCHECK_RECORD (x, compiled_function) | |
82 | |
83 /* total 1765 internal 101 doc-and-int 775 doc-only 389 int-only 42 neither 559 | |
84 no doc slot, no int slot | |
85 overhead : (* 1765 0) = 0 | |
86 doc-and-int (args . (doc . int)): (* 775 4) = 3100 | |
87 doc-only (args . doc) : (* 389 2) = 778 | |
88 int-only (args . int) : (* 42 2) = 84 | |
89 neither args : (* 559 0) = 0 = 3962 | |
90 combined | |
91 overhead : (* 1765 1) = 1765 | |
92 doc-and-int (doc . int) : (* 775 2) = 1550 | |
93 doc-only doc : (* 389 0) = 0 | |
94 int-only int : (* 42 0) = 0 | |
95 neither - : (* 559 0) = 0 = 3315 | |
96 both | |
97 overhead : (* 1765 2) = 3530 | |
98 doc-and-int - : (* 775 0) = 0 | |
99 doc-only - : (* 389 0) = 0 | |
100 int-only - : (* 42 0) = 0 | |
101 neither - : (* 559 0) = 0 = 3530 | |
102 */ | |
103 | |
104 #endif /* _XEMACS_BYTECODE_H_ */ | |
105 |