Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 622 lines (474 sloc) 18.796 kb
573b460 andigutmans Zend Library
andigutmans authored
1 /*
2 +----------------------------------------------------------------------+
3 | Zend Engine |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 1998, 1999 Andi Gutmans, Zeev Suraski |
6 +----------------------------------------------------------------------+
8d1de13 Zeev Suraski 0.91 update
zsuraski authored
7 | This source file is subject to version 0.91 of the Zend license, |
b5b1117 Zeev Suraski License update
zsuraski authored
8 | that is bundled with this package in the file LICENSE, and is |
9 | available at through the world-wide-web at |
8d1de13 Zeev Suraski 0.91 update
zsuraski authored
10 | http://www.zend.com/license/0_91.txt. |
b5b1117 Zeev Suraski License update
zsuraski authored
11 | If you did not receive a copy of the Zend license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@zend.com so we can mail you a copy immediately. |
573b460 andigutmans Zend Library
andigutmans authored
14 +----------------------------------------------------------------------+
15 | Authors: Andi Gutmans <andi@zend.com> |
16 | Zeev Suraski <zeev@zend.com> |
17 +----------------------------------------------------------------------+
18 */
19
b5b1117 Zeev Suraski License update
zsuraski authored
20
573b460 andigutmans Zend Library
andigutmans authored
21 #ifndef _COMPILE_H
22 #define _COMPILE_H
23
24 #include "zend.h"
fa76f0c Zeev Suraski Compile fix
zsuraski authored
25
009025e * header file cleanup
Stig S. Bakken authored
26 #ifdef HAVE_STDARG_H
27 # include <stdarg.h>
fa76f0c Zeev Suraski Compile fix
zsuraski authored
28 #endif
29
573b460 andigutmans Zend Library
andigutmans authored
30 #include "zend_llist.h"
31
32 #define DEBUG_ZEND 0
fcaf734 andigutmans - Don't support interactive mode when thread safe.
andigutmans authored
33
34 #ifndef ZTS
009025e * header file cleanup
Stig S. Bakken authored
35 # define SUPPORT_INTERACTIVE 1
fcaf734 andigutmans - Don't support interactive mode when thread safe.
andigutmans authored
36 #else
009025e * header file cleanup
Stig S. Bakken authored
37 # define SUPPORT_INTERACTIVE 0
fcaf734 andigutmans - Don't support interactive mode when thread safe.
andigutmans authored
38 #endif
573b460 andigutmans Zend Library
andigutmans authored
39
40 #define FREE_PNODE(znode) zval_dtor(&znode->u.constant);
41 #define FREE_OP(op, should_free) if (should_free) zval_dtor(&Ts[(op)->u.var].tmp_var);
42
43
44 #if SUPPORT_INTERACTIVE
45 #define INC_BPC(op_array) ((op_array)->backpatch_count++)
46 #define DEC_BPC(op_array) ((op_array)->backpatch_count--)
47 #define HANDLE_INTERACTIVE() if (EG(interactive)) { execute_new_code(CLS_C); }
48 #else
49 #define INC_BPC(op_array)
50 #define DEC_BPC(op_array)
51 #define HANDLE_INTERACTIVE()
52 #endif
53
54 typedef struct _zend_op_array zend_op_array;
55
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
56 typedef struct _znode {
573b460 andigutmans Zend Library
andigutmans authored
57 int op_type;
58 union {
59 zval constant;
60
61 int var;
62 int opline_num;
bbe27ff andigutmans - Initialize extended value's and put the fetch_type in it's own variabl...
andigutmans authored
63 int fetch_type;
573b460 andigutmans Zend Library
andigutmans authored
64 zend_op_array *op_array;
65 struct {
66 int var; /* dummy */
67 int type;
68 } EA;
69 } u;
70 } znode;
71
72
73 typedef struct _zend_op {
74 int opcode;
75 znode result;
76 znode op1;
77 znode op2;
39a7f4c Zeev Suraski This patch is a go. Not fully optimized yet, but working properly.
zsuraski authored
78 ulong extended_value;
573b460 andigutmans Zend Library
andigutmans authored
79 char *filename;
80 uint lineno;
81 } zend_op;
82
83
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
84 typedef struct _zend_brk_cont_element {
573b460 andigutmans Zend Library
andigutmans authored
85 int cont;
86 int brk;
87 int parent;
88 } zend_brk_cont_element;
89
90
91 struct _zend_op_array {
92 int type; /* MUST be the first element of this struct! */
93
94 unsigned char *arg_types; /* MUST be the second element of this struct! */
7f35cfd Zeev Suraski *** empty log message ***
zsuraski authored
95 char *function_name; /* MUST be the third element of this struct! */
573b460 andigutmans Zend Library
andigutmans authored
96
97 int *refcount;
98
99 zend_op *opcodes;
100 int last, size;
101
102 int T;
103
104
105 zend_brk_cont_element *brk_cont_array;
106 int last_brk_cont;
107 int current_brk_cont;
1b4b5c4 Zeev Suraski New $GLOBALS init
zsuraski authored
108 unsigned char uses_globals;
573b460 andigutmans Zend Library
andigutmans authored
109
110 /* static variables support */
111 HashTable *static_variables;
112
113 #if SUPPORT_INTERACTIVE
114 int start_op_number, end_op_number;
115 int last_executed_op_number;
116 int backpatch_count;
117 #endif
ced9cee Zeev Suraski - Implement return by reference:
zsuraski authored
118 zend_bool return_reference;
573b460 andigutmans Zend Library
andigutmans authored
119
b5f5e9a andigutmans - Optimize the execute stack a bit.
andigutmans authored
120 void *reserved[ZEND_MAX_RESERVED_RESOURCES];
573b460 andigutmans Zend Library
andigutmans authored
121 };
122
123
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
124 typedef struct _zend_internal_function {
573b460 andigutmans Zend Library
andigutmans authored
125 int type; /* MUST be the first element of this struct! */
126
127 unsigned char *arg_types; /* MUST be the second element of this struct */
7f35cfd Zeev Suraski *** empty log message ***
zsuraski authored
128 char *function_name; /* MUST be the third element of this struct */
573b460 andigutmans Zend Library
andigutmans authored
129
130 void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
131 } zend_internal_function;
132
133
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
134 typedef union _zend_function {
573b460 andigutmans Zend Library
andigutmans authored
135 int type; /* MUST be the first element of this struct! */
136 struct {
137 int type; /* never used */
138 unsigned char *arg_types;
7f35cfd Zeev Suraski *** empty log message ***
zsuraski authored
139 char *function_name;
573b460 andigutmans Zend Library
andigutmans authored
140 } common;
141
142 zend_op_array op_array;
143 zend_internal_function internal_function;
144 } zend_function;
145
146
9cb2cf1 Zeev Suraski Optimize allocations into uninitialized_zval assignments
zsuraski authored
147 typedef struct _zend_function_state {
573b460 andigutmans Zend Library
andigutmans authored
148 HashTable *function_symbol_table;
149 zend_function *function;
b5f5e9a andigutmans - Optimize the execute stack a bit.
andigutmans authored
150 void *reserved[ZEND_MAX_RESERVED_RESOURCES];
573b460 andigutmans Zend Library
andigutmans authored
151 } zend_function_state;
152
153
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
154 typedef struct _zend_switch_entry {
573b460 andigutmans Zend Library
andigutmans authored
155 znode cond;
156 int default_case;
157 int control_var;
158 } zend_switch_entry;
159
160
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
161 typedef struct _list_llist_element {
573b460 andigutmans Zend Library
andigutmans authored
162 znode var;
163 zend_llist dimensions;
164 znode value;
165 } list_llist_element;
166
167
39f9487 andigutmans -Tiny patches
andigutmans authored
168 typedef struct _zend_file_handle {
573b460 andigutmans Zend Library
andigutmans authored
169 int type;
170 char *filename;
5463dd5 andigutmans - Add use support (behaves like require, but will not use the same file ...
andigutmans authored
171 char *opened_path;
573b460 andigutmans Zend Library
andigutmans authored
172 union {
173 int fd;
174 FILE *fp;
175 #ifdef __cplusplus
176 istream *is;
177 #endif
178 } handle;
9baad80 Zeev Suraski - Break the zend->PHP dependency introduced by the .php extension for us...
zsuraski authored
179 zend_bool free_filename;
573b460 andigutmans Zend Library
andigutmans authored
180 } zend_file_handle;
181
182
183 #include "zend_globals.h"
184
185 #define IS_CONST (1<<0)
186 #define IS_TMP_VAR (1<<1)
187 #define IS_VAR (1<<2)
188 #define IS_UNUSED (1<<3) /* Unused variable */
189
190
191 #define EXT_TYPE_UNUSED (1<<0)
192
193 void init_compiler(CLS_D ELS_DC);
194 void shutdown_compiler(CLS_D);
195
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
196 BEGIN_EXTERN_C()
39f9487 andigutmans -Tiny patches
andigutmans authored
197 extern ZEND_API zend_op_array *(*zend_compile_files)(int mark_as_ref CLS_DC, int file_count, ...);
573b460 andigutmans Zend Library
andigutmans authored
198
ed06a70 Zeev Suraski * Centralized shutdown
zsuraski authored
199 void zend_activate(CLS_D ELS_DC);
200 void zend_deactivate(CLS_D ELS_DC);
201
573b460 andigutmans Zend Library
andigutmans authored
202 int lex_scan(zval *zendlval CLS_DC);
203 void startup_scanner(CLS_D);
204 void shutdown_scanner(CLS_D);
205
07e0885 andigutmans Make set_compiled_filename() return a pointer to the allocated file name
andigutmans authored
206 ZEND_API char *zend_set_compiled_filename(char *new_compiled_filename);
573b460 andigutmans Zend Library
andigutmans authored
207 ZEND_API void zend_restore_compiled_filename(char *original_compiled_filename);
9353650 Fix warnings surfacing in maintainer-mode.
Stig S. Bakken authored
208 ZEND_API char *zend_get_compiled_filename(void);
573b460 andigutmans Zend Library
andigutmans authored
209
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
210 #ifdef ZTS
211 const char *zend_get_zendtext(CLS_D);
212 int zend_get_zendleng(CLS_D);
213 #endif
214
215 END_EXTERN_C()
573b460 andigutmans Zend Library
andigutmans authored
216
217 /* parser-driven code generators */
218 void do_binary_op(int op, znode *result, znode *op1, znode *op2 CLS_DC);
219 void do_unary_op(int op, znode *result, znode *op1 CLS_DC);
220 void do_binary_assign_op(int op, znode *result, znode *op1, znode *op2 CLS_DC);
221 void do_assign(znode *result, znode *variable, znode *value CLS_DC);
222 void do_assign_ref(znode *result, znode *lvar, znode *rvar CLS_DC);
223 void fetch_simple_variable(znode *result, znode *varname, int bp CLS_DC);
82c8a9e andigutmans - Indirect references had all of the fetches by mistakenly backpatched.
andigutmans authored
224 void fetch_simple_variable_ex(znode *result, znode *varname, int bp, int op CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
225 void do_indirect_references(znode *result, znode *num_references, znode *variable CLS_DC);
226 void do_fetch_global_or_static_variable(znode *varname, znode *static_assignment, int fetch_type CLS_DC);
7a87fcb Zeev Suraski Thread safety patch. We're still not quite there but it compiles again,...
zsuraski authored
227 void do_fetch_globals(znode *varname CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
228
229 void fetch_array_begin(znode *result, znode *varname, znode *first_dim CLS_DC);
230 void fetch_array_dim(znode *result, znode *parent, znode *dim CLS_DC);
231 void do_print(znode *result, znode *arg CLS_DC);
232 void do_echo(znode *arg CLS_DC);
8802964 * fix some casts
Sascha Schumann authored
233 typedef int (*unary_op_type)(zval *, zval *);
234 ZEND_API unary_op_type get_unary_op(int opcode);
573b460 andigutmans Zend Library
andigutmans authored
235 ZEND_API void *get_binary_op(int opcode);
236
237 void do_while_cond(znode *expr, znode *close_bracket_token CLS_DC);
238 void do_while_end(znode *while_token, znode *close_bracket_token CLS_DC);
239 void do_do_while_begin(CLS_D);
240 void do_do_while_end(znode *do_token, znode *expr CLS_DC);
241
242
243 void do_if_cond(znode *cond, znode *closing_bracket_token CLS_DC);
244 void do_if_after_statement(znode *closing_bracket_token, unsigned char initialize CLS_DC);
245 void do_if_end(CLS_D);
246
247 void do_for_cond(znode *expr, znode *second_semicolon_token CLS_DC);
248 void do_for_before_statement(znode *cond_start, znode *second_semicolon_token CLS_DC);
249 void do_for_end(znode *second_semicolon_token CLS_DC);
250
251 void do_pre_incdec(znode *result, znode *op1, int op CLS_DC);
252 void do_post_incdec(znode *result, znode *op1, int op CLS_DC);
253
254 void do_begin_variable_parse(CLS_D);
06d04d1 andigutmans - Fix SEND_VAR problem after fetch'ing a variable and not knowing the fe...
andigutmans authored
255 void do_end_variable_parse(int type, int arg_offset CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
256
1b6fae1 Zeev Suraski Thoroughly fix the SWITCH problem. No RETURN handling yet.
zsuraski authored
257 void do_free(znode *op1 CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
258
7a87fcb Zeev Suraski Thread safety patch. We're still not quite there but it compiles again,...
zsuraski authored
259 void do_init_string(znode *result CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
260 void do_add_char(znode *result, znode *op1, znode *op2 CLS_DC);
261 void do_add_string(znode *result, znode *op1, znode *op2 CLS_DC);
262 void do_add_variable(znode *result, znode *op1, znode *op2 CLS_DC);
263
ced9cee Zeev Suraski - Implement return by reference:
zsuraski authored
264 void do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
265 void do_end_function_declaration(znode *function_token CLS_DC);
266 void do_receive_arg(int op, znode *var, znode *offset, znode *initialization, unsigned char pass_type CLS_DC);
739132e andigutmans - Fixed a leak when doing inheritance. The parent class name wasn't bein...
andigutmans authored
267 int do_begin_function_call(znode *function_name CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
268 void do_begin_dynamic_function_call(znode *function_name CLS_DC);
269 void do_begin_class_member_function_call(znode *class_name, znode *function_name CLS_DC);
739132e andigutmans - Fixed a leak when doing inheritance. The parent class name wasn't bein...
andigutmans authored
270 void do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method, int is_dynamic_fcall CLS_DC);
7fe808e andigutmans - By mistake commited this to the branch. It fixes a bug we introduced w...
andigutmans authored
271 void do_return(znode *expr, int do_end_vparse CLS_DC);
ef5b7e2 Zeev Suraski Generate better warnings for class/function redefinitions
zsuraski authored
272 ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time);
b0bfa45 Zeev Suraski * Fix all hash checks that checked Bucket.arKey for NULL, when it was ch...
zsuraski authored
273 void do_early_binding(CLS_D);
573b460 andigutmans Zend Library
andigutmans authored
274
275 void do_pass_param(znode *param, int op, int offset CLS_DC);
276
277
278 void do_boolean_or_begin(znode *expr1, znode *op_token CLS_DC);
279 void do_boolean_or_end(znode *result, znode *expr1, znode *expr2, znode *op_token CLS_DC);
280 void do_boolean_and_begin(znode *expr1, znode *op_token CLS_DC);
281 void do_boolean_and_end(znode *result, znode *expr1, znode *expr2, znode *op_token CLS_DC);
282
283 void do_brk_cont(int op, znode *expr CLS_DC);
284
285 void do_switch_cond(znode *cond CLS_DC);
286 void do_switch_end(znode *case_list CLS_DC);
287 void do_case_before_statement(znode *case_list, znode *case_token, znode *case_expr CLS_DC);
288 void do_case_after_statement(znode *result, znode *case_token CLS_DC);
289 void do_default_before_statement(znode *case_list, znode *default_token CLS_DC);
290
291 void do_begin_class_declaration(znode *class_name, znode *parent_class_name CLS_DC);
292 void do_end_class_declaration(CLS_D);
293 void do_declare_property(znode *var_name, znode *value CLS_DC);
294
295 void do_fetch_property(znode *result, znode *object, znode *property CLS_DC);
296
297
298 void do_push_object(znode *object CLS_DC);
299 void do_pop_object(znode *object CLS_DC);
300
301
8f51f72 andigutmans - Fix the new operator incompatibility.
andigutmans authored
302 void do_begin_new_object(znode *new_token, znode *class_name CLS_DC);
303 void do_end_new_object(znode *result, znode *class_name, znode *new_token, znode *argument_list CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
304
305 void do_fetch_constant(znode *result, znode *constant_name, int mode CLS_DC);
306
307 void do_shell_exec(znode *result, znode *cmd CLS_DC);
308
03d354d andigutmans - For Andrei. Implement references in array() initializations
andigutmans authored
309 void do_init_array(znode *result, znode *expr, znode *offset, int is_ref CLS_DC);
310 void do_add_array_element(znode *result, znode *expr, znode *offset, int is_ref CLS_DC);
7ed4923 andigutmans - Fix the static array() initializing
andigutmans authored
311 void do_add_static_array_element(znode *result, znode *offset, znode *expr);
fdcaba4 Zeev Suraski Solve a couple of compile issues
zsuraski authored
312 void do_list_init(CLS_D);
573b460 andigutmans Zend Library
andigutmans authored
313 void do_list_end(znode *result, znode *expr CLS_DC);
314 void do_add_list_element(znode *element CLS_DC);
315 void do_new_list_begin(CLS_D);
316 void do_new_list_end(CLS_D);
317
318 void do_cast(znode *result, znode *expr, int type CLS_DC);
319 void do_include_or_eval(int type, znode *result, znode *op1 CLS_DC);
67b4b3a Zeev Suraski - require() of a dynamic expression now has the standard require() seman...
zsuraski authored
320 void do_require(znode *filename CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
321
322 void do_unset(znode *variable CLS_DC);
323 void do_isset_or_isempty(int type, znode *result, znode *variable CLS_DC);
324
325 void do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token CLS_DC);
326 void do_foreach_cont(znode *value, znode *key, znode *as_token CLS_DC);
327 void do_foreach_end(znode *foreach_token, znode *open_brackets_token CLS_DC);
328
329 void do_end_heredoc(CLS_D);
330
331 void do_exit(znode *result, znode *message CLS_DC);
332
333 void do_begin_silence(znode *strudel_token CLS_DC);
334 void do_end_silence(znode *strudel_token CLS_DC);
335
336 void do_begin_qm_op(znode *cond, znode *qm_token CLS_DC);
337 void do_qm_true(znode *true_value, znode *qm_token, znode *colon_token CLS_DC);
338 void do_qm_false(znode *result, znode *false_value, znode *qm_token, znode *colon_token CLS_DC);
339
340 void do_extended_info(CLS_D);
341 void do_extended_fcall_begin(CLS_D);
342 void do_extended_fcall_end(CLS_D);
343
7c4a083 Zeev Suraski Various thread safety fixes and DLL updates
zsuraski authored
344 #define INITIAL_OP_ARRAY_SIZE 64
345
573b460 andigutmans Zend Library
andigutmans authored
346
347 /* helper functions in zend-scanner.l */
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
348 BEGIN_EXTERN_C()
5463dd5 andigutmans - Add use support (behaves like require, but will not use the same file ...
andigutmans authored
349 ZEND_API int require_file(zend_file_handle *file_handle, zend_bool unique CLS_DC);
9baad80 Zeev Suraski - Break the zend->PHP dependency introduced by the .php extension for us...
zsuraski authored
350 ZEND_API int require_filename(char *filename CLS_DC);
351 ZEND_API int use_filename(char *filename, uint filename_length CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
352 ZEND_API zend_op_array *compile_files(int mark_as_ref CLS_DC, int file_count, ...);
7a87fcb Zeev Suraski Thread safety patch. We're still not quite there but it compiles again,...
zsuraski authored
353 ZEND_API zend_op_array *v_compile_files(int mark_as_ref CLS_DC, int file_count, va_list files);
573b460 andigutmans Zend Library
andigutmans authored
354 ZEND_API zend_op_array *compile_string(zval *source_string CLS_DC);
67b4b3a Zeev Suraski - require() of a dynamic expression now has the standard require() seman...
zsuraski authored
355 ZEND_API zend_op_array *compile_filename(int mode, zval *filename CLS_DC ELS_DC);
1877b07 This causes link problems with anything higher than -O0.
Sascha Schumann authored
356 ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
357 ZEND_API void init_op_array(zend_op_array *op_array, int initial_ops_size);
358 ZEND_API void destroy_op_array(zend_op_array *op_array);
87ba08d Zeev Suraski Avoid leaking fd's in case of failures
zsuraski authored
359 ZEND_API void zend_close_file_handle(zend_file_handle *file_handle CLS_DC);
58153df Zeev Suraski - Improve the file handle closing code
zsuraski authored
360 ZEND_API void zend_open_file_dtor(zend_file_handle *fh);
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
361 END_EXTERN_C()
573b460 andigutmans Zend Library
andigutmans authored
362
81d901b Zeev Suraski Step 1 in nuking the garbage collector:
zsuraski authored
363 ZEND_API int destroy_zend_function(zend_function *function);
364 ZEND_API int destroy_zend_class(zend_class_entry *ce);
7c4a083 Zeev Suraski Various thread safety fixes and DLL updates
zsuraski authored
365 void zend_class_add_ref(zend_class_entry *ce);
366
81d901b Zeev Suraski Step 1 in nuking the garbage collector:
zsuraski authored
367 #define ZEND_FUNCTION_DTOR (int (*)(void *)) destroy_zend_function
368 #define ZEND_CLASS_DTOR (int (*)(void *)) destroy_zend_class
369
573b460 andigutmans Zend Library
andigutmans authored
370 zend_op *get_next_op(zend_op_array *op_array CLS_DC);
babad26 andigutmans - First step in fixing locking problem. Array fetches are now always don...
andigutmans authored
371 void init_op(zend_op *op CLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
372 int get_next_op_number(zend_op_array *op_array);
373 int print_class(zend_class_entry *class_entry);
374 void print_op_array(zend_op_array *op_array, int optimizations);
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
375 BEGIN_EXTERN_C()
573b460 andigutmans Zend Library
andigutmans authored
376 int pass_two(zend_op_array *op_array);
377 void pass_include_eval(zend_op_array *op_array);
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
378 END_EXTERN_C()
573b460 andigutmans Zend Library
andigutmans authored
379 zend_brk_cont_element *get_next_brk_cont_element(zend_op_array *op_array);
380
381
382 int zendlex(znode *zendlval CLS_DC);
383
384
385 #define ZEND_NOP 0
386
387 #define ZEND_ADD 1
388 #define ZEND_SUB 2
389 #define ZEND_MUL 3
390 #define ZEND_DIV 4
391 #define ZEND_MOD 5
392 #define ZEND_SL 6
393 #define ZEND_SR 7
394 #define ZEND_CONCAT 8
395 #define ZEND_BW_OR 9
396 #define ZEND_BW_AND 10
397 #define ZEND_BW_XOR 11
398 #define ZEND_BW_NOT 12
399 #define ZEND_BOOL_NOT 13
400 #define ZEND_BOOL_XOR 14
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
401 #define ZEND_IS_IDENTICAL 15
402 #define ZEND_IS_EQUAL 16
403 #define ZEND_IS_NOT_EQUAL 17
404 #define ZEND_IS_SMALLER 18
405 #define ZEND_IS_SMALLER_OR_EQUAL 19
406 #define ZEND_CAST 20
407 #define ZEND_QM_ASSIGN 21
408
409 #define ZEND_ASSIGN_ADD 22
410 #define ZEND_ASSIGN_SUB 23
411 #define ZEND_ASSIGN_MUL 24
412 #define ZEND_ASSIGN_DIV 25
413 #define ZEND_ASSIGN_MOD 26
414 #define ZEND_ASSIGN_SL 27
415 #define ZEND_ASSIGN_SR 28
416 #define ZEND_ASSIGN_CONCAT 29
417 #define ZEND_ASSIGN_BW_OR 30
418 #define ZEND_ASSIGN_BW_AND 31
419 #define ZEND_ASSIGN_BW_XOR 32
573b460 andigutmans Zend Library
andigutmans authored
420
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
421 #define ZEND_PRE_INC 33
422 #define ZEND_PRE_DEC 34
423 #define ZEND_POST_INC 35
424 #define ZEND_POST_DEC 36
573b460 andigutmans Zend Library
andigutmans authored
425
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
426 #define ZEND_ASSIGN 37
427 #define ZEND_ASSIGN_REF 38
428
429 #define ZEND_ECHO 39
430 #define ZEND_PRINT 40
431
432 #define ZEND_JMP 41
433 #define ZEND_JMPZ 42
434 #define ZEND_JMPNZ 43
435 #define ZEND_JMPZNZ 44
436 #define ZEND_JMPZ_EX 45
437 #define ZEND_JMPNZ_EX 46
438 #define ZEND_CASE 47
439 #define ZEND_SWITCH_FREE 48
440 #define ZEND_BRK 49
441 #define ZEND_CONT 50
442 #define ZEND_BOOL 51
443
444 #define ZEND_INIT_STRING 52
445 #define ZEND_ADD_CHAR 53
446 #define ZEND_ADD_STRING 54
447 #define ZEND_ADD_VAR 55
448
449 #define ZEND_BEGIN_SILENCE 56
450 #define ZEND_END_SILENCE 57
451
452 #define ZEND_INIT_FCALL_BY_NAME 58
453 #define ZEND_DO_FCALL 59
454 #define ZEND_DO_FCALL_BY_NAME 60
455 #define ZEND_RETURN 61
456
457 #define ZEND_RECV 62
458 #define ZEND_RECV_INIT 63
573b460 andigutmans Zend Library
andigutmans authored
459
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
460 #define ZEND_SEND_VAL 64
461 #define ZEND_SEND_VAR 65
462 #define ZEND_SEND_REF 66
573b460 andigutmans Zend Library
andigutmans authored
463
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
464 #define ZEND_NEW 67
465 #define ZEND_JMP_NO_CTOR 68
466 #define ZEND_FREE 69
573b460 andigutmans Zend Library
andigutmans authored
467
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
468 #define ZEND_INIT_ARRAY 70
469 #define ZEND_ADD_ARRAY_ELEMENT 71
573b460 andigutmans Zend Library
andigutmans authored
470
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
471 #define ZEND_INCLUDE_OR_EVAL 72
573b460 andigutmans Zend Library
andigutmans authored
472
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
473 #define ZEND_UNSET_VAR 73
474 #define ZEND_UNSET_DIM_OBJ 74
475 #define ZEND_ISSET_ISEMPTY 75
573b460 andigutmans Zend Library
andigutmans authored
476
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
477 #define ZEND_FE_RESET 76
478 #define ZEND_FE_FETCH 77
573b460 andigutmans Zend Library
andigutmans authored
479
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
480 #define ZEND_EXIT 78
573b460 andigutmans Zend Library
andigutmans authored
481
482
4ebf7b8 andigutmans - Fix comment as to Joey's findings
andigutmans authored
483 /* the following 15 opcodes are 5 groups of 3 opcodes each, and must
573b460 andigutmans Zend Library
andigutmans authored
484 * remain in that order!
485 */
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
486 #define ZEND_FETCH_R 79
487 #define ZEND_FETCH_DIM_R 80
488 #define ZEND_FETCH_OBJ_R 81
489 #define ZEND_FETCH_W 82
490 #define ZEND_FETCH_DIM_W 83
491 #define ZEND_FETCH_OBJ_W 84
492 #define ZEND_FETCH_RW 85
493 #define ZEND_FETCH_DIM_RW 86
494 #define ZEND_FETCH_OBJ_RW 87
495 #define ZEND_FETCH_IS 88
496 #define ZEND_FETCH_DIM_IS 89
497 #define ZEND_FETCH_OBJ_IS 90
498 #define ZEND_FETCH_FUNC_ARG 91
499 #define ZEND_FETCH_DIM_FUNC_ARG 92
500 #define ZEND_FETCH_OBJ_FUNC_ARG 93
501
502 #define ZEND_FETCH_DIM_TMP_VAR 94
503 #define ZEND_FETCH_CONSTANT 95
504
505 #define ZEND_DECLARE_FUNCTION_OR_CLASS 96
506
507 #define ZEND_EXT_STMT 97
508 #define ZEND_EXT_FCALL_BEGIN 98
509 #define ZEND_EXT_FCALL_END 99
510 #define ZEND_EXT_NOP 100
511
573b460 andigutmans Zend Library
andigutmans authored
512 /* end of block */
513
514
515
516
517 /* global/local fetches */
518 #define ZEND_FETCH_GLOBAL 0
519 #define ZEND_FETCH_LOCAL 1
520 #define ZEND_FETCH_STATIC 2
521
522 /* var status for backpatching */
06d04d1 andigutmans - Fix SEND_VAR problem after fetch'ing a variable and not knowing the fe...
andigutmans authored
523 #define BP_VAR_R 0
524 #define BP_VAR_W 1
525 #define BP_VAR_RW 2
526 #define BP_VAR_IS 3
527 #define BP_VAR_NA 4 /* if not applicable */
528 #define BP_VAR_FUNC_ARG 5
573b460 andigutmans Zend Library
andigutmans authored
529
530
531 #define ZEND_INTERNAL_FUNCTION 1
532 #define ZEND_USER_FUNCTION 2
533 #define ZEND_OVERLOADED_FUNCTION 3
2493f68 Zeev Suraski * Fix debugger+interactive mode bug
zsuraski authored
534 #define ZEND_EVAL_CODE 4
573b460 andigutmans Zend Library
andigutmans authored
535
536 #define ZEND_INTERNAL_CLASS 1
537 #define ZEND_USER_CLASS 2
538
539 #define ZEND_EVAL (1<<0)
540 #define ZEND_INCLUDE (1<<1)
5463dd5 andigutmans - Add use support (behaves like require, but will not use the same file ...
andigutmans authored
541 #define ZEND_IMPORT (1<<2)
67b4b3a Zeev Suraski - require() of a dynamic expression now has the standard require() seman...
zsuraski authored
542 #define ZEND_REQUIRE (1<<3)
573b460 andigutmans Zend Library
andigutmans authored
543
544 #define ZEND_ISSET (1<<0)
545 #define ZEND_ISEMPTY (1<<1)
546
547 #define ZEND_CT (1<<0)
548 #define ZEND_RT (1<<1)
549
550
58153df Zeev Suraski - Improve the file handle closing code
zsuraski authored
551 #define ZEND_HANDLE_FILENAME 0
552 #define ZEND_HANDLE_FD 1
553 #define ZEND_HANDLE_FP 2
554 #define ZEND_HANDLE_STDIOSTREAM 3
555 #define ZEND_HANDLE_FSTREAM 4
573b460 andigutmans Zend Library
andigutmans authored
556
d894cf4 Zeev Suraski Support definition of classes that are derived from classes that are def...
zsuraski authored
557 #define ZEND_DECLARE_CLASS 1
558 #define ZEND_DECLARE_FUNCTION 2
559 #define ZEND_DECLARE_INHERITED_CLASS 3
b0bfa45 Zeev Suraski * Fix all hash checks that checked Bucket.arKey for NULL, when it was ch...
zsuraski authored
560
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
561 #define ZEND_FETCH_STANDARD 0
cccd244 Zeev Suraski Get rid of AiCount completely
zsuraski authored
562 #define ZEND_FETCH_ADD_LOCK 1
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
563
741b816 Zeev Suraski * Support getThis() for internal functions.
zsuraski authored
564 #define ZEND_MEMBER_FUNC_CALL 1<<0
565 #define ZEND_CTOR_CALL 1<<1
566
6ec1acb Zeev Suraski Phase 3:
zsuraski authored
567
59d5462 andigutmans - Stop using the locking mechanism and start using refcount.
andigutmans authored
568 #define AI_USE_PTR(ai) \
569 if ((ai).ptr_ptr) { \
570 (ai).ptr = *((ai).ptr_ptr); \
571 (ai).ptr_ptr = &((ai).ptr); \
572 } else { \
573 (ai).ptr = NULL; \
574 }
575
86357a9 andigutmans - Move is_ref back to being an unsigned char and not a bit field.
andigutmans authored
576 #define PZVAL_IS_REF(z) ((z)->is_ref)
2a6da78 Zeev Suraski Step 4:
zsuraski authored
577
59d5462 andigutmans - Stop using the locking mechanism and start using refcount.
andigutmans authored
578 #define PZVAL_LOCK(z) ((z)->refcount++)
ced9cee Zeev Suraski - Implement return by reference:
zsuraski authored
579 #define PZVAL_UNLOCK(z) { ((z)->refcount--); \
580 if (!(z)->refcount && !EG(suspend_garbage)) { \
581 EG(garbage)[EG(garbage_ptr)++] = (z); \
582 if (EG(garbage_ptr) == 4) { \
583 zval_dtor(EG(garbage)[0]); \
584 efree(EG(garbage)[0]); \
585 zval_dtor(EG(garbage)[1]); \
586 efree(EG(garbage)[1]); \
587 EG(garbage)[0] = EG(garbage)[2]; \
588 EG(garbage)[1] = EG(garbage)[3]; \
589 EG(garbage_ptr) -= 2; \
590 } \
591 } \
1c0f136 andigutmans - Hooray. This might actually work. (I hope)
andigutmans authored
592 }
593
ced9cee Zeev Suraski - Implement return by reference:
zsuraski authored
594 #define SUSPEND_GARBAGE() (EG(suspend_garbage)=1)
595 #define RESUME_GARBAGE() (EG(suspend_garbage)=0)
596
59d5462 andigutmans - Stop using the locking mechanism and start using refcount.
andigutmans authored
597 #define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!((pzn)->u.EA.type & EXT_TYPE_UNUSED)) { PZVAL_LOCK(pzv); }
6ec1acb Zeev Suraski Phase 3:
zsuraski authored
598
6d988ec andigutmans - Add support for BYREF_FORCE_REST
andigutmans authored
599
600 /* Lost In Stupid Parentheses */
601 #define ARG_SHOULD_BE_SENT_BY_REF(offset, conduct_check, arg_types) \
602 ( \
603 conduct_check \
604 && arg_types \
605 && \
606 ( \
607 ( \
608 offset<=arg_types[0] \
609 && arg_types[offset]==BYREF_FORCE \
610 ) \
611 || ( \
612 offset>=arg_types[0] \
613 && arg_types[arg_types[0]]==BYREF_FORCE_REST \
614 ) \
615 ) \
616 )
617
ced9cee Zeev Suraski - Implement return by reference:
zsuraski authored
618 #define ZEND_RETURN_VAL 0
619 #define ZEND_RETURN_REF 1
620
573b460 andigutmans Zend Library
andigutmans authored
621 #endif /* _COMPILE_H */
Something went wrong with that request. Please try again.