Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 653 lines (490 sloc) 21.196 kb
573b460 andigutmans Zend Library
andigutmans authored
1 /*
2 +----------------------------------------------------------------------+
3 | Zend Engine |
4 +----------------------------------------------------------------------+
d2c9e80 andigutmans - Update copyright year
andigutmans authored
5 | Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
573b460 andigutmans Zend Library
andigutmans authored
6 +----------------------------------------------------------------------+
d863d52 Update headers.
Sebastian Bergmann authored
7 | This source file is subject to version 2.00 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 |
d863d52 Update headers.
Sebastian Bergmann authored
10 | http://www.zend.com/license/2_00.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
a617217 Replace macros which begin with an underscore through an appropiately
Sascha Schumann authored
21 #ifndef ZEND_COMPILE_H
22 #define ZEND_COMPILE_H
573b460 andigutmans Zend Library
andigutmans authored
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
573b460 andigutmans Zend Library
andigutmans authored
34 #define FREE_PNODE(znode) zval_dtor(&znode->u.constant);
2eabb14 andigutmans - Merge the NAMESPACES_BRANCH. It wasn't a good idea to have a branch wh...
andigutmans authored
35 #define FREE_OP(Ts, op, should_free) if (should_free) zval_dtor(&Ts[(op)->u.var].tmp_var);
573b460 andigutmans Zend Library
andigutmans authored
36
1ccf940 andigutmans - Move SET_UNUSED() to header
andigutmans authored
37 #define SET_UNUSED(op) (op).op_type = IS_UNUSED
573b460 andigutmans Zend Library
andigutmans authored
38
85b4df5 Zeev Suraski Improved interactive mode - it is now available in all builds, without a...
zsuraski authored
39 #define INC_BPC(op_array) if (CG(interactive)) { ((op_array)->backpatch_count++); }
40 #define DEC_BPC(op_array) if (CG(interactive)) { ((op_array)->backpatch_count--); }
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
41 #define HANDLE_INTERACTIVE() if (CG(interactive)) { execute_new_code(TSRMLS_C); }
573b460 andigutmans Zend Library
andigutmans authored
42
43 typedef struct _zend_op_array zend_op_array;
44
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
45 typedef struct _znode {
573b460 andigutmans Zend Library
andigutmans authored
46 int op_type;
560606d andigutmans - Get rid of warning and C++ comments
andigutmans authored
47 zend_llist *throw_list; /* Try and save this space later on */
573b460 andigutmans Zend Library
andigutmans authored
48 union {
49 zval constant;
50
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
51 zend_uint var;
232b904 Zeev Suraski Clean up last/size definitions
zsuraski authored
52 zend_uint opline_num; /* Needs to be signed */
573b460 andigutmans Zend Library
andigutmans authored
53 zend_op_array *op_array;
26578c3 andigutmans - Initial support for nested class definitions
andigutmans authored
54 zend_class_entry *previously_active_class_entry; /* Used at compile-time */
573b460 andigutmans Zend Library
andigutmans authored
55 struct {
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
56 zend_uint var; /* dummy */
57 zend_uint type;
573b460 andigutmans Zend Library
andigutmans authored
58 } EA;
59 } u;
60 } znode;
61
62
63 typedef struct _zend_op {
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
64 zend_uchar opcode;
573b460 andigutmans Zend Library
andigutmans authored
65 znode result;
66 znode op1;
67 znode op2;
39a7f4c Zeev Suraski This patch is a go. Not fully optimized yet, but working properly.
zsuraski authored
68 ulong extended_value;
573b460 andigutmans Zend Library
andigutmans authored
69 uint lineno;
70 } zend_op;
71
72
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
73 typedef struct _zend_brk_cont_element {
573b460 andigutmans Zend Library
andigutmans authored
74 int cont;
75 int brk;
76 int parent;
77 } zend_brk_cont_element;
78
79
80 struct _zend_op_array {
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
81 zend_uchar type; /* MUST be the first element of this struct! */
573b460 andigutmans Zend Library
andigutmans authored
82
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
83 zend_uchar *arg_types; /* MUST be the second element of this struct! */
7f35cfd Zeev Suraski *** empty log message ***
zsuraski authored
84 char *function_name; /* MUST be the third element of this struct! */
573b460 andigutmans Zend Library
andigutmans authored
85
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
86 zend_uint *refcount;
573b460 andigutmans Zend Library
andigutmans authored
87
88 zend_op *opcodes;
232b904 Zeev Suraski Clean up last/size definitions
zsuraski authored
89 zend_uint last, size;
573b460 andigutmans Zend Library
andigutmans authored
90
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
91 zend_uint T;
573b460 andigutmans Zend Library
andigutmans authored
92
93 zend_brk_cont_element *brk_cont_array;
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
94 zend_uint last_brk_cont;
95 zend_uint current_brk_cont;
96 zend_bool uses_globals;
573b460 andigutmans Zend Library
andigutmans authored
97
98 /* static variables support */
99 HashTable *static_variables;
100
85b4df5 Zeev Suraski Improved interactive mode - it is now available in all builds, without a...
zsuraski authored
101 zend_op *start_op;
573b460 andigutmans Zend Library
andigutmans authored
102 int backpatch_count;
85b4df5 Zeev Suraski Improved interactive mode - it is now available in all builds, without a...
zsuraski authored
103
ced9cee Zeev Suraski - Implement return by reference:
zsuraski authored
104 zend_bool return_reference;
42d1529 Zeev Suraski Fix possible bug with extension dtors being called without the ctors bei...
zsuraski authored
105 zend_bool done_pass_two;
573b460 andigutmans Zend Library
andigutmans authored
106
c06692e Zeev Suraski The patch we promised - redesigned the compilation/execution API:
zsuraski authored
107 char *filename;
108
b5f5e9a andigutmans - Optimize the execute stack a bit.
andigutmans authored
109 void *reserved[ZEND_MAX_RESERVED_RESOURCES];
573b460 andigutmans Zend Library
andigutmans authored
110 };
111
112
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
113 typedef struct _zend_internal_function {
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
114 zend_uchar type; /* MUST be the first element of this struct! */
573b460 andigutmans Zend Library
andigutmans authored
115
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
116 zend_uchar *arg_types; /* MUST be the second element of this struct */
7f35cfd Zeev Suraski *** empty log message ***
zsuraski authored
117 char *function_name; /* MUST be the third element of this struct */
573b460 andigutmans Zend Library
andigutmans authored
118
119 void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
120 } zend_internal_function;
121
122
e663d85 Zeev Suraski Fix object overloading support
zsuraski authored
123 typedef struct _zend_overloaded_function {
124 zend_uchar type; /* MUST be the first element of this struct! */
125
126 zend_uchar *arg_types; /* MUST be the second element of this struct */
127 char *function_name; /* MUST be the third element of this struct */
128
129 zend_uint var;
130 } zend_overloaded_function;
131
132
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
133 typedef union _zend_function {
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
134 zend_uchar type; /* MUST be the first element of this struct! */
573b460 andigutmans Zend Library
andigutmans authored
135 struct {
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
136 zend_uchar type; /* never used */
137 zend_uchar *arg_types;
7f35cfd Zeev Suraski *** empty log message ***
zsuraski authored
138 char *function_name;
573b460 andigutmans Zend Library
andigutmans authored
139 } common;
140
141 zend_op_array op_array;
142 zend_internal_function internal_function;
e663d85 Zeev Suraski Fix object overloading support
zsuraski authored
143 zend_overloaded_function overloaded_function;
573b460 andigutmans Zend Library
andigutmans authored
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 {
61379fe andigutmans - Another zend_uchar
andigutmans authored
169 zend_uchar type;
573b460 andigutmans Zend Library
andigutmans authored
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 } handle;
9baad80 Zeev Suraski - Break the zend->PHP dependency introduced by the .php extension for us...
zsuraski authored
176 zend_bool free_filename;
573b460 andigutmans Zend Library
andigutmans authored
177 } zend_file_handle;
178
179
180
181 #define IS_CONST (1<<0)
182 #define IS_TMP_VAR (1<<1)
183 #define IS_VAR (1<<2)
184 #define IS_UNUSED (1<<3) /* Unused variable */
185
186
187 #define EXT_TYPE_UNUSED (1<<0)
188
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
189 #include "zend_globals.h"
190
ad115d2 Zeev Suraski Fix require()
zsuraski authored
191 BEGIN_EXTERN_C()
192
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
193 void init_compiler(TSRMLS_D);
194 void shutdown_compiler(TSRMLS_D);
195 void zend_init_compiler_data_structures(TSRMLS_D);
573b460 andigutmans Zend Library
andigutmans authored
196
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
197 extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
198
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
199 void zend_activate(TSRMLS_D);
200 void zend_deactivate(TSRMLS_D);
d76cf1d Zeev Suraski More TSRMLS_FETCH work
zsuraski authored
201 void zend_activate_modules(TSRMLS_D);
b577038 Zeev Suraski Avoid TSRMLS_FETCH()'s (still lots of work left)
zsuraski authored
202 void zend_deactivate_modules(TSRMLS_D);
dc0e663 Zeev Suraski Allow module startup to be separate from the compiler/executor startup
zsuraski authored
203
ed06a70 Zeev Suraski * Centralized shutdown
zsuraski authored
204
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
205 int lex_scan(zval *zendlval TSRMLS_DC);
206 void startup_scanner(TSRMLS_D);
207 void shutdown_scanner(TSRMLS_D);
573b460 andigutmans Zend Library
andigutmans authored
208
4187439 Zeev Suraski More TSRMLS_FETCH work
zsuraski authored
209 ZEND_API char *zend_set_compiled_filename(char *new_compiled_filename TSRMLS_DC);
210 ZEND_API void zend_restore_compiled_filename(char *original_compiled_filename TSRMLS_DC);
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
211 ZEND_API char *zend_get_compiled_filename(TSRMLS_D);
212 ZEND_API int zend_get_compiled_lineno(TSRMLS_D);
573b460 andigutmans Zend Library
andigutmans authored
213
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
214 #ifdef ZTS
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
215 const char *zend_get_zendtext(TSRMLS_D);
216 int zend_get_zendleng(TSRMLS_D);
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
217 #endif
218
573b460 andigutmans Zend Library
andigutmans authored
219
220 /* parser-driven code generators */
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
221 void zend_do_binary_op(int op, znode *result, znode *op1, znode *op2 TSRMLS_DC);
222 void zend_do_unary_op(int op, znode *result, znode *op1 TSRMLS_DC);
223 void zend_do_binary_assign_op(int op, znode *result, znode *op1, znode *op2 TSRMLS_DC);
224 void zend_do_assign(znode *result, znode *variable, znode *value TSRMLS_DC);
225 void zend_do_assign_ref(znode *result, znode *lvar, znode *rvar TSRMLS_DC);
226 void fetch_simple_variable(znode *result, znode *varname, int bp TSRMLS_DC);
227 void fetch_simple_variable_ex(znode *result, znode *varname, int bp, int op TSRMLS_DC);
228 void zend_do_indirect_references(znode *result, znode *num_references, znode *variable TSRMLS_DC);
229 void zend_do_fetch_global_or_static_variable(znode *varname, znode *static_assignment, int fetch_type TSRMLS_DC);
230 void zend_do_fetch_globals(znode *varname TSRMLS_DC);
231
232 void fetch_array_begin(znode *result, znode *varname, znode *first_dim TSRMLS_DC);
233 void fetch_array_dim(znode *result, znode *parent, znode *dim TSRMLS_DC);
234 void fetch_string_offset(znode *result, znode *parent, znode *offset TSRMLS_DC);
d2da63f andigutmans - Support static members. The following script works:
andigutmans authored
235 void zend_do_fetch_static_member(znode *class TSRMLS_DC);
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
236 void zend_do_print(znode *result, znode *arg TSRMLS_DC);
237 void zend_do_echo(znode *arg TSRMLS_DC);
8802964 * fix some casts
Sascha Schumann authored
238 typedef int (*unary_op_type)(zval *, zval *);
239 ZEND_API unary_op_type get_unary_op(int opcode);
573b460 andigutmans Zend Library
andigutmans authored
240 ZEND_API void *get_binary_op(int opcode);
241
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
242 void zend_do_while_cond(znode *expr, znode *close_bracket_token TSRMLS_DC);
243 void zend_do_while_end(znode *while_token, znode *close_bracket_token TSRMLS_DC);
244 void zend_do_do_while_begin(TSRMLS_D);
245 void zend_do_do_while_end(znode *do_token, znode *expr_open_bracket, znode *expr TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
246
247
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
248 void zend_do_if_cond(znode *cond, znode *closing_bracket_token TSRMLS_DC);
249 void zend_do_if_after_statement(znode *closing_bracket_token, unsigned char initialize TSRMLS_DC);
250 void zend_do_if_end(TSRMLS_D);
573b460 andigutmans Zend Library
andigutmans authored
251
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
252 void zend_do_for_cond(znode *expr, znode *second_semicolon_token TSRMLS_DC);
253 void zend_do_for_before_statement(znode *cond_start, znode *second_semicolon_token TSRMLS_DC);
254 void zend_do_for_end(znode *second_semicolon_token TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
255
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
256 void zend_do_pre_incdec(znode *result, znode *op1, int op TSRMLS_DC);
257 void zend_do_post_incdec(znode *result, znode *op1, int op TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
258
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
259 void zend_do_begin_variable_parse(TSRMLS_D);
260 void zend_do_end_variable_parse(int type, int arg_offset TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
261
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
262 void zend_do_free(znode *op1 TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
263
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
264 void zend_do_init_string(znode *result TSRMLS_DC);
265 void zend_do_add_char(znode *result, znode *op1, znode *op2 TSRMLS_DC);
266 void zend_do_add_string(znode *result, znode *op1, znode *op2 TSRMLS_DC);
267 void zend_do_add_variable(znode *result, znode *op1, znode *op2 TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
268
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
269 void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference TSRMLS_DC);
270 void zend_do_end_function_declaration(znode *function_token TSRMLS_DC);
271 void zend_do_receive_arg(int op, znode *var, znode *offset, znode *initialization, unsigned char pass_type TSRMLS_DC);
272 int zend_do_begin_function_call(znode *function_name TSRMLS_DC);
cb1a40f andigutmans - Preliminary patch for method() dereferencing
andigutmans authored
273 void zend_do_begin_method_call(znode *object, znode *function_name TSRMLS_DC);
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
274 void zend_do_begin_dynamic_function_call(znode *function_name TSRMLS_DC);
26578c3 andigutmans - Initial support for nested class definitions
andigutmans authored
275 void do_fetch_class(znode *result, znode *class_entry, znode *class_name TSRMLS_DC);
e858d27 andigutmans - Initial support for class constants. There are still a few semantic
andigutmans authored
276 void do_fetch_class_name(znode *result, znode *class_entry, znode *class_name TSRMLS_DC);
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
277 void zend_do_begin_class_member_function_call(znode *class_name, znode *function_name TSRMLS_DC);
278 void zend_do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method, int is_dynamic_fcall TSRMLS_DC);
279 void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC);
29f5dbe andigutmans - Initial support for exceptions.
andigutmans authored
280
6197021 andigutmans - Make it compile in thread-safe mode.
andigutmans authored
281 void zend_do_try(znode *try_token TSRMLS_DC);
282 void zend_do_begin_catch(znode *try_token, znode *catch_var TSRMLS_DC);
283 void zend_do_end_catch(znode *try_token TSRMLS_DC);
284 void zend_do_throw(znode *expr TSRMLS_DC);
29f5dbe andigutmans - Initial support for exceptions.
andigutmans authored
285
ef5b7e2 Zeev Suraski Generate better warnings for class/function redefinitions
zsuraski authored
286 ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time);
f1a9920 Zeev Suraski Maintain consistency
zsuraski authored
287 void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce);
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
288 void zend_do_early_binding(TSRMLS_D);
573b460 andigutmans Zend Library
andigutmans authored
289
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
290 void zend_do_pass_param(znode *param, int op, int offset TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
291
292
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
293 void zend_do_boolean_or_begin(znode *expr1, znode *op_token TSRMLS_DC);
294 void zend_do_boolean_or_end(znode *result, znode *expr1, znode *expr2, znode *op_token TSRMLS_DC);
295 void zend_do_boolean_and_begin(znode *expr1, znode *op_token TSRMLS_DC);
296 void zend_do_boolean_and_end(znode *result, znode *expr1, znode *expr2, znode *op_token TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
297
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
298 void zend_do_brk_cont(int op, znode *expr TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
299
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
300 void zend_do_switch_cond(znode *cond TSRMLS_DC);
301 void zend_do_switch_end(znode *case_list TSRMLS_DC);
302 void zend_do_case_before_statement(znode *case_list, znode *case_token, znode *case_expr TSRMLS_DC);
303 void zend_do_case_after_statement(znode *result, znode *case_token TSRMLS_DC);
304 void zend_do_default_before_statement(znode *case_list, znode *default_token TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
305
74efc41 andigutmans - Make classes have scope and function/constant lookups default to the c...
andigutmans authored
306 void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znode *parent_class_name TSRMLS_DC);
26578c3 andigutmans - Initial support for nested class definitions
andigutmans authored
307 void zend_do_end_class_declaration(znode *class_token TSRMLS_DC);
7cd6ccc andigutmans - Support static $var = 0; style initialization of static class
andigutmans authored
308 void zend_do_declare_property(znode *var_name, znode *value, int declaration_type TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
309
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
310 void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
311
312
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
313 void zend_do_push_object(znode *object TSRMLS_DC);
314 void zend_do_pop_object(znode *object TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
315
316
a332f82 andigutmans - Support instantiation of nested class. The following script now should
andigutmans authored
317 void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC);
318 void zend_do_end_new_object(znode *result, znode *new_token, znode *argument_list TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
319
e858d27 andigutmans - Initial support for class constants. There are still a few semantic
andigutmans authored
320 void zend_do_fetch_constant(znode *result, znode *constant_container, znode *constant_name, int mode TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
321
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
322 void zend_do_shell_exec(znode *result, znode *cmd TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
323
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
324 void zend_do_init_array(znode *result, znode *expr, znode *offset, int is_ref TSRMLS_DC);
325 void zend_do_add_array_element(znode *result, znode *expr, znode *offset, int is_ref TSRMLS_DC);
f1a9920 Zeev Suraski Maintain consistency
zsuraski authored
326 void zend_do_add_static_array_element(znode *result, znode *offset, znode *expr);
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
327 void zend_do_list_init(TSRMLS_D);
328 void zend_do_list_end(znode *result, znode *expr TSRMLS_DC);
329 void zend_do_add_list_element(znode *element TSRMLS_DC);
330 void zend_do_new_list_begin(TSRMLS_D);
331 void zend_do_new_list_end(TSRMLS_D);
573b460 andigutmans Zend Library
andigutmans authored
332
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
333 void zend_do_cast(znode *result, znode *expr, int type TSRMLS_DC);
334 void zend_do_include_or_eval(int type, znode *result, znode *op1 TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
335
5af7770 andigutmans - Sync Engine2 CVS with latest Engine CVS
andigutmans authored
336 void zend_do_unset(znode *variable, int type TSRMLS_DC);
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
337 void zend_do_isset_or_isempty(int type, znode *result, znode *variable TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
338
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
339 void zend_do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token, int variable TSRMLS_DC);
340 void zend_do_foreach_cont(znode *value, znode *key, znode *as_token TSRMLS_DC);
341 void zend_do_foreach_end(znode *foreach_token, znode *open_brackets_token TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
342
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
343 void zend_do_declare_begin(TSRMLS_D);
344 void zend_do_declare_stmt(znode *var, znode *val TSRMLS_DC);
345 void zend_do_declare_end(TSRMLS_D);
fafbf6d Zeev Suraski - Implement declare() with declarables framework
zsuraski authored
346
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
347 void zend_do_end_heredoc(TSRMLS_D);
573b460 andigutmans Zend Library
andigutmans authored
348
2eabb14 andigutmans - Merge the NAMESPACES_BRANCH. It wasn't a good idea to have a branch wh...
andigutmans authored
349 void do_namespace(znode *namespace TSRMLS_DC);
350
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
351 void zend_do_exit(znode *result, znode *message TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
352
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
353 void zend_do_begin_silence(znode *strudel_token TSRMLS_DC);
354 void zend_do_end_silence(znode *strudel_token TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
355
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
356 void zend_do_begin_qm_op(znode *cond, znode *qm_token TSRMLS_DC);
357 void zend_do_qm_true(znode *true_value, znode *qm_token, znode *colon_token TSRMLS_DC);
358 void zend_do_qm_false(znode *result, znode *false_value, znode *qm_token, znode *colon_token TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
359
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
360 void zend_do_extended_info(TSRMLS_D);
361 void zend_do_extended_fcall_begin(TSRMLS_D);
362 void zend_do_extended_fcall_end(TSRMLS_D);
573b460 andigutmans Zend Library
andigutmans authored
363
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
364 void zend_do_ticks(TSRMLS_D);
fafbf6d Zeev Suraski - Implement declare() with declarables framework
zsuraski authored
365
727398b andigutmans Add to the API
andigutmans authored
366 ZEND_API void function_add_ref(zend_function *function);
0b7a9ce Zeev Suraski - Fix Win32 compilation (Use winsock2.h from now on)
zsuraski authored
367
7c4a083 Zeev Suraski Various thread safety fixes and DLL updates
zsuraski authored
368 #define INITIAL_OP_ARRAY_SIZE 64
369
573b460 andigutmans Zend Library
andigutmans authored
370
7b0d92d Zeev Suraski Unify the names of these last 3 files...
zsuraski authored
371 /* helper functions in zend_language_scanner.l */
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
372 ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC);
373 ZEND_API zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC);
374 ZEND_API zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC);
819ea51 Zeev Suraski MFZE1
zsuraski authored
375 ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...);
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
376 ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC);
377 ZEND_API void init_op_array(zend_op_array *op_array, int type, int initial_ops_size TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
378 ZEND_API void destroy_op_array(zend_op_array *op_array);
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
379 ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC);
5090b1e Stanislav Malyshev Fix zend_fiel_handle handling. Should fix URL include
smalyshev authored
380 ZEND_API void zend_file_handle_dtor(zend_file_handle *fh);
573b460 andigutmans Zend Library
andigutmans authored
381
62114c1 Zeev Suraski Destructors no longer return ints, the low level problem it was intended...
zsuraski authored
382 ZEND_API void destroy_zend_function(zend_function *function);
383 ZEND_API void destroy_zend_class(zend_class_entry *ce);
7c4a083 Zeev Suraski Various thread safety fixes and DLL updates
zsuraski authored
384 void zend_class_add_ref(zend_class_entry *ce);
385
62114c1 Zeev Suraski Destructors no longer return ints, the low level problem it was intended...
zsuraski authored
386 #define ZEND_FUNCTION_DTOR (void (*)(void *)) destroy_zend_function
387 #define ZEND_CLASS_DTOR (void (*)(void *)) destroy_zend_class
81d901b Zeev Suraski Step 1 in nuking the garbage collector:
zsuraski authored
388
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
389 zend_op *get_next_op(zend_op_array *op_array TSRMLS_DC);
390 void init_op(zend_op *op TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
391 int get_next_op_number(zend_op_array *op_array);
d76cf1d Zeev Suraski More TSRMLS_FETCH work
zsuraski authored
392 int print_class(zend_class_entry *class_entry TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
393 void print_op_array(zend_op_array *op_array, int optimizations);
d76cf1d Zeev Suraski More TSRMLS_FETCH work
zsuraski authored
394 int pass_two(zend_op_array *op_array TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
395 zend_brk_cont_element *get_next_brk_cont_element(zend_op_array *op_array);
4187439 Zeev Suraski More TSRMLS_FETCH work
zsuraski authored
396 ZEND_API zend_bool zend_is_compiling(TSRMLS_D);
b577038 Zeev Suraski Avoid TSRMLS_FETCH()'s (still lots of work left)
zsuraski authored
397 ZEND_API char *zend_make_compiled_string_description(char *name TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
398
9d11db1 andigutmans - Merge new $_GET, $_POST etc. patch from Engine 1 tree
andigutmans authored
399 int zend_register_auto_global(char *name, uint name_len TSRMLS_DC);
400
b4f3b9d Zeev Suraski Redesigned thread safety mechanism - nua nua
zsuraski authored
401 int zendlex(znode *zendlval TSRMLS_DC);
573b460 andigutmans Zend Library
andigutmans authored
402
403 #define ZEND_NOP 0
404
405 #define ZEND_ADD 1
406 #define ZEND_SUB 2
407 #define ZEND_MUL 3
408 #define ZEND_DIV 4
409 #define ZEND_MOD 5
410 #define ZEND_SL 6
411 #define ZEND_SR 7
412 #define ZEND_CONCAT 8
413 #define ZEND_BW_OR 9
414 #define ZEND_BW_AND 10
415 #define ZEND_BW_XOR 11
416 #define ZEND_BW_NOT 12
417 #define ZEND_BOOL_NOT 13
418 #define ZEND_BOOL_XOR 14
98f0254 andigutmans - Move IS_IDENTICAL next to IS_EQUAL
andigutmans authored
419 #define ZEND_IS_IDENTICAL 15
521c8af Added !== (is not identical) operator.
Torben Wilson authored
420 #define ZEND_IS_NOT_IDENTICAL 16
421 #define ZEND_IS_EQUAL 17
422 #define ZEND_IS_NOT_EQUAL 18
423 #define ZEND_IS_SMALLER 19
424 #define ZEND_IS_SMALLER_OR_EQUAL 20
425 #define ZEND_CAST 21
426 #define ZEND_QM_ASSIGN 22
427
428 #define ZEND_ASSIGN_ADD 23
429 #define ZEND_ASSIGN_SUB 24
430 #define ZEND_ASSIGN_MUL 25
431 #define ZEND_ASSIGN_DIV 26
432 #define ZEND_ASSIGN_MOD 27
433 #define ZEND_ASSIGN_SL 28
434 #define ZEND_ASSIGN_SR 29
435 #define ZEND_ASSIGN_CONCAT 30
436 #define ZEND_ASSIGN_BW_OR 31
437 #define ZEND_ASSIGN_BW_AND 32
438 #define ZEND_ASSIGN_BW_XOR 33
573b460 andigutmans Zend Library
andigutmans authored
439
521c8af Added !== (is not identical) operator.
Torben Wilson authored
440 #define ZEND_PRE_INC 34
441 #define ZEND_PRE_DEC 35
442 #define ZEND_POST_INC 36
443 #define ZEND_POST_DEC 37
444
445 #define ZEND_ASSIGN 38
446 #define ZEND_ASSIGN_REF 39
447
448 #define ZEND_ECHO 40
449 #define ZEND_PRINT 41
450
451 #define ZEND_JMP 42
452 #define ZEND_JMPZ 43
453 #define ZEND_JMPNZ 44
454 #define ZEND_JMPZNZ 45
455 #define ZEND_JMPZ_EX 46
456 #define ZEND_JMPNZ_EX 47
457 #define ZEND_CASE 48
458 #define ZEND_SWITCH_FREE 49
459 #define ZEND_BRK 50
460 #define ZEND_CONT 51
461 #define ZEND_BOOL 52
462
463 #define ZEND_INIT_STRING 53
464 #define ZEND_ADD_CHAR 54
465 #define ZEND_ADD_STRING 55
466 #define ZEND_ADD_VAR 56
467
468 #define ZEND_BEGIN_SILENCE 57
469 #define ZEND_END_SILENCE 58
470
471 #define ZEND_INIT_FCALL_BY_NAME 59
472 #define ZEND_DO_FCALL 60
473 #define ZEND_DO_FCALL_BY_NAME 61
474 #define ZEND_RETURN 62
475
476 #define ZEND_RECV 63
477 #define ZEND_RECV_INIT 64
573b460 andigutmans Zend Library
andigutmans authored
478
521c8af Added !== (is not identical) operator.
Torben Wilson authored
479 #define ZEND_SEND_VAL 65
480 #define ZEND_SEND_VAR 66
481 #define ZEND_SEND_REF 67
573b460 andigutmans Zend Library
andigutmans authored
482
521c8af Added !== (is not identical) operator.
Torben Wilson authored
483 #define ZEND_NEW 68
484 #define ZEND_JMP_NO_CTOR 69
485 #define ZEND_FREE 70
573b460 andigutmans Zend Library
andigutmans authored
486
521c8af Added !== (is not identical) operator.
Torben Wilson authored
487 #define ZEND_INIT_ARRAY 71
488 #define ZEND_ADD_ARRAY_ELEMENT 72
573b460 andigutmans Zend Library
andigutmans authored
489
521c8af Added !== (is not identical) operator.
Torben Wilson authored
490 #define ZEND_INCLUDE_OR_EVAL 73
573b460 andigutmans Zend Library
andigutmans authored
491
521c8af Added !== (is not identical) operator.
Torben Wilson authored
492 #define ZEND_UNSET_VAR 74
493 #define ZEND_UNSET_DIM_OBJ 75
494 #define ZEND_ISSET_ISEMPTY 76
573b460 andigutmans Zend Library
andigutmans authored
495
521c8af Added !== (is not identical) operator.
Torben Wilson authored
496 #define ZEND_FE_RESET 77
497 #define ZEND_FE_FETCH 78
573b460 andigutmans Zend Library
andigutmans authored
498
521c8af Added !== (is not identical) operator.
Torben Wilson authored
499 #define ZEND_EXIT 79
573b460 andigutmans Zend Library
andigutmans authored
500
501
7fa17e8 andigutmans - Put in the infrastructure for the unset() fix. Right now it has the ol...
andigutmans authored
502 /* the following 18 opcodes are 6 groups of 3 opcodes each, and must
573b460 andigutmans Zend Library
andigutmans authored
503 * remain in that order!
504 */
521c8af Added !== (is not identical) operator.
Torben Wilson authored
505 #define ZEND_FETCH_R 80
506 #define ZEND_FETCH_DIM_R 81
507 #define ZEND_FETCH_OBJ_R 82
508 #define ZEND_FETCH_W 83
509 #define ZEND_FETCH_DIM_W 84
510 #define ZEND_FETCH_OBJ_W 85
511 #define ZEND_FETCH_RW 86
512 #define ZEND_FETCH_DIM_RW 87
513 #define ZEND_FETCH_OBJ_RW 88
514 #define ZEND_FETCH_IS 89
515 #define ZEND_FETCH_DIM_IS 90
516 #define ZEND_FETCH_OBJ_IS 91
517 #define ZEND_FETCH_FUNC_ARG 92
518 #define ZEND_FETCH_DIM_FUNC_ARG 93
519 #define ZEND_FETCH_OBJ_FUNC_ARG 94
520 #define ZEND_FETCH_UNSET 95
521 #define ZEND_FETCH_DIM_UNSET 96
522 #define ZEND_FETCH_OBJ_UNSET 97
523
524 #define ZEND_FETCH_DIM_TMP_VAR 98
525 #define ZEND_FETCH_CONSTANT 99
526
527 #define ZEND_DECLARE_FUNCTION_OR_CLASS 100
528
529 #define ZEND_EXT_STMT 101
530 #define ZEND_EXT_FCALL_BEGIN 102
531 #define ZEND_EXT_FCALL_END 103
532 #define ZEND_EXT_NOP 104
533
534 #define ZEND_TICKS 105
fafbf6d Zeev Suraski - Implement declare() with declarables framework
zsuraski authored
535
d0fbddc Zeev Suraski Fix a corruption bug, when erroneously allowing to send non-variables by...
zsuraski authored
536 #define ZEND_SEND_VAR_NO_REF 106
537
29f5dbe andigutmans - Initial support for exceptions.
andigutmans authored
538 #define ZEND_CATCH 107
539 #define ZEND_THROW 108
540
2eabb14 andigutmans - Merge the NAMESPACES_BRANCH. It wasn't a good idea to have a branch wh...
andigutmans authored
541 #define ZEND_NAMESPACE 109
26578c3 andigutmans - Initial support for nested class definitions
andigutmans authored
542 #define ZEND_FETCH_CLASS 110
573b460 andigutmans Zend Library
andigutmans authored
543 /* end of block */
544
545
546
547
548 /* global/local fetches */
d2da63f andigutmans - Support static members. The following script works:
andigutmans authored
549 #define ZEND_FETCH_GLOBAL 0
550 #define ZEND_FETCH_LOCAL 1
551 #define ZEND_FETCH_STATIC 2
552 #define ZEND_FETCH_STATIC_MEMBER 3
573b460 andigutmans Zend Library
andigutmans authored
553
74efc41 andigutmans - Make classes have scope and function/constant lookups default to the c...
andigutmans authored
554 /* class fetches */
555 #define ZEND_FETCH_CLASS_DEFAULT 0
556 #define ZEND_FETCH_CLASS_SELF 1
f4b832d andigutmans - Fix crash bug in startup code.
andigutmans authored
557 #define ZEND_FETCH_CLASS_MAIN 2
74efc41 andigutmans - Make classes have scope and function/constant lookups default to the c...
andigutmans authored
558
880e7d8 andigutmans - Framework for knowing what kind of variable we just parsed.
andigutmans authored
559 /* variable parsing type (compile-time) */
560 #define ZEND_PARSED_MEMBER (1<<0)
561 #define ZEND_PARSED_METHOD_CALL (1<<1)
562 #define ZEND_PARSED_STATIC_MEMBER (1<<2)
563 #define ZEND_PARSED_FUNCTION_CALL (1<<3)
564 #define ZEND_PARSED_VARIABLE (1<<4)
565
566
5af7770 andigutmans - Sync Engine2 CVS with latest Engine CVS
andigutmans authored
567 /* unset types */
568 #define ZEND_UNSET_REG 0
569 #define ZEND_UNSET_OBJ 1
570
573b460 andigutmans Zend Library
andigutmans authored
571 /* var status for backpatching */
06d04d1 andigutmans - Fix SEND_VAR problem after fetch'ing a variable and not knowing the fe...
andigutmans authored
572 #define BP_VAR_R 0
573 #define BP_VAR_W 1
574 #define BP_VAR_RW 2
575 #define BP_VAR_IS 3
576 #define BP_VAR_NA 4 /* if not applicable */
577 #define BP_VAR_FUNC_ARG 5
7fa17e8 andigutmans - Put in the infrastructure for the unset() fix. Right now it has the ol...
andigutmans authored
578 #define BP_VAR_UNSET 6
573b460 andigutmans Zend Library
andigutmans authored
579
580
581 #define ZEND_INTERNAL_FUNCTION 1
582 #define ZEND_USER_FUNCTION 2
583 #define ZEND_OVERLOADED_FUNCTION 3
2493f68 Zeev Suraski * Fix debugger+interactive mode bug
zsuraski authored
584 #define ZEND_EVAL_CODE 4
573b460 andigutmans Zend Library
andigutmans authored
585
586 #define ZEND_INTERNAL_CLASS 1
587 #define ZEND_USER_CLASS 2
588
589 #define ZEND_EVAL (1<<0)
590 #define ZEND_INCLUDE (1<<1)
9cc7044 andigutmans - Cleanup old IMPORT stuff
andigutmans authored
591 #define ZEND_INCLUDE_ONCE (1<<2)
67b4b3a Zeev Suraski - require() of a dynamic expression now has the standard require() seman...
zsuraski authored
592 #define ZEND_REQUIRE (1<<3)
c06692e Zeev Suraski The patch we promised - redesigned the compilation/execution API:
zsuraski authored
593 #define ZEND_REQUIRE_ONCE (1<<4)
573b460 andigutmans Zend Library
andigutmans authored
594
595 #define ZEND_ISSET (1<<0)
596 #define ZEND_ISEMPTY (1<<1)
597
598 #define ZEND_CT (1<<0)
599 #define ZEND_RT (1<<1)
600
601
58153df Zeev Suraski - Improve the file handle closing code
zsuraski authored
602 #define ZEND_HANDLE_FILENAME 0
603 #define ZEND_HANDLE_FD 1
604 #define ZEND_HANDLE_FP 2
605 #define ZEND_HANDLE_STDIOSTREAM 3
606 #define ZEND_HANDLE_FSTREAM 4
573b460 andigutmans Zend Library
andigutmans authored
607
d894cf4 Zeev Suraski Support definition of classes that are derived from classes that are def...
zsuraski authored
608 #define ZEND_DECLARE_CLASS 1
609 #define ZEND_DECLARE_FUNCTION 2
610 #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
611
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
612 #define ZEND_FETCH_STANDARD 0
cccd244 Zeev Suraski Get rid of AiCount completely
zsuraski authored
613 #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
614
741b816 Zeev Suraski * Support getThis() for internal functions.
zsuraski authored
615 #define ZEND_MEMBER_FUNC_CALL 1<<0
616 #define ZEND_CTOR_CALL 1<<1
617
8d90825 andigutmans - Allow passing references which are returned from functions and new
andigutmans authored
618 #define ZEND_ARG_SEND_BY_REF (1<<0)
619 #define ZEND_ARG_COMPILE_TIME_BOUND (1<<1)
6ec1acb Zeev Suraski Phase 3:
zsuraski authored
620
59d5462 andigutmans - Stop using the locking mechanism and start using refcount.
andigutmans authored
621 #define AI_USE_PTR(ai) \
622 if ((ai).ptr_ptr) { \
623 (ai).ptr = *((ai).ptr_ptr); \
624 (ai).ptr_ptr = &((ai).ptr); \
625 } else { \
626 (ai).ptr = NULL; \
627 }
628
6d988ec andigutmans - Add support for BYREF_FORCE_REST
andigutmans authored
629 /* Lost In Stupid Parentheses */
630 #define ARG_SHOULD_BE_SENT_BY_REF(offset, conduct_check, arg_types) \
631 ( \
632 conduct_check \
633 && arg_types \
634 && \
635 ( \
636 ( \
637 offset<=arg_types[0] \
638 && arg_types[offset]==BYREF_FORCE \
639 ) \
640 || ( \
641 offset>=arg_types[0] \
642 && arg_types[arg_types[0]]==BYREF_FORCE_REST \
643 ) \
644 ) \
645 )
646
ced9cee Zeev Suraski - Implement return by reference:
zsuraski authored
647 #define ZEND_RETURN_VAL 0
648 #define ZEND_RETURN_REF 1
649
ad115d2 Zeev Suraski Fix require()
zsuraski authored
650 END_EXTERN_C()
651
a617217 Replace macros which begin with an underscore through an appropiately
Sascha Schumann authored
652 #endif /* ZEND_COMPILE_H */
Something went wrong with that request. Please try again.