Skip to content
Newer
Older
100644 359 lines (299 sloc) 10.4 KB
573b460 @andigutmans Zend Library
andigutmans authored
1 /*
2 +----------------------------------------------------------------------+
3 | Zend Engine |
4 +----------------------------------------------------------------------+
d1dded8 MFH: Bump copyright year, 2 of 2.
Sebastian Bergmann authored
5 | Copyright (c) 1998-2008 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 @zsuraski License update
zsuraski authored
8 | that is bundled with this package in the file LICENSE, and is |
f68c7ff updating license information in the headers.
James Cox authored
9 | available through the world-wide-web at the following url: |
d863d52 Update headers.
Sebastian Bergmann authored
10 | http://www.zend.com/license/2_00.txt. |
b5b1117 @zsuraski 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
333406b - Added some missing CVS $Id$ tags, headers and footers.
foobar authored
20 /* $Id$ */
b5b1117 @zsuraski License update
zsuraski authored
21
a617217 Replace macros which begin with an underscore through an appropiately
Sascha Schumann authored
22 #ifndef ZEND_EXECUTE_H
23 #define ZEND_EXECUTE_H
573b460 @andigutmans Zend Library
andigutmans authored
24
25 #include "zend_compile.h"
26 #include "zend_hash.h"
51b9245 @andigutmans - More object junk
andigutmans authored
27 #include "zend_operators.h"
637a404 - MFH as discussed
Marcus Boerger authored
28 #include "zend_variables.h"
573b460 @andigutmans Zend Library
andigutmans authored
29
1250c43 @zsuraski * Add struct name to all typedef's so that they can be debugged with …
zsuraski authored
30 typedef union _temp_variable {
573b460 @andigutmans Zend Library
andigutmans authored
31 zval tmp_var;
4fff038 @andigutmans - Changed Ts{}.var to Ts{}.var.ptr_ptr.
andigutmans authored
32 struct {
33 zval **ptr_ptr;
b56fd46 @andigutmans - First part of the patch which makes reads use ptr and not ptr_ptr.
andigutmans authored
34 zval *ptr;
3a42bab @zsuraski Fix behavior of return-by-reference functions. Remove erroneous warni…
zsuraski authored
35 zend_bool fcall_returned_reference;
4fff038 @andigutmans - Changed Ts{}.var to Ts{}.var.ptr_ptr.
andigutmans authored
36 } var;
21f0964 @andigutmans - Hopefully fix bug #26696.
andigutmans authored
37 struct {
d9252aa @andigutmans - Fix for bug #29707
andigutmans authored
38 zval **ptr_ptr;
39 zval *ptr;
40 zend_bool fcall_returned_reference;
21f0964 @andigutmans - Hopefully fix bug #26696.
andigutmans authored
41 zval *str;
42 zend_uint offset;
43 } str_offset;
e470e22 - Fixed bug #35106 (nested foreach fails when array variable has a re…
Dmitry Stogov authored
44 struct {
45 zval **ptr_ptr;
46 zval *ptr;
47 zend_bool fcall_returned_reference;
48 HashPointer fe_pos;
49 } fe;
e94e3e1 @zsuraski Some cleanup
zsuraski authored
50 zend_class_entry *class_entry;
573b460 @andigutmans Zend Library
andigutmans authored
51 } temp_variable;
52
53
0450ab9 @zsuraski MFZE1 (Expose more C++ APIs)
zsuraski authored
54 BEGIN_EXTERN_C()
2c254ba @zsuraski Get rid of ELS_*(), and use TSRMLS_*() instead.
zsuraski authored
55 ZEND_API extern void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);
2c44fab - Ported the zend_execute_internal hook to ZendEngine2.
Derick Rethans authored
56 ZEND_API extern void (*zend_execute_internal)(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC);
573b460 @andigutmans Zend Library
andigutmans authored
57
b4f3b9d @zsuraski Redesigned thread safety mechanism - nua nua
zsuraski authored
58 void init_executor(TSRMLS_D);
2c254ba @zsuraski Get rid of ELS_*(), and use TSRMLS_*() instead.
zsuraski authored
59 void shutdown_executor(TSRMLS_D);
0cd2da0 - Execute destructors earlier (Florian Schaper, fschaper at intux org)
Marcus Boerger authored
60 void shutdown_destructors(TSRMLS_D);
2c254ba @zsuraski Get rid of ELS_*(), and use TSRMLS_*() instead.
zsuraski authored
61 ZEND_API void execute(zend_op_array *op_array TSRMLS_DC);
2c44fab - Ported the zend_execute_internal hook to ZendEngine2.
Derick Rethans authored
62 ZEND_API void execute_internal(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC);
573b460 @andigutmans Zend Library
andigutmans authored
63 ZEND_API int zend_is_true(zval *op);
3df0288 Improove debug capabilities
Marcus Boerger authored
64 #define safe_free_zval_ptr(p) safe_free_zval_ptr_rel(p ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
65 static inline void safe_free_zval_ptr_rel(zval *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
66 {
2c254ba @zsuraski Get rid of ELS_*(), and use TSRMLS_*() instead.
zsuraski authored
67 TSRMLS_FETCH();
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
68
69 if (p!=EG(uninitialized_zval_ptr)) {
3df0288 Improove debug capabilities
Marcus Boerger authored
70 FREE_ZVAL_REL(p);
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
71 }
72 }
6c810b0 Improved memory usage by movig constants to read only memory. (Dmitry…
Dmitry Stogov authored
73 ZEND_API int zend_lookup_class(const char *name, int name_length, zend_class_entry ***ce TSRMLS_DC);
74 ZEND_API int zend_lookup_class_ex(const char *name, int name_length, int use_autoload, zend_class_entry ***ce TSRMLS_DC);
b4f3b9d @zsuraski Redesigned thread safety mechanism - nua nua
zsuraski authored
75 ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC);
d3473d1 - Provide a unified way to display uncaught exceptions, which shows
Marcus Boerger authored
76 ZEND_API int zend_eval_string_ex(char *str, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC);
6608f07 @smalyshev Mega-commit: Enter the new object model
smalyshev authored
77
99771d9 Remove --enable-c9x-inline option. We now use a syntax which is compa…
Sascha Schumann authored
78 static inline int i_zend_is_true(zval *op)
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
79 {
80 int result;
81
637a404 - MFH as discussed
Marcus Boerger authored
82 switch (Z_TYPE_P(op)) {
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
83 case IS_NULL:
84 result = 0;
85 break;
86 case IS_LONG:
87 case IS_BOOL:
88 case IS_RESOURCE:
637a404 - MFH as discussed
Marcus Boerger authored
89 result = (Z_LVAL_P(op)?1:0);
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
90 break;
91 case IS_DOUBLE:
637a404 - MFH as discussed
Marcus Boerger authored
92 result = (Z_DVAL_P(op) ? 1 : 0);
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
93 break;
94 case IS_STRING:
637a404 - MFH as discussed
Marcus Boerger authored
95 if (Z_STRLEN_P(op) == 0
96 || (Z_STRLEN_P(op)==1 && Z_STRVAL_P(op)[0]=='0')) {
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
97 result = 0;
98 } else {
99 result = 1;
100 }
101 break;
102 case IS_ARRAY:
637a404 - MFH as discussed
Marcus Boerger authored
103 result = (zend_hash_num_elements(Z_ARRVAL_P(op))?1:0);
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
104 break;
105 case IS_OBJECT:
97e7ce7 @smalyshev fix the fix
smalyshev authored
106 if(IS_ZEND_STD_OBJECT(*op)) {
f9c6520 @smalyshev Fix object true value: if we are in compat mode and it's Zend object -
smalyshev authored
107 TSRMLS_FETCH();
9d1f2f3 Fixed bug #34199 (if($obj)/if(!$obj) inconsistency)
Dmitry Stogov authored
108
109 if (Z_OBJ_HT_P(op)->cast_object) {
110 zval tmp;
637a404 - MFH as discussed
Marcus Boerger authored
111 if (Z_OBJ_HT_P(op)->cast_object(op, &tmp, IS_BOOL TSRMLS_CC) == SUCCESS) {
9d1f2f3 Fixed bug #34199 (if($obj)/if(!$obj) inconsistency)
Dmitry Stogov authored
112 result = Z_LVAL(tmp);
113 break;
114 }
115 } else if (Z_OBJ_HT_P(op)->get) {
116 zval *tmp = Z_OBJ_HT_P(op)->get(op TSRMLS_CC);
117 if(Z_TYPE_P(tmp) != IS_OBJECT) {
118 /* for safety - avoid loop */
119 convert_to_boolean(tmp);
120 result = Z_LVAL_P(tmp);
121 zval_ptr_dtor(&tmp);
122 break;
123 }
124 }
f9c6520 @smalyshev Fix object true value: if we are in compat mode and it's Zend object -
smalyshev authored
125 }
2b10c53 @felipensp MFH: Dropped zend.ze1_compatibility_mode
felipensp authored
126 result = 1;
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
127 break;
128 default:
129 result = 0;
130 break;
131 }
132 return result;
133 }
134
d76cf1d @zsuraski More TSRMLS_FETCH work
zsuraski authored
135 ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC);
dcf2490 @johannes - MFH: Fix #38465 (ReflectionParameter fails if default value is an a…
johannes authored
136 ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *scope TSRMLS_DC);
573b460 @andigutmans Zend Library
andigutmans authored
137
39a7f4c @zsuraski This patch is a go. Not fully optimized yet, but working properly.
zsuraski authored
138 /* dedicated Zend executor functions - do not use! */
e8b485d Selected better initial VM stack size
Dmitry Stogov authored
139 #define ZEND_VM_STACK_PAGE_SIZE ((64 * 1024) - 64)
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
140
141 struct _zend_vm_stack {
142 void **top;
143 void **end;
144 zend_vm_stack prev;
145 void *elements[1];
146 };
147
148 #define ZEND_VM_STACK_GROW_IF_NEEDED(count) \
149 do { \
c33db5c Fixed warning
Dmitry Stogov authored
150 if (UNEXPECTED((count) > \
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
151 EG(argument_stack)->end - EG(argument_stack)->top)) { \
c33db5c Fixed warning
Dmitry Stogov authored
152 zend_vm_stack_extend((count) TSRMLS_CC); \
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
153 } \
154 } while (0)
155
156 static inline zend_vm_stack zend_vm_stack_new_page(int count) {
2cd551f @smalyshev fix type
smalyshev authored
157 zend_vm_stack page = (zend_vm_stack)emalloc(sizeof(*page)+sizeof(page->elements[0])*(count-1));
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
158
159 page->top = page->elements;
160 page->end = page->elements + count;
161 page->prev = NULL;
162 return page;
163 }
164
165 static inline void zend_vm_stack_init(TSRMLS_D)
166 {
167 EG(argument_stack) = zend_vm_stack_new_page(ZEND_VM_STACK_PAGE_SIZE);
168 }
169
170 static inline void zend_vm_stack_destroy(TSRMLS_D)
171 {
172 zend_vm_stack stack = EG(argument_stack);
173
174 while (stack != NULL) {
175 zend_vm_stack p = stack->prev;
176 efree(stack);
177 stack = p;
178 }
179 }
180
181 static inline void zend_vm_stack_extend(int count TSRMLS_DC)
182 {
183 zend_vm_stack p = zend_vm_stack_new_page(count >= ZEND_VM_STACK_PAGE_SIZE ? count : ZEND_VM_STACK_PAGE_SIZE);
184 p->prev = EG(argument_stack);
185 EG(argument_stack) = p;
186 }
187
188 static inline void **zend_vm_stack_top(TSRMLS_D)
189 {
190 return EG(argument_stack)->top;
191 }
192
193 static inline void zend_vm_stack_push(void *ptr TSRMLS_DC)
194 {
195 ZEND_VM_STACK_GROW_IF_NEEDED(1);
196 *(EG(argument_stack)->top++) = ptr;
197 }
198
199 static inline void zend_vm_stack_push_nocheck(void *ptr TSRMLS_DC)
200 {
201 *(EG(argument_stack)->top++) = ptr;
202 }
203
204 static inline void *zend_vm_stack_pop(TSRMLS_D)
205 {
206 void *el = *(--EG(argument_stack)->top);
207
208 if (UNEXPECTED(EG(argument_stack)->top == EG(argument_stack)->elements)) {
209 zend_vm_stack p = EG(argument_stack);
210 EG(argument_stack) = p->prev;
211 efree(p);
212 }
213 return el;
214 }
215
216 static inline void *zend_vm_stack_alloc(size_t size TSRMLS_DC)
217 {
218 void *ret;
219
220 size = (size + (sizeof(void*) - 1)) / sizeof(void*);
221
c33db5c Fixed warning
Dmitry Stogov authored
222 ZEND_VM_STACK_GROW_IF_NEEDED((int)size);
e0ca3b2 Fixed types
Dmitry Stogov authored
223 ret = (void*)EG(argument_stack)->top;
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
224 EG(argument_stack)->top += size;
225 return ret;
226 }
227
228 static inline void zend_vm_stack_free(void *ptr TSRMLS_DC)
229 {
e0ca3b2 Fixed types
Dmitry Stogov authored
230 if (UNEXPECTED(EG(argument_stack)->elements == (void**)ptr)) {
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
231 zend_vm_stack p = EG(argument_stack);
232
233 EG(argument_stack) = p->prev;
234 efree(p);
235 } else {
e0ca3b2 Fixed types
Dmitry Stogov authored
236 EG(argument_stack)->top = (void**)ptr;
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
237 }
238 }
239
240 static inline void** zend_vm_stack_push_args(int count TSRMLS_DC)
241 {
242
243 if (UNEXPECTED(EG(argument_stack)->top - EG(argument_stack)->elements < count) ||
244 UNEXPECTED(EG(argument_stack)->top == EG(argument_stack)->end)) {
245 zend_vm_stack p = EG(argument_stack);
246
247 zend_vm_stack_extend(count + 1 TSRMLS_CC);
248
249 EG(argument_stack)->top += count;
250 *(EG(argument_stack)->top) = (void*)(zend_uintptr_t)count;
251 while (count-- > 0) {
252 void *data = *(--p->top);
253
254 if (UNEXPECTED(p->top == p->elements)) {
255 zend_vm_stack r = p;
256
257 EG(argument_stack)->prev = p->prev;
258 p = p->prev;
259 efree(r);
260 }
261 *(EG(argument_stack)->elements + count) = data;
262 }
263 return EG(argument_stack)->top++;
264 }
265 *(EG(argument_stack)->top) = (void*)(zend_uintptr_t)count;
266 return EG(argument_stack)->top++;
267 }
268
269 static inline void zend_vm_stack_clear_multiple(TSRMLS_D)
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
270 {
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
271 void **p = EG(argument_stack)->top - 1;
e1814f0 WIN64 support
Dmitry Stogov authored
272 int delete_count = (int)(zend_uintptr_t) *p;
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
273
274 while (--delete_count>=0) {
8df40bd Keeping consistent arg_stack during arguments freeing (Exception from…
Dmitry Stogov authored
275 zval *q = *(zval **)(--p);
276 *p = NULL;
277 zval_ptr_dtor(&q);
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
278 }
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
279 zend_vm_stack_free(p TSRMLS_CC);
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
280 }
281
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
282 static inline zval** zend_vm_stack_get_arg(int requested_arg TSRMLS_DC)
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
283 {
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
284 void **p = EG(current_execute_data)->prev_execute_data->function_state.arguments;
e1814f0 WIN64 support
Dmitry Stogov authored
285 int arg_count = (int)(zend_uintptr_t) *p;
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
286
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
287 if (UNEXPECTED(requested_arg > arg_count)) {
288 return NULL;
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
289 }
0b68251 Changed EG(argument_stack) implementation.
Dmitry Stogov authored
290 return (zval**)p - arg_count + requested_arg - 1;
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
291 }
39a7f4c @zsuraski This patch is a go. Not fully optimized yet, but working properly.
zsuraski authored
292
b4f3b9d @zsuraski Redesigned thread safety mechanism - nua nua
zsuraski authored
293 void execute_new_code(TSRMLS_D);
573b460 @andigutmans Zend Library
andigutmans authored
294
295
296 /* services */
09e7647 Improve error message
Marcus Boerger authored
297 ZEND_API char *get_active_class_name(char **space TSRMLS_DC);
4187439 @zsuraski More TSRMLS_FETCH work
zsuraski authored
298 ZEND_API char *get_active_function_name(TSRMLS_D);
2c254ba @zsuraski Get rid of ELS_*(), and use TSRMLS_*() instead.
zsuraski authored
299 ZEND_API char *zend_get_executed_filename(TSRMLS_D);
300 ZEND_API uint zend_get_executed_lineno(TSRMLS_D);
4187439 @zsuraski More TSRMLS_FETCH work
zsuraski authored
301 ZEND_API zend_bool zend_is_executing(TSRMLS_D);
573b460 @andigutmans Zend Library
andigutmans authored
302
6c15837 @rlerdorf exit_on_timeout patch
rlerdorf authored
303 ZEND_API void zend_set_timeout(long seconds, int reset_signals);
4187439 @zsuraski More TSRMLS_FETCH work
zsuraski authored
304 ZEND_API void zend_unset_timeout(TSRMLS_D);
b72a273 @andigutmans - Forgot ZEND_API
andigutmans authored
305 ZEND_API void zend_timeout(int dummy);
6c810b0 Improved memory usage by movig constants to read only memory. (Dmitry…
Dmitry Stogov authored
306 ZEND_API zend_class_entry *zend_fetch_class(const char *class_name, uint class_name_len, int fetch_type TSRMLS_DC);
c5d8422 @zsuraski Reinstate early-binding for classes.
zsuraski authored
307 void zend_verify_abstract_class(zend_class_entry *ce TSRMLS_DC);
84eb48f @zsuraski Ok, this time here's some real Win32 system programming :)
zsuraski authored
308
ef0bd3d @zsuraski - Move timeout code to Zend
zsuraski authored
309 #ifdef ZEND_WIN32
226c56f MFH: Fixed compiler warnings
Jani Taskinen authored
310 void zend_init_timeout_thread(void);
311 void zend_shutdown_timeout_thread(void);
84eb48f @zsuraski Ok, this time here's some real Win32 system programming :)
zsuraski authored
312 #define WM_REGISTER_ZEND_TIMEOUT (WM_USER+1)
313 #define WM_UNREGISTER_ZEND_TIMEOUT (WM_USER+2)
ef0bd3d @zsuraski - Move timeout code to Zend
zsuraski authored
314 #endif
315
573b460 @andigutmans Zend Library
andigutmans authored
316 #define zendi_zval_copy_ctor(p) zval_copy_ctor(&(p))
317 #define zendi_zval_dtor(p) zval_dtor(&(p))
318
319 #define active_opline (*EG(opline_ptr))
320
e8214a3 @andigutmans - Commit Marcus' cleanup of abstract and static inheritance and improve
andigutmans authored
321 /* The following tries to resolve the classname of a zval of type object.
322 * Since it is slow it should be only used in error messages.
323 */
637a404 - MFH as discussed
Marcus Boerger authored
324 #define Z_OBJ_CLASS_NAME_P(zval) ((zval) && Z_TYPE_P(zval) == IS_OBJECT && Z_OBJ_HT_P(zval)->get_class_entry != NULL && Z_OBJ_HT_P(zval)->get_class_entry(zval TSRMLS_CC) ? Z_OBJ_HT_P(zval)->get_class_entry(zval TSRMLS_CC)->name : "")
e8214a3 @andigutmans - Commit Marcus' cleanup of abstract and static inheritance and improve
andigutmans authored
325
cf7384a @felipensp - MFH: Constness (Added const qualifier to several function parameters)
felipensp authored
326 ZEND_API zval** zend_get_compiled_variable_value(const zend_execute_data *execute_data_ptr, zend_uint var);
8838c0f @andigutmans - Two new API calls for Derick (retreive CV name and value) by Dmitry
andigutmans authored
327
84b96e9 Fix so that extensions like xdebug, can overload opcodes in all execu…
Dmitry Stogov authored
328 #define ZEND_USER_OPCODE_CONTINUE 0 /* execute next opcode */
329 #define ZEND_USER_OPCODE_RETURN 1 /* exit from executor (return from function) */
330 #define ZEND_USER_OPCODE_DISPATCH 2 /* call original opcode handler */
331
3c1a774 USER_OPCODE API is improvet.
Dmitry Stogov authored
332 #define ZEND_USER_OPCODE_DISPATCH_TO 0x100 /* call original handler of returned opcode */
333
76a9a42 - Removed direct executor recursion.
Dmitry Stogov authored
334 ZEND_API int zend_set_user_opcode_handler(zend_uchar opcode, user_opcode_handler_t handler);
335 ZEND_API user_opcode_handler_t zend_get_user_opcode_handler(zend_uchar opcode);
84b96e9 Fix so that extensions like xdebug, can overload opcodes in all execu…
Dmitry Stogov authored
336
87c9e68 @smalyshev export zval getters
smalyshev authored
337 /* former zend_execute_locks.h */
338 typedef struct _zend_free_op {
339 zval* var;
340 /* int is_var; */
341 } zend_free_op;
342
cf7384a @felipensp - MFH: Constness (Added const qualifier to several function parameters)
felipensp authored
343 ZEND_API zval *zend_get_zval_ptr(znode *node, const temp_variable *Ts, zend_free_op *should_free, int type TSRMLS_DC);
344 ZEND_API zval **zend_get_zval_ptr_ptr(const znode *node, const temp_variable *Ts, zend_free_op *should_free, int type TSRMLS_DC);
87c9e68 @smalyshev export zval getters
smalyshev authored
345
61b9ded Export zend_do_fcall() helper from executor
Dmitry Stogov authored
346 ZEND_API int zend_do_fcall(ZEND_OPCODE_HANDLER_ARGS);
87c9e68 @smalyshev export zval getters
smalyshev authored
347
0450ab9 @zsuraski MFZE1 (Expose more C++ APIs)
zsuraski authored
348 END_EXTERN_C()
349
a617217 Replace macros which begin with an underscore through an appropiately
Sascha Schumann authored
350 #endif /* ZEND_EXECUTE_H */
333406b - Added some missing CVS $Id$ tags, headers and footers.
foobar authored
351
352 /*
353 * Local variables:
354 * tab-width: 4
355 * c-basic-offset: 4
356 * indent-tabs-mode: t
357 * End:
358 */
Something went wrong with that request. Please try again.