Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 946 lines (734 sloc) 29.586 kb
573b460 andigutmans Zend Library
andigutmans authored
1 /*
2 +----------------------------------------------------------------------+
3 | Zend Engine |
4 +----------------------------------------------------------------------+
fc33f52 Xinchen Hui bump year
laruence authored
5 | Copyright (c) 1998-2015 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, |
493f39d - MFH: Fix bug #37212 (Access to protected property of common base class...
Marcus Boerger 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 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
333406b - Added some missing CVS $Id$ tags, headers and footers.
foobar authored
20 /* $Id$ */
b5b1117 Zeev Suraski License update
zsuraski authored
21
a617217 Replace macros which begin with an underscore through an appropiately
Sascha Schumann authored
22 #ifndef ZEND_COMPILE_H
23 #define ZEND_COMPILE_H
573b460 andigutmans Zend Library
andigutmans authored
24
25 #include "zend.h"
2361745 Bob Weinand Working commit for constant scalar expressions (with constants).
bwoebi authored
26 #include "zend_ast.h"
fa76f0c Zeev Suraski Compile fix
zsuraski authored
27
009025e * header file cleanup
Stig S. Bakken authored
28 #ifdef HAVE_STDARG_H
29 # include <stdarg.h>
fa76f0c Zeev Suraski Compile fix
zsuraski authored
30 #endif
31
573b460 andigutmans Zend Library
andigutmans authored
32 #include "zend_llist.h"
33
34 #define DEBUG_ZEND 0
fcaf734 andigutmans - Don't support interactive mode when thread safe.
andigutmans authored
35
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
36 #define SET_UNUSED(op) op ## _type = IS_UNUSED
573b460 andigutmans Zend Library
andigutmans authored
37
c8576c5 Levi Morrison Implement return types
morrisonlevi authored
38 #define MAKE_NOP(opline) do { \
39 opline->opcode = ZEND_NOP; \
40 memset(&opline->result, 0, sizeof(opline->result)); \
41 memset(&opline->op1, 0, sizeof(opline->op1)); \
42 memset(&opline->op2, 0, sizeof(opline->op2)); \
43 opline->result_type = opline->op1_type = opline->op2_type = IS_UNUSED; \
44 } while (0)
45
38c4125 Nikita Popov Cleanup dead/duplicate code
nikic authored
46 #define RESET_DOC_COMMENT() do { \
47 if (CG(doc_comment)) { \
6db293d Nikita Popov Merge remote-tracking branch 'php-src/master' into ast
nikic authored
48 zend_string_release(CG(doc_comment)); \
38c4125 Nikita Popov Cleanup dead/duplicate code
nikic authored
49 CG(doc_comment) = NULL; \
50 } \
51 } while (0)
bdd3b60 Implement a different way to catch documentation comments.
Andrei Zmievski authored
52
573b460 andigutmans Zend Library
andigutmans authored
53 typedef struct _zend_op_array zend_op_array;
8010931 andigutmans - Improve performance of part of the jmps. More to follow.
andigutmans authored
54 typedef struct _zend_op zend_op;
573b460 andigutmans Zend Library
andigutmans authored
55
f2df6a4 - Improved memory usage
Dmitry Stogov authored
56 typedef struct _zend_compiler_context {
6f9f0bf Anatol Belski master renames phase 2
weltling authored
57 uint32_t opcodes_size;
f2df6a4 - Improved memory usage
Dmitry Stogov authored
58 int vars_size;
59 int literals_size;
60 int current_brk_cont;
61 int backpatch_count;
6b0b4bf Dmitry Stogov An exception thrown in try or catch block is disacarded by return statem...
dstogov authored
62 int in_finally;
216ef32 Dmitry Stogov Changed "finally" handling. Removed EX(fast_ret) and EX(delayed_exceptio...
dstogov authored
63 uint32_t fast_call_var;
f2df6a4 - Improved memory usage
Dmitry Stogov authored
64 HashTable *labels;
65 } zend_compiler_context;
66
14e29f5 Dmitry Stogov Reduced size of zend_op on 64-bit systems.
dstogov authored
67 /* On 64-bi systems less optimal, but more compact VM code leads to better
68 * performance. So on 32-bit systems we use absolute addresses for jump
69 * targets and constants, but on 64-bit systems realtive 32-bit offsets */
70 #if SIZEOF_SIZE_T == 4
71 # define ZEND_USE_ABS_JMP_ADDR 1
72 # define ZEND_USE_ABS_CONST_ADDR 1
73 # define ZEND_EX_USE_LITERALS 0
74 # define ZEND_EX_USE_RUN_TIME_CACHE 1
75 #else
76 # define ZEND_USE_ABS_JMP_ADDR 0
77 # define ZEND_USE_ABS_CONST_ADDR 0
78 # define ZEND_EX_USE_LITERALS 1
79 # define ZEND_EX_USE_RUN_TIME_CACHE 1
80 #endif
81
24e0b99 Igor Merge remote-tracking branch 'upstream/PHP-5.6' into use-function
igorw authored
82 typedef union _znode_op {
6f9f0bf Anatol Belski master renames phase 2
weltling authored
83 uint32_t constant;
84 uint32_t var;
85 uint32_t num;
86 uint32_t opline_num; /* Needs to be signed */
14e29f5 Dmitry Stogov Reduced size of zend_op on 64-bit systems.
dstogov authored
87 #if ZEND_USE_ABS_JMP_ADDR
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
88 zend_op *jmp_addr;
14e29f5 Dmitry Stogov Reduced size of zend_op on 64-bit systems.
dstogov authored
89 #else
90 uint32_t jmp_offset;
91 #endif
92 #if ZEND_USE_ABS_CONST_ADDR
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
93 zval *zv;
14e29f5 Dmitry Stogov Reduced size of zend_op on 64-bit systems.
dstogov authored
94 #endif
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
95 } znode_op;
96
24e0b99 Igor Merge remote-tracking branch 'upstream/PHP-5.6' into use-function
igorw authored
97 typedef struct _znode { /* used only during compilation */
97fe15d Dmitry Stogov Fix "forech" statemt behaviour according to https://wiki.php.net/rfc/php...
dstogov authored
98 zend_uchar op_type;
99 zend_uchar flag;
573b460 andigutmans Zend Library
andigutmans authored
100 union {
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
101 znode_op op;
102 zval constant; /* replaced by literal/zv */
573b460 andigutmans Zend Library
andigutmans authored
103 } u;
104 } znode;
105
258a733 Nikita Popov AST-based compiler: Stage 1
nikic authored
106 /* Temporarily defined here, to avoid header ordering issues */
107 typedef struct _zend_ast_znode {
55ab55c Nikita Popov Add ability to specify additional attr in AST
nikic authored
108 zend_ast_kind kind;
109 zend_ast_attr attr;
6db293d Nikita Popov Merge remote-tracking branch 'php-src/master' into ast
nikic authored
110 uint32_t lineno;
258a733 Nikita Popov AST-based compiler: Stage 1
nikic authored
111 znode node;
112 } zend_ast_znode;
113 ZEND_API zend_ast *zend_ast_create_znode(znode *node);
114
5185baa Dmitry Stogov Changed "inline" into "zend_always_inline"
dstogov authored
115 static zend_always_inline znode *zend_ast_get_znode(zend_ast *ast) {
258a733 Nikita Popov AST-based compiler: Stage 1
nikic authored
116 return &((zend_ast_znode *) ast)->node;
117 }
118
bea85f5 Nikita Popov Use more specific parser stack nodes
nikic authored
119 typedef union _zend_parser_stack_elem {
120 zend_ast *ast;
121 zend_string *str;
122 zend_ulong num;
123 } zend_parser_stack_elem;
124
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
125 void zend_compile_top_stmt(zend_ast *ast);
126 void zend_compile_stmt(zend_ast *ast);
127 void zend_compile_expr(znode *node, zend_ast *ast);
128 void zend_compile_var(znode *node, zend_ast *ast, uint32_t type);
129 void zend_eval_const_expr(zend_ast **ast_ptr);
130 void zend_const_expr_to_zval(zval *result, zend_ast *ast);
258a733 Nikita Popov AST-based compiler: Stage 1
nikic authored
131
e112f6a Anatol Belski second shot on removing TSRMLS_*
weltling authored
132 #define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data
133 #define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data
536d4d8 andigutmans - Improve opcode dispatching
andigutmans authored
134
76a9a42 - Removed direct executor recursion.
Dmitry Stogov authored
135 typedef int (*user_opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
136 typedef int (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
536d4d8 andigutmans - Improve opcode dispatching
andigutmans authored
137
f82ed13 andigutmans - Commit new VM architecture. This one allows people (aka Derick) to
andigutmans authored
138 extern ZEND_API opcode_handler_t *zend_opcode_handlers;
573b460 andigutmans Zend Library
andigutmans authored
139
8010931 andigutmans - Improve performance of part of the jmps. More to follow.
andigutmans authored
140 struct _zend_op {
6f9bfe5 andigutmans - Shift around zend_op members
andigutmans authored
141 opcode_handler_t handler;
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
142 znode_op op1;
143 znode_op op2;
144 znode_op result;
14e29f5 Dmitry Stogov Reduced size of zend_op on 64-bit systems.
dstogov authored
145 uint32_t extended_value;
146 uint32_t lineno;
6f9bfe5 andigutmans - Shift around zend_op members
andigutmans authored
147 zend_uchar opcode;
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
148 zend_uchar op1_type;
149 zend_uchar op2_type;
150 zend_uchar result_type;
8010931 andigutmans - Improve performance of part of the jmps. More to follow.
andigutmans authored
151 };
573b460 andigutmans Zend Library
andigutmans authored
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_brk_cont_element {
cd6537e Fixed bugs #34065 and #38623 (throw in foreach/switch causes memory leak...
Dmitry Stogov authored
155 int start;
573b460 andigutmans Zend Library
andigutmans authored
156 int cont;
157 int brk;
158 int parent;
159 } zend_brk_cont_element;
160
f66f55e Felipe Pena MFH: Implemented "jump label" operator (limited "goto")
felipensp authored
161 typedef struct _zend_label {
162 int brk_cont;
6f9f0bf Anatol Belski master renames phase 2
weltling authored
163 uint32_t opline_num;
f66f55e Felipe Pena MFH: Implemented "jump label" operator (limited "goto")
felipensp authored
164 } zend_label;
573b460 andigutmans Zend Library
andigutmans authored
165
9e60cb5 Zeev Suraski Rewrote exception support. Fixes a few limitations and bugs in the old
zsuraski authored
166 typedef struct _zend_try_catch_element {
6f9f0bf Anatol Belski master renames phase 2
weltling authored
167 uint32_t try_op;
168 uint32_t catch_op; /* ketchup! */
169 uint32_t finally_op;
170 uint32_t finally_end;
9e60cb5 Zeev Suraski Rewrote exception support. Fixes a few limitations and bugs in the old
zsuraski authored
171 } zend_try_catch_element;
172
28b7a03 Anatol Belski master renamings phase 5
weltling authored
173 #if SIZEOF_ZEND_LONG == 8
8ee2a4a Anatol Belski first shot on merging the core fro the int64 branch
weltling authored
174 # ifdef _WIN32
025a7c3 Anatol Belski fix THIS_HASHVAL
weltling authored
175 # define THIS_HASHVAL 6385726429Ui64
8ee2a4a Anatol Belski first shot on merging the core fro the int64 branch
weltling authored
176 # else
025a7c3 Anatol Belski fix THIS_HASHVAL
weltling authored
177 # define THIS_HASHVAL 6385726429ULL
8ee2a4a Anatol Belski first shot on merging the core fro the int64 branch
weltling authored
178 # endif
dcccfc2 Felipe Pena - Fix broken code in 64bit
felipensp authored
179 #else
025a7c3 Anatol Belski fix THIS_HASHVAL
weltling authored
180 #define THIS_HASHVAL 2090759133UL
dcccfc2 Felipe Pena - Fix broken code in 64bit
felipensp authored
181 #endif
9e60cb5 Zeev Suraski Rewrote exception support. Fixes a few limitations and bugs in the old
zsuraski authored
182
50ee116 Clearify the different method/class flags (as discussed with Andi).
Marcus Boerger authored
183 /* method flags (types) */
0338111 Zeev Suraski Require abstract classes to be explicitly declared 'abstract', in order ...
zsuraski authored
184 #define ZEND_ACC_STATIC 0x01
185 #define ZEND_ACC_ABSTRACT 0x02
186 #define ZEND_ACC_FINAL 0x04
50ee116 Clearify the different method/class flags (as discussed with Andi).
Marcus Boerger authored
187 #define ZEND_ACC_IMPLEMENTED_ABSTRACT 0x08
6020ffd Simplify detection of methods that must be called dynamic (with object)
Marcus Boerger authored
188
50ee116 Clearify the different method/class flags (as discussed with Andi).
Marcus Boerger authored
189 /* class flags (types) */
190 /* ZEND_ACC_IMPLICIT_ABSTRACT_CLASS is used for abstract classes (since it is set by any abstract method even interfaces MAY have it set, too). */
191 /* ZEND_ACC_EXPLICIT_ABSTRACT_CLASS denotes that a class was explicitly defined as abstract by using the keyword. */
192 #define ZEND_ACC_IMPLICIT_ABSTRACT_CLASS 0x10
193 #define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS 0x20
8c81d80 Made ZEND_ACC_TRAIT a saner value
Guilherme Blanco authored
194 #define ZEND_ACC_INTERFACE 0x40
195 #define ZEND_ACC_TRAIT 0x80
e8214a3 andigutmans - Commit Marcus' cleanup of abstract and static inheritance and improve
andigutmans authored
196
50ee116 Clearify the different method/class flags (as discussed with Andi).
Marcus Boerger authored
197 /* method flags (visibility) */
32b100e Zeev Suraski - Allow variables to have both 'static' modifier and an access level.
zsuraski authored
198 /* The order of those must be kept - public < protected < private */
0338111 Zeev Suraski Require abstract classes to be explicitly declared 'abstract', in order ...
zsuraski authored
199 #define ZEND_ACC_PUBLIC 0x100
200 #define ZEND_ACC_PROTECTED 0x200
201 #define ZEND_ACC_PRIVATE 0x400
dc5c790 Zeev Suraski Treat the absence of an access type just as if 'public' was supplied
zsuraski authored
202 #define ZEND_ACC_PPP_MASK (ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE)
e062dff Zeev Suraski - Implement public/protected/private methods.
zsuraski authored
203
0338111 Zeev Suraski Require abstract classes to be explicitly declared 'abstract', in order ...
zsuraski authored
204 #define ZEND_ACC_CHANGED 0x800
205 #define ZEND_ACC_IMPLICIT_PUBLIC 0x1000
77208ec Zeev Suraski Fix incorrect linkage of access-levels, when using private methods
zsuraski authored
206
50ee116 Clearify the different method/class flags (as discussed with Andi).
Marcus Boerger authored
207 /* method flags (special method detection) */
fbda310 - Flag ctor/dtor methods
Marcus Boerger authored
208 #define ZEND_ACC_CTOR 0x2000
7c2e02d Disallow static declaration of clone
Marcus Boerger authored
209 #define ZEND_ACC_DTOR 0x4000
210 #define ZEND_ACC_CLONE 0x8000
1c2512d - Add fn_flag ZEND_ACC_ALIAS
Marcus Boerger authored
211
50ee116 Clearify the different method/class flags (as discussed with Andi).
Marcus Boerger authored
212 /* method flag (bc only), any method that has this flag can be used statically and non statically. */
213 #define ZEND_ACC_ALLOW_STATIC 0x10000
214
2cb5215 Stanislav Malyshev MF50: fix #29689 and more private property problems
smalyshev authored
215 /* shadow of parent's private method/property */
216 #define ZEND_ACC_SHADOW 0x20000
217
941b065 - MFH: Function deprecation flag
Marcus Boerger authored
218 /* deprecation flag */
219 #define ZEND_ACC_DEPRECATED 0x40000
220
0f2247a Fixed bug #44414 (Incomplete reporting about abstract methods)
Dmitry Stogov authored
221 /* class implement interface(s) flag */
222 #define ZEND_ACC_IMPLEMENT_INTERFACES 0x80000
cd6415f Implemented Traits for PHP as proposed in the RFC [TRAITS]
Stefan Marr authored
223 #define ZEND_ACC_IMPLEMENT_TRAITS 0x400000
0f2247a Fixed bug #44414 (Incomplete reporting about abstract methods)
Dmitry Stogov authored
224
f2df6a4 - Improved memory usage
Dmitry Stogov authored
225 /* class constants updated */
226 #define ZEND_ACC_CONSTANTS_UPDATED 0x100000
227
1a1178a eliminated unnecessary iterations during request startup/shutdown
Dmitry Stogov authored
228 /* user class has methods with static variables */
229 #define ZEND_HAS_STATIC_IN_METHODS 0x800000
230
231
d5ef2f4 Added support for lambda functions and closures
Dmitry Stogov authored
232 #define ZEND_ACC_CLOSURE 0x100000
252f623 Nikita Popov Add flag for generator functions
nikic authored
233 #define ZEND_ACC_GENERATOR 0x800000
d5ef2f4 Added support for lambda functions and closures
Dmitry Stogov authored
234
af05ce0 Fixed is_callable/call_user_func mess that had done different things for...
Dmitry Stogov authored
235 /* function flag for internal user call handlers __call, __callstatic */
236 #define ZEND_ACC_CALL_VIA_HANDLER 0x200000
0f2247a Fixed bug #44414 (Incomplete reporting about abstract methods)
Dmitry Stogov authored
237
cacf363 Fixed bug #60104 (Segmentation Fault in pdo_sqlite when using sqliteCrea...
Dmitry Stogov authored
238 /* disable inline caching */
239 #define ZEND_ACC_NEVER_CACHE 0x400000
240
0d7a638 Nikita Popov Implement variadic function syntax
nikic authored
241 #define ZEND_ACC_VARIADIC 0x1000000
f2df6a4 - Improved memory usage
Dmitry Stogov authored
242
243 #define ZEND_ACC_RETURN_REFERENCE 0x4000000
244 #define ZEND_ACC_DONE_PASS_TWO 0x8000000
245
9e70d76 Dmitry Stogov Move zend_object->guards into additional slot of zend_object->properties...
dstogov authored
246 /* class has magic methods __get/__set/__unset/__isset that use guards */
247 #define ZEND_ACC_USE_GUARDS 0x1000000
248
57c1335 Dmitry Stogov Don't check argument types for internal functions without type hinting
dstogov authored
249 /* function has arguments with type hinting */
250 #define ZEND_ACC_HAS_TYPE_HINTS 0x10000000
251
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
252 /* op_array has finally blocks */
253 #define ZEND_ACC_HAS_FINALLY_BLOCK 0x20000000
254
7cef08c Dmitry Stogov Allocate copies of internal functions inherited in user classes at CG(ar...
dstogov authored
255 /* internal function is allocated at arena */
256 #define ZEND_ACC_ARENA_ALLOCATED 0x20000000
257
c8576c5 Levi Morrison Implement return types
morrisonlevi authored
258 /* Function has a return type hint (or class has such non-private function) */
259 #define ZEND_ACC_HAS_RETURN_TYPE 0x40000000
260
6db293d Nikita Popov Merge remote-tracking branch 'php-src/master' into ast
nikic authored
261 char *zend_visibility_string(uint32_t fn_flags);
471947b Zeev Suraski Reimplement PPP properties
zsuraski authored
262
263 typedef struct _zend_property_info {
7504137 Dmitry Stogov Improved object property access.
dstogov authored
264 uint32_t offset; /* property offset for object properties or
265 property index for static properties */
6f9f0bf Anatol Belski master renames phase 2
weltling authored
266 uint32_t flags;
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
267 zend_string *name;
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
268 zend_string *doc_comment;
493f39d - MFH: Fix bug #37212 (Access to protected property of common base class...
Marcus Boerger authored
269 zend_class_entry *ce;
471947b Zeev Suraski Reimplement PPP properties
zsuraski authored
270 } zend_property_info;
271
7504137 Dmitry Stogov Improved object property access.
dstogov authored
272 #define OBJ_PROP(obj, offset) \
273 ((zval*)((char*)(obj) + offset))
274 #define OBJ_PROP_NUM(obj, num) \
275 (&(obj)->properties_table[(num)])
276 #define OBJ_PROP_TO_OFFSET(num) \
277 ((uint32_t)(zend_uintptr_t)OBJ_PROP_NUM(((zend_object*)NULL), num))
278 #define OBJ_PROP_TO_NUM(offset) \
279 ((offset - OBJ_PROP_TO_OFFSET(0)) / sizeof(zval))
280
5dd427e Dmitry Stogov Use zend_string* for op_array->arg_info[]->name and op_array->arg_info[]...
dstogov authored
281 /* arg_info for internal functions */
b7a7b1a Stanislav Malyshev trailing whitespace removal
smalyshev authored
282 typedef struct _zend_internal_arg_info {
5dd427e Dmitry Stogov Use zend_string* for op_array->arg_info[]->name and op_array->arg_info[]...
dstogov authored
283 const char *name;
284 const char *class_name;
285 zend_uchar type_hint;
286 zend_uchar pass_by_reference;
287 zend_bool allow_null;
288 zend_bool is_variadic;
289 } zend_internal_arg_info;
290
291 /* arg_info for user functions */
f8bbafd Zeev Suraski ntroduce infrastructure for supplying information about arguments,
zsuraski authored
292 typedef struct _zend_arg_info {
5dd427e Dmitry Stogov Use zend_string* for op_array->arg_info[]->name and op_array->arg_info[]...
dstogov authored
293 zend_string *name;
294 zend_string *class_name;
a09b713 Used more sutable type. Reduced memory usage.
Dmitry Stogov authored
295 zend_uchar type_hint;
0d7a638 Nikita Popov Implement variadic function syntax
nikic authored
296 zend_uchar pass_by_reference;
f8bbafd Zeev Suraski ntroduce infrastructure for supplying information about arguments,
zsuraski authored
297 zend_bool allow_null;
0d7a638 Nikita Popov Implement variadic function syntax
nikic authored
298 zend_bool is_variadic;
f8bbafd Zeev Suraski ntroduce infrastructure for supplying information about arguments,
zsuraski authored
299 } zend_arg_info;
300
5dd427e Dmitry Stogov Use zend_string* for op_array->arg_info[]->name and op_array->arg_info[]...
dstogov authored
301 /* the following structure repeats the layout of zend_internal_arg_info,
24e0b99 Igor Merge remote-tracking branch 'upstream/PHP-5.6' into use-function
igorw authored
302 * but its fields have different meaning. It's used as the first element of
f2df6a4 - Improved memory usage
Dmitry Stogov authored
303 * arg_info array to define properties of internal functions.
c8576c5 Levi Morrison Implement return types
morrisonlevi authored
304 * It's also used for return type hinting.
f2df6a4 - Improved memory usage
Dmitry Stogov authored
305 */
306 typedef struct _zend_internal_function_info {
5dd427e Dmitry Stogov Use zend_string* for op_array->arg_info[]->name and op_array->arg_info[]...
dstogov authored
307 zend_uintptr_t required_num_args;
c8576c5 Levi Morrison Implement return types
morrisonlevi authored
308 const char *class_name;
309 zend_uchar type_hint;
f2df6a4 - Improved memory usage
Dmitry Stogov authored
310 zend_bool return_reference;
c8576c5 Levi Morrison Implement return types
morrisonlevi authored
311 zend_bool allow_null;
0d7a638 Nikita Popov Implement variadic function syntax
nikic authored
312 zend_bool _is_variadic;
f2df6a4 - Improved memory usage
Dmitry Stogov authored
313 } zend_internal_function_info;
314
573b460 andigutmans Zend Library
andigutmans authored
315 struct _zend_op_array {
5097be3 Zeev Suraski Initial support for enforcing prototype of abstract/interface method imp...
zsuraski authored
316 /* Common elements */
317 zend_uchar type;
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
318 uint32_t fn_flags;
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
319 zend_string *function_name;
5097be3 Zeev Suraski Initial support for enforcing prototype of abstract/interface method imp...
zsuraski authored
320 zend_class_entry *scope;
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
321 zend_function *prototype;
6f9f0bf Anatol Belski master renames phase 2
weltling authored
322 uint32_t num_args;
323 uint32_t required_num_args;
f8bbafd Zeev Suraski ntroduce infrastructure for supplying information about arguments,
zsuraski authored
324 zend_arg_info *arg_info;
5097be3 Zeev Suraski Initial support for enforcing prototype of abstract/interface method imp...
zsuraski authored
325 /* END of common elements */
573b460 andigutmans Zend Library
andigutmans authored
326
6f9f0bf Anatol Belski master renames phase 2
weltling authored
327 uint32_t *refcount;
573b460 andigutmans Zend Library
andigutmans authored
328
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
329 uint32_t this_var;
330
6f9f0bf Anatol Belski master renames phase 2
weltling authored
331 uint32_t last;
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
332 zend_op *opcodes;
573b460 andigutmans Zend Library
andigutmans authored
333
f2df6a4 - Improved memory usage
Dmitry Stogov authored
334 int last_var;
6f9f0bf Anatol Belski master renames phase 2
weltling authored
335 uint32_t T;
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
336 zend_string **vars;
573b460 andigutmans Zend Library
andigutmans authored
337
f8f26de Felipe Pena Fix for segfault on 64bit platform
felipensp authored
338 int last_brk_cont;
9e60cb5 Zeev Suraski Rewrote exception support. Fixes a few limitations and bugs in the old
zsuraski authored
339 int last_try_catch;
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
340 zend_brk_cont_element *brk_cont_array;
341 zend_try_catch_element *try_catch_array;
9e60cb5 Zeev Suraski Rewrote exception support. Fixes a few limitations and bugs in the old
zsuraski authored
342
573b460 andigutmans Zend Library
andigutmans authored
343 /* static variables support */
344 HashTable *static_variables;
345
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
346 zend_string *filename;
6f9f0bf Anatol Belski master renames phase 2
weltling authored
347 uint32_t line_start;
348 uint32_t line_end;
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
349 zend_string *doc_comment;
6f9f0bf Anatol Belski master renames phase 2
weltling authored
350 uint32_t early_binding; /* the linked list of delayed declarations */
c06692e Zeev Suraski The patch we promised - redesigned the compilation/execution API:
zsuraski authored
351
f2df6a4 - Improved memory usage
Dmitry Stogov authored
352 int last_literal;
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
353 zval *literals;
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
354
5f278e4 Dmitry Stogov Use cache_slot offsets instead of indexes (simplify run-time instruction...
dstogov authored
355 int cache_size;
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
356 void **run_time_cache;
c5237d8 Added caches to eliminate repeatable run-time bindings of functions, cla...
Dmitry Stogov authored
357
b5f5e9a andigutmans - Optimize the execute stack a bit.
andigutmans authored
358 void *reserved[ZEND_MAX_RESERVED_RESOURCES];
573b460 andigutmans Zend Library
andigutmans authored
359 };
360
361
e7e0f7d Zeev Suraski - Check return-by-reference bit when implementing interface prototypes
zsuraski authored
362 #define ZEND_RETURN_VALUE 0
363 #define ZEND_RETURN_REFERENCE 1
364
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
365 typedef struct _zend_internal_function {
5097be3 Zeev Suraski Initial support for enforcing prototype of abstract/interface method imp...
zsuraski authored
366 /* Common elements */
367 zend_uchar type;
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
368 uint32_t fn_flags;
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
369 zend_string* function_name;
5097be3 Zeev Suraski Initial support for enforcing prototype of abstract/interface method imp...
zsuraski authored
370 zend_class_entry *scope;
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
371 zend_function *prototype;
6f9f0bf Anatol Belski master renames phase 2
weltling authored
372 uint32_t num_args;
373 uint32_t required_num_args;
5dd427e Dmitry Stogov Use zend_string* for op_array->arg_info[]->name and op_array->arg_info[]...
dstogov authored
374 zend_internal_arg_info *arg_info;
5097be3 Zeev Suraski Initial support for enforcing prototype of abstract/interface method imp...
zsuraski authored
375 /* END of common elements */
573b460 andigutmans Zend Library
andigutmans authored
376
377 void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
637a404 - MFH as discussed
Marcus Boerger authored
378 struct _zend_module_entry *module;
573b460 andigutmans Zend Library
andigutmans authored
379 } zend_internal_function;
380
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
381 #define ZEND_FN_SCOPE_NAME(function) ((function) && (function)->common.scope ? (function)->common.scope->name->val : "")
e8214a3 andigutmans - Commit Marcus' cleanup of abstract and static inheritance and improve
andigutmans authored
382
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
383 union _zend_function {
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
384 zend_uchar type; /* MUST be the first element of this struct! */
d1eea3d andigutmans - Fix bug in nested try/catch's
andigutmans authored
385
573b460 andigutmans Zend Library
andigutmans authored
386 struct {
e92f6f1 andigutmans - define zend_uint and zend_uchar and use them in a few places
andigutmans authored
387 zend_uchar type; /* never used */
ee552b6 Dmitry Stogov Reorder fields for better nenory consumtion and data locality on 64-bit ...
dstogov authored
388 uint32_t fn_flags;
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
389 zend_string *function_name;
d1eea3d andigutmans - Fix bug in nested try/catch's
andigutmans authored
390 zend_class_entry *scope;
5097be3 Zeev Suraski Initial support for enforcing prototype of abstract/interface method imp...
zsuraski authored
391 union _zend_function *prototype;
6f9f0bf Anatol Belski master renames phase 2
weltling authored
392 uint32_t num_args;
393 uint32_t required_num_args;
f8bbafd Zeev Suraski ntroduce infrastructure for supplying information about arguments,
zsuraski authored
394 zend_arg_info *arg_info;
573b460 andigutmans Zend Library
andigutmans authored
395 } common;
637a404 - MFH as discussed
Marcus Boerger authored
396
573b460 andigutmans Zend Library
andigutmans authored
397 zend_op_array op_array;
398 zend_internal_function internal_function;
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
399 };
573b460 andigutmans Zend Library
andigutmans authored
400
1da14c9 Dmitry Stogov Pack EX(frame_info) into EX(This).u1.v.reserved. Rename "frame"kind" int...
dstogov authored
401 typedef enum _zend_call_kind {
402 ZEND_CALL_NESTED_FUNCTION, /* stackless VM call to function */
403 ZEND_CALL_NESTED_CODE, /* stackless VM call to include/require/eval */
404 ZEND_CALL_TOP_FUNCTION, /* direct VM call to function from external C code */
405 ZEND_CALL_TOP_CODE /* direct VM call to "main" code from external C code */
406 } zend_call_kind;
ea2e1bb Dmitry Stogov Optimized zend_leave_helper()
dstogov authored
407
1327480 andigutmans - Fix compile warning.
andigutmans authored
408 struct _zend_execute_data {
f2b0370 Dmitry Stogov Use 'const' qualifier for pointrs to code used at run-time (the code mus...
dstogov authored
409 const zend_op *opline; /* executed opline */
b7715c7 Dmitry Stogov Refactored parameter passing mechanism.
dstogov authored
410 zend_execute_data *call; /* current call */
14e29f5 Dmitry Stogov Reduced size of zend_op on 64-bit systems.
dstogov authored
411 zval *return_value;
b7715c7 Dmitry Stogov Refactored parameter passing mechanism.
dstogov authored
412 zend_function *func; /* executed op_array */
bd9a234 Dmitry Stogov Replaced EG(This) and EX(object) with EX(This).
dstogov authored
413 zval This;
14e29f5 Dmitry Stogov Reduced size of zend_op on 64-bit systems.
dstogov authored
414 #if ZEND_EX_USE_RUN_TIME_CACHE
415 void **run_time_cache;
416 #endif
417 #if ZEND_EX_USE_LITERALS
418 zval *literals;
419 #endif
75b5dc6 Dmitry Stogov Reorder fields for better alignment on both 32-bit and 64-bit systems
dstogov authored
420 zend_class_entry *called_scope;
65e2ed6 Dmitry Stogov Redesigned zend_execute_data layout now EX(object), EX(scope) and EX(cal...
dstogov authored
421 zend_execute_data *prev_execute_data;
b7715c7 Dmitry Stogov Refactored parameter passing mechanism.
dstogov authored
422 zend_array *symbol_table;
1327480 andigutmans - Fix compile warning.
andigutmans authored
423 };
573b460 andigutmans Zend Library
andigutmans authored
424
1da14c9 Dmitry Stogov Pack EX(frame_info) into EX(This).u1.v.reserved. Rename "frame"kind" int...
dstogov authored
425 #define ZEND_CALL_FUNCTION (0 << 0)
426 #define ZEND_CALL_CODE (1 << 0)
427 #define ZEND_CALL_NESTED (0 << 1)
428 #define ZEND_CALL_TOP (1 << 1)
ab0b15b Dmitry Stogov Optimized destruction of extra arguments passed to user functions.
dstogov authored
429 #define ZEND_CALL_FREE_EXTRA_ARGS (1 << 2) /* equal to IS_TYPE_REFCOUNTED */
430 #define ZEND_CALL_CTOR (1 << 3)
431 #define ZEND_CALL_CTOR_RESULT_UNUSED (1 << 4)
33e137d Dmitry Stogov Merged EX(frame_kind) and EX(flags) into single word
dstogov authored
432
1da14c9 Dmitry Stogov Pack EX(frame_info) into EX(This).u1.v.reserved. Rename "frame"kind" int...
dstogov authored
433 #define ZEND_CALL_INFO(call) \
434 (Z_TYPE_INFO((call)->This) >> 24)
33e137d Dmitry Stogov Merged EX(frame_kind) and EX(flags) into single word
dstogov authored
435
1da14c9 Dmitry Stogov Pack EX(frame_info) into EX(This).u1.v.reserved. Rename "frame"kind" int...
dstogov authored
436 #define ZEND_CALL_KIND(call) \
437 (ZEND_CALL_INFO(call) & (ZEND_CALL_CODE | ZEND_CALL_TOP))
438
439 #define ZEND_SET_CALL_INFO(call, info) do { \
440 Z_TYPE_INFO((call)->This) = IS_OBJECT_EX | ((info) << 24); \
441 } while (0)
b7a7b1a Stanislav Malyshev trailing whitespace removal
smalyshev authored
442
1da14c9 Dmitry Stogov Pack EX(frame_info) into EX(This).u1.v.reserved. Rename "frame"kind" int...
dstogov authored
443 #define ZEND_ADD_CALL_FLAG(call, info) do { \
444 Z_TYPE_INFO((call)->This) |= ((info) << 24); \
445 } while (0)
446
447 #define ZEND_CALL_NUM_ARGS(call) \
448 (call)->This.u2.num_args
b7715c7 Dmitry Stogov Refactored parameter passing mechanism.
dstogov authored
449
450 #define ZEND_CALL_FRAME_SLOT \
79354ba Anatol Belski fix integral constant overflow warning
weltling authored
451 ((int)((ZEND_MM_ALIGNED_SIZE(sizeof(zend_execute_data)) + ZEND_MM_ALIGNED_SIZE(sizeof(zval)) - 1) / ZEND_MM_ALIGNED_SIZE(sizeof(zval))))
b7715c7 Dmitry Stogov Refactored parameter passing mechanism.
dstogov authored
452
dcfe587 Dmitry Stogov Rename EX_VAR_2() into ZEND_CALL_VAR() and EX_VAR_NUM_2() into ZEND_CALL...
dstogov authored
453 #define ZEND_CALL_VAR(call, n) \
454 ((zval*)(((char*)(call)) + ((int)(n))))
455
456 #define ZEND_CALL_VAR_NUM(call, n) \
457 (((zval*)(call)) + (ZEND_CALL_FRAME_SLOT + ((int)(n))))
458
b7715c7 Dmitry Stogov Refactored parameter passing mechanism.
dstogov authored
459 #define ZEND_CALL_ARG(call, n) \
dcfe587 Dmitry Stogov Rename EX_VAR_2() into ZEND_CALL_VAR() and EX_VAR_NUM_2() into ZEND_CALL...
dstogov authored
460 ZEND_CALL_VAR_NUM(call, ((int)(n)) - 1)
b7715c7 Dmitry Stogov Refactored parameter passing mechanism.
dstogov authored
461
bd9a234 Dmitry Stogov Replaced EG(This) and EX(object) with EX(This).
dstogov authored
462 #define EX(element) ((execute_data)->element)
b66c89c andigutmans - More debug backtrace work. It still doesn't work very well...
andigutmans authored
463
1da14c9 Dmitry Stogov Pack EX(frame_info) into EX(This).u1.v.reserved. Rename "frame"kind" int...
dstogov authored
464 #define EX_CALL_INFO() ZEND_CALL_INFO(execute_data)
465 #define EX_CALL_KIND() ZEND_CALL_KIND(execute_data)
466 #define EX_NUM_ARGS() ZEND_CALL_NUM_ARGS(execute_data)
467
dcfe587 Dmitry Stogov Rename EX_VAR_2() into ZEND_CALL_VAR() and EX_VAR_NUM_2() into ZEND_CALL...
dstogov authored
468 #define EX_VAR(n) ZEND_CALL_VAR(execute_data, n)
469 #define EX_VAR_NUM(n) ZEND_CALL_VAR_NUM(execute_data, n)
573b460 andigutmans Zend Library
andigutmans authored
470
dcfe587 Dmitry Stogov Rename EX_VAR_2() into ZEND_CALL_VAR() and EX_VAR_NUM_2() into ZEND_CALL...
dstogov authored
471 #define EX_VAR_TO_NUM(n) (ZEND_CALL_VAR(NULL, n) - ZEND_CALL_VAR_NUM(NULL, 0))
9a8fbdf Dmitry Stogov Use CV variable offset instead of CV variable number
dstogov authored
472
14e29f5 Dmitry Stogov Reduced size of zend_op on 64-bit systems.
dstogov authored
473 #define ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, opline_num) \
474 ((char*)&(op_array)->opcodes[opline_num] - (char*)(opline))
475
476 #define ZEND_OFFSET_TO_OPLINE(base, offset) \
477 ((zend_op*)(((char*)(base)) + (int)offset))
478
479 #define ZEND_OFFSET_TO_OPLINE_NUM(op_array, base, offset) \
480 (ZEND_OFFSET_TO_OPLINE(base, offset) - op_array->opcodes)
481
482 #if ZEND_USE_ABS_JMP_ADDR
483
484 /* run-time jump target */
485 # define OP_JMP_ADDR(opline, node) \
486 (node).jmp_addr
487
488 /* convert jump target from compile-time to run-time */
489 # define ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, node) do { \
490 (node).jmp_addr = (op_array)->opcodes + (node).opline_num; \
491 } while (0)
492
493 /* convert jump target back from run-time to compile-time */
494 # define ZEND_PASS_TWO_UNDO_JMP_TARGET(op_array, opline, node) do { \
495 (node).opline_num = (node).jmp_addr - (op_array)->opcodes; \
496 } while (0)
497
498 #else
499
500 /* run-time jump target */
501 # define OP_JMP_ADDR(opline, node) \
502 ZEND_OFFSET_TO_OPLINE(opline, (node).jmp_offset)
503
504 /* convert jump target from compile-time to run-time */
505 # define ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, node) do { \
506 (node).jmp_offset = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, (node).opline_num); \
507 } while (0)
508
509 /* convert jump target back from run-time to compile-time */
510 # define ZEND_PASS_TWO_UNDO_JMP_TARGET(op_array, opline, node) do { \
511 (node).opline_num = ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, (node).jmp_offset); \
b7a7b1a Stanislav Malyshev trailing whitespace removal
smalyshev authored
512 } while (0)
14e29f5 Dmitry Stogov Reduced size of zend_op on 64-bit systems.
dstogov authored
513
514 #endif
515
516 /* constant-time constant */
517 # define CT_CONSTANT_EX(op_array, num) \
518 ((op_array)->literals + (num))
519
520 # define CT_CONSTANT(node) \
521 CT_CONSTANT_EX(CG(active_op_array), (node).constant)
522
523 #if ZEND_USE_ABS_CONST_ADDR
524
525 /* run-time constant */
526 # define RT_CONSTANT_EX(base, node) \
527 (node).zv
528
529 /* convert constant from compile-time to run-time */
530 # define ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, node) do { \
531 (node).zv = CT_CONSTANT_EX(op_array, (node).constant); \
532 } while (0)
533
534 /* convert constant back from run-time to compile-time */
535 # define ZEND_PASS_TWO_UNDO_CONSTANT(op_array, node) do { \
536 (node).constant = (node).zv - (op_array)->literals; \
537 } while (0)
538
539 #else
540
541 /* run-time constant */
542 # define RT_CONSTANT_EX(base, node) \
543 ((zval*)(((char*)(base)) + (node).constant))
544
545 /* convert constant from compile-time to run-time */
546 # define ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, node) do { \
547 (node).constant *= sizeof(zval); \
548 } while (0)
549
550 /* convert constant back from run-time to compile-time (do nothing) */
551 # define ZEND_PASS_TWO_UNDO_CONSTANT(op_array, node) do { \
552 (node).constant /= sizeof(zval); \
553 } while (0)
554
555 #endif
556
557 #if ZEND_EX_USE_LITERALS
558
559 # define EX_LITERALS() \
560 EX(literals)
561
562 # define EX_LOAD_LITERALS(op_array) do { \
563 EX(literals) = (op_array)->literals; \
564 } while (0)
565
566 #else
567
568 # define EX_LITERALS() \
569 EX(func)->op_array.literals
570
571 # define EX_LOAD_LITERALS(op_array) do { \
572 } while (0)
573
574 #endif
575
576 /* run-time constant */
577 #define RT_CONSTANT(op_array, node) \
578 RT_CONSTANT_EX((op_array)->literals, node)
579
580 /* constant in currently executed function */
581 #define EX_CONSTANT(node) \
582 RT_CONSTANT_EX(EX_LITERALS(), node)
583
584 #if ZEND_EX_USE_RUN_TIME_CACHE
585
586 # define EX_RUN_TIME_CACHE() \
587 EX(run_time_cache)
588
589 # define EX_LOAD_RUN_TIME_CACHE(op_array) do { \
590 EX(run_time_cache) = (op_array)->run_time_cache; \
591 } while (0)
592
593 #else
594
595 # define EX_RUN_TIME_CACHE() \
596 EX(func)->op_array.run_time_cache
597
598 # define EX_LOAD_RUN_TIME_CACHE(op_array) do { \
599 } while (0)
600
601 #endif
602
573b460 andigutmans Zend Library
andigutmans authored
603 #define IS_CONST (1<<0)
604 #define IS_TMP_VAR (1<<1)
605 #define IS_VAR (1<<2)
606 #define IS_UNUSED (1<<3) /* Unused variable */
db507dd andigutmans - Commit the variable fetch optimization.
andigutmans authored
607 #define IS_CV (1<<4) /* Compiled variable */
573b460 andigutmans Zend Library
andigutmans authored
608
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
609 #define EXT_TYPE_UNUSED (1<<5)
573b460 andigutmans Zend Library
andigutmans authored
610
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
611 #include "zend_globals.h"
612
ad115d2 Zeev Suraski Fix require()
zsuraski authored
613 BEGIN_EXTERN_C()
614
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
615 void init_compiler(void);
616 void shutdown_compiler(void);
617 void zend_init_compiler_data_structures(void);
618 void zend_init_compiler_context(void);
573b460 andigutmans Zend Library
andigutmans authored
619
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
620 extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type);
621 extern ZEND_API zend_op_array *(*zend_compile_string)(zval *source_string, char *filename);
573b460 andigutmans Zend Library
andigutmans authored
622
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
623 ZEND_API int lex_scan(zval *zendlval);
624 void startup_scanner(void);
625 void shutdown_scanner(void);
573b460 andigutmans Zend Library
andigutmans authored
626
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
627 ZEND_API zend_string *zend_set_compiled_filename(zend_string *new_compiled_filename);
628 ZEND_API void zend_restore_compiled_filename(zend_string *original_compiled_filename);
629 ZEND_API zend_string *zend_get_compiled_filename(void);
630 ZEND_API int zend_get_compiled_lineno(void);
631 ZEND_API size_t zend_get_scanned_file_offset(void);
573b460 andigutmans Zend Library
andigutmans authored
632
6f9f0bf Anatol Belski master renames phase 2
weltling authored
633 ZEND_API zend_string *zend_get_compiled_variable_name(const zend_op_array *op_array, uint32_t var);
8838c0f andigutmans - Two new API calls for Derick (retreive CV name and value) by Dmitry
andigutmans authored
634
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
635 #ifdef ZTS
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
636 const char *zend_get_zendtext(void);
637 int zend_get_zendleng(void);
1aa2c5c Zeev Suraski Ok, call me crazy, because I probably am.
zsuraski authored
638 #endif
639
573b460 andigutmans Zend Library
andigutmans authored
640
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
641 typedef int (*unary_op_type)(zval *, zval *);
642 typedef int (*binary_op_type)(zval *, zval *, zval *);
8802964 * fix some casts
Sascha Schumann authored
643 ZEND_API unary_op_type get_unary_op(int opcode);
22a5aea MFH: - Updated unary_op_type typedef with TSRMLS_DC
Matt Wilmas authored
644 ZEND_API binary_op_type get_binary_op(int opcode);
573b460 andigutmans Zend Library
andigutmans authored
645
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
646 void zend_stop_lexing(void);
647 void zend_emit_final_return(zval *zv);
df42793 Nikita Popov Create namespace_name via AST
nikic authored
648 zend_ast *zend_ast_append_str(zend_ast *left, zend_ast *right);
f48c232 Decoupled class declaration statement into more granular pieces.
Guilherme Blanco authored
649 uint32_t zend_add_class_modifier(uint32_t flags, uint32_t new_flag);
6db293d Nikita Popov Merge remote-tracking branch 'php-src/master' into ast
nikic authored
650 uint32_t zend_add_member_modifier(uint32_t flags, uint32_t new_flag);
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
651 zend_ast *zend_ast_append_doc_comment(zend_ast *list);
652 void zend_handle_encoding_declaration(zend_ast *ast);
ac7ed46 andigutmans - Start adding parsed variable checks.
andigutmans authored
653
0eab81f Nikita Popov Remove bits of dead code
nikic authored
654 /* parser-driven code generators */
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
655 void zend_do_free(znode *op1);
573b460 andigutmans Zend Library
andigutmans authored
656
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
657 ZEND_API int do_bind_function(const zend_op_array *op_array, const zend_op *opline, HashTable *function_table, zend_bool compile_time);
658 ZEND_API zend_class_entry *do_bind_class(const zend_op_array *op_array, const zend_op *opline, HashTable *class_table, zend_bool compile_time);
659 ZEND_API zend_class_entry *do_bind_inherited_class(const zend_op_array *op_array, const zend_op *opline, HashTable *class_table, zend_class_entry *parent_ce, zend_bool compile_time);
660 ZEND_API void zend_do_delayed_early_binding(const zend_op_array *op_array);
573b460 andigutmans Zend Library
andigutmans authored
661
cd6415f Implemented Traits for PHP as proposed in the RFC [TRAITS]
Stefan Marr authored
662 /* Functions for a null terminated pointer list, used for traits parsing and compilation */
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
663 void zend_init_list(void *result, void *item);
664 void zend_add_to_list(void *result, void *item);
cd6415f Implemented Traits for PHP as proposed in the RFC [TRAITS]
Stefan Marr authored
665
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
666 void zend_do_extended_info(void);
667 void zend_do_extended_fcall_begin(void);
668 void zend_do_extended_fcall_end(void);
573b460 andigutmans Zend Library
andigutmans authored
669
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
670 void zend_verify_namespace(void);
671 void zend_do_end_compilation(void);
8991ed0 Lars Strojny Class Name Resolution As Scalar Via "class" Keyword
lstrojny authored
672
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
673 void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2);
674 void zend_release_labels(int temporary);
f66f55e Felipe Pena MFH: Implemented "jump label" operator (limited "goto")
felipensp authored
675
727398b andigutmans Add to the API
andigutmans authored
676 ZEND_API void function_add_ref(zend_function *function);
0b7a9ce Zeev Suraski - Fix Win32 compilation (Use winsock2.h from now on)
zsuraski authored
677
7c4a083 Zeev Suraski Various thread safety fixes and DLL updates
zsuraski authored
678 #define INITIAL_OP_ARRAY_SIZE 64
679
573b460 andigutmans Zend Library
andigutmans authored
680
7b0d92d Zeev Suraski Unify the names of these last 3 files...
zsuraski authored
681 /* helper functions in zend_language_scanner.l */
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
682 ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type);
683 ZEND_API zend_op_array *compile_string(zval *source_string, char *filename);
684 ZEND_API zend_op_array *compile_filename(int type, zval *filename);
685 ZEND_API int zend_execute_scripts(int type, zval *retval, int file_count, ...);
686 ZEND_API int open_file_for_scanning(zend_file_handle *file_handle);
687 ZEND_API void init_op_array(zend_op_array *op_array, zend_uchar type, int initial_ops_size);
688 ZEND_API void destroy_op_array(zend_op_array *op_array);
689 ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle);
690 ZEND_API void zend_cleanup_user_class_data(zend_class_entry *ce);
691 ZEND_API void zend_cleanup_internal_class_data(zend_class_entry *ce);
692 ZEND_API void zend_cleanup_internal_classes(void);
f71da39 Dmitry Stogov Use ZEND_HASH_FOEACH_* instead of zend_hash_apply_*
dstogov authored
693 ZEND_API void zend_cleanup_op_array_data(zend_op_array *op_array);
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
694 ZEND_API int clean_non_persistent_function_full(zval *zv);
695 ZEND_API int clean_non_persistent_class_full(zval *zv);
573b460 andigutmans Zend Library
andigutmans authored
696
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
697 ZEND_API void destroy_zend_function(zend_function *function);
2b9b9af Dmitry Stogov Use better data structures (incomplete)
dstogov authored
698 ZEND_API void zend_function_dtor(zval *zv);
699 ZEND_API void destroy_zend_class(zval *zv);
700 void zend_class_add_ref(zval *zv);
7c4a083 Zeev Suraski Various thread safety fixes and DLL updates
zsuraski authored
701
079409b Nikita Popov Switch (un)mangle property name to size_t and zend_string
nikic authored
702 ZEND_API zend_string *zend_mangle_property_name(const char *src1, size_t src1_length, const char *src2, size_t src2_length, int internal);
703 #define zend_unmangle_property_name(mangled_property, class_name, prop_name) \
704 zend_unmangle_property_name_ex(mangled_property, class_name, prop_name, NULL)
705 ZEND_API int zend_unmangle_property_name_ex(const zend_string *name, const char **class_name, const char **prop_name, size_t *prop_len);
471947b Zeev Suraski Reimplement PPP properties
zsuraski authored
706
2b9b9af Dmitry Stogov Use better data structures (incomplete)
dstogov authored
707 #define ZEND_FUNCTION_DTOR zend_function_dtor
708 #define ZEND_CLASS_DTOR destroy_zend_class
81d901b Zeev Suraski Step 1 in nuking the garbage collector:
zsuraski authored
709
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
710 zend_op *get_next_op(zend_op_array *op_array);
711 void init_op(zend_op *op);
573b460 andigutmans Zend Library
andigutmans authored
712 int get_next_op_number(zend_op_array *op_array);
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
713 int print_class(zend_class_entry *class_entry);
573b460 andigutmans Zend Library
andigutmans authored
714 void print_op_array(zend_op_array *op_array, int optimizations);
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
715 ZEND_API int pass_two(zend_op_array *op_array);
573b460 andigutmans Zend Library
andigutmans authored
716 zend_brk_cont_element *get_next_brk_cont_element(zend_op_array *op_array);
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
717 ZEND_API zend_bool zend_is_compiling(void);
718 ZEND_API char *zend_make_compiled_string_description(const char *name);
719 ZEND_API void zend_initialize_class_data(zend_class_entry *ce, zend_bool nullify_handlers);
6db293d Nikita Popov Merge remote-tracking branch 'php-src/master' into ast
nikic authored
720 uint32_t zend_get_class_fetch_type(zend_string *name);
c2c78dc Dmitry Stogov Added specialized versions of DO_FCALL handler:
dstogov authored
721 ZEND_API zend_uchar zend_get_call_op(zend_uchar init_op, zend_function *fbc);
c17c7a2 Zeev Suraski Centralize class initialization
zsuraski authored
722
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
723 typedef zend_bool (*zend_auto_global_callback)(zend_string *name);
f7b7800 Zeev Suraski Add infrastructure for JIT initialization of auto globals
zsuraski authored
724 typedef struct _zend_auto_global {
f4cfaf3 Dmitry Stogov Use better data structures (incomplete)
dstogov authored
725 zend_string *name;
f7b7800 Zeev Suraski Add infrastructure for JIT initialization of auto globals
zsuraski authored
726 zend_auto_global_callback auto_global_callback;
f0c8366 - use interned strings for auto globals
Dmitry Stogov authored
727 zend_bool jit;
f7b7800 Zeev Suraski Add infrastructure for JIT initialization of auto globals
zsuraski authored
728 zend_bool armed;
729 } zend_auto_global;
573b460 andigutmans Zend Library
andigutmans authored
730
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
731 ZEND_API int zend_register_auto_global(zend_string *name, zend_bool jit, zend_auto_global_callback auto_global_callback);
732 ZEND_API void zend_activate_auto_globals(void);
733 ZEND_API zend_bool zend_is_auto_global(zend_string *name);
da7d94c Xinchen Hui Merge branch 'PHP-5.6'
laruence authored
734 ZEND_API zend_bool zend_is_auto_global_str(char *name, size_t len);
fd597dc Stanislav Malyshev [DOC] Add compile-time __DIR__ constant which implements dirname(__FILE_...
smalyshev authored
735 ZEND_API size_t zend_dirname(char *path, size_t len);
9d11db1 andigutmans - Merge new $_GET, $_POST etc. patch from Engine 1 tree
andigutmans authored
736
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
737 int zendlex(zend_parser_stack_elem *elem);
573b460 andigutmans Zend Library
andigutmans authored
738
bdeb220 Anatol Belski first shot remove TSRMLS_* things
weltling authored
739 int zend_add_literal(zend_op_array *op_array, zval *zv);
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
740
5ae7fa4 add markers that make this file easy to parse for external sources
Sterling Hughes authored
741 /* BEGIN: OPCODES */
f7f5a5e Stanislav Malyshev MEGA-patch: namespaces are R.I.P.
smalyshev authored
742
a904c1d andigutmans - Improve comments, docs, code...
andigutmans authored
743 #include "zend_vm_opcodes.h"
a4c3b2c Stanislav Malyshev Namespace patch. Big changes:
smalyshev authored
744
a904c1d andigutmans - Improve comments, docs, code...
andigutmans authored
745 #define ZEND_OP_DATA 137
9e60cb5 Zeev Suraski Rewrote exception support. Fixes a few limitations and bugs in the old
zsuraski authored
746
5ae7fa4 add markers that make this file easy to parse for external sources
Sterling Hughes authored
747 /* END: OPCODES */
573b460 andigutmans Zend Library
andigutmans authored
748
74efc41 andigutmans - Make classes have scope and function/constant lookups default to the c...
andigutmans authored
749 /* class fetches */
750 #define ZEND_FETCH_CLASS_DEFAULT 0
751 #define ZEND_FETCH_CLASS_SELF 1
b3fd2fa andigutmans - Support parent:: again
andigutmans authored
752 #define ZEND_FETCH_CLASS_PARENT 2
4a3e501 Dmitry Stogov cleanup
dstogov authored
753 #define ZEND_FETCH_CLASS_STATIC 3
754 #define ZEND_FETCH_CLASS_AUTO 4
755 #define ZEND_FETCH_CLASS_INTERFACE 5
756 #define ZEND_FETCH_CLASS_TRAIT 6
eb0c56a Fixed bug #42820 (defined() on constant with namespace prefixes tries to...
Dmitry Stogov authored
757 #define ZEND_FETCH_CLASS_MASK 0x0f
9305339 Changed "instanceof" and "catch" operators, is_a() and is_subclass_of() ...
Dmitry Stogov authored
758 #define ZEND_FETCH_CLASS_NO_AUTOLOAD 0x80
eb0c56a Fixed bug #42820 (defined() on constant with namespace prefixes tries to...
Dmitry Stogov authored
759 #define ZEND_FETCH_CLASS_SILENT 0x0100
74efc41 andigutmans - Make classes have scope and function/constant lookups default to the c...
andigutmans authored
760
880e7d8 andigutmans - Framework for knowing what kind of variable we just parsed.
andigutmans authored
761 /* variable parsing type (compile-time) */
03b6af0 Zeev Suraski Support references in foreach()
zsuraski authored
762 #define ZEND_PARSED_MEMBER (1<<0)
763 #define ZEND_PARSED_METHOD_CALL (1<<1)
764 #define ZEND_PARSED_STATIC_MEMBER (1<<2)
765 #define ZEND_PARSED_FUNCTION_CALL (1<<3)
766 #define ZEND_PARSED_VARIABLE (1<<4)
767 #define ZEND_PARSED_REFERENCE_VARIABLE (1<<5)
44325e6 Fixed bug #45178 (memory corruption on assignment result of "new" by ref...
Dmitry Stogov authored
768 #define ZEND_PARSED_NEW (1<<6)
35951d4 Xinchen Hui Support list in foreach
laruence authored
769 #define ZEND_PARSED_LIST_EXPR (1<<7)
880e7d8 andigutmans - Framework for knowing what kind of variable we just parsed.
andigutmans authored
770
1ee3277 Nikita Popov Port parameter defs
nikic authored
771 #define ZEND_PARAM_REF (1<<0)
772 #define ZEND_PARAM_VARIADIC (1<<1)
773
cc0bef6 Nikita Popov Fix namespace\, maybe
nikic authored
774 #define ZEND_NAME_FQ 0
775 #define ZEND_NAME_NOT_FQ 1
776 #define ZEND_NAME_RELATIVE 2
880e7d8 andigutmans - Framework for knowing what kind of variable we just parsed.
andigutmans authored
777
5af7770 andigutmans - Sync Engine2 CVS with latest Engine CVS
andigutmans authored
778 /* unset types */
779 #define ZEND_UNSET_REG 0
780
573b460 andigutmans Zend Library
andigutmans authored
781 /* var status for backpatching */
06d04d1 andigutmans - Fix SEND_VAR problem after fetch'ing a variable and not knowing the fe...
andigutmans authored
782 #define BP_VAR_R 0
783 #define BP_VAR_W 1
784 #define BP_VAR_RW 2
785 #define BP_VAR_IS 3
258a733 Nikita Popov AST-based compiler: Stage 1
nikic authored
786 #define BP_VAR_FUNC_ARG 4
787 #define BP_VAR_UNSET 5
788 #define BP_VAR_REF 6 /* right-hand side of by-ref assignment */
789
790 /* Bottom 3 bits are the type, top bits are arg num for BP_VAR_FUNC_ARG */
791 #define BP_VAR_SHIFT 3
792 #define BP_VAR_MASK 7
573b460 andigutmans Zend Library
andigutmans authored
793
794
49c4866 Zeev Suraski - Improve tracking
zsuraski authored
795 #define ZEND_INTERNAL_FUNCTION 1
796 #define ZEND_USER_FUNCTION 2
797 #define ZEND_OVERLOADED_FUNCTION 3
798 #define ZEND_EVAL_CODE 4
799 #define ZEND_OVERLOADED_FUNCTION_TEMPORARY 5
573b460 andigutmans Zend Library
andigutmans authored
800
b7715c7 Dmitry Stogov Refactored parameter passing mechanism.
dstogov authored
801 /* A quick check (type == ZEND_USER_FUNCTION || type == ZEND_EVAL_CODE) */
802 #define ZEND_USER_CODE(type) ((type & 1) == 0)
803
62f9eb8 Split ZEND_NAMESPACE into user and internal namespaces. Hope this is
Andrei Zmievski authored
804 #define ZEND_INTERNAL_CLASS 1
805 #define ZEND_USER_CLASS 2
573b460 andigutmans Zend Library
andigutmans authored
806
807 #define ZEND_EVAL (1<<0)
808 #define ZEND_INCLUDE (1<<1)
9cc7044 andigutmans - Cleanup old IMPORT stuff
andigutmans authored
809 #define ZEND_INCLUDE_ONCE (1<<2)
67b4b3a Zeev Suraski - require() of a dynamic expression now has the standard require() seman...
zsuraski authored
810 #define ZEND_REQUIRE (1<<3)
c06692e Zeev Suraski The patch we promised - redesigned the compilation/execution API:
zsuraski authored
811 #define ZEND_REQUIRE_ONCE (1<<4)
573b460 andigutmans Zend Library
andigutmans authored
812
813 #define ZEND_CT (1<<0)
814 #define ZEND_RT (1<<1)
815
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
816 /* global/local fetches */
817 #define ZEND_FETCH_GLOBAL 0x00000000
818 #define ZEND_FETCH_LOCAL 0x10000000
819 #define ZEND_FETCH_STATIC 0x20000000
820 #define ZEND_FETCH_STATIC_MEMBER 0x30000000
821 #define ZEND_FETCH_GLOBAL_LOCK 0x40000000
822 #define ZEND_FETCH_LEXICAL 0x50000000
823
824 #define ZEND_FETCH_TYPE_MASK 0x70000000
825
826 #define ZEND_FETCH_STANDARD 0x00000000
827
828 #define ZEND_ISSET 0x02000000
829 #define ZEND_ISEMPTY 0x01000000
830 #define ZEND_ISSET_ISEMPTY_MASK (ZEND_ISSET | ZEND_ISEMPTY)
831 #define ZEND_QUICK_SET 0x00800000
832
833 #define ZEND_FETCH_ARG_MASK 0x000fffff
1250c43 Zeev Suraski * Add struct name to all typedef's so that they can be debugged with MSV...
zsuraski authored
834
94dd837 Changed the structure of op_array.opcodes. The constant values are moved...
Dmitry Stogov authored
835 #define EXT_TYPE_FREE_ON_RETURN (1<<2)
7a5240e - MFH missing bits and pieces of the partial sync with head
Marcus Boerger authored
836
741b816 Zeev Suraski * Support getThis() for internal functions.
zsuraski authored
837 #define ZEND_MEMBER_FUNC_CALL 1<<0
838
8d90825 andigutmans - Allow passing references which are returned from functions and new
andigutmans authored
839 #define ZEND_ARG_SEND_BY_REF (1<<0)
840 #define ZEND_ARG_COMPILE_TIME_BOUND (1<<1)
21e071b Fixed bug #33257 (array_splice() inconsistent when passed function inste...
Dmitry Stogov authored
841 #define ZEND_ARG_SEND_FUNCTION (1<<2)
666bf10 Removed wrong warning message
Dmitry Stogov authored
842 #define ZEND_ARG_SEND_SILENT (1<<3)
6ec1acb Zeev Suraski Phase 3:
zsuraski authored
843
ebd4ab4 Fixed bug #25359 (array_multisort() doesn't work in a function if array ...
Dmitry Stogov authored
844 #define ZEND_SEND_BY_VAL 0
845 #define ZEND_SEND_BY_REF 1
846 #define ZEND_SEND_PREFER_REF 2
847
f1bf531 Dmitry Stogov Replaced macro with better optimized inline function
dstogov authored
848 static zend_always_inline int zend_check_arg_send_type(const zend_function *zf, uint32_t arg_num, uint32_t mask)
849 {
2646f7b Dmitry Stogov Don't count variadic argument in zend_func.common.num_args. This allows ...
dstogov authored
850 arg_num--;
851 if (UNEXPECTED(arg_num >= zf->common.num_args)) {
f1bf531 Dmitry Stogov Replaced macro with better optimized inline function
dstogov authored
852 if (EXPECTED((zf->common.fn_flags & ZEND_ACC_VARIADIC) == 0)) {
853 return 0;
854 }
855 arg_num = zf->common.num_args;
856 }
2646f7b Dmitry Stogov Don't count variadic argument in zend_func.common.num_args. This allows ...
dstogov authored
857 return UNEXPECTED((zf->common.arg_info[arg_num].pass_by_reference & mask) != 0);
f1bf531 Dmitry Stogov Replaced macro with better optimized inline function
dstogov authored
858 }
c3272ab Fixed bug #38808 ("maybe ref" issue for current() and others)
Dmitry Stogov authored
859
860 #define ARG_MUST_BE_SENT_BY_REF(zf, arg_num) \
f1bf531 Dmitry Stogov Replaced macro with better optimized inline function
dstogov authored
861 zend_check_arg_send_type(zf, arg_num, ZEND_SEND_BY_REF)
c3272ab Fixed bug #38808 ("maybe ref" issue for current() and others)
Dmitry Stogov authored
862
863 #define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \
f1bf531 Dmitry Stogov Replaced macro with better optimized inline function
dstogov authored
864 zend_check_arg_send_type(zf, arg_num, ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF)
c3272ab Fixed bug #38808 ("maybe ref" issue for current() and others)
Dmitry Stogov authored
865
866 #define ARG_MAY_BE_SENT_BY_REF(zf, arg_num) \
f1bf531 Dmitry Stogov Replaced macro with better optimized inline function
dstogov authored
867 zend_check_arg_send_type(zf, arg_num, ZEND_SEND_PREFER_REF)
f8bbafd Zeev Suraski ntroduce infrastructure for supplying information about arguments,
zsuraski authored
868
ced9cee Zeev Suraski - Implement return by reference:
zsuraski authored
869 #define ZEND_RETURN_VAL 0
870 #define ZEND_RETURN_REF 1
871
3a42bab Zeev Suraski Fix behavior of return-by-reference functions. Remove erroneous warning...
zsuraski authored
872
873 #define ZEND_RETURNS_FUNCTION 1<<0
4d3e4d3 Nikita Popov Remove assignment of new by reference
nikic authored
874 #define ZEND_RETURNS_VALUE 1<<1
3a42bab Zeev Suraski Fix behavior of return-by-reference functions. Remove erroneous warning...
zsuraski authored
875
eb4825b Dmitry Stogov Improved "finally" im[plementation
dstogov authored
876 #define ZEND_FAST_RET_TO_CATCH 1
877 #define ZEND_FAST_RET_TO_FINALLY 2
878
8ff00e6 Xinchen Hui Improve fix for #66608
laruence authored
879 #define ZEND_FAST_CALL_FROM_CATCH 1
880 #define ZEND_FAST_CALL_FROM_FINALLY 2
de433d4 Xinchen Hui Fixed bug #66608 (Incorrect behavior with nested "finally" blocks)
laruence authored
881
7e424f5 Dmitry Stogov Use symbolic names instead of magic constants + optimization
dstogov authored
882 #define ZEND_ARRAY_ELEMENT_REF (1<<0)
883 #define ZEND_ARRAY_NOT_PACKED (1<<1)
884 #define ZEND_ARRAY_SIZE_SHIFT 2
885
ad115d2 Zeev Suraski Fix require()
zsuraski authored
886 END_EXTERN_C()
887
d8651c8 Stanislav Malyshev Support for __get, __set and __call in classes.
smalyshev authored
888 #define ZEND_CLONE_FUNC_NAME "__clone"
889 #define ZEND_CONSTRUCTOR_FUNC_NAME "__construct"
890 #define ZEND_DESTRUCTOR_FUNC_NAME "__destruct"
891 #define ZEND_GET_FUNC_NAME "__get"
892 #define ZEND_SET_FUNC_NAME "__set"
637a404 - MFH as discussed
Marcus Boerger authored
893 #define ZEND_UNSET_FUNC_NAME "__unset"
894 #define ZEND_ISSET_FUNC_NAME "__isset"
d8651c8 Stanislav Malyshev Support for __get, __set and __call in classes.
smalyshev authored
895 #define ZEND_CALL_FUNC_NAME "__call"
b20ed0d Added support for __callstatic() magic method. (Sara)
Dmitry Stogov authored
896 #define ZEND_CALLSTATIC_FUNC_NAME "__callstatic"
637a404 - MFH as discussed
Marcus Boerger authored
897 #define ZEND_TOSTRING_FUNC_NAME "__tostring"
5f0433d MFB: Enforce protocol on magic methods/functions
Marcus Boerger authored
898 #define ZEND_AUTOLOAD_FUNC_NAME "__autoload"
01049ca Xinchen Hui Fixed bug #61025 (__invoke() visibility not honored)
laruence authored
899 #define ZEND_INVOKE_FUNC_NAME "__invoke"
1e752ce Sara Golemon Add __debugInfo() magic method
sgolemon authored
900 #define ZEND_DEBUGINFO_FUNC_NAME "__debuginfo"
d8651c8 Stanislav Malyshev Support for __get, __set and __call in classes.
smalyshev authored
901
8c885b8 Implemented concept of "delayed early binding" that allows opcode caches...
Dmitry Stogov authored
902 /* The following constants may be combined in CG(compiler_options)
903 * to change the default compiler behavior */
904
905 /* generate extended debug information */
906 #define ZEND_COMPILE_EXTENDED_INFO (1<<0)
907
908 /* call op_array handler of extendions */
909 #define ZEND_COMPILE_HANDLE_OP_ARRAY (1<<1)
910
b7715c7 Dmitry Stogov Refactored parameter passing mechanism.
dstogov authored
911 /* generate ZEND_INIT_FCALL_BY_NAME for internal functions instead of ZEND_INIT_FCALL */
8c885b8 Implemented concept of "delayed early binding" that allows opcode caches...
Dmitry Stogov authored
912 #define ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS (1<<2)
913
914 /* don't perform early binding for classes inherited form internal ones;
915 * in namespaces assume that internal class that doesn't exist at compile-time
916 * may apper in run-time */
917 #define ZEND_COMPILE_IGNORE_INTERNAL_CLASSES (1<<3)
918
919 /* generate ZEND_DECLARE_INHERITED_CLASS_DELAYED opcode to delay early binding */
920 #define ZEND_COMPILE_DELAYED_BINDING (1<<4)
921
ed2d3e4 Substitute persistent constants by their values at compile time. (Matt)
Dmitry Stogov authored
922 /* disable constant substitution at compile-time */
923 #define ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION (1<<5)
924
6c8db86 Dmitry Stogov Implemented builtin instruction for strlen()
dstogov authored
925 /* disable usage of builtin instruction for strlen() */
926 #define ZEND_COMPILE_NO_BUILTIN_STRLEN (1<<6)
927
2b3bebf Bob Weinand Revert removal of two ReflectionParameter functions
bwoebi authored
928 /* disable substitution of persistent constants at compile-time */
929 #define ZEND_COMPILE_NO_PERSISTENT_CONSTANT_SUBSTITUTION (1<<7)
930
8c885b8 Implemented concept of "delayed early binding" that allows opcode caches...
Dmitry Stogov authored
931 /* The default value for CG(compiler_options) */
932 #define ZEND_COMPILE_DEFAULT ZEND_COMPILE_HANDLE_OP_ARRAY
933
934 /* The default value for CG(compiler_options) during eval() */
935 #define ZEND_COMPILE_DEFAULT_FOR_EVAL 0
936
a617217 Replace macros which begin with an underscore through an appropiately
Sascha Schumann authored
937 #endif /* ZEND_COMPILE_H */
333406b - Added some missing CVS $Id$ tags, headers and footers.
foobar authored
938
939 /*
940 * Local variables:
941 * tab-width: 4
942 * c-basic-offset: 4
943 * indent-tabs-mode: t
944 * End:
945 */
Something went wrong with that request. Please try again.