Mercurial > hg > xemacs-beta
comparison src/bytecode.h @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children | 8de8e3f6228a |
comparison
equal
deleted
inserted
replaced
427:0a0253eac470 | 428:3ecd8885ac67 |
---|---|
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 Don't use these! For backward compatibility only. */ | |
35 #define COMPILED_ARGLIST 0 | |
36 #define COMPILED_INSTRUCTIONS 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 /* It doesn't make sense to have this and also have load-history */ | |
44 /* #define COMPILED_FUNCTION_ANNOTATION_HACK */ | |
45 | |
46 struct Lisp_Compiled_Function | |
47 { | |
48 struct lrecord_header lheader; | |
49 unsigned short stack_depth; | |
50 unsigned short specpdl_depth; | |
51 struct | |
52 { | |
53 unsigned int documentationp: 1; | |
54 unsigned int interactivep: 1; | |
55 /* Only used if I18N3, but always defined for simplicity. */ | |
56 unsigned int domainp: 1; | |
57 /* Non-zero if this bytecode came from a v18 or v19 file. | |
58 We need to Ebolify the `assoc', `delq', etc. functions. */ | |
59 unsigned int ebolified: 1; | |
60 } flags; | |
61 Lisp_Object instructions; | |
62 Lisp_Object constants; | |
63 Lisp_Object arglist; | |
64 /* This uses the minimal number of conses; see accessors in data.c. */ | |
65 Lisp_Object doc_and_interactive; | |
66 #ifdef COMPILED_FUNCTION_ANNOTATION_HACK | |
67 /* Something indicating where the bytecode came from */ | |
68 Lisp_Object annotated; | |
69 #endif | |
70 }; | |
71 typedef struct Lisp_Compiled_Function Lisp_Compiled_Function; | |
72 | |
73 Lisp_Object run_byte_code (Lisp_Object compiled_function_or_instructions, ...); | |
74 | |
75 Lisp_Object compiled_function_arglist (Lisp_Compiled_Function *f); | |
76 Lisp_Object compiled_function_instructions (Lisp_Compiled_Function *f); | |
77 Lisp_Object compiled_function_constants (Lisp_Compiled_Function *f); | |
78 int compiled_function_stack_depth (Lisp_Compiled_Function *f); | |
79 Lisp_Object compiled_function_documentation (Lisp_Compiled_Function *f); | |
80 Lisp_Object compiled_function_annotation (Lisp_Compiled_Function *f); | |
81 Lisp_Object compiled_function_domain (Lisp_Compiled_Function *f); | |
82 Lisp_Object compiled_function_interactive (Lisp_Compiled_Function *f); | |
83 | |
84 void set_compiled_function_documentation (Lisp_Compiled_Function *f, | |
85 Lisp_Object new_doc); | |
86 | |
87 Lisp_Object funcall_compiled_function (Lisp_Object fun, | |
88 int nargs, Lisp_Object args[]); | |
89 void optimize_compiled_function (Lisp_Object compiled_function); | |
90 | |
91 DECLARE_LRECORD (compiled_function, Lisp_Compiled_Function); | |
92 #define XCOMPILED_FUNCTION(x) XRECORD (x, compiled_function, \ | |
93 Lisp_Compiled_Function) | |
94 #define XSETCOMPILED_FUNCTION(x, p) XSETRECORD (x, p, compiled_function) | |
95 #define COMPILED_FUNCTIONP(x) RECORDP (x, compiled_function) | |
96 #define CHECK_COMPILED_FUNCTION(x) CHECK_RECORD (x, compiled_function) | |
97 #define CONCHECK_COMPILED_FUNCTION(x) CONCHECK_RECORD (x, compiled_function) | |
98 | |
99 extern Lisp_Object Qbyte_code; | |
100 | |
101 /* total 1765 internal 101 doc-and-int 775 doc-only 389 int-only 42 neither 559 | |
102 no doc slot, no int slot | |
103 overhead : (* 1765 0) = 0 | |
104 doc-and-int (args . (doc . int)): (* 775 4) = 3100 | |
105 doc-only (args . doc) : (* 389 2) = 778 | |
106 int-only (args . int) : (* 42 2) = 84 | |
107 neither args : (* 559 0) = 0 = 3962 | |
108 combined | |
109 overhead : (* 1765 1) = 1765 | |
110 doc-and-int (doc . int) : (* 775 2) = 1550 | |
111 doc-only doc : (* 389 0) = 0 | |
112 int-only int : (* 42 0) = 0 | |
113 neither - : (* 559 0) = 0 = 3315 | |
114 both | |
115 overhead : (* 1765 2) = 3530 | |
116 doc-and-int - : (* 775 0) = 0 | |
117 doc-only - : (* 389 0) = 0 | |
118 int-only - : (* 42 0) = 0 | |
119 neither - : (* 559 0) = 0 = 3530 | |
120 */ | |
121 | |
122 #endif /* _XEMACS_BYTECODE_H_ */ | |
123 |