From 4eb55fe901833707a9e1bf55f706bd191ba54dbc Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 19 Apr 2013 22:25:30 +0100 Subject: [PATCH 01/61] part of mangled property names exposure solution --- Zend/zend_object_handlers.c | 61 +++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 92c67c3436d4..24f326e3c189 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1517,7 +1517,7 @@ int zend_std_object_get_class_name(const zval *object, const char **class_name, } /* }}} */ -ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int type TSRMLS_DC) /* {{{ */ +ZEND_API int zend_std_cast_object(zval *readobj, zval *writeobj, int type TSRMLS_DC) /* {{{ */ { zval *retval; zend_class_entry *ce; @@ -1579,6 +1579,63 @@ ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int ty } ZVAL_DOUBLE(writeobj, 1); return SUCCESS; + case IS_ARRAY: + if (Z_OBJ_HT_P(readobj)->get_properties) { + HashTable *props = Z_OBJPROP_P(readobj); + + if (props) { + HashPosition position; + zval **property; + + for (zend_hash_internal_pointer_reset_ex(props, &position); + zend_hash_get_current_data_ex(props, (void**) &property, &position) == SUCCESS; + zend_hash_move_forward_ex(props, &position)) { + char *mangled = NULL; + uint mlength; + ulong idx; + + switch (zend_hash_get_current_key_ex(props, &mangled, &mlength, &idx, 0, &position)) { + case HASH_KEY_IS_STRING: { + const char *cname; + const char *pname; + int plength; + + if (zend_unmangle_property_name_ex(mangled, mlength, &cname, &pname, &plength) == SUCCESS) { + zend_property_info *info = NULL; + char *rname = NULL; + + if (zend_hash_find(&Z_OBJCE_P(readobj)->properties_info, pname, plength, (void**)&info) == SUCCESS) { + switch (info->flags) { + case ZEND_ACC_PROTECTED: { + if((plength = asprintf(&rname, "protected:%s:%s", cname, pname))) { + pname = rname; + plength++; + } + } + case ZEND_ACC_PRIVATE: { + if((plength = asprintf(&rname, "private:%s:%s", cname, pname))) { + pname = rname; + plength++; + } + } + + default: { + zend_hash_update( + Z_ARRVAL_P(writeobj), pname, plength, (void**) &property, sizeof(zval*), NULL); + if (rname) + free(rname); + zval_copy_ctor(*property); + } + } + } + } + } break; + } + } + return SUCCESS; + } + } + return FAILURE; default: INIT_PZVAL(writeobj); Z_TYPE_P(writeobj) = IS_NULL; @@ -1638,7 +1695,7 @@ ZEND_API zend_object_handlers std_object_handlers = { zend_std_object_get_class, /* get_class_entry */ zend_std_object_get_class_name, /* get_class_name */ zend_std_compare_objects, /* compare_objects */ - zend_std_cast_object_tostring, /* cast_object */ + zend_std_cast_object, /* cast_object */ NULL, /* count_elements */ NULL, /* get_debug_info */ zend_std_get_closure, /* get_closure */ From 51b81babaa84982adf6096cd0930a32a6e367f36 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 19 Apr 2013 22:25:52 +0100 Subject: [PATCH 02/61] part of mangled property names exposed solution --- Zend/zend_object_handlers.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zend/zend_object_handlers.h b/Zend/zend_object_handlers.h index 3ea6008350d2..42135a6a3afd 100644 --- a/Zend/zend_object_handlers.h +++ b/Zend/zend_object_handlers.h @@ -157,11 +157,11 @@ ZEND_API union _zend_function *zend_std_get_constructor(zval *object TSRMLS_DC); ZEND_API struct _zend_property_info *zend_get_property_info(zend_class_entry *ce, zval *member, int silent TSRMLS_DC); ZEND_API HashTable *zend_std_get_properties(zval *object TSRMLS_DC); ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp TSRMLS_DC); -ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int type TSRMLS_DC); +ZEND_API int zend_std_cast_object(zval *readobj, zval *writeobj, int type TSRMLS_DC); ZEND_API void zend_std_write_property(zval *object, zval *member, zval *value, const struct _zend_literal *key TSRMLS_DC); ZEND_API void rebuild_object_properties(zend_object *zobj); - +#define zend_std_cast_object_tostring zend_std_cast_object #define IS_ZEND_STD_OBJECT(z) (Z_TYPE(z) == IS_OBJECT && (Z_OBJ_HT((z))->get_class_entry != NULL)) #define HAS_CLASS_ENTRY(z) (Z_OBJ_HT(z)->get_class_entry != NULL) From df1aacd296d4b46c2afce806dd4784c8ea1d12fd Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 19 Apr 2013 22:26:11 +0100 Subject: [PATCH 03/61] part of mangled property names exposed solution --- Zend/zend_operators.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index c8b868d16a80..169ef8a7aca2 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -699,7 +699,15 @@ ZEND_API void convert_to_array(zval *op) /* {{{ */ ALLOC_HASHTABLE(ht); zend_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0); - if (Z_OBJCE_P(op) == zend_ce_closure) { + if (Z_OBJ_HT_P(op)->cast_object) { + zval casted; + Z_ARRVAL(casted) = ht; + Z_TYPE(casted) = IS_ARRAY; + if (Z_OBJ_HT_P(op)->cast_object(op, &casted, IS_ARRAY TSRMLS_CC) == FAILURE) { + zval_dtor(&casted); + return; + } + } else if (Z_OBJCE_P(op) == zend_ce_closure) { convert_scalar_to_array(op, IS_ARRAY TSRMLS_CC); if (Z_TYPE_P(op) == IS_ARRAY) { zend_hash_destroy(ht); From 9ba36d11cf1596eb07e0e52920b7e21b3c95c0c8 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 19 Apr 2013 23:21:43 +0100 Subject: [PATCH 04/61] just send publics --- Zend/zend_object_handlers.c | 49 +++++++++---------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 24f326e3c189..0ae479ad4227 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1581,54 +1581,27 @@ ZEND_API int zend_std_cast_object(zval *readobj, zval *writeobj, int type TSRMLS return SUCCESS; case IS_ARRAY: if (Z_OBJ_HT_P(readobj)->get_properties) { - HashTable *props = Z_OBJPROP_P(readobj); + zend_object *zobj = zend_object_store_get_object(readobj); - if (props) { + if (zobj) { HashPosition position; + HashTable *properties = Z_OBJPROP_P(readobj); zval **property; - for (zend_hash_internal_pointer_reset_ex(props, &position); - zend_hash_get_current_data_ex(props, (void**) &property, &position) == SUCCESS; - zend_hash_move_forward_ex(props, &position)) { + for (zend_hash_internal_pointer_reset_ex(properties, &position); + zend_hash_get_current_data_ex(properties, (void**) &property, &position) == SUCCESS; + zend_hash_move_forward_ex(properties, &position)) { char *mangled = NULL; uint mlength; ulong idx; - switch (zend_hash_get_current_key_ex(props, &mangled, &mlength, &idx, 0, &position)) { + switch (zend_hash_get_current_key_ex(properties, &mangled, &mlength, &idx, 0, &position)) { case HASH_KEY_IS_STRING: { - const char *cname; - const char *pname; - int plength; - - if (zend_unmangle_property_name_ex(mangled, mlength, &cname, &pname, &plength) == SUCCESS) { - zend_property_info *info = NULL; - char *rname = NULL; - - if (zend_hash_find(&Z_OBJCE_P(readobj)->properties_info, pname, plength, (void**)&info) == SUCCESS) { - switch (info->flags) { - case ZEND_ACC_PROTECTED: { - if((plength = asprintf(&rname, "protected:%s:%s", cname, pname))) { - pname = rname; - plength++; - } - } - case ZEND_ACC_PRIVATE: { - if((plength = asprintf(&rname, "private:%s:%s", cname, pname))) { - pname = rname; - plength++; - } - } - - default: { - zend_hash_update( - Z_ARRVAL_P(writeobj), pname, plength, (void**) &property, sizeof(zval*), NULL); - if (rname) - free(rname); - zval_copy_ctor(*property); - } - } - } + if (zend_check_property_access(zobj, mangled, mlength TSRMLS_CC) != FAILURE) { + zend_hash_update( + Z_ARRVAL_P(writeobj), mangled, mlength, (void**) &property, sizeof(zval*), NULL); } + } break; } } From 3383007e539c142388fc19df954d2001b806f7e1 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 19 Apr 2013 23:23:08 +0100 Subject: [PATCH 05/61] TSRM --- Zend/zend_object_handlers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 0ae479ad4227..30aec7ca548a 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1581,7 +1581,7 @@ ZEND_API int zend_std_cast_object(zval *readobj, zval *writeobj, int type TSRMLS return SUCCESS; case IS_ARRAY: if (Z_OBJ_HT_P(readobj)->get_properties) { - zend_object *zobj = zend_object_store_get_object(readobj); + zend_object *zobj = zend_object_store_get_object(readobj TSRMLS_CC); if (zobj) { HashPosition position; From e337a851686bd7e0b4826fad27711d098082cdd6 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 19 Apr 2013 23:36:55 +0100 Subject: [PATCH 06/61] use unmangled names --- Zend/zend_object_handlers.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 30aec7ca548a..b0d6e0eda5ad 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1584,8 +1584,8 @@ ZEND_API int zend_std_cast_object(zval *readobj, zval *writeobj, int type TSRMLS zend_object *zobj = zend_object_store_get_object(readobj TSRMLS_CC); if (zobj) { - HashPosition position; HashTable *properties = Z_OBJPROP_P(readobj); + HashPosition position; zval **property; for (zend_hash_internal_pointer_reset_ex(properties, &position); @@ -1597,11 +1597,16 @@ ZEND_API int zend_std_cast_object(zval *readobj, zval *writeobj, int type TSRMLS switch (zend_hash_get_current_key_ex(properties, &mangled, &mlength, &idx, 0, &position)) { case HASH_KEY_IS_STRING: { - if (zend_check_property_access(zobj, mangled, mlength TSRMLS_CC) != FAILURE) { - zend_hash_update( - Z_ARRVAL_P(writeobj), mangled, mlength, (void**) &property, sizeof(zval*), NULL); - } + const char *cname; + const char *pname; + int plength; + if (zend_unmangle_property_name_ex(mangled, mlength, &cname, &pname, &plength) == SUCCESS) { + if (zend_check_property_access(zobj, mangled, mlength TSRMLS_CC) != FAILURE) { + zend_hash_update( + Z_ARRVAL_P(writeobj), pname, plength, (void**) &property, sizeof(zval*), NULL); + } + } } break; } } From 836a5e599fcf3c7d450baeed04b0089f05695dd8 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 22 Apr 2013 15:24:53 +0100 Subject: [PATCH 07/61] testing out stacking error handlers --- Zend/zend.c | 293 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 175 insertions(+), 118 deletions(-) diff --git a/Zend/zend.c b/Zend/zend.c index aad6165e408a..feb1f63a7dde 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -567,6 +567,7 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS zend_copy_constants(EG(zend_constants), GLOBAL_CONSTANTS_TABLE); zend_init_rsrc_plist(TSRMLS_C); zend_init_exception_op(TSRMLS_C); + zend_init_error_handlers(TSRMLS_C); EG(lambda_count) = 0; EG(user_error_handler) = NULL; EG(user_exception_handler) = NULL; @@ -593,6 +594,7 @@ static void executor_globals_dtor(zend_executor_globals *executor_globals TSRMLS zend_hash_destroy(executor_globals->zend_constants); free(executor_globals->zend_constants); } + zend_shutdown_error_handlers(TSRMLS_C); } /* }}} */ @@ -753,6 +755,7 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions TS #ifndef ZTS zend_init_rsrc_plist(TSRMLS_C); zend_init_exception_op(TSRMLS_C); + zend_init_error_handlers(TSRMLS_C); #endif zend_ini_startup(TSRMLS_C); @@ -1006,16 +1009,11 @@ ZEND_API int zend_get_configuration_directive(const char *name, uint name_length memcpy(&CG(stack), &stack, sizeof(zend_stack)); \ } \ } while (0) - -ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ -{ - va_list args; - va_list usr_copy; + +void zend_default_error_handler(zend_error_t* error TSRMLS_DC) { zval ***params; zval *retval; zval *z_error_type, *z_error_message, *z_error_filename, *z_error_lineno, *z_context; - const char *error_filename; - uint error_lineno; zval *orig_user_error_handler; zend_bool in_compilation; zend_class_entry *saved_class_entry; @@ -1027,88 +1025,20 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ zend_stack declare_stack; zend_stack list_stack; zend_stack context_stack; - TSRMLS_FETCH(); - - /* Report about uncaught exception in case of fatal errors */ - if (EG(exception)) { - switch (type) { - case E_CORE_ERROR: - case E_ERROR: - case E_RECOVERABLE_ERROR: - case E_PARSE: - case E_COMPILE_ERROR: - case E_USER_ERROR: - if (zend_is_executing(TSRMLS_C)) { - error_lineno = zend_get_executed_lineno(TSRMLS_C); - } - zend_exception_error(EG(exception), E_WARNING TSRMLS_CC); - EG(exception) = NULL; - if (zend_is_executing(TSRMLS_C) && EG(opline_ptr)) { - active_opline->lineno = error_lineno; - } - break; - default: - break; - } - } - - /* Obtain relevant filename and lineno */ - switch (type) { - case E_CORE_ERROR: - case E_CORE_WARNING: - error_filename = NULL; - error_lineno = 0; - break; - case E_PARSE: - case E_COMPILE_ERROR: - case E_COMPILE_WARNING: - case E_ERROR: - case E_NOTICE: - case E_STRICT: - case E_DEPRECATED: - case E_WARNING: - case E_USER_ERROR: - case E_USER_WARNING: - case E_USER_NOTICE: - case E_USER_DEPRECATED: - case E_RECOVERABLE_ERROR: - if (zend_is_compiling(TSRMLS_C)) { - error_filename = zend_get_compiled_filename(TSRMLS_C); - error_lineno = zend_get_compiled_lineno(TSRMLS_C); - } else if (zend_is_executing(TSRMLS_C)) { - error_filename = zend_get_executed_filename(TSRMLS_C); - error_lineno = zend_get_executed_lineno(TSRMLS_C); - } else { - error_filename = NULL; - error_lineno = 0; - } - break; - default: - error_filename = NULL; - error_lineno = 0; - break; - } - if (!error_filename) { - error_filename = "Unknown"; - } - - va_start(args, format); - -#ifdef HAVE_DTRACE - if(DTRACE_ERROR_ENABLED()) { - char *dtrace_error_buffer; - zend_vspprintf(&dtrace_error_buffer, 0, format, args); - DTRACE_ERROR(dtrace_error_buffer, error_filename, error_lineno); - efree(dtrace_error_buffer); - } -#endif /* HAVE_DTRACE */ - - /* if we don't have a user defined error handler */ + + /* don't output errors twice */ + if (error->handled) + return; + + /* incase of any hackery */ + error->handled = 1; + + /* if we don't have a user defined error handler */ if (!EG(user_error_handler) - || !(EG(user_error_handler_error_reporting) & type) + || !(EG(user_error_handler_error_reporting) & error->level) || EG(error_handling) != EH_NORMAL) { - zend_error_cb(type, error_filename, error_lineno, format, args); - } else switch (type) { + zend_error_cb(error->level, error->file, error->line, error->format, error->args); + } else switch (error->level) { case E_ERROR: case E_PARSE: case E_CORE_ERROR: @@ -1116,7 +1046,7 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ case E_COMPILE_ERROR: case E_COMPILE_WARNING: /* The error may not be safe to handle in user-space */ - zend_error_cb(type, error_filename, error_lineno, format, args); + zend_error_cb(error->level, error->file, error->line, error->format, error->args); break; default: /* Handle the error in user space */ @@ -1125,35 +1055,19 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ ALLOC_INIT_ZVAL(z_error_filename); ALLOC_INIT_ZVAL(z_error_lineno); ALLOC_INIT_ZVAL(z_context); - -/* va_copy() is __va_copy() in old gcc versions. - * According to the autoconf manual, using - * memcpy(&dst, &src, sizeof(va_list)) - * gives maximum portability. */ -#ifndef va_copy -# ifdef __va_copy -# define va_copy(dest, src) __va_copy((dest), (src)) -# else -# define va_copy(dest, src) memcpy(&(dest), &(src), sizeof(va_list)) -# endif -#endif - va_copy(usr_copy, args); - Z_STRLEN_P(z_error_message) = zend_vspprintf(&Z_STRVAL_P(z_error_message), 0, format, usr_copy); -#ifdef va_copy - va_end(usr_copy); -#endif - Z_TYPE_P(z_error_message) = IS_STRING; - - Z_LVAL_P(z_error_type) = type; - Z_TYPE_P(z_error_type) = IS_LONG; - - if (error_filename) { - ZVAL_STRING(z_error_filename, error_filename, 1); + + Z_STRLEN_P(z_error_message) = zend_vspprintf( + &Z_STRVAL_P(z_error_message), 0, error->format, error->args); + Z_TYPE_P(z_error_message) = IS_STRING; + + ZVAL_LONG(z_error_type, error->level); + + if (error->file) { + ZVAL_STRING(z_error_filename, error->file, 1); } - - Z_LVAL_P(z_error_lineno) = error_lineno; - Z_TYPE_P(z_error_lineno) = IS_LONG; - + + ZVAL_LONG(z_error_lineno, error->line); + if (!EG(active_symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } @@ -1164,6 +1078,7 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ } else { Z_ARRVAL_P(z_context) = EG(active_symbol_table); Z_TYPE_P(z_context) = IS_ARRAY; + zval_copy_ctor(z_context); } @@ -1199,13 +1114,13 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC) == SUCCESS) { if (retval) { if (Z_TYPE_P(retval) == IS_BOOL && Z_LVAL_P(retval) == 0) { - zend_error_cb(type, error_filename, error_lineno, format, args); + zend_error_cb(error->level, error->file, error->line, error->format, error->args); } zval_ptr_dtor(&retval); } } else if (!EG(exception)) { /* The user error handler failed, use built-in error handler */ - zend_error_cb(type, error_filename, error_lineno, format, args); + zend_error_cb(error->level, error->file, error->line, error->format, error->args); } if (in_compilation) { @@ -1235,7 +1150,149 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ zval_ptr_dtor(&z_context); break; } +} +/* {{{ zend_init_error_handlers */ +ZEND_API void zend_init_error_handlers(TSRMLS_D) +{ + zend_llist_init(&EG(error_handlers), sizeof(zend_error_handler_t), NULL, 1); + zend_register_error_handler( + zend_default_error_handler TSRMLS_CC); +} /* }}} */ + +/* {{{ zend_register_error_handler */ +ZEND_API void zend_register_error_handler(zend_error_handler_t handler TSRMLS_DC) +{ + if (zend_llist_count(&EG(error_handlers))) + zend_llist_prepend_element(&EG(error_handlers), &handler); + else zend_llist_add_element(&EG(error_handlers), &handler); +} /* }}} */ + +/* {{{ zend_error_call_handler */ +static inline void zend_call_error_handler(void *data, void *arg TSRMLS_DC) +{ + (*(zend_error_handler_t*) data)(*(zend_error_t**) arg); +} /* }}} */ + +/* {{{ zend_call_error_handlers */ +ZEND_API void zend_call_error_handlers(zend_error_t* error TSRMLS_DC) +{ + zend_llist_apply_with_argument( + &EG(error_handlers), + zend_call_error_handler, &error TSRMLS_CC); +} /* }}} */ + +/* {{{ zend_call_error_handlers */ +ZEND_API void zend_call_error_handlers_ex(int level, const char* format, const char* file, zend_uint line, va_list* args TSRMLS_DC) +{ + zend_error_t *error = (zend_error_t*) emalloc(sizeof(zend_error_t)); + + error->handled = 0; + error->level = level; + error->file = file; + error->line = line; + error->format = estrdup(format); + + memcpy( + &error->args, args, sizeof(va_list)); + + zend_call_error_handlers(error TSRMLS_CC); + + efree(error->format); + efree(error); +} /* }}} */ + +/* {{{ zend_shutdown_error_handlers */ +ZEND_API void zend_shutdown_error_handlers(TSRMLS_D) +{ + zend_llist_destroy(&EG(error_handlers)); +} /* }}} */ + + +ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ +{ + zend_uint error_lineno; + const char* error_filename; + va_list args; + TSRMLS_FETCH(); + + /* Report about uncaught exception in case of fatal errors */ + if (EG(exception)) { + switch (type) { + case E_CORE_ERROR: + case E_ERROR: + case E_RECOVERABLE_ERROR: + case E_PARSE: + case E_COMPILE_ERROR: + case E_USER_ERROR: + if (zend_is_executing(TSRMLS_C)) { + error_lineno = zend_get_executed_lineno(TSRMLS_C); + } + zend_exception_error(EG(exception), E_WARNING TSRMLS_CC); + EG(exception) = NULL; + if (zend_is_executing(TSRMLS_C) && EG(opline_ptr)) { + active_opline->lineno = error_lineno; + } + break; + default: + break; + } + } + + /* Obtain relevant filename and lineno */ + switch (type) { + case E_CORE_ERROR: + case E_CORE_WARNING: + error_filename = NULL; + error_lineno = 0; + break; + case E_PARSE: + case E_COMPILE_ERROR: + case E_COMPILE_WARNING: + case E_ERROR: + case E_NOTICE: + case E_STRICT: + case E_DEPRECATED: + case E_WARNING: + case E_USER_ERROR: + case E_USER_WARNING: + case E_USER_NOTICE: + case E_USER_DEPRECATED: + case E_RECOVERABLE_ERROR: + if (zend_is_compiling(TSRMLS_C)) { + error_filename = zend_get_compiled_filename(TSRMLS_C); + error_lineno = zend_get_compiled_lineno(TSRMLS_C); + } else if (zend_is_executing(TSRMLS_C)) { + error_filename = zend_get_executed_filename(TSRMLS_C); + error_lineno = zend_get_executed_lineno(TSRMLS_C); + } else { + error_filename = NULL; + error_lineno = 0; + } + break; + default: + error_filename = NULL; + error_lineno = 0; + break; + } + if (!error_filename) { + error_filename = "Unknown"; + } + + va_start(args, format); + +#ifdef HAVE_DTRACE + if(DTRACE_ERROR_ENABLED()) { + char *dtrace_error_buffer; + zend_vspprintf(&dtrace_error_buffer, 0, format, args); + DTRACE_ERROR(dtrace_error_buffer, error_filename, error_lineno); + efree(dtrace_error_buffer); + } +#endif /* HAVE_DTRACE */ + + /* call error handlers */ + zend_call_error_handlers_ex(type, format, error_filename, error_lineno, &args TSRMLS_CC); + va_end(args); if (type == E_PARSE) { From 16423c77c2ee6a6109e9ac2ed5c3b0fef64b3b9f Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 22 Apr 2013 15:25:08 +0100 Subject: [PATCH 08/61] testing out stacking error handlers --- Zend/zend.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Zend/zend.h b/Zend/zend.h index 1377fd566594..b105a10c0ef5 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -296,6 +296,34 @@ void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((nore # define zend_error_noreturn zend_error #endif +/* {{{ zend_error_t */ +typedef struct zend_error_t { + zend_bool handled; + zend_ushort level; + zend_uint line; + const char* file; + char* format; + va_list args; +} zend_error_t; /* }}} */ + +/* {{{ zend_error_handler_t */ +typedef void (*zend_error_handler_t) (zend_error_t *error TSRMLS_DC); /* }}} */ + +/* {{{ zend_init_error_handlers */ +ZEND_API void zend_init_error_handlers(TSRMLS_D); /* }}} */ + +/* {{{ zend_register_error_handler */ +ZEND_API void zend_register_error_handler(zend_error_handler_t handler TSRMLS_DC); /* }}} */ + +/* {{{ zend_call_error_handlers */ +ZEND_API void zend_call_error_handlers(zend_error_t* error TSRMLS_DC); /* }}} */ + +/* {{{ zend_call_error_handlers_ex */ +ZEND_API void zend_call_error_handlers_ex(int level, const char* format, const char* filename, zend_uint line, va_list* args TSRMLS_DC); /* }}} */ + +/* {{{ zend_shutdown_error_handlers */ +ZEND_API void zend_shutdown_error_handlers(TSRMLS_D); /* }}} */ + /* * zval */ From 421fe790ec8f0190b978667a0ff8870031b096ce Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 22 Apr 2013 15:25:22 +0100 Subject: [PATCH 09/61] testing out stacking error handlers --- Zend/zend_globals.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index 800bdc7f66bc..b56d8566eb91 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -257,6 +257,8 @@ struct _zend_executor_globals { XPFPA_CW_DATATYPE saved_fpu_cw; #endif + zend_llist error_handlers; + void *reserved[ZEND_MAX_RESERVED_RESOURCES]; }; From c6088960622b5334fded930471638a9f46f60a1d Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 22 Apr 2013 15:43:42 +0100 Subject: [PATCH 10/61] reverse this --- Zend/zend.c | 293 ++++++++++++++++++-------------------------- Zend/zend.h | 28 ----- Zend/zend_globals.h | 2 - 3 files changed, 118 insertions(+), 205 deletions(-) diff --git a/Zend/zend.c b/Zend/zend.c index feb1f63a7dde..aad6165e408a 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -567,7 +567,6 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS zend_copy_constants(EG(zend_constants), GLOBAL_CONSTANTS_TABLE); zend_init_rsrc_plist(TSRMLS_C); zend_init_exception_op(TSRMLS_C); - zend_init_error_handlers(TSRMLS_C); EG(lambda_count) = 0; EG(user_error_handler) = NULL; EG(user_exception_handler) = NULL; @@ -594,7 +593,6 @@ static void executor_globals_dtor(zend_executor_globals *executor_globals TSRMLS zend_hash_destroy(executor_globals->zend_constants); free(executor_globals->zend_constants); } - zend_shutdown_error_handlers(TSRMLS_C); } /* }}} */ @@ -755,7 +753,6 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions TS #ifndef ZTS zend_init_rsrc_plist(TSRMLS_C); zend_init_exception_op(TSRMLS_C); - zend_init_error_handlers(TSRMLS_C); #endif zend_ini_startup(TSRMLS_C); @@ -1009,11 +1006,16 @@ ZEND_API int zend_get_configuration_directive(const char *name, uint name_length memcpy(&CG(stack), &stack, sizeof(zend_stack)); \ } \ } while (0) - -void zend_default_error_handler(zend_error_t* error TSRMLS_DC) { + +ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ +{ + va_list args; + va_list usr_copy; zval ***params; zval *retval; zval *z_error_type, *z_error_message, *z_error_filename, *z_error_lineno, *z_context; + const char *error_filename; + uint error_lineno; zval *orig_user_error_handler; zend_bool in_compilation; zend_class_entry *saved_class_entry; @@ -1025,20 +1027,88 @@ void zend_default_error_handler(zend_error_t* error TSRMLS_DC) { zend_stack declare_stack; zend_stack list_stack; zend_stack context_stack; - - /* don't output errors twice */ - if (error->handled) - return; - - /* incase of any hackery */ - error->handled = 1; - - /* if we don't have a user defined error handler */ + TSRMLS_FETCH(); + + /* Report about uncaught exception in case of fatal errors */ + if (EG(exception)) { + switch (type) { + case E_CORE_ERROR: + case E_ERROR: + case E_RECOVERABLE_ERROR: + case E_PARSE: + case E_COMPILE_ERROR: + case E_USER_ERROR: + if (zend_is_executing(TSRMLS_C)) { + error_lineno = zend_get_executed_lineno(TSRMLS_C); + } + zend_exception_error(EG(exception), E_WARNING TSRMLS_CC); + EG(exception) = NULL; + if (zend_is_executing(TSRMLS_C) && EG(opline_ptr)) { + active_opline->lineno = error_lineno; + } + break; + default: + break; + } + } + + /* Obtain relevant filename and lineno */ + switch (type) { + case E_CORE_ERROR: + case E_CORE_WARNING: + error_filename = NULL; + error_lineno = 0; + break; + case E_PARSE: + case E_COMPILE_ERROR: + case E_COMPILE_WARNING: + case E_ERROR: + case E_NOTICE: + case E_STRICT: + case E_DEPRECATED: + case E_WARNING: + case E_USER_ERROR: + case E_USER_WARNING: + case E_USER_NOTICE: + case E_USER_DEPRECATED: + case E_RECOVERABLE_ERROR: + if (zend_is_compiling(TSRMLS_C)) { + error_filename = zend_get_compiled_filename(TSRMLS_C); + error_lineno = zend_get_compiled_lineno(TSRMLS_C); + } else if (zend_is_executing(TSRMLS_C)) { + error_filename = zend_get_executed_filename(TSRMLS_C); + error_lineno = zend_get_executed_lineno(TSRMLS_C); + } else { + error_filename = NULL; + error_lineno = 0; + } + break; + default: + error_filename = NULL; + error_lineno = 0; + break; + } + if (!error_filename) { + error_filename = "Unknown"; + } + + va_start(args, format); + +#ifdef HAVE_DTRACE + if(DTRACE_ERROR_ENABLED()) { + char *dtrace_error_buffer; + zend_vspprintf(&dtrace_error_buffer, 0, format, args); + DTRACE_ERROR(dtrace_error_buffer, error_filename, error_lineno); + efree(dtrace_error_buffer); + } +#endif /* HAVE_DTRACE */ + + /* if we don't have a user defined error handler */ if (!EG(user_error_handler) - || !(EG(user_error_handler_error_reporting) & error->level) + || !(EG(user_error_handler_error_reporting) & type) || EG(error_handling) != EH_NORMAL) { - zend_error_cb(error->level, error->file, error->line, error->format, error->args); - } else switch (error->level) { + zend_error_cb(type, error_filename, error_lineno, format, args); + } else switch (type) { case E_ERROR: case E_PARSE: case E_CORE_ERROR: @@ -1046,7 +1116,7 @@ void zend_default_error_handler(zend_error_t* error TSRMLS_DC) { case E_COMPILE_ERROR: case E_COMPILE_WARNING: /* The error may not be safe to handle in user-space */ - zend_error_cb(error->level, error->file, error->line, error->format, error->args); + zend_error_cb(type, error_filename, error_lineno, format, args); break; default: /* Handle the error in user space */ @@ -1055,19 +1125,35 @@ void zend_default_error_handler(zend_error_t* error TSRMLS_DC) { ALLOC_INIT_ZVAL(z_error_filename); ALLOC_INIT_ZVAL(z_error_lineno); ALLOC_INIT_ZVAL(z_context); - - Z_STRLEN_P(z_error_message) = zend_vspprintf( - &Z_STRVAL_P(z_error_message), 0, error->format, error->args); - Z_TYPE_P(z_error_message) = IS_STRING; - - ZVAL_LONG(z_error_type, error->level); - - if (error->file) { - ZVAL_STRING(z_error_filename, error->file, 1); + +/* va_copy() is __va_copy() in old gcc versions. + * According to the autoconf manual, using + * memcpy(&dst, &src, sizeof(va_list)) + * gives maximum portability. */ +#ifndef va_copy +# ifdef __va_copy +# define va_copy(dest, src) __va_copy((dest), (src)) +# else +# define va_copy(dest, src) memcpy(&(dest), &(src), sizeof(va_list)) +# endif +#endif + va_copy(usr_copy, args); + Z_STRLEN_P(z_error_message) = zend_vspprintf(&Z_STRVAL_P(z_error_message), 0, format, usr_copy); +#ifdef va_copy + va_end(usr_copy); +#endif + Z_TYPE_P(z_error_message) = IS_STRING; + + Z_LVAL_P(z_error_type) = type; + Z_TYPE_P(z_error_type) = IS_LONG; + + if (error_filename) { + ZVAL_STRING(z_error_filename, error_filename, 1); } - - ZVAL_LONG(z_error_lineno, error->line); - + + Z_LVAL_P(z_error_lineno) = error_lineno; + Z_TYPE_P(z_error_lineno) = IS_LONG; + if (!EG(active_symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } @@ -1078,7 +1164,6 @@ void zend_default_error_handler(zend_error_t* error TSRMLS_DC) { } else { Z_ARRVAL_P(z_context) = EG(active_symbol_table); Z_TYPE_P(z_context) = IS_ARRAY; - zval_copy_ctor(z_context); } @@ -1114,13 +1199,13 @@ void zend_default_error_handler(zend_error_t* error TSRMLS_DC) { if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC) == SUCCESS) { if (retval) { if (Z_TYPE_P(retval) == IS_BOOL && Z_LVAL_P(retval) == 0) { - zend_error_cb(error->level, error->file, error->line, error->format, error->args); + zend_error_cb(type, error_filename, error_lineno, format, args); } zval_ptr_dtor(&retval); } } else if (!EG(exception)) { /* The user error handler failed, use built-in error handler */ - zend_error_cb(error->level, error->file, error->line, error->format, error->args); + zend_error_cb(type, error_filename, error_lineno, format, args); } if (in_compilation) { @@ -1150,149 +1235,7 @@ void zend_default_error_handler(zend_error_t* error TSRMLS_DC) { zval_ptr_dtor(&z_context); break; } -} -/* {{{ zend_init_error_handlers */ -ZEND_API void zend_init_error_handlers(TSRMLS_D) -{ - zend_llist_init(&EG(error_handlers), sizeof(zend_error_handler_t), NULL, 1); - zend_register_error_handler( - zend_default_error_handler TSRMLS_CC); -} /* }}} */ - -/* {{{ zend_register_error_handler */ -ZEND_API void zend_register_error_handler(zend_error_handler_t handler TSRMLS_DC) -{ - if (zend_llist_count(&EG(error_handlers))) - zend_llist_prepend_element(&EG(error_handlers), &handler); - else zend_llist_add_element(&EG(error_handlers), &handler); -} /* }}} */ - -/* {{{ zend_error_call_handler */ -static inline void zend_call_error_handler(void *data, void *arg TSRMLS_DC) -{ - (*(zend_error_handler_t*) data)(*(zend_error_t**) arg); -} /* }}} */ - -/* {{{ zend_call_error_handlers */ -ZEND_API void zend_call_error_handlers(zend_error_t* error TSRMLS_DC) -{ - zend_llist_apply_with_argument( - &EG(error_handlers), - zend_call_error_handler, &error TSRMLS_CC); -} /* }}} */ - -/* {{{ zend_call_error_handlers */ -ZEND_API void zend_call_error_handlers_ex(int level, const char* format, const char* file, zend_uint line, va_list* args TSRMLS_DC) -{ - zend_error_t *error = (zend_error_t*) emalloc(sizeof(zend_error_t)); - - error->handled = 0; - error->level = level; - error->file = file; - error->line = line; - error->format = estrdup(format); - - memcpy( - &error->args, args, sizeof(va_list)); - - zend_call_error_handlers(error TSRMLS_CC); - - efree(error->format); - efree(error); -} /* }}} */ - -/* {{{ zend_shutdown_error_handlers */ -ZEND_API void zend_shutdown_error_handlers(TSRMLS_D) -{ - zend_llist_destroy(&EG(error_handlers)); -} /* }}} */ - - -ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ -{ - zend_uint error_lineno; - const char* error_filename; - va_list args; - TSRMLS_FETCH(); - - /* Report about uncaught exception in case of fatal errors */ - if (EG(exception)) { - switch (type) { - case E_CORE_ERROR: - case E_ERROR: - case E_RECOVERABLE_ERROR: - case E_PARSE: - case E_COMPILE_ERROR: - case E_USER_ERROR: - if (zend_is_executing(TSRMLS_C)) { - error_lineno = zend_get_executed_lineno(TSRMLS_C); - } - zend_exception_error(EG(exception), E_WARNING TSRMLS_CC); - EG(exception) = NULL; - if (zend_is_executing(TSRMLS_C) && EG(opline_ptr)) { - active_opline->lineno = error_lineno; - } - break; - default: - break; - } - } - - /* Obtain relevant filename and lineno */ - switch (type) { - case E_CORE_ERROR: - case E_CORE_WARNING: - error_filename = NULL; - error_lineno = 0; - break; - case E_PARSE: - case E_COMPILE_ERROR: - case E_COMPILE_WARNING: - case E_ERROR: - case E_NOTICE: - case E_STRICT: - case E_DEPRECATED: - case E_WARNING: - case E_USER_ERROR: - case E_USER_WARNING: - case E_USER_NOTICE: - case E_USER_DEPRECATED: - case E_RECOVERABLE_ERROR: - if (zend_is_compiling(TSRMLS_C)) { - error_filename = zend_get_compiled_filename(TSRMLS_C); - error_lineno = zend_get_compiled_lineno(TSRMLS_C); - } else if (zend_is_executing(TSRMLS_C)) { - error_filename = zend_get_executed_filename(TSRMLS_C); - error_lineno = zend_get_executed_lineno(TSRMLS_C); - } else { - error_filename = NULL; - error_lineno = 0; - } - break; - default: - error_filename = NULL; - error_lineno = 0; - break; - } - if (!error_filename) { - error_filename = "Unknown"; - } - - va_start(args, format); - -#ifdef HAVE_DTRACE - if(DTRACE_ERROR_ENABLED()) { - char *dtrace_error_buffer; - zend_vspprintf(&dtrace_error_buffer, 0, format, args); - DTRACE_ERROR(dtrace_error_buffer, error_filename, error_lineno); - efree(dtrace_error_buffer); - } -#endif /* HAVE_DTRACE */ - - /* call error handlers */ - zend_call_error_handlers_ex(type, format, error_filename, error_lineno, &args TSRMLS_CC); - va_end(args); if (type == E_PARSE) { diff --git a/Zend/zend.h b/Zend/zend.h index b105a10c0ef5..1377fd566594 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -296,34 +296,6 @@ void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((nore # define zend_error_noreturn zend_error #endif -/* {{{ zend_error_t */ -typedef struct zend_error_t { - zend_bool handled; - zend_ushort level; - zend_uint line; - const char* file; - char* format; - va_list args; -} zend_error_t; /* }}} */ - -/* {{{ zend_error_handler_t */ -typedef void (*zend_error_handler_t) (zend_error_t *error TSRMLS_DC); /* }}} */ - -/* {{{ zend_init_error_handlers */ -ZEND_API void zend_init_error_handlers(TSRMLS_D); /* }}} */ - -/* {{{ zend_register_error_handler */ -ZEND_API void zend_register_error_handler(zend_error_handler_t handler TSRMLS_DC); /* }}} */ - -/* {{{ zend_call_error_handlers */ -ZEND_API void zend_call_error_handlers(zend_error_t* error TSRMLS_DC); /* }}} */ - -/* {{{ zend_call_error_handlers_ex */ -ZEND_API void zend_call_error_handlers_ex(int level, const char* format, const char* filename, zend_uint line, va_list* args TSRMLS_DC); /* }}} */ - -/* {{{ zend_shutdown_error_handlers */ -ZEND_API void zend_shutdown_error_handlers(TSRMLS_D); /* }}} */ - /* * zval */ diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index b56d8566eb91..800bdc7f66bc 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -257,8 +257,6 @@ struct _zend_executor_globals { XPFPA_CW_DATATYPE saved_fpu_cw; #endif - zend_llist error_handlers; - void *reserved[ZEND_MAX_RESERVED_RESOURCES]; }; From 625acc345070758e70e9b9f6bd6c49156d1ac637 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 12 Aug 2013 16:51:00 +0100 Subject: [PATCH 11/61] fix strangeness for pthreads --- ext/opcache/zend_accelerator_module.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c index f9ddaa98b8ba..81dc9ec918db 100644 --- a/ext/opcache/zend_accelerator_module.c +++ b/ext/opcache/zend_accelerator_module.c @@ -212,7 +212,7 @@ static ZEND_INI_MH(OnEnable) stage == ZEND_INI_STAGE_SHUTDOWN || stage == ZEND_INI_STAGE_DEACTIVATE) { return OnUpdateBool(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); - } else { + } else if (!ZCG(enabled)) { /* It may be only temporary disabled */ zend_bool *p; #ifndef ZTS @@ -232,6 +232,8 @@ static ZEND_INI_MH(OnEnable) *p = 0; return SUCCESS; } + } else { + return SUCCESS; } } From e70489c1f139fec62da1e2dbc75ecd61b8cf41d1 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 12 Aug 2013 16:59:47 +0100 Subject: [PATCH 12/61] sensible check for onEnable ini mh --- ext/opcache/zend_accelerator_module.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c index 81dc9ec918db..ca78c81b807b 100644 --- a/ext/opcache/zend_accelerator_module.c +++ b/ext/opcache/zend_accelerator_module.c @@ -210,9 +210,10 @@ static ZEND_INI_MH(OnEnable) { if (stage == ZEND_INI_STAGE_STARTUP || stage == ZEND_INI_STAGE_SHUTDOWN || - stage == ZEND_INI_STAGE_DEACTIVATE) { + stage == ZEND_INI_STAGE_DEACTIVATE || + !ZCG(enabled)) { return OnUpdateBool(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); - } else if (!ZCG(enabled)) { + } else { /* It may be only temporary disabled */ zend_bool *p; #ifndef ZTS @@ -232,8 +233,6 @@ static ZEND_INI_MH(OnEnable) *p = 0; return SUCCESS; } - } else { - return SUCCESS; } } From cef10c7a6a8e2340a8c586a82f43e386bb398725 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 12 Aug 2013 17:01:23 +0100 Subject: [PATCH 13/61] correction --- ext/opcache/zend_accelerator_module.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c index ca78c81b807b..81dc9ec918db 100644 --- a/ext/opcache/zend_accelerator_module.c +++ b/ext/opcache/zend_accelerator_module.c @@ -210,10 +210,9 @@ static ZEND_INI_MH(OnEnable) { if (stage == ZEND_INI_STAGE_STARTUP || stage == ZEND_INI_STAGE_SHUTDOWN || - stage == ZEND_INI_STAGE_DEACTIVATE || - !ZCG(enabled)) { + stage == ZEND_INI_STAGE_DEACTIVATE) { return OnUpdateBool(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); - } else { + } else if (!ZCG(enabled)) { /* It may be only temporary disabled */ zend_bool *p; #ifndef ZTS @@ -233,6 +232,8 @@ static ZEND_INI_MH(OnEnable) *p = 0; return SUCCESS; } + } else { + return SUCCESS; } } From 59bd2bdaff2c0f9cea141a6ba0a4ad916aa63494 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 22 Sep 2013 00:19:57 +0100 Subject: [PATCH 14/61] anon class objects --- Zend/zend.c | 1 + Zend/zend_compile.c | 23 ++++++++++++++++++++++ Zend/zend_globals.h | 3 +++ Zend/zend_language_parser.y | 38 ++++++++++++++++++++++++++++++++++++- 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/Zend/zend.c b/Zend/zend.c index f9069c8e1b51..a84f7b77a058 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -534,6 +534,7 @@ static void compiler_globals_ctor(zend_compiler_globals *compiler_globals TSRMLS compiler_globals->static_members_table = NULL; } compiler_globals->script_encoding_list = NULL; + compiler_globals->anon_class_id = 0L; } /* }}} */ diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 672f62b7eefa..aad1a10e075d 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2225,6 +2225,29 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */ } /* }}} */ +void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ + char *anon_class_name; + int anon_class_name_len; + + ++CG(anon_class_id); + + result->op_type = IS_CONST; + + anon_class_name_len = snprintf(NULL, 0, "Class$$%lu", CG(anon_class_id)); + anon_class_name = (char*) emalloc(anon_class_name_len+1); + snprintf( + anon_class_name, + anon_class_name_len+1, + "Class$$%lu", CG(anon_class_id) + ); + + Z_TYPE(result->u.constant) = IS_STRING; + Z_STRLEN(result->u.constant) = anon_class_name_len; + Z_STRVAL(result->u.constant) = zend_new_interned_string(anon_class_name, anon_class_name_len+1, 0 TSRMLS_CC); + + efree(anon_class_name); +} /* }}} */ + void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */ { long fetch_class_op_number; diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index b9a5b39914a6..3bc5ffcec71d 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -150,6 +150,9 @@ struct _zend_compiler_globals { zend_bool multibyte; zend_bool detect_unicode; zend_bool encoding_declared; + + /* anonymous classes */ + zend_ulong anon_class_id; #ifdef ZTS zval ***static_members_table; diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 403146e16486..3a9495582cae 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -731,8 +731,44 @@ instance_call: chaining_instance_call { zend_do_pop_object(&$$ TSRMLS_CC); zend_do_end_variable_parse(&$2, BP_VAR_R, 0 TSRMLS_CC); } ; +new_object: + T_NEW class_name_reference { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} +; + +anon_class_type: + T_CLASS { + $$.u.op.opline_num = CG(zend_lineno); + $$.EA = ZEND_ACC_FINAL_CLASS; + } +; + +anon_class_decl: + anon_class_type { + zend_do_create_anon_class(&$$ TSRMLS_CC); + } extends_from { + zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); + } implements_list + '{' class_statement_list '}' { + + zend_do_end_class_declaration(&$1, &$3 TSRMLS_CC); + + zend_do_fetch_class(&$$, &$2 TSRMLS_CC); + } +; + +new_anon_object: + T_NEW anon_class_decl { + zend_do_extended_fcall_begin(TSRMLS_C); + zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); + } ctor_arguments { + zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); + zend_do_extended_fcall_end(TSRMLS_C); + } +; + new_expr: - T_NEW class_name_reference { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + new_object + | new_anon_object ; expr_without_variable: From 0570bcebe6cd86d36471d9b945500bc5ec4f2cde Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 22 Sep 2013 13:06:18 +0100 Subject: [PATCH 15/61] prototype zend_do_create_anon_class in header --- Zend/zend_compile.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 61d11427a1e4..9bcbf0d21a03 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -560,6 +560,7 @@ void zend_do_case_before_statement(const znode *case_list, znode *case_token, co void zend_do_case_after_statement(znode *result, const znode *case_token TSRMLS_DC); void zend_do_default_before_statement(const znode *case_list, znode *default_token TSRMLS_DC); +void zend_do_create_anon_class(znode *result TSRMLS_DC); void zend_do_begin_class_declaration(const znode *class_token, znode *class_name, const znode *parent_class_name TSRMLS_DC); void zend_do_end_class_declaration(const znode *class_token, const znode *parent_token TSRMLS_DC); void zend_do_declare_property(const znode *var_name, const znode *value, zend_uint access_type TSRMLS_DC); From 0a2f96e71591dec461fc55a2bf794c333e879b6e Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 22 Sep 2013 17:24:24 +0100 Subject: [PATCH 16/61] allow methods to return anon classes --- Zend/zend_compile.c | 18 ++++++++---------- Zend/zend_compile.h | 3 ++- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index aad1a10e075d..1b42822679f2 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -4950,7 +4950,7 @@ void zend_do_default_before_statement(const znode *case_list, znode *default_tok } /* }}} */ -void zend_do_begin_class_declaration(const znode *class_token, znode *class_name, const znode *parent_class_name TSRMLS_DC) /* {{{ */ +void zend_do_begin_class_declaration(znode *class_token, znode *class_name, const znode *parent_class_name TSRMLS_DC) /* {{{ */ { zend_op *opline; int doing_inheritance = 0; @@ -4959,10 +4959,7 @@ void zend_do_begin_class_declaration(const znode *class_token, znode *class_name int error = 0; zval **ns_name, key; - if (CG(active_class_entry)) { - zend_error(E_COMPILE_ERROR, "Class declarations may not be nested"); - return; - } + class_token->u.ce = CG(active_class_entry) ? CG(active_class_entry) : NULL; lcname = zend_str_tolower_dup(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant)); @@ -5051,18 +5048,19 @@ void zend_do_begin_class_declaration(const znode *class_token, znode *class_name CALCULATE_LITERAL_HASH(opline->op2.constant); zend_hash_quick_update(CG(class_table), Z_STRVAL(key), Z_STRLEN(key), Z_HASH_P(&CONSTANT(opline->op1.constant)), &new_class_entry, sizeof(zend_class_entry *), NULL); - CG(active_class_entry) = new_class_entry; - + CG(active_class_entry) = new_class_entry; + opline->result.var = get_temporary_variable(CG(active_op_array)); opline->result_type = IS_VAR; GET_NODE(&CG(implementing_class), opline->result); if (CG(doc_comment)) { - CG(active_class_entry)->info.user.doc_comment = CG(doc_comment); - CG(active_class_entry)->info.user.doc_comment_len = CG(doc_comment_len); + new_class_entry->info.user.doc_comment = CG(doc_comment); + new_class_entry->info.user.doc_comment_len = CG(doc_comment_len); CG(doc_comment) = NULL; CG(doc_comment_len) = 0; } + } /* }}} */ @@ -5134,7 +5132,7 @@ void zend_do_end_class_declaration(const znode *class_token, const znode *parent ce->ce_flags |= ZEND_ACC_IMPLEMENT_INTERFACES; } - CG(active_class_entry) = NULL; + CG(active_class_entry) = class_token->u.ce; } /* }}} */ diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 9bcbf0d21a03..4f318e47c3d1 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -92,6 +92,7 @@ typedef struct _znode { /* used only during compilation */ znode_op op; zval constant; /* replaced by literal/zv */ zend_op_array *op_array; + zend_class_entry *ce; } u; zend_uint EA; /* extended attributes */ } znode; @@ -561,7 +562,7 @@ void zend_do_case_after_statement(znode *result, const znode *case_token TSRMLS_ void zend_do_default_before_statement(const znode *case_list, znode *default_token TSRMLS_DC); void zend_do_create_anon_class(znode *result TSRMLS_DC); -void zend_do_begin_class_declaration(const znode *class_token, znode *class_name, const znode *parent_class_name TSRMLS_DC); +void zend_do_begin_class_declaration(znode *class_token, znode *class_name, const znode *parent_class_name TSRMLS_DC); void zend_do_end_class_declaration(const znode *class_token, const znode *parent_token TSRMLS_DC); void zend_do_declare_property(const znode *var_name, const znode *value, zend_uint access_type TSRMLS_DC); void zend_do_declare_class_constant(znode *var_name, const znode *value TSRMLS_DC); From f4b3b556fbffe11935b80553193f7962bc6252dc Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 23 Sep 2013 00:43:56 +0100 Subject: [PATCH 17/61] cleanup patch: make sure use of class_token is correct revert changes to znode typedef, reuse op.ptr --- Zend/zend_compile.c | 12 +++++++++--- Zend/zend_compile.h | 3 +-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 1b42822679f2..529612880c30 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -4958,8 +4958,13 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons char *lcname; int error = 0; zval **ns_name, key; + zend_uint opline_num = 0L; + + /* save opline_num before changing node */ + opline_num = class_token->u.op.opline_num; - class_token->u.ce = CG(active_class_entry) ? CG(active_class_entry) : NULL; + /* save active class address */ + class_token->u.op.ptr = CG(active_class_entry) ? CG(active_class_entry) : NULL; lcname = zend_str_tolower_dup(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant)); @@ -5004,7 +5009,7 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons zend_initialize_class_data(new_class_entry, 1 TSRMLS_CC); new_class_entry->info.user.filename = zend_get_compiled_filename(TSRMLS_C); - new_class_entry->info.user.line_start = class_token->u.op.opline_num; + new_class_entry->info.user.line_start = opline_num; new_class_entry->ce_flags |= class_token->EA; if (parent_class_name && parent_class_name->op_type != IS_UNUSED) { @@ -5132,7 +5137,8 @@ void zend_do_end_class_declaration(const znode *class_token, const znode *parent ce->ce_flags |= ZEND_ACC_IMPLEMENT_INTERFACES; } - CG(active_class_entry) = class_token->u.ce; + /* restore active class entry*/ + CG(active_class_entry) = class_token->u.op.ptr; } /* }}} */ diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 4f318e47c3d1..065ca5a6b7ae 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -83,7 +83,7 @@ typedef union _znode_op { zend_op *jmp_addr; zval *zv; zend_literal *literal; - void *ptr; /* Used for passing pointers from the compile to execution phase, currently used for traits */ + void *ptr; /* Used for passing pointers from the compile to execution phase, currently used for traits and nested anonymous class support */ } znode_op; typedef struct _znode { /* used only during compilation */ @@ -92,7 +92,6 @@ typedef struct _znode { /* used only during compilation */ znode_op op; zval constant; /* replaced by literal/zv */ zend_op_array *op_array; - zend_class_entry *ce; } u; zend_uint EA; /* extended attributes */ } znode; From 9aa359962a4f2df276900e3a9e682a5189e71bfe Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 12:55:25 +0100 Subject: [PATCH 18/61] code paths fix, allow while () {new class{}} etc, re-using definition --- Zend/zend.c | 1 + Zend/zend_compile.c | 31 +++++++++++++++++++++++++++++-- Zend/zend_compile.h | 1 + Zend/zend_globals.h | 3 +++ Zend/zend_language_parser.y | 4 +--- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/Zend/zend.c b/Zend/zend.c index a84f7b77a058..3be5cb7d29d0 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -581,6 +581,7 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS #endif EG(saved_fpu_cw_ptr) = NULL; EG(active) = 0; + EG(anon_class_id) = 0; } /* }}} */ diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 529612880c30..32359eef8d4a 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2252,7 +2252,7 @@ void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */ { long fetch_class_op_number; zend_op *opline; - + fetch_class_op_number = get_next_op_number(CG(active_op_array)); opline = get_next_op(CG(active_op_array) TSRMLS_CC); @@ -4522,7 +4522,7 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze { zend_class_entry *ce, **pce; zval *op1, *op2; - + if (compile_time) { op1 = &CONSTANT_EX(op_array, opline->op1.constant); op2 = &CONSTANT_EX(op_array, opline->op2.constant); @@ -4530,13 +4530,23 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze op1 = opline->op1.zv; op2 = opline->op2.zv; } + if (zend_hash_quick_find(class_table, Z_STRVAL_P(op1), Z_STRLEN_P(op1), Z_HASH_P(op1), (void **) &pce)==FAILURE) { zend_error(E_COMPILE_ERROR, "Internal Zend error - Missing class information for %s", Z_STRVAL_P(op1)); return NULL; } else { ce = *pce; } + ce->refcount++; + + /* return anonymous class */ + if (ce->ce_flags & (ZEND_ACC_ANON_CLASS) && + ce->ce_flags & (ZEND_ACC_FINAL_CLASS)) { + ce->refcount--; + return ce; + } + if (zend_hash_quick_add(class_table, Z_STRVAL_P(op2), Z_STRLEN_P(op2)+1, Z_HASH_P(op2), &ce, sizeof(zend_class_entry *), NULL)==FAILURE) { ce->refcount--; if (!compile_time) { @@ -4552,6 +4562,10 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) { zend_verify_abstract_class(ce TSRMLS_CC); } + + if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { + ce->ce_flags |= ZEND_ACC_FINAL_CLASS; + } return ce; } } @@ -4593,14 +4607,27 @@ ZEND_API zend_class_entry *do_bind_inherited_class(const zend_op_array *op_array zend_error(E_COMPILE_ERROR, "Class %s cannot extend from trait %s", ce->name, parent_ce->name); } + /* return anonymous class */ + if (ce->ce_flags & (ZEND_ACC_ANON_CLASS) && + ce->ce_flags & (ZEND_ACC_FINAL_CLASS)) { + return ce; + } + zend_do_inheritance(ce, parent_ce TSRMLS_CC); ce->refcount++; + + /* Register the derived class */ if (zend_hash_quick_add(class_table, Z_STRVAL_P(op2), Z_STRLEN_P(op2)+1, Z_HASH_P(op2), pce, sizeof(zend_class_entry *), NULL)==FAILURE) { zend_error(E_COMPILE_ERROR, "Cannot redeclare class %s", ce->name); } + + if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { + ce->ce_flags |= ZEND_ACC_FINAL_CLASS; + } + return ce; } /* }}} */ diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 065ca5a6b7ae..64cf52849187 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -159,6 +159,7 @@ typedef struct _zend_try_catch_element { #define ZEND_ACC_FINAL_CLASS 0x40 #define ZEND_ACC_INTERFACE 0x80 #define ZEND_ACC_TRAIT 0x120 +#define ZEND_ACC_ANON_CLASS 0x200 /* op_array flags */ #define ZEND_ACC_INTERACTIVE 0x10 diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index 3bc5ffcec71d..17a2558afc9f 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -260,6 +260,9 @@ struct _zend_executor_globals { XPFPA_CW_DATATYPE saved_fpu_cw; #endif + /* anonymous classes */ + zend_ulong anon_class_id; + void *reserved[ZEND_MAX_RESERVED_RESOURCES]; }; diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 3a9495582cae..dbb600727e8e 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -738,7 +738,7 @@ new_object: anon_class_type: T_CLASS { $$.u.op.opline_num = CG(zend_lineno); - $$.EA = ZEND_ACC_FINAL_CLASS; + $$.EA = ZEND_ACC_ANON_CLASS; } ; @@ -749,9 +749,7 @@ anon_class_decl: zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); } implements_list '{' class_statement_list '}' { - zend_do_end_class_declaration(&$1, &$3 TSRMLS_CC); - zend_do_fetch_class(&$$, &$2 TSRMLS_CC); } ; From 2f231ff4b889b2813c759f70e67dae01cad3a5b8 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 13:03:14 +0100 Subject: [PATCH 19/61] don't need these --- Zend/zend.c | 1 - Zend/zend_globals.h | 3 --- 2 files changed, 4 deletions(-) diff --git a/Zend/zend.c b/Zend/zend.c index 3be5cb7d29d0..a84f7b77a058 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -581,7 +581,6 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS #endif EG(saved_fpu_cw_ptr) = NULL; EG(active) = 0; - EG(anon_class_id) = 0; } /* }}} */ diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index 17a2558afc9f..3bc5ffcec71d 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -260,9 +260,6 @@ struct _zend_executor_globals { XPFPA_CW_DATATYPE saved_fpu_cw; #endif - /* anonymous classes */ - zend_ulong anon_class_id; - void *reserved[ZEND_MAX_RESERVED_RESOURCES]; }; From d8af08727fe3c582f6f14ddcb0344277a4616063 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 13:43:56 +0100 Subject: [PATCH 20/61] tidy patch --- Zend/zend_compile.c | 22 +++++++++++----------- Zend/zend_language_parser.y | 6 +++--- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 32359eef8d4a..db6ccf21c7b5 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2243,7 +2243,7 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ Z_TYPE(result->u.constant) = IS_STRING; Z_STRLEN(result->u.constant) = anon_class_name_len; - Z_STRVAL(result->u.constant) = zend_new_interned_string(anon_class_name, anon_class_name_len+1, 0 TSRMLS_CC); + Z_STRVAL(result->u.constant) = (char*) zend_new_interned_string(anon_class_name, anon_class_name_len+1, 0 TSRMLS_CC); efree(anon_class_name); } /* }}} */ @@ -4522,7 +4522,7 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze { zend_class_entry *ce, **pce; zval *op1, *op2; - + if (compile_time) { op1 = &CONSTANT_EX(op_array, opline->op1.constant); op2 = &CONSTANT_EX(op_array, opline->op2.constant); @@ -4530,23 +4530,23 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze op1 = opline->op1.zv; op2 = opline->op2.zv; } - + if (zend_hash_quick_find(class_table, Z_STRVAL_P(op1), Z_STRLEN_P(op1), Z_HASH_P(op1), (void **) &pce)==FAILURE) { zend_error(E_COMPILE_ERROR, "Internal Zend error - Missing class information for %s", Z_STRVAL_P(op1)); return NULL; } else { ce = *pce; } - + ce->refcount++; - + /* return anonymous class */ if (ce->ce_flags & (ZEND_ACC_ANON_CLASS) && ce->ce_flags & (ZEND_ACC_FINAL_CLASS)) { ce->refcount--; return ce; } - + if (zend_hash_quick_add(class_table, Z_STRVAL_P(op2), Z_STRLEN_P(op2)+1, Z_HASH_P(op2), &ce, sizeof(zend_class_entry *), NULL)==FAILURE) { ce->refcount--; if (!compile_time) { @@ -4563,6 +4563,7 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze zend_verify_abstract_class(ce TSRMLS_CC); } + /* set final anonymous class */ if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { ce->ce_flags |= ZEND_ACC_FINAL_CLASS; } @@ -4617,17 +4618,16 @@ ZEND_API zend_class_entry *do_bind_inherited_class(const zend_op_array *op_array ce->refcount++; - - /* Register the derived class */ if (zend_hash_quick_add(class_table, Z_STRVAL_P(op2), Z_STRLEN_P(op2)+1, Z_HASH_P(op2), pce, sizeof(zend_class_entry *), NULL)==FAILURE) { zend_error(E_COMPILE_ERROR, "Cannot redeclare class %s", ce->name); } - if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { + /* set final anonymous class */ + if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { ce->ce_flags |= ZEND_ACC_FINAL_CLASS; - } - + } + return ce; } /* }}} */ diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index dbb600727e8e..5a7dc08a4edb 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -737,17 +737,17 @@ new_object: anon_class_type: T_CLASS { - $$.u.op.opline_num = CG(zend_lineno); + $$.u.op.opline_num = CG(zend_lineno); $$.EA = ZEND_ACC_ANON_CLASS; } ; anon_class_decl: anon_class_type { - zend_do_create_anon_class(&$$ TSRMLS_CC); + zend_do_create_anon_class(&$$ TSRMLS_CC); } extends_from { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); - } implements_list + } implements_list '{' class_statement_list '}' { zend_do_end_class_declaration(&$1, &$3 TSRMLS_CC); zend_do_fetch_class(&$$, &$2 TSRMLS_CC); From ad6624582a38e4c4f3ce172599485a6ba3338ff1 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 19:01:17 +0100 Subject: [PATCH 21/61] fix for zts --- Zend/zend_compile.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index db6ccf21c7b5..bd6b705715ec 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2226,26 +2226,30 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */ /* }}} */ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ - char *anon_class_name; - int anon_class_name_len; + char *class_name = NULL; + int class_name_len = 0; - ++CG(anon_class_id); + CG(anon_class_id)++; result->op_type = IS_CONST; - anon_class_name_len = snprintf(NULL, 0, "Class$$%lu", CG(anon_class_id)); - anon_class_name = (char*) emalloc(anon_class_name_len+1); + Z_TYPE(result->u.constant) = IS_STRING; + class_name_len = snprintf( + NULL, 0, "Class$$%lu", CG(anon_class_id))+1; + class_name = (char*) safe_emalloc(class_name_len+1, 1, 1); snprintf( - anon_class_name, - anon_class_name_len+1, + class_name, class_name_len, "Class$$%lu", CG(anon_class_id) ); + Z_STRLEN(result->u.constant) = class_name_len; - Z_TYPE(result->u.constant) = IS_STRING; - Z_STRLEN(result->u.constant) = anon_class_name_len; - Z_STRVAL(result->u.constant) = (char*) zend_new_interned_string(anon_class_name, anon_class_name_len+1, 0 TSRMLS_CC); - - efree(anon_class_name); +#ifndef ZTS + Z_STRVAL(result->u.constant) = (char*) zend_new_interned_string( + class_name, class_name_len+1, 0 TSRMLS_CC); + efree(class_name); +#else + Z_STRVAL(result->u.constant) = class_name; +#endif } /* }}} */ void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */ @@ -5033,12 +5037,12 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons new_class_entry->type = ZEND_USER_CLASS; new_class_entry->name = zend_new_interned_string(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant) + 1, 1 TSRMLS_CC); new_class_entry->name_length = Z_STRLEN(class_name->u.constant); - + zend_initialize_class_data(new_class_entry, 1 TSRMLS_CC); new_class_entry->info.user.filename = zend_get_compiled_filename(TSRMLS_C); new_class_entry->info.user.line_start = opline_num; new_class_entry->ce_flags |= class_token->EA; - + if (parent_class_name && parent_class_name->op_type != IS_UNUSED) { switch (parent_class_name->EA) { case ZEND_FETCH_CLASS_SELF: @@ -5087,8 +5091,8 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons GET_NODE(&CG(implementing_class), opline->result); if (CG(doc_comment)) { - new_class_entry->info.user.doc_comment = CG(doc_comment); - new_class_entry->info.user.doc_comment_len = CG(doc_comment_len); + CG(active_class_entry)->info.user.doc_comment = CG(doc_comment); + CG(active_class_entry)->info.user.doc_comment_len = CG(doc_comment_len); CG(doc_comment) = NULL; CG(doc_comment_len) = 0; } From d9a1752163f38455514c8a67c995129287e08b31 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 21:19:52 +0100 Subject: [PATCH 22/61] resolve last errors / inconsistencies in ZTS mode --- Zend/zend_compile.c | 10 ++++++---- Zend/zend_opcode.c | 8 +++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index bd6b705715ec..0b9edf1e28eb 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2235,14 +2235,16 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ Z_TYPE(result->u.constant) = IS_STRING; class_name_len = snprintf( - NULL, 0, "Class$$%lu", CG(anon_class_id))+1; - class_name = (char*) safe_emalloc(class_name_len+1, 1, 1); + NULL, 0, "Class$$%lu", CG(anon_class_id)); + class_name = (char*) emalloc(class_name_len+1); snprintf( - class_name, class_name_len, + class_name, class_name_len+1, "Class$$%lu", CG(anon_class_id) ); - Z_STRLEN(result->u.constant) = class_name_len; + class_name[class_name_len] = '\0'; + Z_STRLEN(result->u.constant) = class_name_len; + #ifndef ZTS Z_STRVAL(result->u.constant) = (char*) zend_new_interned_string( class_name, class_name_len+1, 0 TSRMLS_CC); diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index 41b4bd25710f..6392e0402c26 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -296,7 +296,13 @@ ZEND_API void destroy_zend_class(zend_class_entry **pce) efree(ce->default_static_members_table); } zend_hash_destroy(&ce->properties_info); - str_efree(ce->name); +#ifdef ZTS + if (!(ce->ce_flags & ZEND_ACC_ANON_CLASS)) { + str_efree(ce->name); + } +#else + str_efree(ce->name); +#endif zend_hash_destroy(&ce->function_table); zend_hash_destroy(&ce->constants_table); if (ce->num_interfaces > 0 && ce->interfaces) { From a084e59ccaf1c493c6fe87b880afa068e859ccd5 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 21:41:27 +0100 Subject: [PATCH 23/61] some tests --- Zend/tests/anon/001.phpt | 10 ++++++++ Zend/tests/anon/002.phpt | 10 ++++++++ Zend/tests/anon/003.phpt | 54 ++++++++++++++++++++++++++++++++++++++++ Zend/tests/anon/004.phpt | 35 ++++++++++++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 Zend/tests/anon/001.phpt create mode 100644 Zend/tests/anon/002.phpt create mode 100644 Zend/tests/anon/003.phpt create mode 100644 Zend/tests/anon/004.phpt diff --git a/Zend/tests/anon/001.phpt b/Zend/tests/anon/001.phpt new file mode 100644 index 000000000000..1cf21e702f19 --- /dev/null +++ b/Zend/tests/anon/001.phpt @@ -0,0 +1,10 @@ +--TEST-- +declare bare anonymous class +--FILE-- + +--EXPECTF-- +object(Class$$1)#%d (0) { +} + diff --git a/Zend/tests/anon/002.phpt b/Zend/tests/anon/002.phpt new file mode 100644 index 000000000000..0790e5b6dfe7 --- /dev/null +++ b/Zend/tests/anon/002.phpt @@ -0,0 +1,10 @@ +--TEST-- +declare anonymous class extending another +--FILE-- + +--EXPECTF-- +object(Class$$1)#%d (0) { +} + diff --git a/Zend/tests/anon/003.phpt b/Zend/tests/anon/003.phpt new file mode 100644 index 000000000000..8c8db9deb391 --- /dev/null +++ b/Zend/tests/anon/003.phpt @@ -0,0 +1,54 @@ +--TEST-- +reusing anonymous classes +--FILE-- +i = $i; + } + }($i)); +} +?> +--EXPECTF-- +object(Class$$1)#1 (1) { + ["i"]=> + int(1) +} +object(Class$$1)#1 (1) { + ["i"]=> + int(2) +} +object(Class$$1)#1 (1) { + ["i"]=> + int(3) +} +object(Class$$1)#1 (1) { + ["i"]=> + int(4) +} +object(Class$$1)#1 (1) { + ["i"]=> + int(5) +} +object(Class$$1)#1 (1) { + ["i"]=> + int(6) +} +object(Class$$1)#1 (1) { + ["i"]=> + int(7) +} +object(Class$$1)#1 (1) { + ["i"]=> + int(8) +} +object(Class$$1)#1 (1) { + ["i"]=> + int(9) +} +object(Class$$1)#1 (1) { + ["i"]=> + int(10) +} + diff --git a/Zend/tests/anon/004.phpt b/Zend/tests/anon/004.phpt new file mode 100644 index 000000000000..74743f41896b --- /dev/null +++ b/Zend/tests/anon/004.phpt @@ -0,0 +1,35 @@ +--TEST-- +testing anonymous inheritance +--FILE-- +dice = $dice->dice; + } else $this->dice = $dice; + } + + protected function getData() { + return $this->dice; + } + + public function getDataProxy() { + return new class extends Outer { + public function getProxyData() { + return $this->getData(); + } + } ($this); + } +} +$outer = new Outer(array(rand(1,10))); +var_dump($outer->getDataProxy()->getProxyData()); +?> +--EXPECTF-- +array(1) { + [0]=> + int(%d) +} + + From a629e04465658cd32adc92254206ebbff4cfaac6 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 22:34:51 +0100 Subject: [PATCH 24/61] allow extends $this --- Zend/zend_language_parser.y | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 5a7dc08a4edb..d569dcda604f 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -45,7 +45,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %} %pure_parser -%expect 3 +%expect 8 %code requires { #ifdef ZTS @@ -742,10 +742,16 @@ anon_class_type: } ; +anon_class_extends: + /* empty */ { $$.op_type = IS_UNUSED; } + | T_EXTENDS fully_qualified_class_name { zend_do_fetch_class(&$$, &$2 TSRMLS_CC); } + | T_EXTENDS dynamic_class_name_reference { zend_do_end_variable_parse(&$2, BP_VAR_R, 0 TSRMLS_CC); zend_do_fetch_class(&$$, &$2 TSRMLS_CC); } +; + anon_class_decl: anon_class_type { zend_do_create_anon_class(&$$ TSRMLS_CC); - } extends_from { + } anon_class_extends { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); } implements_list '{' class_statement_list '}' { From dedecdd115782b09068031a6a30d2e63bdccb513 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 22:45:09 +0100 Subject: [PATCH 25/61] drop the option to extend $this --- Zend/zend_language_parser.y | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index d569dcda604f..0ff5b4a6874b 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -45,7 +45,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %} %pure_parser -%expect 8 +%expect 3 %code requires { #ifdef ZTS @@ -745,7 +745,6 @@ anon_class_type: anon_class_extends: /* empty */ { $$.op_type = IS_UNUSED; } | T_EXTENDS fully_qualified_class_name { zend_do_fetch_class(&$$, &$2 TSRMLS_CC); } - | T_EXTENDS dynamic_class_name_reference { zend_do_end_variable_parse(&$2, BP_VAR_R, 0 TSRMLS_CC); zend_do_fetch_class(&$$, &$2 TSRMLS_CC); } ; anon_class_decl: From a97171d3fe5c605a1b56cdf10c449859f9310194 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Wed, 25 Sep 2013 23:28:59 +0100 Subject: [PATCH 26/61] make sensible test --- Zend/tests/anon/004.phpt | 41 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/Zend/tests/anon/004.phpt b/Zend/tests/anon/004.phpt index 74743f41896b..17203124c5e3 100644 --- a/Zend/tests/anon/004.phpt +++ b/Zend/tests/anon/004.phpt @@ -3,33 +3,32 @@ testing anonymous inheritance --FILE-- dice = $dice->dice; - } else $this->dice = $dice; + public function __construct($data) { + $this->data = $data; } - protected function getData() { - return $this->dice; - } - - public function getDataProxy() { - return new class extends Outer { - public function getProxyData() { - return $this->getData(); - } - } ($this); + public function getArrayAccess() { + /* create a proxy object implementing array access */ + return new class extends Outer implements ArrayAccess { + public function offsetGet($offset) { return $this->data[$offset]; } + public function offsetSet($offset, $data) { return ($this->data[$offset] = $data); } + public function offsetUnset($offset) { unset($this->data[$offset]); } + public function offsetExists($offset) { return isset($this->data[$offset]); } + }($this->data); } } -$outer = new Outer(array(rand(1,10))); -var_dump($outer->getDataProxy()->getProxyData()); + +$outer = new Outer(array( + rand(1, 100) +)); + +$proxy = $outer->getArrayAccess(); + +var_dump($proxy[0]); ?> --EXPECTF-- -array(1) { - [0]=> - int(%d) -} +int(%d) From 14eaa353f66297676002830371a16ac3a5f63588 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Thu, 26 Sep 2013 00:04:20 +0100 Subject: [PATCH 27/61] fix objects that implement interfaces failing on second attempt at object creation --- Zend/tests/anon/005.phpt | 39 +++++++++++++++++++++++++++++++++++++ Zend/zend_compile.c | 13 ++++++++++--- Zend/zend_language_parser.y | 2 +- 3 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 Zend/tests/anon/005.phpt diff --git a/Zend/tests/anon/005.phpt b/Zend/tests/anon/005.phpt new file mode 100644 index 000000000000..afc1d8563be5 --- /dev/null +++ b/Zend/tests/anon/005.phpt @@ -0,0 +1,39 @@ +--TEST-- +testing reusing objects that implement an interface +--FILE-- +data = &$data; + } + + public function getArrayAccess() { + /* create a child object implementing array access */ + /* this grants you access to protected methods and members */ + return new class extends Outer implements ArrayAccess { + public function offsetGet($offset) { return $this->data[$offset]; } + public function offsetSet($offset, $data) { return ($this->data[$offset] = $data); } + public function offsetUnset($offset) { unset($this->data[$offset]); } + public function offsetExists($offset) { return isset($this->data[$offset]); } + }($this->data); + } +} + +$data = array( + rand(1, 100), + rand(2, 200) +); +$outer = new Outer($data); +$proxy = $outer->getArrayAccess(); + +unset($proxy[0]); +var_dump(@$outer->getArrayAccess()[0]); +?> +--EXPECT-- +NULL + + + diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 0b9edf1e28eb..57bca0267e93 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3759,7 +3759,7 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry zend_uint i, ignore = 0; zend_uint current_iface_num = ce->num_interfaces; zend_uint parent_iface_num = ce->parent ? ce->parent->num_interfaces : 0; - + for (i = 0; i < ce->num_interfaces; i++) { if (ce->interfaces[i] == NULL) { memmove(ce->interfaces + i, ce->interfaces + i + 1, sizeof(zend_class_entry*) * (--ce->num_interfaces - i)); @@ -3767,11 +3767,18 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry } else if (ce->interfaces[i] == iface) { if (i < parent_iface_num) { ignore = 1; - } else { + } else { + if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { + if (ce->ce_flags & ZEND_ACC_FINAL_CLASS) { + continue; + } + } + zend_error(E_COMPILE_ERROR, "Class %s cannot implement previously implemented interface %s", ce->name, iface->name); } } } + if (ignore) { /* Check for attempt to redeclare interface constants */ zend_hash_apply_with_arguments(&ce->constants_table TSRMLS_CC, (apply_func_args_t) do_interface_constant_check, 1, &iface); @@ -4571,7 +4578,7 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze /* set final anonymous class */ if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { - ce->ce_flags |= ZEND_ACC_FINAL_CLASS; + ce->ce_flags = ZEND_ACC_ANON_CLASS|ZEND_ACC_FINAL_CLASS; } return ce; } diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 0ff5b4a6874b..217c73f92790 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -743,7 +743,7 @@ anon_class_type: ; anon_class_extends: - /* empty */ { $$.op_type = IS_UNUSED; } + /* empty */ { $$.op_type = IS_UNUSED; } | T_EXTENDS fully_qualified_class_name { zend_do_fetch_class(&$$, &$2 TSRMLS_CC); } ; From 71d5cf97584b22e79b15eb0b0595a9e819f477af Mon Sep 17 00:00:00 2001 From: krakjoe Date: Thu, 26 Sep 2013 01:01:13 +0100 Subject: [PATCH 28/61] correction --- Zend/tests/anon/005.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zend/tests/anon/005.phpt b/Zend/tests/anon/005.phpt index afc1d8563be5..eb0c52d68f3a 100644 --- a/Zend/tests/anon/005.phpt +++ b/Zend/tests/anon/005.phpt @@ -1,5 +1,5 @@ --TEST-- -testing reusing objects that implement an interface +testing reusing anons that implement an interface --FILE-- Date: Thu, 26 Sep 2013 01:02:27 +0100 Subject: [PATCH 29/61] remove pointless stuff --- Zend/zend_language_parser.y | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 217c73f92790..5a7dc08a4edb 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -742,15 +742,10 @@ anon_class_type: } ; -anon_class_extends: - /* empty */ { $$.op_type = IS_UNUSED; } - | T_EXTENDS fully_qualified_class_name { zend_do_fetch_class(&$$, &$2 TSRMLS_CC); } -; - anon_class_decl: anon_class_type { zend_do_create_anon_class(&$$ TSRMLS_CC); - } anon_class_extends { + } extends_from { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); } implements_list '{' class_statement_list '}' { From 937e404405b23a67e60089f1ef740540ccaccc95 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Thu, 26 Sep 2013 14:13:35 +0100 Subject: [PATCH 30/61] tidy --- Zend/zend_compile.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 57bca0267e93..d789f3c857d1 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2244,14 +2244,8 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ class_name[class_name_len] = '\0'; Z_STRLEN(result->u.constant) = class_name_len; - -#ifndef ZTS Z_STRVAL(result->u.constant) = (char*) zend_new_interned_string( - class_name, class_name_len+1, 0 TSRMLS_CC); - efree(class_name); -#else - Z_STRVAL(result->u.constant) = class_name; -#endif + class_name, class_name_len+1, 1 TSRMLS_CC); } /* }}} */ void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */ From e64f807fc0a701500725ec95226d55eb7fde2763 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Thu, 26 Sep 2013 19:26:40 +0100 Subject: [PATCH 31/61] improve anonymous class name generation --- Zend/zend_compile.c | 60 ++++++++++++++++++++++++++++++++----- Zend/zend_language_parser.y | 1 + 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d789f3c857d1..d99a7c97cb13 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2228,26 +2228,46 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ char *class_name = NULL; int class_name_len = 0; - + const char *prefix_name = NULL; + + /* give each class a unique id */ CG(anon_class_id)++; - - result->op_type = IS_CONST; - + + /* prefix anonymous class with current scope for reference */ + if (CG(active_op_array)) { + if (CG(active_op_array)->scope) { + prefix_name = CG(active_op_array)->scope->name; + } else if (CG(active_op_array)->function_name) { + prefix_name = CG(active_op_array)->function_name; + } else prefix_name = "Class"; + } + + /* populate znode constant with generated anonymous class name */ Z_TYPE(result->u.constant) = IS_STRING; class_name_len = snprintf( - NULL, 0, "Class$$%lu", CG(anon_class_id)); + NULL, 0, "%s$$%lu", prefix_name, CG(anon_class_id)); class_name = (char*) emalloc(class_name_len+1); snprintf( class_name, class_name_len+1, - "Class$$%lu", CG(anon_class_id) + "%s$$%lu", prefix_name, CG(anon_class_id) ); class_name[class_name_len] = '\0'; - + Z_STRLEN(result->u.constant) = class_name_len; Z_STRVAL(result->u.constant) = (char*) zend_new_interned_string( class_name, class_name_len+1, 1 TSRMLS_CC); + + result->op_type = IS_CONST; } /* }}} */ +void zend_do_extend_anon_class(znode *class_name, const znode *parent_class TSRMLS_DC) { + if (parent_class->op_type != IS_UNUSED) { + php_printf( + "extending %s with %s\n", Z_STRVAL(class_name->u.constant), Z_STRVAL(parent_class->u.constant) + ); + } +} + void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */ { long fetch_class_op_number; @@ -5013,6 +5033,32 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons error = 1; } + /* + if (CG(active_class_entry) && (class_token->EA & ZEND_ACC_ANON_CLASS)) { + char *old_class_name = estrndup(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant)); + zend_uint old_class_name_len = Z_STRLEN(class_name->u.constant); + zend_uint new_class_name_len = + CG(active_class_entry)->name_length + + (sizeof("\\")-1) + + old_class_name_len; + + Z_STRVAL(class_name->u.constant) = erealloc( + Z_STRVAL(class_name->u.constant), new_class_name_len+1); + + memcpy(&Z_STRVAL(class_name->u.constant)[0], CG(active_class_entry)->name, CG(active_class_entry)->name_length); + memcpy(&Z_STRVAL(class_name->u.constant)[CG(active_class_entry)->name_length], "\\", sizeof("\\")-1); + memcpy(&Z_STRVAL(class_name->u.constant)[CG(active_class_entry)->name_length+(sizeof("\\")-1)], old_class_name, old_class_name_len); + + Z_STRVAL(class_name->u.constant)[new_class_name_len] = '\0'; + + Z_TYPE(class_name->u.constant) = IS_CONST; + Z_STRLEN(class_name->u.constant) = new_class_name_len; + Z_STRVAL(class_name->u.constant) = zend_new_interned_string(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant)+1, 1 TSRMLS_CC); + + efree(old_class_name); + } + */ + if (CG(current_namespace)) { /* Prefix class name with name of current namespace */ znode tmp; diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 5a7dc08a4edb..a3468e1085cb 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -588,6 +588,7 @@ class_statement_list: class_statement: variable_modifiers { CG(access_type) = Z_LVAL($1.u.constant); } class_variable_declaration ';' + | unticked_class_declaration_statement | class_constant_declaration ';' | trait_use_statement | method_modifiers function is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$4, 1, $3.op_type, &$1 TSRMLS_CC); } From 533905c855c7d969518adfe23d6be0827ca05e45 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Thu, 26 Sep 2013 19:27:25 +0100 Subject: [PATCH 32/61] improve anon class name generation --- Zend/zend_compile.c | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d99a7c97cb13..045ddd86152a 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5033,32 +5033,6 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons error = 1; } - /* - if (CG(active_class_entry) && (class_token->EA & ZEND_ACC_ANON_CLASS)) { - char *old_class_name = estrndup(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant)); - zend_uint old_class_name_len = Z_STRLEN(class_name->u.constant); - zend_uint new_class_name_len = - CG(active_class_entry)->name_length + - (sizeof("\\")-1) + - old_class_name_len; - - Z_STRVAL(class_name->u.constant) = erealloc( - Z_STRVAL(class_name->u.constant), new_class_name_len+1); - - memcpy(&Z_STRVAL(class_name->u.constant)[0], CG(active_class_entry)->name, CG(active_class_entry)->name_length); - memcpy(&Z_STRVAL(class_name->u.constant)[CG(active_class_entry)->name_length], "\\", sizeof("\\")-1); - memcpy(&Z_STRVAL(class_name->u.constant)[CG(active_class_entry)->name_length+(sizeof("\\")-1)], old_class_name, old_class_name_len); - - Z_STRVAL(class_name->u.constant)[new_class_name_len] = '\0'; - - Z_TYPE(class_name->u.constant) = IS_CONST; - Z_STRLEN(class_name->u.constant) = new_class_name_len; - Z_STRVAL(class_name->u.constant) = zend_new_interned_string(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant)+1, 1 TSRMLS_CC); - - efree(old_class_name); - } - */ - if (CG(current_namespace)) { /* Prefix class name with name of current namespace */ znode tmp; From 1d6013e294151ad8ba05a026e6c2007432a0f9e7 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Thu, 26 Sep 2013 19:35:36 +0100 Subject: [PATCH 33/61] woops, that's from another patch --- Zend/zend_language_parser.y | 1 - 1 file changed, 1 deletion(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index a3468e1085cb..5a7dc08a4edb 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -588,7 +588,6 @@ class_statement_list: class_statement: variable_modifiers { CG(access_type) = Z_LVAL($1.u.constant); } class_variable_declaration ';' - | unticked_class_declaration_statement | class_constant_declaration ';' | trait_use_statement | method_modifiers function is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$4, 1, $3.op_type, &$1 TSRMLS_CC); } From ca1bd0a252a58b9e79601c1812073a0a1924564f Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 08:44:03 +0100 Subject: [PATCH 34/61] remove --- Zend/zend_compile.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 045ddd86152a..f83e92905b8e 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2260,14 +2260,6 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ result->op_type = IS_CONST; } /* }}} */ -void zend_do_extend_anon_class(znode *class_name, const znode *parent_class TSRMLS_DC) { - if (parent_class->op_type != IS_UNUSED) { - php_printf( - "extending %s with %s\n", Z_STRVAL(class_name->u.constant), Z_STRVAL(parent_class->u.constant) - ); - } -} - void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */ { long fetch_class_op_number; From 899a2a89143bc6126b6bb09b7340e1f5ff452c7b Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 17:08:48 +0100 Subject: [PATCH 35/61] super:: support --- Zend/zend.h | 2 + Zend/zend_compile.c | 1 + Zend/zend_language_parser.y | 16 + Zend/zend_language_scanner.c | 2439 +++++++++++++++++----------------- Zend/zend_language_scanner.l | 5 + Zend/zend_object_handlers.c | 13 +- 6 files changed, 1272 insertions(+), 1204 deletions(-) diff --git a/Zend/zend.h b/Zend/zend.h index acbb6acaf76c..1f594d4b46fe 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -471,6 +471,7 @@ struct _zend_trait_alias { */ zend_uint modifiers; }; + typedef struct _zend_trait_alias zend_trait_alias; struct _zend_class_entry { @@ -478,6 +479,7 @@ struct _zend_class_entry { const char *name; zend_uint name_length; struct _zend_class_entry *parent; + struct _zend_class_entry *super; int refcount; zend_uint ce_flags; diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index f83e92905b8e..2beefc0343a2 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5057,6 +5057,7 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons new_class_entry->info.user.filename = zend_get_compiled_filename(TSRMLS_C); new_class_entry->info.user.line_start = opline_num; new_class_entry->ce_flags |= class_token->EA; + new_class_entry->super = class_token->u.op.ptr; if (parent_class_name && parent_class_name->op_type != IS_UNUSED) { switch (parent_class_name->EA) { diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 5a7dc08a4edb..bfdfba63b872 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -186,6 +186,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %token T_INTERFACE "interface (T_INTERFACE)" %token T_EXTENDS "extends (T_EXTENDS)" %token T_IMPLEMENTS "implements (T_IMPLEMENTS)" +%token T_SUPER "super (T_SUPER)" %token T_OBJECT_OPERATOR "-> (T_OBJECT_OPERATOR)" %token T_DOUBLE_ARROW "=> (T_DOUBLE_ARROW)" %token T_LIST "list (T_LIST)" @@ -883,6 +884,17 @@ lexical_var_list: | '&' T_VARIABLE { zend_do_fetch_lexical_variable(&$2, 1 TSRMLS_CC); } ; +super_function_call: + T_SUPER { + if (CG(active_class_entry)->super) { + $$.op_type = IS_CONST; + ZVAL_STRINGL(&$$.u.constant, + CG(active_class_entry)->super->name, + CG(active_class_entry)->super->name_length, 1); + } else zend_error(E_COMPILE_ERROR, "no super class found for %s", CG(active_class_entry)->name); + } +; + function_call: namespace_name { $$.u.op.opline_num = zend_do_begin_function_call(&$1, 1 TSRMLS_CC); } function_call_parameter_list { zend_do_end_function_call(&$1, &$$, &$3, 0, $2.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } @@ -892,8 +904,12 @@ function_call: function_call_parameter_list { zend_do_end_function_call(&$2, &$$, &$4, 0, $3.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } | class_name T_PAAMAYIM_NEKUDOTAYIM variable_name { $$.u.op.opline_num = zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } function_call_parameter_list { zend_do_end_function_call($4.u.op.opline_num?NULL:&$3, &$$, &$5, $4.u.op.opline_num, $4.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + | super_function_call T_PAAMAYIM_NEKUDOTAYIM variable_name { $$.u.op.opline_num = zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } + function_call_parameter_list { zend_do_end_function_call($4.u.op.opline_num?NULL:&$3, &$$, &$5, $4.u.op.opline_num, $4.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } function_call_parameter_list { zend_do_end_function_call(NULL, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + | super_function_call T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } + function_call_parameter_list { zend_do_end_function_call(NULL, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_name { zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } function_call_parameter_list { zend_do_end_function_call(NULL, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index d5768d334556..3d3c901a3118 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -1096,7 +1096,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy3: YYDEBUG(3, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1738 "Zend/zend_language_scanner.l" +#line 1743 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1174,7 +1174,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy6: YYDEBUG(6, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1728 "Zend/zend_language_scanner.l" +#line 1733 "Zend/zend_language_scanner.l" { if (CG(short_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ @@ -1191,7 +1191,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) if ((yych = *YYCURSOR) == '=') goto yy43; YYDEBUG(8, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1709 "Zend/zend_language_scanner.l" +#line 1714 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ @@ -1387,7 +1387,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(38, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1675 "Zend/zend_language_scanner.l" +#line 1680 "Zend/zend_language_scanner.l" { YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1)); @@ -1429,7 +1429,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(44, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1691 "Zend/zend_language_scanner.l" +#line 1696 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ @@ -1445,7 +1445,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(46, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1702 "Zend/zend_language_scanner.l" +#line 1707 "Zend/zend_language_scanner.l" { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ BEGIN(ST_IN_SCRIPTING); @@ -1478,7 +1478,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy51: YYDEBUG(51, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1720 "Zend/zend_language_scanner.l" +#line 1725 "Zend/zend_language_scanner.l" { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ HANDLE_NEWLINE(yytext[yyleng-1]); @@ -1556,7 +1556,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy56: YYDEBUG(56, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2183 "Zend/zend_language_scanner.l" +#line 2188 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1608,7 +1608,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(59, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2127 "Zend/zend_language_scanner.l" +#line 2132 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '`'; @@ -1623,7 +1623,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(62, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2114 "Zend/zend_language_scanner.l" +#line 2119 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1646,7 +1646,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy65: YYDEBUG(65, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1820 "Zend/zend_language_scanner.l" +#line 1825 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; @@ -1658,7 +1658,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(67, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1454 "Zend/zend_language_scanner.l" +#line 1459 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; @@ -1677,7 +1677,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(71, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1812 "Zend/zend_language_scanner.l" +#line 1817 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1703,7 +1703,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(74, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1802 "Zend/zend_language_scanner.l" +#line 1807 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1779,7 +1779,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy78: YYDEBUG(78, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2133 "Zend/zend_language_scanner.l" +#line 2138 "Zend/zend_language_scanner.l" { if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; @@ -1839,7 +1839,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(81, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2122 "Zend/zend_language_scanner.l" +#line 2127 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '"'; @@ -1854,7 +1854,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(84, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2114 "Zend/zend_language_scanner.l" +#line 2119 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1877,7 +1877,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy87: YYDEBUG(87, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1820 "Zend/zend_language_scanner.l" +#line 1825 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; @@ -1889,7 +1889,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(89, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1454 "Zend/zend_language_scanner.l" +#line 1459 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; @@ -1908,7 +1908,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(93, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1812 "Zend/zend_language_scanner.l" +#line 1817 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1934,7 +1934,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(96, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1802 "Zend/zend_language_scanner.l" +#line 1807 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1953,7 +1953,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(100, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2100 "Zend/zend_language_scanner.l" +#line 2105 "Zend/zend_language_scanner.l" { zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack)); @@ -2028,7 +2028,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy104: YYDEBUG(104, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2225 "Zend/zend_language_scanner.l" +#line 2230 "Zend/zend_language_scanner.l" { int newline = 0; @@ -2116,7 +2116,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(108, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2114 "Zend/zend_language_scanner.l" +#line 2119 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -2139,7 +2139,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy111: YYDEBUG(111, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1820 "Zend/zend_language_scanner.l" +#line 1825 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; @@ -2151,7 +2151,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(113, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1454 "Zend/zend_language_scanner.l" +#line 1459 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; @@ -2170,7 +2170,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(117, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1812 "Zend/zend_language_scanner.l" +#line 1817 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -2196,7 +2196,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(120, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1802 "Zend/zend_language_scanner.l" +#line 1807 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -2371,23 +2371,23 @@ int lex_scan(zval *zendlval TSRMLS_DC) YYDEBUG(-1, yych); switch ((yych = *YYCURSOR)) { case 'C': - case 'c': goto yy735; + case 'c': goto yy740; case 'L': - case 'l': goto yy736; + case 'l': goto yy741; case 'M': - case 'm': goto yy737; + case 'm': goto yy742; case 'N': - case 'n': goto yy738; + case 'n': goto yy743; case 'V': - case 'v': goto yy739; + case 'v': goto yy744; case 'X': - case 'x': goto yy740; + case 'x': goto yy745; default: goto yy187; } yy124: YYDEBUG(124, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1843 "Zend/zend_language_scanner.l" +#line 1848 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; @@ -2399,20 +2399,20 @@ int lex_scan(zval *zendlval TSRMLS_DC) yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'H') { - if (yych == 'E') goto yy717; + if (yych == 'E') goto yy722; goto yy187; } else { - if (yych <= 'I') goto yy718; + if (yych <= 'I') goto yy723; if (yych <= 'N') goto yy187; - goto yy719; + goto yy724; } } else { if (yych <= 'h') { - if (yych == 'e') goto yy717; + if (yych == 'e') goto yy722; goto yy187; } else { - if (yych <= 'i') goto yy718; - if (yych == 'o') goto yy719; + if (yych <= 'i') goto yy723; + if (yych == 'o') goto yy724; goto yy187; } } @@ -2421,20 +2421,20 @@ int lex_scan(zval *zendlval TSRMLS_DC) yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'N') { - if (yych == 'I') goto yy693; + if (yych == 'I') goto yy698; goto yy187; } else { - if (yych <= 'O') goto yy694; + if (yych <= 'O') goto yy699; if (yych <= 'T') goto yy187; - goto yy695; + goto yy700; } } else { if (yych <= 'n') { - if (yych == 'i') goto yy693; + if (yych == 'i') goto yy698; goto yy187; } else { - if (yych <= 'o') goto yy694; - if (yych == 'u') goto yy695; + if (yych <= 'o') goto yy699; + if (yych == 'u') goto yy700; goto yy187; } } @@ -2443,48 +2443,48 @@ int lex_scan(zval *zendlval TSRMLS_DC) yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'K') { - if (yych == 'A') goto yy658; + if (yych == 'A') goto yy663; goto yy187; } else { - if (yych <= 'L') goto yy659; + if (yych <= 'L') goto yy664; if (yych <= 'N') goto yy187; - goto yy660; + goto yy665; } } else { if (yych <= 'k') { - if (yych == 'a') goto yy658; + if (yych == 'a') goto yy663; goto yy187; } else { - if (yych <= 'l') goto yy659; - if (yych == 'o') goto yy660; + if (yych <= 'l') goto yy664; + if (yych == 'o') goto yy665; goto yy187; } } yy128: YYDEBUG(128, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy640; - if (yych == 'e') goto yy640; + if (yych == 'E') goto yy645; + if (yych == 'e') goto yy645; goto yy187; yy129: YYDEBUG(129, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy635; - if (yych == 'i') goto yy635; + if (yych == 'I') goto yy640; + if (yych == 'i') goto yy640; goto yy187; yy130: YYDEBUG(130, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { - if (yych == 'H') goto yy623; + if (yych == 'H') goto yy628; if (yych <= 'Q') goto yy187; - goto yy624; + goto yy629; } else { if (yych <= 'h') { if (yych <= 'g') goto yy187; - goto yy623; + goto yy628; } else { - if (yych == 'r') goto yy624; + if (yych == 'r') goto yy629; goto yy187; } } @@ -2493,53 +2493,53 @@ int lex_scan(zval *zendlval TSRMLS_DC) yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= 'L') { - if (yych == 'F') goto yy570; + if (yych == 'F') goto yy575; goto yy187; } else { - if (yych <= 'M') goto yy572; - if (yych <= 'N') goto yy573; + if (yych <= 'M') goto yy577; + if (yych <= 'N') goto yy578; if (yych <= 'R') goto yy187; - goto yy574; + goto yy579; } } else { if (yych <= 'm') { - if (yych == 'f') goto yy570; + if (yych == 'f') goto yy575; if (yych <= 'l') goto yy187; - goto yy572; + goto yy577; } else { - if (yych <= 'n') goto yy573; - if (yych == 's') goto yy574; + if (yych <= 'n') goto yy578; + if (yych == 's') goto yy579; goto yy187; } } yy132: YYDEBUG(132, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy565; - if (yych == 'h') goto yy565; + if (yych == 'H') goto yy570; + if (yych == 'h') goto yy570; goto yy187; yy133: YYDEBUG(133, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= 'M') { - if (yych == 'B') goto yy547; + if (yych == 'B') goto yy552; goto yy187; } else { - if (yych <= 'N') goto yy548; + if (yych <= 'N') goto yy553; if (yych <= 'Q') goto yy187; - if (yych <= 'R') goto yy549; - goto yy550; + if (yych <= 'R') goto yy554; + goto yy555; } } else { if (yych <= 'n') { - if (yych == 'b') goto yy547; + if (yych == 'b') goto yy552; if (yych <= 'm') goto yy187; - goto yy548; + goto yy553; } else { if (yych <= 'q') goto yy187; - if (yych <= 'r') goto yy549; - if (yych <= 's') goto yy550; + if (yych <= 'r') goto yy554; + if (yych <= 's') goto yy555; goto yy187; } } @@ -2547,15 +2547,21 @@ int lex_scan(zval *zendlval TSRMLS_DC) YYDEBUG(134, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'W') { - if (yych == 'T') goto yy535; - if (yych <= 'V') goto yy187; - goto yy536; + if (yych <= 'T') { + if (yych <= 'S') goto yy187; + goto yy535; + } else { + if (yych <= 'U') goto yy536; + if (yych <= 'V') goto yy187; + goto yy537; + } } else { - if (yych <= 't') { + if (yych <= 'u') { if (yych <= 's') goto yy187; - goto yy535; + if (yych <= 't') goto yy535; + goto yy536; } else { - if (yych == 'w') goto yy536; + if (yych == 'w') goto yy537; goto yy187; } } @@ -2625,11 +2631,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy139: YYDEBUG(139, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1443 "Zend/zend_language_scanner.l" +#line 1448 "Zend/zend_language_scanner.l" { return yytext[0]; } -#line 2633 "Zend/zend_language_scanner.c" +#line 2639 "Zend/zend_language_scanner.c" yy140: YYDEBUG(140, *YYCURSOR); ++YYCURSOR; @@ -2644,7 +2650,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 2648 "Zend/zend_language_scanner.c" +#line 2654 "Zend/zend_language_scanner.c" yy142: YYDEBUG(142, *YYCURSOR); yych = *++YYCURSOR; @@ -2659,7 +2665,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_NS_SEPARATOR; } -#line 2663 "Zend/zend_language_scanner.c" +#line 2669 "Zend/zend_language_scanner.c" yy145: YYDEBUG(145, *YYCURSOR); yych = *++YYCURSOR; @@ -2887,18 +2893,18 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(169, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1448 "Zend/zend_language_scanner.l" +#line 1453 "Zend/zend_language_scanner.l" { yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return '{'; } -#line 2896 "Zend/zend_language_scanner.c" +#line 2902 "Zend/zend_language_scanner.c" yy170: YYDEBUG(170, *YYCURSOR); ++YYCURSOR; YYDEBUG(171, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1460 "Zend/zend_language_scanner.l" +#line 1465 "Zend/zend_language_scanner.l" { RESET_DOC_COMMENT(); if (!zend_stack_is_empty(&SCNG(state_stack))) { @@ -2906,7 +2912,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return '}'; } -#line 2910 "Zend/zend_language_scanner.c" +#line 2916 "Zend/zend_language_scanner.c" yy172: YYDEBUG(172, *YYCURSOR); yyaccept = 2; @@ -2934,7 +2940,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy173: YYDEBUG(173, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1510 "Zend/zend_language_scanner.l" +#line 1515 "Zend/zend_language_scanner.l" { if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */ Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0); @@ -2955,7 +2961,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) zendlval->type = IS_LONG; return T_LNUMBER; } -#line 2959 "Zend/zend_language_scanner.c" +#line 2965 "Zend/zend_language_scanner.c" yy174: YYDEBUG(174, *YYCURSOR); yyaccept = 2; @@ -2983,7 +2989,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy177: YYDEBUG(177, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1850 "Zend/zend_language_scanner.l" +#line 1855 "Zend/zend_language_scanner.l" { while (YYCURSOR < YYLIMIT) { switch (*YYCURSOR++) { @@ -3017,14 +3023,14 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_COMMENT; } -#line 3021 "Zend/zend_language_scanner.c" +#line 3027 "Zend/zend_language_scanner.c" yy178: YYDEBUG(178, *YYCURSOR); ++YYCURSOR; yy179: YYDEBUG(179, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1937 "Zend/zend_language_scanner.l" +#line 1942 "Zend/zend_language_scanner.l" { register char *s, *t; char *end; @@ -3090,14 +3096,14 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_CONSTANT_ENCAPSED_STRING; } -#line 3094 "Zend/zend_language_scanner.c" +#line 3100 "Zend/zend_language_scanner.c" yy180: YYDEBUG(180, *YYCURSOR); ++YYCURSOR; yy181: YYDEBUG(181, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2004 "Zend/zend_language_scanner.l" +#line 2009 "Zend/zend_language_scanner.l" { int bprefix = (yytext[0] != '"') ? 1 : 0; @@ -3138,24 +3144,24 @@ int lex_scan(zval *zendlval TSRMLS_DC) BEGIN(ST_DOUBLE_QUOTES); return '"'; } -#line 3142 "Zend/zend_language_scanner.c" +#line 3148 "Zend/zend_language_scanner.c" yy182: YYDEBUG(182, *YYCURSOR); ++YYCURSOR; YYDEBUG(183, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2094 "Zend/zend_language_scanner.l" +#line 2099 "Zend/zend_language_scanner.l" { BEGIN(ST_BACKQUOTE); return '`'; } -#line 3153 "Zend/zend_language_scanner.c" +#line 3159 "Zend/zend_language_scanner.c" yy184: YYDEBUG(184, *YYCURSOR); ++YYCURSOR; YYDEBUG(185, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2357 "Zend/zend_language_scanner.l" +#line 2362 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -3164,7 +3170,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 3168 "Zend/zend_language_scanner.c" +#line 3174 "Zend/zend_language_scanner.c" yy186: YYDEBUG(186, *YYCURSOR); ++YYCURSOR; @@ -3191,12 +3197,12 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy190: YYDEBUG(190, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1569 "Zend/zend_language_scanner.l" +#line 1574 "Zend/zend_language_scanner.l" { ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL)); return T_DNUMBER; } -#line 3200 "Zend/zend_language_scanner.c" +#line 3206 "Zend/zend_language_scanner.c" yy191: YYDEBUG(191, *YYCURSOR); yyaccept = 2; @@ -3288,7 +3294,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(202, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1486 "Zend/zend_language_scanner.l" +#line 1491 "Zend/zend_language_scanner.l" { char *bin = yytext + 2; /* Skip "0b" */ int len = yyleng - 2; @@ -3312,7 +3318,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_DNUMBER; } } -#line 3316 "Zend/zend_language_scanner.c" +#line 3322 "Zend/zend_language_scanner.c" yy203: YYDEBUG(203, *YYCURSOR); ++YYCURSOR; @@ -3324,7 +3330,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(205, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1531 "Zend/zend_language_scanner.l" +#line 1536 "Zend/zend_language_scanner.l" { char *hex = yytext + 2; /* Skip "0x" */ int len = yyleng - 2; @@ -3348,7 +3354,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_DNUMBER; } } -#line 3352 "Zend/zend_language_scanner.c" +#line 3358 "Zend/zend_language_scanner.c" yy206: YYDEBUG(206, *YYCURSOR); ++YYCURSOR; @@ -3357,13 +3363,13 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy207: YYDEBUG(207, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1918 "Zend/zend_language_scanner.l" +#line 1923 "Zend/zend_language_scanner.l" { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ BEGIN(INITIAL); return T_CLOSE_TAG; /* implicit ';' at php-end tag */ } -#line 3367 "Zend/zend_language_scanner.c" +#line 3373 "Zend/zend_language_scanner.c" yy208: YYDEBUG(208, *YYCURSOR); yych = *++YYCURSOR; @@ -3397,13 +3403,13 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy212: YYDEBUG(212, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1820 "Zend/zend_language_scanner.l" +#line 1825 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 3407 "Zend/zend_language_scanner.c" +#line 3413 "Zend/zend_language_scanner.c" yy213: YYDEBUG(213, *YYCURSOR); yych = *++YYCURSOR; @@ -3417,11 +3423,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(215, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1431 "Zend/zend_language_scanner.l" +#line 1436 "Zend/zend_language_scanner.l" { return T_LOGICAL_XOR; } -#line 3425 "Zend/zend_language_scanner.c" +#line 3431 "Zend/zend_language_scanner.c" yy216: YYDEBUG(216, *YYCURSOR); ++YYCURSOR; @@ -3430,61 +3436,61 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(217, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1423 "Zend/zend_language_scanner.l" +#line 1428 "Zend/zend_language_scanner.l" { return T_LOGICAL_OR; } -#line 3438 "Zend/zend_language_scanner.c" +#line 3444 "Zend/zend_language_scanner.c" yy218: YYDEBUG(218, *YYCURSOR); ++YYCURSOR; YYDEBUG(219, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1411 "Zend/zend_language_scanner.l" +#line 1416 "Zend/zend_language_scanner.l" { return T_XOR_EQUAL; } -#line 3448 "Zend/zend_language_scanner.c" +#line 3454 "Zend/zend_language_scanner.c" yy220: YYDEBUG(220, *YYCURSOR); ++YYCURSOR; YYDEBUG(221, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1415 "Zend/zend_language_scanner.l" +#line 1420 "Zend/zend_language_scanner.l" { return T_BOOLEAN_OR; } -#line 3458 "Zend/zend_language_scanner.c" +#line 3464 "Zend/zend_language_scanner.c" yy222: YYDEBUG(222, *YYCURSOR); ++YYCURSOR; YYDEBUG(223, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1407 "Zend/zend_language_scanner.l" +#line 1412 "Zend/zend_language_scanner.l" { return T_OR_EQUAL; } -#line 3468 "Zend/zend_language_scanner.c" +#line 3474 "Zend/zend_language_scanner.c" yy224: YYDEBUG(224, *YYCURSOR); ++YYCURSOR; YYDEBUG(225, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1419 "Zend/zend_language_scanner.l" +#line 1424 "Zend/zend_language_scanner.l" { return T_BOOLEAN_AND; } -#line 3478 "Zend/zend_language_scanner.c" +#line 3484 "Zend/zend_language_scanner.c" yy226: YYDEBUG(226, *YYCURSOR); ++YYCURSOR; YYDEBUG(227, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1403 "Zend/zend_language_scanner.l" +#line 1408 "Zend/zend_language_scanner.l" { return T_AND_EQUAL; } -#line 3488 "Zend/zend_language_scanner.c" +#line 3494 "Zend/zend_language_scanner.c" yy228: YYDEBUG(228, *YYCURSOR); ++YYCURSOR; @@ -3493,7 +3499,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy229: YYDEBUG(229, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1925 "Zend/zend_language_scanner.l" +#line 1930 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { BEGIN(INITIAL); @@ -3504,17 +3510,17 @@ int lex_scan(zval *zendlval TSRMLS_DC) return yytext[0]; } } -#line 3508 "Zend/zend_language_scanner.c" +#line 3514 "Zend/zend_language_scanner.c" yy230: YYDEBUG(230, *YYCURSOR); ++YYCURSOR; YYDEBUG(231, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1391 "Zend/zend_language_scanner.l" +#line 1396 "Zend/zend_language_scanner.l" { return T_MOD_EQUAL; } -#line 3518 "Zend/zend_language_scanner.c" +#line 3524 "Zend/zend_language_scanner.c" yy232: YYDEBUG(232, *YYCURSOR); yych = *++YYCURSOR; @@ -3545,11 +3551,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(237, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1387 "Zend/zend_language_scanner.l" +#line 1392 "Zend/zend_language_scanner.l" { return T_CONCAT_EQUAL; } -#line 3553 "Zend/zend_language_scanner.c" +#line 3559 "Zend/zend_language_scanner.c" yy238: YYDEBUG(238, *YYCURSOR); yyaccept = 4; @@ -3558,7 +3564,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy239: YYDEBUG(239, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1884 "Zend/zend_language_scanner.l" +#line 1889 "Zend/zend_language_scanner.l" { int doc_com; @@ -3592,7 +3598,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_COMMENT; } -#line 3596 "Zend/zend_language_scanner.c" +#line 3602 "Zend/zend_language_scanner.c" yy240: YYDEBUG(240, *YYCURSOR); yych = *++YYCURSOR; @@ -3602,11 +3608,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(242, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1383 "Zend/zend_language_scanner.l" +#line 1388 "Zend/zend_language_scanner.l" { return T_DIV_EQUAL; } -#line 3610 "Zend/zend_language_scanner.c" +#line 3616 "Zend/zend_language_scanner.c" yy243: YYDEBUG(243, *YYCURSOR); yych = *++YYCURSOR; @@ -3629,42 +3635,42 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(247, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1379 "Zend/zend_language_scanner.l" +#line 1384 "Zend/zend_language_scanner.l" { return T_MUL_EQUAL; } -#line 3637 "Zend/zend_language_scanner.c" +#line 3643 "Zend/zend_language_scanner.c" yy248: YYDEBUG(248, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy252; YYDEBUG(249, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1439 "Zend/zend_language_scanner.l" +#line 1444 "Zend/zend_language_scanner.l" { return T_SR; } -#line 3648 "Zend/zend_language_scanner.c" +#line 3654 "Zend/zend_language_scanner.c" yy250: YYDEBUG(250, *YYCURSOR); ++YYCURSOR; YYDEBUG(251, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1367 "Zend/zend_language_scanner.l" +#line 1372 "Zend/zend_language_scanner.l" { return T_IS_GREATER_OR_EQUAL; } -#line 3658 "Zend/zend_language_scanner.c" +#line 3664 "Zend/zend_language_scanner.c" yy252: YYDEBUG(252, *YYCURSOR); ++YYCURSOR; YYDEBUG(253, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1399 "Zend/zend_language_scanner.l" +#line 1404 "Zend/zend_language_scanner.l" { return T_SR_EQUAL; } -#line 3668 "Zend/zend_language_scanner.c" +#line 3674 "Zend/zend_language_scanner.c" yy254: YYDEBUG(254, *YYCURSOR); yyaccept = 5; @@ -3675,11 +3681,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy255: YYDEBUG(255, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1435 "Zend/zend_language_scanner.l" +#line 1440 "Zend/zend_language_scanner.l" { return T_SL; } -#line 3683 "Zend/zend_language_scanner.c" +#line 3689 "Zend/zend_language_scanner.c" yy256: YYDEBUG(256, *YYCURSOR); yych = *++YYCURSOR; @@ -3691,22 +3697,22 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(258, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1363 "Zend/zend_language_scanner.l" +#line 1368 "Zend/zend_language_scanner.l" { return T_IS_SMALLER_OR_EQUAL; } -#line 3699 "Zend/zend_language_scanner.c" +#line 3705 "Zend/zend_language_scanner.c" yy259: YYDEBUG(259, *YYCURSOR); ++YYCURSOR; yy260: YYDEBUG(260, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1359 "Zend/zend_language_scanner.l" +#line 1364 "Zend/zend_language_scanner.l" { return T_IS_NOT_EQUAL; } -#line 3710 "Zend/zend_language_scanner.c" +#line 3716 "Zend/zend_language_scanner.c" yy261: YYDEBUG(261, *YYCURSOR); yych = *++YYCURSOR; @@ -3757,11 +3763,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(269, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1395 "Zend/zend_language_scanner.l" +#line 1400 "Zend/zend_language_scanner.l" { return T_SL_EQUAL; } -#line 3765 "Zend/zend_language_scanner.c" +#line 3771 "Zend/zend_language_scanner.c" yy270: YYDEBUG(270, *YYCURSOR); ++YYCURSOR; @@ -3866,7 +3872,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy280: YYDEBUG(280, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2046 "Zend/zend_language_scanner.l" +#line 2051 "Zend/zend_language_scanner.l" { char *s; int bprefix = (yytext[0] != '<') ? 1 : 0; @@ -3913,7 +3919,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_START_HEREDOC; } -#line 3917 "Zend/zend_language_scanner.c" +#line 3923 "Zend/zend_language_scanner.c" yy281: YYDEBUG(281, *YYCURSOR); yych = *++YYCURSOR; @@ -3953,31 +3959,31 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(286, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1351 "Zend/zend_language_scanner.l" +#line 1356 "Zend/zend_language_scanner.l" { return T_IS_NOT_IDENTICAL; } -#line 3961 "Zend/zend_language_scanner.c" +#line 3967 "Zend/zend_language_scanner.c" yy287: YYDEBUG(287, *YYCURSOR); ++YYCURSOR; YYDEBUG(288, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1371 "Zend/zend_language_scanner.l" +#line 1376 "Zend/zend_language_scanner.l" { return T_PLUS_EQUAL; } -#line 3971 "Zend/zend_language_scanner.c" +#line 3977 "Zend/zend_language_scanner.c" yy289: YYDEBUG(289, *YYCURSOR); ++YYCURSOR; YYDEBUG(290, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1339 "Zend/zend_language_scanner.l" +#line 1344 "Zend/zend_language_scanner.l" { return T_INC; } -#line 3981 "Zend/zend_language_scanner.c" +#line 3987 "Zend/zend_language_scanner.c" yy291: YYDEBUG(291, *YYCURSOR); yych = *++YYCURSOR; @@ -3996,42 +4002,42 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(294, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1327 "Zend/zend_language_scanner.l" +#line 1332 "Zend/zend_language_scanner.l" { return T_LIST; } -#line 4004 "Zend/zend_language_scanner.c" +#line 4010 "Zend/zend_language_scanner.c" yy295: YYDEBUG(295, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy299; YYDEBUG(296, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1355 "Zend/zend_language_scanner.l" +#line 1360 "Zend/zend_language_scanner.l" { return T_IS_EQUAL; } -#line 4015 "Zend/zend_language_scanner.c" +#line 4021 "Zend/zend_language_scanner.c" yy297: YYDEBUG(297, *YYCURSOR); ++YYCURSOR; YYDEBUG(298, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1323 "Zend/zend_language_scanner.l" +#line 1328 "Zend/zend_language_scanner.l" { return T_DOUBLE_ARROW; } -#line 4025 "Zend/zend_language_scanner.c" +#line 4031 "Zend/zend_language_scanner.c" yy299: YYDEBUG(299, *YYCURSOR); ++YYCURSOR; YYDEBUG(300, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1347 "Zend/zend_language_scanner.l" +#line 1352 "Zend/zend_language_scanner.l" { return T_IS_IDENTICAL; } -#line 4035 "Zend/zend_language_scanner.c" +#line 4041 "Zend/zend_language_scanner.c" yy301: YYDEBUG(301, *YYCURSOR); yych = *++YYCURSOR; @@ -4161,7 +4167,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(320, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1665 "Zend/zend_language_scanner.l" +#line 1670 "Zend/zend_language_scanner.l" { if (CG(current_namespace)) { *zendlval = *CG(current_namespace); @@ -4171,7 +4177,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_NS_C; } -#line 4175 "Zend/zend_language_scanner.c" +#line 4181 "Zend/zend_language_scanner.c" yy321: YYDEBUG(321, *YYCURSOR); yych = *++YYCURSOR; @@ -4191,7 +4197,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(325, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1640 "Zend/zend_language_scanner.l" +#line 1645 "Zend/zend_language_scanner.l" { char *filename = zend_get_compiled_filename(TSRMLS_C); const size_t filename_len = strlen(filename); @@ -4216,7 +4222,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ZVAL_STRING(zendlval, dirname, 0); return T_DIR; } -#line 4220 "Zend/zend_language_scanner.c" +#line 4226 "Zend/zend_language_scanner.c" yy326: YYDEBUG(326, *YYCURSOR); yych = *++YYCURSOR; @@ -4241,12 +4247,12 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(331, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1625 "Zend/zend_language_scanner.l" +#line 1630 "Zend/zend_language_scanner.l" { ZVAL_LONG(zendlval, CG(zend_lineno)); return T_LINE; } -#line 4250 "Zend/zend_language_scanner.c" +#line 4256 "Zend/zend_language_scanner.c" yy332: YYDEBUG(332, *YYCURSOR); yych = *++YYCURSOR; @@ -4281,7 +4287,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(339, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1612 "Zend/zend_language_scanner.l" +#line 1617 "Zend/zend_language_scanner.l" { const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL; const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL; @@ -4294,7 +4300,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) zendlval->type = IS_STRING; return T_METHOD_C; } -#line 4298 "Zend/zend_language_scanner.c" +#line 4304 "Zend/zend_language_scanner.c" yy340: YYDEBUG(340, *YYCURSOR); yych = *++YYCURSOR; @@ -4345,7 +4351,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(350, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1602 "Zend/zend_language_scanner.l" +#line 1607 "Zend/zend_language_scanner.l" { zend_op_array *op_array = CG(active_op_array); if (op_array && op_array->function_name) { @@ -4355,7 +4361,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_FUNC_C; } -#line 4359 "Zend/zend_language_scanner.c" +#line 4365 "Zend/zend_language_scanner.c" yy351: YYDEBUG(351, *YYCURSOR); yych = *++YYCURSOR; @@ -4375,7 +4381,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(355, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1630 "Zend/zend_language_scanner.l" +#line 1635 "Zend/zend_language_scanner.l" { char *filename = zend_get_compiled_filename(TSRMLS_C); @@ -4385,7 +4391,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ZVAL_STRING(zendlval, filename, 1); return T_FILE; } -#line 4389 "Zend/zend_language_scanner.c" +#line 4395 "Zend/zend_language_scanner.c" yy356: YYDEBUG(356, *YYCURSOR); yych = *++YYCURSOR; @@ -4415,7 +4421,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(362, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1592 "Zend/zend_language_scanner.l" +#line 1597 "Zend/zend_language_scanner.l" { zend_class_entry *ce = CG(active_class_entry); if (ce && ce->name && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) { @@ -4425,7 +4431,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_TRAIT_C; } -#line 4429 "Zend/zend_language_scanner.c" +#line 4435 "Zend/zend_language_scanner.c" yy363: YYDEBUG(363, *YYCURSOR); yych = *++YYCURSOR; @@ -4455,7 +4461,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(369, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1574 "Zend/zend_language_scanner.l" +#line 1579 "Zend/zend_language_scanner.l" { zend_class_entry *ce = CG(active_class_entry); if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) { @@ -4473,7 +4479,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_CLASS_C; } -#line 4477 "Zend/zend_language_scanner.c" +#line 4483 "Zend/zend_language_scanner.c" yy370: YYDEBUG(370, *YYCURSOR); yych = *++YYCURSOR; @@ -4535,11 +4541,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(382, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1291 "Zend/zend_language_scanner.l" +#line 1296 "Zend/zend_language_scanner.l" { return T_HALT_COMPILER; } -#line 4543 "Zend/zend_language_scanner.c" +#line 4549 "Zend/zend_language_scanner.c" yy383: YYDEBUG(383, *YYCURSOR); yych = *++YYCURSOR; @@ -4563,7 +4569,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_USE; } -#line 4567 "Zend/zend_language_scanner.c" +#line 4573 "Zend/zend_language_scanner.c" yy387: YYDEBUG(387, *YYCURSOR); yych = *++YYCURSOR; @@ -4582,11 +4588,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(390, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1319 "Zend/zend_language_scanner.l" +#line 1324 "Zend/zend_language_scanner.l" { return T_UNSET; } -#line 4590 "Zend/zend_language_scanner.c" +#line 4596 "Zend/zend_language_scanner.c" yy391: YYDEBUG(391, *YYCURSOR); ++YYCURSOR; @@ -4762,7 +4768,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_INT_CAST; } -#line 4766 "Zend/zend_language_scanner.c" +#line 4772 "Zend/zend_language_scanner.c" yy409: YYDEBUG(409, *YYCURSOR); yych = *++YYCURSOR; @@ -4810,7 +4816,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_DOUBLE_CAST; } -#line 4814 "Zend/zend_language_scanner.c" +#line 4820 "Zend/zend_language_scanner.c" yy418: YYDEBUG(418, *YYCURSOR); yych = *++YYCURSOR; @@ -4884,7 +4890,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_STRING_CAST; } -#line 4888 "Zend/zend_language_scanner.c" +#line 4894 "Zend/zend_language_scanner.c" yy432: YYDEBUG(432, *YYCURSOR); yych = *++YYCURSOR; @@ -4921,7 +4927,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_ARRAY_CAST; } -#line 4925 "Zend/zend_language_scanner.c" +#line 4931 "Zend/zend_language_scanner.c" yy439: YYDEBUG(439, *YYCURSOR); yych = *++YYCURSOR; @@ -4963,7 +4969,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_OBJECT_CAST; } -#line 4967 "Zend/zend_language_scanner.c" +#line 4973 "Zend/zend_language_scanner.c" yy447: YYDEBUG(447, *YYCURSOR); yych = *++YYCURSOR; @@ -5008,7 +5014,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_BOOL_CAST; } -#line 5012 "Zend/zend_language_scanner.c" +#line 5018 "Zend/zend_language_scanner.c" yy455: YYDEBUG(455, *YYCURSOR); yych = *++YYCURSOR; @@ -5072,7 +5078,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_UNSET_CAST; } -#line 5076 "Zend/zend_language_scanner.c" +#line 5082 "Zend/zend_language_scanner.c" yy467: YYDEBUG(467, *YYCURSOR); yych = *++YYCURSOR; @@ -5090,7 +5096,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_VAR; } -#line 5094 "Zend/zend_language_scanner.c" +#line 5100 "Zend/zend_language_scanner.c" yy470: YYDEBUG(470, *YYCURSOR); yych = *++YYCURSOR; @@ -5114,7 +5120,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_NEW; } -#line 5118 "Zend/zend_language_scanner.c" +#line 5124 "Zend/zend_language_scanner.c" yy474: YYDEBUG(474, *YYCURSOR); yych = *++YYCURSOR; @@ -5157,7 +5163,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_NAMESPACE; } -#line 5161 "Zend/zend_language_scanner.c" +#line 5167 "Zend/zend_language_scanner.c" yy482: YYDEBUG(482, *YYCURSOR); ++YYCURSOR; @@ -5167,7 +5173,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_PAAMAYIM_NEKUDOTAYIM; } -#line 5171 "Zend/zend_language_scanner.c" +#line 5177 "Zend/zend_language_scanner.c" yy484: YYDEBUG(484, *YYCURSOR); ++YYCURSOR; @@ -5189,21 +5195,21 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(487, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1375 "Zend/zend_language_scanner.l" +#line 1380 "Zend/zend_language_scanner.l" { return T_MINUS_EQUAL; } -#line 5197 "Zend/zend_language_scanner.c" +#line 5203 "Zend/zend_language_scanner.c" yy488: YYDEBUG(488, *YYCURSOR); ++YYCURSOR; YYDEBUG(489, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1343 "Zend/zend_language_scanner.l" +#line 1348 "Zend/zend_language_scanner.l" { return T_DEC; } -#line 5207 "Zend/zend_language_scanner.c" +#line 5213 "Zend/zend_language_scanner.c" yy490: YYDEBUG(490, *YYCURSOR); ++YYCURSOR; @@ -5214,7 +5220,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); return T_OBJECT_OPERATOR; } -#line 5218 "Zend/zend_language_scanner.c" +#line 5224 "Zend/zend_language_scanner.c" yy492: YYDEBUG(492, *YYCURSOR); yych = *++YYCURSOR; @@ -5259,11 +5265,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(498, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1315 "Zend/zend_language_scanner.l" +#line 1320 "Zend/zend_language_scanner.l" { return T_PUBLIC; } -#line 5267 "Zend/zend_language_scanner.c" +#line 5273 "Zend/zend_language_scanner.c" yy499: YYDEBUG(499, *YYCURSOR); yych = *++YYCURSOR; @@ -5318,11 +5324,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(507, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1311 "Zend/zend_language_scanner.l" +#line 1316 "Zend/zend_language_scanner.l" { return T_PROTECTED; } -#line 5326 "Zend/zend_language_scanner.c" +#line 5332 "Zend/zend_language_scanner.c" yy508: YYDEBUG(508, *YYCURSOR); yych = *++YYCURSOR; @@ -5352,11 +5358,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(513, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1307 "Zend/zend_language_scanner.l" +#line 1312 "Zend/zend_language_scanner.l" { return T_PRIVATE; } -#line 5360 "Zend/zend_language_scanner.c" +#line 5366 "Zend/zend_language_scanner.c" yy514: YYDEBUG(514, *YYCURSOR); ++YYCURSOR; @@ -5369,7 +5375,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_PRINT; } -#line 5373 "Zend/zend_language_scanner.c" +#line 5379 "Zend/zend_language_scanner.c" yy516: YYDEBUG(516, *YYCURSOR); yych = *++YYCURSOR; @@ -5398,7 +5404,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_GOTO; } -#line 5402 "Zend/zend_language_scanner.c" +#line 5408 "Zend/zend_language_scanner.c" yy521: YYDEBUG(521, *YYCURSOR); yych = *++YYCURSOR; @@ -5426,7 +5432,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_GLOBAL; } -#line 5430 "Zend/zend_language_scanner.c" +#line 5436 "Zend/zend_language_scanner.c" yy526: YYDEBUG(526, *YYCURSOR); yych = *++YYCURSOR; @@ -5467,7 +5473,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_BREAK; } -#line 5471 "Zend/zend_language_scanner.c" +#line 5477 "Zend/zend_language_scanner.c" yy534: YYDEBUG(534, *YYCURSOR); yych = *++YYCURSOR; @@ -5476,57 +5482,58 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy535: YYDEBUG(535, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy542; - if (yych == 'a') goto yy542; + if (yych == 'A') goto yy547; + if (yych == 'a') goto yy547; goto yy187; yy536: YYDEBUG(536, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy537; - if (yych != 'i') goto yy187; + if (yych == 'P') goto yy543; + if (yych == 'p') goto yy543; + goto yy187; yy537: YYDEBUG(537, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy538; - if (yych != 't') goto yy187; + if (yych == 'I') goto yy538; + if (yych != 'i') goto yy187; yy538: YYDEBUG(538, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy539; - if (yych != 'c') goto yy187; + if (yych == 'T') goto yy539; + if (yych != 't') goto yy187; yy539: YYDEBUG(539, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy540; - if (yych != 'h') goto yy187; + if (yych == 'C') goto yy540; + if (yych != 'c') goto yy187; yy540: YYDEBUG(540, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy541; + if (yych != 'h') goto yy187; +yy541: + YYDEBUG(541, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(541, *YYCURSOR); + YYDEBUG(542, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1115 "Zend/zend_language_scanner.l" { return T_SWITCH; } -#line 5515 "Zend/zend_language_scanner.c" -yy542: - YYDEBUG(542, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy543; - if (yych != 't') goto yy187; +#line 5527 "Zend/zend_language_scanner.c" yy543: YYDEBUG(543, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy544; - if (yych != 'i') goto yy187; + if (yych == 'E') goto yy544; + if (yych != 'e') goto yy187; yy544: YYDEBUG(544, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy545; - if (yych != 'c') goto yy187; + if (yych == 'R') goto yy545; + if (yych != 'r') goto yy187; yy545: YYDEBUG(545, *YYCURSOR); ++YYCURSOR; @@ -5535,29 +5542,26 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(546, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1295 "Zend/zend_language_scanner.l" +#line 1283 "Zend/zend_language_scanner.l" { - return T_STATIC; + return T_SUPER; } -#line 5543 "Zend/zend_language_scanner.c" +#line 5550 "Zend/zend_language_scanner.c" yy547: YYDEBUG(547, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy558; - if (yych == 's') goto yy558; - goto yy187; + if (yych == 'T') goto yy548; + if (yych != 't') goto yy187; yy548: YYDEBUG(548, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy556; - if (yych == 'd') goto yy556; - goto yy187; + if (yych == 'I') goto yy549; + if (yych != 'i') goto yy187; yy549: YYDEBUG(549, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy552; - if (yych == 'r') goto yy552; - goto yy187; + if (yych == 'C') goto yy550; + if (yych != 'c') goto yy187; yy550: YYDEBUG(550, *YYCURSOR); ++YYCURSOR; @@ -5566,1616 +5570,1647 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(551, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1111 "Zend/zend_language_scanner.l" +#line 1300 "Zend/zend_language_scanner.l" { - return T_AS; + return T_STATIC; } -#line 5574 "Zend/zend_language_scanner.c" +#line 5578 "Zend/zend_language_scanner.c" yy552: YYDEBUG(552, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy553; - if (yych != 'a') goto yy187; + if (yych == 'S') goto yy563; + if (yych == 's') goto yy563; + goto yy187; yy553: YYDEBUG(553, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy554; - if (yych != 'y') goto yy187; + if (yych == 'D') goto yy561; + if (yych == 'd') goto yy561; + goto yy187; yy554: YYDEBUG(554, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy557; + if (yych == 'r') goto yy557; + goto yy187; +yy555: + YYDEBUG(555, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(555, *YYCURSOR); + YYDEBUG(556, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1111 "Zend/zend_language_scanner.l" + { + return T_AS; +} +#line 5609 "Zend/zend_language_scanner.c" +yy557: + YYDEBUG(557, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy558; + if (yych != 'a') goto yy187; +yy558: + YYDEBUG(558, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'Y') goto yy559; + if (yych != 'y') goto yy187; +yy559: + YYDEBUG(559, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy186; + } + YYDEBUG(560, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1331 "Zend/zend_language_scanner.l" +#line 1336 "Zend/zend_language_scanner.l" { return T_ARRAY; } -#line 5597 "Zend/zend_language_scanner.c" -yy556: - YYDEBUG(556, *YYCURSOR); +#line 5632 "Zend/zend_language_scanner.c" +yy561: + YYDEBUG(561, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(557, *YYCURSOR); + YYDEBUG(562, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1427 "Zend/zend_language_scanner.l" +#line 1432 "Zend/zend_language_scanner.l" { return T_LOGICAL_AND; } -#line 5610 "Zend/zend_language_scanner.c" -yy558: - YYDEBUG(558, *YYCURSOR); +#line 5645 "Zend/zend_language_scanner.c" +yy563: + YYDEBUG(563, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy559; + if (yych == 'T') goto yy564; if (yych != 't') goto yy187; -yy559: - YYDEBUG(559, *YYCURSOR); +yy564: + YYDEBUG(564, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy560; + if (yych == 'R') goto yy565; if (yych != 'r') goto yy187; -yy560: - YYDEBUG(560, *YYCURSOR); +yy565: + YYDEBUG(565, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy561; + if (yych == 'A') goto yy566; if (yych != 'a') goto yy187; -yy561: - YYDEBUG(561, *YYCURSOR); +yy566: + YYDEBUG(566, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy562; + if (yych == 'C') goto yy567; if (yych != 'c') goto yy187; -yy562: - YYDEBUG(562, *YYCURSOR); +yy567: + YYDEBUG(567, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy563; + if (yych == 'T') goto yy568; if (yych != 't') goto yy187; -yy563: - YYDEBUG(563, *YYCURSOR); +yy568: + YYDEBUG(568, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(564, *YYCURSOR); + YYDEBUG(569, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1299 "Zend/zend_language_scanner.l" +#line 1304 "Zend/zend_language_scanner.l" { return T_ABSTRACT; } -#line 5648 "Zend/zend_language_scanner.c" -yy565: - YYDEBUG(565, *YYCURSOR); +#line 5683 "Zend/zend_language_scanner.c" +yy570: + YYDEBUG(570, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy566; + if (yych == 'I') goto yy571; if (yych != 'i') goto yy187; -yy566: - YYDEBUG(566, *YYCURSOR); +yy571: + YYDEBUG(571, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy567; + if (yych == 'L') goto yy572; if (yych != 'l') goto yy187; -yy567: - YYDEBUG(567, *YYCURSOR); +yy572: + YYDEBUG(572, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy568; + if (yych == 'E') goto yy573; if (yych != 'e') goto yy187; -yy568: - YYDEBUG(568, *YYCURSOR); +yy573: + YYDEBUG(573, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(569, *YYCURSOR); + YYDEBUG(574, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1071 "Zend/zend_language_scanner.l" { return T_WHILE; } -#line 5676 "Zend/zend_language_scanner.c" -yy570: - YYDEBUG(570, *YYCURSOR); +#line 5711 "Zend/zend_language_scanner.c" +yy575: + YYDEBUG(575, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(571, *YYCURSOR); + YYDEBUG(576, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1055 "Zend/zend_language_scanner.l" { return T_IF; } -#line 5689 "Zend/zend_language_scanner.c" -yy572: - YYDEBUG(572, *YYCURSOR); +#line 5724 "Zend/zend_language_scanner.c" +yy577: + YYDEBUG(577, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy614; - if (yych == 'p') goto yy614; + if (yych == 'P') goto yy619; + if (yych == 'p') goto yy619; goto yy187; -yy573: - YYDEBUG(573, *YYCURSOR); +yy578: + YYDEBUG(578, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'C') { if (yych <= 'B') goto yy187; - goto yy581; + goto yy586; } else { if (yych <= 'R') goto yy187; - if (yych <= 'S') goto yy579; - goto yy580; + if (yych <= 'S') goto yy584; + goto yy585; } } else { if (yych <= 'r') { - if (yych == 'c') goto yy581; + if (yych == 'c') goto yy586; goto yy187; } else { - if (yych <= 's') goto yy579; - if (yych <= 't') goto yy580; + if (yych <= 's') goto yy584; + if (yych <= 't') goto yy585; goto yy187; } } -yy574: - YYDEBUG(574, *YYCURSOR); +yy579: + YYDEBUG(579, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy575; + if (yych == 'S') goto yy580; if (yych != 's') goto yy187; -yy575: - YYDEBUG(575, *YYCURSOR); +yy580: + YYDEBUG(580, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy576; + if (yych == 'E') goto yy581; if (yych != 'e') goto yy187; -yy576: - YYDEBUG(576, *YYCURSOR); +yy581: + YYDEBUG(581, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy577; + if (yych == 'T') goto yy582; if (yych != 't') goto yy187; -yy577: - YYDEBUG(577, *YYCURSOR); +yy582: + YYDEBUG(582, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(578, *YYCURSOR); + YYDEBUG(583, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1283 "Zend/zend_language_scanner.l" +#line 1288 "Zend/zend_language_scanner.l" { return T_ISSET; } -#line 5745 "Zend/zend_language_scanner.c" -yy579: - YYDEBUG(579, *YYCURSOR); +#line 5780 "Zend/zend_language_scanner.c" +yy584: + YYDEBUG(584, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy600; - if (yych == 't') goto yy600; + if (yych == 'T') goto yy605; + if (yych == 't') goto yy605; goto yy187; -yy580: - YYDEBUG(580, *YYCURSOR); +yy585: + YYDEBUG(585, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy593; - if (yych == 'e') goto yy593; + if (yych == 'E') goto yy598; + if (yych == 'e') goto yy598; goto yy187; -yy581: - YYDEBUG(581, *YYCURSOR); +yy586: + YYDEBUG(586, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy582; + if (yych == 'L') goto yy587; if (yych != 'l') goto yy187; -yy582: - YYDEBUG(582, *YYCURSOR); +yy587: + YYDEBUG(587, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy583; + if (yych == 'U') goto yy588; if (yych != 'u') goto yy187; -yy583: - YYDEBUG(583, *YYCURSOR); +yy588: + YYDEBUG(588, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy584; + if (yych == 'D') goto yy589; if (yych != 'd') goto yy187; -yy584: - YYDEBUG(584, *YYCURSOR); +yy589: + YYDEBUG(589, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy585; + if (yych == 'E') goto yy590; if (yych != 'e') goto yy187; -yy585: - YYDEBUG(585, *YYCURSOR); +yy590: + YYDEBUG(590, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '9') { if (yych >= '0') goto yy186; } else { - if (yych <= '@') goto yy586; + if (yych <= '@') goto yy591; if (yych <= 'Z') goto yy186; } } else { if (yych <= '`') { - if (yych <= '_') goto yy587; + if (yych <= '_') goto yy592; } else { if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy586: - YYDEBUG(586, *YYCURSOR); +yy591: + YYDEBUG(591, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1251 "Zend/zend_language_scanner.l" { return T_INCLUDE; } -#line 5803 "Zend/zend_language_scanner.c" -yy587: - YYDEBUG(587, *YYCURSOR); +#line 5838 "Zend/zend_language_scanner.c" +yy592: + YYDEBUG(592, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy588; + if (yych == 'O') goto yy593; if (yych != 'o') goto yy187; -yy588: - YYDEBUG(588, *YYCURSOR); +yy593: + YYDEBUG(593, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy589; + if (yych == 'N') goto yy594; if (yych != 'n') goto yy187; -yy589: - YYDEBUG(589, *YYCURSOR); +yy594: + YYDEBUG(594, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy590; + if (yych == 'C') goto yy595; if (yych != 'c') goto yy187; -yy590: - YYDEBUG(590, *YYCURSOR); +yy595: + YYDEBUG(595, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy591; + if (yych == 'E') goto yy596; if (yych != 'e') goto yy187; -yy591: - YYDEBUG(591, *YYCURSOR); +yy596: + YYDEBUG(596, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(592, *YYCURSOR); + YYDEBUG(597, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1255 "Zend/zend_language_scanner.l" { return T_INCLUDE_ONCE; } -#line 5836 "Zend/zend_language_scanner.c" -yy593: - YYDEBUG(593, *YYCURSOR); +#line 5871 "Zend/zend_language_scanner.c" +yy598: + YYDEBUG(598, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy594; + if (yych == 'R') goto yy599; if (yych != 'r') goto yy187; -yy594: - YYDEBUG(594, *YYCURSOR); +yy599: + YYDEBUG(599, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy595; + if (yych == 'F') goto yy600; if (yych != 'f') goto yy187; -yy595: - YYDEBUG(595, *YYCURSOR); +yy600: + YYDEBUG(600, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy596; + if (yych == 'A') goto yy601; if (yych != 'a') goto yy187; -yy596: - YYDEBUG(596, *YYCURSOR); +yy601: + YYDEBUG(601, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy597; + if (yych == 'C') goto yy602; if (yych != 'c') goto yy187; -yy597: - YYDEBUG(597, *YYCURSOR); +yy602: + YYDEBUG(602, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy598; + if (yych == 'E') goto yy603; if (yych != 'e') goto yy187; -yy598: - YYDEBUG(598, *YYCURSOR); +yy603: + YYDEBUG(603, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(599, *YYCURSOR); + YYDEBUG(604, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1155 "Zend/zend_language_scanner.l" { return T_INTERFACE; } -#line 5874 "Zend/zend_language_scanner.c" -yy600: - YYDEBUG(600, *YYCURSOR); +#line 5909 "Zend/zend_language_scanner.c" +yy605: + YYDEBUG(605, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { - if (yych == 'A') goto yy601; + if (yych == 'A') goto yy606; if (yych <= 'D') goto yy187; - goto yy602; + goto yy607; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; } else { - if (yych == 'e') goto yy602; + if (yych == 'e') goto yy607; goto yy187; } } -yy601: - YYDEBUG(601, *YYCURSOR); +yy606: + YYDEBUG(606, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy608; - if (yych == 'n') goto yy608; + if (yych == 'N') goto yy613; + if (yych == 'n') goto yy613; goto yy187; -yy602: - YYDEBUG(602, *YYCURSOR); +yy607: + YYDEBUG(607, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy603; + if (yych == 'A') goto yy608; if (yych != 'a') goto yy187; -yy603: - YYDEBUG(603, *YYCURSOR); +yy608: + YYDEBUG(608, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy604; + if (yych == 'D') goto yy609; if (yych != 'd') goto yy187; -yy604: - YYDEBUG(604, *YYCURSOR); +yy609: + YYDEBUG(609, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy605; + if (yych == 'O') goto yy610; if (yych != 'o') goto yy187; -yy605: - YYDEBUG(605, *YYCURSOR); +yy610: + YYDEBUG(610, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy606; + if (yych == 'F') goto yy611; if (yych != 'f') goto yy187; -yy606: - YYDEBUG(606, *YYCURSOR); +yy611: + YYDEBUG(611, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(607, *YYCURSOR); + YYDEBUG(612, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1275 "Zend/zend_language_scanner.l" { return T_INSTEADOF; } -#line 5928 "Zend/zend_language_scanner.c" -yy608: - YYDEBUG(608, *YYCURSOR); +#line 5963 "Zend/zend_language_scanner.c" +yy613: + YYDEBUG(613, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy609; + if (yych == 'C') goto yy614; if (yych != 'c') goto yy187; -yy609: - YYDEBUG(609, *YYCURSOR); +yy614: + YYDEBUG(614, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy610; + if (yych == 'E') goto yy615; if (yych != 'e') goto yy187; -yy610: - YYDEBUG(610, *YYCURSOR); +yy615: + YYDEBUG(615, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy611; + if (yych == 'O') goto yy616; if (yych != 'o') goto yy187; -yy611: - YYDEBUG(611, *YYCURSOR); +yy616: + YYDEBUG(616, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy612; + if (yych == 'F') goto yy617; if (yych != 'f') goto yy187; -yy612: - YYDEBUG(612, *YYCURSOR); +yy617: + YYDEBUG(617, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(613, *YYCURSOR); + YYDEBUG(618, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1107 "Zend/zend_language_scanner.l" { return T_INSTANCEOF; } -#line 5961 "Zend/zend_language_scanner.c" -yy614: - YYDEBUG(614, *YYCURSOR); +#line 5996 "Zend/zend_language_scanner.c" +yy619: + YYDEBUG(619, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy615; + if (yych == 'L') goto yy620; if (yych != 'l') goto yy187; -yy615: - YYDEBUG(615, *YYCURSOR); +yy620: + YYDEBUG(620, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy616; + if (yych == 'E') goto yy621; if (yych != 'e') goto yy187; -yy616: - YYDEBUG(616, *YYCURSOR); +yy621: + YYDEBUG(621, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy617; + if (yych == 'M') goto yy622; if (yych != 'm') goto yy187; -yy617: - YYDEBUG(617, *YYCURSOR); +yy622: + YYDEBUG(622, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy618; + if (yych == 'E') goto yy623; if (yych != 'e') goto yy187; -yy618: - YYDEBUG(618, *YYCURSOR); +yy623: + YYDEBUG(623, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy619; + if (yych == 'N') goto yy624; if (yych != 'n') goto yy187; -yy619: - YYDEBUG(619, *YYCURSOR); +yy624: + YYDEBUG(624, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy620; + if (yych == 'T') goto yy625; if (yych != 't') goto yy187; -yy620: - YYDEBUG(620, *YYCURSOR); +yy625: + YYDEBUG(625, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy621; + if (yych == 'S') goto yy626; if (yych != 's') goto yy187; -yy621: - YYDEBUG(621, *YYCURSOR); +yy626: + YYDEBUG(626, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(622, *YYCURSOR); + YYDEBUG(627, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1167 "Zend/zend_language_scanner.l" { return T_IMPLEMENTS; } -#line 6009 "Zend/zend_language_scanner.c" -yy623: - YYDEBUG(623, *YYCURSOR); +#line 6044 "Zend/zend_language_scanner.c" +yy628: + YYDEBUG(628, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy631; - if (yych == 'r') goto yy631; + if (yych == 'R') goto yy636; + if (yych == 'r') goto yy636; goto yy187; -yy624: - YYDEBUG(624, *YYCURSOR); +yy629: + YYDEBUG(629, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { - if (yych == 'A') goto yy627; + if (yych == 'A') goto yy632; if (yych <= 'X') goto yy187; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; - goto yy627; + goto yy632; } else { if (yych != 'y') goto yy187; } } - YYDEBUG(625, *YYCURSOR); + YYDEBUG(630, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(626, *YYCURSOR); + YYDEBUG(631, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1039 "Zend/zend_language_scanner.l" { return T_TRY; } -#line 6041 "Zend/zend_language_scanner.c" -yy627: - YYDEBUG(627, *YYCURSOR); +#line 6076 "Zend/zend_language_scanner.c" +yy632: + YYDEBUG(632, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy628; + if (yych == 'I') goto yy633; if (yych != 'i') goto yy187; -yy628: - YYDEBUG(628, *YYCURSOR); +yy633: + YYDEBUG(633, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy629; + if (yych == 'T') goto yy634; if (yych != 't') goto yy187; -yy629: - YYDEBUG(629, *YYCURSOR); +yy634: + YYDEBUG(634, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(630, *YYCURSOR); + YYDEBUG(635, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1159 "Zend/zend_language_scanner.l" { return T_TRAIT; } -#line 6064 "Zend/zend_language_scanner.c" -yy631: - YYDEBUG(631, *YYCURSOR); +#line 6099 "Zend/zend_language_scanner.c" +yy636: + YYDEBUG(636, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy632; + if (yych == 'O') goto yy637; if (yych != 'o') goto yy187; -yy632: - YYDEBUG(632, *YYCURSOR); +yy637: + YYDEBUG(637, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy633; + if (yych == 'W') goto yy638; if (yych != 'w') goto yy187; -yy633: - YYDEBUG(633, *YYCURSOR); +yy638: + YYDEBUG(638, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(634, *YYCURSOR); + YYDEBUG(639, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1051 "Zend/zend_language_scanner.l" { return T_THROW; } -#line 6087 "Zend/zend_language_scanner.c" -yy635: - YYDEBUG(635, *YYCURSOR); +#line 6122 "Zend/zend_language_scanner.c" +yy640: + YYDEBUG(640, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy636; + if (yych == 'E') goto yy641; if (yych != 'e') goto yy187; -yy636: - YYDEBUG(636, *YYCURSOR); +yy641: + YYDEBUG(641, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy637; + if (yych == 'L') goto yy642; if (yych != 'l') goto yy187; -yy637: - YYDEBUG(637, *YYCURSOR); +yy642: + YYDEBUG(642, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy638; + if (yych == 'D') goto yy643; if (yych != 'd') goto yy187; -yy638: - YYDEBUG(638, *YYCURSOR); +yy643: + YYDEBUG(643, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(639, *YYCURSOR); + YYDEBUG(644, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1035 "Zend/zend_language_scanner.l" { return T_YIELD; } -#line 6115 "Zend/zend_language_scanner.c" -yy640: - YYDEBUG(640, *YYCURSOR); +#line 6150 "Zend/zend_language_scanner.c" +yy645: + YYDEBUG(645, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { - if (yych == 'Q') goto yy642; + if (yych == 'Q') goto yy647; if (yych <= 'S') goto yy187; } else { if (yych <= 'q') { if (yych <= 'p') goto yy187; - goto yy642; + goto yy647; } else { if (yych != 't') goto yy187; } } - YYDEBUG(641, *YYCURSOR); + YYDEBUG(646, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy654; - if (yych == 'u') goto yy654; + if (yych == 'U') goto yy659; + if (yych == 'u') goto yy659; goto yy187; -yy642: - YYDEBUG(642, *YYCURSOR); +yy647: + YYDEBUG(647, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy643; + if (yych == 'U') goto yy648; if (yych != 'u') goto yy187; -yy643: - YYDEBUG(643, *YYCURSOR); +yy648: + YYDEBUG(648, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy644; + if (yych == 'I') goto yy649; if (yych != 'i') goto yy187; -yy644: - YYDEBUG(644, *YYCURSOR); +yy649: + YYDEBUG(649, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy645; + if (yych == 'R') goto yy650; if (yych != 'r') goto yy187; -yy645: - YYDEBUG(645, *YYCURSOR); +yy650: + YYDEBUG(650, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy646; + if (yych == 'E') goto yy651; if (yych != 'e') goto yy187; -yy646: - YYDEBUG(646, *YYCURSOR); +yy651: + YYDEBUG(651, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '9') { if (yych >= '0') goto yy186; } else { - if (yych <= '@') goto yy647; + if (yych <= '@') goto yy652; if (yych <= 'Z') goto yy186; } } else { if (yych <= '`') { - if (yych <= '_') goto yy648; + if (yych <= '_') goto yy653; } else { if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy647: - YYDEBUG(647, *YYCURSOR); +yy652: + YYDEBUG(652, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1259 "Zend/zend_language_scanner.l" { return T_REQUIRE; } -#line 6180 "Zend/zend_language_scanner.c" -yy648: - YYDEBUG(648, *YYCURSOR); +#line 6215 "Zend/zend_language_scanner.c" +yy653: + YYDEBUG(653, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy649; + if (yych == 'O') goto yy654; if (yych != 'o') goto yy187; -yy649: - YYDEBUG(649, *YYCURSOR); +yy654: + YYDEBUG(654, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy650; + if (yych == 'N') goto yy655; if (yych != 'n') goto yy187; -yy650: - YYDEBUG(650, *YYCURSOR); +yy655: + YYDEBUG(655, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy651; + if (yych == 'C') goto yy656; if (yych != 'c') goto yy187; -yy651: - YYDEBUG(651, *YYCURSOR); +yy656: + YYDEBUG(656, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy652; + if (yych == 'E') goto yy657; if (yych != 'e') goto yy187; -yy652: - YYDEBUG(652, *YYCURSOR); +yy657: + YYDEBUG(657, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(653, *YYCURSOR); + YYDEBUG(658, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1263 "Zend/zend_language_scanner.l" { return T_REQUIRE_ONCE; } -#line 6213 "Zend/zend_language_scanner.c" -yy654: - YYDEBUG(654, *YYCURSOR); +#line 6248 "Zend/zend_language_scanner.c" +yy659: + YYDEBUG(659, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy655; + if (yych == 'R') goto yy660; if (yych != 'r') goto yy187; -yy655: - YYDEBUG(655, *YYCURSOR); +yy660: + YYDEBUG(660, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy656; + if (yych == 'N') goto yy661; if (yych != 'n') goto yy187; -yy656: - YYDEBUG(656, *YYCURSOR); +yy661: + YYDEBUG(661, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(657, *YYCURSOR); + YYDEBUG(662, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1031 "Zend/zend_language_scanner.l" { return T_RETURN; } -#line 6236 "Zend/zend_language_scanner.c" -yy658: - YYDEBUG(658, *YYCURSOR); +#line 6271 "Zend/zend_language_scanner.c" +yy663: + YYDEBUG(663, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'L') { if (yych <= 'K') goto yy187; - goto yy681; + goto yy686; } else { if (yych <= 'R') goto yy187; - if (yych <= 'S') goto yy680; - goto yy679; + if (yych <= 'S') goto yy685; + goto yy684; } } else { if (yych <= 'r') { - if (yych == 'l') goto yy681; + if (yych == 'l') goto yy686; goto yy187; } else { - if (yych <= 's') goto yy680; - if (yych <= 't') goto yy679; + if (yych <= 's') goto yy685; + if (yych <= 't') goto yy684; goto yy187; } } -yy659: - YYDEBUG(659, *YYCURSOR); +yy664: + YYDEBUG(664, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { - if (yych == 'A') goto yy671; + if (yych == 'A') goto yy676; if (yych <= 'N') goto yy187; - goto yy672; + goto yy677; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; - goto yy671; + goto yy676; } else { - if (yych == 'o') goto yy672; + if (yych == 'o') goto yy677; goto yy187; } } -yy660: - YYDEBUG(660, *YYCURSOR); +yy665: + YYDEBUG(665, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy661; + if (yych == 'N') goto yy666; if (yych != 'n') goto yy187; -yy661: - YYDEBUG(661, *YYCURSOR); +yy666: + YYDEBUG(666, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'R') goto yy187; - if (yych >= 'T') goto yy663; + if (yych >= 'T') goto yy668; } else { if (yych <= 'r') goto yy187; - if (yych <= 's') goto yy662; - if (yych <= 't') goto yy663; + if (yych <= 's') goto yy667; + if (yych <= 't') goto yy668; goto yy187; } -yy662: - YYDEBUG(662, *YYCURSOR); +yy667: + YYDEBUG(667, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy669; - if (yych == 't') goto yy669; + if (yych == 'T') goto yy674; + if (yych == 't') goto yy674; goto yy187; -yy663: - YYDEBUG(663, *YYCURSOR); +yy668: + YYDEBUG(668, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy664; + if (yych == 'I') goto yy669; if (yych != 'i') goto yy187; -yy664: - YYDEBUG(664, *YYCURSOR); +yy669: + YYDEBUG(669, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy665; + if (yych == 'N') goto yy670; if (yych != 'n') goto yy187; -yy665: - YYDEBUG(665, *YYCURSOR); +yy670: + YYDEBUG(670, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy666; + if (yych == 'U') goto yy671; if (yych != 'u') goto yy187; -yy666: - YYDEBUG(666, *YYCURSOR); +yy671: + YYDEBUG(671, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy667; + if (yych == 'E') goto yy672; if (yych != 'e') goto yy187; -yy667: - YYDEBUG(667, *YYCURSOR); +yy672: + YYDEBUG(672, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(668, *YYCURSOR); + YYDEBUG(673, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1135 "Zend/zend_language_scanner.l" { return T_CONTINUE; } -#line 6330 "Zend/zend_language_scanner.c" -yy669: - YYDEBUG(669, *YYCURSOR); +#line 6365 "Zend/zend_language_scanner.c" +yy674: + YYDEBUG(674, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(670, *YYCURSOR); + YYDEBUG(675, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1027 "Zend/zend_language_scanner.l" { return T_CONST; } -#line 6343 "Zend/zend_language_scanner.c" -yy671: - YYDEBUG(671, *YYCURSOR); +#line 6378 "Zend/zend_language_scanner.c" +yy676: + YYDEBUG(676, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy676; - if (yych == 's') goto yy676; + if (yych == 'S') goto yy681; + if (yych == 's') goto yy681; goto yy187; -yy672: - YYDEBUG(672, *YYCURSOR); +yy677: + YYDEBUG(677, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy673; + if (yych == 'N') goto yy678; if (yych != 'n') goto yy187; -yy673: - YYDEBUG(673, *YYCURSOR); +yy678: + YYDEBUG(678, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy674; + if (yych == 'E') goto yy679; if (yych != 'e') goto yy187; -yy674: - YYDEBUG(674, *YYCURSOR); +yy679: + YYDEBUG(679, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(675, *YYCURSOR); + YYDEBUG(680, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1211 "Zend/zend_language_scanner.l" { return T_CLONE; } -#line 6372 "Zend/zend_language_scanner.c" -yy676: - YYDEBUG(676, *YYCURSOR); +#line 6407 "Zend/zend_language_scanner.c" +yy681: + YYDEBUG(681, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy677; + if (yych == 'S') goto yy682; if (yych != 's') goto yy187; -yy677: - YYDEBUG(677, *YYCURSOR); +yy682: + YYDEBUG(682, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(678, *YYCURSOR); + YYDEBUG(683, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1151 "Zend/zend_language_scanner.l" { return T_CLASS; } -#line 6390 "Zend/zend_language_scanner.c" -yy679: - YYDEBUG(679, *YYCURSOR); +#line 6425 "Zend/zend_language_scanner.c" +yy684: + YYDEBUG(684, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy690; - if (yych == 'c') goto yy690; + if (yych == 'C') goto yy695; + if (yych == 'c') goto yy695; goto yy187; -yy680: - YYDEBUG(680, *YYCURSOR); +yy685: + YYDEBUG(685, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy688; - if (yych == 'e') goto yy688; + if (yych == 'E') goto yy693; + if (yych == 'e') goto yy693; goto yy187; -yy681: - YYDEBUG(681, *YYCURSOR); +yy686: + YYDEBUG(686, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy682; + if (yych == 'L') goto yy687; if (yych != 'l') goto yy187; -yy682: - YYDEBUG(682, *YYCURSOR); +yy687: + YYDEBUG(687, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy683; + if (yych == 'A') goto yy688; if (yych != 'a') goto yy187; -yy683: - YYDEBUG(683, *YYCURSOR); +yy688: + YYDEBUG(688, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'B') goto yy684; + if (yych == 'B') goto yy689; if (yych != 'b') goto yy187; -yy684: - YYDEBUG(684, *YYCURSOR); +yy689: + YYDEBUG(689, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy685; + if (yych == 'L') goto yy690; if (yych != 'l') goto yy187; -yy685: - YYDEBUG(685, *YYCURSOR); +yy690: + YYDEBUG(690, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy686; + if (yych == 'E') goto yy691; if (yych != 'e') goto yy187; -yy686: - YYDEBUG(686, *YYCURSOR); +yy691: + YYDEBUG(691, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(687, *YYCURSOR); + YYDEBUG(692, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1335 "Zend/zend_language_scanner.l" +#line 1340 "Zend/zend_language_scanner.l" { return T_CALLABLE; } -#line 6440 "Zend/zend_language_scanner.c" -yy688: - YYDEBUG(688, *YYCURSOR); +#line 6475 "Zend/zend_language_scanner.c" +yy693: + YYDEBUG(693, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(689, *YYCURSOR); + YYDEBUG(694, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1123 "Zend/zend_language_scanner.l" { return T_CASE; } -#line 6453 "Zend/zend_language_scanner.c" -yy690: - YYDEBUG(690, *YYCURSOR); +#line 6488 "Zend/zend_language_scanner.c" +yy695: + YYDEBUG(695, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy691; + if (yych == 'H') goto yy696; if (yych != 'h') goto yy187; -yy691: - YYDEBUG(691, *YYCURSOR); +yy696: + YYDEBUG(696, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(692, *YYCURSOR); + YYDEBUG(697, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1043 "Zend/zend_language_scanner.l" { return T_CATCH; } -#line 6471 "Zend/zend_language_scanner.c" -yy693: - YYDEBUG(693, *YYCURSOR); +#line 6506 "Zend/zend_language_scanner.c" +yy698: + YYDEBUG(698, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy710; - if (yych == 'n') goto yy710; + if (yych == 'N') goto yy715; + if (yych == 'n') goto yy715; goto yy187; -yy694: - YYDEBUG(694, *YYCURSOR); +yy699: + YYDEBUG(699, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy703; - if (yych == 'r') goto yy703; + if (yych == 'R') goto yy708; + if (yych == 'r') goto yy708; goto yy187; -yy695: - YYDEBUG(695, *YYCURSOR); +yy700: + YYDEBUG(700, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy696; + if (yych == 'N') goto yy701; if (yych != 'n') goto yy187; -yy696: - YYDEBUG(696, *YYCURSOR); +yy701: + YYDEBUG(701, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy697; + if (yych == 'C') goto yy702; if (yych != 'c') goto yy187; -yy697: - YYDEBUG(697, *YYCURSOR); +yy702: + YYDEBUG(702, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy698; + if (yych == 'T') goto yy703; if (yych != 't') goto yy187; -yy698: - YYDEBUG(698, *YYCURSOR); +yy703: + YYDEBUG(703, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy699; + if (yych == 'I') goto yy704; if (yych != 'i') goto yy187; -yy699: - YYDEBUG(699, *YYCURSOR); +yy704: + YYDEBUG(704, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy700; + if (yych == 'O') goto yy705; if (yych != 'o') goto yy187; -yy700: - YYDEBUG(700, *YYCURSOR); +yy705: + YYDEBUG(705, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy701; + if (yych == 'N') goto yy706; if (yych != 'n') goto yy187; -yy701: - YYDEBUG(701, *YYCURSOR); +yy706: + YYDEBUG(706, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(702, *YYCURSOR); + YYDEBUG(707, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1023 "Zend/zend_language_scanner.l" { return T_FUNCTION; } -#line 6526 "Zend/zend_language_scanner.c" -yy703: - YYDEBUG(703, *YYCURSOR); +#line 6561 "Zend/zend_language_scanner.c" +yy708: + YYDEBUG(708, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy704; + if (yych <= '/') goto yy709; if (yych <= '9') goto yy186; } else { - if (yych == 'E') goto yy705; + if (yych == 'E') goto yy710; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'd') { if (yych != '`') goto yy186; } else { - if (yych <= 'e') goto yy705; + if (yych <= 'e') goto yy710; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy704: - YYDEBUG(704, *YYCURSOR); +yy709: + YYDEBUG(709, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1083 "Zend/zend_language_scanner.l" { return T_FOR; } -#line 6554 "Zend/zend_language_scanner.c" -yy705: - YYDEBUG(705, *YYCURSOR); +#line 6589 "Zend/zend_language_scanner.c" +yy710: + YYDEBUG(710, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy706; + if (yych == 'A') goto yy711; if (yych != 'a') goto yy187; -yy706: - YYDEBUG(706, *YYCURSOR); +yy711: + YYDEBUG(711, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy707; + if (yych == 'C') goto yy712; if (yych != 'c') goto yy187; -yy707: - YYDEBUG(707, *YYCURSOR); +yy712: + YYDEBUG(712, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy708; + if (yych == 'H') goto yy713; if (yych != 'h') goto yy187; -yy708: - YYDEBUG(708, *YYCURSOR); +yy713: + YYDEBUG(713, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(709, *YYCURSOR); + YYDEBUG(714, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1091 "Zend/zend_language_scanner.l" { return T_FOREACH; } -#line 6582 "Zend/zend_language_scanner.c" -yy710: - YYDEBUG(710, *YYCURSOR); +#line 6617 "Zend/zend_language_scanner.c" +yy715: + YYDEBUG(715, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy711; + if (yych == 'A') goto yy716; if (yych != 'a') goto yy187; -yy711: - YYDEBUG(711, *YYCURSOR); +yy716: + YYDEBUG(716, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy712; + if (yych == 'L') goto yy717; if (yych != 'l') goto yy187; -yy712: - YYDEBUG(712, *YYCURSOR); +yy717: + YYDEBUG(717, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy713; + if (yych <= '/') goto yy718; if (yych <= '9') goto yy186; } else { - if (yych == 'L') goto yy714; + if (yych == 'L') goto yy719; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'k') { if (yych != '`') goto yy186; } else { - if (yych <= 'l') goto yy714; + if (yych <= 'l') goto yy719; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy713: - YYDEBUG(713, *YYCURSOR); +yy718: + YYDEBUG(718, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1303 "Zend/zend_language_scanner.l" +#line 1308 "Zend/zend_language_scanner.l" { return T_FINAL; } -#line 6620 "Zend/zend_language_scanner.c" -yy714: - YYDEBUG(714, *YYCURSOR); +#line 6655 "Zend/zend_language_scanner.c" +yy719: + YYDEBUG(719, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy715; + if (yych == 'Y') goto yy720; if (yych != 'y') goto yy187; -yy715: - YYDEBUG(715, *YYCURSOR); +yy720: + YYDEBUG(720, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(716, *YYCURSOR); + YYDEBUG(721, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1047 "Zend/zend_language_scanner.l" { return T_FINALLY; } -#line 6638 "Zend/zend_language_scanner.c" -yy717: - YYDEBUG(717, *YYCURSOR); +#line 6673 "Zend/zend_language_scanner.c" +yy722: + YYDEBUG(722, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'F') { - if (yych == 'C') goto yy723; + if (yych == 'C') goto yy728; if (yych <= 'E') goto yy187; - goto yy724; + goto yy729; } else { if (yych <= 'c') { if (yych <= 'b') goto yy187; - goto yy723; + goto yy728; } else { - if (yych == 'f') goto yy724; + if (yych == 'f') goto yy729; goto yy187; } } -yy718: - YYDEBUG(718, *YYCURSOR); +yy723: + YYDEBUG(723, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy721; - if (yych == 'e') goto yy721; + if (yych == 'E') goto yy726; + if (yych == 'e') goto yy726; goto yy187; -yy719: - YYDEBUG(719, *YYCURSOR); +yy724: + YYDEBUG(724, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(720, *YYCURSOR); + YYDEBUG(725, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1079 "Zend/zend_language_scanner.l" { return T_DO; } -#line 6673 "Zend/zend_language_scanner.c" -yy721: - YYDEBUG(721, *YYCURSOR); +#line 6708 "Zend/zend_language_scanner.c" +yy726: + YYDEBUG(726, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(722, *YYCURSOR); + YYDEBUG(727, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1019 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 6686 "Zend/zend_language_scanner.c" -yy723: - YYDEBUG(723, *YYCURSOR); +#line 6721 "Zend/zend_language_scanner.c" +yy728: + YYDEBUG(728, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy730; - if (yych == 'l') goto yy730; + if (yych == 'L') goto yy735; + if (yych == 'l') goto yy735; goto yy187; -yy724: - YYDEBUG(724, *YYCURSOR); +yy729: + YYDEBUG(729, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy725; + if (yych == 'A') goto yy730; if (yych != 'a') goto yy187; -yy725: - YYDEBUG(725, *YYCURSOR); +yy730: + YYDEBUG(730, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy726; + if (yych == 'U') goto yy731; if (yych != 'u') goto yy187; -yy726: - YYDEBUG(726, *YYCURSOR); +yy731: + YYDEBUG(731, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy727; + if (yych == 'L') goto yy732; if (yych != 'l') goto yy187; -yy727: - YYDEBUG(727, *YYCURSOR); +yy732: + YYDEBUG(732, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy728; + if (yych == 'T') goto yy733; if (yych != 't') goto yy187; -yy728: - YYDEBUG(728, *YYCURSOR); +yy733: + YYDEBUG(733, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(729, *YYCURSOR); + YYDEBUG(734, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1127 "Zend/zend_language_scanner.l" { return T_DEFAULT; } -#line 6725 "Zend/zend_language_scanner.c" -yy730: - YYDEBUG(730, *YYCURSOR); +#line 6760 "Zend/zend_language_scanner.c" +yy735: + YYDEBUG(735, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy731; + if (yych == 'A') goto yy736; if (yych != 'a') goto yy187; -yy731: - YYDEBUG(731, *YYCURSOR); +yy736: + YYDEBUG(736, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy732; + if (yych == 'R') goto yy737; if (yych != 'r') goto yy187; -yy732: - YYDEBUG(732, *YYCURSOR); +yy737: + YYDEBUG(737, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy733; + if (yych == 'E') goto yy738; if (yych != 'e') goto yy187; -yy733: - YYDEBUG(733, *YYCURSOR); +yy738: + YYDEBUG(738, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(734, *YYCURSOR); + YYDEBUG(739, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1099 "Zend/zend_language_scanner.l" { return T_DECLARE; } -#line 6753 "Zend/zend_language_scanner.c" -yy735: - YYDEBUG(735, *YYCURSOR); +#line 6788 "Zend/zend_language_scanner.c" +yy740: + YYDEBUG(740, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy797; - if (yych == 'h') goto yy797; + if (yych == 'H') goto yy802; + if (yych == 'h') goto yy802; goto yy187; -yy736: - YYDEBUG(736, *YYCURSOR); +yy741: + YYDEBUG(741, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy791; - if (yych == 's') goto yy791; + if (yych == 'S') goto yy796; + if (yych == 's') goto yy796; goto yy187; -yy737: - YYDEBUG(737, *YYCURSOR); +yy742: + YYDEBUG(742, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy787; - if (yych == 'p') goto yy787; + if (yych == 'P') goto yy792; + if (yych == 'p') goto yy792; goto yy187; -yy738: - YYDEBUG(738, *YYCURSOR); +yy743: + YYDEBUG(743, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy753; - if (yych == 'd') goto yy753; + if (yych == 'D') goto yy758; + if (yych == 'd') goto yy758; goto yy187; -yy739: - YYDEBUG(739, *YYCURSOR); +yy744: + YYDEBUG(744, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy750; - if (yych == 'a') goto yy750; + if (yych == 'A') goto yy755; + if (yych == 'a') goto yy755; goto yy187; -yy740: - YYDEBUG(740, *YYCURSOR); +yy745: + YYDEBUG(745, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { - if (yych == 'I') goto yy741; + if (yych == 'I') goto yy746; if (yych <= 'S') goto yy187; - goto yy742; + goto yy747; } else { if (yych <= 'i') { if (yych <= 'h') goto yy187; } else { - if (yych == 't') goto yy742; + if (yych == 't') goto yy747; goto yy187; } } -yy741: - YYDEBUG(741, *YYCURSOR); +yy746: + YYDEBUG(746, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy748; - if (yych == 't') goto yy748; + if (yych == 'T') goto yy753; + if (yych == 't') goto yy753; goto yy187; -yy742: - YYDEBUG(742, *YYCURSOR); +yy747: + YYDEBUG(747, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy743; + if (yych == 'E') goto yy748; if (yych != 'e') goto yy187; -yy743: - YYDEBUG(743, *YYCURSOR); +yy748: + YYDEBUG(748, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy744; + if (yych == 'N') goto yy749; if (yych != 'n') goto yy187; -yy744: - YYDEBUG(744, *YYCURSOR); +yy749: + YYDEBUG(749, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy745; + if (yych == 'D') goto yy750; if (yych != 'd') goto yy187; -yy745: - YYDEBUG(745, *YYCURSOR); +yy750: + YYDEBUG(750, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy746; + if (yych == 'S') goto yy751; if (yych != 's') goto yy187; -yy746: - YYDEBUG(746, *YYCURSOR); +yy751: + YYDEBUG(751, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(747, *YYCURSOR); + YYDEBUG(752, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1163 "Zend/zend_language_scanner.l" { return T_EXTENDS; } -#line 6837 "Zend/zend_language_scanner.c" -yy748: - YYDEBUG(748, *YYCURSOR); +#line 6872 "Zend/zend_language_scanner.c" +yy753: + YYDEBUG(753, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(749, *YYCURSOR); + YYDEBUG(754, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1015 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 6850 "Zend/zend_language_scanner.c" -yy750: - YYDEBUG(750, *YYCURSOR); +#line 6885 "Zend/zend_language_scanner.c" +yy755: + YYDEBUG(755, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy751; + if (yych == 'L') goto yy756; if (yych != 'l') goto yy187; -yy751: - YYDEBUG(751, *YYCURSOR); +yy756: + YYDEBUG(756, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(752, *YYCURSOR); + YYDEBUG(757, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1247 "Zend/zend_language_scanner.l" { return T_EVAL; } -#line 6868 "Zend/zend_language_scanner.c" -yy753: - YYDEBUG(753, *YYCURSOR); +#line 6903 "Zend/zend_language_scanner.c" +yy758: + YYDEBUG(758, *YYCURSOR); yych = *++YYCURSOR; YYDEBUG(-1, yych); switch (yych) { case 'D': - case 'd': goto yy754; + case 'd': goto yy759; case 'F': - case 'f': goto yy755; + case 'f': goto yy760; case 'I': - case 'i': goto yy756; + case 'i': goto yy761; case 'S': - case 's': goto yy757; + case 's': goto yy762; case 'W': - case 'w': goto yy758; + case 'w': goto yy763; default: goto yy187; } -yy754: - YYDEBUG(754, *YYCURSOR); +yy759: + YYDEBUG(759, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy780; - if (yych == 'e') goto yy780; + if (yych == 'E') goto yy785; + if (yych == 'e') goto yy785; goto yy187; -yy755: - YYDEBUG(755, *YYCURSOR); +yy760: + YYDEBUG(760, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy772; - if (yych == 'o') goto yy772; + if (yych == 'O') goto yy777; + if (yych == 'o') goto yy777; goto yy187; -yy756: - YYDEBUG(756, *YYCURSOR); +yy761: + YYDEBUG(761, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy770; - if (yych == 'f') goto yy770; + if (yych == 'F') goto yy775; + if (yych == 'f') goto yy775; goto yy187; -yy757: - YYDEBUG(757, *YYCURSOR); +yy762: + YYDEBUG(762, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy764; - if (yych == 'w') goto yy764; + if (yych == 'W') goto yy769; + if (yych == 'w') goto yy769; goto yy187; -yy758: - YYDEBUG(758, *YYCURSOR); +yy763: + YYDEBUG(763, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy759; + if (yych == 'H') goto yy764; if (yych != 'h') goto yy187; -yy759: - YYDEBUG(759, *YYCURSOR); +yy764: + YYDEBUG(764, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy760; + if (yych == 'I') goto yy765; if (yych != 'i') goto yy187; -yy760: - YYDEBUG(760, *YYCURSOR); +yy765: + YYDEBUG(765, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy761; + if (yych == 'L') goto yy766; if (yych != 'l') goto yy187; -yy761: - YYDEBUG(761, *YYCURSOR); +yy766: + YYDEBUG(766, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy762; + if (yych == 'E') goto yy767; if (yych != 'e') goto yy187; -yy762: - YYDEBUG(762, *YYCURSOR); +yy767: + YYDEBUG(767, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(763, *YYCURSOR); + YYDEBUG(768, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1075 "Zend/zend_language_scanner.l" { return T_ENDWHILE; } -#line 6942 "Zend/zend_language_scanner.c" -yy764: - YYDEBUG(764, *YYCURSOR); +#line 6977 "Zend/zend_language_scanner.c" +yy769: + YYDEBUG(769, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy765; + if (yych == 'I') goto yy770; if (yych != 'i') goto yy187; -yy765: - YYDEBUG(765, *YYCURSOR); +yy770: + YYDEBUG(770, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy766; + if (yych == 'T') goto yy771; if (yych != 't') goto yy187; -yy766: - YYDEBUG(766, *YYCURSOR); +yy771: + YYDEBUG(771, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy767; + if (yych == 'C') goto yy772; if (yych != 'c') goto yy187; -yy767: - YYDEBUG(767, *YYCURSOR); +yy772: + YYDEBUG(772, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy768; + if (yych == 'H') goto yy773; if (yych != 'h') goto yy187; -yy768: - YYDEBUG(768, *YYCURSOR); +yy773: + YYDEBUG(773, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(769, *YYCURSOR); + YYDEBUG(774, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1119 "Zend/zend_language_scanner.l" { return T_ENDSWITCH; } -#line 6975 "Zend/zend_language_scanner.c" -yy770: - YYDEBUG(770, *YYCURSOR); +#line 7010 "Zend/zend_language_scanner.c" +yy775: + YYDEBUG(775, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(771, *YYCURSOR); + YYDEBUG(776, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1063 "Zend/zend_language_scanner.l" { return T_ENDIF; } -#line 6988 "Zend/zend_language_scanner.c" -yy772: - YYDEBUG(772, *YYCURSOR); +#line 7023 "Zend/zend_language_scanner.c" +yy777: + YYDEBUG(777, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy773; + if (yych == 'R') goto yy778; if (yych != 'r') goto yy187; -yy773: - YYDEBUG(773, *YYCURSOR); +yy778: + YYDEBUG(778, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy774; + if (yych <= '/') goto yy779; if (yych <= '9') goto yy186; } else { - if (yych == 'E') goto yy775; + if (yych == 'E') goto yy780; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'd') { if (yych != '`') goto yy186; } else { - if (yych <= 'e') goto yy775; + if (yych <= 'e') goto yy780; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy774: - YYDEBUG(774, *YYCURSOR); +yy779: + YYDEBUG(779, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1087 "Zend/zend_language_scanner.l" { return T_ENDFOR; } -#line 7021 "Zend/zend_language_scanner.c" -yy775: - YYDEBUG(775, *YYCURSOR); +#line 7056 "Zend/zend_language_scanner.c" +yy780: + YYDEBUG(780, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy776; + if (yych == 'A') goto yy781; if (yych != 'a') goto yy187; -yy776: - YYDEBUG(776, *YYCURSOR); +yy781: + YYDEBUG(781, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy777; + if (yych == 'C') goto yy782; if (yych != 'c') goto yy187; -yy777: - YYDEBUG(777, *YYCURSOR); +yy782: + YYDEBUG(782, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy778; + if (yych == 'H') goto yy783; if (yych != 'h') goto yy187; -yy778: - YYDEBUG(778, *YYCURSOR); +yy783: + YYDEBUG(783, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(779, *YYCURSOR); + YYDEBUG(784, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1095 "Zend/zend_language_scanner.l" { return T_ENDFOREACH; } -#line 7049 "Zend/zend_language_scanner.c" -yy780: - YYDEBUG(780, *YYCURSOR); +#line 7084 "Zend/zend_language_scanner.c" +yy785: + YYDEBUG(785, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy781; + if (yych == 'C') goto yy786; if (yych != 'c') goto yy187; -yy781: - YYDEBUG(781, *YYCURSOR); +yy786: + YYDEBUG(786, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy782; + if (yych == 'L') goto yy787; if (yych != 'l') goto yy187; -yy782: - YYDEBUG(782, *YYCURSOR); +yy787: + YYDEBUG(787, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy783; + if (yych == 'A') goto yy788; if (yych != 'a') goto yy187; -yy783: - YYDEBUG(783, *YYCURSOR); +yy788: + YYDEBUG(788, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy784; + if (yych == 'R') goto yy789; if (yych != 'r') goto yy187; -yy784: - YYDEBUG(784, *YYCURSOR); +yy789: + YYDEBUG(789, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy785; + if (yych == 'E') goto yy790; if (yych != 'e') goto yy187; -yy785: - YYDEBUG(785, *YYCURSOR); +yy790: + YYDEBUG(790, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(786, *YYCURSOR); + YYDEBUG(791, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1103 "Zend/zend_language_scanner.l" { return T_ENDDECLARE; } -#line 7087 "Zend/zend_language_scanner.c" -yy787: - YYDEBUG(787, *YYCURSOR); +#line 7122 "Zend/zend_language_scanner.c" +yy792: + YYDEBUG(792, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy788; + if (yych == 'T') goto yy793; if (yych != 't') goto yy187; -yy788: - YYDEBUG(788, *YYCURSOR); +yy793: + YYDEBUG(793, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy789; + if (yych == 'Y') goto yy794; if (yych != 'y') goto yy187; -yy789: - YYDEBUG(789, *YYCURSOR); +yy794: + YYDEBUG(794, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(790, *YYCURSOR); + YYDEBUG(795, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1287 "Zend/zend_language_scanner.l" +#line 1292 "Zend/zend_language_scanner.l" { return T_EMPTY; } -#line 7110 "Zend/zend_language_scanner.c" -yy791: - YYDEBUG(791, *YYCURSOR); +#line 7145 "Zend/zend_language_scanner.c" +yy796: + YYDEBUG(796, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy792; + if (yych == 'E') goto yy797; if (yych != 'e') goto yy187; -yy792: - YYDEBUG(792, *YYCURSOR); +yy797: + YYDEBUG(797, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy793; + if (yych <= '/') goto yy798; if (yych <= '9') goto yy186; } else { - if (yych == 'I') goto yy794; + if (yych == 'I') goto yy799; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'h') { if (yych != '`') goto yy186; } else { - if (yych <= 'i') goto yy794; + if (yych <= 'i') goto yy799; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy793: - YYDEBUG(793, *YYCURSOR); +yy798: + YYDEBUG(798, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1067 "Zend/zend_language_scanner.l" { return T_ELSE; } -#line 7143 "Zend/zend_language_scanner.c" -yy794: - YYDEBUG(794, *YYCURSOR); +#line 7178 "Zend/zend_language_scanner.c" +yy799: + YYDEBUG(799, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy795; + if (yych == 'F') goto yy800; if (yych != 'f') goto yy187; -yy795: - YYDEBUG(795, *YYCURSOR); +yy800: + YYDEBUG(800, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(796, *YYCURSOR); + YYDEBUG(801, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1059 "Zend/zend_language_scanner.l" { return T_ELSEIF; } -#line 7161 "Zend/zend_language_scanner.c" -yy797: - YYDEBUG(797, *YYCURSOR); +#line 7196 "Zend/zend_language_scanner.c" +yy802: + YYDEBUG(802, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy798; + if (yych == 'O') goto yy803; if (yych != 'o') goto yy187; -yy798: - YYDEBUG(798, *YYCURSOR); +yy803: + YYDEBUG(803, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(799, *YYCURSOR); + YYDEBUG(804, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1143 "Zend/zend_language_scanner.l" { return T_ECHO; } -#line 7179 "Zend/zend_language_scanner.c" +#line 7214 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: @@ -7214,39 +7249,39 @@ int lex_scan(zval *zendlval TSRMLS_DC) 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, }; - YYDEBUG(800, *YYCURSOR); + YYDEBUG(805, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yych <= '-') { if (yych <= '\r') { - if (yych <= 0x08) goto yy808; - if (yych <= '\n') goto yy802; - if (yych <= '\f') goto yy808; + if (yych <= 0x08) goto yy813; + if (yych <= '\n') goto yy807; + if (yych <= '\f') goto yy813; } else { - if (yych == ' ') goto yy802; - if (yych <= ',') goto yy808; - goto yy804; + if (yych == ' ') goto yy807; + if (yych <= ',') goto yy813; + goto yy809; } } else { if (yych <= '_') { - if (yych <= '@') goto yy808; - if (yych <= 'Z') goto yy806; - if (yych <= '^') goto yy808; - goto yy806; + if (yych <= '@') goto yy813; + if (yych <= 'Z') goto yy811; + if (yych <= '^') goto yy813; + goto yy811; } else { - if (yych <= '`') goto yy808; - if (yych <= 'z') goto yy806; - if (yych <= '~') goto yy808; - goto yy806; + if (yych <= '`') goto yy813; + if (yych <= 'z') goto yy811; + if (yych <= '~') goto yy813; + goto yy811; } } -yy802: - YYDEBUG(802, *YYCURSOR); +yy807: + YYDEBUG(807, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy814; -yy803: - YYDEBUG(803, *YYCURSOR); + goto yy819; +yy808: + YYDEBUG(808, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1176 "Zend/zend_language_scanner.l" { @@ -7254,13 +7289,13 @@ int lex_scan(zval *zendlval TSRMLS_DC) HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 7258 "Zend/zend_language_scanner.c" -yy804: - YYDEBUG(804, *YYCURSOR); +#line 7293 "Zend/zend_language_scanner.c" +yy809: + YYDEBUG(809, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '>') goto yy811; -yy805: - YYDEBUG(805, *YYCURSOR); + if ((yych = *YYCURSOR) == '>') goto yy816; +yy810: + YYDEBUG(810, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1193 "Zend/zend_language_scanner.l" { @@ -7268,14 +7303,14 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy_pop_state(TSRMLS_C); goto restart; } -#line 7272 "Zend/zend_language_scanner.c" -yy806: - YYDEBUG(806, *YYCURSOR); +#line 7307 "Zend/zend_language_scanner.c" +yy811: + YYDEBUG(811, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy810; -yy807: - YYDEBUG(807, *YYCURSOR); + goto yy815; +yy812: + YYDEBUG(812, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1186 "Zend/zend_language_scanner.l" { @@ -7284,43 +7319,43 @@ int lex_scan(zval *zendlval TSRMLS_DC) zendlval->type = IS_STRING; return T_STRING; } -#line 7288 "Zend/zend_language_scanner.c" -yy808: - YYDEBUG(808, *YYCURSOR); +#line 7323 "Zend/zend_language_scanner.c" +yy813: + YYDEBUG(813, *YYCURSOR); yych = *++YYCURSOR; - goto yy805; -yy809: - YYDEBUG(809, *YYCURSOR); + goto yy810; +yy814: + YYDEBUG(814, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy810: - YYDEBUG(810, *YYCURSOR); +yy815: + YYDEBUG(815, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy809; + goto yy814; } - goto yy807; -yy811: - YYDEBUG(811, *YYCURSOR); + goto yy812; +yy816: + YYDEBUG(816, *YYCURSOR); ++YYCURSOR; - YYDEBUG(812, *YYCURSOR); + YYDEBUG(817, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1182 "Zend/zend_language_scanner.l" { return T_OBJECT_OPERATOR; } -#line 7313 "Zend/zend_language_scanner.c" -yy813: - YYDEBUG(813, *YYCURSOR); +#line 7348 "Zend/zend_language_scanner.c" +yy818: + YYDEBUG(818, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy814: - YYDEBUG(814, *YYCURSOR); +yy819: + YYDEBUG(819, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy813; + goto yy818; } - goto yy803; + goto yy808; } /* *********************************** */ yyc_ST_LOOKING_FOR_VARNAME: @@ -7359,74 +7394,74 @@ int lex_scan(zval *zendlval TSRMLS_DC) 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; - YYDEBUG(815, *YYCURSOR); + YYDEBUG(820, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yych <= '_') { - if (yych <= '@') goto yy819; - if (yych <= 'Z') goto yy817; - if (yych <= '^') goto yy819; + if (yych <= '@') goto yy824; + if (yych <= 'Z') goto yy822; + if (yych <= '^') goto yy824; } else { - if (yych <= '`') goto yy819; - if (yych <= 'z') goto yy817; - if (yych <= '~') goto yy819; + if (yych <= '`') goto yy824; + if (yych <= 'z') goto yy822; + if (yych <= '~') goto yy824; } -yy817: - YYDEBUG(817, *YYCURSOR); +yy822: + YYDEBUG(822, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy818; - if (yych <= '9') goto yy821; + if (yych <= '/') goto yy823; + if (yych <= '9') goto yy826; } else { - if (yych <= '[') goto yy821; - if (yych >= '_') goto yy821; + if (yych <= '[') goto yy826; + if (yych >= '_') goto yy826; } } else { if (yych <= '|') { - if (yych <= '`') goto yy818; - if (yych <= 'z') goto yy821; + if (yych <= '`') goto yy823; + if (yych <= 'z') goto yy826; } else { - if (yych != '~') goto yy821; + if (yych != '~') goto yy826; } } -yy818: - YYDEBUG(818, *YYCURSOR); +yy823: + YYDEBUG(823, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1479 "Zend/zend_language_scanner.l" +#line 1484 "Zend/zend_language_scanner.l" { yyless(0); yy_pop_state(TSRMLS_C); yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); goto restart; } -#line 7405 "Zend/zend_language_scanner.c" -yy819: - YYDEBUG(819, *YYCURSOR); +#line 7440 "Zend/zend_language_scanner.c" +yy824: + YYDEBUG(824, *YYCURSOR); yych = *++YYCURSOR; - goto yy818; -yy820: - YYDEBUG(820, *YYCURSOR); + goto yy823; +yy825: + YYDEBUG(825, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy821: - YYDEBUG(821, *YYCURSOR); +yy826: + YYDEBUG(826, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy820; + goto yy825; } - if (yych == '[') goto yy823; - if (yych == '}') goto yy823; - YYDEBUG(822, *YYCURSOR); + if (yych == '[') goto yy828; + if (yych == '}') goto yy828; + YYDEBUG(827, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy818; -yy823: - YYDEBUG(823, *YYCURSOR); + goto yy823; +yy828: + YYDEBUG(828, *YYCURSOR); ++YYCURSOR; - YYDEBUG(824, *YYCURSOR); + YYDEBUG(829, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1469 "Zend/zend_language_scanner.l" +#line 1474 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); zend_copy_value(zendlval, yytext, yyleng); @@ -7435,18 +7470,18 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return T_STRING_VARNAME; } -#line 7439 "Zend/zend_language_scanner.c" +#line 7474 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_NOWDOC: - YYDEBUG(825, *YYCURSOR); + YYDEBUG(830, *YYCURSOR); YYFILL(1); yych = *YYCURSOR; - YYDEBUG(827, *YYCURSOR); + YYDEBUG(832, *YYCURSOR); ++YYCURSOR; - YYDEBUG(828, *YYCURSOR); + YYDEBUG(833, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2299 "Zend/zend_language_scanner.l" +#line 2304 "Zend/zend_language_scanner.l" { int newline = 0; @@ -7503,7 +7538,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) HANDLE_NEWLINES(yytext, yyleng - newline); return T_ENCAPSED_AND_WHITESPACE; } -#line 7507 "Zend/zend_language_scanner.c" +#line 7542 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_VAR_OFFSET: { @@ -7541,76 +7576,76 @@ int lex_scan(zval *zendlval TSRMLS_DC) 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, }; - YYDEBUG(829, *YYCURSOR); + YYDEBUG(834, *YYCURSOR); YYFILL(3); yych = *YYCURSOR; if (yych <= '/') { if (yych <= ' ') { if (yych <= '\f') { - if (yych <= 0x08) goto yy843; - if (yych <= '\n') goto yy839; - goto yy843; + if (yych <= 0x08) goto yy848; + if (yych <= '\n') goto yy844; + goto yy848; } else { - if (yych <= '\r') goto yy839; - if (yych <= 0x1F) goto yy843; - goto yy839; + if (yych <= '\r') goto yy844; + if (yych <= 0x1F) goto yy848; + goto yy844; } } else { if (yych <= '$') { - if (yych <= '"') goto yy838; - if (yych <= '#') goto yy839; - goto yy834; + if (yych <= '"') goto yy843; + if (yych <= '#') goto yy844; + goto yy839; } else { - if (yych == '\'') goto yy839; - goto yy838; + if (yych == '\'') goto yy844; + goto yy843; } } } else { if (yych <= '\\') { if (yych <= '@') { - if (yych <= '0') goto yy831; - if (yych <= '9') goto yy833; - goto yy838; + if (yych <= '0') goto yy836; + if (yych <= '9') goto yy838; + goto yy843; } else { - if (yych <= 'Z') goto yy841; - if (yych <= '[') goto yy838; - goto yy839; + if (yych <= 'Z') goto yy846; + if (yych <= '[') goto yy843; + goto yy844; } } else { if (yych <= '_') { - if (yych <= ']') goto yy836; - if (yych <= '^') goto yy838; - goto yy841; + if (yych <= ']') goto yy841; + if (yych <= '^') goto yy843; + goto yy846; } else { - if (yych <= '`') goto yy838; - if (yych <= 'z') goto yy841; - if (yych <= '~') goto yy838; - goto yy841; + if (yych <= '`') goto yy843; + if (yych <= 'z') goto yy846; + if (yych <= '~') goto yy843; + goto yy846; } } } -yy831: - YYDEBUG(831, *YYCURSOR); +yy836: + YYDEBUG(836, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'W') { if (yych <= '9') { - if (yych >= '0') goto yy855; + if (yych >= '0') goto yy860; } else { - if (yych == 'B') goto yy852; + if (yych == 'B') goto yy857; } } else { if (yych <= 'b') { - if (yych <= 'X') goto yy854; - if (yych >= 'b') goto yy852; + if (yych <= 'X') goto yy859; + if (yych >= 'b') goto yy857; } else { - if (yych == 'x') goto yy854; + if (yych == 'x') goto yy859; } } -yy832: - YYDEBUG(832, *YYCURSOR); +yy837: + YYDEBUG(837, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1555 "Zend/zend_language_scanner.l" +#line 1560 "Zend/zend_language_scanner.l" { /* Offset could be treated as a long */ if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) { ZVAL_LONG(zendlval, strtol(yytext, NULL, 10)); @@ -7619,81 +7654,81 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_NUM_STRING; } -#line 7623 "Zend/zend_language_scanner.c" -yy833: - YYDEBUG(833, *YYCURSOR); +#line 7658 "Zend/zend_language_scanner.c" +yy838: + YYDEBUG(838, *YYCURSOR); yych = *++YYCURSOR; - goto yy851; -yy834: - YYDEBUG(834, *YYCURSOR); + goto yy856; +yy839: + YYDEBUG(839, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '_') { - if (yych <= '@') goto yy835; - if (yych <= 'Z') goto yy847; - if (yych >= '_') goto yy847; + if (yych <= '@') goto yy840; + if (yych <= 'Z') goto yy852; + if (yych >= '_') goto yy852; } else { - if (yych <= '`') goto yy835; - if (yych <= 'z') goto yy847; - if (yych >= 0x7F) goto yy847; + if (yych <= '`') goto yy840; + if (yych <= 'z') goto yy852; + if (yych >= 0x7F) goto yy852; } -yy835: - YYDEBUG(835, *YYCURSOR); +yy840: + YYDEBUG(840, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1831 "Zend/zend_language_scanner.l" +#line 1836 "Zend/zend_language_scanner.l" { /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ return yytext[0]; } -#line 7648 "Zend/zend_language_scanner.c" -yy836: - YYDEBUG(836, *YYCURSOR); +#line 7683 "Zend/zend_language_scanner.c" +yy841: + YYDEBUG(841, *YYCURSOR); ++YYCURSOR; - YYDEBUG(837, *YYCURSOR); + YYDEBUG(842, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1826 "Zend/zend_language_scanner.l" +#line 1831 "Zend/zend_language_scanner.l" { yy_pop_state(TSRMLS_C); return ']'; } -#line 7659 "Zend/zend_language_scanner.c" -yy838: - YYDEBUG(838, *YYCURSOR); +#line 7694 "Zend/zend_language_scanner.c" +yy843: + YYDEBUG(843, *YYCURSOR); yych = *++YYCURSOR; - goto yy835; -yy839: - YYDEBUG(839, *YYCURSOR); + goto yy840; +yy844: + YYDEBUG(844, *YYCURSOR); ++YYCURSOR; - YYDEBUG(840, *YYCURSOR); + YYDEBUG(845, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1836 "Zend/zend_language_scanner.l" +#line 1841 "Zend/zend_language_scanner.l" { /* Invalid rule to return a more explicit parse error with proper line number */ yyless(0); yy_pop_state(TSRMLS_C); return T_ENCAPSED_AND_WHITESPACE; } -#line 7676 "Zend/zend_language_scanner.c" -yy841: - YYDEBUG(841, *YYCURSOR); +#line 7711 "Zend/zend_language_scanner.c" +yy846: + YYDEBUG(846, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy846; -yy842: - YYDEBUG(842, *YYCURSOR); + goto yy851; +yy847: + YYDEBUG(847, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1843 "Zend/zend_language_scanner.l" +#line 1848 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; return T_STRING; } -#line 7691 "Zend/zend_language_scanner.c" -yy843: - YYDEBUG(843, *YYCURSOR); +#line 7726 "Zend/zend_language_scanner.c" +yy848: + YYDEBUG(848, *YYCURSOR); ++YYCURSOR; - YYDEBUG(844, *YYCURSOR); + YYDEBUG(849, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2357 "Zend/zend_language_scanner.l" +#line 2362 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -7702,116 +7737,116 @@ int lex_scan(zval *zendlval TSRMLS_DC) zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 7706 "Zend/zend_language_scanner.c" -yy845: - YYDEBUG(845, *YYCURSOR); +#line 7741 "Zend/zend_language_scanner.c" +yy850: + YYDEBUG(850, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy846: - YYDEBUG(846, *YYCURSOR); +yy851: + YYDEBUG(851, *YYCURSOR); if (yybm[0+yych] & 16) { - goto yy845; + goto yy850; } - goto yy842; -yy847: - YYDEBUG(847, *YYCURSOR); + goto yy847; +yy852: + YYDEBUG(852, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(848, *YYCURSOR); + YYDEBUG(853, *YYCURSOR); if (yych <= '^') { if (yych <= '9') { - if (yych >= '0') goto yy847; + if (yych >= '0') goto yy852; } else { - if (yych <= '@') goto yy849; - if (yych <= 'Z') goto yy847; + if (yych <= '@') goto yy854; + if (yych <= 'Z') goto yy852; } } else { if (yych <= '`') { - if (yych <= '_') goto yy847; + if (yych <= '_') goto yy852; } else { - if (yych <= 'z') goto yy847; - if (yych >= 0x7F) goto yy847; + if (yych <= 'z') goto yy852; + if (yych >= 0x7F) goto yy852; } } -yy849: - YYDEBUG(849, *YYCURSOR); +yy854: + YYDEBUG(854, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1820 "Zend/zend_language_scanner.l" +#line 1825 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 7748 "Zend/zend_language_scanner.c" -yy850: - YYDEBUG(850, *YYCURSOR); +#line 7783 "Zend/zend_language_scanner.c" +yy855: + YYDEBUG(855, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy851: - YYDEBUG(851, *YYCURSOR); +yy856: + YYDEBUG(856, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy850; + goto yy855; } - goto yy832; -yy852: - YYDEBUG(852, *YYCURSOR); + goto yy837; +yy857: + YYDEBUG(857, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 128) { - goto yy860; + goto yy865; } -yy853: - YYDEBUG(853, *YYCURSOR); +yy858: + YYDEBUG(858, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy832; -yy854: - YYDEBUG(854, *YYCURSOR); + goto yy837; +yy859: + YYDEBUG(859, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 64) { - goto yy858; + goto yy863; } - goto yy853; -yy855: - YYDEBUG(855, *YYCURSOR); + goto yy858; +yy860: + YYDEBUG(860, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(856, *YYCURSOR); - if (yych <= '/') goto yy857; - if (yych <= '9') goto yy855; -yy857: - YYDEBUG(857, *YYCURSOR); + YYDEBUG(861, *YYCURSOR); + if (yych <= '/') goto yy862; + if (yych <= '9') goto yy860; +yy862: + YYDEBUG(862, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1564 "Zend/zend_language_scanner.l" +#line 1569 "Zend/zend_language_scanner.l" { /* Offset must be treated as a string */ ZVAL_STRINGL(zendlval, yytext, yyleng, 1); return T_NUM_STRING; } -#line 7793 "Zend/zend_language_scanner.c" -yy858: - YYDEBUG(858, *YYCURSOR); +#line 7828 "Zend/zend_language_scanner.c" +yy863: + YYDEBUG(863, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(859, *YYCURSOR); + YYDEBUG(864, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy858; + goto yy863; } - goto yy857; -yy860: - YYDEBUG(860, *YYCURSOR); + goto yy862; +yy865: + YYDEBUG(865, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(861, *YYCURSOR); + YYDEBUG(866, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy860; + goto yy865; } - goto yy857; + goto yy862; } } -#line 2366 "Zend/zend_language_scanner.l" +#line 2371 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index f9c421fe8805..ddbcbe7641ff 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -1280,6 +1280,11 @@ NEWLINE ("\r"|"\n"|"\r\n") return T_GLOBAL; } +"super" { + return T_SUPER; +} + + "isset" { return T_ISSET; } diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 8beacdfd352b..44f64921db0e 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -959,10 +959,16 @@ ZEND_API int zend_check_private(zend_function *fbc, zend_class_entry *ce, char * ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) /* {{{ */ { zend_class_entry *fbc_scope = ce; - + + /* + * Is the called context super to this class ? + */ + if (scope->super == fbc_scope) + return 1; + /* Is the context that's calling the function, the same as one of * the function's parents? - */ + */ while (fbc_scope) { if (fbc_scope==scope) { return 1; @@ -979,6 +985,9 @@ ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) } scope = scope->parent; } + + + return 0; } /* }}} */ From c8c0bdb8cd6a32fd296492e0802b58b9e006ac3e Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 17:36:49 +0100 Subject: [PATCH 36/61] more general static access --- Zend/zend_language_parser.y | 9 +++------ Zend/zend_object_handlers.c | 1 - 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index bfdfba63b872..6d25cea3ed68 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -884,7 +884,7 @@ lexical_var_list: | '&' T_VARIABLE { zend_do_fetch_lexical_variable(&$2, 1 TSRMLS_CC); } ; -super_function_call: +super_class_reference: T_SUPER { if (CG(active_class_entry)->super) { $$.op_type = IS_CONST; @@ -904,12 +904,8 @@ function_call: function_call_parameter_list { zend_do_end_function_call(&$2, &$$, &$4, 0, $3.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } | class_name T_PAAMAYIM_NEKUDOTAYIM variable_name { $$.u.op.opline_num = zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } function_call_parameter_list { zend_do_end_function_call($4.u.op.opline_num?NULL:&$3, &$$, &$5, $4.u.op.opline_num, $4.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} - | super_function_call T_PAAMAYIM_NEKUDOTAYIM variable_name { $$.u.op.opline_num = zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call($4.u.op.opline_num?NULL:&$3, &$$, &$5, $4.u.op.opline_num, $4.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } function_call_parameter_list { zend_do_end_function_call(NULL, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} - | super_function_call T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call(NULL, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_name { zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } function_call_parameter_list { zend_do_end_function_call(NULL, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } @@ -923,16 +919,17 @@ class_name: | namespace_name { $$ = $1; } | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); } | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; } + | super_class_reference { $$ = $1; } ; fully_qualified_class_name: namespace_name { $$ = $1; } | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); } | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; } + | super_class_reference { $$ = $1; } ; - class_name_reference: class_name { zend_do_fetch_class(&$$, &$1 TSRMLS_CC); } | dynamic_class_name_reference { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); zend_do_fetch_class(&$$, &$1 TSRMLS_CC); } diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 44f64921db0e..3b1e00fd1df5 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -930,7 +930,6 @@ static inline zend_function *zend_check_private_int(zend_function *fbc, zend_cla return fbc; } - /* Check rule #2 */ ce = ce->parent; while (ce) { From 43b6942b91b625dc1b492fd78e62be3fe1f1d7f4 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 17:54:38 +0100 Subject: [PATCH 37/61] remove super:: --- Zend/zend.h | 1 - Zend/zend_compile.c | 1 - Zend/zend_language_parser.y | 15 - Zend/zend_language_scanner.c | 2439 +++++++++++++++++----------------- Zend/zend_language_scanner.l | 5 - Zend/zend_object_handlers.c | 12 +- 6 files changed, 1204 insertions(+), 1269 deletions(-) diff --git a/Zend/zend.h b/Zend/zend.h index 1f594d4b46fe..9d67b4324b0c 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -479,7 +479,6 @@ struct _zend_class_entry { const char *name; zend_uint name_length; struct _zend_class_entry *parent; - struct _zend_class_entry *super; int refcount; zend_uint ce_flags; diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 2beefc0343a2..f83e92905b8e 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5057,7 +5057,6 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons new_class_entry->info.user.filename = zend_get_compiled_filename(TSRMLS_C); new_class_entry->info.user.line_start = opline_num; new_class_entry->ce_flags |= class_token->EA; - new_class_entry->super = class_token->u.op.ptr; if (parent_class_name && parent_class_name->op_type != IS_UNUSED) { switch (parent_class_name->EA) { diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 6d25cea3ed68..288b83170776 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -186,7 +186,6 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %token T_INTERFACE "interface (T_INTERFACE)" %token T_EXTENDS "extends (T_EXTENDS)" %token T_IMPLEMENTS "implements (T_IMPLEMENTS)" -%token T_SUPER "super (T_SUPER)" %token T_OBJECT_OPERATOR "-> (T_OBJECT_OPERATOR)" %token T_DOUBLE_ARROW "=> (T_DOUBLE_ARROW)" %token T_LIST "list (T_LIST)" @@ -884,17 +883,6 @@ lexical_var_list: | '&' T_VARIABLE { zend_do_fetch_lexical_variable(&$2, 1 TSRMLS_CC); } ; -super_class_reference: - T_SUPER { - if (CG(active_class_entry)->super) { - $$.op_type = IS_CONST; - ZVAL_STRINGL(&$$.u.constant, - CG(active_class_entry)->super->name, - CG(active_class_entry)->super->name_length, 1); - } else zend_error(E_COMPILE_ERROR, "no super class found for %s", CG(active_class_entry)->name); - } -; - function_call: namespace_name { $$.u.op.opline_num = zend_do_begin_function_call(&$1, 1 TSRMLS_CC); } function_call_parameter_list { zend_do_end_function_call(&$1, &$$, &$3, 0, $2.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } @@ -919,14 +907,12 @@ class_name: | namespace_name { $$ = $1; } | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); } | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; } - | super_class_reference { $$ = $1; } ; fully_qualified_class_name: namespace_name { $$ = $1; } | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); } | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; } - | super_class_reference { $$ = $1; } ; @@ -1124,7 +1110,6 @@ base_variable_with_function_calls: | function_call { zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.EA = ZEND_PARSED_FUNCTION_CALL; } ; - base_variable: reference_variable { $$ = $1; $$.EA = ZEND_PARSED_VARIABLE; } | simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); $$.EA = ZEND_PARSED_VARIABLE; } diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index 3d3c901a3118..d5768d334556 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -1096,7 +1096,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy3: YYDEBUG(3, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1743 "Zend/zend_language_scanner.l" +#line 1738 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1174,7 +1174,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy6: YYDEBUG(6, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1733 "Zend/zend_language_scanner.l" +#line 1728 "Zend/zend_language_scanner.l" { if (CG(short_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ @@ -1191,7 +1191,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) if ((yych = *YYCURSOR) == '=') goto yy43; YYDEBUG(8, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1714 "Zend/zend_language_scanner.l" +#line 1709 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ @@ -1387,7 +1387,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(38, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1680 "Zend/zend_language_scanner.l" +#line 1675 "Zend/zend_language_scanner.l" { YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1)); @@ -1429,7 +1429,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(44, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1696 "Zend/zend_language_scanner.l" +#line 1691 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ @@ -1445,7 +1445,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(46, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1707 "Zend/zend_language_scanner.l" +#line 1702 "Zend/zend_language_scanner.l" { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ BEGIN(ST_IN_SCRIPTING); @@ -1478,7 +1478,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy51: YYDEBUG(51, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1725 "Zend/zend_language_scanner.l" +#line 1720 "Zend/zend_language_scanner.l" { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ HANDLE_NEWLINE(yytext[yyleng-1]); @@ -1556,7 +1556,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy56: YYDEBUG(56, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2188 "Zend/zend_language_scanner.l" +#line 2183 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1608,7 +1608,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(59, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2132 "Zend/zend_language_scanner.l" +#line 2127 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '`'; @@ -1623,7 +1623,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(62, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2119 "Zend/zend_language_scanner.l" +#line 2114 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1646,7 +1646,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy65: YYDEBUG(65, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1825 "Zend/zend_language_scanner.l" +#line 1820 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; @@ -1658,7 +1658,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(67, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1459 "Zend/zend_language_scanner.l" +#line 1454 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; @@ -1677,7 +1677,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(71, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1817 "Zend/zend_language_scanner.l" +#line 1812 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1703,7 +1703,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(74, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1807 "Zend/zend_language_scanner.l" +#line 1802 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1779,7 +1779,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy78: YYDEBUG(78, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2138 "Zend/zend_language_scanner.l" +#line 2133 "Zend/zend_language_scanner.l" { if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; @@ -1839,7 +1839,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(81, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2127 "Zend/zend_language_scanner.l" +#line 2122 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '"'; @@ -1854,7 +1854,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(84, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2119 "Zend/zend_language_scanner.l" +#line 2114 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1877,7 +1877,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy87: YYDEBUG(87, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1825 "Zend/zend_language_scanner.l" +#line 1820 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; @@ -1889,7 +1889,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(89, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1459 "Zend/zend_language_scanner.l" +#line 1454 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; @@ -1908,7 +1908,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(93, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1817 "Zend/zend_language_scanner.l" +#line 1812 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1934,7 +1934,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(96, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1807 "Zend/zend_language_scanner.l" +#line 1802 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1953,7 +1953,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(100, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2105 "Zend/zend_language_scanner.l" +#line 2100 "Zend/zend_language_scanner.l" { zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack)); @@ -2028,7 +2028,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy104: YYDEBUG(104, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2230 "Zend/zend_language_scanner.l" +#line 2225 "Zend/zend_language_scanner.l" { int newline = 0; @@ -2116,7 +2116,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(108, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2119 "Zend/zend_language_scanner.l" +#line 2114 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -2139,7 +2139,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy111: YYDEBUG(111, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1825 "Zend/zend_language_scanner.l" +#line 1820 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; @@ -2151,7 +2151,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(113, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1459 "Zend/zend_language_scanner.l" +#line 1454 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; @@ -2170,7 +2170,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(117, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1817 "Zend/zend_language_scanner.l" +#line 1812 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -2196,7 +2196,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(120, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1807 "Zend/zend_language_scanner.l" +#line 1802 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -2371,23 +2371,23 @@ int lex_scan(zval *zendlval TSRMLS_DC) YYDEBUG(-1, yych); switch ((yych = *YYCURSOR)) { case 'C': - case 'c': goto yy740; + case 'c': goto yy735; case 'L': - case 'l': goto yy741; + case 'l': goto yy736; case 'M': - case 'm': goto yy742; + case 'm': goto yy737; case 'N': - case 'n': goto yy743; + case 'n': goto yy738; case 'V': - case 'v': goto yy744; + case 'v': goto yy739; case 'X': - case 'x': goto yy745; + case 'x': goto yy740; default: goto yy187; } yy124: YYDEBUG(124, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1848 "Zend/zend_language_scanner.l" +#line 1843 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; @@ -2399,20 +2399,20 @@ int lex_scan(zval *zendlval TSRMLS_DC) yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'H') { - if (yych == 'E') goto yy722; + if (yych == 'E') goto yy717; goto yy187; } else { - if (yych <= 'I') goto yy723; + if (yych <= 'I') goto yy718; if (yych <= 'N') goto yy187; - goto yy724; + goto yy719; } } else { if (yych <= 'h') { - if (yych == 'e') goto yy722; + if (yych == 'e') goto yy717; goto yy187; } else { - if (yych <= 'i') goto yy723; - if (yych == 'o') goto yy724; + if (yych <= 'i') goto yy718; + if (yych == 'o') goto yy719; goto yy187; } } @@ -2421,20 +2421,20 @@ int lex_scan(zval *zendlval TSRMLS_DC) yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'N') { - if (yych == 'I') goto yy698; + if (yych == 'I') goto yy693; goto yy187; } else { - if (yych <= 'O') goto yy699; + if (yych <= 'O') goto yy694; if (yych <= 'T') goto yy187; - goto yy700; + goto yy695; } } else { if (yych <= 'n') { - if (yych == 'i') goto yy698; + if (yych == 'i') goto yy693; goto yy187; } else { - if (yych <= 'o') goto yy699; - if (yych == 'u') goto yy700; + if (yych <= 'o') goto yy694; + if (yych == 'u') goto yy695; goto yy187; } } @@ -2443,48 +2443,48 @@ int lex_scan(zval *zendlval TSRMLS_DC) yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'K') { - if (yych == 'A') goto yy663; + if (yych == 'A') goto yy658; goto yy187; } else { - if (yych <= 'L') goto yy664; + if (yych <= 'L') goto yy659; if (yych <= 'N') goto yy187; - goto yy665; + goto yy660; } } else { if (yych <= 'k') { - if (yych == 'a') goto yy663; + if (yych == 'a') goto yy658; goto yy187; } else { - if (yych <= 'l') goto yy664; - if (yych == 'o') goto yy665; + if (yych <= 'l') goto yy659; + if (yych == 'o') goto yy660; goto yy187; } } yy128: YYDEBUG(128, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy645; - if (yych == 'e') goto yy645; + if (yych == 'E') goto yy640; + if (yych == 'e') goto yy640; goto yy187; yy129: YYDEBUG(129, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy640; - if (yych == 'i') goto yy640; + if (yych == 'I') goto yy635; + if (yych == 'i') goto yy635; goto yy187; yy130: YYDEBUG(130, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { - if (yych == 'H') goto yy628; + if (yych == 'H') goto yy623; if (yych <= 'Q') goto yy187; - goto yy629; + goto yy624; } else { if (yych <= 'h') { if (yych <= 'g') goto yy187; - goto yy628; + goto yy623; } else { - if (yych == 'r') goto yy629; + if (yych == 'r') goto yy624; goto yy187; } } @@ -2493,53 +2493,53 @@ int lex_scan(zval *zendlval TSRMLS_DC) yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= 'L') { - if (yych == 'F') goto yy575; + if (yych == 'F') goto yy570; goto yy187; } else { - if (yych <= 'M') goto yy577; - if (yych <= 'N') goto yy578; + if (yych <= 'M') goto yy572; + if (yych <= 'N') goto yy573; if (yych <= 'R') goto yy187; - goto yy579; + goto yy574; } } else { if (yych <= 'm') { - if (yych == 'f') goto yy575; + if (yych == 'f') goto yy570; if (yych <= 'l') goto yy187; - goto yy577; + goto yy572; } else { - if (yych <= 'n') goto yy578; - if (yych == 's') goto yy579; + if (yych <= 'n') goto yy573; + if (yych == 's') goto yy574; goto yy187; } } yy132: YYDEBUG(132, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy570; - if (yych == 'h') goto yy570; + if (yych == 'H') goto yy565; + if (yych == 'h') goto yy565; goto yy187; yy133: YYDEBUG(133, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= 'M') { - if (yych == 'B') goto yy552; + if (yych == 'B') goto yy547; goto yy187; } else { - if (yych <= 'N') goto yy553; + if (yych <= 'N') goto yy548; if (yych <= 'Q') goto yy187; - if (yych <= 'R') goto yy554; - goto yy555; + if (yych <= 'R') goto yy549; + goto yy550; } } else { if (yych <= 'n') { - if (yych == 'b') goto yy552; + if (yych == 'b') goto yy547; if (yych <= 'm') goto yy187; - goto yy553; + goto yy548; } else { if (yych <= 'q') goto yy187; - if (yych <= 'r') goto yy554; - if (yych <= 's') goto yy555; + if (yych <= 'r') goto yy549; + if (yych <= 's') goto yy550; goto yy187; } } @@ -2547,21 +2547,15 @@ int lex_scan(zval *zendlval TSRMLS_DC) YYDEBUG(134, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'W') { - if (yych <= 'T') { - if (yych <= 'S') goto yy187; - goto yy535; - } else { - if (yych <= 'U') goto yy536; - if (yych <= 'V') goto yy187; - goto yy537; - } + if (yych == 'T') goto yy535; + if (yych <= 'V') goto yy187; + goto yy536; } else { - if (yych <= 'u') { + if (yych <= 't') { if (yych <= 's') goto yy187; - if (yych <= 't') goto yy535; - goto yy536; + goto yy535; } else { - if (yych == 'w') goto yy537; + if (yych == 'w') goto yy536; goto yy187; } } @@ -2631,11 +2625,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy139: YYDEBUG(139, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1448 "Zend/zend_language_scanner.l" +#line 1443 "Zend/zend_language_scanner.l" { return yytext[0]; } -#line 2639 "Zend/zend_language_scanner.c" +#line 2633 "Zend/zend_language_scanner.c" yy140: YYDEBUG(140, *YYCURSOR); ++YYCURSOR; @@ -2650,7 +2644,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 2654 "Zend/zend_language_scanner.c" +#line 2648 "Zend/zend_language_scanner.c" yy142: YYDEBUG(142, *YYCURSOR); yych = *++YYCURSOR; @@ -2665,7 +2659,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_NS_SEPARATOR; } -#line 2669 "Zend/zend_language_scanner.c" +#line 2663 "Zend/zend_language_scanner.c" yy145: YYDEBUG(145, *YYCURSOR); yych = *++YYCURSOR; @@ -2893,18 +2887,18 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(169, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1453 "Zend/zend_language_scanner.l" +#line 1448 "Zend/zend_language_scanner.l" { yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return '{'; } -#line 2902 "Zend/zend_language_scanner.c" +#line 2896 "Zend/zend_language_scanner.c" yy170: YYDEBUG(170, *YYCURSOR); ++YYCURSOR; YYDEBUG(171, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1465 "Zend/zend_language_scanner.l" +#line 1460 "Zend/zend_language_scanner.l" { RESET_DOC_COMMENT(); if (!zend_stack_is_empty(&SCNG(state_stack))) { @@ -2912,7 +2906,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return '}'; } -#line 2916 "Zend/zend_language_scanner.c" +#line 2910 "Zend/zend_language_scanner.c" yy172: YYDEBUG(172, *YYCURSOR); yyaccept = 2; @@ -2940,7 +2934,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy173: YYDEBUG(173, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1515 "Zend/zend_language_scanner.l" +#line 1510 "Zend/zend_language_scanner.l" { if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */ Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0); @@ -2961,7 +2955,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) zendlval->type = IS_LONG; return T_LNUMBER; } -#line 2965 "Zend/zend_language_scanner.c" +#line 2959 "Zend/zend_language_scanner.c" yy174: YYDEBUG(174, *YYCURSOR); yyaccept = 2; @@ -2989,7 +2983,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy177: YYDEBUG(177, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1855 "Zend/zend_language_scanner.l" +#line 1850 "Zend/zend_language_scanner.l" { while (YYCURSOR < YYLIMIT) { switch (*YYCURSOR++) { @@ -3023,14 +3017,14 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_COMMENT; } -#line 3027 "Zend/zend_language_scanner.c" +#line 3021 "Zend/zend_language_scanner.c" yy178: YYDEBUG(178, *YYCURSOR); ++YYCURSOR; yy179: YYDEBUG(179, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1942 "Zend/zend_language_scanner.l" +#line 1937 "Zend/zend_language_scanner.l" { register char *s, *t; char *end; @@ -3096,14 +3090,14 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_CONSTANT_ENCAPSED_STRING; } -#line 3100 "Zend/zend_language_scanner.c" +#line 3094 "Zend/zend_language_scanner.c" yy180: YYDEBUG(180, *YYCURSOR); ++YYCURSOR; yy181: YYDEBUG(181, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2009 "Zend/zend_language_scanner.l" +#line 2004 "Zend/zend_language_scanner.l" { int bprefix = (yytext[0] != '"') ? 1 : 0; @@ -3144,24 +3138,24 @@ int lex_scan(zval *zendlval TSRMLS_DC) BEGIN(ST_DOUBLE_QUOTES); return '"'; } -#line 3148 "Zend/zend_language_scanner.c" +#line 3142 "Zend/zend_language_scanner.c" yy182: YYDEBUG(182, *YYCURSOR); ++YYCURSOR; YYDEBUG(183, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2099 "Zend/zend_language_scanner.l" +#line 2094 "Zend/zend_language_scanner.l" { BEGIN(ST_BACKQUOTE); return '`'; } -#line 3159 "Zend/zend_language_scanner.c" +#line 3153 "Zend/zend_language_scanner.c" yy184: YYDEBUG(184, *YYCURSOR); ++YYCURSOR; YYDEBUG(185, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2362 "Zend/zend_language_scanner.l" +#line 2357 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -3170,7 +3164,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 3174 "Zend/zend_language_scanner.c" +#line 3168 "Zend/zend_language_scanner.c" yy186: YYDEBUG(186, *YYCURSOR); ++YYCURSOR; @@ -3197,12 +3191,12 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy190: YYDEBUG(190, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1574 "Zend/zend_language_scanner.l" +#line 1569 "Zend/zend_language_scanner.l" { ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL)); return T_DNUMBER; } -#line 3206 "Zend/zend_language_scanner.c" +#line 3200 "Zend/zend_language_scanner.c" yy191: YYDEBUG(191, *YYCURSOR); yyaccept = 2; @@ -3294,7 +3288,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(202, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1491 "Zend/zend_language_scanner.l" +#line 1486 "Zend/zend_language_scanner.l" { char *bin = yytext + 2; /* Skip "0b" */ int len = yyleng - 2; @@ -3318,7 +3312,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_DNUMBER; } } -#line 3322 "Zend/zend_language_scanner.c" +#line 3316 "Zend/zend_language_scanner.c" yy203: YYDEBUG(203, *YYCURSOR); ++YYCURSOR; @@ -3330,7 +3324,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(205, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1536 "Zend/zend_language_scanner.l" +#line 1531 "Zend/zend_language_scanner.l" { char *hex = yytext + 2; /* Skip "0x" */ int len = yyleng - 2; @@ -3354,7 +3348,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_DNUMBER; } } -#line 3358 "Zend/zend_language_scanner.c" +#line 3352 "Zend/zend_language_scanner.c" yy206: YYDEBUG(206, *YYCURSOR); ++YYCURSOR; @@ -3363,13 +3357,13 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy207: YYDEBUG(207, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1923 "Zend/zend_language_scanner.l" +#line 1918 "Zend/zend_language_scanner.l" { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ BEGIN(INITIAL); return T_CLOSE_TAG; /* implicit ';' at php-end tag */ } -#line 3373 "Zend/zend_language_scanner.c" +#line 3367 "Zend/zend_language_scanner.c" yy208: YYDEBUG(208, *YYCURSOR); yych = *++YYCURSOR; @@ -3403,13 +3397,13 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy212: YYDEBUG(212, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1825 "Zend/zend_language_scanner.l" +#line 1820 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 3413 "Zend/zend_language_scanner.c" +#line 3407 "Zend/zend_language_scanner.c" yy213: YYDEBUG(213, *YYCURSOR); yych = *++YYCURSOR; @@ -3423,11 +3417,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(215, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1436 "Zend/zend_language_scanner.l" +#line 1431 "Zend/zend_language_scanner.l" { return T_LOGICAL_XOR; } -#line 3431 "Zend/zend_language_scanner.c" +#line 3425 "Zend/zend_language_scanner.c" yy216: YYDEBUG(216, *YYCURSOR); ++YYCURSOR; @@ -3436,61 +3430,61 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(217, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1428 "Zend/zend_language_scanner.l" +#line 1423 "Zend/zend_language_scanner.l" { return T_LOGICAL_OR; } -#line 3444 "Zend/zend_language_scanner.c" +#line 3438 "Zend/zend_language_scanner.c" yy218: YYDEBUG(218, *YYCURSOR); ++YYCURSOR; YYDEBUG(219, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1416 "Zend/zend_language_scanner.l" +#line 1411 "Zend/zend_language_scanner.l" { return T_XOR_EQUAL; } -#line 3454 "Zend/zend_language_scanner.c" +#line 3448 "Zend/zend_language_scanner.c" yy220: YYDEBUG(220, *YYCURSOR); ++YYCURSOR; YYDEBUG(221, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1420 "Zend/zend_language_scanner.l" +#line 1415 "Zend/zend_language_scanner.l" { return T_BOOLEAN_OR; } -#line 3464 "Zend/zend_language_scanner.c" +#line 3458 "Zend/zend_language_scanner.c" yy222: YYDEBUG(222, *YYCURSOR); ++YYCURSOR; YYDEBUG(223, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1412 "Zend/zend_language_scanner.l" +#line 1407 "Zend/zend_language_scanner.l" { return T_OR_EQUAL; } -#line 3474 "Zend/zend_language_scanner.c" +#line 3468 "Zend/zend_language_scanner.c" yy224: YYDEBUG(224, *YYCURSOR); ++YYCURSOR; YYDEBUG(225, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1424 "Zend/zend_language_scanner.l" +#line 1419 "Zend/zend_language_scanner.l" { return T_BOOLEAN_AND; } -#line 3484 "Zend/zend_language_scanner.c" +#line 3478 "Zend/zend_language_scanner.c" yy226: YYDEBUG(226, *YYCURSOR); ++YYCURSOR; YYDEBUG(227, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1408 "Zend/zend_language_scanner.l" +#line 1403 "Zend/zend_language_scanner.l" { return T_AND_EQUAL; } -#line 3494 "Zend/zend_language_scanner.c" +#line 3488 "Zend/zend_language_scanner.c" yy228: YYDEBUG(228, *YYCURSOR); ++YYCURSOR; @@ -3499,7 +3493,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy229: YYDEBUG(229, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1930 "Zend/zend_language_scanner.l" +#line 1925 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { BEGIN(INITIAL); @@ -3510,17 +3504,17 @@ int lex_scan(zval *zendlval TSRMLS_DC) return yytext[0]; } } -#line 3514 "Zend/zend_language_scanner.c" +#line 3508 "Zend/zend_language_scanner.c" yy230: YYDEBUG(230, *YYCURSOR); ++YYCURSOR; YYDEBUG(231, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1396 "Zend/zend_language_scanner.l" +#line 1391 "Zend/zend_language_scanner.l" { return T_MOD_EQUAL; } -#line 3524 "Zend/zend_language_scanner.c" +#line 3518 "Zend/zend_language_scanner.c" yy232: YYDEBUG(232, *YYCURSOR); yych = *++YYCURSOR; @@ -3551,11 +3545,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(237, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1392 "Zend/zend_language_scanner.l" +#line 1387 "Zend/zend_language_scanner.l" { return T_CONCAT_EQUAL; } -#line 3559 "Zend/zend_language_scanner.c" +#line 3553 "Zend/zend_language_scanner.c" yy238: YYDEBUG(238, *YYCURSOR); yyaccept = 4; @@ -3564,7 +3558,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy239: YYDEBUG(239, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1889 "Zend/zend_language_scanner.l" +#line 1884 "Zend/zend_language_scanner.l" { int doc_com; @@ -3598,7 +3592,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_COMMENT; } -#line 3602 "Zend/zend_language_scanner.c" +#line 3596 "Zend/zend_language_scanner.c" yy240: YYDEBUG(240, *YYCURSOR); yych = *++YYCURSOR; @@ -3608,11 +3602,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(242, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1388 "Zend/zend_language_scanner.l" +#line 1383 "Zend/zend_language_scanner.l" { return T_DIV_EQUAL; } -#line 3616 "Zend/zend_language_scanner.c" +#line 3610 "Zend/zend_language_scanner.c" yy243: YYDEBUG(243, *YYCURSOR); yych = *++YYCURSOR; @@ -3635,42 +3629,42 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(247, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1384 "Zend/zend_language_scanner.l" +#line 1379 "Zend/zend_language_scanner.l" { return T_MUL_EQUAL; } -#line 3643 "Zend/zend_language_scanner.c" +#line 3637 "Zend/zend_language_scanner.c" yy248: YYDEBUG(248, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy252; YYDEBUG(249, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1444 "Zend/zend_language_scanner.l" +#line 1439 "Zend/zend_language_scanner.l" { return T_SR; } -#line 3654 "Zend/zend_language_scanner.c" +#line 3648 "Zend/zend_language_scanner.c" yy250: YYDEBUG(250, *YYCURSOR); ++YYCURSOR; YYDEBUG(251, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1372 "Zend/zend_language_scanner.l" +#line 1367 "Zend/zend_language_scanner.l" { return T_IS_GREATER_OR_EQUAL; } -#line 3664 "Zend/zend_language_scanner.c" +#line 3658 "Zend/zend_language_scanner.c" yy252: YYDEBUG(252, *YYCURSOR); ++YYCURSOR; YYDEBUG(253, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1404 "Zend/zend_language_scanner.l" +#line 1399 "Zend/zend_language_scanner.l" { return T_SR_EQUAL; } -#line 3674 "Zend/zend_language_scanner.c" +#line 3668 "Zend/zend_language_scanner.c" yy254: YYDEBUG(254, *YYCURSOR); yyaccept = 5; @@ -3681,11 +3675,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy255: YYDEBUG(255, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1440 "Zend/zend_language_scanner.l" +#line 1435 "Zend/zend_language_scanner.l" { return T_SL; } -#line 3689 "Zend/zend_language_scanner.c" +#line 3683 "Zend/zend_language_scanner.c" yy256: YYDEBUG(256, *YYCURSOR); yych = *++YYCURSOR; @@ -3697,22 +3691,22 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(258, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1368 "Zend/zend_language_scanner.l" +#line 1363 "Zend/zend_language_scanner.l" { return T_IS_SMALLER_OR_EQUAL; } -#line 3705 "Zend/zend_language_scanner.c" +#line 3699 "Zend/zend_language_scanner.c" yy259: YYDEBUG(259, *YYCURSOR); ++YYCURSOR; yy260: YYDEBUG(260, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1364 "Zend/zend_language_scanner.l" +#line 1359 "Zend/zend_language_scanner.l" { return T_IS_NOT_EQUAL; } -#line 3716 "Zend/zend_language_scanner.c" +#line 3710 "Zend/zend_language_scanner.c" yy261: YYDEBUG(261, *YYCURSOR); yych = *++YYCURSOR; @@ -3763,11 +3757,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(269, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1400 "Zend/zend_language_scanner.l" +#line 1395 "Zend/zend_language_scanner.l" { return T_SL_EQUAL; } -#line 3771 "Zend/zend_language_scanner.c" +#line 3765 "Zend/zend_language_scanner.c" yy270: YYDEBUG(270, *YYCURSOR); ++YYCURSOR; @@ -3872,7 +3866,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy280: YYDEBUG(280, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2051 "Zend/zend_language_scanner.l" +#line 2046 "Zend/zend_language_scanner.l" { char *s; int bprefix = (yytext[0] != '<') ? 1 : 0; @@ -3919,7 +3913,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) return T_START_HEREDOC; } -#line 3923 "Zend/zend_language_scanner.c" +#line 3917 "Zend/zend_language_scanner.c" yy281: YYDEBUG(281, *YYCURSOR); yych = *++YYCURSOR; @@ -3959,31 +3953,31 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(286, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1356 "Zend/zend_language_scanner.l" +#line 1351 "Zend/zend_language_scanner.l" { return T_IS_NOT_IDENTICAL; } -#line 3967 "Zend/zend_language_scanner.c" +#line 3961 "Zend/zend_language_scanner.c" yy287: YYDEBUG(287, *YYCURSOR); ++YYCURSOR; YYDEBUG(288, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1376 "Zend/zend_language_scanner.l" +#line 1371 "Zend/zend_language_scanner.l" { return T_PLUS_EQUAL; } -#line 3977 "Zend/zend_language_scanner.c" +#line 3971 "Zend/zend_language_scanner.c" yy289: YYDEBUG(289, *YYCURSOR); ++YYCURSOR; YYDEBUG(290, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1344 "Zend/zend_language_scanner.l" +#line 1339 "Zend/zend_language_scanner.l" { return T_INC; } -#line 3987 "Zend/zend_language_scanner.c" +#line 3981 "Zend/zend_language_scanner.c" yy291: YYDEBUG(291, *YYCURSOR); yych = *++YYCURSOR; @@ -4002,42 +3996,42 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(294, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1332 "Zend/zend_language_scanner.l" +#line 1327 "Zend/zend_language_scanner.l" { return T_LIST; } -#line 4010 "Zend/zend_language_scanner.c" +#line 4004 "Zend/zend_language_scanner.c" yy295: YYDEBUG(295, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy299; YYDEBUG(296, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1360 "Zend/zend_language_scanner.l" +#line 1355 "Zend/zend_language_scanner.l" { return T_IS_EQUAL; } -#line 4021 "Zend/zend_language_scanner.c" +#line 4015 "Zend/zend_language_scanner.c" yy297: YYDEBUG(297, *YYCURSOR); ++YYCURSOR; YYDEBUG(298, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1328 "Zend/zend_language_scanner.l" +#line 1323 "Zend/zend_language_scanner.l" { return T_DOUBLE_ARROW; } -#line 4031 "Zend/zend_language_scanner.c" +#line 4025 "Zend/zend_language_scanner.c" yy299: YYDEBUG(299, *YYCURSOR); ++YYCURSOR; YYDEBUG(300, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1352 "Zend/zend_language_scanner.l" +#line 1347 "Zend/zend_language_scanner.l" { return T_IS_IDENTICAL; } -#line 4041 "Zend/zend_language_scanner.c" +#line 4035 "Zend/zend_language_scanner.c" yy301: YYDEBUG(301, *YYCURSOR); yych = *++YYCURSOR; @@ -4167,7 +4161,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(320, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1670 "Zend/zend_language_scanner.l" +#line 1665 "Zend/zend_language_scanner.l" { if (CG(current_namespace)) { *zendlval = *CG(current_namespace); @@ -4177,7 +4171,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_NS_C; } -#line 4181 "Zend/zend_language_scanner.c" +#line 4175 "Zend/zend_language_scanner.c" yy321: YYDEBUG(321, *YYCURSOR); yych = *++YYCURSOR; @@ -4197,7 +4191,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(325, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1645 "Zend/zend_language_scanner.l" +#line 1640 "Zend/zend_language_scanner.l" { char *filename = zend_get_compiled_filename(TSRMLS_C); const size_t filename_len = strlen(filename); @@ -4222,7 +4216,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ZVAL_STRING(zendlval, dirname, 0); return T_DIR; } -#line 4226 "Zend/zend_language_scanner.c" +#line 4220 "Zend/zend_language_scanner.c" yy326: YYDEBUG(326, *YYCURSOR); yych = *++YYCURSOR; @@ -4247,12 +4241,12 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(331, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1630 "Zend/zend_language_scanner.l" +#line 1625 "Zend/zend_language_scanner.l" { ZVAL_LONG(zendlval, CG(zend_lineno)); return T_LINE; } -#line 4256 "Zend/zend_language_scanner.c" +#line 4250 "Zend/zend_language_scanner.c" yy332: YYDEBUG(332, *YYCURSOR); yych = *++YYCURSOR; @@ -4287,7 +4281,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(339, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1617 "Zend/zend_language_scanner.l" +#line 1612 "Zend/zend_language_scanner.l" { const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL; const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL; @@ -4300,7 +4294,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) zendlval->type = IS_STRING; return T_METHOD_C; } -#line 4304 "Zend/zend_language_scanner.c" +#line 4298 "Zend/zend_language_scanner.c" yy340: YYDEBUG(340, *YYCURSOR); yych = *++YYCURSOR; @@ -4351,7 +4345,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(350, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1607 "Zend/zend_language_scanner.l" +#line 1602 "Zend/zend_language_scanner.l" { zend_op_array *op_array = CG(active_op_array); if (op_array && op_array->function_name) { @@ -4361,7 +4355,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_FUNC_C; } -#line 4365 "Zend/zend_language_scanner.c" +#line 4359 "Zend/zend_language_scanner.c" yy351: YYDEBUG(351, *YYCURSOR); yych = *++YYCURSOR; @@ -4381,7 +4375,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(355, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1635 "Zend/zend_language_scanner.l" +#line 1630 "Zend/zend_language_scanner.l" { char *filename = zend_get_compiled_filename(TSRMLS_C); @@ -4391,7 +4385,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) ZVAL_STRING(zendlval, filename, 1); return T_FILE; } -#line 4395 "Zend/zend_language_scanner.c" +#line 4389 "Zend/zend_language_scanner.c" yy356: YYDEBUG(356, *YYCURSOR); yych = *++YYCURSOR; @@ -4421,7 +4415,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(362, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1597 "Zend/zend_language_scanner.l" +#line 1592 "Zend/zend_language_scanner.l" { zend_class_entry *ce = CG(active_class_entry); if (ce && ce->name && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) { @@ -4431,7 +4425,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_TRAIT_C; } -#line 4435 "Zend/zend_language_scanner.c" +#line 4429 "Zend/zend_language_scanner.c" yy363: YYDEBUG(363, *YYCURSOR); yych = *++YYCURSOR; @@ -4461,7 +4455,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(369, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1579 "Zend/zend_language_scanner.l" +#line 1574 "Zend/zend_language_scanner.l" { zend_class_entry *ce = CG(active_class_entry); if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) { @@ -4479,7 +4473,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_CLASS_C; } -#line 4483 "Zend/zend_language_scanner.c" +#line 4477 "Zend/zend_language_scanner.c" yy370: YYDEBUG(370, *YYCURSOR); yych = *++YYCURSOR; @@ -4541,11 +4535,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(382, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1296 "Zend/zend_language_scanner.l" +#line 1291 "Zend/zend_language_scanner.l" { return T_HALT_COMPILER; } -#line 4549 "Zend/zend_language_scanner.c" +#line 4543 "Zend/zend_language_scanner.c" yy383: YYDEBUG(383, *YYCURSOR); yych = *++YYCURSOR; @@ -4569,7 +4563,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_USE; } -#line 4573 "Zend/zend_language_scanner.c" +#line 4567 "Zend/zend_language_scanner.c" yy387: YYDEBUG(387, *YYCURSOR); yych = *++YYCURSOR; @@ -4588,11 +4582,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(390, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1324 "Zend/zend_language_scanner.l" +#line 1319 "Zend/zend_language_scanner.l" { return T_UNSET; } -#line 4596 "Zend/zend_language_scanner.c" +#line 4590 "Zend/zend_language_scanner.c" yy391: YYDEBUG(391, *YYCURSOR); ++YYCURSOR; @@ -4768,7 +4762,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_INT_CAST; } -#line 4772 "Zend/zend_language_scanner.c" +#line 4766 "Zend/zend_language_scanner.c" yy409: YYDEBUG(409, *YYCURSOR); yych = *++YYCURSOR; @@ -4816,7 +4810,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_DOUBLE_CAST; } -#line 4820 "Zend/zend_language_scanner.c" +#line 4814 "Zend/zend_language_scanner.c" yy418: YYDEBUG(418, *YYCURSOR); yych = *++YYCURSOR; @@ -4890,7 +4884,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_STRING_CAST; } -#line 4894 "Zend/zend_language_scanner.c" +#line 4888 "Zend/zend_language_scanner.c" yy432: YYDEBUG(432, *YYCURSOR); yych = *++YYCURSOR; @@ -4927,7 +4921,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_ARRAY_CAST; } -#line 4931 "Zend/zend_language_scanner.c" +#line 4925 "Zend/zend_language_scanner.c" yy439: YYDEBUG(439, *YYCURSOR); yych = *++YYCURSOR; @@ -4969,7 +4963,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_OBJECT_CAST; } -#line 4973 "Zend/zend_language_scanner.c" +#line 4967 "Zend/zend_language_scanner.c" yy447: YYDEBUG(447, *YYCURSOR); yych = *++YYCURSOR; @@ -5014,7 +5008,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_BOOL_CAST; } -#line 5018 "Zend/zend_language_scanner.c" +#line 5012 "Zend/zend_language_scanner.c" yy455: YYDEBUG(455, *YYCURSOR); yych = *++YYCURSOR; @@ -5078,7 +5072,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_UNSET_CAST; } -#line 5082 "Zend/zend_language_scanner.c" +#line 5076 "Zend/zend_language_scanner.c" yy467: YYDEBUG(467, *YYCURSOR); yych = *++YYCURSOR; @@ -5096,7 +5090,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_VAR; } -#line 5100 "Zend/zend_language_scanner.c" +#line 5094 "Zend/zend_language_scanner.c" yy470: YYDEBUG(470, *YYCURSOR); yych = *++YYCURSOR; @@ -5120,7 +5114,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_NEW; } -#line 5124 "Zend/zend_language_scanner.c" +#line 5118 "Zend/zend_language_scanner.c" yy474: YYDEBUG(474, *YYCURSOR); yych = *++YYCURSOR; @@ -5163,7 +5157,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_NAMESPACE; } -#line 5167 "Zend/zend_language_scanner.c" +#line 5161 "Zend/zend_language_scanner.c" yy482: YYDEBUG(482, *YYCURSOR); ++YYCURSOR; @@ -5173,7 +5167,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_PAAMAYIM_NEKUDOTAYIM; } -#line 5177 "Zend/zend_language_scanner.c" +#line 5171 "Zend/zend_language_scanner.c" yy484: YYDEBUG(484, *YYCURSOR); ++YYCURSOR; @@ -5195,21 +5189,21 @@ int lex_scan(zval *zendlval TSRMLS_DC) ++YYCURSOR; YYDEBUG(487, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1380 "Zend/zend_language_scanner.l" +#line 1375 "Zend/zend_language_scanner.l" { return T_MINUS_EQUAL; } -#line 5203 "Zend/zend_language_scanner.c" +#line 5197 "Zend/zend_language_scanner.c" yy488: YYDEBUG(488, *YYCURSOR); ++YYCURSOR; YYDEBUG(489, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1348 "Zend/zend_language_scanner.l" +#line 1343 "Zend/zend_language_scanner.l" { return T_DEC; } -#line 5213 "Zend/zend_language_scanner.c" +#line 5207 "Zend/zend_language_scanner.c" yy490: YYDEBUG(490, *YYCURSOR); ++YYCURSOR; @@ -5220,7 +5214,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); return T_OBJECT_OPERATOR; } -#line 5224 "Zend/zend_language_scanner.c" +#line 5218 "Zend/zend_language_scanner.c" yy492: YYDEBUG(492, *YYCURSOR); yych = *++YYCURSOR; @@ -5265,11 +5259,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(498, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1320 "Zend/zend_language_scanner.l" +#line 1315 "Zend/zend_language_scanner.l" { return T_PUBLIC; } -#line 5273 "Zend/zend_language_scanner.c" +#line 5267 "Zend/zend_language_scanner.c" yy499: YYDEBUG(499, *YYCURSOR); yych = *++YYCURSOR; @@ -5324,11 +5318,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(507, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1316 "Zend/zend_language_scanner.l" +#line 1311 "Zend/zend_language_scanner.l" { return T_PROTECTED; } -#line 5332 "Zend/zend_language_scanner.c" +#line 5326 "Zend/zend_language_scanner.c" yy508: YYDEBUG(508, *YYCURSOR); yych = *++YYCURSOR; @@ -5358,11 +5352,11 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(513, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1312 "Zend/zend_language_scanner.l" +#line 1307 "Zend/zend_language_scanner.l" { return T_PRIVATE; } -#line 5366 "Zend/zend_language_scanner.c" +#line 5360 "Zend/zend_language_scanner.c" yy514: YYDEBUG(514, *YYCURSOR); ++YYCURSOR; @@ -5375,7 +5369,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_PRINT; } -#line 5379 "Zend/zend_language_scanner.c" +#line 5373 "Zend/zend_language_scanner.c" yy516: YYDEBUG(516, *YYCURSOR); yych = *++YYCURSOR; @@ -5404,7 +5398,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_GOTO; } -#line 5408 "Zend/zend_language_scanner.c" +#line 5402 "Zend/zend_language_scanner.c" yy521: YYDEBUG(521, *YYCURSOR); yych = *++YYCURSOR; @@ -5432,7 +5426,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_GLOBAL; } -#line 5436 "Zend/zend_language_scanner.c" +#line 5430 "Zend/zend_language_scanner.c" yy526: YYDEBUG(526, *YYCURSOR); yych = *++YYCURSOR; @@ -5473,7 +5467,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) { return T_BREAK; } -#line 5477 "Zend/zend_language_scanner.c" +#line 5471 "Zend/zend_language_scanner.c" yy534: YYDEBUG(534, *YYCURSOR); yych = *++YYCURSOR; @@ -5482,58 +5476,57 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy535: YYDEBUG(535, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy547; - if (yych == 'a') goto yy547; + if (yych == 'A') goto yy542; + if (yych == 'a') goto yy542; goto yy187; yy536: YYDEBUG(536, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy543; - if (yych == 'p') goto yy543; - goto yy187; + if (yych == 'I') goto yy537; + if (yych != 'i') goto yy187; yy537: YYDEBUG(537, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy538; - if (yych != 'i') goto yy187; + if (yych == 'T') goto yy538; + if (yych != 't') goto yy187; yy538: YYDEBUG(538, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy539; - if (yych != 't') goto yy187; + if (yych == 'C') goto yy539; + if (yych != 'c') goto yy187; yy539: YYDEBUG(539, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy540; - if (yych != 'c') goto yy187; + if (yych == 'H') goto yy540; + if (yych != 'h') goto yy187; yy540: YYDEBUG(540, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy541; - if (yych != 'h') goto yy187; -yy541: - YYDEBUG(541, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(542, *YYCURSOR); + YYDEBUG(541, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1115 "Zend/zend_language_scanner.l" { return T_SWITCH; } -#line 5527 "Zend/zend_language_scanner.c" +#line 5515 "Zend/zend_language_scanner.c" +yy542: + YYDEBUG(542, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy543; + if (yych != 't') goto yy187; yy543: YYDEBUG(543, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy544; - if (yych != 'e') goto yy187; + if (yych == 'I') goto yy544; + if (yych != 'i') goto yy187; yy544: YYDEBUG(544, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy545; - if (yych != 'r') goto yy187; + if (yych == 'C') goto yy545; + if (yych != 'c') goto yy187; yy545: YYDEBUG(545, *YYCURSOR); ++YYCURSOR; @@ -5542,26 +5535,29 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(546, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1283 "Zend/zend_language_scanner.l" +#line 1295 "Zend/zend_language_scanner.l" { - return T_SUPER; + return T_STATIC; } -#line 5550 "Zend/zend_language_scanner.c" +#line 5543 "Zend/zend_language_scanner.c" yy547: YYDEBUG(547, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy548; - if (yych != 't') goto yy187; + if (yych == 'S') goto yy558; + if (yych == 's') goto yy558; + goto yy187; yy548: YYDEBUG(548, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy549; - if (yych != 'i') goto yy187; + if (yych == 'D') goto yy556; + if (yych == 'd') goto yy556; + goto yy187; yy549: YYDEBUG(549, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy550; - if (yych != 'c') goto yy187; + if (yych == 'R') goto yy552; + if (yych == 'r') goto yy552; + goto yy187; yy550: YYDEBUG(550, *YYCURSOR); ++YYCURSOR; @@ -5570,1647 +5566,1616 @@ int lex_scan(zval *zendlval TSRMLS_DC) } YYDEBUG(551, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1300 "Zend/zend_language_scanner.l" +#line 1111 "Zend/zend_language_scanner.l" { - return T_STATIC; + return T_AS; } -#line 5578 "Zend/zend_language_scanner.c" +#line 5574 "Zend/zend_language_scanner.c" yy552: YYDEBUG(552, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy563; - if (yych == 's') goto yy563; - goto yy187; + if (yych == 'A') goto yy553; + if (yych != 'a') goto yy187; yy553: YYDEBUG(553, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy561; - if (yych == 'd') goto yy561; - goto yy187; + if (yych == 'Y') goto yy554; + if (yych != 'y') goto yy187; yy554: YYDEBUG(554, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy557; - if (yych == 'r') goto yy557; - goto yy187; -yy555: - YYDEBUG(555, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 4) { - goto yy186; - } - YYDEBUG(556, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1111 "Zend/zend_language_scanner.l" - { - return T_AS; -} -#line 5609 "Zend/zend_language_scanner.c" -yy557: - YYDEBUG(557, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy558; - if (yych != 'a') goto yy187; -yy558: - YYDEBUG(558, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'Y') goto yy559; - if (yych != 'y') goto yy187; -yy559: - YYDEBUG(559, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(560, *YYCURSOR); + YYDEBUG(555, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1336 "Zend/zend_language_scanner.l" +#line 1331 "Zend/zend_language_scanner.l" { return T_ARRAY; } -#line 5632 "Zend/zend_language_scanner.c" -yy561: - YYDEBUG(561, *YYCURSOR); +#line 5597 "Zend/zend_language_scanner.c" +yy556: + YYDEBUG(556, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(562, *YYCURSOR); + YYDEBUG(557, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1432 "Zend/zend_language_scanner.l" +#line 1427 "Zend/zend_language_scanner.l" { return T_LOGICAL_AND; } -#line 5645 "Zend/zend_language_scanner.c" -yy563: - YYDEBUG(563, *YYCURSOR); +#line 5610 "Zend/zend_language_scanner.c" +yy558: + YYDEBUG(558, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy564; + if (yych == 'T') goto yy559; if (yych != 't') goto yy187; -yy564: - YYDEBUG(564, *YYCURSOR); +yy559: + YYDEBUG(559, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy565; + if (yych == 'R') goto yy560; if (yych != 'r') goto yy187; -yy565: - YYDEBUG(565, *YYCURSOR); +yy560: + YYDEBUG(560, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy566; + if (yych == 'A') goto yy561; if (yych != 'a') goto yy187; -yy566: - YYDEBUG(566, *YYCURSOR); +yy561: + YYDEBUG(561, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy567; + if (yych == 'C') goto yy562; if (yych != 'c') goto yy187; -yy567: - YYDEBUG(567, *YYCURSOR); +yy562: + YYDEBUG(562, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy568; + if (yych == 'T') goto yy563; if (yych != 't') goto yy187; -yy568: - YYDEBUG(568, *YYCURSOR); +yy563: + YYDEBUG(563, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(569, *YYCURSOR); + YYDEBUG(564, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1304 "Zend/zend_language_scanner.l" +#line 1299 "Zend/zend_language_scanner.l" { return T_ABSTRACT; } -#line 5683 "Zend/zend_language_scanner.c" -yy570: - YYDEBUG(570, *YYCURSOR); +#line 5648 "Zend/zend_language_scanner.c" +yy565: + YYDEBUG(565, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy571; + if (yych == 'I') goto yy566; if (yych != 'i') goto yy187; -yy571: - YYDEBUG(571, *YYCURSOR); +yy566: + YYDEBUG(566, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy572; + if (yych == 'L') goto yy567; if (yych != 'l') goto yy187; -yy572: - YYDEBUG(572, *YYCURSOR); +yy567: + YYDEBUG(567, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy573; + if (yych == 'E') goto yy568; if (yych != 'e') goto yy187; -yy573: - YYDEBUG(573, *YYCURSOR); +yy568: + YYDEBUG(568, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(574, *YYCURSOR); + YYDEBUG(569, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1071 "Zend/zend_language_scanner.l" { return T_WHILE; } -#line 5711 "Zend/zend_language_scanner.c" -yy575: - YYDEBUG(575, *YYCURSOR); +#line 5676 "Zend/zend_language_scanner.c" +yy570: + YYDEBUG(570, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(576, *YYCURSOR); + YYDEBUG(571, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1055 "Zend/zend_language_scanner.l" { return T_IF; } -#line 5724 "Zend/zend_language_scanner.c" -yy577: - YYDEBUG(577, *YYCURSOR); +#line 5689 "Zend/zend_language_scanner.c" +yy572: + YYDEBUG(572, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy619; - if (yych == 'p') goto yy619; + if (yych == 'P') goto yy614; + if (yych == 'p') goto yy614; goto yy187; -yy578: - YYDEBUG(578, *YYCURSOR); +yy573: + YYDEBUG(573, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'C') { if (yych <= 'B') goto yy187; - goto yy586; + goto yy581; } else { if (yych <= 'R') goto yy187; - if (yych <= 'S') goto yy584; - goto yy585; + if (yych <= 'S') goto yy579; + goto yy580; } } else { if (yych <= 'r') { - if (yych == 'c') goto yy586; + if (yych == 'c') goto yy581; goto yy187; } else { - if (yych <= 's') goto yy584; - if (yych <= 't') goto yy585; + if (yych <= 's') goto yy579; + if (yych <= 't') goto yy580; goto yy187; } } -yy579: - YYDEBUG(579, *YYCURSOR); +yy574: + YYDEBUG(574, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy580; + if (yych == 'S') goto yy575; if (yych != 's') goto yy187; -yy580: - YYDEBUG(580, *YYCURSOR); +yy575: + YYDEBUG(575, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy581; + if (yych == 'E') goto yy576; if (yych != 'e') goto yy187; -yy581: - YYDEBUG(581, *YYCURSOR); +yy576: + YYDEBUG(576, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy582; + if (yych == 'T') goto yy577; if (yych != 't') goto yy187; -yy582: - YYDEBUG(582, *YYCURSOR); +yy577: + YYDEBUG(577, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(583, *YYCURSOR); + YYDEBUG(578, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1288 "Zend/zend_language_scanner.l" +#line 1283 "Zend/zend_language_scanner.l" { return T_ISSET; } -#line 5780 "Zend/zend_language_scanner.c" -yy584: - YYDEBUG(584, *YYCURSOR); +#line 5745 "Zend/zend_language_scanner.c" +yy579: + YYDEBUG(579, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy605; - if (yych == 't') goto yy605; + if (yych == 'T') goto yy600; + if (yych == 't') goto yy600; goto yy187; -yy585: - YYDEBUG(585, *YYCURSOR); +yy580: + YYDEBUG(580, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy598; - if (yych == 'e') goto yy598; + if (yych == 'E') goto yy593; + if (yych == 'e') goto yy593; goto yy187; -yy586: - YYDEBUG(586, *YYCURSOR); +yy581: + YYDEBUG(581, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy587; + if (yych == 'L') goto yy582; if (yych != 'l') goto yy187; -yy587: - YYDEBUG(587, *YYCURSOR); +yy582: + YYDEBUG(582, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy588; + if (yych == 'U') goto yy583; if (yych != 'u') goto yy187; -yy588: - YYDEBUG(588, *YYCURSOR); +yy583: + YYDEBUG(583, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy589; + if (yych == 'D') goto yy584; if (yych != 'd') goto yy187; -yy589: - YYDEBUG(589, *YYCURSOR); +yy584: + YYDEBUG(584, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy590; + if (yych == 'E') goto yy585; if (yych != 'e') goto yy187; -yy590: - YYDEBUG(590, *YYCURSOR); +yy585: + YYDEBUG(585, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '9') { if (yych >= '0') goto yy186; } else { - if (yych <= '@') goto yy591; + if (yych <= '@') goto yy586; if (yych <= 'Z') goto yy186; } } else { if (yych <= '`') { - if (yych <= '_') goto yy592; + if (yych <= '_') goto yy587; } else { if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy591: - YYDEBUG(591, *YYCURSOR); +yy586: + YYDEBUG(586, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1251 "Zend/zend_language_scanner.l" { return T_INCLUDE; } -#line 5838 "Zend/zend_language_scanner.c" -yy592: - YYDEBUG(592, *YYCURSOR); +#line 5803 "Zend/zend_language_scanner.c" +yy587: + YYDEBUG(587, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy593; + if (yych == 'O') goto yy588; if (yych != 'o') goto yy187; -yy593: - YYDEBUG(593, *YYCURSOR); +yy588: + YYDEBUG(588, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy594; + if (yych == 'N') goto yy589; if (yych != 'n') goto yy187; -yy594: - YYDEBUG(594, *YYCURSOR); +yy589: + YYDEBUG(589, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy595; + if (yych == 'C') goto yy590; if (yych != 'c') goto yy187; -yy595: - YYDEBUG(595, *YYCURSOR); +yy590: + YYDEBUG(590, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy596; + if (yych == 'E') goto yy591; if (yych != 'e') goto yy187; -yy596: - YYDEBUG(596, *YYCURSOR); +yy591: + YYDEBUG(591, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(597, *YYCURSOR); + YYDEBUG(592, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1255 "Zend/zend_language_scanner.l" { return T_INCLUDE_ONCE; } -#line 5871 "Zend/zend_language_scanner.c" -yy598: - YYDEBUG(598, *YYCURSOR); +#line 5836 "Zend/zend_language_scanner.c" +yy593: + YYDEBUG(593, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy599; + if (yych == 'R') goto yy594; if (yych != 'r') goto yy187; -yy599: - YYDEBUG(599, *YYCURSOR); +yy594: + YYDEBUG(594, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy600; + if (yych == 'F') goto yy595; if (yych != 'f') goto yy187; -yy600: - YYDEBUG(600, *YYCURSOR); +yy595: + YYDEBUG(595, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy601; + if (yych == 'A') goto yy596; if (yych != 'a') goto yy187; -yy601: - YYDEBUG(601, *YYCURSOR); +yy596: + YYDEBUG(596, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy602; + if (yych == 'C') goto yy597; if (yych != 'c') goto yy187; -yy602: - YYDEBUG(602, *YYCURSOR); +yy597: + YYDEBUG(597, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy603; + if (yych == 'E') goto yy598; if (yych != 'e') goto yy187; -yy603: - YYDEBUG(603, *YYCURSOR); +yy598: + YYDEBUG(598, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(604, *YYCURSOR); + YYDEBUG(599, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1155 "Zend/zend_language_scanner.l" { return T_INTERFACE; } -#line 5909 "Zend/zend_language_scanner.c" -yy605: - YYDEBUG(605, *YYCURSOR); +#line 5874 "Zend/zend_language_scanner.c" +yy600: + YYDEBUG(600, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { - if (yych == 'A') goto yy606; + if (yych == 'A') goto yy601; if (yych <= 'D') goto yy187; - goto yy607; + goto yy602; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; } else { - if (yych == 'e') goto yy607; + if (yych == 'e') goto yy602; goto yy187; } } -yy606: - YYDEBUG(606, *YYCURSOR); +yy601: + YYDEBUG(601, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy613; - if (yych == 'n') goto yy613; + if (yych == 'N') goto yy608; + if (yych == 'n') goto yy608; goto yy187; -yy607: - YYDEBUG(607, *YYCURSOR); +yy602: + YYDEBUG(602, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy608; + if (yych == 'A') goto yy603; if (yych != 'a') goto yy187; -yy608: - YYDEBUG(608, *YYCURSOR); +yy603: + YYDEBUG(603, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy609; + if (yych == 'D') goto yy604; if (yych != 'd') goto yy187; -yy609: - YYDEBUG(609, *YYCURSOR); +yy604: + YYDEBUG(604, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy610; + if (yych == 'O') goto yy605; if (yych != 'o') goto yy187; -yy610: - YYDEBUG(610, *YYCURSOR); +yy605: + YYDEBUG(605, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy611; + if (yych == 'F') goto yy606; if (yych != 'f') goto yy187; -yy611: - YYDEBUG(611, *YYCURSOR); +yy606: + YYDEBUG(606, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(612, *YYCURSOR); + YYDEBUG(607, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1275 "Zend/zend_language_scanner.l" { return T_INSTEADOF; } -#line 5963 "Zend/zend_language_scanner.c" -yy613: - YYDEBUG(613, *YYCURSOR); +#line 5928 "Zend/zend_language_scanner.c" +yy608: + YYDEBUG(608, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy614; + if (yych == 'C') goto yy609; if (yych != 'c') goto yy187; -yy614: - YYDEBUG(614, *YYCURSOR); +yy609: + YYDEBUG(609, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy615; + if (yych == 'E') goto yy610; if (yych != 'e') goto yy187; -yy615: - YYDEBUG(615, *YYCURSOR); +yy610: + YYDEBUG(610, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy616; + if (yych == 'O') goto yy611; if (yych != 'o') goto yy187; -yy616: - YYDEBUG(616, *YYCURSOR); +yy611: + YYDEBUG(611, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy617; + if (yych == 'F') goto yy612; if (yych != 'f') goto yy187; -yy617: - YYDEBUG(617, *YYCURSOR); +yy612: + YYDEBUG(612, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(618, *YYCURSOR); + YYDEBUG(613, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1107 "Zend/zend_language_scanner.l" { return T_INSTANCEOF; } -#line 5996 "Zend/zend_language_scanner.c" -yy619: - YYDEBUG(619, *YYCURSOR); +#line 5961 "Zend/zend_language_scanner.c" +yy614: + YYDEBUG(614, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy620; + if (yych == 'L') goto yy615; if (yych != 'l') goto yy187; -yy620: - YYDEBUG(620, *YYCURSOR); +yy615: + YYDEBUG(615, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy621; + if (yych == 'E') goto yy616; if (yych != 'e') goto yy187; -yy621: - YYDEBUG(621, *YYCURSOR); +yy616: + YYDEBUG(616, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy622; + if (yych == 'M') goto yy617; if (yych != 'm') goto yy187; -yy622: - YYDEBUG(622, *YYCURSOR); +yy617: + YYDEBUG(617, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy623; + if (yych == 'E') goto yy618; if (yych != 'e') goto yy187; -yy623: - YYDEBUG(623, *YYCURSOR); +yy618: + YYDEBUG(618, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy624; + if (yych == 'N') goto yy619; if (yych != 'n') goto yy187; -yy624: - YYDEBUG(624, *YYCURSOR); +yy619: + YYDEBUG(619, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy625; + if (yych == 'T') goto yy620; if (yych != 't') goto yy187; -yy625: - YYDEBUG(625, *YYCURSOR); +yy620: + YYDEBUG(620, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy626; + if (yych == 'S') goto yy621; if (yych != 's') goto yy187; -yy626: - YYDEBUG(626, *YYCURSOR); +yy621: + YYDEBUG(621, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(627, *YYCURSOR); + YYDEBUG(622, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1167 "Zend/zend_language_scanner.l" { return T_IMPLEMENTS; } -#line 6044 "Zend/zend_language_scanner.c" -yy628: - YYDEBUG(628, *YYCURSOR); +#line 6009 "Zend/zend_language_scanner.c" +yy623: + YYDEBUG(623, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy636; - if (yych == 'r') goto yy636; + if (yych == 'R') goto yy631; + if (yych == 'r') goto yy631; goto yy187; -yy629: - YYDEBUG(629, *YYCURSOR); +yy624: + YYDEBUG(624, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { - if (yych == 'A') goto yy632; + if (yych == 'A') goto yy627; if (yych <= 'X') goto yy187; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; - goto yy632; + goto yy627; } else { if (yych != 'y') goto yy187; } } - YYDEBUG(630, *YYCURSOR); + YYDEBUG(625, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(631, *YYCURSOR); + YYDEBUG(626, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1039 "Zend/zend_language_scanner.l" { return T_TRY; } -#line 6076 "Zend/zend_language_scanner.c" -yy632: - YYDEBUG(632, *YYCURSOR); +#line 6041 "Zend/zend_language_scanner.c" +yy627: + YYDEBUG(627, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy633; + if (yych == 'I') goto yy628; if (yych != 'i') goto yy187; -yy633: - YYDEBUG(633, *YYCURSOR); +yy628: + YYDEBUG(628, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy634; + if (yych == 'T') goto yy629; if (yych != 't') goto yy187; -yy634: - YYDEBUG(634, *YYCURSOR); +yy629: + YYDEBUG(629, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(635, *YYCURSOR); + YYDEBUG(630, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1159 "Zend/zend_language_scanner.l" { return T_TRAIT; } -#line 6099 "Zend/zend_language_scanner.c" -yy636: - YYDEBUG(636, *YYCURSOR); +#line 6064 "Zend/zend_language_scanner.c" +yy631: + YYDEBUG(631, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy637; + if (yych == 'O') goto yy632; if (yych != 'o') goto yy187; -yy637: - YYDEBUG(637, *YYCURSOR); +yy632: + YYDEBUG(632, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy638; + if (yych == 'W') goto yy633; if (yych != 'w') goto yy187; -yy638: - YYDEBUG(638, *YYCURSOR); +yy633: + YYDEBUG(633, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(639, *YYCURSOR); + YYDEBUG(634, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1051 "Zend/zend_language_scanner.l" { return T_THROW; } -#line 6122 "Zend/zend_language_scanner.c" -yy640: - YYDEBUG(640, *YYCURSOR); +#line 6087 "Zend/zend_language_scanner.c" +yy635: + YYDEBUG(635, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy641; + if (yych == 'E') goto yy636; if (yych != 'e') goto yy187; -yy641: - YYDEBUG(641, *YYCURSOR); +yy636: + YYDEBUG(636, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy642; + if (yych == 'L') goto yy637; if (yych != 'l') goto yy187; -yy642: - YYDEBUG(642, *YYCURSOR); +yy637: + YYDEBUG(637, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy643; + if (yych == 'D') goto yy638; if (yych != 'd') goto yy187; -yy643: - YYDEBUG(643, *YYCURSOR); +yy638: + YYDEBUG(638, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(644, *YYCURSOR); + YYDEBUG(639, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1035 "Zend/zend_language_scanner.l" { return T_YIELD; } -#line 6150 "Zend/zend_language_scanner.c" -yy645: - YYDEBUG(645, *YYCURSOR); +#line 6115 "Zend/zend_language_scanner.c" +yy640: + YYDEBUG(640, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { - if (yych == 'Q') goto yy647; + if (yych == 'Q') goto yy642; if (yych <= 'S') goto yy187; } else { if (yych <= 'q') { if (yych <= 'p') goto yy187; - goto yy647; + goto yy642; } else { if (yych != 't') goto yy187; } } - YYDEBUG(646, *YYCURSOR); + YYDEBUG(641, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy659; - if (yych == 'u') goto yy659; + if (yych == 'U') goto yy654; + if (yych == 'u') goto yy654; goto yy187; -yy647: - YYDEBUG(647, *YYCURSOR); +yy642: + YYDEBUG(642, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy648; + if (yych == 'U') goto yy643; if (yych != 'u') goto yy187; -yy648: - YYDEBUG(648, *YYCURSOR); +yy643: + YYDEBUG(643, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy649; + if (yych == 'I') goto yy644; if (yych != 'i') goto yy187; -yy649: - YYDEBUG(649, *YYCURSOR); +yy644: + YYDEBUG(644, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy650; + if (yych == 'R') goto yy645; if (yych != 'r') goto yy187; -yy650: - YYDEBUG(650, *YYCURSOR); +yy645: + YYDEBUG(645, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy651; + if (yych == 'E') goto yy646; if (yych != 'e') goto yy187; -yy651: - YYDEBUG(651, *YYCURSOR); +yy646: + YYDEBUG(646, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '9') { if (yych >= '0') goto yy186; } else { - if (yych <= '@') goto yy652; + if (yych <= '@') goto yy647; if (yych <= 'Z') goto yy186; } } else { if (yych <= '`') { - if (yych <= '_') goto yy653; + if (yych <= '_') goto yy648; } else { if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy652: - YYDEBUG(652, *YYCURSOR); +yy647: + YYDEBUG(647, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1259 "Zend/zend_language_scanner.l" { return T_REQUIRE; } -#line 6215 "Zend/zend_language_scanner.c" -yy653: - YYDEBUG(653, *YYCURSOR); +#line 6180 "Zend/zend_language_scanner.c" +yy648: + YYDEBUG(648, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy654; + if (yych == 'O') goto yy649; if (yych != 'o') goto yy187; -yy654: - YYDEBUG(654, *YYCURSOR); +yy649: + YYDEBUG(649, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy655; + if (yych == 'N') goto yy650; if (yych != 'n') goto yy187; -yy655: - YYDEBUG(655, *YYCURSOR); +yy650: + YYDEBUG(650, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy656; + if (yych == 'C') goto yy651; if (yych != 'c') goto yy187; -yy656: - YYDEBUG(656, *YYCURSOR); +yy651: + YYDEBUG(651, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy657; + if (yych == 'E') goto yy652; if (yych != 'e') goto yy187; -yy657: - YYDEBUG(657, *YYCURSOR); +yy652: + YYDEBUG(652, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(658, *YYCURSOR); + YYDEBUG(653, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1263 "Zend/zend_language_scanner.l" { return T_REQUIRE_ONCE; } -#line 6248 "Zend/zend_language_scanner.c" -yy659: - YYDEBUG(659, *YYCURSOR); +#line 6213 "Zend/zend_language_scanner.c" +yy654: + YYDEBUG(654, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy660; + if (yych == 'R') goto yy655; if (yych != 'r') goto yy187; -yy660: - YYDEBUG(660, *YYCURSOR); +yy655: + YYDEBUG(655, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy661; + if (yych == 'N') goto yy656; if (yych != 'n') goto yy187; -yy661: - YYDEBUG(661, *YYCURSOR); +yy656: + YYDEBUG(656, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(662, *YYCURSOR); + YYDEBUG(657, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1031 "Zend/zend_language_scanner.l" { return T_RETURN; } -#line 6271 "Zend/zend_language_scanner.c" -yy663: - YYDEBUG(663, *YYCURSOR); +#line 6236 "Zend/zend_language_scanner.c" +yy658: + YYDEBUG(658, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'L') { if (yych <= 'K') goto yy187; - goto yy686; + goto yy681; } else { if (yych <= 'R') goto yy187; - if (yych <= 'S') goto yy685; - goto yy684; + if (yych <= 'S') goto yy680; + goto yy679; } } else { if (yych <= 'r') { - if (yych == 'l') goto yy686; + if (yych == 'l') goto yy681; goto yy187; } else { - if (yych <= 's') goto yy685; - if (yych <= 't') goto yy684; + if (yych <= 's') goto yy680; + if (yych <= 't') goto yy679; goto yy187; } } -yy664: - YYDEBUG(664, *YYCURSOR); +yy659: + YYDEBUG(659, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { - if (yych == 'A') goto yy676; + if (yych == 'A') goto yy671; if (yych <= 'N') goto yy187; - goto yy677; + goto yy672; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; - goto yy676; + goto yy671; } else { - if (yych == 'o') goto yy677; + if (yych == 'o') goto yy672; goto yy187; } } -yy665: - YYDEBUG(665, *YYCURSOR); +yy660: + YYDEBUG(660, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy666; + if (yych == 'N') goto yy661; if (yych != 'n') goto yy187; -yy666: - YYDEBUG(666, *YYCURSOR); +yy661: + YYDEBUG(661, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'R') goto yy187; - if (yych >= 'T') goto yy668; + if (yych >= 'T') goto yy663; } else { if (yych <= 'r') goto yy187; - if (yych <= 's') goto yy667; - if (yych <= 't') goto yy668; + if (yych <= 's') goto yy662; + if (yych <= 't') goto yy663; goto yy187; } -yy667: - YYDEBUG(667, *YYCURSOR); +yy662: + YYDEBUG(662, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy674; - if (yych == 't') goto yy674; + if (yych == 'T') goto yy669; + if (yych == 't') goto yy669; goto yy187; -yy668: - YYDEBUG(668, *YYCURSOR); +yy663: + YYDEBUG(663, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy669; + if (yych == 'I') goto yy664; if (yych != 'i') goto yy187; -yy669: - YYDEBUG(669, *YYCURSOR); +yy664: + YYDEBUG(664, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy670; + if (yych == 'N') goto yy665; if (yych != 'n') goto yy187; -yy670: - YYDEBUG(670, *YYCURSOR); +yy665: + YYDEBUG(665, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy671; + if (yych == 'U') goto yy666; if (yych != 'u') goto yy187; -yy671: - YYDEBUG(671, *YYCURSOR); +yy666: + YYDEBUG(666, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy672; + if (yych == 'E') goto yy667; if (yych != 'e') goto yy187; -yy672: - YYDEBUG(672, *YYCURSOR); +yy667: + YYDEBUG(667, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(673, *YYCURSOR); + YYDEBUG(668, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1135 "Zend/zend_language_scanner.l" { return T_CONTINUE; } -#line 6365 "Zend/zend_language_scanner.c" -yy674: - YYDEBUG(674, *YYCURSOR); +#line 6330 "Zend/zend_language_scanner.c" +yy669: + YYDEBUG(669, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(675, *YYCURSOR); + YYDEBUG(670, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1027 "Zend/zend_language_scanner.l" { return T_CONST; } -#line 6378 "Zend/zend_language_scanner.c" -yy676: - YYDEBUG(676, *YYCURSOR); +#line 6343 "Zend/zend_language_scanner.c" +yy671: + YYDEBUG(671, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy681; - if (yych == 's') goto yy681; + if (yych == 'S') goto yy676; + if (yych == 's') goto yy676; goto yy187; -yy677: - YYDEBUG(677, *YYCURSOR); +yy672: + YYDEBUG(672, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy678; + if (yych == 'N') goto yy673; if (yych != 'n') goto yy187; -yy678: - YYDEBUG(678, *YYCURSOR); +yy673: + YYDEBUG(673, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy679; + if (yych == 'E') goto yy674; if (yych != 'e') goto yy187; -yy679: - YYDEBUG(679, *YYCURSOR); +yy674: + YYDEBUG(674, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(680, *YYCURSOR); + YYDEBUG(675, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1211 "Zend/zend_language_scanner.l" { return T_CLONE; } -#line 6407 "Zend/zend_language_scanner.c" -yy681: - YYDEBUG(681, *YYCURSOR); +#line 6372 "Zend/zend_language_scanner.c" +yy676: + YYDEBUG(676, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy682; + if (yych == 'S') goto yy677; if (yych != 's') goto yy187; -yy682: - YYDEBUG(682, *YYCURSOR); +yy677: + YYDEBUG(677, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(683, *YYCURSOR); + YYDEBUG(678, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1151 "Zend/zend_language_scanner.l" { return T_CLASS; } -#line 6425 "Zend/zend_language_scanner.c" -yy684: - YYDEBUG(684, *YYCURSOR); +#line 6390 "Zend/zend_language_scanner.c" +yy679: + YYDEBUG(679, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy695; - if (yych == 'c') goto yy695; + if (yych == 'C') goto yy690; + if (yych == 'c') goto yy690; goto yy187; -yy685: - YYDEBUG(685, *YYCURSOR); +yy680: + YYDEBUG(680, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy693; - if (yych == 'e') goto yy693; + if (yych == 'E') goto yy688; + if (yych == 'e') goto yy688; goto yy187; -yy686: - YYDEBUG(686, *YYCURSOR); +yy681: + YYDEBUG(681, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy687; + if (yych == 'L') goto yy682; if (yych != 'l') goto yy187; -yy687: - YYDEBUG(687, *YYCURSOR); +yy682: + YYDEBUG(682, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy688; + if (yych == 'A') goto yy683; if (yych != 'a') goto yy187; -yy688: - YYDEBUG(688, *YYCURSOR); +yy683: + YYDEBUG(683, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'B') goto yy689; + if (yych == 'B') goto yy684; if (yych != 'b') goto yy187; -yy689: - YYDEBUG(689, *YYCURSOR); +yy684: + YYDEBUG(684, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy690; + if (yych == 'L') goto yy685; if (yych != 'l') goto yy187; -yy690: - YYDEBUG(690, *YYCURSOR); +yy685: + YYDEBUG(685, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy691; + if (yych == 'E') goto yy686; if (yych != 'e') goto yy187; -yy691: - YYDEBUG(691, *YYCURSOR); +yy686: + YYDEBUG(686, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(692, *YYCURSOR); + YYDEBUG(687, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1340 "Zend/zend_language_scanner.l" +#line 1335 "Zend/zend_language_scanner.l" { return T_CALLABLE; } -#line 6475 "Zend/zend_language_scanner.c" -yy693: - YYDEBUG(693, *YYCURSOR); +#line 6440 "Zend/zend_language_scanner.c" +yy688: + YYDEBUG(688, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(694, *YYCURSOR); + YYDEBUG(689, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1123 "Zend/zend_language_scanner.l" { return T_CASE; } -#line 6488 "Zend/zend_language_scanner.c" -yy695: - YYDEBUG(695, *YYCURSOR); +#line 6453 "Zend/zend_language_scanner.c" +yy690: + YYDEBUG(690, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy696; + if (yych == 'H') goto yy691; if (yych != 'h') goto yy187; -yy696: - YYDEBUG(696, *YYCURSOR); +yy691: + YYDEBUG(691, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(697, *YYCURSOR); + YYDEBUG(692, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1043 "Zend/zend_language_scanner.l" { return T_CATCH; } -#line 6506 "Zend/zend_language_scanner.c" -yy698: - YYDEBUG(698, *YYCURSOR); +#line 6471 "Zend/zend_language_scanner.c" +yy693: + YYDEBUG(693, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy715; - if (yych == 'n') goto yy715; + if (yych == 'N') goto yy710; + if (yych == 'n') goto yy710; goto yy187; -yy699: - YYDEBUG(699, *YYCURSOR); +yy694: + YYDEBUG(694, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy708; - if (yych == 'r') goto yy708; + if (yych == 'R') goto yy703; + if (yych == 'r') goto yy703; goto yy187; -yy700: - YYDEBUG(700, *YYCURSOR); +yy695: + YYDEBUG(695, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy701; + if (yych == 'N') goto yy696; if (yych != 'n') goto yy187; -yy701: - YYDEBUG(701, *YYCURSOR); +yy696: + YYDEBUG(696, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy702; + if (yych == 'C') goto yy697; if (yych != 'c') goto yy187; -yy702: - YYDEBUG(702, *YYCURSOR); +yy697: + YYDEBUG(697, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy703; + if (yych == 'T') goto yy698; if (yych != 't') goto yy187; -yy703: - YYDEBUG(703, *YYCURSOR); +yy698: + YYDEBUG(698, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy704; + if (yych == 'I') goto yy699; if (yych != 'i') goto yy187; -yy704: - YYDEBUG(704, *YYCURSOR); +yy699: + YYDEBUG(699, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy705; + if (yych == 'O') goto yy700; if (yych != 'o') goto yy187; -yy705: - YYDEBUG(705, *YYCURSOR); +yy700: + YYDEBUG(700, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy706; + if (yych == 'N') goto yy701; if (yych != 'n') goto yy187; -yy706: - YYDEBUG(706, *YYCURSOR); +yy701: + YYDEBUG(701, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(707, *YYCURSOR); + YYDEBUG(702, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1023 "Zend/zend_language_scanner.l" { return T_FUNCTION; } -#line 6561 "Zend/zend_language_scanner.c" -yy708: - YYDEBUG(708, *YYCURSOR); +#line 6526 "Zend/zend_language_scanner.c" +yy703: + YYDEBUG(703, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy709; + if (yych <= '/') goto yy704; if (yych <= '9') goto yy186; } else { - if (yych == 'E') goto yy710; + if (yych == 'E') goto yy705; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'd') { if (yych != '`') goto yy186; } else { - if (yych <= 'e') goto yy710; + if (yych <= 'e') goto yy705; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy709: - YYDEBUG(709, *YYCURSOR); +yy704: + YYDEBUG(704, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1083 "Zend/zend_language_scanner.l" { return T_FOR; } -#line 6589 "Zend/zend_language_scanner.c" -yy710: - YYDEBUG(710, *YYCURSOR); +#line 6554 "Zend/zend_language_scanner.c" +yy705: + YYDEBUG(705, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy711; + if (yych == 'A') goto yy706; if (yych != 'a') goto yy187; -yy711: - YYDEBUG(711, *YYCURSOR); +yy706: + YYDEBUG(706, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy712; + if (yych == 'C') goto yy707; if (yych != 'c') goto yy187; -yy712: - YYDEBUG(712, *YYCURSOR); +yy707: + YYDEBUG(707, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy713; + if (yych == 'H') goto yy708; if (yych != 'h') goto yy187; -yy713: - YYDEBUG(713, *YYCURSOR); +yy708: + YYDEBUG(708, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(714, *YYCURSOR); + YYDEBUG(709, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1091 "Zend/zend_language_scanner.l" { return T_FOREACH; } -#line 6617 "Zend/zend_language_scanner.c" -yy715: - YYDEBUG(715, *YYCURSOR); +#line 6582 "Zend/zend_language_scanner.c" +yy710: + YYDEBUG(710, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy716; + if (yych == 'A') goto yy711; if (yych != 'a') goto yy187; -yy716: - YYDEBUG(716, *YYCURSOR); +yy711: + YYDEBUG(711, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy717; + if (yych == 'L') goto yy712; if (yych != 'l') goto yy187; -yy717: - YYDEBUG(717, *YYCURSOR); +yy712: + YYDEBUG(712, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy718; + if (yych <= '/') goto yy713; if (yych <= '9') goto yy186; } else { - if (yych == 'L') goto yy719; + if (yych == 'L') goto yy714; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'k') { if (yych != '`') goto yy186; } else { - if (yych <= 'l') goto yy719; + if (yych <= 'l') goto yy714; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy718: - YYDEBUG(718, *YYCURSOR); +yy713: + YYDEBUG(713, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1308 "Zend/zend_language_scanner.l" +#line 1303 "Zend/zend_language_scanner.l" { return T_FINAL; } -#line 6655 "Zend/zend_language_scanner.c" -yy719: - YYDEBUG(719, *YYCURSOR); +#line 6620 "Zend/zend_language_scanner.c" +yy714: + YYDEBUG(714, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy720; + if (yych == 'Y') goto yy715; if (yych != 'y') goto yy187; -yy720: - YYDEBUG(720, *YYCURSOR); +yy715: + YYDEBUG(715, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(721, *YYCURSOR); + YYDEBUG(716, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1047 "Zend/zend_language_scanner.l" { return T_FINALLY; } -#line 6673 "Zend/zend_language_scanner.c" -yy722: - YYDEBUG(722, *YYCURSOR); +#line 6638 "Zend/zend_language_scanner.c" +yy717: + YYDEBUG(717, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'F') { - if (yych == 'C') goto yy728; + if (yych == 'C') goto yy723; if (yych <= 'E') goto yy187; - goto yy729; + goto yy724; } else { if (yych <= 'c') { if (yych <= 'b') goto yy187; - goto yy728; + goto yy723; } else { - if (yych == 'f') goto yy729; + if (yych == 'f') goto yy724; goto yy187; } } -yy723: - YYDEBUG(723, *YYCURSOR); +yy718: + YYDEBUG(718, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy726; - if (yych == 'e') goto yy726; + if (yych == 'E') goto yy721; + if (yych == 'e') goto yy721; goto yy187; -yy724: - YYDEBUG(724, *YYCURSOR); +yy719: + YYDEBUG(719, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(725, *YYCURSOR); + YYDEBUG(720, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1079 "Zend/zend_language_scanner.l" { return T_DO; } -#line 6708 "Zend/zend_language_scanner.c" -yy726: - YYDEBUG(726, *YYCURSOR); +#line 6673 "Zend/zend_language_scanner.c" +yy721: + YYDEBUG(721, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(727, *YYCURSOR); + YYDEBUG(722, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1019 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 6721 "Zend/zend_language_scanner.c" -yy728: - YYDEBUG(728, *YYCURSOR); +#line 6686 "Zend/zend_language_scanner.c" +yy723: + YYDEBUG(723, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy735; - if (yych == 'l') goto yy735; + if (yych == 'L') goto yy730; + if (yych == 'l') goto yy730; goto yy187; -yy729: - YYDEBUG(729, *YYCURSOR); +yy724: + YYDEBUG(724, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy730; + if (yych == 'A') goto yy725; if (yych != 'a') goto yy187; -yy730: - YYDEBUG(730, *YYCURSOR); +yy725: + YYDEBUG(725, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy731; + if (yych == 'U') goto yy726; if (yych != 'u') goto yy187; -yy731: - YYDEBUG(731, *YYCURSOR); +yy726: + YYDEBUG(726, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy732; + if (yych == 'L') goto yy727; if (yych != 'l') goto yy187; -yy732: - YYDEBUG(732, *YYCURSOR); +yy727: + YYDEBUG(727, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy733; + if (yych == 'T') goto yy728; if (yych != 't') goto yy187; -yy733: - YYDEBUG(733, *YYCURSOR); +yy728: + YYDEBUG(728, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(734, *YYCURSOR); + YYDEBUG(729, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1127 "Zend/zend_language_scanner.l" { return T_DEFAULT; } -#line 6760 "Zend/zend_language_scanner.c" -yy735: - YYDEBUG(735, *YYCURSOR); +#line 6725 "Zend/zend_language_scanner.c" +yy730: + YYDEBUG(730, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy736; + if (yych == 'A') goto yy731; if (yych != 'a') goto yy187; -yy736: - YYDEBUG(736, *YYCURSOR); +yy731: + YYDEBUG(731, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy737; + if (yych == 'R') goto yy732; if (yych != 'r') goto yy187; -yy737: - YYDEBUG(737, *YYCURSOR); +yy732: + YYDEBUG(732, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy738; + if (yych == 'E') goto yy733; if (yych != 'e') goto yy187; -yy738: - YYDEBUG(738, *YYCURSOR); +yy733: + YYDEBUG(733, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(739, *YYCURSOR); + YYDEBUG(734, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1099 "Zend/zend_language_scanner.l" { return T_DECLARE; } -#line 6788 "Zend/zend_language_scanner.c" -yy740: - YYDEBUG(740, *YYCURSOR); +#line 6753 "Zend/zend_language_scanner.c" +yy735: + YYDEBUG(735, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy802; - if (yych == 'h') goto yy802; + if (yych == 'H') goto yy797; + if (yych == 'h') goto yy797; goto yy187; -yy741: - YYDEBUG(741, *YYCURSOR); +yy736: + YYDEBUG(736, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy796; - if (yych == 's') goto yy796; + if (yych == 'S') goto yy791; + if (yych == 's') goto yy791; goto yy187; -yy742: - YYDEBUG(742, *YYCURSOR); +yy737: + YYDEBUG(737, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy792; - if (yych == 'p') goto yy792; + if (yych == 'P') goto yy787; + if (yych == 'p') goto yy787; goto yy187; -yy743: - YYDEBUG(743, *YYCURSOR); +yy738: + YYDEBUG(738, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy758; - if (yych == 'd') goto yy758; + if (yych == 'D') goto yy753; + if (yych == 'd') goto yy753; goto yy187; -yy744: - YYDEBUG(744, *YYCURSOR); +yy739: + YYDEBUG(739, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy755; - if (yych == 'a') goto yy755; + if (yych == 'A') goto yy750; + if (yych == 'a') goto yy750; goto yy187; -yy745: - YYDEBUG(745, *YYCURSOR); +yy740: + YYDEBUG(740, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { - if (yych == 'I') goto yy746; + if (yych == 'I') goto yy741; if (yych <= 'S') goto yy187; - goto yy747; + goto yy742; } else { if (yych <= 'i') { if (yych <= 'h') goto yy187; } else { - if (yych == 't') goto yy747; + if (yych == 't') goto yy742; goto yy187; } } -yy746: - YYDEBUG(746, *YYCURSOR); +yy741: + YYDEBUG(741, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy753; - if (yych == 't') goto yy753; + if (yych == 'T') goto yy748; + if (yych == 't') goto yy748; goto yy187; -yy747: - YYDEBUG(747, *YYCURSOR); +yy742: + YYDEBUG(742, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy748; + if (yych == 'E') goto yy743; if (yych != 'e') goto yy187; -yy748: - YYDEBUG(748, *YYCURSOR); +yy743: + YYDEBUG(743, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy749; + if (yych == 'N') goto yy744; if (yych != 'n') goto yy187; -yy749: - YYDEBUG(749, *YYCURSOR); +yy744: + YYDEBUG(744, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy750; + if (yych == 'D') goto yy745; if (yych != 'd') goto yy187; -yy750: - YYDEBUG(750, *YYCURSOR); +yy745: + YYDEBUG(745, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy751; + if (yych == 'S') goto yy746; if (yych != 's') goto yy187; -yy751: - YYDEBUG(751, *YYCURSOR); +yy746: + YYDEBUG(746, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(752, *YYCURSOR); + YYDEBUG(747, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1163 "Zend/zend_language_scanner.l" { return T_EXTENDS; } -#line 6872 "Zend/zend_language_scanner.c" -yy753: - YYDEBUG(753, *YYCURSOR); +#line 6837 "Zend/zend_language_scanner.c" +yy748: + YYDEBUG(748, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(754, *YYCURSOR); + YYDEBUG(749, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1015 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 6885 "Zend/zend_language_scanner.c" -yy755: - YYDEBUG(755, *YYCURSOR); +#line 6850 "Zend/zend_language_scanner.c" +yy750: + YYDEBUG(750, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy756; + if (yych == 'L') goto yy751; if (yych != 'l') goto yy187; -yy756: - YYDEBUG(756, *YYCURSOR); +yy751: + YYDEBUG(751, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(757, *YYCURSOR); + YYDEBUG(752, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1247 "Zend/zend_language_scanner.l" { return T_EVAL; } -#line 6903 "Zend/zend_language_scanner.c" -yy758: - YYDEBUG(758, *YYCURSOR); +#line 6868 "Zend/zend_language_scanner.c" +yy753: + YYDEBUG(753, *YYCURSOR); yych = *++YYCURSOR; YYDEBUG(-1, yych); switch (yych) { case 'D': - case 'd': goto yy759; + case 'd': goto yy754; case 'F': - case 'f': goto yy760; + case 'f': goto yy755; case 'I': - case 'i': goto yy761; + case 'i': goto yy756; case 'S': - case 's': goto yy762; + case 's': goto yy757; case 'W': - case 'w': goto yy763; + case 'w': goto yy758; default: goto yy187; } -yy759: - YYDEBUG(759, *YYCURSOR); +yy754: + YYDEBUG(754, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy785; - if (yych == 'e') goto yy785; + if (yych == 'E') goto yy780; + if (yych == 'e') goto yy780; goto yy187; -yy760: - YYDEBUG(760, *YYCURSOR); +yy755: + YYDEBUG(755, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy777; - if (yych == 'o') goto yy777; + if (yych == 'O') goto yy772; + if (yych == 'o') goto yy772; goto yy187; -yy761: - YYDEBUG(761, *YYCURSOR); +yy756: + YYDEBUG(756, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy775; - if (yych == 'f') goto yy775; + if (yych == 'F') goto yy770; + if (yych == 'f') goto yy770; goto yy187; -yy762: - YYDEBUG(762, *YYCURSOR); +yy757: + YYDEBUG(757, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy769; - if (yych == 'w') goto yy769; + if (yych == 'W') goto yy764; + if (yych == 'w') goto yy764; goto yy187; -yy763: - YYDEBUG(763, *YYCURSOR); +yy758: + YYDEBUG(758, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy764; + if (yych == 'H') goto yy759; if (yych != 'h') goto yy187; -yy764: - YYDEBUG(764, *YYCURSOR); +yy759: + YYDEBUG(759, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy765; + if (yych == 'I') goto yy760; if (yych != 'i') goto yy187; -yy765: - YYDEBUG(765, *YYCURSOR); +yy760: + YYDEBUG(760, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy766; + if (yych == 'L') goto yy761; if (yych != 'l') goto yy187; -yy766: - YYDEBUG(766, *YYCURSOR); +yy761: + YYDEBUG(761, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy767; + if (yych == 'E') goto yy762; if (yych != 'e') goto yy187; -yy767: - YYDEBUG(767, *YYCURSOR); +yy762: + YYDEBUG(762, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(768, *YYCURSOR); + YYDEBUG(763, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1075 "Zend/zend_language_scanner.l" { return T_ENDWHILE; } -#line 6977 "Zend/zend_language_scanner.c" -yy769: - YYDEBUG(769, *YYCURSOR); +#line 6942 "Zend/zend_language_scanner.c" +yy764: + YYDEBUG(764, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy770; + if (yych == 'I') goto yy765; if (yych != 'i') goto yy187; -yy770: - YYDEBUG(770, *YYCURSOR); +yy765: + YYDEBUG(765, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy771; + if (yych == 'T') goto yy766; if (yych != 't') goto yy187; -yy771: - YYDEBUG(771, *YYCURSOR); +yy766: + YYDEBUG(766, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy772; + if (yych == 'C') goto yy767; if (yych != 'c') goto yy187; -yy772: - YYDEBUG(772, *YYCURSOR); +yy767: + YYDEBUG(767, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy773; + if (yych == 'H') goto yy768; if (yych != 'h') goto yy187; -yy773: - YYDEBUG(773, *YYCURSOR); +yy768: + YYDEBUG(768, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(774, *YYCURSOR); + YYDEBUG(769, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1119 "Zend/zend_language_scanner.l" { return T_ENDSWITCH; } -#line 7010 "Zend/zend_language_scanner.c" -yy775: - YYDEBUG(775, *YYCURSOR); +#line 6975 "Zend/zend_language_scanner.c" +yy770: + YYDEBUG(770, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(776, *YYCURSOR); + YYDEBUG(771, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1063 "Zend/zend_language_scanner.l" { return T_ENDIF; } -#line 7023 "Zend/zend_language_scanner.c" -yy777: - YYDEBUG(777, *YYCURSOR); +#line 6988 "Zend/zend_language_scanner.c" +yy772: + YYDEBUG(772, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy778; + if (yych == 'R') goto yy773; if (yych != 'r') goto yy187; -yy778: - YYDEBUG(778, *YYCURSOR); +yy773: + YYDEBUG(773, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy779; + if (yych <= '/') goto yy774; if (yych <= '9') goto yy186; } else { - if (yych == 'E') goto yy780; + if (yych == 'E') goto yy775; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'd') { if (yych != '`') goto yy186; } else { - if (yych <= 'e') goto yy780; + if (yych <= 'e') goto yy775; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy779: - YYDEBUG(779, *YYCURSOR); +yy774: + YYDEBUG(774, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1087 "Zend/zend_language_scanner.l" { return T_ENDFOR; } -#line 7056 "Zend/zend_language_scanner.c" -yy780: - YYDEBUG(780, *YYCURSOR); +#line 7021 "Zend/zend_language_scanner.c" +yy775: + YYDEBUG(775, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy781; + if (yych == 'A') goto yy776; if (yych != 'a') goto yy187; -yy781: - YYDEBUG(781, *YYCURSOR); +yy776: + YYDEBUG(776, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy782; + if (yych == 'C') goto yy777; if (yych != 'c') goto yy187; -yy782: - YYDEBUG(782, *YYCURSOR); +yy777: + YYDEBUG(777, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy783; + if (yych == 'H') goto yy778; if (yych != 'h') goto yy187; -yy783: - YYDEBUG(783, *YYCURSOR); +yy778: + YYDEBUG(778, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(784, *YYCURSOR); + YYDEBUG(779, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1095 "Zend/zend_language_scanner.l" { return T_ENDFOREACH; } -#line 7084 "Zend/zend_language_scanner.c" -yy785: - YYDEBUG(785, *YYCURSOR); +#line 7049 "Zend/zend_language_scanner.c" +yy780: + YYDEBUG(780, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy786; + if (yych == 'C') goto yy781; if (yych != 'c') goto yy187; -yy786: - YYDEBUG(786, *YYCURSOR); +yy781: + YYDEBUG(781, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy787; + if (yych == 'L') goto yy782; if (yych != 'l') goto yy187; -yy787: - YYDEBUG(787, *YYCURSOR); +yy782: + YYDEBUG(782, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy788; + if (yych == 'A') goto yy783; if (yych != 'a') goto yy187; -yy788: - YYDEBUG(788, *YYCURSOR); +yy783: + YYDEBUG(783, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy789; + if (yych == 'R') goto yy784; if (yych != 'r') goto yy187; -yy789: - YYDEBUG(789, *YYCURSOR); +yy784: + YYDEBUG(784, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy790; + if (yych == 'E') goto yy785; if (yych != 'e') goto yy187; -yy790: - YYDEBUG(790, *YYCURSOR); +yy785: + YYDEBUG(785, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(791, *YYCURSOR); + YYDEBUG(786, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1103 "Zend/zend_language_scanner.l" { return T_ENDDECLARE; } -#line 7122 "Zend/zend_language_scanner.c" -yy792: - YYDEBUG(792, *YYCURSOR); +#line 7087 "Zend/zend_language_scanner.c" +yy787: + YYDEBUG(787, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy793; + if (yych == 'T') goto yy788; if (yych != 't') goto yy187; -yy793: - YYDEBUG(793, *YYCURSOR); +yy788: + YYDEBUG(788, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy794; + if (yych == 'Y') goto yy789; if (yych != 'y') goto yy187; -yy794: - YYDEBUG(794, *YYCURSOR); +yy789: + YYDEBUG(789, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(795, *YYCURSOR); + YYDEBUG(790, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1292 "Zend/zend_language_scanner.l" +#line 1287 "Zend/zend_language_scanner.l" { return T_EMPTY; } -#line 7145 "Zend/zend_language_scanner.c" -yy796: - YYDEBUG(796, *YYCURSOR); +#line 7110 "Zend/zend_language_scanner.c" +yy791: + YYDEBUG(791, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy797; + if (yych == 'E') goto yy792; if (yych != 'e') goto yy187; -yy797: - YYDEBUG(797, *YYCURSOR); +yy792: + YYDEBUG(792, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy798; + if (yych <= '/') goto yy793; if (yych <= '9') goto yy186; } else { - if (yych == 'I') goto yy799; + if (yych == 'I') goto yy794; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'h') { if (yych != '`') goto yy186; } else { - if (yych <= 'i') goto yy799; + if (yych <= 'i') goto yy794; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy798: - YYDEBUG(798, *YYCURSOR); +yy793: + YYDEBUG(793, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1067 "Zend/zend_language_scanner.l" { return T_ELSE; } -#line 7178 "Zend/zend_language_scanner.c" -yy799: - YYDEBUG(799, *YYCURSOR); +#line 7143 "Zend/zend_language_scanner.c" +yy794: + YYDEBUG(794, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy800; + if (yych == 'F') goto yy795; if (yych != 'f') goto yy187; -yy800: - YYDEBUG(800, *YYCURSOR); +yy795: + YYDEBUG(795, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(801, *YYCURSOR); + YYDEBUG(796, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1059 "Zend/zend_language_scanner.l" { return T_ELSEIF; } -#line 7196 "Zend/zend_language_scanner.c" -yy802: - YYDEBUG(802, *YYCURSOR); +#line 7161 "Zend/zend_language_scanner.c" +yy797: + YYDEBUG(797, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy803; + if (yych == 'O') goto yy798; if (yych != 'o') goto yy187; -yy803: - YYDEBUG(803, *YYCURSOR); +yy798: + YYDEBUG(798, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(804, *YYCURSOR); + YYDEBUG(799, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1143 "Zend/zend_language_scanner.l" { return T_ECHO; } -#line 7214 "Zend/zend_language_scanner.c" +#line 7179 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: @@ -7249,39 +7214,39 @@ int lex_scan(zval *zendlval TSRMLS_DC) 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, }; - YYDEBUG(805, *YYCURSOR); + YYDEBUG(800, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yych <= '-') { if (yych <= '\r') { - if (yych <= 0x08) goto yy813; - if (yych <= '\n') goto yy807; - if (yych <= '\f') goto yy813; + if (yych <= 0x08) goto yy808; + if (yych <= '\n') goto yy802; + if (yych <= '\f') goto yy808; } else { - if (yych == ' ') goto yy807; - if (yych <= ',') goto yy813; - goto yy809; + if (yych == ' ') goto yy802; + if (yych <= ',') goto yy808; + goto yy804; } } else { if (yych <= '_') { - if (yych <= '@') goto yy813; - if (yych <= 'Z') goto yy811; - if (yych <= '^') goto yy813; - goto yy811; + if (yych <= '@') goto yy808; + if (yych <= 'Z') goto yy806; + if (yych <= '^') goto yy808; + goto yy806; } else { - if (yych <= '`') goto yy813; - if (yych <= 'z') goto yy811; - if (yych <= '~') goto yy813; - goto yy811; + if (yych <= '`') goto yy808; + if (yych <= 'z') goto yy806; + if (yych <= '~') goto yy808; + goto yy806; } } -yy807: - YYDEBUG(807, *YYCURSOR); +yy802: + YYDEBUG(802, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy819; -yy808: - YYDEBUG(808, *YYCURSOR); + goto yy814; +yy803: + YYDEBUG(803, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1176 "Zend/zend_language_scanner.l" { @@ -7289,13 +7254,13 @@ int lex_scan(zval *zendlval TSRMLS_DC) HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 7293 "Zend/zend_language_scanner.c" -yy809: - YYDEBUG(809, *YYCURSOR); +#line 7258 "Zend/zend_language_scanner.c" +yy804: + YYDEBUG(804, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '>') goto yy816; -yy810: - YYDEBUG(810, *YYCURSOR); + if ((yych = *YYCURSOR) == '>') goto yy811; +yy805: + YYDEBUG(805, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1193 "Zend/zend_language_scanner.l" { @@ -7303,14 +7268,14 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy_pop_state(TSRMLS_C); goto restart; } -#line 7307 "Zend/zend_language_scanner.c" -yy811: - YYDEBUG(811, *YYCURSOR); +#line 7272 "Zend/zend_language_scanner.c" +yy806: + YYDEBUG(806, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy815; -yy812: - YYDEBUG(812, *YYCURSOR); + goto yy810; +yy807: + YYDEBUG(807, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1186 "Zend/zend_language_scanner.l" { @@ -7319,43 +7284,43 @@ int lex_scan(zval *zendlval TSRMLS_DC) zendlval->type = IS_STRING; return T_STRING; } -#line 7323 "Zend/zend_language_scanner.c" -yy813: - YYDEBUG(813, *YYCURSOR); +#line 7288 "Zend/zend_language_scanner.c" +yy808: + YYDEBUG(808, *YYCURSOR); yych = *++YYCURSOR; - goto yy810; -yy814: - YYDEBUG(814, *YYCURSOR); + goto yy805; +yy809: + YYDEBUG(809, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy815: - YYDEBUG(815, *YYCURSOR); +yy810: + YYDEBUG(810, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy814; + goto yy809; } - goto yy812; -yy816: - YYDEBUG(816, *YYCURSOR); + goto yy807; +yy811: + YYDEBUG(811, *YYCURSOR); ++YYCURSOR; - YYDEBUG(817, *YYCURSOR); + YYDEBUG(812, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1182 "Zend/zend_language_scanner.l" { return T_OBJECT_OPERATOR; } -#line 7348 "Zend/zend_language_scanner.c" -yy818: - YYDEBUG(818, *YYCURSOR); +#line 7313 "Zend/zend_language_scanner.c" +yy813: + YYDEBUG(813, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy819: - YYDEBUG(819, *YYCURSOR); +yy814: + YYDEBUG(814, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy818; + goto yy813; } - goto yy808; + goto yy803; } /* *********************************** */ yyc_ST_LOOKING_FOR_VARNAME: @@ -7394,74 +7359,74 @@ int lex_scan(zval *zendlval TSRMLS_DC) 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; - YYDEBUG(820, *YYCURSOR); + YYDEBUG(815, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yych <= '_') { - if (yych <= '@') goto yy824; - if (yych <= 'Z') goto yy822; - if (yych <= '^') goto yy824; + if (yych <= '@') goto yy819; + if (yych <= 'Z') goto yy817; + if (yych <= '^') goto yy819; } else { - if (yych <= '`') goto yy824; - if (yych <= 'z') goto yy822; - if (yych <= '~') goto yy824; + if (yych <= '`') goto yy819; + if (yych <= 'z') goto yy817; + if (yych <= '~') goto yy819; } -yy822: - YYDEBUG(822, *YYCURSOR); +yy817: + YYDEBUG(817, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy823; - if (yych <= '9') goto yy826; + if (yych <= '/') goto yy818; + if (yych <= '9') goto yy821; } else { - if (yych <= '[') goto yy826; - if (yych >= '_') goto yy826; + if (yych <= '[') goto yy821; + if (yych >= '_') goto yy821; } } else { if (yych <= '|') { - if (yych <= '`') goto yy823; - if (yych <= 'z') goto yy826; + if (yych <= '`') goto yy818; + if (yych <= 'z') goto yy821; } else { - if (yych != '~') goto yy826; + if (yych != '~') goto yy821; } } -yy823: - YYDEBUG(823, *YYCURSOR); +yy818: + YYDEBUG(818, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1484 "Zend/zend_language_scanner.l" +#line 1479 "Zend/zend_language_scanner.l" { yyless(0); yy_pop_state(TSRMLS_C); yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); goto restart; } -#line 7440 "Zend/zend_language_scanner.c" -yy824: - YYDEBUG(824, *YYCURSOR); +#line 7405 "Zend/zend_language_scanner.c" +yy819: + YYDEBUG(819, *YYCURSOR); yych = *++YYCURSOR; - goto yy823; -yy825: - YYDEBUG(825, *YYCURSOR); + goto yy818; +yy820: + YYDEBUG(820, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy826: - YYDEBUG(826, *YYCURSOR); +yy821: + YYDEBUG(821, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy825; + goto yy820; } - if (yych == '[') goto yy828; - if (yych == '}') goto yy828; - YYDEBUG(827, *YYCURSOR); + if (yych == '[') goto yy823; + if (yych == '}') goto yy823; + YYDEBUG(822, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy823; -yy828: - YYDEBUG(828, *YYCURSOR); + goto yy818; +yy823: + YYDEBUG(823, *YYCURSOR); ++YYCURSOR; - YYDEBUG(829, *YYCURSOR); + YYDEBUG(824, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1474 "Zend/zend_language_scanner.l" +#line 1469 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); zend_copy_value(zendlval, yytext, yyleng); @@ -7470,18 +7435,18 @@ int lex_scan(zval *zendlval TSRMLS_DC) yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return T_STRING_VARNAME; } -#line 7474 "Zend/zend_language_scanner.c" +#line 7439 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_NOWDOC: - YYDEBUG(830, *YYCURSOR); + YYDEBUG(825, *YYCURSOR); YYFILL(1); yych = *YYCURSOR; - YYDEBUG(832, *YYCURSOR); + YYDEBUG(827, *YYCURSOR); ++YYCURSOR; - YYDEBUG(833, *YYCURSOR); + YYDEBUG(828, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2304 "Zend/zend_language_scanner.l" +#line 2299 "Zend/zend_language_scanner.l" { int newline = 0; @@ -7538,7 +7503,7 @@ int lex_scan(zval *zendlval TSRMLS_DC) HANDLE_NEWLINES(yytext, yyleng - newline); return T_ENCAPSED_AND_WHITESPACE; } -#line 7542 "Zend/zend_language_scanner.c" +#line 7507 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_VAR_OFFSET: { @@ -7576,76 +7541,76 @@ int lex_scan(zval *zendlval TSRMLS_DC) 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, }; - YYDEBUG(834, *YYCURSOR); + YYDEBUG(829, *YYCURSOR); YYFILL(3); yych = *YYCURSOR; if (yych <= '/') { if (yych <= ' ') { if (yych <= '\f') { - if (yych <= 0x08) goto yy848; - if (yych <= '\n') goto yy844; - goto yy848; + if (yych <= 0x08) goto yy843; + if (yych <= '\n') goto yy839; + goto yy843; } else { - if (yych <= '\r') goto yy844; - if (yych <= 0x1F) goto yy848; - goto yy844; + if (yych <= '\r') goto yy839; + if (yych <= 0x1F) goto yy843; + goto yy839; } } else { if (yych <= '$') { - if (yych <= '"') goto yy843; - if (yych <= '#') goto yy844; - goto yy839; + if (yych <= '"') goto yy838; + if (yych <= '#') goto yy839; + goto yy834; } else { - if (yych == '\'') goto yy844; - goto yy843; + if (yych == '\'') goto yy839; + goto yy838; } } } else { if (yych <= '\\') { if (yych <= '@') { - if (yych <= '0') goto yy836; - if (yych <= '9') goto yy838; - goto yy843; + if (yych <= '0') goto yy831; + if (yych <= '9') goto yy833; + goto yy838; } else { - if (yych <= 'Z') goto yy846; - if (yych <= '[') goto yy843; - goto yy844; + if (yych <= 'Z') goto yy841; + if (yych <= '[') goto yy838; + goto yy839; } } else { if (yych <= '_') { - if (yych <= ']') goto yy841; - if (yych <= '^') goto yy843; - goto yy846; + if (yych <= ']') goto yy836; + if (yych <= '^') goto yy838; + goto yy841; } else { - if (yych <= '`') goto yy843; - if (yych <= 'z') goto yy846; - if (yych <= '~') goto yy843; - goto yy846; + if (yych <= '`') goto yy838; + if (yych <= 'z') goto yy841; + if (yych <= '~') goto yy838; + goto yy841; } } } -yy836: - YYDEBUG(836, *YYCURSOR); +yy831: + YYDEBUG(831, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'W') { if (yych <= '9') { - if (yych >= '0') goto yy860; + if (yych >= '0') goto yy855; } else { - if (yych == 'B') goto yy857; + if (yych == 'B') goto yy852; } } else { if (yych <= 'b') { - if (yych <= 'X') goto yy859; - if (yych >= 'b') goto yy857; + if (yych <= 'X') goto yy854; + if (yych >= 'b') goto yy852; } else { - if (yych == 'x') goto yy859; + if (yych == 'x') goto yy854; } } -yy837: - YYDEBUG(837, *YYCURSOR); +yy832: + YYDEBUG(832, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1560 "Zend/zend_language_scanner.l" +#line 1555 "Zend/zend_language_scanner.l" { /* Offset could be treated as a long */ if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) { ZVAL_LONG(zendlval, strtol(yytext, NULL, 10)); @@ -7654,81 +7619,81 @@ int lex_scan(zval *zendlval TSRMLS_DC) } return T_NUM_STRING; } -#line 7658 "Zend/zend_language_scanner.c" -yy838: - YYDEBUG(838, *YYCURSOR); +#line 7623 "Zend/zend_language_scanner.c" +yy833: + YYDEBUG(833, *YYCURSOR); yych = *++YYCURSOR; - goto yy856; -yy839: - YYDEBUG(839, *YYCURSOR); + goto yy851; +yy834: + YYDEBUG(834, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '_') { - if (yych <= '@') goto yy840; - if (yych <= 'Z') goto yy852; - if (yych >= '_') goto yy852; + if (yych <= '@') goto yy835; + if (yych <= 'Z') goto yy847; + if (yych >= '_') goto yy847; } else { - if (yych <= '`') goto yy840; - if (yych <= 'z') goto yy852; - if (yych >= 0x7F) goto yy852; + if (yych <= '`') goto yy835; + if (yych <= 'z') goto yy847; + if (yych >= 0x7F) goto yy847; } -yy840: - YYDEBUG(840, *YYCURSOR); +yy835: + YYDEBUG(835, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1836 "Zend/zend_language_scanner.l" +#line 1831 "Zend/zend_language_scanner.l" { /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ return yytext[0]; } -#line 7683 "Zend/zend_language_scanner.c" -yy841: - YYDEBUG(841, *YYCURSOR); +#line 7648 "Zend/zend_language_scanner.c" +yy836: + YYDEBUG(836, *YYCURSOR); ++YYCURSOR; - YYDEBUG(842, *YYCURSOR); + YYDEBUG(837, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1831 "Zend/zend_language_scanner.l" +#line 1826 "Zend/zend_language_scanner.l" { yy_pop_state(TSRMLS_C); return ']'; } -#line 7694 "Zend/zend_language_scanner.c" -yy843: - YYDEBUG(843, *YYCURSOR); +#line 7659 "Zend/zend_language_scanner.c" +yy838: + YYDEBUG(838, *YYCURSOR); yych = *++YYCURSOR; - goto yy840; -yy844: - YYDEBUG(844, *YYCURSOR); + goto yy835; +yy839: + YYDEBUG(839, *YYCURSOR); ++YYCURSOR; - YYDEBUG(845, *YYCURSOR); + YYDEBUG(840, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1841 "Zend/zend_language_scanner.l" +#line 1836 "Zend/zend_language_scanner.l" { /* Invalid rule to return a more explicit parse error with proper line number */ yyless(0); yy_pop_state(TSRMLS_C); return T_ENCAPSED_AND_WHITESPACE; } -#line 7711 "Zend/zend_language_scanner.c" -yy846: - YYDEBUG(846, *YYCURSOR); +#line 7676 "Zend/zend_language_scanner.c" +yy841: + YYDEBUG(841, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy851; -yy847: - YYDEBUG(847, *YYCURSOR); + goto yy846; +yy842: + YYDEBUG(842, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1848 "Zend/zend_language_scanner.l" +#line 1843 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; return T_STRING; } -#line 7726 "Zend/zend_language_scanner.c" -yy848: - YYDEBUG(848, *YYCURSOR); +#line 7691 "Zend/zend_language_scanner.c" +yy843: + YYDEBUG(843, *YYCURSOR); ++YYCURSOR; - YYDEBUG(849, *YYCURSOR); + YYDEBUG(844, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2362 "Zend/zend_language_scanner.l" +#line 2357 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -7737,116 +7702,116 @@ int lex_scan(zval *zendlval TSRMLS_DC) zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 7741 "Zend/zend_language_scanner.c" -yy850: - YYDEBUG(850, *YYCURSOR); +#line 7706 "Zend/zend_language_scanner.c" +yy845: + YYDEBUG(845, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy851: - YYDEBUG(851, *YYCURSOR); +yy846: + YYDEBUG(846, *YYCURSOR); if (yybm[0+yych] & 16) { - goto yy850; + goto yy845; } - goto yy847; -yy852: - YYDEBUG(852, *YYCURSOR); + goto yy842; +yy847: + YYDEBUG(847, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(853, *YYCURSOR); + YYDEBUG(848, *YYCURSOR); if (yych <= '^') { if (yych <= '9') { - if (yych >= '0') goto yy852; + if (yych >= '0') goto yy847; } else { - if (yych <= '@') goto yy854; - if (yych <= 'Z') goto yy852; + if (yych <= '@') goto yy849; + if (yych <= 'Z') goto yy847; } } else { if (yych <= '`') { - if (yych <= '_') goto yy852; + if (yych <= '_') goto yy847; } else { - if (yych <= 'z') goto yy852; - if (yych >= 0x7F) goto yy852; + if (yych <= 'z') goto yy847; + if (yych >= 0x7F) goto yy847; } } -yy854: - YYDEBUG(854, *YYCURSOR); +yy849: + YYDEBUG(849, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1825 "Zend/zend_language_scanner.l" +#line 1820 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 7783 "Zend/zend_language_scanner.c" -yy855: - YYDEBUG(855, *YYCURSOR); +#line 7748 "Zend/zend_language_scanner.c" +yy850: + YYDEBUG(850, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy856: - YYDEBUG(856, *YYCURSOR); +yy851: + YYDEBUG(851, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy855; + goto yy850; } - goto yy837; -yy857: - YYDEBUG(857, *YYCURSOR); + goto yy832; +yy852: + YYDEBUG(852, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 128) { - goto yy865; + goto yy860; } -yy858: - YYDEBUG(858, *YYCURSOR); +yy853: + YYDEBUG(853, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy837; -yy859: - YYDEBUG(859, *YYCURSOR); + goto yy832; +yy854: + YYDEBUG(854, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 64) { - goto yy863; + goto yy858; } - goto yy858; -yy860: - YYDEBUG(860, *YYCURSOR); + goto yy853; +yy855: + YYDEBUG(855, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(861, *YYCURSOR); - if (yych <= '/') goto yy862; - if (yych <= '9') goto yy860; -yy862: - YYDEBUG(862, *YYCURSOR); + YYDEBUG(856, *YYCURSOR); + if (yych <= '/') goto yy857; + if (yych <= '9') goto yy855; +yy857: + YYDEBUG(857, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1569 "Zend/zend_language_scanner.l" +#line 1564 "Zend/zend_language_scanner.l" { /* Offset must be treated as a string */ ZVAL_STRINGL(zendlval, yytext, yyleng, 1); return T_NUM_STRING; } -#line 7828 "Zend/zend_language_scanner.c" -yy863: - YYDEBUG(863, *YYCURSOR); +#line 7793 "Zend/zend_language_scanner.c" +yy858: + YYDEBUG(858, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(864, *YYCURSOR); + YYDEBUG(859, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy863; + goto yy858; } - goto yy862; -yy865: - YYDEBUG(865, *YYCURSOR); + goto yy857; +yy860: + YYDEBUG(860, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(866, *YYCURSOR); + YYDEBUG(861, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy865; + goto yy860; } - goto yy862; + goto yy857; } } -#line 2371 "Zend/zend_language_scanner.l" +#line 2366 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index ddbcbe7641ff..f9c421fe8805 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -1280,11 +1280,6 @@ NEWLINE ("\r"|"\n"|"\r\n") return T_GLOBAL; } -"super" { - return T_SUPER; -} - - "isset" { return T_ISSET; } diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 3b1e00fd1df5..663cd024470c 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -958,13 +958,7 @@ ZEND_API int zend_check_private(zend_function *fbc, zend_class_entry *ce, char * ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) /* {{{ */ { zend_class_entry *fbc_scope = ce; - - /* - * Is the called context super to this class ? - */ - if (scope->super == fbc_scope) - return 1; - + /* Is the context that's calling the function, the same as one of * the function's parents? */ @@ -974,7 +968,7 @@ ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) } fbc_scope = fbc_scope->parent; } - + /* Is the function's scope the same as our current object context, * or any of the parents of our context? */ @@ -985,8 +979,6 @@ ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) scope = scope->parent; } - - return 0; } /* }}} */ From ce59d793efc148e6868cbf5b0143d383ec5c4009 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 18:08:08 +0100 Subject: [PATCH 38/61] cleanup whitespace etc --- Zend/zend.h | 1 - Zend/zend_compile.c | 26 +++++++++++++------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/Zend/zend.h b/Zend/zend.h index 9d67b4324b0c..acbb6acaf76c 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -471,7 +471,6 @@ struct _zend_trait_alias { */ zend_uint modifiers; }; - typedef struct _zend_trait_alias zend_trait_alias; struct _zend_class_entry { diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index f83e92905b8e..adcb28a5bc22 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3765,7 +3765,7 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry zend_uint i, ignore = 0; zend_uint current_iface_num = ce->num_interfaces; zend_uint parent_iface_num = ce->parent ? ce->parent->num_interfaces : 0; - + for (i = 0; i < ce->num_interfaces; i++) { if (ce->interfaces[i] == NULL) { memmove(ce->interfaces + i, ce->interfaces + i + 1, sizeof(zend_class_entry*) * (--ce->num_interfaces - i)); @@ -3774,17 +3774,17 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry if (i < parent_iface_num) { ignore = 1; } else { - if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { + if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { if (ce->ce_flags & ZEND_ACC_FINAL_CLASS) { continue; } } - + zend_error(E_COMPILE_ERROR, "Class %s cannot implement previously implemented interface %s", ce->name, iface->name); } } } - + if (ignore) { /* Check for attempt to redeclare interface constants */ zend_hash_apply_with_arguments(&ce->constants_table TSRMLS_CC, (apply_func_args_t) do_interface_constant_check, 1, &iface); @@ -4560,11 +4560,11 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze ce->refcount++; /* return anonymous class */ - if (ce->ce_flags & (ZEND_ACC_ANON_CLASS) && - ce->ce_flags & (ZEND_ACC_FINAL_CLASS)) { - ce->refcount--; - return ce; - } + if (ce->ce_flags & (ZEND_ACC_ANON_CLASS) && + ce->ce_flags & (ZEND_ACC_FINAL_CLASS)) { + ce->refcount--; + return ce; + } if (zend_hash_quick_add(class_table, Z_STRVAL_P(op2), Z_STRLEN_P(op2)+1, Z_HASH_P(op2), &ce, sizeof(zend_class_entry *), NULL)==FAILURE) { ce->refcount--; @@ -4581,7 +4581,7 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) { zend_verify_abstract_class(ce TSRMLS_CC); } - + /* set final anonymous class */ if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { ce->ce_flags = ZEND_ACC_ANON_CLASS|ZEND_ACC_FINAL_CLASS; @@ -5052,12 +5052,12 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons new_class_entry->type = ZEND_USER_CLASS; new_class_entry->name = zend_new_interned_string(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant) + 1, 1 TSRMLS_CC); new_class_entry->name_length = Z_STRLEN(class_name->u.constant); - + zend_initialize_class_data(new_class_entry, 1 TSRMLS_CC); new_class_entry->info.user.filename = zend_get_compiled_filename(TSRMLS_C); new_class_entry->info.user.line_start = opline_num; new_class_entry->ce_flags |= class_token->EA; - + if (parent_class_name && parent_class_name->op_type != IS_UNUSED) { switch (parent_class_name->EA) { case ZEND_FETCH_CLASS_SELF: @@ -5100,7 +5100,7 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons zend_hash_quick_update(CG(class_table), Z_STRVAL(key), Z_STRLEN(key), Z_HASH_P(&CONSTANT(opline->op1.constant)), &new_class_entry, sizeof(zend_class_entry *), NULL); CG(active_class_entry) = new_class_entry; - + opline->result.var = get_temporary_variable(CG(active_op_array)); opline->result_type = IS_VAR; GET_NODE(&CG(implementing_class), opline->result); From b8c26a01010f6643902fc1108b6f35f26bad7910 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 18:10:10 +0100 Subject: [PATCH 39/61] cleanup ... --- Zend/zend_language_parser.y | 2 ++ Zend/zend_object_handlers.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 288b83170776..5a7dc08a4edb 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -916,6 +916,7 @@ fully_qualified_class_name: ; + class_name_reference: class_name { zend_do_fetch_class(&$$, &$1 TSRMLS_CC); } | dynamic_class_name_reference { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); zend_do_fetch_class(&$$, &$1 TSRMLS_CC); } @@ -1110,6 +1111,7 @@ base_variable_with_function_calls: | function_call { zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.EA = ZEND_PARSED_FUNCTION_CALL; } ; + base_variable: reference_variable { $$ = $1; $$.EA = ZEND_PARSED_VARIABLE; } | simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); $$.EA = ZEND_PARSED_VARIABLE; } diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 663cd024470c..f283e310b9e6 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -930,6 +930,7 @@ static inline zend_function *zend_check_private_int(zend_function *fbc, zend_cla return fbc; } + /* Check rule #2 */ ce = ce->parent; while (ce) { @@ -961,7 +962,7 @@ ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) /* Is the context that's calling the function, the same as one of * the function's parents? - */ + */ while (fbc_scope) { if (fbc_scope==scope) { return 1; From 68e88599fde3c51dadefd4a1f076544cc48330cd Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 18:10:36 +0100 Subject: [PATCH 40/61] cleanup ... --- Zend/zend_object_handlers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index f283e310b9e6..1b651fc8f60a 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -969,7 +969,7 @@ ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) } fbc_scope = fbc_scope->parent; } - + /* Is the function's scope the same as our current object context, * or any of the parents of our context? */ From b48c993e95cad1a4f1aec0a030f128ced61ee2db Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 18:11:18 +0100 Subject: [PATCH 41/61] cleanup ... --- Zend/zend_compile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index adcb28a5bc22..bd3512e65959 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2264,7 +2264,7 @@ void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */ { long fetch_class_op_number; zend_op *opline; - + fetch_class_op_number = get_next_op_number(CG(active_op_array)); opline = get_next_op(CG(active_op_array) TSRMLS_CC); From 7557e7044c07256412c3903b24f6e0a9aa84aeae Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 18:12:54 +0100 Subject: [PATCH 42/61] cleanup ... --- Zend/zend_object_handlers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 1b651fc8f60a..f210b8194bd2 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -979,7 +979,7 @@ ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) } scope = scope->parent; } - + return 0; } /* }}} */ From 165ea216007415132e370b9d23ba2ff19c8c58fc Mon Sep 17 00:00:00 2001 From: krakjoe Date: Fri, 27 Sep 2013 18:13:33 +0100 Subject: [PATCH 43/61] cleanup ... --- Zend/zend_object_handlers.c | 1 - 1 file changed, 1 deletion(-) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index f210b8194bd2..8beacdfd352b 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -979,7 +979,6 @@ ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) } scope = scope->parent; } - return 0; } /* }}} */ From 113a52d7b2bde19c6544f114c1a836d6741eb50d Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sat, 28 Sep 2013 01:03:52 +0100 Subject: [PATCH 44/61] format parser in the normal way --- Zend/zend_language_parser.y | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 5a7dc08a4edb..d33576a6c0cd 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -736,32 +736,15 @@ new_object: ; anon_class_type: - T_CLASS { - $$.u.op.opline_num = CG(zend_lineno); - $$.EA = ZEND_ACC_ANON_CLASS; - } + T_CLASS { $$.u.op.opline_num = CG(zend_lineno); $$.EA = ZEND_ACC_ANON_CLASS; } ; anon_class_decl: - anon_class_type { - zend_do_create_anon_class(&$$ TSRMLS_CC); - } extends_from { - zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); - } implements_list - '{' class_statement_list '}' { - zend_do_end_class_declaration(&$1, &$3 TSRMLS_CC); - zend_do_fetch_class(&$$, &$2 TSRMLS_CC); - } + anon_class_type { zend_do_create_anon_class(&$$ TSRMLS_CC); } extends_from { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); } implements_list '{' class_statement_list '}' { zend_do_end_class_declaration(&$1, &$3 TSRMLS_CC); zend_do_fetch_class(&$$, &$2 TSRMLS_CC); } ; new_anon_object: - T_NEW anon_class_decl { - zend_do_extended_fcall_begin(TSRMLS_C); - zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); - } ctor_arguments { - zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); - zend_do_extended_fcall_end(TSRMLS_C); - } + T_NEW anon_class_decl { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } ; new_expr: From a49bcf624ae2cebac87ef009bab77f443a53d143 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sat, 28 Sep 2013 17:28:45 +0100 Subject: [PATCH 45/61] fix namespacing issues --- Zend/zend_compile.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index bd3512e65959..5fd18899f235 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2202,7 +2202,7 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */ *class_name = tmp; } } - } else if (CG(current_import) || CG(current_namespace)) { + } else if (CG(current_import) || CG(current_namespace) && !CG(active_class_entry)) { /* this is a plain name (without \) */ lcname = zend_str_tolower_dup(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant)); @@ -2235,8 +2235,11 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ /* prefix anonymous class with current scope for reference */ if (CG(active_op_array)) { - if (CG(active_op_array)->scope) { - prefix_name = CG(active_op_array)->scope->name; + if (CG(active_class_entry)) { + prefix_name = CG(active_class_entry)->name; + if (CG(current_namespace)) { + prefix_name += Z_STRLEN_P(CG(current_namespace)) + sizeof("\\")-1; + } } else if (CG(active_op_array)->function_name) { prefix_name = CG(active_op_array)->function_name; } else prefix_name = "Class"; @@ -5025,7 +5028,7 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons error = 1; } - if (CG(current_namespace)) { + if (CG(current_namespace) && !CG(active_class_entry)) { /* Prefix class name with name of current namespace */ znode tmp; From c106cdabefdd855b77dcbe26b36b07266a71bddc Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sat, 28 Sep 2013 17:31:22 +0100 Subject: [PATCH 46/61] add test for namespaced anons --- Zend/tests/anon/006.phpt | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Zend/tests/anon/006.phpt diff --git a/Zend/tests/anon/006.phpt b/Zend/tests/anon/006.phpt new file mode 100644 index 000000000000..e680cdfd0d5e --- /dev/null +++ b/Zend/tests/anon/006.phpt @@ -0,0 +1,22 @@ +--TEST-- +testing anons inside namespaces +--FILE-- + +--EXPECT-- +object(Outer$$1)#2 (0) { +} + + + From 1055b3fd5ef231929651a9ff484befaeae766aa1 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sat, 28 Sep 2013 17:59:47 +0100 Subject: [PATCH 47/61] more bc --- Zend/zend_compile.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 5fd18899f235..75cf72d3ad11 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5027,6 +5027,11 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons zend_hash_find(CG(current_import), lcname, Z_STRLEN(class_name->u.constant)+1, (void**)&ns_name) == SUCCESS) { error = 1; } + + if (CG(active_class_entry) && !(class_token->EA & ZEND_ACC_ANON_CLASS)) { + zend_error(E_COMPILE_ERROR, "Class declarations may not be nested"); + return; + } if (CG(current_namespace) && !CG(active_class_entry)) { /* Prefix class name with name of current namespace */ From 38592f0034854428cb87a764f93d1e885915dafe Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sat, 28 Sep 2013 19:42:42 +0100 Subject: [PATCH 48/61] more bc, passing Zend/tests --- Zend/zend_compile.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 75cf72d3ad11..f031bf798584 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2202,7 +2202,7 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */ *class_name = tmp; } } - } else if (CG(current_import) || CG(current_namespace) && !CG(active_class_entry)) { + } else if (CG(current_import) || CG(current_namespace) && !((class_name->EA & ZEND_ACC_ANON_CLASS) == ZEND_ACC_ANON_CLASS)) { /* this is a plain name (without \) */ lcname = zend_str_tolower_dup(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant)); @@ -2220,6 +2220,7 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */ zend_do_build_namespace_name(&tmp, &tmp, class_name TSRMLS_CC); *class_name = tmp; } + efree(lcname); } } @@ -2237,7 +2238,7 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ if (CG(active_op_array)) { if (CG(active_class_entry)) { prefix_name = CG(active_class_entry)->name; - if (CG(current_namespace)) { + if (CG(in_namespace)) { prefix_name += Z_STRLEN_P(CG(current_namespace)) + sizeof("\\")-1; } } else if (CG(active_op_array)->function_name) { @@ -2261,6 +2262,7 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ class_name, class_name_len+1, 1 TSRMLS_CC); result->op_type = IS_CONST; + result->EA = ZEND_ACC_ANON_CLASS; } /* }}} */ void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */ From 1fd0eba24dd3bf34789e6b66d69e7bbb526b1f8b Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 08:03:50 +0100 Subject: [PATCH 49/61] fix functions that declare anons inside namespaces outside of classes --- Zend/tests/anon/007.phpt | 26 ++++++++++++++++++++++++++ Zend/zend_compile.c | 27 ++++++++++++++++++--------- 2 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 Zend/tests/anon/007.phpt diff --git a/Zend/tests/anon/007.phpt b/Zend/tests/anon/007.phpt new file mode 100644 index 000000000000..36a8098048ef --- /dev/null +++ b/Zend/tests/anon/007.phpt @@ -0,0 +1,26 @@ +--TEST-- +testing anons in functions outside of classes in namespaces +--FILE-- + +--EXPECT-- +object(my_factory$$1)#2 (0) { +} + + + diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index f031bf798584..f6791ea59f5d 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2158,8 +2158,12 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */ zval **ns; znode tmp; int len; - + compound = memchr(Z_STRVAL(class_name->u.constant), '\\', Z_STRLEN(class_name->u.constant)); + + if ((class_name->EA & ZEND_ACC_ANON_CLASS) == ZEND_ACC_ANON_CLASS) + return; + if (compound) { /* This is a compound class name that contains namespace prefix */ if (Z_STRVAL(class_name->u.constant)[0] == '\\') { @@ -2229,23 +2233,28 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ char *class_name = NULL; int class_name_len = 0; - const char *prefix_name = NULL; + char *prefix_name = NULL; /* give each class a unique id */ CG(anon_class_id)++; /* prefix anonymous class with current scope for reference */ if (CG(active_op_array)) { - if (CG(active_class_entry)) { - prefix_name = CG(active_class_entry)->name; + if (CG(active_class_entry) || CG(active_op_array)->function_name) { + if (CG(active_class_entry)) { + prefix_name = CG(active_class_entry)->name; + } else { + prefix_name = CG(active_op_array)->function_name; + } + + /* remove namespace from entry name */ if (CG(in_namespace)) { - prefix_name += Z_STRLEN_P(CG(current_namespace)) + sizeof("\\")-1; + prefix_name += Z_STRLEN_P( + CG(current_namespace)) + sizeof("\\")-1; } - } else if (CG(active_op_array)->function_name) { - prefix_name = CG(active_op_array)->function_name; } else prefix_name = "Class"; } - + /* populate znode constant with generated anonymous class name */ Z_TYPE(result->u.constant) = IS_STRING; class_name_len = snprintf( @@ -5035,7 +5044,7 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons return; } - if (CG(current_namespace) && !CG(active_class_entry)) { + if (CG(current_namespace) && !(class_token->EA & ZEND_ACC_ANON_CLASS)) { /* Prefix class name with name of current namespace */ znode tmp; From f880310fcbbf3508f06e046af15ffdd0a240823d Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 10:02:22 +0100 Subject: [PATCH 50/61] another test --- Zend/tests/anon/006.phpt | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Zend/tests/anon/006.phpt b/Zend/tests/anon/006.phpt index e680cdfd0d5e..37571a0bc38f 100644 --- a/Zend/tests/anon/006.phpt +++ b/Zend/tests/anon/006.phpt @@ -3,19 +3,15 @@ testing anons inside namespaces --FILE-- --EXPECT-- -object(Outer$$1)#2 (0) { +object(Class$$1)#1 (0) { } From 903bff5f0693b9ff59312e4f35a3f5a11dbbd688 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 11:51:44 +0100 Subject: [PATCH 51/61] avoid clashes in the global scope by using filename in class name --- Zend/zend_compile.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index f6791ea59f5d..9e6e8578ea9c 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2252,7 +2252,15 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ prefix_name += Z_STRLEN_P( CG(current_namespace)) + sizeof("\\")-1; } - } else prefix_name = "Class"; + } else { + /* use filename as prefix for class */ + prefix_name = CG(active_op_array)->filename; + } + } + + if (!prefix_name) { + /* this shouldn't happen, possibly emit a warning ? */ + prefix_name = "Class"; } /* populate znode constant with generated anonymous class name */ From b91a8d27ce01133507cf4a63aea1973763c51dfd Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 11:58:48 +0100 Subject: [PATCH 52/61] bring tests inline --- Zend/tests/anon/001.phpt | 2 +- Zend/tests/anon/002.phpt | 2 +- Zend/tests/anon/003.phpt | 20 ++++++++++---------- Zend/tests/anon/006.phpt | 4 ++-- Zend/zend_compile.c | 9 +++++---- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Zend/tests/anon/001.phpt b/Zend/tests/anon/001.phpt index 1cf21e702f19..8031c7a128f5 100644 --- a/Zend/tests/anon/001.phpt +++ b/Zend/tests/anon/001.phpt @@ -5,6 +5,6 @@ declare bare anonymous class var_dump(new class{}); ?> --EXPECTF-- -object(Class$$1)#%d (0) { +object(%s$$1)#%d (0) { } diff --git a/Zend/tests/anon/002.phpt b/Zend/tests/anon/002.phpt index 0790e5b6dfe7..149670876ccd 100644 --- a/Zend/tests/anon/002.phpt +++ b/Zend/tests/anon/002.phpt @@ -5,6 +5,6 @@ declare anonymous class extending another var_dump(new class extends stdClass{}); ?> --EXPECTF-- -object(Class$$1)#%d (0) { +object(%s$$1)#%d (0) { } diff --git a/Zend/tests/anon/003.phpt b/Zend/tests/anon/003.phpt index 8c8db9deb391..e74c6d604c8d 100644 --- a/Zend/tests/anon/003.phpt +++ b/Zend/tests/anon/003.phpt @@ -11,43 +11,43 @@ while (@$i++<10) { } ?> --EXPECTF-- -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(1) } -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(2) } -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(3) } -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(4) } -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(5) } -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(6) } -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(7) } -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(8) } -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(9) } -object(Class$$1)#1 (1) { +object(%s$$1)#1 (1) { ["i"]=> int(10) } diff --git a/Zend/tests/anon/006.phpt b/Zend/tests/anon/006.phpt index 37571a0bc38f..335fcebbb0f9 100644 --- a/Zend/tests/anon/006.phpt +++ b/Zend/tests/anon/006.phpt @@ -10,8 +10,8 @@ namespace { var_dump ($hello); } ?> ---EXPECT-- -object(Class$$1)#1 (0) { +--EXPECTF-- +object(%s$$1)#1 (0) { } diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 9e6e8578ea9c..e7c24fd0169f 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2206,7 +2206,8 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */ *class_name = tmp; } } - } else if (CG(current_import) || CG(current_namespace) && !((class_name->EA & ZEND_ACC_ANON_CLASS) == ZEND_ACC_ANON_CLASS)) { + } else if ((CG(current_import) || CG(current_namespace)) && + !((class_name->EA & ZEND_ACC_ANON_CLASS) == ZEND_ACC_ANON_CLASS)) { /* this is a plain name (without \) */ lcname = zend_str_tolower_dup(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant)); @@ -2242,9 +2243,9 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ if (CG(active_op_array)) { if (CG(active_class_entry) || CG(active_op_array)->function_name) { if (CG(active_class_entry)) { - prefix_name = CG(active_class_entry)->name; + prefix_name = (char*) CG(active_class_entry)->name; } else { - prefix_name = CG(active_op_array)->function_name; + prefix_name = (char*) CG(active_op_array)->function_name; } /* remove namespace from entry name */ @@ -2254,7 +2255,7 @@ void zend_do_create_anon_class(znode *result TSRMLS_DC) { /* {{{ */ } } else { /* use filename as prefix for class */ - prefix_name = CG(active_op_array)->filename; + prefix_name = (char*) CG(active_op_array)->filename; } } From e9ab2029ebd102775db0e1e908d84bca65a19fdc Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 21:32:05 +0100 Subject: [PATCH 53/61] ... --- Zend/zend_compile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index ff158899bb92..5122d9499099 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -159,7 +159,7 @@ typedef struct _zend_try_catch_element { #define ZEND_ACC_FINAL_CLASS 0x40 #define ZEND_ACC_INTERFACE 0x80 #define ZEND_ACC_TRAIT 0x120 -#define ZEND_ACC_ANON_CLASS 0x200 +#define ZEND_ACC_ANON_CLASS 0x400 /* op_array flags */ #define ZEND_ACC_INTERACTIVE 0x10 From 28a4941bfd0ca902f784f0ef1417481051459348 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 21:50:33 +0100 Subject: [PATCH 54/61] more precise --- Zend/zend_compile.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index f2e077d7d1fe..00b57132658d 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3832,10 +3832,8 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry if (i < parent_iface_num) { ignore = 1; } else { - if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { - if (ce->ce_flags & ZEND_ACC_FINAL_CLASS) { - continue; - } + if ((ce->ce_flags & (ZEND_ACC_ANON_CLASS|ZEND_ACC_FINAL_CLASS)) == (ZEND_ACC_ANON_CLASS|ZEND_ACC_FINAL_CLASS)) { + continue; } zend_error(E_COMPILE_ERROR, "Class %s cannot implement previously implemented interface %s", ce->name, iface->name); @@ -4618,8 +4616,7 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze ce->refcount++; /* return anonymous class */ - if (ce->ce_flags & (ZEND_ACC_ANON_CLASS) && - ce->ce_flags & (ZEND_ACC_FINAL_CLASS)) { + if ((ce->ce_flags & (ZEND_ACC_ANON_CLASS|ZEND_ACC_FINAL_CLASS)) == (ZEND_ACC_ANON_CLASS|ZEND_ACC_FINAL_CLASS)) { ce->refcount--; return ce; } @@ -4641,8 +4638,8 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze } /* set final anonymous class */ - if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { - ce->ce_flags = ZEND_ACC_ANON_CLASS|ZEND_ACC_FINAL_CLASS; + if ((ce->ce_flags & ZEND_ACC_ANON_CLASS) == ZEND_ACC_ANON_CLASS) { + ce->ce_flags |= ZEND_ACC_FINAL_CLASS; } return ce; } @@ -4686,8 +4683,7 @@ ZEND_API zend_class_entry *do_bind_inherited_class(const zend_op_array *op_array } /* return anonymous class */ - if (ce->ce_flags & (ZEND_ACC_ANON_CLASS) && - ce->ce_flags & (ZEND_ACC_FINAL_CLASS)) { + if ((ce->ce_flags & (ZEND_ACC_ANON_CLASS|ZEND_ACC_FINAL_CLASS)) == (ZEND_ACC_ANON_CLASS|ZEND_ACC_FINAL_CLASS)) { return ce; } @@ -4701,7 +4697,7 @@ ZEND_API zend_class_entry *do_bind_inherited_class(const zend_op_array *op_array } /* set final anonymous class */ - if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { + if ((ce->ce_flags & ZEND_ACC_ANON_CLASS) == (ZEND_ACC_ANON_CLASS)) { ce->ce_flags |= ZEND_ACC_FINAL_CLASS; } @@ -5083,12 +5079,12 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, cons error = 1; } - if (CG(active_class_entry) && !(class_token->EA & ZEND_ACC_ANON_CLASS)) { + if (CG(active_class_entry) && !((class_token->EA & ZEND_ACC_ANON_CLASS) == ZEND_ACC_ANON_CLASS)) { zend_error(E_COMPILE_ERROR, "Class declarations may not be nested"); return; } - if (CG(current_namespace) && !(class_token->EA & ZEND_ACC_ANON_CLASS)) { + if (CG(current_namespace) && !((class_token->EA & ZEND_ACC_ANON_CLASS) == ZEND_ACC_ANON_CLASS)) { /* Prefix class name with name of current namespace */ znode tmp; From 1878372eda83422cce33d67c621bb35683376b6e Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 22:16:40 +0100 Subject: [PATCH 55/61] ... --- ext/opcache/zend_accelerator_module.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c index f2ad1839f240..65ddedd678fb 100644 --- a/ext/opcache/zend_accelerator_module.c +++ b/ext/opcache/zend_accelerator_module.c @@ -218,7 +218,7 @@ static ZEND_INI_MH(OnEnable) stage == ZEND_INI_STAGE_SHUTDOWN || stage == ZEND_INI_STAGE_DEACTIVATE) { return OnUpdateBool(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); - } else if (!ZCG(enabled)) { + } else { /* It may be only temporary disabled */ zend_bool *p; #ifndef ZTS From fb83ad783c973f800b8f3dac33977473e1920560 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 22:17:20 +0100 Subject: [PATCH 56/61] ... --- ext/opcache/zend_accelerator_module.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c index 65ddedd678fb..dedb7215c1df 100644 --- a/ext/opcache/zend_accelerator_module.c +++ b/ext/opcache/zend_accelerator_module.c @@ -238,8 +238,6 @@ static ZEND_INI_MH(OnEnable) *p = 0; return SUCCESS; } - } else { - return SUCCESS; } } From 7bfbb3342013581d2e5ad2ddde2f3a45e73a556c Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 22:18:20 +0100 Subject: [PATCH 57/61] ... --- Zend/zend_operators.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index bb675c4a1ee0..e8629291e545 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -699,15 +699,7 @@ ZEND_API void convert_to_array(zval *op) /* {{{ */ ALLOC_HASHTABLE(ht); zend_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0); - if (Z_OBJ_HT_P(op)->cast_object) { - zval casted; - Z_ARRVAL(casted) = ht; - Z_TYPE(casted) = IS_ARRAY; - if (Z_OBJ_HT_P(op)->cast_object(op, &casted, IS_ARRAY TSRMLS_CC) == FAILURE) { - zval_dtor(&casted); - return; - } - } else if (Z_OBJCE_P(op) == zend_ce_closure) { + if (Z_OBJCE_P(op) == zend_ce_closure) { convert_scalar_to_array(op, IS_ARRAY TSRMLS_CC); if (Z_TYPE_P(op) == IS_ARRAY) { zend_hash_destroy(ht); From 2e5bbd8a25b9c415827966def1b16c892ec5d765 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 22:20:17 +0100 Subject: [PATCH 58/61] ... --- Zend/zend_object_handlers.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zend/zend_object_handlers.h b/Zend/zend_object_handlers.h index 0eaa6fa248a5..07428737ff19 100644 --- a/Zend/zend_object_handlers.h +++ b/Zend/zend_object_handlers.h @@ -162,11 +162,11 @@ ZEND_API union _zend_function *zend_std_get_constructor(zval *object TSRMLS_DC); ZEND_API struct _zend_property_info *zend_get_property_info(zend_class_entry *ce, zval *member, int silent TSRMLS_DC); ZEND_API HashTable *zend_std_get_properties(zval *object TSRMLS_DC); ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp TSRMLS_DC); -ZEND_API int zend_std_cast_object(zval *readobj, zval *writeobj, int type TSRMLS_DC); +ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int type TSRMLS_DC); ZEND_API void zend_std_write_property(zval *object, zval *member, zval *value, const struct _zend_literal *key TSRMLS_DC); ZEND_API void rebuild_object_properties(zend_object *zobj); -#define zend_std_cast_object_tostring zend_std_cast_object + #define IS_ZEND_STD_OBJECT(z) (Z_TYPE(z) == IS_OBJECT && (Z_OBJ_HT((z))->get_class_entry != NULL)) #define HAS_CLASS_ENTRY(z) (Z_OBJ_HT(z)->get_class_entry != NULL) From 7e17fa01205a121430291b202bbd4dc2b2b9fa1b Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 22:22:12 +0100 Subject: [PATCH 59/61] ... --- Zend/zend_object_handlers.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 7aa5a571356c..bc0b58536967 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1519,7 +1519,7 @@ int zend_std_object_get_class_name(const zval *object, const char **class_name, } /* }}} */ -ZEND_API int zend_std_cast_object(zval *readobj, zval *writeobj, int type TSRMLS_DC) /* {{{ */ +ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int type TSRMLS_DC) /* {{{ */ { zval *retval; zend_class_entry *ce; @@ -1675,7 +1675,7 @@ ZEND_API zend_object_handlers std_object_handlers = { zend_std_object_get_class, /* get_class_entry */ zend_std_object_get_class_name, /* get_class_name */ zend_std_compare_objects, /* compare_objects */ - zend_std_cast_object, /* cast_object */ + zend_std_cast_object_tostring, /* cast_object */ NULL, /* count_elements */ NULL, /* get_debug_info */ zend_std_get_closure, /* get_closure */ From e0d9c3b49fecb2d3b8dddae5c853c043d60b1f64 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Sun, 29 Sep 2013 22:23:01 +0100 Subject: [PATCH 60/61] ... --- Zend/zend_object_handlers.c | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index bc0b58536967..8beacdfd352b 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1581,41 +1581,6 @@ ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int ty } ZVAL_DOUBLE(writeobj, 1); return SUCCESS; - case IS_ARRAY: - if (Z_OBJ_HT_P(readobj)->get_properties) { - zend_object *zobj = zend_object_store_get_object(readobj TSRMLS_CC); - - if (zobj) { - HashTable *properties = Z_OBJPROP_P(readobj); - HashPosition position; - zval **property; - - for (zend_hash_internal_pointer_reset_ex(properties, &position); - zend_hash_get_current_data_ex(properties, (void**) &property, &position) == SUCCESS; - zend_hash_move_forward_ex(properties, &position)) { - char *mangled = NULL; - uint mlength; - ulong idx; - - switch (zend_hash_get_current_key_ex(properties, &mangled, &mlength, &idx, 0, &position)) { - case HASH_KEY_IS_STRING: { - const char *cname; - const char *pname; - int plength; - - if (zend_unmangle_property_name_ex(mangled, mlength, &cname, &pname, &plength) == SUCCESS) { - if (zend_check_property_access(zobj, mangled, mlength TSRMLS_CC) != FAILURE) { - zend_hash_update( - Z_ARRVAL_P(writeobj), pname, plength, (void**) &property, sizeof(zval*), NULL); - } - } - } break; - } - } - return SUCCESS; - } - } - return FAILURE; default: INIT_PZVAL(writeobj); Z_TYPE_P(writeobj) = IS_NULL; From 19b1dce969cf41fd8b734a26ad0b68e05e6737ef Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 30 Sep 2013 10:33:56 +0100 Subject: [PATCH 61/61] set extended attributes on class names where not present --- Zend/zend_language_parser.y | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index e4bbf00b5741..1df5eb28efc0 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -892,16 +892,16 @@ function_call: ; class_name: - T_STATIC { $$.op_type = IS_CONST; ZVAL_STRINGL(&$$.u.constant, "static", sizeof("static")-1, 1);} - | namespace_name { $$ = $1; } - | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); } - | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; } + T_STATIC { $$.EA = 0; $$.op_type = IS_CONST; ZVAL_STRINGL(&$$.u.constant, "static", sizeof("static")-1, 1);} + | namespace_name { $$ = $1; $$.EA = 0; } + | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.EA = 0; $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); } + | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; $$.EA = 0; } ; fully_qualified_class_name: - namespace_name { $$ = $1; } - | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); } - | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; } + namespace_name { $$ = $1; $$.EA = 0; } + | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.EA = 0; $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); } + | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; $$.EA = 0; } ;