]> granicus.if.org Git - php/commitdiff
Merge mainstream 'master' branch into refactoring
authorDmitry Stogov <dmitry@zend.com>
Fri, 25 Apr 2014 20:32:51 +0000 (00:32 +0400)
committerDmitry Stogov <dmitry@zend.com>
Fri, 25 Apr 2014 20:32:51 +0000 (00:32 +0400)
During merge I had to revert:
Nikita's patch for php_splice() (it probably needs to be applyed again)
Bob Weinand's patches related to constant expression handling (we need to review them carefully)
I also reverted all our attempts to support sapi/phpdbg (we didn't test it anyway)

Conflicts:
Zend/zend.h
Zend/zend_API.c
Zend/zend_ast.c
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_constants.c
Zend/zend_exceptions.c
Zend/zend_execute.c
Zend/zend_execute.h
Zend/zend_execute_API.c
Zend/zend_hash.c
Zend/zend_highlight.c
Zend/zend_language_parser.y
Zend/zend_language_scanner.c
Zend/zend_language_scanner_defs.h
Zend/zend_variables.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
ext/date/php_date.c
ext/dom/documenttype.c
ext/hash/hash.c
ext/iconv/iconv.c
ext/mbstring/tests/zend_multibyte-10.phpt
ext/mbstring/tests/zend_multibyte-11.phpt
ext/mbstring/tests/zend_multibyte-12.phpt
ext/mysql/php_mysql.c
ext/mysqli/mysqli.c
ext/mysqlnd/mysqlnd_reverse_api.c
ext/mysqlnd/php_mysqlnd.c
ext/opcache/ZendAccelerator.c
ext/opcache/zend_accelerator_util_funcs.c
ext/opcache/zend_persist.c
ext/opcache/zend_persist_calc.c
ext/pcre/php_pcre.c
ext/pdo/pdo_dbh.c
ext/pdo/pdo_stmt.c
ext/pdo_pgsql/pgsql_driver.c
ext/pgsql/pgsql.c
ext/reflection/php_reflection.c
ext/session/session.c
ext/spl/spl_array.c
ext/spl/spl_observer.c
ext/standard/array.c
ext/standard/basic_functions.c
ext/standard/html.c
ext/standard/mail.c
ext/standard/php_array.h
ext/standard/proc_open.c
ext/standard/streamsfuncs.c
ext/standard/user_filters.c
ext/standard/var_unserializer.c
ext/standard/var_unserializer.re
main/php_variables.c
sapi/phpdbg/phpdbg.c
sapi/phpdbg/phpdbg_bp.c
sapi/phpdbg/phpdbg_frame.c
sapi/phpdbg/phpdbg_help.c
sapi/phpdbg/phpdbg_list.c
sapi/phpdbg/phpdbg_print.c
sapi/phpdbg/phpdbg_prompt.c

106 files changed:
1  2 
Zend/zend.h
Zend/zend_API.c
Zend/zend_API.h
Zend/zend_ast.c
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_constants.c
Zend/zend_exceptions.c
Zend/zend_execute.c
Zend/zend_execute.h
Zend/zend_execute_API.c
Zend/zend_highlight.c
Zend/zend_ini_parser.y
Zend/zend_language_parser.y
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l
Zend/zend_object_handlers.c
Zend/zend_opcode.c
Zend/zend_operators.c
Zend/zend_operators.h
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Zend/zend_vm_gen.php
ext/bz2/bz2.c
ext/curl/interface.c
ext/date/php_date.c
ext/date/php_date.h
ext/dba/dba.c
ext/dom/document.c
ext/dom/documenttype.c
ext/gd/gd.c
ext/hash/hash.c
ext/iconv/iconv.c
ext/interbase/ibase_query.c
ext/interbase/ibase_service.c
ext/intl/converter/converter.c
ext/ldap/ldap.c
ext/libxml/libxml.c
ext/mbstring/mbstring.c
ext/mbstring/tests/zend_multibyte-02.phpt
ext/mbstring/tests/zend_multibyte-06.phpt
ext/mbstring/tests/zend_multibyte-12.phpt
ext/mcrypt/mcrypt.c
ext/mysql/php_mysql.c
ext/mysqli/mysqli.c
ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_nonapi.c
ext/mysqli/mysqli_prop.c
ext/oci8/oci8_interface.c
ext/oci8/oci8_statement.c
ext/opcache/ZendAccelerator.c
ext/opcache/ZendAccelerator.h
ext/opcache/zend_accelerator_module.c
ext/opcache/zend_accelerator_util_funcs.c
ext/opcache/zend_persist.c
ext/openssl/openssl.c
ext/pcre/php_pcre.c
ext/pdo/pdo_dbh.c
ext/pdo/pdo_stmt.c
ext/pdo_firebird/firebird_driver.c
ext/pdo_mysql/mysql_driver.c
ext/pdo_pgsql/pgsql_driver.c
ext/pdo_pgsql/pgsql_statement.c
ext/pgsql/pgsql.c
ext/phar/phar_object.c
ext/reflection/php_reflection.c
ext/session/mod_files.c
ext/session/session.c
ext/simplexml/simplexml.c
ext/soap/php_encoding.c
ext/spl/spl_array.c
ext/spl/spl_directory.c
ext/spl/spl_iterators.c
ext/spl/spl_observer.c
ext/standard/array.c
ext/standard/basic_functions.c
ext/standard/basic_functions.h
ext/standard/dns_win32.c
ext/standard/file.c
ext/standard/html.c
ext/standard/image.c
ext/standard/mail.c
ext/standard/math.c
ext/standard/php_array.h
ext/standard/proc_open.c
ext/standard/streamsfuncs.c
ext/standard/string.c
ext/standard/url.c
ext/standard/user_filters.c
ext/standard/var_unserializer.c
ext/standard/var_unserializer.re
ext/xmlrpc/xmlrpc-epi-php.c
ext/zip/php_zip.c
main/SAPI.c
main/SAPI.h
main/main.c
main/output.c
main/php_globals.h
main/php_ini.c
main/php_streams.h
main/php_variables.c
main/streams/streams.c
main/streams/xp_socket.c
sapi/cgi/cgi_main.c
sapi/cli/php_cli_server.c
sapi/litespeed/lsapi_main.c

diff --cc Zend/zend.h
Simple merge
diff --cc Zend/zend_API.c
index 9212527963ac86f93fd9805ea43acbf56d590c7f,2d845d357e3a96036e093bfb77ab29326ad9c952..60ef092bb1fca9ded97901c64db1427b2fb51dca
@@@ -1151,10 -1093,10 +1151,10 @@@ ZEND_API void zend_update_class_constan
                int i;
  
                *scope = class_type;
-               zend_hash_apply_with_argument(&class_type->constants_table, (apply_func_arg_t) zval_update_constant, (void*)1 TSRMLS_CC);
+               zend_hash_apply_with_argument(&class_type->constants_table, (apply_func_arg_t) zval_update_constant, (void *)1 TSRMLS_CC);
  
                for (i = 0; i < class_type->default_properties_count; i++) {
 -                      if (class_type->default_properties_table[i]) {
 +                      if (Z_TYPE(class_type->default_properties_table[i]) != IS_UNDEF) {
                                zval_update_class_constant(&class_type->default_properties_table[i], 0, i TSRMLS_CC);
                        }
                }
@@@ -2084,7 -2017,10 +2084,10 @@@ ZEND_API void zend_check_magic_method_i
        } else if (name_len == sizeof(ZEND_TOSTRING_FUNC_NAME) - 1 &&
                !memcmp(lcname, ZEND_TOSTRING_FUNC_NAME, sizeof(ZEND_TOSTRING_FUNC_NAME)-1) && fptr->common.num_args != 0
        ) {
 -              zend_error(error_type, "Method %s::%s() cannot take arguments", ce->name, ZEND_TOSTRING_FUNC_NAME);
 +              zend_error(error_type, "Method %s::%s() cannot take arguments", ce->name->val, ZEND_TOSTRING_FUNC_NAME);
+       } else if (name_len == sizeof(ZEND_DEBUGINFO_FUNC_NAME) - 1 &&
+               !memcmp(lcname, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && fptr->common.num_args != 0) {
 -              zend_error(error_type, "Method %s::%s() cannot take arguments", ce->name, ZEND_DEBUGINFO_FUNC_NAME);
++              zend_error(error_type, "Method %s::%s() cannot take arguments", ce->name->val, ZEND_DEBUGINFO_FUNC_NAME);
        }
  }
  /* }}} */
@@@ -2098,8 -2034,8 +2101,8 @@@ ZEND_API int zend_register_functions(ze
        int count=0, unload=0;
        HashTable *target_function_table = function_table;
        int error_type;
-       zend_function *ctor = NULL, *dtor = NULL, *clone = NULL, *__get = NULL, *__set = NULL, *__unset = NULL, *__isset = NULL, *__call = NULL, *__callstatic = NULL, *__tostring = NULL;
+       zend_function *ctor = NULL, *dtor = NULL, *clone = NULL, *__get = NULL, *__set = NULL, *__unset = NULL, *__isset = NULL, *__call = NULL, *__callstatic = NULL, *__tostring = NULL, *__debugInfo = NULL;
 -      const char *lowercase_name;
 +      zend_string *lowercase_name;
        int fname_len;
        const char *lc_class_name = NULL;
        int class_name_len = 0;
                         * If it's an old-style constructor, store it only if we don't have
                         * a constructor already.
                         */
 -                      if ((fname_len == class_name_len) && !ctor && !memcmp(lowercase_name, lc_class_name, class_name_len+1)) {
 +                      if ((fname_len == class_name_len) && !ctor && !memcmp(lowercase_name->val, lc_class_name, class_name_len+1)) {
                                ctor = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME) - 1)) {
                                ctor = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_DESTRUCTOR_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_DESTRUCTOR_FUNC_NAME, sizeof(ZEND_DESTRUCTOR_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_DESTRUCTOR_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_DESTRUCTOR_FUNC_NAME, sizeof(ZEND_DESTRUCTOR_FUNC_NAME) - 1)) {
                                dtor = reg_function;
                                if (internal_function->num_args) {
 -                                      zend_error(error_type, "Destructor %s::%s() cannot take arguments", scope->name, ptr->fname);
 +                                      zend_error(error_type, "Destructor %s::%s() cannot take arguments", scope->name->val, ptr->fname);
                                }
 -                      } else if ((fname_len == sizeof(ZEND_CLONE_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_CLONE_FUNC_NAME, sizeof(ZEND_CLONE_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_CLONE_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_CLONE_FUNC_NAME, sizeof(ZEND_CLONE_FUNC_NAME) - 1)) {
                                clone = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_CALL_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_CALL_FUNC_NAME, sizeof(ZEND_CALL_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_CALL_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_CALL_FUNC_NAME, sizeof(ZEND_CALL_FUNC_NAME) - 1)) {
                                __call = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_CALLSTATIC_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_CALLSTATIC_FUNC_NAME, sizeof(ZEND_CALLSTATIC_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_CALLSTATIC_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_CALLSTATIC_FUNC_NAME, sizeof(ZEND_CALLSTATIC_FUNC_NAME) - 1)) {
                                __callstatic = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_TOSTRING_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_TOSTRING_FUNC_NAME, sizeof(ZEND_TOSTRING_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_TOSTRING_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_TOSTRING_FUNC_NAME, sizeof(ZEND_TOSTRING_FUNC_NAME) - 1)) {
                                __tostring = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_GET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_GET_FUNC_NAME, sizeof(ZEND_GET_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_GET_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_GET_FUNC_NAME, sizeof(ZEND_GET_FUNC_NAME) - 1)) {
                                __get = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_SET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_SET_FUNC_NAME, sizeof(ZEND_SET_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_SET_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_SET_FUNC_NAME, sizeof(ZEND_SET_FUNC_NAME) - 1)) {
                                __set = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_UNSET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_UNSET_FUNC_NAME, sizeof(ZEND_UNSET_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_UNSET_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_UNSET_FUNC_NAME, sizeof(ZEND_UNSET_FUNC_NAME) - 1)) {
                                __unset = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_ISSET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_ISSET_FUNC_NAME, sizeof(ZEND_ISSET_FUNC_NAME) - 1)) {
 +                      } else if ((fname_len == sizeof(ZEND_ISSET_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_ISSET_FUNC_NAME, sizeof(ZEND_ISSET_FUNC_NAME) - 1)) {
                                __isset = reg_function;
 -                      } else if ((fname_len == sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME) - 1)) {
++                      } else if ((fname_len == sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME) - 1)) {
+                               __debugInfo = reg_function;
                        } else {
                                reg_function = NULL;
                        }
                        }
                        __isset->common.fn_flags &= ~ZEND_ACC_ALLOW_STATIC;
                }
 -                              zend_error(error_type, "Method %s::%s() cannot be static", scope->name, __debugInfo->common.function_name);
+               if (__debugInfo) {
+                       if (__debugInfo->common.fn_flags & ZEND_ACC_STATIC) {
++                              zend_error(error_type, "Method %s::%s() cannot be static", scope->name->val, __debugInfo->common.function_name->val);
+                       }
+               }
                efree((char*)lc_class_name);
        }
        return SUCCESS;
diff --cc Zend/zend_API.h
Simple merge
diff --cc Zend/zend_ast.c
index 5babcffe48c6dc04c29b4bc07b6bc38b2b600ce8,e486aa326c6c607aaed556ae815ead916138f5c9..07d38dc6bf05914b45978311f49b7c326c34ebda
@@@ -222,9 -251,10 +229,9 @@@ ZEND_API void zend_ast_evaluate(zval *r
                        zval_dtor(&op2);
                        break;
                case ZEND_CONST:
 -                      *result = *ast->u.val;
 -                      zval_copy_ctor(result);
 -                      if (IS_CONSTANT_TYPE(Z_TYPE_P(result))) {
 -                              zval_update_constant_ex(&result, 1, scope TSRMLS_CC);
 +                      ZVAL_DUP(result, &ast->u.val);
 +                      if (Z_OPT_CONSTANT_P(result)) {
-                               zval_update_constant_ex(result, (void *) 1, scope TSRMLS_CC);
++                              zval_update_constant_ex(result, 1, scope TSRMLS_CC);
                        }
                        break;
                case ZEND_BOOL_AND:
@@@ -285,29 -344,20 +292,20 @@@ ZEND_API zend_ast *zend_ast_copy(zend_a
        if (ast == NULL) {
                return NULL;
        } else if (ast->kind == ZEND_CONST) {
 -              zend_ast *copy = zend_ast_create_constant(ast->u.val);
 -              zval_copy_ctor(copy->u.val);
 +              zend_ast *copy = zend_ast_create_constant(&ast->u.val);
 +              zval_copy_ctor(&copy->u.val);
                return copy;
-       } else {
-               switch (ast->children) {
-                       case 1:
-                               return zend_ast_create_unary(
-                                       ast->kind,
-                                       zend_ast_copy((&ast->u.child)[0]));
-                       case 2:
-                               return zend_ast_create_binary(
-                                       ast->kind,
-                                       zend_ast_copy((&ast->u.child)[0]),
-                                       zend_ast_copy((&ast->u.child)[1]));
-                       case 3:
-                               return zend_ast_create_ternary(
-                                       ast->kind,
-                                       zend_ast_copy((&ast->u.child)[0]),
-                                       zend_ast_copy((&ast->u.child)[1]),
-                                       zend_ast_copy((&ast->u.child)[2]));
+       } else if (ast->children) {
+               zend_ast *new = emalloc(sizeof(zend_ast) + sizeof(zend_ast*) * (ast->children - 1));
+               int i;
+               new->kind = ast->kind;
+               new->children = ast->children;
+               for (i = 0; i < ast->children; i++) {
+                       (&new->u.child)[i] = zend_ast_copy((&ast->u.child)[i]);
                }
+               return new;
        }
 -      return zend_ast_create_dynamic(ast->kind);
 +      return NULL;
  }
  
  ZEND_API void zend_ast_destroy(zend_ast *ast)
index 625957f74a6abcd0cfc044bff8bfa293cb261dde,beb53402ba62017a7c611f3aa47b9beb5d0eae2d..8df612e18b358e621cab3dd017f68feddebb37ed
@@@ -97,11 -102,18 +97,18 @@@ ZEND_API zend_compiler_globals compiler
  ZEND_API zend_executor_globals executor_globals;
  #endif
  
+ static void zend_push_function_call_entry(zend_function *fbc TSRMLS_DC) /* {{{ */
+ {
+       zend_function_call_entry fcall = { fbc };
+       zend_stack_push(&CG(function_call_stack), &fcall, sizeof(zend_function_call_entry));
+ }
+ /* }}} */
  static void zend_duplicate_property_info(zend_property_info *property_info) /* {{{ */
  {
 -      property_info->name = str_estrndup(property_info->name, property_info->name_length);
 +      STR_ADDREF(property_info->name);
        if (property_info->doc_comment) {
 -              property_info->doc_comment = estrndup(property_info->doc_comment, property_info->doc_comment_len);
 +              STR_ADDREF(property_info->doc_comment);
        }
  }
  /* }}} */
@@@ -1611,6 -1629,11 +1618,11 @@@ void zend_do_begin_function_declaration
                                if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
                                        zend_error(E_WARNING, "The magic method __invoke() must have public visibility and cannot be static");
                                }
 -                      } else if ((name_len == sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && (!memcmp(lcname, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1))) {
++                      } else if ((name->len == sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && (!memcmp(lcname->val, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1))) {
+                               if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
+                                       zend_error(E_WARNING, "The magic method __debugInfo() must have public visibility and cannot be static");
+                               }
                        }
                } else {
                        char *class_lcname;
                                if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
                                        zend_error(E_WARNING, "The magic method __invoke() must have public visibility and cannot be static");
                                }
 -                      } else if ((name_len == sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && (!memcmp(lcname, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1))) {
++                      } else if ((name->len == sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && (!memcmp(lcname->val, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1))) {
+                               if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
+                                       zend_error(E_WARNING, "The magic method __debugInfo() must have public visibility and cannot be static");
+                               }
+                               CG(active_class_entry)->__debugInfo = (zend_function *) CG(active_op_array);
                        } else if (!(fn_flags & ZEND_ACC_STATIC)) {
                                CG(active_op_array)->fn_flags |= ZEND_ACC_ALLOW_STATIC;
                        }
@@@ -1978,10 -1993,10 +1995,10 @@@ int zend_do_begin_function_call(znode *
                        efree(lcname);
                        return 1; /* Dynamic */
        }
 -      efree(Z_STRVAL(function_name->u.constant));
 -      Z_STRVAL(function_name->u.constant) = lcname;
 +      STR_RELEASE(Z_STR(function_name->u.constant));
 +      Z_STR(function_name->u.constant) = lcname;
  
-       zend_stack_push(&CG(function_call_stack), (void *) &function, sizeof(zend_function *));
+       zend_push_function_call_entry(function TSRMLS_CC);
        if (CG(context).nested_calls + 1 > CG(active_op_array)->nested_calls) {
                CG(active_op_array)->nested_calls = CG(context).nested_calls + 1;
        }
@@@ -2716,7 -2729,7 +2737,7 @@@ void zend_do_unpack_params(znode *param
                 * computed at compile time, thus we need access to EX(call). In order to have it we
                 * retroactively emit a ZEND_INIT_FCALL_BY_NAME opcode. */
                zval func_name;
-               ZVAL_STR(&func_name, STR_COPY((*function_ptr_ptr)->common.function_name));
 -              ZVAL_STRING(&func_name, fcall->fbc->common.function_name, 1);
++              ZVAL_STR(&func_name, STR_COPY(fcall->fbc->common.function_name));
  
                opline = get_next_op(CG(active_op_array) TSRMLS_CC);
                opline->opcode = ZEND_INIT_FCALL_BY_NAME;
@@@ -3466,12 -3455,15 +3490,12 @@@ static char * zend_get_function_declara
                                                }
                                        }
                                        if (precv && precv->opcode == ZEND_RECV_INIT && precv->op2_type != IS_UNUSED) {
 -                                              zval *zv, zv_copy;
 -                                              int use_copy;
 -                                              ALLOC_ZVAL(zv);
 -                                              *zv = *precv->op2.zv;
 -                                              zval_copy_ctor(zv);
 -                                              INIT_PZVAL(zv);
 +                                              zval zv;
 +
 +                                              ZVAL_DUP(&zv, precv->op2.zv);
-                                               zval_update_constant_ex(&zv, (void*)1, fptr->common.scope TSRMLS_CC);
+                                               zval_update_constant_ex(&zv, 1, fptr->common.scope TSRMLS_CC);
 -                                              if (Z_TYPE_P(zv) == IS_BOOL) {
 -                                                      if (Z_LVAL_P(zv)) {
 +                                              if (Z_TYPE(zv) == IS_BOOL) {
 +                                                      if (Z_LVAL(zv)) {
                                                                memcpy(offset, "true", 4);
                                                                offset += 4;
                                                        } else {
@@@ -3981,38 -3953,40 +4005,40 @@@ static zend_bool zend_traits_method_com
  }
  /* }}} */
  
 -static void zend_add_magic_methods(zend_class_entry* ce, const char* mname, uint mname_len, zend_function* fe TSRMLS_DC) /* {{{ */
 +static void zend_add_magic_methods(zend_class_entry* ce, zend_string* mname, zend_function* fe TSRMLS_DC) /* {{{ */
  {
 -      if (!strncmp(mname, ZEND_CLONE_FUNC_NAME, mname_len)) {
 +      if (!strncmp(mname->val, ZEND_CLONE_FUNC_NAME, mname->len)) {
                ce->clone = fe; fe->common.fn_flags |= ZEND_ACC_CLONE;
 -      } else if (!strncmp(mname, ZEND_CONSTRUCTOR_FUNC_NAME, mname_len)) {
 +      } else if (!strncmp(mname->val, ZEND_CONSTRUCTOR_FUNC_NAME, mname->len)) {
                if (ce->constructor) {
 -                      zend_error_noreturn(E_COMPILE_ERROR, "%s has colliding constructor definitions coming from traits", ce->name);
 +                      zend_error_noreturn(E_COMPILE_ERROR, "%s has colliding constructor definitions coming from traits", ce->name->val);
                }
                ce->constructor = fe; fe->common.fn_flags |= ZEND_ACC_CTOR;
 -      } else if (!strncmp(mname, ZEND_DESTRUCTOR_FUNC_NAME,  mname_len)) {
 +      } else if (!strncmp(mname->val, ZEND_DESTRUCTOR_FUNC_NAME,  mname->len)) {
                ce->destructor = fe; fe->common.fn_flags |= ZEND_ACC_DTOR;
 -      } else if (!strncmp(mname, ZEND_GET_FUNC_NAME, mname_len)) {
 +      } else if (!strncmp(mname->val, ZEND_GET_FUNC_NAME, mname->len)) {
                ce->__get = fe;
 -      } else if (!strncmp(mname, ZEND_SET_FUNC_NAME, mname_len)) {
 +      } else if (!strncmp(mname->val, ZEND_SET_FUNC_NAME, mname->len)) {
                ce->__set = fe;
 -      } else if (!strncmp(mname, ZEND_CALL_FUNC_NAME, mname_len)) {
 +      } else if (!strncmp(mname->val, ZEND_CALL_FUNC_NAME, mname->len)) {
                ce->__call = fe;
 -      } else if (!strncmp(mname, ZEND_UNSET_FUNC_NAME, mname_len)) {
 +      } else if (!strncmp(mname->val, ZEND_UNSET_FUNC_NAME, mname->len)) {
                ce->__unset = fe;
 -      } else if (!strncmp(mname, ZEND_ISSET_FUNC_NAME, mname_len)) {
 +      } else if (!strncmp(mname->val, ZEND_ISSET_FUNC_NAME, mname->len)) {
                ce->__isset = fe;
 -      } else if (!strncmp(mname, ZEND_CALLSTATIC_FUNC_NAME, mname_len)) {
 +      } else if (!strncmp(mname->val, ZEND_CALLSTATIC_FUNC_NAME, mname->len)) {
                ce->__callstatic = fe;
 -      } else if (!strncmp(mname, ZEND_TOSTRING_FUNC_NAME, mname_len)) {
 +      } else if (!strncmp(mname->val, ZEND_TOSTRING_FUNC_NAME, mname->len)) {
                ce->__tostring = fe;
 -      } else if (!strncmp(mname, ZEND_DEBUGINFO_FUNC_NAME, mname_len)) {
++      } else if (!strncmp(mname->val, ZEND_DEBUGINFO_FUNC_NAME, mname->len)) {
+               ce->__debugInfo = fe;
 -      } else if (ce->name_length + 1 == mname_len) {
 -              char *lowercase_name = emalloc(ce->name_length + 1);
 -              zend_str_tolower_copy(lowercase_name, ce->name, ce->name_length);
 -              lowercase_name = (char*)zend_new_interned_string(lowercase_name, ce->name_length + 1, 1 TSRMLS_CC);
 -              if (!memcmp(mname, lowercase_name, mname_len)) {
 +      } else if (ce->name->len == mname->len) {
 +              zend_string *lowercase_name = STR_ALLOC(ce->name->len, 0);
 +              zend_str_tolower_copy(lowercase_name->val, ce->name->val, ce->name->len);
 +              lowercase_name = zend_new_interned_string(lowercase_name TSRMLS_CC);
 +              if (!memcmp(mname->val, lowercase_name->val, mname->len)) {
                        if (ce->constructor) {
 -                              zend_error_noreturn(E_COMPILE_ERROR, "%s has colliding constructor definitions coming from traits", ce->name);
 +                              zend_error_noreturn(E_COMPILE_ERROR, "%s has colliding constructor definitions coming from traits", ce->name->val);
                        }
                        ce->constructor = fe;
                        fe->common.fn_flags |= ZEND_ACC_CTOR;
index 24f06c426f7297cbb74857fa73fa410ba6ab05cd,99d3704b764ccb51d0b3070d0c2f5a16a7bd72d0..4288a3b7053ef595f9be4b75c15c512c92054dec
@@@ -340,9 -360,14 +340,14 @@@ union _zend_function 
  
  typedef struct _zend_function_state {
        zend_function *function;
 -      void **arguments;
 +      zval *arguments;
  } zend_function_state;
  
+ typedef struct _zend_function_call_entry {
+       zend_function *fbc;
+       zend_uint arg_num;
+       zend_bool uses_argument_unpacking;
+ } zend_function_call_entry;
  
  typedef struct _zend_switch_entry {
        znode cond;
@@@ -506,9 -523,9 +511,9 @@@ void zend_do_begin_dynamic_function_cal
  void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC);
  void zend_do_build_full_name(znode *result, znode *prefix, znode *name, int is_class_member TSRMLS_DC);
  int zend_do_begin_class_member_function_call(znode *class_name, znode *method_name TSRMLS_DC);
- void zend_do_end_function_call(znode *function_name, znode *result, const znode *argument_list, int is_method, int is_dynamic_fcall TSRMLS_DC);
+ void zend_do_end_function_call(znode *function_name, znode *result, int is_method, int is_dynamic_fcall TSRMLS_DC);
  void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC);
 -void zend_do_yield(znode *result, znode *value, const znode *key, zend_bool is_variable TSRMLS_DC);
 +void zend_do_yield(znode *result, znode *value, znode *key, zend_bool is_variable TSRMLS_DC);
  void zend_do_handle_exception(TSRMLS_D);
  
  void zend_do_begin_lambda_function_declaration(znode *result, znode *function_token, int return_reference, int is_static TSRMLS_DC);
index fd98a92c4e98994bb07df45bafcbbdaa177a1f1b,0f44f58a77cb227c00d20a1c95cdb3b900b13898..a25fe2bdb5560d3883204e87d17f625e8c929af7
@@@ -379,26 -358,23 +379,26 @@@ ZEND_API zval *zend_get_constant_ex(zen
                        } else {
                                zend_error(E_ERROR, "Cannot access static:: when no class scope is active");
                        }
 -                      efree(lcname);
                } else {
 -                      efree(lcname);
 -                      ce = zend_fetch_class(class_name, class_name_len, flags TSRMLS_CC);
 +                      ce = zend_fetch_class(class_name, flags TSRMLS_CC);
                }
 -              if (retval && ce) {
 -                      if (zend_hash_find(&ce->constants_table, constant_name, const_name_len+1, (void **) &ret_constant) != SUCCESS) {
 -                              retval = 0;
 +              free_alloca(lcname, use_heap);
 +              if (ce) {
 +                      ret_constant = zend_hash_find(&ce->constants_table, constant_name);
 +                      if (ret_constant == NULL) {
                                if ((flags & ZEND_FETCH_CLASS_SILENT) == 0) {
 -                                      zend_error(E_ERROR, "Undefined class constant '%s::%s'", class_name, constant_name);
 +                                      zend_error(E_ERROR, "Undefined class constant '%s::%s'", class_name->val, constant_name->val);
                                }
 +                      } else if (Z_ISREF_P(ret_constant)) {
 +                              ret_constant = Z_REFVAL_P(ret_constant);
                        }
 -              } else if (!ce) {
 -                      retval = 0;
                }
 -              efree(class_name);
 -              goto finish;
 +              STR_FREE(class_name);
 +              STR_FREE(constant_name);
 +              if (ret_constant && Z_CONSTANT_P(ret_constant)) {
-                       zval_update_constant_ex(ret_constant, (void*)1, ce TSRMLS_CC);
++                      zval_update_constant_ex(ret_constant, 1, ce TSRMLS_CC);
 +              }
 +              return ret_constant;
        }
  
        /* non-class constant */
index 4272adedbd2be184a48ba29d9ebc488781931572,e4570269e3ab2ffd98e8498272819dbf14e3457c..137d9c97f8bc31a62daa0fd5e5267e8425a93987
@@@ -335,42 -335,48 +335,49 @@@ ZEND_METHOD(error_exception, getSeverit
  /* }}} */
  
  /* {{{ gettraceasstring() macros */
 -#define TRACE_APPEND_CHR(chr)                                            \
 -      *str = (char*)erealloc(*str, *len + 1 + 1);                          \
 -      (*str)[(*len)++] = chr
 +#define TRACE_APPEND_CHR(chr)                                        \
 +      str = STR_REALLOC(str, str->len + 1, 0);                         \
 +    str->val[str->len - 1] = chr
  
 -#define TRACE_APPEND_STRL(val, vallen)                                   \
 -      {                                                                    \
 -              int l = vallen;                                                  \
 -              *str = (char*)erealloc(*str, *len + l + 1);                      \
 -              memcpy((*str) + *len, val, l);                                   \
 -              *len += l;                                                       \
 +#define TRACE_APPEND_STRL(v, l)                                      \
 +      {                                                                \
 +              str = STR_REALLOC(str, str->len + (l), 0);                   \
 +              memcpy(str->val + str->len - (l), (v), (l));                 \
        }
  
 -#define TRACE_APPEND_STR(val)                                            \
 -      TRACE_APPEND_STRL(val, sizeof(val)-1)
 +#define TRACE_APPEND_STR(v)                                          \
 +      TRACE_APPEND_STRL((v), sizeof((v))-1)
  
 -#define TRACE_APPEND_KEY(key)                                                   \
 -      if (zend_hash_find(ht, key, sizeof(key), (void**)&tmp) == SUCCESS) {    \
 -              if (Z_TYPE_PP(tmp) != IS_STRING) {                              \
 -                      zend_error(E_WARNING, "Value for %s is no string", key); \
 -                      TRACE_APPEND_STR("[unknown]");                          \
 -              } else {                                                        \
 -                      TRACE_APPEND_STRL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));  \
 -              }                                                               \
 -      }
 +#define TRACE_APPEND_KEY(key) do {                                          \
 +              tmp = zend_hash_str_find(ht, key, sizeof(key)-1);                   \
 +              if (tmp) {                                                          \
 +                      if (Z_TYPE_P(tmp) != IS_STRING) {                               \
 +                              zend_error(E_WARNING, "Value for %s is no string", key);    \
 +                              TRACE_APPEND_STR("[unknown]");                              \
 +                      } else {                                                        \
 +                              TRACE_APPEND_STRL(Z_STRVAL_P(tmp), Z_STRLEN_P(tmp));        \
 +                      }                                                               \
 +              } \
 +      } while (0)
  
 -#define TRACE_ARG_APPEND(vallen)                                                              \
 -      *str = (char*)erealloc(*str, *len + 1 + vallen);                                        \
 -      memmove((*str) + *len - l_added + 1 + vallen, (*str) + *len - l_added + 1, l_added);
++#define TRACE_ARG_APPEND(vallen) do { \
++              int len = str->len; \
++              str = STR_REALLOC(str, len + vallen, 0); \
++              memmove(str->val + len - l_added + 1 + vallen, str->val + len - l_added + 1, l_added); \
++      } while (0)
  /* }}} */
  
 -static int _build_trace_args(zval **arg TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
 +static int _build_trace_args(zval *arg TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
  {
 -      char **str;
 -      int *len;
 +      zend_string *str, **str_ptr;
  
 -      str = va_arg(args, char**);
 -      len = va_arg(args, int*);
 +      str_ptr = va_arg(args, zend_string**);
 +      str = *str_ptr;
  
        /* the trivial way would be to do:
-        * conver_to_string_ex(arg);
+        * convert_to_string_ex(arg);
         * append it and kill the now tmp arg.
         * but that could cause some E_NOTICE and also damn long lines.
         */
                                l_added += 3 + 1;
                        }
                        while (--l_added) {
-                               if (str->val[str->len - l_added] < 32) {
-                                       str->val[str->len - l_added] = '?';
 -                              unsigned char chr = (*str)[*len - l_added];
++                              unsigned char chr = str->val[str->len - l_added];
+                               if (chr < 32 || chr == '\\' || chr > 126) {
 -                                      (*str)[*len - l_added] = '\\';
++                                      str->val[str->len - l_added] = '\\';
+                                       switch (chr) {
+                                               case '\n':
+                                                       TRACE_ARG_APPEND(1);
 -                                                      (*str)[++(*len) - l_added] = 'n';
++                                                      str->val[str->len - l_added] = 'n';
+                                                       break;
+                                               case '\r':
+                                                       TRACE_ARG_APPEND(1);
 -                                                      (*str)[++(*len) - l_added] = 'r';
++                                                      str->val[str->len - l_added] = 'r';
+                                                       break;
+                                               case '\t':
+                                                       TRACE_ARG_APPEND(1);
 -                                                      (*str)[++(*len) - l_added] = 't';
++                                                      str->val[str->len - l_added] = 't';
+                                                       break;
+                                               case '\f':
+                                                       TRACE_ARG_APPEND(1);
 -                                                      (*str)[++(*len) - l_added] = 'f';
++                                                      str->val[str->len - l_added] = 'f';
+                                                       break;
+                                               case '\v':
+                                                       TRACE_ARG_APPEND(1);
 -                                                      (*str)[++(*len) - l_added] = 'v';
++                                                      str->val[str->len - l_added] = 'v';
+                                                       break;
+ #ifndef PHP_WIN32
+                                               case '\e':
+ #else
+                                               case VK_ESCAPE:
+ #endif
+                                                       TRACE_ARG_APPEND(1);
 -                                                      (*str)[++(*len) - l_added] = 'e';
++                                                      str->val[str->len - l_added] = 'e';
+                                                       break;
+                                               case '\\':
+                                                       TRACE_ARG_APPEND(1);
 -                                                      (*str)[++(*len) - l_added] = '\\';
++                                                      str->val[str->len - l_added] = '\\';
+                                                       break;
+                                               default:
+                                                       TRACE_ARG_APPEND(3);
 -                                                      (*str)[*len - l_added + 1] = 'x';
++                                                      str->val[str->len - l_added - 2] = 'x';
+                                                       if ((chr >> 4) < 10) {
 -                                                              (*str)[*len - l_added + 2] = (chr >> 4) + '0';
++                                                              str->val[str->len - l_added - 1] = (chr >> 4) + '0';
+                                                       } else {
 -                                                              (*str)[*len - l_added + 2] = (chr >> 4) + 'A' - 10;
++                                                              str->val[str->len - l_added - 1] = (chr >> 4) + 'A' - 10;
+                                                       }
+                                                       if (chr % 16 < 10) {
 -                                                              (*str)[*len - l_added + 3] = chr % 16 + '0';
++                                                              str->val[str->len - l_added] = chr % 16 + '0';
+                                                       } else {
 -                                                              (*str)[*len - l_added + 3] = chr % 16 + 'A' - 10;
++                                                              str->val[str->len - l_added] = chr % 16 + 'A' - 10;
+                                                       }
 -                                                      *len += 3;
+                                       }
                                }
                        }
                        break;
Simple merge
index d632a978409506b1aa9400841383888ad3b56c3c,d151c3413da007e24e52e3abbf728681bd39bf65..98e2678f531baf0fd501ae0cedb6a80b20321507
@@@ -134,10 -156,10 +134,10 @@@ again
        return result;
  }
  
- ZEND_API int zval_update_constant(zval *pp, void *arg TSRMLS_DC);
- ZEND_API int zval_update_constant_inline_change(zval *pp, void *arg TSRMLS_DC);
- ZEND_API int zval_update_constant_no_inline_change(zval *pp, void *arg TSRMLS_DC);
- ZEND_API int zval_update_constant_ex(zval *pp, void *arg, zend_class_entry *scope TSRMLS_DC);
 -ZEND_API int zval_update_constant(zval **pp, zend_bool inline_change TSRMLS_DC);
 -ZEND_API int zval_update_constant_inline_change(zval **pp, zend_class_entry *scope TSRMLS_DC);
 -ZEND_API int zval_update_constant_no_inline_change(zval **pp, zend_class_entry *scope TSRMLS_DC);
 -ZEND_API int zval_update_constant_ex(zval **pp, zend_bool inline_change, zend_class_entry *scope TSRMLS_DC);
++ZEND_API int zval_update_constant(zval *pp, zend_bool inline_change TSRMLS_DC);
++ZEND_API int zval_update_constant_inline_change(zval *pp, zend_class_entry *scope TSRMLS_DC);
++ZEND_API int zval_update_constant_no_inline_change(zval *pp, zend_class_entry *scope TSRMLS_DC);
++ZEND_API int zval_update_constant_ex(zval *pp, zend_bool inline_change, zend_class_entry *scope TSRMLS_DC);
  
  /* dedicated Zend executor functions - do not use! */
  #define ZEND_VM_STACK_PAGE_SIZE ((16 * 1024) - 16)
index 621ad665864db000eeea705a12dd493dc82bcf95,7cfd85d52aaf74565f72152bfe6872549d458ea7..03f763ea2167c7c0d1043cf88435f8f454b929a8
@@@ -501,15 -451,15 +501,14 @@@ ZEND_API int zend_is_true(zval *op TSRM
  
  #include "../TSRM/tsrm_strtok_r.h"
  
- #define IS_VISITED_CONSTANT                   0x080
+ #define IS_VISITED_CONSTANT                   0x80
  #define IS_CONSTANT_VISITED(p)                (Z_TYPE_P(p) & IS_VISITED_CONSTANT)
  #define Z_REAL_TYPE_P(p)                      (Z_TYPE_P(p) & ~IS_VISITED_CONSTANT)
 -#define MARK_CONSTANT_VISITED(p)      Z_TYPE_P(p) |= IS_VISITED_CONSTANT
 +#define MARK_CONSTANT_VISITED(p)      Z_TYPE_INFO_P(p) |= IS_VISITED_CONSTANT
  
- ZEND_API int zval_update_constant_ex(zval *p, void *arg, zend_class_entry *scope TSRMLS_DC) /* {{{ */
 -ZEND_API int zval_update_constant_ex(zval **pp, zend_bool inline_change, zend_class_entry *scope TSRMLS_DC) /* {{{ */
++ZEND_API int zval_update_constant_ex(zval *p, zend_bool inline_change, zend_class_entry *scope TSRMLS_DC) /* {{{ */
  {
-       zend_bool inline_change = (zend_bool) (zend_uintptr_t) arg;
 -      zval *p = *pp;
 -      zval const_value;
 +      zval *const_value, tmp;
        char *colon;
  
        if (IS_CONSTANT_VISITED(p)) {
                        }
                } else {
                        if (inline_change) {
 -                              str_efree(Z_STRVAL_P(p));
 +                              STR_RELEASE(Z_STR_P(p));
                        }
 -                      *p = const_value;
 +//???!
 +                      ZVAL_COPY_VALUE(p, const_value);
 +                      if (Z_OPT_CONSTANT_P(p)) {
-                               zval_update_constant_ex(p, (void*)1, NULL TSRMLS_CC);
++                              zval_update_constant_ex(p, 1, NULL TSRMLS_CC);
 +                      }
 +                      zval_opt_copy_ctor(p);
 +              }
 +
 +              if (Z_REFCOUNTED_P(p)) Z_SET_REFCOUNT_P(p, refcount);
 +      } else if (Z_TYPE_P(p) == IS_CONSTANT_ARRAY) {
 +              zval *element, new_val;
 +              zend_string *str_index;
 +              ulong num_index;
 +              int ret;
 +
 +              SEPARATE_ZVAL_IF_NOT_REF(p);
 +
 +              Z_TYPE_INFO_P(p) = IS_ARRAY_EX;
 +              if (!inline_change) {
 +                      HashTable *ht = Z_ARRVAL_P(p);
 +                      ZVAL_NEW_ARR(p);
 +                      zend_hash_init(Z_ARRVAL_P(p), zend_hash_num_elements(ht), NULL, ZVAL_PTR_DTOR, 0);
 +                      zend_hash_copy(Z_ARRVAL_P(p), ht, ZVAL_COPY_CTOR);
                }
  
 -              Z_SET_REFCOUNT_P(p, refcount);
 -              Z_SET_ISREF_TO_P(p, is_ref);
 +              /* First go over the array and see if there are any constant indices */
 +              zend_hash_internal_pointer_reset(Z_ARRVAL_P(p));
 +              while ((element = zend_hash_get_current_data(Z_ARRVAL_P(p))) != NULL) {
 +                      if (zend_hash_get_current_key(Z_ARRVAL_P(p), &str_index, &num_index, 0) != HASH_KEY_IS_STRING) {
 +                              zend_hash_move_forward(Z_ARRVAL_P(p));
 +                              continue;
 +                      }
 +                      if (!(GC_FLAGS(str_index) & (IS_STR_CONSTANT | IS_STR_AST))) {
 +                              zend_hash_move_forward(Z_ARRVAL_P(p));
 +                              continue;
 +                      }
 +
 +                      if (GC_FLAGS(str_index) & IS_STR_AST) {
 +                              zend_ast_ref *ast = *(zend_ast_ref **)str_index->val;
 +
 +                              zend_ast_evaluate(&tmp, ast->ast, scope TSRMLS_CC);
 +                              zend_ast_destroy(ast->ast);
 +                              efree(ast);
 +                              const_value = &tmp;
 +                      } else if (!(const_value = zend_get_constant_ex(str_index, scope, GC_FLAGS(str_index) & ~(IS_STR_PERSISTENT | IS_STR_INTERNED |IS_STR_PERMANENT) TSRMLS_CC))) {
 +                              char *actual, *str;
 +                              const char *save = str_index->val;
 +                              int len;
 +
 +                              str = str_index->val;
 +                              len = str_index->len;
 +                              if ((colon = (char*)zend_memrchr(str, ':', len))) {
 +                                      zend_error(E_ERROR, "Undefined class constant '%s'", str);
 +                                      len -= ((colon - str) + 1);
 +                                      str = colon;
 +                              } else {
 +                                      if (GC_FLAGS(str_index) & IS_STR_CONSTANT_UNQUALIFIED) {
 +                                              if ((actual = (char *)zend_memrchr(str, '\\', len))) {
 +                                                      actual++;
 +                                                      len -= (actual - str);
 +                                                      str = actual;
 +                                              }
 +                                      }
 +                                      if (str[0] == '\\') {
 +                                              ++str;
 +                                              --len;
 +                                      }
 +                                      if (save[0] == '\\') {
 +                                              ++save;
 +                                      }
 +                                      if (!(GC_FLAGS(str_index) & IS_STR_CONSTANT_UNQUALIFIED)) {
 +                                              zend_error(E_ERROR, "Undefined constant '%s'", save);
 +                                      }
 +                                      zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",     str, str);
 +                              }
 +                              if (str == str_index->val && len == str_index->len) {
 +                                      ZVAL_STR(&tmp, STR_COPY(str_index));
 +                              } else {
 +                                      ZVAL_STRINGL(&tmp, str, len);
 +                              }
 +                              const_value = &tmp;
 +                      } else {
 +//???!
 +                              ZVAL_COPY_VALUE(&tmp, const_value);
 +                              if (Z_OPT_CONSTANT(tmp)) {
-                                       zval_update_constant_ex(&tmp, (void*)1, NULL TSRMLS_CC);
++                                      zval_update_constant_ex(&tmp, 1, NULL TSRMLS_CC);
 +                              }
 +                              zval_opt_copy_ctor(&tmp);
 +                              const_value = &tmp;
 +                      }
 +
 +                      if (Z_REFCOUNTED_P(element) && Z_REFCOUNT_P(element) > 1) {
 +                              ZVAL_DUP(&new_val, element);
 +                              zval_ptr_dtor(element);
 +                              ZVAL_COPY_VALUE(element, &new_val);
 +                      }
 +
 +                      switch (Z_TYPE_P(const_value)) {
 +                              case IS_STRING:
 +                                      ret = zend_symtable_update_current_key_ex(Z_ARRVAL_P(p), Z_STR_P(const_value), HASH_UPDATE_KEY_IF_BEFORE);
 +                                      break;
 +                              case IS_BOOL:
 +                              case IS_LONG:
 +                                      ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL, Z_LVAL_P(const_value), HASH_UPDATE_KEY_IF_BEFORE);
 +                                      break;
 +                              case IS_DOUBLE:
 +                                      ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL, zend_dval_to_lval(Z_DVAL_P(const_value)), HASH_UPDATE_KEY_IF_BEFORE);
 +                                      break;
 +                              case IS_NULL:
 +                                      ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_STRING, STR_EMPTY_ALLOC(), 0, HASH_UPDATE_KEY_IF_BEFORE);
 +                                      break;
 +                              default:
 +                                      ret = SUCCESS;
 +                                      break;
 +                      }
 +                      if (ret == SUCCESS) {
 +                              zend_hash_move_forward(Z_ARRVAL_P(p));
 +                      }
 +                      zval_dtor(const_value);
 +              }
 +              zend_hash_apply_with_argument(Z_ARRVAL_P(p), (apply_func_arg_t) zval_update_constant_inline_change, (void *) scope TSRMLS_CC);
 +              zend_hash_internal_pointer_reset(Z_ARRVAL_P(p));
        } else if (Z_TYPE_P(p) == IS_CONSTANT_AST) {
 -              SEPARATE_ZVAL_IF_NOT_REF(pp);
 -              p = *pp;
 +              SEPARATE_ZVAL_IF_NOT_REF(p);
  
 -              zend_ast_evaluate(&const_value, Z_AST_P(p), scope TSRMLS_CC);
 +              zend_ast_evaluate(&tmp, Z_ASTVAL_P(p), scope TSRMLS_CC);
                if (inline_change) {
 -                      zend_ast_destroy(Z_AST_P(p));
 +                      zend_ast_destroy(Z_ASTVAL_P(p));
 +                      efree(Z_AST_P(p));
                }
 -              ZVAL_COPY_VALUE(p, &const_value);
 +              ZVAL_COPY_VALUE(p, &tmp);
        }
        return 0;
  }
  /* }}} */
  
- ZEND_API int zval_update_constant_inline_change(zval *pp, void *scope TSRMLS_DC) /* {{{ */
 -ZEND_API int zval_update_constant_inline_change(zval **pp, zend_class_entry *scope TSRMLS_DC) /* {{{ */
++ZEND_API int zval_update_constant_inline_change(zval *pp, zend_class_entry *scope TSRMLS_DC) /* {{{ */
  {
-       return zval_update_constant_ex(pp, (void*)1, scope TSRMLS_CC);
+       return zval_update_constant_ex(pp, 1, scope TSRMLS_CC);
  }
  /* }}} */
  
- ZEND_API int zval_update_constant_no_inline_change(zval *pp, void *scope TSRMLS_DC) /* {{{ */
 -ZEND_API int zval_update_constant_no_inline_change(zval **pp, zend_class_entry *scope TSRMLS_DC) /* {{{ */
++ZEND_API int zval_update_constant_no_inline_change(zval *pp, zend_class_entry *scope TSRMLS_DC) /* {{{ */
  {
-       return zval_update_constant_ex(pp, (void*)0, scope TSRMLS_CC);
+       return zval_update_constant_ex(pp, 0, scope TSRMLS_CC);
  }
  /* }}} */
  
- ZEND_API int zval_update_constant(zval *pp, void *arg TSRMLS_DC) /* {{{ */
 -ZEND_API int zval_update_constant(zval **pp, zend_bool inline_change TSRMLS_DC) /* {{{ */
++ZEND_API int zval_update_constant(zval *pp, zend_bool inline_change TSRMLS_DC) /* {{{ */
  {
-       return zval_update_constant_ex(pp, arg, NULL TSRMLS_CC);
+       return zval_update_constant_ex(pp, inline_change, NULL TSRMLS_CC);
  }
  /* }}} */
  
Simple merge
index 29a2cb0aff9bb045ad179cf3778b961c5adbd662,3823efd4130a931fabc214b95f30c938fb31c391..eaf451a3a1f316c2dacb6cb8c753bc35599b283d
@@@ -116,21 -122,14 +116,21 @@@ static void zend_ini_get_constant(zval 
  
        /* If name contains ':' it is not a constant. Bug #26893. */
        if (!memchr(Z_STRVAL_P(name), ':', Z_STRLEN_P(name))
 -                      && zend_get_constant(Z_STRVAL_P(name), Z_STRLEN_P(name), &z_constant TSRMLS_CC)) {
 -              /* z_constant is emalloc()'d */
 -              convert_to_string(&z_constant);
 -              Z_STRVAL_P(result) = zend_strndup(Z_STRVAL(z_constant), Z_STRLEN(z_constant));
 -              Z_STRLEN_P(result) = Z_STRLEN(z_constant);
 -              Z_TYPE_P(result) = Z_TYPE(z_constant);
 -              zval_dtor(&z_constant);
 -              free(Z_STRVAL_P(name));
 +                      && (c = zend_get_constant(Z_STR_P(name) TSRMLS_CC)) != 0) {
 +              if (Z_TYPE_P(c) != IS_STRING) {
 +                      ZVAL_COPY_VALUE(&tmp, c);
 +                      if (Z_OPT_CONSTANT(tmp)) {
-                               zval_update_constant_ex(&tmp, (void*)1, NULL TSRMLS_CC);
++                              zval_update_constant_ex(&tmp, 1, NULL TSRMLS_CC);
 +                      }
 +                      zval_opt_copy_ctor(&tmp);
 +                      convert_to_string(&tmp);
 +                      c = &tmp;
 +              }
 +              ZVAL_PSTRINGL(result, Z_STRVAL_P(c), Z_STRLEN_P(c));
 +              if (c == &tmp) {
 +                      zval_dtor(&tmp);
 +              }
 +              STR_FREE(Z_STR_P(name));
        } else {
                *result = *name;
        }
index 073242b97e1736443fd7a5a613f70a3f526de9a8,56e702e8f9f4e34e31ddd046c41d6cfc2c05c7d1..ace4f6c284a3fbfa9d10b0b73379b9c26ce03a1e
@@@ -997,9 -1003,11 +1003,10 @@@ static_scalar_value
  ;
  
  static_operation:
 -              static_scalar_value '[' static_scalar_value ']' { $$.u.ast = zend_ast_create_binary(ZEND_FETCH_DIM_R, $1.u.ast, $3.u.ast); }
 -      |       static_scalar_value '+' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_ADD, $1.u.ast, $3.u.ast); }
 +              static_scalar_value '+' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_ADD, $1.u.ast, $3.u.ast); }
        |       static_scalar_value '-' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_SUB, $1.u.ast, $3.u.ast); }
        |       static_scalar_value '*' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_MUL, $1.u.ast, $3.u.ast); }
+       |       static_scalar_value T_POW static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_POW, $1.u.ast, $3.u.ast); }
        |       static_scalar_value '/' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_DIV, $1.u.ast, $3.u.ast); }
        |       static_scalar_value '%' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_MOD, $1.u.ast, $3.u.ast); }
        |       '!' static_scalar_value { $$.u.ast = zend_ast_create_unary(ZEND_BOOL_NOT, $2.u.ast); }
index cd7119f43de6f78c926ca5af6c9f3e5e564442ea,ae41cde77f64c1e7e519fc4ef26e425dddf40a95..be8be6c782b222a96eed285c224779abdc8c1e74
 -/* Generated by re2c 0.13.5 */\r
 -#line 1 "Zend/zend_language_scanner.l"\r
 -/*\r
 -   +----------------------------------------------------------------------+\r
 -   | Zend Engine                                                          |\r
 -   +----------------------------------------------------------------------+\r
 -   | Copyright (c) 1998-2014 Zend Technologies Ltd. (http://www.zend.com) |\r
 -   +----------------------------------------------------------------------+\r
 -   | This source file is subject to version 2.00 of the Zend license,     |\r
 -   | that is bundled with this package in the file LICENSE, and is        |\r
 -   | available through the world-wide-web at the following url:           |\r
 -   | http://www.zend.com/license/2_00.txt.                                |\r
 -   | If you did not receive a copy of the Zend license and are unable to  |\r
 -   | obtain it through the world-wide-web, please send a note to          |\r
 -   | license@zend.com so we can mail you a copy immediately.              |\r
 -   +----------------------------------------------------------------------+\r
 -   | Authors: Marcus Boerger <helly@php.net>                              |\r
 -   |          Nuno Lopes <nlopess@php.net>                                |\r
 -   |          Scott MacVicar <scottmac@php.net>                           |\r
 -   | Flex version authors:                                                |\r
 -   |          Andi Gutmans <andi@zend.com>                                |\r
 -   |          Zeev Suraski <zeev@zend.com>                                |\r
 -   +----------------------------------------------------------------------+\r
 -*/\r
 -\r
 -/* $Id$ */\r
 -\r
 -#if 0\r
 -# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)\r
 -#else\r
 -# define YYDEBUG(s, c)\r
 -#endif\r
 -\r
 -#include "zend_language_scanner_defs.h"\r
 -\r
 -#include <errno.h>\r
 -#include "zend.h"\r
 -#ifdef PHP_WIN32\r
 -# include <Winuser.h>\r
 -#endif\r
 -#include "zend_alloc.h"\r
 -#include <zend_language_parser.h>\r
 -#include "zend_compile.h"\r
 -#include "zend_language_scanner.h"\r
 -#include "zend_highlight.h"\r
 -#include "zend_constants.h"\r
 -#include "zend_variables.h"\r
 -#include "zend_operators.h"\r
 -#include "zend_API.h"\r
 -#include "zend_strtod.h"\r
 -#include "zend_exceptions.h"\r
 -#include "zend_virtual_cwd.h"\r
 -#include "tsrm_config_common.h"\r
 -\r
 -#define YYCTYPE   unsigned char\r
 -#define YYFILL(n) { if ((YYCURSOR + n) >= (YYLIMIT + ZEND_MMAP_AHEAD)) { return 0; } }\r
 -#define YYCURSOR  SCNG(yy_cursor)\r
 -#define YYLIMIT   SCNG(yy_limit)\r
 -#define YYMARKER  SCNG(yy_marker)\r
 -\r
 -#define YYGETCONDITION()  SCNG(yy_state)\r
 -#define YYSETCONDITION(s) SCNG(yy_state) = s\r
 -\r
 -#define STATE(name)  yyc##name\r
 -\r
 -/* emulate flex constructs */\r
 -#define BEGIN(state) YYSETCONDITION(STATE(state))\r
 -#define YYSTATE      YYGETCONDITION()\r
 -#define yytext       ((char*)SCNG(yy_text))\r
 -#define yyleng       SCNG(yy_leng)\r
 -#define yyless(x)    do { YYCURSOR = (unsigned char*)yytext + x; \\r
 -                          yyleng   = (unsigned int)x; } while(0)\r
 -#define yymore()     goto yymore_restart\r
 -\r
 -/* perform sanity check. If this message is triggered you should\r
 -   increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */\r
 -#define YYMAXFILL 16\r
 -#if ZEND_MMAP_AHEAD < YYMAXFILL\r
 -# error ZEND_MMAP_AHEAD should be greater than or equal to YYMAXFILL\r
 -#endif\r
 -\r
 -#ifdef HAVE_STDARG_H\r
 -# include <stdarg.h>\r
 -#endif\r
 -\r
 -#ifdef HAVE_UNISTD_H\r
 -# include <unistd.h>\r
 -#endif\r
 -\r
 -/* Globals Macros */\r
 -#define SCNG  LANG_SCNG\r
 -#ifdef ZTS\r
 -ZEND_API ts_rsrc_id language_scanner_globals_id;\r
 -#else\r
 -ZEND_API zend_php_scanner_globals language_scanner_globals;\r
 -#endif\r
 -\r
 -#define HANDLE_NEWLINES(s, l)                                                                                                 \\r
 -do {                                                                                                                                                  \\r
 -      char *p = (s), *boundary = p+(l);                                                                                       \\r
 -                                                                                                                                                              \\r
 -      while (p<boundary) {                                                                                                            \\r
 -              if (*p == '\n' || (*p == '\r' && (*(p+1) != '\n'))) {                                   \\r
 -                      CG(zend_lineno)++;                                                                                                      \\r
 -              }                                                                                                                                               \\r
 -              p++;                                                                                                                                    \\r
 -      }                                                                                                                                                       \\r
 -} while (0)\r
 -\r
 -#define HANDLE_NEWLINE(c) \\r
 -{ \\r
 -      if (c == '\n' || c == '\r') { \\r
 -              CG(zend_lineno)++; \\r
 -      } \\r
 -}\r
 -\r
 -/* To save initial string length after scanning to first variable, CG(doc_comment_len) can be reused */\r
 -#define SET_DOUBLE_QUOTES_SCANNED_LENGTH(len) CG(doc_comment_len) = (len)\r
 -#define GET_DOUBLE_QUOTES_SCANNED_LENGTH()    CG(doc_comment_len)\r
 -\r
 -#define IS_LABEL_START(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || (c) == '_' || (c) >= 0x7F)\r
 -\r
 -#define ZEND_IS_OCT(c)  ((c)>='0' && (c)<='7')\r
 -#define ZEND_IS_HEX(c)  (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F'))\r
 -\r
 -BEGIN_EXTERN_C()\r
 -\r
 -static size_t encoding_filter_script_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)\r
 -{\r
 -      const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C);\r
 -      assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding));\r
 -      return zend_multibyte_encoding_converter(to, to_length, from, from_length, internal_encoding, LANG_SCNG(script_encoding) TSRMLS_CC);\r
 -}\r
 -\r
 -static size_t encoding_filter_script_to_intermediate(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)\r
 -{\r
 -      return zend_multibyte_encoding_converter(to, to_length, from, from_length, zend_multibyte_encoding_utf8, LANG_SCNG(script_encoding) TSRMLS_CC);\r
 -}\r
 -\r
 -static size_t encoding_filter_intermediate_to_script(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)\r
 -{\r
 -      return zend_multibyte_encoding_converter(to, to_length, from, from_length,\r
 -LANG_SCNG(script_encoding), zend_multibyte_encoding_utf8 TSRMLS_CC);\r
 -}\r
 -\r
 -static size_t encoding_filter_intermediate_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)\r
 -{\r
 -      const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C);\r
 -      assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding));\r
 -      return zend_multibyte_encoding_converter(to, to_length, from, from_length,\r
 -internal_encoding, zend_multibyte_encoding_utf8 TSRMLS_CC);\r
 -}\r
 -\r
 -\r
 -static void _yy_push_state(int new_state TSRMLS_DC)\r
 -{\r
 -      zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int));\r
 -      YYSETCONDITION(new_state);\r
 -}\r
 -\r
 -#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm)\r
 -\r
 -static void yy_pop_state(TSRMLS_D)\r
 -{\r
 -      int *stack_state;\r
 -      zend_stack_top(&SCNG(state_stack), (void **) &stack_state);\r
 -      YYSETCONDITION(*stack_state);\r
 -      zend_stack_del_top(&SCNG(state_stack));\r
 -}\r
 -\r
 -static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC)\r
 -{\r
 -      YYCURSOR       = (YYCTYPE*)str;\r
 -      YYLIMIT        = YYCURSOR + len;\r
 -      if (!SCNG(yy_start)) {\r
 -              SCNG(yy_start) = YYCURSOR;\r
 -      }\r
 -}\r
 -\r
 -void startup_scanner(TSRMLS_D)\r
 -{\r
 -      CG(parse_error) = 0;\r
 -      CG(doc_comment) = NULL;\r
 -      CG(doc_comment_len) = 0;\r
 -      zend_stack_init(&SCNG(state_stack));\r
 -      zend_ptr_stack_init(&SCNG(heredoc_label_stack));\r
 -}\r
 -\r
 -static void heredoc_label_dtor(zend_heredoc_label *heredoc_label) {\r
 -    efree(heredoc_label->label);\r
 -}\r
 -\r
 -void shutdown_scanner(TSRMLS_D)\r
 -{\r
 -      CG(parse_error) = 0;\r
 -      RESET_DOC_COMMENT();\r
 -      zend_stack_destroy(&SCNG(state_stack));\r
 -      zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1);\r
 -      zend_ptr_stack_destroy(&SCNG(heredoc_label_stack));\r
 -}\r
 -\r
 -ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state TSRMLS_DC)\r
 -{\r
 -      lex_state->yy_leng   = SCNG(yy_leng);\r
 -      lex_state->yy_start  = SCNG(yy_start);\r
 -      lex_state->yy_text   = SCNG(yy_text);\r
 -      lex_state->yy_cursor = SCNG(yy_cursor);\r
 -      lex_state->yy_marker = SCNG(yy_marker);\r
 -      lex_state->yy_limit  = SCNG(yy_limit);\r
 -\r
 -      lex_state->state_stack = SCNG(state_stack);\r
 -      zend_stack_init(&SCNG(state_stack));\r
 -\r
 -      lex_state->heredoc_label_stack = SCNG(heredoc_label_stack);\r
 -      zend_ptr_stack_init(&SCNG(heredoc_label_stack));\r
 -\r
 -      lex_state->in = SCNG(yy_in);\r
 -      lex_state->yy_state = YYSTATE;\r
 -      lex_state->filename = zend_get_compiled_filename(TSRMLS_C);\r
 -      lex_state->lineno = CG(zend_lineno);\r
 -\r
 -      lex_state->script_org = SCNG(script_org);\r
 -      lex_state->script_org_size = SCNG(script_org_size);\r
 -      lex_state->script_filtered = SCNG(script_filtered);\r
 -      lex_state->script_filtered_size = SCNG(script_filtered_size);\r
 -      lex_state->input_filter = SCNG(input_filter);\r
 -      lex_state->output_filter = SCNG(output_filter);\r
 -      lex_state->script_encoding = SCNG(script_encoding);\r
 -}\r
 -\r
 -ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)\r
 -{\r
 -      SCNG(yy_leng)   = lex_state->yy_leng;\r
 -      SCNG(yy_start)  = lex_state->yy_start;\r
 -      SCNG(yy_text)   = lex_state->yy_text;\r
 -      SCNG(yy_cursor) = lex_state->yy_cursor;\r
 -      SCNG(yy_marker) = lex_state->yy_marker;\r
 -      SCNG(yy_limit)  = lex_state->yy_limit;\r
 -\r
 -      zend_stack_destroy(&SCNG(state_stack));\r
 -      SCNG(state_stack) = lex_state->state_stack;\r
 -\r
 -      zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1);\r
 -      zend_ptr_stack_destroy(&SCNG(heredoc_label_stack));\r
 -      SCNG(heredoc_label_stack) = lex_state->heredoc_label_stack;\r
 -\r
 -      SCNG(yy_in) = lex_state->in;\r
 -      YYSETCONDITION(lex_state->yy_state);\r
 -      CG(zend_lineno) = lex_state->lineno;\r
 -      zend_restore_compiled_filename(lex_state->filename TSRMLS_CC);\r
 -\r
 -      if (SCNG(script_filtered)) {\r
 -              efree(SCNG(script_filtered));\r
 -              SCNG(script_filtered) = NULL;\r
 -      }\r
 -      SCNG(script_org) = lex_state->script_org;\r
 -      SCNG(script_org_size) = lex_state->script_org_size;\r
 -      SCNG(script_filtered) = lex_state->script_filtered;\r
 -      SCNG(script_filtered_size) = lex_state->script_filtered_size;\r
 -      SCNG(input_filter) = lex_state->input_filter;\r
 -      SCNG(output_filter) = lex_state->output_filter;\r
 -      SCNG(script_encoding) = lex_state->script_encoding;\r
 -\r
 -      RESET_DOC_COMMENT();\r
 -}\r
 -\r
 -ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)\r
 -{\r
 -      zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles);\r
 -      /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */\r
 -      file_handle->opened_path = NULL;\r
 -      if (file_handle->free_filename) {\r
 -              file_handle->filename = NULL;\r
 -      }\r
 -}\r
 -\r
 -#define BOM_UTF32_BE  "\x00\x00\xfe\xff"\r
 -#define       BOM_UTF32_LE    "\xff\xfe\x00\x00"\r
 -#define       BOM_UTF16_BE    "\xfe\xff"\r
 -#define       BOM_UTF16_LE    "\xff\xfe"\r
 -#define       BOM_UTF8                "\xef\xbb\xbf"\r
 -\r
 -static const zend_encoding *zend_multibyte_detect_utf_encoding(const unsigned char *script, size_t script_size TSRMLS_DC)\r
 -{\r
 -      const unsigned char *p;\r
 -      int wchar_size = 2;\r
 -      int le = 0;\r
 -\r
 -      /* utf-16 or utf-32? */\r
 -      p = script;\r
 -      while ((p-script) < script_size) {\r
 -              p = memchr(p, 0, script_size-(p-script)-2);\r
 -              if (!p) {\r
 -                      break;\r
 -              }\r
 -              if (*(p+1) == '\0' && *(p+2) == '\0') {\r
 -                      wchar_size = 4;\r
 -                      break;\r
 -              }\r
 -\r
 -              /* searching for UTF-32 specific byte orders, so this will do */\r
 -              p += 4;\r
 -      }\r
 -\r
 -      /* BE or LE? */\r
 -      p = script;\r
 -      while ((p-script) < script_size) {\r
 -              if (*p == '\0' && *(p+wchar_size-1) != '\0') {\r
 -                      /* BE */\r
 -                      le = 0;\r
 -                      break;\r
 -              } else if (*p != '\0' && *(p+wchar_size-1) == '\0') {\r
 -                      /* LE* */\r
 -                      le = 1;\r
 -                      break;\r
 -              }\r
 -              p += wchar_size;\r
 -      }\r
 -\r
 -      if (wchar_size == 2) {\r
 -              return le ? zend_multibyte_encoding_utf16le : zend_multibyte_encoding_utf16be;\r
 -      } else {\r
 -              return le ? zend_multibyte_encoding_utf32le : zend_multibyte_encoding_utf32be;\r
 -      }\r
 -\r
 -      return NULL;\r
 -}\r
 -\r
 -static const zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D)\r
 -{\r
 -      const zend_encoding *script_encoding = NULL;\r
 -      int bom_size;\r
 -      unsigned char *pos1, *pos2;\r
 -\r
 -      if (LANG_SCNG(script_org_size) < sizeof(BOM_UTF32_LE)-1) {\r
 -              return NULL;\r
 -      }\r
 -\r
 -      /* check out BOM */\r
 -      if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_BE, sizeof(BOM_UTF32_BE)-1)) {\r
 -              script_encoding = zend_multibyte_encoding_utf32be;\r
 -              bom_size = sizeof(BOM_UTF32_BE)-1;\r
 -      } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_LE, sizeof(BOM_UTF32_LE)-1)) {\r
 -              script_encoding = zend_multibyte_encoding_utf32le;\r
 -              bom_size = sizeof(BOM_UTF32_LE)-1;\r
 -      } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_BE, sizeof(BOM_UTF16_BE)-1)) {\r
 -              script_encoding = zend_multibyte_encoding_utf16be;\r
 -              bom_size = sizeof(BOM_UTF16_BE)-1;\r
 -      } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_LE, sizeof(BOM_UTF16_LE)-1)) {\r
 -              script_encoding = zend_multibyte_encoding_utf16le;\r
 -              bom_size = sizeof(BOM_UTF16_LE)-1;\r
 -      } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF8, sizeof(BOM_UTF8)-1)) {\r
 -              script_encoding = zend_multibyte_encoding_utf8;\r
 -              bom_size = sizeof(BOM_UTF8)-1;\r
 -      }\r
 -\r
 -      if (script_encoding) {\r
 -              /* remove BOM */\r
 -              LANG_SCNG(script_org) += bom_size;\r
 -              LANG_SCNG(script_org_size) -= bom_size;\r
 -\r
 -              return script_encoding;\r
 -      }\r
 -\r
 -      /* script contains NULL bytes -> auto-detection */\r
 -      if ((pos1 = memchr(LANG_SCNG(script_org), 0, LANG_SCNG(script_org_size)))) {\r
 -              /* check if the NULL byte is after the __HALT_COMPILER(); */\r
 -              pos2 = LANG_SCNG(script_org);\r
 -\r
 -              while (pos1 - pos2 >= sizeof("__HALT_COMPILER();")-1) {\r
 -                      pos2 = memchr(pos2, '_', pos1 - pos2);\r
 -                      if (!pos2) break;\r
 -                      pos2++;\r
 -                      if (strncasecmp((char*)pos2, "_HALT_COMPILER", sizeof("_HALT_COMPILER")-1) == 0) {\r
 -                              pos2 += sizeof("_HALT_COMPILER")-1;\r
 -                              while (*pos2 == ' '  ||\r
 -                                         *pos2 == '\t' ||\r
 -                                         *pos2 == '\r' ||\r
 -                                         *pos2 == '\n') {\r
 -                                      pos2++;\r
 -                              }\r
 -                              if (*pos2 == '(') {\r
 -                                      pos2++;\r
 -                                      while (*pos2 == ' '  ||\r
 -                                                 *pos2 == '\t' ||\r
 -                                                 *pos2 == '\r' ||\r
 -                                                 *pos2 == '\n') {\r
 -                                              pos2++;\r
 -                                      }\r
 -                                      if (*pos2 == ')') {\r
 -                                              pos2++;\r
 -                                              while (*pos2 == ' '  ||\r
 -                                                         *pos2 == '\t' ||\r
 -                                                         *pos2 == '\r' ||\r
 -                                                         *pos2 == '\n') {\r
 -                                                      pos2++;\r
 -                                              }\r
 -                                              if (*pos2 == ';') {\r
 -                                                      return NULL;\r
 -                                              }\r
 -                                      }\r
 -                              }\r
 -                      }\r
 -              }\r
 -              /* make best effort if BOM is missing */\r
 -              return zend_multibyte_detect_utf_encoding(LANG_SCNG(script_org), LANG_SCNG(script_org_size) TSRMLS_CC);\r
 -      }\r
 -\r
 -      return NULL;\r
 -}\r
 -\r
 -static const zend_encoding* zend_multibyte_find_script_encoding(TSRMLS_D)\r
 -{\r
 -      const zend_encoding *script_encoding;\r
 -\r
 -      if (CG(detect_unicode)) {\r
 -              /* check out bom(byte order mark) and see if containing wchars */\r
 -              script_encoding = zend_multibyte_detect_unicode(TSRMLS_C);\r
 -              if (script_encoding != NULL) {\r
 -                      /* bom or wchar detection is prior to 'script_encoding' option */\r
 -                      return script_encoding;\r
 -              }\r
 -      }\r
 -\r
 -      /* if no script_encoding specified, just leave alone */\r
 -      if (!CG(script_encoding_list) || !CG(script_encoding_list_size)) {\r
 -              return NULL;\r
 -      }\r
 -\r
 -      /* if multiple encodings specified, detect automagically */\r
 -      if (CG(script_encoding_list_size) > 1) {\r
 -              return zend_multibyte_encoding_detector(LANG_SCNG(script_org), LANG_SCNG(script_org_size), CG(script_encoding_list), CG(script_encoding_list_size) TSRMLS_CC);\r
 -      }\r
 -\r
 -      return CG(script_encoding_list)[0];\r
 -}\r
 -\r
 -ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding TSRMLS_DC)\r
 -{\r
 -      const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C);\r
 -      const zend_encoding *script_encoding = onetime_encoding ? onetime_encoding: zend_multibyte_find_script_encoding(TSRMLS_C);\r
 -\r
 -      if (!script_encoding) {\r
 -              return FAILURE;\r
 -      }\r
 -\r
 -      /* judge input/output filter */\r
 -      LANG_SCNG(script_encoding) = script_encoding;\r
 -      LANG_SCNG(input_filter) = NULL;\r
 -      LANG_SCNG(output_filter) = NULL;\r
 -\r
 -      if (!internal_encoding || LANG_SCNG(script_encoding) == internal_encoding) {\r
 -              if (!zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) {\r
 -                      /* and if not, work around w/ script_encoding -> utf-8 -> script_encoding conversion */\r
 -                      LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate;\r
 -                      LANG_SCNG(output_filter) = encoding_filter_intermediate_to_script;\r
 -              } else {\r
 -                      LANG_SCNG(input_filter) = NULL;\r
 -                      LANG_SCNG(output_filter) = NULL;\r
 -              }\r
 -              return SUCCESS;\r
 -      }\r
 -\r
 -      if (zend_multibyte_check_lexer_compatibility(internal_encoding)) {\r
 -              LANG_SCNG(input_filter) = encoding_filter_script_to_internal;\r
 -              LANG_SCNG(output_filter) = NULL;\r
 -      } else if (zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) {\r
 -              LANG_SCNG(input_filter) = NULL;\r
 -              LANG_SCNG(output_filter) = encoding_filter_script_to_internal;\r
 -      } else {\r
 -              /* both script and internal encodings are incompatible w/ flex */\r
 -              LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate;\r
 -              LANG_SCNG(output_filter) = encoding_filter_intermediate_to_internal;\r
 -      }\r
 -\r
 -      return 0;\r
 -}\r
 -\r
 -ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)\r
 -{\r
 -      const char *file_path = NULL;\r
 -      char *buf;\r
 -      size_t size, offset = 0;\r
 -\r
 -      /* The shebang line was read, get the current position to obtain the buffer start */\r
 -      if (CG(start_lineno) == 2 && file_handle->type == ZEND_HANDLE_FP && file_handle->handle.fp) {\r
 -              if ((offset = ftell(file_handle->handle.fp)) == -1) {\r
 -                      offset = 0;\r
 -              }\r
 -      }\r
 -\r
 -      if (zend_stream_fixup(file_handle, &buf, &size TSRMLS_CC) == FAILURE) {\r
 -              return FAILURE;\r
 -      }\r
 -\r
 -      zend_llist_add_element(&CG(open_files), file_handle);\r
 -      if (file_handle->handle.stream.handle >= (void*)file_handle && file_handle->handle.stream.handle <= (void*)(file_handle+1)) {\r
 -              zend_file_handle *fh = (zend_file_handle*)zend_llist_get_last(&CG(open_files));\r
 -              size_t diff = (char*)file_handle->handle.stream.handle - (char*)file_handle;\r
 -              fh->handle.stream.handle = (void*)(((char*)fh) + diff);\r
 -              file_handle->handle.stream.handle = fh->handle.stream.handle;\r
 -      }\r
 -\r
 -      /* Reset the scanner for scanning the new file */\r
 -      SCNG(yy_in) = file_handle;\r
 -      SCNG(yy_start) = NULL;\r
 -\r
 -      if (size != -1) {\r
 -              if (CG(multibyte)) {\r
 -                      SCNG(script_org) = (unsigned char*)buf;\r
 -                      SCNG(script_org_size) = size;\r
 -                      SCNG(script_filtered) = NULL;\r
 -\r
 -                      zend_multibyte_set_filter(NULL TSRMLS_CC);\r
 -\r
 -                      if (SCNG(input_filter)) {\r
 -                              if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) {\r
 -                                      zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "\r
 -                                                      "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));\r
 -                              }\r
 -                              buf = (char*)SCNG(script_filtered);\r
 -                              size = SCNG(script_filtered_size);\r
 -                      }\r
 -              }\r
 -              SCNG(yy_start) = (unsigned char *)buf - offset;\r
 -              yy_scan_buffer(buf, size TSRMLS_CC);\r
 -      } else {\r
 -              zend_error_noreturn(E_COMPILE_ERROR, "zend_stream_mmap() failed");\r
 -      }\r
 -\r
 -      BEGIN(INITIAL);\r
 -\r
 -      if (file_handle->opened_path) {\r
 -              file_path = file_handle->opened_path;\r
 -      } else {\r
 -              file_path = file_handle->filename;\r
 -      }\r
 -\r
 -      zend_set_compiled_filename(file_path TSRMLS_CC);\r
 -\r
 -      if (CG(start_lineno)) {\r
 -              CG(zend_lineno) = CG(start_lineno);\r
 -              CG(start_lineno) = 0;\r
 -      } else {\r
 -              CG(zend_lineno) = 1;\r
 -      }\r
 -\r
 -      RESET_DOC_COMMENT();\r
 -      CG(increment_lineno) = 0;\r
 -      return SUCCESS;\r
 -}\r
 -END_EXTERN_C()\r
 -\r
 -\r
 -ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)\r
 -{\r
 -      zend_lex_state original_lex_state;\r
 -      zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));\r
 -      zend_op_array *original_active_op_array = CG(active_op_array);\r
 -      zend_op_array *retval=NULL;\r
 -      int compiler_result;\r
 -      zend_bool compilation_successful=0;\r
 -      znode retval_znode;\r
 -      zend_bool original_in_compilation = CG(in_compilation);\r
 -\r
 -      retval_znode.op_type = IS_CONST;\r
 -      INIT_PZVAL(&retval_znode.u.constant);\r
 -      ZVAL_LONG(&retval_znode.u.constant, 1);\r
 -\r
 -      zend_save_lexical_state(&original_lex_state TSRMLS_CC);\r
 -\r
 -      retval = op_array; /* success oriented */\r
 -\r
 -      if (open_file_for_scanning(file_handle TSRMLS_CC)==FAILURE) {\r
 -              if (type==ZEND_REQUIRE) {\r
 -                      zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename TSRMLS_CC);\r
 -                      zend_bailout();\r
 -              } else {\r
 -                      zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename TSRMLS_CC);\r
 -              }\r
 -              compilation_successful=0;\r
 -      } else {\r
 -              init_op_array(op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);\r
 -              CG(in_compilation) = 1;\r
 -              CG(active_op_array) = op_array;\r
 -              zend_stack_push(&CG(context_stack), (void *) &CG(context), sizeof(CG(context)));\r
 -              zend_init_compiler_context(TSRMLS_C);\r
 -              compiler_result = zendparse(TSRMLS_C);\r
 -              zend_do_return(&retval_znode, 0 TSRMLS_CC);\r
 -              CG(in_compilation) = original_in_compilation;\r
 -              if (compiler_result != 0) { /* parser error */\r
 -                      zend_bailout();\r
 -              }\r
 -              compilation_successful=1;\r
 -      }\r
 -\r
 -      if (retval) {\r
 -              CG(active_op_array) = original_active_op_array;\r
 -              if (compilation_successful) {\r
 -                      pass_two(op_array TSRMLS_CC);\r
 -                      zend_release_labels(0 TSRMLS_CC);\r
 -              } else {\r
 -                      efree(op_array);\r
 -                      retval = NULL;\r
 -              }\r
 -      }\r
 -      zend_restore_lexical_state(&original_lex_state TSRMLS_CC);\r
 -      return retval;\r
 -}\r
 -\r
 -\r
 -zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)\r
 -{\r
 -      zend_file_handle file_handle;\r
 -      zval tmp;\r
 -      zend_op_array *retval;\r
 -      char *opened_path = NULL;\r
 -\r
 -      if (filename->type != IS_STRING) {\r
 -              tmp = *filename;\r
 -              zval_copy_ctor(&tmp);\r
 -              convert_to_string(&tmp);\r
 -              filename = &tmp;\r
 -      }\r
 -      file_handle.filename = Z_STRVAL_P(filename);\r
 -      file_handle.free_filename = 0;\r
 -      file_handle.type = ZEND_HANDLE_FILENAME;\r
 -      file_handle.opened_path = NULL;\r
 -      file_handle.handle.fp = NULL;\r
 -\r
 -      retval = zend_compile_file(&file_handle, type TSRMLS_CC);\r
 -      if (retval && file_handle.handle.stream.handle) {\r
 -              int dummy = 1;\r
 -\r
 -              if (!file_handle.opened_path) {\r
 -                      file_handle.opened_path = opened_path = estrndup(Z_STRVAL_P(filename), Z_STRLEN_P(filename));\r
 -              }\r
 -\r
 -              zend_hash_add(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL);\r
 -\r
 -              if (opened_path) {\r
 -                      efree(opened_path);\r
 -              }\r
 -      }\r
 -      zend_destroy_file_handle(&file_handle TSRMLS_CC);\r
 -\r
 -      if (filename==&tmp) {\r
 -              zval_dtor(&tmp);\r
 -      }\r
 -      return retval;\r
 -}\r
 -\r
 -ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_DC)\r
 -{\r
 -      char *buf;\r
 -      size_t size;\r
 -\r
 -      /* enforce ZEND_MMAP_AHEAD trailing NULLs for flex... */\r
 -      Z_STRVAL_P(str) = str_erealloc(Z_STRVAL_P(str), Z_STRLEN_P(str) + ZEND_MMAP_AHEAD);\r
 -      memset(Z_STRVAL_P(str) + Z_STRLEN_P(str), 0, ZEND_MMAP_AHEAD);\r
 -\r
 -      SCNG(yy_in) = NULL;\r
 -      SCNG(yy_start) = NULL;\r
 -\r
 -      buf = Z_STRVAL_P(str);\r
 -      size = Z_STRLEN_P(str);\r
 -\r
 -      if (CG(multibyte)) {\r
 -              SCNG(script_org) = (unsigned char*)buf;\r
 -              SCNG(script_org_size) = size;\r
 -              SCNG(script_filtered) = NULL;\r
 -\r
 -              zend_multibyte_set_filter(zend_multibyte_get_internal_encoding(TSRMLS_C) TSRMLS_CC);\r
 -\r
 -              if (SCNG(input_filter)) {\r
 -                      if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) {\r
 -                              zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "\r
 -                                              "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));\r
 -                      }\r
 -                      buf = (char*)SCNG(script_filtered);\r
 -                      size = SCNG(script_filtered_size);\r
 -              }\r
 -      }\r
 -\r
 -      yy_scan_buffer(buf, size TSRMLS_CC);\r
 -\r
 -      zend_set_compiled_filename(filename TSRMLS_CC);\r
 -      CG(zend_lineno) = 1;\r
 -      CG(increment_lineno) = 0;\r
 -      RESET_DOC_COMMENT();\r
 -      return SUCCESS;\r
 -}\r
 -\r
 -\r
 -ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D)\r
 -{\r
 -      size_t offset = SCNG(yy_cursor) - SCNG(yy_start);\r
 -      if (SCNG(input_filter)) {\r
 -              size_t original_offset = offset, length = 0;\r
 -              do {\r
 -                      unsigned char *p = NULL;\r
 -                      if ((size_t)-1 == SCNG(input_filter)(&p, &length, SCNG(script_org), offset TSRMLS_CC)) {\r
 -                              return (size_t)-1;\r
 -                      }\r
 -                      efree(p);\r
 -                      if (length > original_offset) {\r
 -                              offset--;\r
 -                      } else if (length < original_offset) {\r
 -                              offset++;\r
 -                      }\r
 -              } while (original_offset != length);\r
 -      }\r
 -      return offset;\r
 -}\r
 -\r
 -\r
 -zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)\r
 -{\r
 -      zend_lex_state original_lex_state;\r
 -      zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));\r
 -      zend_op_array *original_active_op_array = CG(active_op_array);\r
 -      zend_op_array *retval;\r
 -      zval tmp;\r
 -      int compiler_result;\r
 -      zend_bool original_in_compilation = CG(in_compilation);\r
 -\r
 -      if (Z_STRLEN_P(source_string)==0) {\r
 -              efree(op_array);\r
 -              return NULL;\r
 -      }\r
 -\r
 -      CG(in_compilation) = 1;\r
 -\r
 -      tmp = *source_string;\r
 -      zval_copy_ctor(&tmp);\r
 -      convert_to_string(&tmp);\r
 -      source_string = &tmp;\r
 -\r
 -      zend_save_lexical_state(&original_lex_state TSRMLS_CC);\r
 -      if (zend_prepare_string_for_scanning(source_string, filename TSRMLS_CC)==FAILURE) {\r
 -              efree(op_array);\r
 -              retval = NULL;\r
 -      } else {\r
 -              zend_bool orig_interactive = CG(interactive);\r
 -\r
 -              CG(interactive) = 0;\r
 -              init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);\r
 -              CG(interactive) = orig_interactive;\r
 -              CG(active_op_array) = op_array;\r
 -              zend_stack_push(&CG(context_stack), (void *) &CG(context), sizeof(CG(context)));\r
 -              zend_init_compiler_context(TSRMLS_C);\r
 -              BEGIN(ST_IN_SCRIPTING);\r
 -              compiler_result = zendparse(TSRMLS_C);\r
 -\r
 -              if (SCNG(script_filtered)) {\r
 -                      efree(SCNG(script_filtered));\r
 -                      SCNG(script_filtered) = NULL;\r
 -              }\r
 -\r
 -              if (compiler_result != 0) {\r
 -                      CG(active_op_array) = original_active_op_array;\r
 -                      CG(unclean_shutdown)=1;\r
 -                      destroy_op_array(op_array TSRMLS_CC);\r
 -                      efree(op_array);\r
 -                      retval = NULL;\r
 -              } else {\r
 -                      zend_do_return(NULL, 0 TSRMLS_CC);\r
 -                      CG(active_op_array) = original_active_op_array;\r
 -                      pass_two(op_array TSRMLS_CC);\r
 -                      zend_release_labels(0 TSRMLS_CC);\r
 -                      retval = op_array;\r
 -              }\r
 -      }\r
 -      zend_restore_lexical_state(&original_lex_state TSRMLS_CC);\r
 -      zval_dtor(&tmp);\r
 -      CG(in_compilation) = original_in_compilation;\r
 -      return retval;\r
 -}\r
 -\r
 -\r
 -BEGIN_EXTERN_C()\r
 -int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC)\r
 -{\r
 -      zend_lex_state original_lex_state;\r
 -      zend_file_handle file_handle;\r
 -\r
 -      file_handle.type = ZEND_HANDLE_FILENAME;\r
 -      file_handle.filename = filename;\r
 -      file_handle.free_filename = 0;\r
 -      file_handle.opened_path = NULL;\r
 -      zend_save_lexical_state(&original_lex_state TSRMLS_CC);\r
 -      if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) {\r
 -              zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename TSRMLS_CC);\r
 -              zend_restore_lexical_state(&original_lex_state TSRMLS_CC);\r
 -              return FAILURE;\r
 -      }\r
 -      zend_highlight(syntax_highlighter_ini TSRMLS_CC);\r
 -      if (SCNG(script_filtered)) {\r
 -              efree(SCNG(script_filtered));\r
 -              SCNG(script_filtered) = NULL;\r
 -      }\r
 -      zend_destroy_file_handle(&file_handle TSRMLS_CC);\r
 -      zend_restore_lexical_state(&original_lex_state TSRMLS_CC);\r
 -      return SUCCESS;\r
 -}\r
 -\r
 -int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC)\r
 -{\r
 -      zend_lex_state original_lex_state;\r
 -      zval tmp = *str;\r
 -\r
 -      str = &tmp;\r
 -      zval_copy_ctor(str);\r
 -      zend_save_lexical_state(&original_lex_state TSRMLS_CC);\r
 -      if (zend_prepare_string_for_scanning(str, str_name TSRMLS_CC)==FAILURE) {\r
 -              zend_restore_lexical_state(&original_lex_state TSRMLS_CC);\r
 -              return FAILURE;\r
 -      }\r
 -      BEGIN(INITIAL);\r
 -      zend_highlight(syntax_highlighter_ini TSRMLS_CC);\r
 -      if (SCNG(script_filtered)) {\r
 -              efree(SCNG(script_filtered));\r
 -              SCNG(script_filtered) = NULL;\r
 -      }\r
 -      zend_restore_lexical_state(&original_lex_state TSRMLS_CC);\r
 -      zval_dtor(str);\r
 -      return SUCCESS;\r
 -}\r
 -\r
 -ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding TSRMLS_DC)\r
 -{\r
 -      size_t length;\r
 -      unsigned char *new_yy_start;\r
 -\r
 -      /* convert and set */\r
 -      if (!SCNG(input_filter)) {\r
 -              if (SCNG(script_filtered)) {\r
 -                      efree(SCNG(script_filtered));\r
 -                      SCNG(script_filtered) = NULL;\r
 -              }\r
 -              SCNG(script_filtered_size) = 0;\r
 -              length = SCNG(script_org_size);\r
 -              new_yy_start = SCNG(script_org);\r
 -      } else {\r
 -              if ((size_t)-1 == SCNG(input_filter)(&new_yy_start, &length, SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) {\r
 -                      zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "\r
 -                                      "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));\r
 -              }\r
 -              SCNG(script_filtered) = new_yy_start;\r
 -              SCNG(script_filtered_size) = length;\r
 -      }\r
 -\r
 -      SCNG(yy_cursor) = new_yy_start + (SCNG(yy_cursor) - SCNG(yy_start));\r
 -      SCNG(yy_marker) = new_yy_start + (SCNG(yy_marker) - SCNG(yy_start));\r
 -      SCNG(yy_text) = new_yy_start + (SCNG(yy_text) - SCNG(yy_start));\r
 -      SCNG(yy_limit) = new_yy_start + (SCNG(yy_limit) - SCNG(yy_start));\r
 -\r
 -      SCNG(yy_start) = new_yy_start;\r
 -}\r
 -\r
 -\r
 -# define zend_copy_value(zendlval, yytext, yyleng) \\r
 -      if (SCNG(output_filter)) { \\r
 -              size_t sz = 0; \\r
 -              SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \\r
 -              Z_STRLEN_P(zendlval) = sz; \\r
 -      } else { \\r
 -              Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng); \\r
 -              Z_STRLEN_P(zendlval) = yyleng; \\r
 -      }\r
 -\r
 -static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quote_type TSRMLS_DC)\r
 -{\r
 -      register char *s, *t;\r
 -      char *end;\r
 -\r
 -      ZVAL_STRINGL(zendlval, str, len, 1);\r
 -\r
 -      /* convert escape sequences */\r
 -      s = t = Z_STRVAL_P(zendlval);\r
 -      end = s+Z_STRLEN_P(zendlval);\r
 -      while (s<end) {\r
 -              if (*s=='\\') {\r
 -                      s++;\r
 -                      if (s >= end) {\r
 -                              *t++ = '\\';\r
 -                              break;\r
 -                      }\r
 -\r
 -                      switch(*s) {\r
 -                              case 'n':\r
 -                                      *t++ = '\n';\r
 -                                      Z_STRLEN_P(zendlval)--;\r
 -                                      break;\r
 -                              case 'r':\r
 -                                      *t++ = '\r';\r
 -                                      Z_STRLEN_P(zendlval)--;\r
 -                                      break;\r
 -                              case 't':\r
 -                                      *t++ = '\t';\r
 -                                      Z_STRLEN_P(zendlval)--;\r
 -                                      break;\r
 -                              case 'f':\r
 -                                      *t++ = '\f';\r
 -                                      Z_STRLEN_P(zendlval)--;\r
 -                                      break;\r
 -                              case 'v':\r
 -                                      *t++ = '\v';\r
 -                                      Z_STRLEN_P(zendlval)--;\r
 -                                      break;\r
 -                              case 'e':\r
 -#ifdef PHP_WIN32\r
 -                                      *t++ = VK_ESCAPE;\r
 -#else\r
 -                                      *t++ = '\e';\r
 -#endif\r
 -                                      Z_STRLEN_P(zendlval)--;\r
 -                                      break;\r
 -                              case '"':\r
 -                              case '`':\r
 -                                      if (*s != quote_type) {\r
 -                                              *t++ = '\\';\r
 -                                              *t++ = *s;\r
 -                                              break;\r
 -                                      }\r
 -                              case '\\':\r
 -                              case '$':\r
 -                                      *t++ = *s;\r
 -                                      Z_STRLEN_P(zendlval)--;\r
 -                                      break;\r
 -                              case 'x':\r
 -                              case 'X':\r
 -                                      if (ZEND_IS_HEX(*(s+1))) {\r
 -                                              char hex_buf[3] = { 0, 0, 0 };\r
 -\r
 -                                              Z_STRLEN_P(zendlval)--; /* for the 'x' */\r
 -\r
 -                                              hex_buf[0] = *(++s);\r
 -                                              Z_STRLEN_P(zendlval)--;\r
 -                                              if (ZEND_IS_HEX(*(s+1))) {\r
 -                                                      hex_buf[1] = *(++s);\r
 -                                                      Z_STRLEN_P(zendlval)--;\r
 -                                              }\r
 -                                              *t++ = (char) strtol(hex_buf, NULL, 16);\r
 -                                      } else {\r
 -                                              *t++ = '\\';\r
 -                                              *t++ = *s;\r
 -                                      }\r
 -                                      break;\r
 -                              default:\r
 -                                      /* check for an octal */\r
 -                                      if (ZEND_IS_OCT(*s)) {\r
 -                                              char octal_buf[4] = { 0, 0, 0, 0 };\r
 -\r
 -                                              octal_buf[0] = *s;\r
 -                                              Z_STRLEN_P(zendlval)--;\r
 -                                              if (ZEND_IS_OCT(*(s+1))) {\r
 -                                                      octal_buf[1] = *(++s);\r
 -                                                      Z_STRLEN_P(zendlval)--;\r
 -                                                      if (ZEND_IS_OCT(*(s+1))) {\r
 -                                                              octal_buf[2] = *(++s);\r
 -                                                              Z_STRLEN_P(zendlval)--;\r
 -                                                      }\r
 -                                              }\r
 -                                              *t++ = (char) strtol(octal_buf, NULL, 8);\r
 -                                      } else {\r
 -                                              *t++ = '\\';\r
 -                                              *t++ = *s;\r
 -                                      }\r
 -                                      break;\r
 -                      }\r
 -              } else {\r
 -                      *t++ = *s;\r
 -              }\r
 -\r
 -              if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {\r
 -                      CG(zend_lineno)++;\r
 -              }\r
 -              s++;\r
 -      }\r
 -      *t = 0;\r
 -      if (SCNG(output_filter)) {\r
 -              size_t sz = 0;\r
 -              s = Z_STRVAL_P(zendlval);\r
 -              SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC);\r
 -              Z_STRLEN_P(zendlval) = sz;\r
 -              efree(s);\r
 -      }\r
 -}\r
 -\r
 -\r
 -int lex_scan(zval *zendlval TSRMLS_DC)\r
 -{\r
 -restart:\r
 -      SCNG(yy_text) = YYCURSOR;\r
 -\r
 -yymore_restart:\r
 -\r
 -\r
 -#line 1001 "Zend/zend_language_scanner.c"\r
 -{\r
 -      YYCTYPE yych;\r
 -      unsigned int yyaccept = 0;\r
 -      if (YYGETCONDITION() < 5) {\r
 -              if (YYGETCONDITION() < 2) {\r
 -                      if (YYGETCONDITION() < 1) {\r
 -                              goto yyc_ST_IN_SCRIPTING;\r
 -                      } else {\r
 -                              goto yyc_ST_LOOKING_FOR_PROPERTY;\r
 -                      }\r
 -              } else {\r
 -                      if (YYGETCONDITION() < 3) {\r
 -                              goto yyc_ST_BACKQUOTE;\r
 -                      } else {\r
 -                              if (YYGETCONDITION() < 4) {\r
 -                                      goto yyc_ST_DOUBLE_QUOTES;\r
 -                              } else {\r
 -                                      goto yyc_ST_HEREDOC;\r
 -                              }\r
 -                      }\r
 -              }\r
 -      } else {\r
 -              if (YYGETCONDITION() < 7) {\r
 -                      if (YYGETCONDITION() < 6) {\r
 -                              goto yyc_ST_LOOKING_FOR_VARNAME;\r
 -                      } else {\r
 -                              goto yyc_ST_VAR_OFFSET;\r
 -                      }\r
 -              } else {\r
 -                      if (YYGETCONDITION() < 8) {\r
 -                              goto yyc_INITIAL;\r
 -                      } else {\r
 -                              if (YYGETCONDITION() < 9) {\r
 -                                      goto yyc_ST_END_HEREDOC;\r
 -                              } else {\r
 -                                      goto yyc_ST_NOWDOC;\r
 -                              }\r
 -                      }\r
 -              }\r
 -      }\r
 -/* *********************************** */\r
 -yyc_INITIAL:\r
 -      {\r
 -              static const unsigned char yybm[] = {\r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0, 128, 128,   0,   0, 128,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                      128,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -              };\r
 -\r
 -              YYDEBUG(0, *YYCURSOR);\r
 -              YYFILL(8);\r
 -              yych = *YYCURSOR;\r
 -              if (yych != '<') goto yy4;\r
 -              YYDEBUG(2, *YYCURSOR);\r
 -              yyaccept = 0;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= '?') {\r
 -                      if (yych == '%') goto yy7;\r
 -                      if (yych >= '?') goto yy5;\r
 -              } else {\r
 -                      if (yych <= 'S') {\r
 -                              if (yych >= 'S') goto yy9;\r
 -                      } else {\r
 -                              if (yych == 's') goto yy9;\r
 -                      }\r
 -              }\r
 -yy3:\r
 -              YYDEBUG(3, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1749 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (YYCURSOR > YYLIMIT) {\r
 -              return 0;\r
 -      }\r
 -\r
 -inline_char_handler:\r
 -\r
 -      while (1) {\r
 -              YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR);\r
 -\r
 -              YYCURSOR = ptr ? ptr + 1 : YYLIMIT;\r
 -\r
 -              if (YYCURSOR < YYLIMIT) {\r
 -                      switch (*YYCURSOR) {\r
 -                              case '?':\r
 -                                      if (CG(short_tags) || !strncasecmp((char*)YYCURSOR + 1, "php", 3) || (*(YYCURSOR + 1) == '=')) { /* Assume [ \t\n\r] follows "php" */\r
 -                                              break;\r
 -                                      }\r
 -                                      continue;\r
 -                              case '%':\r
 -                                      if (CG(asp_tags)) {\r
 -                                              break;\r
 -                                      }\r
 -                                      continue;\r
 -                              case 's':\r
 -                              case 'S':\r
 -                                      /* Probably NOT an opening PHP <script> tag, so don't end the HTML chunk yet\r
 -                                       * If it is, the PHP <script> tag rule checks for any HTML scanned before it */\r
 -                                      YYCURSOR--;\r
 -                                      yymore();\r
 -                              default:\r
 -                                      continue;\r
 -                      }\r
 -\r
 -                      YYCURSOR--;\r
 -              }\r
 -\r
 -              break;\r
 -      }\r
 -\r
 -inline_html:\r
 -      yyleng = YYCURSOR - SCNG(yy_text);\r
 -\r
 -      if (SCNG(output_filter)) {\r
 -              int readsize;\r
 -              size_t sz = 0;\r
 -              readsize = SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC);\r
 -              Z_STRLEN_P(zendlval) = sz;\r
 -              if (readsize < yyleng) {\r
 -                      yyless(readsize);\r
 -              }\r
 -      } else {\r
 -        Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng);\r
 -        Z_STRLEN_P(zendlval) = yyleng;\r
 -      }\r
 -      zendlval->type = IS_STRING;\r
 -      HANDLE_NEWLINES(yytext, yyleng);\r
 -      return T_INLINE_HTML;\r
 -}\r
 -#line 1160 "Zend/zend_language_scanner.c"\r
 -yy4:\r
 -              YYDEBUG(4, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy3;\r
 -yy5:\r
 -              YYDEBUG(5, *YYCURSOR);\r
 -              yyaccept = 1;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= 'O') {\r
 -                      if (yych == '=') goto yy45;\r
 -              } else {\r
 -                      if (yych <= 'P') goto yy47;\r
 -                      if (yych == 'p') goto yy47;\r
 -              }\r
 -yy6:\r
 -              YYDEBUG(6, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1739 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (CG(short_tags)) {\r
 -              ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -              BEGIN(ST_IN_SCRIPTING);\r
 -              return T_OPEN_TAG;\r
 -      } else {\r
 -              goto inline_char_handler;\r
 -      }\r
 -}\r
 -#line 1188 "Zend/zend_language_scanner.c"\r
 -yy7:\r
 -              YYDEBUG(7, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) == '=') goto yy43;\r
 -              YYDEBUG(8, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1720 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (CG(asp_tags)) {\r
 -              ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -              BEGIN(ST_IN_SCRIPTING);\r
 -              return T_OPEN_TAG;\r
 -      } else {\r
 -              goto inline_char_handler;\r
 -      }\r
 -}\r
 -#line 1205 "Zend/zend_language_scanner.c"\r
 -yy9:\r
 -              YYDEBUG(9, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy11;\r
 -              if (yych == 'c') goto yy11;\r
 -yy10:\r
 -              YYDEBUG(10, *YYCURSOR);\r
 -              YYCURSOR = YYMARKER;\r
 -              if (yyaccept <= 0) {\r
 -                      goto yy3;\r
 -              } else {\r
 -                      goto yy6;\r
 -              }\r
 -yy11:\r
 -              YYDEBUG(11, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy12;\r
 -              if (yych != 'r') goto yy10;\r
 -yy12:\r
 -              YYDEBUG(12, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy13;\r
 -              if (yych != 'i') goto yy10;\r
 -yy13:\r
 -              YYDEBUG(13, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy14;\r
 -              if (yych != 'p') goto yy10;\r
 -yy14:\r
 -              YYDEBUG(14, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy15;\r
 -              if (yych != 't') goto yy10;\r
 -yy15:\r
 -              YYDEBUG(15, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy10;\r
 -              if (yych == 'l') goto yy10;\r
 -              goto yy17;\r
 -yy16:\r
 -              YYDEBUG(16, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(8);\r
 -              yych = *YYCURSOR;\r
 -yy17:\r
 -              YYDEBUG(17, *YYCURSOR);\r
 -              if (yybm[0+yych] & 128) {\r
 -                      goto yy16;\r
 -              }\r
 -              if (yych == 'L') goto yy18;\r
 -              if (yych != 'l') goto yy10;\r
 -yy18:\r
 -              YYDEBUG(18, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy19;\r
 -              if (yych != 'a') goto yy10;\r
 -yy19:\r
 -              YYDEBUG(19, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy20;\r
 -              if (yych != 'n') goto yy10;\r
 -yy20:\r
 -              YYDEBUG(20, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'G') goto yy21;\r
 -              if (yych != 'g') goto yy10;\r
 -yy21:\r
 -              YYDEBUG(21, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'U') goto yy22;\r
 -              if (yych != 'u') goto yy10;\r
 -yy22:\r
 -              YYDEBUG(22, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy23;\r
 -              if (yych != 'a') goto yy10;\r
 -yy23:\r
 -              YYDEBUG(23, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'G') goto yy24;\r
 -              if (yych != 'g') goto yy10;\r
 -yy24:\r
 -              YYDEBUG(24, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy25;\r
 -              if (yych != 'e') goto yy10;\r
 -yy25:\r
 -              YYDEBUG(25, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(26, *YYCURSOR);\r
 -              if (yych <= '\r') {\r
 -                      if (yych <= 0x08) goto yy10;\r
 -                      if (yych <= '\n') goto yy25;\r
 -                      if (yych <= '\f') goto yy10;\r
 -                      goto yy25;\r
 -              } else {\r
 -                      if (yych <= ' ') {\r
 -                              if (yych <= 0x1F) goto yy10;\r
 -                              goto yy25;\r
 -                      } else {\r
 -                              if (yych != '=') goto yy10;\r
 -                      }\r
 -              }\r
 -yy27:\r
 -              YYDEBUG(27, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(5);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(28, *YYCURSOR);\r
 -              if (yych <= '!') {\r
 -                      if (yych <= '\f') {\r
 -                              if (yych <= 0x08) goto yy10;\r
 -                              if (yych <= '\n') goto yy27;\r
 -                              goto yy10;\r
 -                      } else {\r
 -                              if (yych <= '\r') goto yy27;\r
 -                              if (yych == ' ') goto yy27;\r
 -                              goto yy10;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'O') {\r
 -                              if (yych <= '"') goto yy30;\r
 -                              if (yych == '\'') goto yy31;\r
 -                              goto yy10;\r
 -                      } else {\r
 -                              if (yych <= 'P') goto yy29;\r
 -                              if (yych != 'p') goto yy10;\r
 -                      }\r
 -              }\r
 -yy29:\r
 -              YYDEBUG(29, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy42;\r
 -              if (yych == 'h') goto yy42;\r
 -              goto yy10;\r
 -yy30:\r
 -              YYDEBUG(30, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy39;\r
 -              if (yych == 'p') goto yy39;\r
 -              goto yy10;\r
 -yy31:\r
 -              YYDEBUG(31, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy32;\r
 -              if (yych != 'p') goto yy10;\r
 -yy32:\r
 -              YYDEBUG(32, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy33;\r
 -              if (yych != 'h') goto yy10;\r
 -yy33:\r
 -              YYDEBUG(33, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy34;\r
 -              if (yych != 'p') goto yy10;\r
 -yy34:\r
 -              YYDEBUG(34, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '\'') goto yy10;\r
 -yy35:\r
 -              YYDEBUG(35, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(36, *YYCURSOR);\r
 -              if (yych <= '\r') {\r
 -                      if (yych <= 0x08) goto yy10;\r
 -                      if (yych <= '\n') goto yy35;\r
 -                      if (yych <= '\f') goto yy10;\r
 -                      goto yy35;\r
 -              } else {\r
 -                      if (yych <= ' ') {\r
 -                              if (yych <= 0x1F) goto yy10;\r
 -                              goto yy35;\r
 -                      } else {\r
 -                              if (yych != '>') goto yy10;\r
 -                      }\r
 -              }\r
 -              YYDEBUG(37, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(38, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1686 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));\r
 -\r
 -      if (bracket != SCNG(yy_text)) {\r
 -              /* Handle previously scanned HTML, as possible <script> tags found are assumed to not be PHP's */\r
 -              YYCURSOR = bracket;\r
 -              goto inline_html;\r
 -      }\r
 -\r
 -      HANDLE_NEWLINES(yytext, yyleng);\r
 -      ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -      BEGIN(ST_IN_SCRIPTING);\r
 -      return T_OPEN_TAG;\r
 -}\r
 -#line 1406 "Zend/zend_language_scanner.c"\r
 -yy39:\r
 -              YYDEBUG(39, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy40;\r
 -              if (yych != 'h') goto yy10;\r
 -yy40:\r
 -              YYDEBUG(40, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy41;\r
 -              if (yych != 'p') goto yy10;\r
 -yy41:\r
 -              YYDEBUG(41, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '"') goto yy35;\r
 -              goto yy10;\r
 -yy42:\r
 -              YYDEBUG(42, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy35;\r
 -              if (yych == 'p') goto yy35;\r
 -              goto yy10;\r
 -yy43:\r
 -              YYDEBUG(43, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(44, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1702 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (CG(asp_tags)) {\r
 -              ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -              BEGIN(ST_IN_SCRIPTING);\r
 -              return T_OPEN_TAG_WITH_ECHO;\r
 -      } else {\r
 -              goto inline_char_handler;\r
 -      }\r
 -}\r
 -#line 1443 "Zend/zend_language_scanner.c"\r
 -yy45:\r
 -              YYDEBUG(45, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(46, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1713 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -      BEGIN(ST_IN_SCRIPTING);\r
 -      return T_OPEN_TAG_WITH_ECHO;\r
 -}\r
 -#line 1455 "Zend/zend_language_scanner.c"\r
 -yy47:\r
 -              YYDEBUG(47, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy48;\r
 -              if (yych != 'h') goto yy10;\r
 -yy48:\r
 -              YYDEBUG(48, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy49;\r
 -              if (yych != 'p') goto yy10;\r
 -yy49:\r
 -              YYDEBUG(49, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '\f') {\r
 -                      if (yych <= 0x08) goto yy10;\r
 -                      if (yych >= '\v') goto yy10;\r
 -              } else {\r
 -                      if (yych <= '\r') goto yy52;\r
 -                      if (yych != ' ') goto yy10;\r
 -              }\r
 -yy50:\r
 -              YYDEBUG(50, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -yy51:\r
 -              YYDEBUG(51, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1731 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -      HANDLE_NEWLINE(yytext[yyleng-1]);\r
 -      BEGIN(ST_IN_SCRIPTING);\r
 -      return T_OPEN_TAG;\r
 -}\r
 -#line 1489 "Zend/zend_language_scanner.c"\r
 -yy52:\r
 -              YYDEBUG(52, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) == '\n') goto yy50;\r
 -              goto yy51;\r
 -      }\r
 -/* *********************************** */\r
 -yyc_ST_BACKQUOTE:\r
 -      {\r
 -              static const unsigned char yybm[] = {\r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128,   0,   0,   0,   0,   0,   0, \r
 -                        0, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128,   0,   0,   0,   0, 128, \r
 -                        0, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128,   0,   0,   0,   0, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -              };\r
 -              YYDEBUG(53, *YYCURSOR);\r
 -              YYFILL(2);\r
 -              yych = *YYCURSOR;\r
 -              if (yych <= '_') {\r
 -                      if (yych != '$') goto yy60;\r
 -              } else {\r
 -                      if (yych <= '`') goto yy58;\r
 -                      if (yych == '{') goto yy57;\r
 -                      goto yy60;\r
 -              }\r
 -              YYDEBUG(55, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '_') {\r
 -                      if (yych <= '@') goto yy56;\r
 -                      if (yych <= 'Z') goto yy63;\r
 -                      if (yych >= '_') goto yy63;\r
 -              } else {\r
 -                      if (yych <= 'z') {\r
 -                              if (yych >= 'a') goto yy63;\r
 -                      } else {\r
 -                              if (yych <= '{') goto yy66;\r
 -                              if (yych >= 0x7F) goto yy63;\r
 -                      }\r
 -              }\r
 -yy56:\r
 -              YYDEBUG(56, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2194 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (YYCURSOR > YYLIMIT) {\r
 -              return 0;\r
 -      }\r
 -      if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {\r
 -              YYCURSOR++;\r
 -      }\r
 -\r
 -      while (YYCURSOR < YYLIMIT) {\r
 -              switch (*YYCURSOR++) {\r
 -                      case '`':\r
 -                              break;\r
 -                      case '$':\r
 -                              if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {\r
 -                                      break;\r
 -                              }\r
 -                              continue;\r
 -                      case '{':\r
 -                              if (*YYCURSOR == '$') {\r
 -                                      break;\r
 -                              }\r
 -                              continue;\r
 -                      case '\\':\r
 -                              if (YYCURSOR < YYLIMIT) {\r
 -                                      YYCURSOR++;\r
 -                              }\r
 -                              /* fall through */\r
 -                      default:\r
 -                              continue;\r
 -              }\r
 -\r
 -              YYCURSOR--;\r
 -              break;\r
 -      }\r
 -\r
 -      yyleng = YYCURSOR - SCNG(yy_text);\r
 -\r
 -      zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);\r
 -      return T_ENCAPSED_AND_WHITESPACE;\r
 -}\r
 -#line 1601 "Zend/zend_language_scanner.c"\r
 -yy57:\r
 -              YYDEBUG(57, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '$') goto yy61;\r
 -              goto yy56;\r
 -yy58:\r
 -              YYDEBUG(58, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(59, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2138 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      BEGIN(ST_IN_SCRIPTING);\r
 -      return '`';\r
 -}\r
 -#line 1617 "Zend/zend_language_scanner.c"\r
 -yy60:\r
 -              YYDEBUG(60, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy56;\r
 -yy61:\r
 -              YYDEBUG(61, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(62, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2125 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      Z_LVAL_P(zendlval) = (long) '{';\r
 -      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);\r
 -      yyless(1);\r
 -      return T_CURLY_OPEN;\r
 -}\r
 -#line 1634 "Zend/zend_language_scanner.c"\r
 -yy63:\r
 -              YYDEBUG(63, *YYCURSOR);\r
 -              yyaccept = 0;\r
 -              YYMARKER = ++YYCURSOR;\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(64, *YYCURSOR);\r
 -              if (yybm[0+yych] & 128) {\r
 -                      goto yy63;\r
 -              }\r
 -              if (yych == '-') goto yy68;\r
 -              if (yych == '[') goto yy70;\r
 -yy65:\r
 -              YYDEBUG(65, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1831 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 1656 "Zend/zend_language_scanner.c"\r
 -yy66:\r
 -              YYDEBUG(66, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(67, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1465 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);\r
 -      return T_DOLLAR_OPEN_CURLY_BRACES;\r
 -}\r
 -#line 1667 "Zend/zend_language_scanner.c"\r
 -yy68:\r
 -              YYDEBUG(68, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '>') goto yy72;\r
 -yy69:\r
 -              YYDEBUG(69, *YYCURSOR);\r
 -              YYCURSOR = YYMARKER;\r
 -              goto yy65;\r
 -yy70:\r
 -              YYDEBUG(70, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(71, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1823 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yyless(yyleng - 1);\r
 -      yy_push_state(ST_VAR_OFFSET TSRMLS_CC);\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 1689 "Zend/zend_language_scanner.c"\r
 -yy72:\r
 -              YYDEBUG(72, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '_') {\r
 -                      if (yych <= '@') goto yy69;\r
 -                      if (yych <= 'Z') goto yy73;\r
 -                      if (yych <= '^') goto yy69;\r
 -              } else {\r
 -                      if (yych <= '`') goto yy69;\r
 -                      if (yych <= 'z') goto yy73;\r
 -                      if (yych <= '~') goto yy69;\r
 -              }\r
 -yy73:\r
 -              YYDEBUG(73, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(74, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1813 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yyless(yyleng - 3);\r
 -      yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 1715 "Zend/zend_language_scanner.c"\r
 -      }\r
 -/* *********************************** */\r
 -yyc_ST_DOUBLE_QUOTES:\r
 -      {\r
 -              static const unsigned char yybm[] = {\r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128,   0,   0,   0,   0,   0,   0, \r
 -                        0, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128,   0,   0,   0,   0, 128, \r
 -                        0, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128,   0,   0,   0,   0, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -              };\r
 -              YYDEBUG(75, *YYCURSOR);\r
 -              YYFILL(2);\r
 -              yych = *YYCURSOR;\r
 -              if (yych <= '#') {\r
 -                      if (yych == '"') goto yy80;\r
 -                      goto yy82;\r
 -              } else {\r
 -                      if (yych <= '$') goto yy77;\r
 -                      if (yych == '{') goto yy79;\r
 -                      goto yy82;\r
 -              }\r
 -yy77:\r
 -              YYDEBUG(77, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '_') {\r
 -                      if (yych <= '@') goto yy78;\r
 -                      if (yych <= 'Z') goto yy85;\r
 -                      if (yych >= '_') goto yy85;\r
 -              } else {\r
 -                      if (yych <= 'z') {\r
 -                              if (yych >= 'a') goto yy85;\r
 -                      } else {\r
 -                              if (yych <= '{') goto yy88;\r
 -                              if (yych >= 0x7F) goto yy85;\r
 -                      }\r
 -              }\r
 -yy78:\r
 -              YYDEBUG(78, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2144 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {\r
 -              YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;\r
 -              SET_DOUBLE_QUOTES_SCANNED_LENGTH(0);\r
 -\r
 -              goto double_quotes_scan_done;\r
 -      }\r
 -\r
 -      if (YYCURSOR > YYLIMIT) {\r
 -              return 0;\r
 -      }\r
 -      if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {\r
 -              YYCURSOR++;\r
 -      }\r
 -\r
 -      while (YYCURSOR < YYLIMIT) {\r
 -              switch (*YYCURSOR++) {\r
 -                      case '"':\r
 -                              break;\r
 -                      case '$':\r
 -                              if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {\r
 -                                      break;\r
 -                              }\r
 -                              continue;\r
 -                      case '{':\r
 -                              if (*YYCURSOR == '$') {\r
 -                                      break;\r
 -                              }\r
 -                              continue;\r
 -                      case '\\':\r
 -                              if (YYCURSOR < YYLIMIT) {\r
 -                                      YYCURSOR++;\r
 -                              }\r
 -                              /* fall through */\r
 -                      default:\r
 -                              continue;\r
 -              }\r
 -\r
 -              YYCURSOR--;\r
 -              break;\r
 -      }\r
 -\r
 -double_quotes_scan_done:\r
 -      yyleng = YYCURSOR - SCNG(yy_text);\r
 -\r
 -      zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);\r
 -      return T_ENCAPSED_AND_WHITESPACE;\r
 -}\r
 -#line 1832 "Zend/zend_language_scanner.c"\r
 -yy79:\r
 -              YYDEBUG(79, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '$') goto yy83;\r
 -              goto yy78;\r
 -yy80:\r
 -              YYDEBUG(80, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(81, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2133 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      BEGIN(ST_IN_SCRIPTING);\r
 -      return '"';\r
 -}\r
 -#line 1848 "Zend/zend_language_scanner.c"\r
 -yy82:\r
 -              YYDEBUG(82, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy78;\r
 -yy83:\r
 -              YYDEBUG(83, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(84, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2125 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      Z_LVAL_P(zendlval) = (long) '{';\r
 -      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);\r
 -      yyless(1);\r
 -      return T_CURLY_OPEN;\r
 -}\r
 -#line 1865 "Zend/zend_language_scanner.c"\r
 -yy85:\r
 -              YYDEBUG(85, *YYCURSOR);\r
 -              yyaccept = 0;\r
 -              YYMARKER = ++YYCURSOR;\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(86, *YYCURSOR);\r
 -              if (yybm[0+yych] & 128) {\r
 -                      goto yy85;\r
 -              }\r
 -              if (yych == '-') goto yy90;\r
 -              if (yych == '[') goto yy92;\r
 -yy87:\r
 -              YYDEBUG(87, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1831 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 1887 "Zend/zend_language_scanner.c"\r
 -yy88:\r
 -              YYDEBUG(88, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(89, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1465 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);\r
 -      return T_DOLLAR_OPEN_CURLY_BRACES;\r
 -}\r
 -#line 1898 "Zend/zend_language_scanner.c"\r
 -yy90:\r
 -              YYDEBUG(90, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '>') goto yy94;\r
 -yy91:\r
 -              YYDEBUG(91, *YYCURSOR);\r
 -              YYCURSOR = YYMARKER;\r
 -              goto yy87;\r
 -yy92:\r
 -              YYDEBUG(92, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(93, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1823 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yyless(yyleng - 1);\r
 -      yy_push_state(ST_VAR_OFFSET TSRMLS_CC);\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 1920 "Zend/zend_language_scanner.c"\r
 -yy94:\r
 -              YYDEBUG(94, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '_') {\r
 -                      if (yych <= '@') goto yy91;\r
 -                      if (yych <= 'Z') goto yy95;\r
 -                      if (yych <= '^') goto yy91;\r
 -              } else {\r
 -                      if (yych <= '`') goto yy91;\r
 -                      if (yych <= 'z') goto yy95;\r
 -                      if (yych <= '~') goto yy91;\r
 -              }\r
 -yy95:\r
 -              YYDEBUG(95, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(96, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1813 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yyless(yyleng - 3);\r
 -      yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 1946 "Zend/zend_language_scanner.c"\r
 -      }\r
 -/* *********************************** */\r
 -yyc_ST_END_HEREDOC:\r
 -      YYDEBUG(97, *YYCURSOR);\r
 -      YYFILL(1);\r
 -      yych = *YYCURSOR;\r
 -      YYDEBUG(99, *YYCURSOR);\r
 -      ++YYCURSOR;\r
 -      YYDEBUG(100, *YYCURSOR);\r
 -      yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2111 "Zend/zend_language_scanner.l"\r
 -      {\r
 -      zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));\r
 -\r
 -      YYCURSOR += heredoc_label->length - 1;\r
 -      yyleng = heredoc_label->length;\r
 -\r
 -      heredoc_label_dtor(heredoc_label);\r
 -      efree(heredoc_label);\r
 -\r
 -      BEGIN(ST_IN_SCRIPTING);\r
 -      return T_END_HEREDOC;\r
 -}\r
 -#line 1970 "Zend/zend_language_scanner.c"\r
 -/* *********************************** */\r
 -yyc_ST_HEREDOC:\r
 -      {\r
 -              static const unsigned char yybm[] = {\r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128,   0,   0,   0,   0,   0,   0, \r
 -                        0, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128,   0,   0,   0,   0, 128, \r
 -                        0, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128,   0,   0,   0,   0, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -              };\r
 -              YYDEBUG(101, *YYCURSOR);\r
 -              YYFILL(2);\r
 -              yych = *YYCURSOR;\r
 -              if (yych == '$') goto yy103;\r
 -              if (yych == '{') goto yy105;\r
 -              goto yy106;\r
 -yy103:\r
 -              YYDEBUG(103, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '_') {\r
 -                      if (yych <= '@') goto yy104;\r
 -                      if (yych <= 'Z') goto yy109;\r
 -                      if (yych >= '_') goto yy109;\r
 -              } else {\r
 -                      if (yych <= 'z') {\r
 -                              if (yych >= 'a') goto yy109;\r
 -                      } else {\r
 -                              if (yych <= '{') goto yy112;\r
 -                              if (yych >= 0x7F) goto yy109;\r
 -                      }\r
 -              }\r
 -yy104:\r
 -              YYDEBUG(104, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2236 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      int newline = 0;\r
 -\r
 -      zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));\r
 -\r
 -      if (YYCURSOR > YYLIMIT) {\r
 -              return 0;\r
 -      }\r
 -\r
 -      YYCURSOR--;\r
 -\r
 -      while (YYCURSOR < YYLIMIT) {\r
 -              switch (*YYCURSOR++) {\r
 -                      case '\r':\r
 -                              if (*YYCURSOR == '\n') {\r
 -                                      YYCURSOR++;\r
 -                              }\r
 -                              /* fall through */\r
 -                      case '\n':\r
 -                              /* Check for ending label on the next line */\r
 -                              if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {\r
 -                                      YYCTYPE *end = YYCURSOR + heredoc_label->length;\r
 -\r
 -                                      if (*end == ';') {\r
 -                                              end++;\r
 -                                      }\r
 -\r
 -                                      if (*end == '\n' || *end == '\r') {\r
 -                                              /* newline before label will be subtracted from returned text, but\r
 -                                               * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */\r
 -                                              if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') {\r
 -                                                      newline = 2; /* Windows newline */\r
 -                                              } else {\r
 -                                                      newline = 1;\r
 -                                              }\r
 -\r
 -                                              CG(increment_lineno) = 1; /* For newline before label */\r
 -                                              BEGIN(ST_END_HEREDOC);\r
 -\r
 -                                              goto heredoc_scan_done;\r
 -                                      }\r
 -                              }\r
 -                              continue;\r
 -                      case '$':\r
 -                              if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {\r
 -                                      break;\r
 -                              }\r
 -                              continue;\r
 -                      case '{':\r
 -                              if (*YYCURSOR == '$') {\r
 -                                      break;\r
 -                              }\r
 -                              continue;\r
 -                      case '\\':\r
 -                              if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') {\r
 -                                      YYCURSOR++;\r
 -                              }\r
 -                              /* fall through */\r
 -                      default:\r
 -                              continue;\r
 -              }\r
 -\r
 -              YYCURSOR--;\r
 -              break;\r
 -      }\r
 -\r
 -heredoc_scan_done:\r
 -      yyleng = YYCURSOR - SCNG(yy_text);\r
 -\r
 -      zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0 TSRMLS_CC);\r
 -      return T_ENCAPSED_AND_WHITESPACE;\r
 -}\r
 -#line 2105 "Zend/zend_language_scanner.c"\r
 -yy105:\r
 -              YYDEBUG(105, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '$') goto yy107;\r
 -              goto yy104;\r
 -yy106:\r
 -              YYDEBUG(106, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy104;\r
 -yy107:\r
 -              YYDEBUG(107, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(108, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2125 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      Z_LVAL_P(zendlval) = (long) '{';\r
 -      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);\r
 -      yyless(1);\r
 -      return T_CURLY_OPEN;\r
 -}\r
 -#line 2127 "Zend/zend_language_scanner.c"\r
 -yy109:\r
 -              YYDEBUG(109, *YYCURSOR);\r
 -              yyaccept = 0;\r
 -              YYMARKER = ++YYCURSOR;\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(110, *YYCURSOR);\r
 -              if (yybm[0+yych] & 128) {\r
 -                      goto yy109;\r
 -              }\r
 -              if (yych == '-') goto yy114;\r
 -              if (yych == '[') goto yy116;\r
 -yy111:\r
 -              YYDEBUG(111, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1831 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 2149 "Zend/zend_language_scanner.c"\r
 -yy112:\r
 -              YYDEBUG(112, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(113, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1465 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);\r
 -      return T_DOLLAR_OPEN_CURLY_BRACES;\r
 -}\r
 -#line 2160 "Zend/zend_language_scanner.c"\r
 -yy114:\r
 -              YYDEBUG(114, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '>') goto yy118;\r
 -yy115:\r
 -              YYDEBUG(115, *YYCURSOR);\r
 -              YYCURSOR = YYMARKER;\r
 -              goto yy111;\r
 -yy116:\r
 -              YYDEBUG(116, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(117, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1823 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yyless(yyleng - 1);\r
 -      yy_push_state(ST_VAR_OFFSET TSRMLS_CC);\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 2182 "Zend/zend_language_scanner.c"\r
 -yy118:\r
 -              YYDEBUG(118, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '_') {\r
 -                      if (yych <= '@') goto yy115;\r
 -                      if (yych <= 'Z') goto yy119;\r
 -                      if (yych <= '^') goto yy115;\r
 -              } else {\r
 -                      if (yych <= '`') goto yy115;\r
 -                      if (yych <= 'z') goto yy119;\r
 -                      if (yych <= '~') goto yy115;\r
 -              }\r
 -yy119:\r
 -              YYDEBUG(119, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(120, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1813 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yyless(yyleng - 3);\r
 -      yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 2208 "Zend/zend_language_scanner.c"\r
 -      }\r
 -/* *********************************** */\r
 -yyc_ST_IN_SCRIPTING:\r
 -      {\r
 -              static const unsigned char yybm[] = {\r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0, 192,  64,   0,   0,  64,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                      192,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                       60,  60,  44,  44,  44,  44,  44,  44, \r
 -                       44,  44,   0,   0,   0,   0,   0,   0, \r
 -                        0,  36,  36,  36,  36,  36,  36,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   0,   0,   0,   0,   4, \r
 -                        0,  36,  36,  36,  36,  36,  36,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   0,   0,   0,   0,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -                        4,   4,   4,   4,   4,   4,   4,   4, \r
 -              };\r
 -              YYDEBUG(121, *YYCURSOR);\r
 -              YYFILL(16);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(-1, yych);\r
 -              switch (yych) {\r
 -              case 0x00:\r
 -              case 0x01:\r
 -              case 0x02:\r
 -              case 0x03:\r
 -              case 0x04:\r
 -              case 0x05:\r
 -              case 0x06:\r
 -              case 0x07:\r
 -              case 0x08:\r
 -              case '\v':\r
 -              case '\f':\r
 -              case 0x0E:\r
 -              case 0x0F:\r
 -              case 0x10:\r
 -              case 0x11:\r
 -              case 0x12:\r
 -              case 0x13:\r
 -              case 0x14:\r
 -              case 0x15:\r
 -              case 0x16:\r
 -              case 0x17:\r
 -              case 0x18:\r
 -              case 0x19:\r
 -              case 0x1A:\r
 -              case 0x1B:\r
 -              case 0x1C:\r
 -              case 0x1D:\r
 -              case 0x1E:\r
 -              case 0x1F:      goto yy184;\r
 -              case '\t':\r
 -              case '\n':\r
 -              case '\r':\r
 -              case ' ':       goto yy140;\r
 -              case '!':       goto yy154;\r
 -              case '"':       goto yy180;\r
 -              case '#':       goto yy176;\r
 -              case '$':       goto yy165;\r
 -              case '%':       goto yy159;\r
 -              case '&':       goto yy160;\r
 -              case '\'':      goto yy178;\r
 -              case '(':       goto yy148;\r
 -              case ')':\r
 -              case ',':\r
 -              case ';':\r
 -              case '@':\r
 -              case '[':\r
 -              case ']':\r
 -              case '~':       goto yy166;\r
 -              case '*':       goto yy157;\r
 -              case '+':       goto yy153;\r
 -              case '-':       goto yy138;\r
 -              case '.':       goto yy145;\r
 -              case '/':       goto yy158;\r
 -              case '0':       goto yy172;\r
 -              case '1':\r
 -              case '2':\r
 -              case '3':\r
 -              case '4':\r
 -              case '5':\r
 -              case '6':\r
 -              case '7':\r
 -              case '8':\r
 -              case '9':       goto yy174;\r
 -              case ':':       goto yy142;\r
 -              case '<':       goto yy155;\r
 -              case '=':       goto yy151;\r
 -              case '>':       goto yy156;\r
 -              case '?':       goto yy167;\r
 -              case 'A':\r
 -              case 'a':       goto yy133;\r
 -              case 'B':\r
 -              case 'b':       goto yy135;\r
 -              case 'C':\r
 -              case 'c':       goto yy127;\r
 -              case 'D':\r
 -              case 'd':       goto yy125;\r
 -              case 'E':\r
 -              case 'e':       goto yy123;\r
 -              case 'F':\r
 -              case 'f':       goto yy126;\r
 -              case 'G':\r
 -              case 'g':       goto yy136;\r
 -              case 'I':\r
 -              case 'i':       goto yy131;\r
 -              case 'L':\r
 -              case 'l':       goto yy152;\r
 -              case 'N':\r
 -              case 'n':       goto yy146;\r
 -              case 'O':\r
 -              case 'o':       goto yy163;\r
 -              case 'P':\r
 -              case 'p':       goto yy137;\r
 -              case 'R':\r
 -              case 'r':       goto yy128;\r
 -              case 'S':\r
 -              case 's':       goto yy134;\r
 -              case 'T':\r
 -              case 't':       goto yy130;\r
 -              case 'U':\r
 -              case 'u':       goto yy149;\r
 -              case 'V':\r
 -              case 'v':       goto yy147;\r
 -              case 'W':\r
 -              case 'w':       goto yy132;\r
 -              case 'X':\r
 -              case 'x':       goto yy164;\r
 -              case 'Y':\r
 -              case 'y':       goto yy129;\r
 -              case '\\':      goto yy143;\r
 -              case '^':       goto yy162;\r
 -              case '_':       goto yy150;\r
 -              case '`':       goto yy182;\r
 -              case '{':       goto yy168;\r
 -              case '|':       goto yy161;\r
 -              case '}':       goto yy170;\r
 -              default:        goto yy175;\r
 -              }\r
 -yy123:\r
 -              YYDEBUG(123, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(-1, yych);\r
 -              switch ((yych = *YYCURSOR)) {\r
 -              case 'C':\r
 -              case 'c':       goto yy742;\r
 -              case 'L':\r
 -              case 'l':       goto yy743;\r
 -              case 'M':\r
 -              case 'm':       goto yy744;\r
 -              case 'N':\r
 -              case 'n':       goto yy745;\r
 -              case 'V':\r
 -              case 'v':       goto yy746;\r
 -              case 'X':\r
 -              case 'x':       goto yy747;\r
 -              default:        goto yy187;\r
 -              }\r
 -yy124:\r
 -              YYDEBUG(124, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1854 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_copy_value(zendlval, yytext, yyleng);\r
 -      zendlval->type = IS_STRING;\r
 -      return T_STRING;\r
 -}\r
 -#line 2397 "Zend/zend_language_scanner.c"\r
 -yy125:\r
 -              YYDEBUG(125, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'O') {\r
 -                      if (yych <= 'H') {\r
 -                              if (yych == 'E') goto yy724;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 'I') goto yy725;\r
 -                              if (yych <= 'N') goto yy187;\r
 -                              goto yy726;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'h') {\r
 -                              if (yych == 'e') goto yy724;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 'i') goto yy725;\r
 -                              if (yych == 'o') goto yy726;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy126:\r
 -              YYDEBUG(126, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'U') {\r
 -                      if (yych <= 'N') {\r
 -                              if (yych == 'I') goto yy700;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 'O') goto yy701;\r
 -                              if (yych <= 'T') goto yy187;\r
 -                              goto yy702;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'n') {\r
 -                              if (yych == 'i') goto yy700;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 'o') goto yy701;\r
 -                              if (yych == 'u') goto yy702;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy127:\r
 -              YYDEBUG(127, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'O') {\r
 -                      if (yych <= 'K') {\r
 -                              if (yych == 'A') goto yy665;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 'L') goto yy666;\r
 -                              if (yych <= 'N') goto yy187;\r
 -                              goto yy667;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'k') {\r
 -                              if (yych == 'a') goto yy665;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 'l') goto yy666;\r
 -                              if (yych == 'o') goto yy667;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy128:\r
 -              YYDEBUG(128, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy647;\r
 -              if (yych == 'e') goto yy647;\r
 -              goto yy187;\r
 -yy129:\r
 -              YYDEBUG(129, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy642;\r
 -              if (yych == 'i') goto yy642;\r
 -              goto yy187;\r
 -yy130:\r
 -              YYDEBUG(130, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'R') {\r
 -                      if (yych == 'H') goto yy630;\r
 -                      if (yych <= 'Q') goto yy187;\r
 -                      goto yy631;\r
 -              } else {\r
 -                      if (yych <= 'h') {\r
 -                              if (yych <= 'g') goto yy187;\r
 -                              goto yy630;\r
 -                      } else {\r
 -                              if (yych == 'r') goto yy631;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy131:\r
 -              YYDEBUG(131, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'S') {\r
 -                      if (yych <= 'L') {\r
 -                              if (yych == 'F') goto yy577;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 'M') goto yy579;\r
 -                              if (yych <= 'N') goto yy580;\r
 -                              if (yych <= 'R') goto yy187;\r
 -                              goto yy581;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'm') {\r
 -                              if (yych == 'f') goto yy577;\r
 -                              if (yych <= 'l') goto yy187;\r
 -                              goto yy579;\r
 -                      } else {\r
 -                              if (yych <= 'n') goto yy580;\r
 -                              if (yych == 's') goto yy581;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy132:\r
 -              YYDEBUG(132, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy572;\r
 -              if (yych == 'h') goto yy572;\r
 -              goto yy187;\r
 -yy133:\r
 -              YYDEBUG(133, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'S') {\r
 -                      if (yych <= 'M') {\r
 -                              if (yych == 'B') goto yy554;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 'N') goto yy555;\r
 -                              if (yych <= 'Q') goto yy187;\r
 -                              if (yych <= 'R') goto yy556;\r
 -                              goto yy557;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'n') {\r
 -                              if (yych == 'b') goto yy554;\r
 -                              if (yych <= 'm') goto yy187;\r
 -                              goto yy555;\r
 -                      } else {\r
 -                              if (yych <= 'q') goto yy187;\r
 -                              if (yych <= 'r') goto yy556;\r
 -                              if (yych <= 's') goto yy557;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy134:\r
 -              YYDEBUG(134, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'W') {\r
 -                      if (yych == 'T') goto yy542;\r
 -                      if (yych <= 'V') goto yy187;\r
 -                      goto yy543;\r
 -              } else {\r
 -                      if (yych <= 't') {\r
 -                              if (yych <= 's') goto yy187;\r
 -                              goto yy542;\r
 -                      } else {\r
 -                              if (yych == 'w') goto yy543;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy135:\r
 -              YYDEBUG(135, *YYCURSOR);\r
 -              yyaccept = 0;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= ';') {\r
 -                      if (yych <= '"') {\r
 -                              if (yych <= '!') goto yy187;\r
 -                              goto yy534;\r
 -                      } else {\r
 -                              if (yych == '\'') goto yy535;\r
 -                              goto yy187;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'R') {\r
 -                              if (yych <= '<') goto yy533;\r
 -                              if (yych <= 'Q') goto yy187;\r
 -                              goto yy536;\r
 -                      } else {\r
 -                              if (yych == 'r') goto yy536;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy136:\r
 -              YYDEBUG(136, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'O') {\r
 -                      if (yych == 'L') goto yy523;\r
 -                      if (yych <= 'N') goto yy187;\r
 -                      goto yy524;\r
 -              } else {\r
 -                      if (yych <= 'l') {\r
 -                              if (yych <= 'k') goto yy187;\r
 -                              goto yy523;\r
 -                      } else {\r
 -                              if (yych == 'o') goto yy524;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy137:\r
 -              YYDEBUG(137, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'U') {\r
 -                      if (yych == 'R') goto yy499;\r
 -                      if (yych <= 'T') goto yy187;\r
 -                      goto yy500;\r
 -              } else {\r
 -                      if (yych <= 'r') {\r
 -                              if (yych <= 'q') goto yy187;\r
 -                              goto yy499;\r
 -                      } else {\r
 -                              if (yych == 'u') goto yy500;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy138:\r
 -              YYDEBUG(138, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '<') {\r
 -                      if (yych == '-') goto yy495;\r
 -              } else {\r
 -                      if (yych <= '=') goto yy493;\r
 -                      if (yych <= '>') goto yy497;\r
 -              }\r
 -yy139:\r
 -              YYDEBUG(139, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1454 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return yytext[0];\r
 -}\r
 -#line 2633 "Zend/zend_language_scanner.c"\r
 -yy140:\r
 -              YYDEBUG(140, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              yych = *YYCURSOR;\r
 -              goto yy492;\r
 -yy141:\r
 -              YYDEBUG(141, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1175 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -      HANDLE_NEWLINES(yytext, yyleng);\r
 -      return T_WHITESPACE;\r
 -}\r
 -#line 2648 "Zend/zend_language_scanner.c"\r
 -yy142:\r
 -              YYDEBUG(142, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == ':') goto yy489;\r
 -              goto yy139;\r
 -yy143:\r
 -              YYDEBUG(143, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(144, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1202 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_NS_SEPARATOR;\r
 -}\r
 -#line 2663 "Zend/zend_language_scanner.c"\r
 -yy145:\r
 -              YYDEBUG(145, *YYCURSOR);\r
 -              yyaccept = 1;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= '/') {\r
 -                      if (yych == '.') goto yy486;\r
 -                      goto yy139;\r
 -              } else {\r
 -                      if (yych <= '9') goto yy482;\r
 -                      if (yych == '=') goto yy484;\r
 -                      goto yy139;\r
 -              }\r
 -yy146:\r
 -              YYDEBUG(146, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'E') {\r
 -                      if (yych == 'A') goto yy470;\r
 -                      if (yych <= 'D') goto yy187;\r
 -                      goto yy471;\r
 -              } else {\r
 -                      if (yych <= 'a') {\r
 -                              if (yych <= '`') goto yy187;\r
 -                              goto yy470;\r
 -                      } else {\r
 -                              if (yych == 'e') goto yy471;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy147:\r
 -              YYDEBUG(147, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy467;\r
 -              if (yych == 'a') goto yy467;\r
 -              goto yy187;\r
 -yy148:\r
 -              YYDEBUG(148, *YYCURSOR);\r
 -              yyaccept = 1;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= 'S') {\r
 -                      if (yych <= 'D') {\r
 -                              if (yych <= ' ') {\r
 -                                      if (yych == '\t') goto yy392;\r
 -                                      if (yych <= 0x1F) goto yy139;\r
 -                                      goto yy392;\r
 -                              } else {\r
 -                                      if (yych <= '@') goto yy139;\r
 -                                      if (yych == 'C') goto yy139;\r
 -                                      goto yy392;\r
 -                              }\r
 -                      } else {\r
 -                              if (yych <= 'I') {\r
 -                                      if (yych == 'F') goto yy392;\r
 -                                      if (yych <= 'H') goto yy139;\r
 -                                      goto yy392;\r
 -                              } else {\r
 -                                      if (yych == 'O') goto yy392;\r
 -                                      if (yych <= 'Q') goto yy139;\r
 -                                      goto yy392;\r
 -                              }\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'f') {\r
 -                              if (yych <= 'b') {\r
 -                                      if (yych == 'U') goto yy392;\r
 -                                      if (yych <= '`') goto yy139;\r
 -                                      goto yy392;\r
 -                              } else {\r
 -                                      if (yych == 'd') goto yy392;\r
 -                                      if (yych <= 'e') goto yy139;\r
 -                                      goto yy392;\r
 -                              }\r
 -                      } else {\r
 -                              if (yych <= 'o') {\r
 -                                      if (yych == 'i') goto yy392;\r
 -                                      if (yych <= 'n') goto yy139;\r
 -                                      goto yy392;\r
 -                              } else {\r
 -                                      if (yych <= 's') {\r
 -                                              if (yych <= 'q') goto yy139;\r
 -                                              goto yy392;\r
 -                                      } else {\r
 -                                              if (yych == 'u') goto yy392;\r
 -                                              goto yy139;\r
 -                                      }\r
 -                              }\r
 -                      }\r
 -              }\r
 -yy149:\r
 -              YYDEBUG(149, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'S') {\r
 -                      if (yych == 'N') goto yy383;\r
 -                      if (yych <= 'R') goto yy187;\r
 -                      goto yy384;\r
 -              } else {\r
 -                      if (yych <= 'n') {\r
 -                              if (yych <= 'm') goto yy187;\r
 -                              goto yy383;\r
 -                      } else {\r
 -                              if (yych == 's') goto yy384;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy150:\r
 -              YYDEBUG(150, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '_') goto yy301;\r
 -              goto yy187;\r
 -yy151:\r
 -              YYDEBUG(151, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '<') goto yy139;\r
 -              if (yych <= '=') goto yy295;\r
 -              if (yych <= '>') goto yy297;\r
 -              goto yy139;\r
 -yy152:\r
 -              YYDEBUG(152, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy291;\r
 -              if (yych == 'i') goto yy291;\r
 -              goto yy187;\r
 -yy153:\r
 -              YYDEBUG(153, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '+') goto yy289;\r
 -              if (yych == '=') goto yy287;\r
 -              goto yy139;\r
 -yy154:\r
 -              YYDEBUG(154, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '=') goto yy284;\r
 -              goto yy139;\r
 -yy155:\r
 -              YYDEBUG(155, *YYCURSOR);\r
 -              yyaccept = 1;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= ';') {\r
 -                      if (yych == '/') goto yy256;\r
 -                      goto yy139;\r
 -              } else {\r
 -                      if (yych <= '<') goto yy254;\r
 -                      if (yych <= '=') goto yy257;\r
 -                      if (yych <= '>') goto yy259;\r
 -                      goto yy139;\r
 -              }\r
 -yy156:\r
 -              YYDEBUG(156, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '<') goto yy139;\r
 -              if (yych <= '=') goto yy250;\r
 -              if (yych <= '>') goto yy248;\r
 -              goto yy139;\r
 -yy157:\r
 -              YYDEBUG(157, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '*') goto yy242;\r
 -              if (yych == '=') goto yy244;\r
 -              goto yy139;\r
 -yy158:\r
 -              YYDEBUG(158, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '.') {\r
 -                      if (yych == '*') goto yy234;\r
 -                      goto yy139;\r
 -              } else {\r
 -                      if (yych <= '/') goto yy236;\r
 -                      if (yych == '=') goto yy237;\r
 -                      goto yy139;\r
 -              }\r
 -yy159:\r
 -              YYDEBUG(159, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '<') goto yy139;\r
 -              if (yych <= '=') goto yy230;\r
 -              if (yych <= '>') goto yy228;\r
 -              goto yy139;\r
 -yy160:\r
 -              YYDEBUG(160, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '&') goto yy224;\r
 -              if (yych == '=') goto yy226;\r
 -              goto yy139;\r
 -yy161:\r
 -              YYDEBUG(161, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '=') goto yy222;\r
 -              if (yych == '|') goto yy220;\r
 -              goto yy139;\r
 -yy162:\r
 -              YYDEBUG(162, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '=') goto yy218;\r
 -              goto yy139;\r
 -yy163:\r
 -              YYDEBUG(163, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy216;\r
 -              if (yych == 'r') goto yy216;\r
 -              goto yy187;\r
 -yy164:\r
 -              YYDEBUG(164, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy213;\r
 -              if (yych == 'o') goto yy213;\r
 -              goto yy187;\r
 -yy165:\r
 -              YYDEBUG(165, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '_') {\r
 -                      if (yych <= '@') goto yy139;\r
 -                      if (yych <= 'Z') goto yy210;\r
 -                      if (yych <= '^') goto yy139;\r
 -                      goto yy210;\r
 -              } else {\r
 -                      if (yych <= '`') goto yy139;\r
 -                      if (yych <= 'z') goto yy210;\r
 -                      if (yych <= '~') goto yy139;\r
 -                      goto yy210;\r
 -              }\r
 -yy166:\r
 -              YYDEBUG(166, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy139;\r
 -yy167:\r
 -              YYDEBUG(167, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '>') goto yy206;\r
 -              goto yy139;\r
 -yy168:\r
 -              YYDEBUG(168, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(169, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1459 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);\r
 -      return '{';\r
 -}\r
 -#line 2902 "Zend/zend_language_scanner.c"\r
 -yy170:\r
 -              YYDEBUG(170, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(171, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1471 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      RESET_DOC_COMMENT();\r
 -      if (!zend_stack_is_empty(&SCNG(state_stack))) {\r
 -              yy_pop_state(TSRMLS_C);\r
 -      }\r
 -      return '}';\r
 -}\r
 -#line 2916 "Zend/zend_language_scanner.c"\r
 -yy172:\r
 -              YYDEBUG(172, *YYCURSOR);\r
 -              yyaccept = 2;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= 'E') {\r
 -                      if (yych <= '9') {\r
 -                              if (yych == '.') goto yy188;\r
 -                              if (yych >= '0') goto yy191;\r
 -                      } else {\r
 -                              if (yych == 'B') goto yy199;\r
 -                              if (yych >= 'E') goto yy193;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'b') {\r
 -                              if (yych == 'X') goto yy198;\r
 -                              if (yych >= 'b') goto yy199;\r
 -                      } else {\r
 -                              if (yych <= 'e') {\r
 -                                      if (yych >= 'e') goto yy193;\r
 -                              } else {\r
 -                                      if (yych == 'x') goto yy198;\r
 -                              }\r
 -                      }\r
 -              }\r
 -yy173:\r
 -              YYDEBUG(173, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1521 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */\r
 -              Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);\r
 -      } else {\r
 -              errno = 0;\r
 -              Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);\r
 -              if (errno == ERANGE) { /* Overflow */\r
 -                      if (yytext[0] == '0') { /* octal overflow */\r
 -                              Z_DVAL_P(zendlval) = zend_oct_strtod(yytext, NULL);\r
 -                      } else {\r
 -                              Z_DVAL_P(zendlval) = zend_strtod(yytext, NULL);\r
 -                      }\r
 -                      zendlval->type = IS_DOUBLE;\r
 -                      return T_DNUMBER;\r
 -              }\r
 -      }\r
 -\r
 -      zendlval->type = IS_LONG;\r
 -      return T_LNUMBER;\r
 -}\r
 -#line 2965 "Zend/zend_language_scanner.c"\r
 -yy174:\r
 -              YYDEBUG(174, *YYCURSOR);\r
 -              yyaccept = 2;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= '9') {\r
 -                      if (yych == '.') goto yy188;\r
 -                      if (yych <= '/') goto yy173;\r
 -                      goto yy191;\r
 -              } else {\r
 -                      if (yych <= 'E') {\r
 -                              if (yych <= 'D') goto yy173;\r
 -                              goto yy193;\r
 -                      } else {\r
 -                              if (yych == 'e') goto yy193;\r
 -                              goto yy173;\r
 -                      }\r
 -              }\r
 -yy175:\r
 -              YYDEBUG(175, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy187;\r
 -yy176:\r
 -              YYDEBUG(176, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -yy177:\r
 -              YYDEBUG(177, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1861 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      while (YYCURSOR < YYLIMIT) {\r
 -              switch (*YYCURSOR++) {\r
 -                      case '\r':\r
 -                              if (*YYCURSOR == '\n') {\r
 -                                      YYCURSOR++;\r
 -                              }\r
 -                              /* fall through */\r
 -                      case '\n':\r
 -                              CG(zend_lineno)++;\r
 -                              break;\r
 -                      case '%':\r
 -                              if (!CG(asp_tags)) {\r
 -                                      continue;\r
 -                              }\r
 -                              /* fall through */\r
 -                      case '?':\r
 -                              if (*YYCURSOR == '>') {\r
 -                                      YYCURSOR--;\r
 -                                      break;\r
 -                              }\r
 -                              /* fall through */\r
 -                      default:\r
 -                              continue;\r
 -              }\r
 -\r
 -              break;\r
 -      }\r
 -\r
 -      yyleng = YYCURSOR - SCNG(yy_text);\r
 -\r
 -      return T_COMMENT;\r
 -}\r
 -#line 3027 "Zend/zend_language_scanner.c"\r
 -yy178:\r
 -              YYDEBUG(178, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -yy179:\r
 -              YYDEBUG(179, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1948 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      register char *s, *t;\r
 -      char *end;\r
 -      int bprefix = (yytext[0] != '\'') ? 1 : 0;\r
 -\r
 -      while (1) {\r
 -              if (YYCURSOR < YYLIMIT) {\r
 -                      if (*YYCURSOR == '\'') {\r
 -                              YYCURSOR++;\r
 -                              yyleng = YYCURSOR - SCNG(yy_text);\r
 -\r
 -                              break;\r
 -                      } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) {\r
 -                              YYCURSOR++;\r
 -                      }\r
 -              } else {\r
 -                      yyleng = YYLIMIT - SCNG(yy_text);\r
 -\r
 -                      /* Unclosed single quotes; treat similar to double quotes, but without a separate token\r
 -                       * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..."\r
 -                       * rule, which continued in ST_IN_SCRIPTING state after the quote */\r
 -                      return T_ENCAPSED_AND_WHITESPACE;\r
 -              }\r
 -      }\r
 -\r
 -      ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2, 1);\r
 -\r
 -      /* convert escape sequences */\r
 -      s = t = Z_STRVAL_P(zendlval);\r
 -      end = s+Z_STRLEN_P(zendlval);\r
 -      while (s<end) {\r
 -              if (*s=='\\') {\r
 -                      s++;\r
 -\r
 -                      switch(*s) {\r
 -                              case '\\':\r
 -                              case '\'':\r
 -                                      *t++ = *s;\r
 -                                      Z_STRLEN_P(zendlval)--;\r
 -                                      break;\r
 -                              default:\r
 -                                      *t++ = '\\';\r
 -                                      *t++ = *s;\r
 -                                      break;\r
 -                      }\r
 -              } else {\r
 -                      *t++ = *s;\r
 -              }\r
 -\r
 -              if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {\r
 -                      CG(zend_lineno)++;\r
 -              }\r
 -              s++;\r
 -      }\r
 -      *t = 0;\r
 -\r
 -      if (SCNG(output_filter)) {\r
 -              size_t sz = 0;\r
 -              s = Z_STRVAL_P(zendlval);\r
 -              SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC);\r
 -              Z_STRLEN_P(zendlval) = sz;\r
 -              efree(s);\r
 -      }\r
 -      return T_CONSTANT_ENCAPSED_STRING;\r
 -}\r
 -#line 3100 "Zend/zend_language_scanner.c"\r
 -yy180:\r
 -              YYDEBUG(180, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -yy181:\r
 -              YYDEBUG(181, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2015 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      int bprefix = (yytext[0] != '"') ? 1 : 0;\r
 -\r
 -      while (YYCURSOR < YYLIMIT) {\r
 -              switch (*YYCURSOR++) {\r
 -                      case '"':\r
 -                              yyleng = YYCURSOR - SCNG(yy_text);\r
 -                              zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"' TSRMLS_CC);\r
 -                              return T_CONSTANT_ENCAPSED_STRING;\r
 -                      case '$':\r
 -                              if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {\r
 -                                      break;\r
 -                              }\r
 -                              continue;\r
 -                      case '{':\r
 -                              if (*YYCURSOR == '$') {\r
 -                                      break;\r
 -                              }\r
 -                              continue;\r
 -                      case '\\':\r
 -                              if (YYCURSOR < YYLIMIT) {\r
 -                                      YYCURSOR++;\r
 -                              }\r
 -                              /* fall through */\r
 -                      default:\r
 -                              continue;\r
 -              }\r
 -\r
 -              YYCURSOR--;\r
 -              break;\r
 -      }\r
 -\r
 -      /* Remember how much was scanned to save rescanning */\r
 -      SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng);\r
 -\r
 -      YYCURSOR = SCNG(yy_text) + yyleng;\r
 -\r
 -      BEGIN(ST_DOUBLE_QUOTES);\r
 -      return '"';\r
 -}\r
 -#line 3148 "Zend/zend_language_scanner.c"\r
 -yy182:\r
 -              YYDEBUG(182, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(183, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2105 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      BEGIN(ST_BACKQUOTE);\r
 -      return '`';\r
 -}\r
 -#line 3159 "Zend/zend_language_scanner.c"\r
 -yy184:\r
 -              YYDEBUG(184, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(185, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2368 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (YYCURSOR > YYLIMIT) {\r
 -              return 0;\r
 -      }\r
 -\r
 -      zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);\r
 -      goto restart;\r
 -}\r
 -#line 3174 "Zend/zend_language_scanner.c"\r
 -yy186:\r
 -              YYDEBUG(186, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -yy187:\r
 -              YYDEBUG(187, *YYCURSOR);\r
 -              if (yybm[0+yych] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              goto yy124;\r
 -yy188:\r
 -              YYDEBUG(188, *YYCURSOR);\r
 -              yyaccept = 3;\r
 -              YYMARKER = ++YYCURSOR;\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(189, *YYCURSOR);\r
 -              if (yybm[0+yych] & 8) {\r
 -                      goto yy188;\r
 -              }\r
 -              if (yych == 'E') goto yy193;\r
 -              if (yych == 'e') goto yy193;\r
 -yy190:\r
 -              YYDEBUG(190, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1580 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL));\r
 -      return T_DNUMBER;\r
 -}\r
 -#line 3206 "Zend/zend_language_scanner.c"\r
 -yy191:\r
 -              YYDEBUG(191, *YYCURSOR);\r
 -              yyaccept = 2;\r
 -              YYMARKER = ++YYCURSOR;\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(192, *YYCURSOR);\r
 -              if (yych <= '9') {\r
 -                      if (yych == '.') goto yy188;\r
 -                      if (yych <= '/') goto yy173;\r
 -                      goto yy191;\r
 -              } else {\r
 -                      if (yych <= 'E') {\r
 -                              if (yych <= 'D') goto yy173;\r
 -                      } else {\r
 -                              if (yych != 'e') goto yy173;\r
 -                      }\r
 -              }\r
 -yy193:\r
 -              YYDEBUG(193, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= ',') {\r
 -                      if (yych == '+') goto yy195;\r
 -              } else {\r
 -                      if (yych <= '-') goto yy195;\r
 -                      if (yych <= '/') goto yy194;\r
 -                      if (yych <= '9') goto yy196;\r
 -              }\r
 -yy194:\r
 -              YYDEBUG(194, *YYCURSOR);\r
 -              YYCURSOR = YYMARKER;\r
 -              if (yyaccept <= 2) {\r
 -                      if (yyaccept <= 1) {\r
 -                              if (yyaccept <= 0) {\r
 -                                      goto yy124;\r
 -                              } else {\r
 -                                      goto yy139;\r
 -                              }\r
 -                      } else {\r
 -                              goto yy173;\r
 -                      }\r
 -              } else {\r
 -                      if (yyaccept <= 4) {\r
 -                              if (yyaccept <= 3) {\r
 -                                      goto yy190;\r
 -                              } else {\r
 -                                      goto yy235;\r
 -                              }\r
 -                      } else {\r
 -                              goto yy255;\r
 -                      }\r
 -              }\r
 -yy195:\r
 -              YYDEBUG(195, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= '/') goto yy194;\r
 -              if (yych >= ':') goto yy194;\r
 -yy196:\r
 -              YYDEBUG(196, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(197, *YYCURSOR);\r
 -              if (yych <= '/') goto yy190;\r
 -              if (yych <= '9') goto yy196;\r
 -              goto yy190;\r
 -yy198:\r
 -              YYDEBUG(198, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yybm[0+yych] & 32) {\r
 -                      goto yy203;\r
 -              }\r
 -              goto yy194;\r
 -yy199:\r
 -              YYDEBUG(199, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yybm[0+yych] & 16) {\r
 -                      goto yy200;\r
 -              }\r
 -              goto yy194;\r
 -yy200:\r
 -              YYDEBUG(200, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(201, *YYCURSOR);\r
 -              if (yybm[0+yych] & 16) {\r
 -                      goto yy200;\r
 -              }\r
 -              YYDEBUG(202, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1497 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      char *bin = yytext + 2; /* Skip "0b" */\r
 -      int len = yyleng - 2;\r
 -\r
 -      /* Skip any leading 0s */\r
 -      while (*bin == '0') {\r
 -              ++bin;\r
 -              --len;\r
 -      }\r
 -\r
 -      if (len < SIZEOF_LONG * 8) {\r
 -              if (len == 0) {\r
 -                      Z_LVAL_P(zendlval) = 0;\r
 -              } else {\r
 -                      Z_LVAL_P(zendlval) = strtol(bin, NULL, 2);\r
 -              }\r
 -              zendlval->type = IS_LONG;\r
 -              return T_LNUMBER;\r
 -      } else {\r
 -              ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, NULL));\r
 -              return T_DNUMBER;\r
 -      }\r
 -}\r
 -#line 3322 "Zend/zend_language_scanner.c"\r
 -yy203:\r
 -              YYDEBUG(203, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(204, *YYCURSOR);\r
 -              if (yybm[0+yych] & 32) {\r
 -                      goto yy203;\r
 -              }\r
 -              YYDEBUG(205, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1542 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      char *hex = yytext + 2; /* Skip "0x" */\r
 -      int len = yyleng - 2;\r
 -\r
 -      /* Skip any leading 0s */\r
 -      while (*hex == '0') {\r
 -              hex++;\r
 -              len--;\r
 -      }\r
 -\r
 -      if (len < SIZEOF_LONG * 2 || (len == SIZEOF_LONG * 2 && *hex <= '7')) {\r
 -              if (len == 0) {\r
 -                      Z_LVAL_P(zendlval) = 0;\r
 -              } else {\r
 -                      Z_LVAL_P(zendlval) = strtol(hex, NULL, 16);\r
 -              }\r
 -              zendlval->type = IS_LONG;\r
 -              return T_LNUMBER;\r
 -      } else {\r
 -              ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, NULL));\r
 -              return T_DNUMBER;\r
 -      }\r
 -}\r
 -#line 3358 "Zend/zend_language_scanner.c"\r
 -yy206:\r
 -              YYDEBUG(206, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) == '\n') goto yy208;\r
 -              if (yych == '\r') goto yy209;\r
 -yy207:\r
 -              YYDEBUG(207, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1929 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -      BEGIN(INITIAL);\r
 -      return T_CLOSE_TAG;  /* implicit ';' at php-end tag */\r
 -}\r
 -#line 3373 "Zend/zend_language_scanner.c"\r
 -yy208:\r
 -              YYDEBUG(208, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy207;\r
 -yy209:\r
 -              YYDEBUG(209, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '\n') goto yy208;\r
 -              goto yy207;\r
 -yy210:\r
 -              YYDEBUG(210, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(211, *YYCURSOR);\r
 -              if (yych <= '^') {\r
 -                      if (yych <= '9') {\r
 -                              if (yych >= '0') goto yy210;\r
 -                      } else {\r
 -                              if (yych <= '@') goto yy212;\r
 -                              if (yych <= 'Z') goto yy210;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '`') {\r
 -                              if (yych <= '_') goto yy210;\r
 -                      } else {\r
 -                              if (yych <= 'z') goto yy210;\r
 -                              if (yych >= 0x7F) goto yy210;\r
 -                      }\r
 -              }\r
 -yy212:\r
 -              YYDEBUG(212, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1831 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 3413 "Zend/zend_language_scanner.c"\r
 -yy213:\r
 -              YYDEBUG(213, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy214;\r
 -              if (yych != 'r') goto yy187;\r
 -yy214:\r
 -              YYDEBUG(214, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(215, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1442 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_LOGICAL_XOR;\r
 -}\r
 -#line 3431 "Zend/zend_language_scanner.c"\r
 -yy216:\r
 -              YYDEBUG(216, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(217, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1434 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_LOGICAL_OR;\r
 -}\r
 -#line 3444 "Zend/zend_language_scanner.c"\r
 -yy218:\r
 -              YYDEBUG(218, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(219, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1422 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_XOR_EQUAL;\r
 -}\r
 -#line 3454 "Zend/zend_language_scanner.c"\r
 -yy220:\r
 -              YYDEBUG(220, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(221, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1426 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_BOOLEAN_OR;\r
 -}\r
 -#line 3464 "Zend/zend_language_scanner.c"\r
 -yy222:\r
 -              YYDEBUG(222, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(223, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1418 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_OR_EQUAL;\r
 -}\r
 -#line 3474 "Zend/zend_language_scanner.c"\r
 -yy224:\r
 -              YYDEBUG(224, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(225, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1430 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_BOOLEAN_AND;\r
 -}\r
 -#line 3484 "Zend/zend_language_scanner.c"\r
 -yy226:\r
 -              YYDEBUG(226, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(227, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1414 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_AND_EQUAL;\r
 -}\r
 -#line 3494 "Zend/zend_language_scanner.c"\r
 -yy228:\r
 -              YYDEBUG(228, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) == '\n') goto yy232;\r
 -              if (yych == '\r') goto yy233;\r
 -yy229:\r
 -              YYDEBUG(229, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1936 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (CG(asp_tags)) {\r
 -              BEGIN(INITIAL);\r
 -              ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -              return T_CLOSE_TAG;  /* implicit ';' at php-end tag */\r
 -      } else {\r
 -              yyless(1);\r
 -              return yytext[0];\r
 -      }\r
 -}\r
 -#line 3514 "Zend/zend_language_scanner.c"\r
 -yy230:\r
 -              YYDEBUG(230, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(231, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1402 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_MOD_EQUAL;\r
 -}\r
 -#line 3524 "Zend/zend_language_scanner.c"\r
 -yy232:\r
 -              YYDEBUG(232, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy229;\r
 -yy233:\r
 -              YYDEBUG(233, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '\n') goto yy232;\r
 -              goto yy229;\r
 -yy234:\r
 -              YYDEBUG(234, *YYCURSOR);\r
 -              yyaccept = 4;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych == '*') goto yy239;\r
 -yy235:\r
 -              YYDEBUG(235, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1895 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      int doc_com;\r
 -\r
 -      if (yyleng > 2) {\r
 -              doc_com = 1;\r
 -              RESET_DOC_COMMENT();\r
 -      } else {\r
 -              doc_com = 0;\r
 -      }\r
 -\r
 -      while (YYCURSOR < YYLIMIT) {\r
 -              if (*YYCURSOR++ == '*' && *YYCURSOR == '/') {\r
 -                      break;\r
 -              }\r
 -      }\r
 -\r
 -      if (YYCURSOR < YYLIMIT) {\r
 -              YYCURSOR++;\r
 -      } else {\r
 -              zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno));\r
 -      }\r
 -\r
 -      yyleng = YYCURSOR - SCNG(yy_text);\r
 -      HANDLE_NEWLINES(yytext, yyleng);\r
 -\r
 -      if (doc_com) {\r
 -              CG(doc_comment) = estrndup(yytext, yyleng);\r
 -              CG(doc_comment_len) = yyleng;\r
 -              return T_DOC_COMMENT;\r
 -      }\r
 -\r
 -      return T_COMMENT;\r
 -}\r
 -#line 3576 "Zend/zend_language_scanner.c"\r
 -yy236:\r
 -              YYDEBUG(236, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy177;\r
 -yy237:\r
 -              YYDEBUG(237, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(238, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1394 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_DIV_EQUAL;\r
 -}\r
 -#line 3590 "Zend/zend_language_scanner.c"\r
 -yy239:\r
 -              YYDEBUG(239, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yybm[0+yych] & 64) {\r
 -                      goto yy240;\r
 -              }\r
 -              goto yy194;\r
 -yy240:\r
 -              YYDEBUG(240, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(241, *YYCURSOR);\r
 -              if (yybm[0+yych] & 64) {\r
 -                      goto yy240;\r
 -              }\r
 -              goto yy235;\r
 -yy242:\r
 -              YYDEBUG(242, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) == '=') goto yy246;\r
 -              YYDEBUG(243, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1386 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_POW;\r
 -}\r
 -#line 3618 "Zend/zend_language_scanner.c"\r
 -yy244:\r
 -              YYDEBUG(244, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(245, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1382 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_MUL_EQUAL;\r
 -}\r
 -#line 3628 "Zend/zend_language_scanner.c"\r
 -yy246:\r
 -              YYDEBUG(246, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(247, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1390 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_POW_EQUAL;\r
 -}\r
 -#line 3638 "Zend/zend_language_scanner.c"\r
 -yy248:\r
 -              YYDEBUG(248, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) == '=') goto yy252;\r
 -              YYDEBUG(249, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1450 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_SR;\r
 -}\r
 -#line 3649 "Zend/zend_language_scanner.c"\r
 -yy250:\r
 -              YYDEBUG(250, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(251, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1370 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_IS_GREATER_OR_EQUAL;\r
 -}\r
 -#line 3659 "Zend/zend_language_scanner.c"\r
 -yy252:\r
 -              YYDEBUG(252, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(253, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1410 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_SR_EQUAL;\r
 -}\r
 -#line 3669 "Zend/zend_language_scanner.c"\r
 -yy254:\r
 -              YYDEBUG(254, *YYCURSOR);\r
 -              yyaccept = 5;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= ';') goto yy255;\r
 -              if (yych <= '<') goto yy270;\r
 -              if (yych <= '=') goto yy268;\r
 -yy255:\r
 -              YYDEBUG(255, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1446 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_SL;\r
 -}\r
 -#line 3684 "Zend/zend_language_scanner.c"\r
 -yy256:\r
 -              YYDEBUG(256, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy261;\r
 -              if (yych == 's') goto yy261;\r
 -              goto yy194;\r
 -yy257:\r
 -              YYDEBUG(257, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(258, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1366 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_IS_SMALLER_OR_EQUAL;\r
 -}\r
 -#line 3700 "Zend/zend_language_scanner.c"\r
 -yy259:\r
 -              YYDEBUG(259, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -yy260:\r
 -              YYDEBUG(260, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1362 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_IS_NOT_EQUAL;\r
 -}\r
 -#line 3711 "Zend/zend_language_scanner.c"\r
 -yy261:\r
 -              YYDEBUG(261, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy262;\r
 -              if (yych != 'c') goto yy194;\r
 -yy262:\r
 -              YYDEBUG(262, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy263;\r
 -              if (yych != 'r') goto yy194;\r
 -yy263:\r
 -              YYDEBUG(263, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy264;\r
 -              if (yych != 'i') goto yy194;\r
 -yy264:\r
 -              YYDEBUG(264, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy265;\r
 -              if (yych != 'p') goto yy194;\r
 -yy265:\r
 -              YYDEBUG(265, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy266;\r
 -              if (yych != 't') goto yy194;\r
 -yy266:\r
 -              YYDEBUG(266, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(267, *YYCURSOR);\r
 -              if (yych <= '\r') {\r
 -                      if (yych <= 0x08) goto yy194;\r
 -                      if (yych <= '\n') goto yy266;\r
 -                      if (yych <= '\f') goto yy194;\r
 -                      goto yy266;\r
 -              } else {\r
 -                      if (yych <= ' ') {\r
 -                              if (yych <= 0x1F) goto yy194;\r
 -                              goto yy266;\r
 -                      } else {\r
 -                              if (yych == '>') goto yy206;\r
 -                              goto yy194;\r
 -                      }\r
 -              }\r
 -yy268:\r
 -              YYDEBUG(268, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(269, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1406 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_SL_EQUAL;\r
 -}\r
 -#line 3766 "Zend/zend_language_scanner.c"\r
 -yy270:\r
 -              YYDEBUG(270, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(2);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(271, *YYCURSOR);\r
 -              if (yybm[0+yych] & 128) {\r
 -                      goto yy270;\r
 -              }\r
 -              if (yych <= 'Z') {\r
 -                      if (yych <= '&') {\r
 -                              if (yych == '"') goto yy275;\r
 -                              goto yy194;\r
 -                      } else {\r
 -                              if (yych <= '\'') goto yy274;\r
 -                              if (yych <= '@') goto yy194;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '`') {\r
 -                              if (yych != '_') goto yy194;\r
 -                      } else {\r
 -                              if (yych <= 'z') goto yy272;\r
 -                              if (yych <= '~') goto yy194;\r
 -                      }\r
 -              }\r
 -yy272:\r
 -              YYDEBUG(272, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(2);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(273, *YYCURSOR);\r
 -              if (yych <= '@') {\r
 -                      if (yych <= '\f') {\r
 -                              if (yych == '\n') goto yy279;\r
 -                              goto yy194;\r
 -                      } else {\r
 -                              if (yych <= '\r') goto yy281;\r
 -                              if (yych <= '/') goto yy194;\r
 -                              if (yych <= '9') goto yy272;\r
 -                              goto yy194;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '_') {\r
 -                              if (yych <= 'Z') goto yy272;\r
 -                              if (yych <= '^') goto yy194;\r
 -                              goto yy272;\r
 -                      } else {\r
 -                              if (yych <= '`') goto yy194;\r
 -                              if (yych <= 'z') goto yy272;\r
 -                              if (yych <= '~') goto yy194;\r
 -                              goto yy272;\r
 -                      }\r
 -              }\r
 -yy274:\r
 -              YYDEBUG(274, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '\'') goto yy194;\r
 -              if (yych <= '/') goto yy283;\r
 -              if (yych <= '9') goto yy194;\r
 -              goto yy283;\r
 -yy275:\r
 -              YYDEBUG(275, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '"') goto yy194;\r
 -              if (yych <= '/') goto yy277;\r
 -              if (yych <= '9') goto yy194;\r
 -              goto yy277;\r
 -yy276:\r
 -              YYDEBUG(276, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -yy277:\r
 -              YYDEBUG(277, *YYCURSOR);\r
 -              if (yych <= 'Z') {\r
 -                      if (yych <= '/') {\r
 -                              if (yych != '"') goto yy194;\r
 -                      } else {\r
 -                              if (yych <= '9') goto yy276;\r
 -                              if (yych <= '@') goto yy194;\r
 -                              goto yy276;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '`') {\r
 -                              if (yych == '_') goto yy276;\r
 -                              goto yy194;\r
 -                      } else {\r
 -                              if (yych <= 'z') goto yy276;\r
 -                              if (yych <= '~') goto yy194;\r
 -                              goto yy276;\r
 -                      }\r
 -              }\r
 -yy278:\r
 -              YYDEBUG(278, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '\n') goto yy279;\r
 -              if (yych == '\r') goto yy281;\r
 -              goto yy194;\r
 -yy279:\r
 -              YYDEBUG(279, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -yy280:\r
 -              YYDEBUG(280, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2057 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      char *s;\r
 -      int bprefix = (yytext[0] != '<') ? 1 : 0;\r
 -      zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label));\r
 -\r
 -      CG(zend_lineno)++;\r
 -      heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0);\r
 -      s = yytext+bprefix+3;\r
 -      while ((*s == ' ') || (*s == '\t')) {\r
 -              s++;\r
 -              heredoc_label->length--;\r
 -      }\r
 -\r
 -      if (*s == '\'') {\r
 -              s++;\r
 -              heredoc_label->length -= 2;\r
 -\r
 -              BEGIN(ST_NOWDOC);\r
 -      } else {\r
 -              if (*s == '"') {\r
 -                      s++;\r
 -                      heredoc_label->length -= 2;\r
 -              }\r
 -\r
 -              BEGIN(ST_HEREDOC);\r
 -      }\r
 -\r
 -      heredoc_label->label = estrndup(s, heredoc_label->length);\r
 -\r
 -      /* Check for ending label on the next line */\r
 -      if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) {\r
 -              YYCTYPE *end = YYCURSOR + heredoc_label->length;\r
 -\r
 -              if (*end == ';') {\r
 -                      end++;\r
 -              }\r
 -\r
 -              if (*end == '\n' || *end == '\r') {\r
 -                      BEGIN(ST_END_HEREDOC);\r
 -              }\r
 -      }\r
 -\r
 -      zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label);\r
 -\r
 -      return T_START_HEREDOC;\r
 -}\r
 -#line 3918 "Zend/zend_language_scanner.c"\r
 -yy281:\r
 -              YYDEBUG(281, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '\n') goto yy279;\r
 -              goto yy280;\r
 -yy282:\r
 -              YYDEBUG(282, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -yy283:\r
 -              YYDEBUG(283, *YYCURSOR);\r
 -              if (yych <= 'Z') {\r
 -                      if (yych <= '/') {\r
 -                              if (yych == '\'') goto yy278;\r
 -                              goto yy194;\r
 -                      } else {\r
 -                              if (yych <= '9') goto yy282;\r
 -                              if (yych <= '@') goto yy194;\r
 -                              goto yy282;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '`') {\r
 -                              if (yych == '_') goto yy282;\r
 -                              goto yy194;\r
 -                      } else {\r
 -                              if (yych <= 'z') goto yy282;\r
 -                              if (yych <= '~') goto yy194;\r
 -                              goto yy282;\r
 -                      }\r
 -              }\r
 -yy284:\r
 -              YYDEBUG(284, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '=') goto yy260;\r
 -              YYDEBUG(285, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(286, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1354 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_IS_NOT_IDENTICAL;\r
 -}\r
 -#line 3962 "Zend/zend_language_scanner.c"\r
 -yy287:\r
 -              YYDEBUG(287, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(288, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1374 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_PLUS_EQUAL;\r
 -}\r
 -#line 3972 "Zend/zend_language_scanner.c"\r
 -yy289:\r
 -              YYDEBUG(289, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(290, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1342 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_INC;\r
 -}\r
 -#line 3982 "Zend/zend_language_scanner.c"\r
 -yy291:\r
 -              YYDEBUG(291, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy292;\r
 -              if (yych != 's') goto yy187;\r
 -yy292:\r
 -              YYDEBUG(292, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy293;\r
 -              if (yych != 't') goto yy187;\r
 -yy293:\r
 -              YYDEBUG(293, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(294, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1330 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_LIST;\r
 -}\r
 -#line 4005 "Zend/zend_language_scanner.c"\r
 -yy295:\r
 -              YYDEBUG(295, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) == '=') goto yy299;\r
 -              YYDEBUG(296, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1358 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_IS_EQUAL;\r
 -}\r
 -#line 4016 "Zend/zend_language_scanner.c"\r
 -yy297:\r
 -              YYDEBUG(297, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(298, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1326 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_DOUBLE_ARROW;\r
 -}\r
 -#line 4026 "Zend/zend_language_scanner.c"\r
 -yy299:\r
 -              YYDEBUG(299, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(300, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1350 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_IS_IDENTICAL;\r
 -}\r
 -#line 4036 "Zend/zend_language_scanner.c"\r
 -yy301:\r
 -              YYDEBUG(301, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              YYDEBUG(-1, yych);\r
 -              switch (yych) {\r
 -              case 'C':\r
 -              case 'c':       goto yy303;\r
 -              case 'D':\r
 -              case 'd':       goto yy308;\r
 -              case 'F':\r
 -              case 'f':       goto yy305;\r
 -              case 'H':\r
 -              case 'h':       goto yy302;\r
 -              case 'L':\r
 -              case 'l':       goto yy307;\r
 -              case 'M':\r
 -              case 'm':       goto yy306;\r
 -              case 'N':\r
 -              case 'n':       goto yy309;\r
 -              case 'T':\r
 -              case 't':       goto yy304;\r
 -              default:        goto yy187;\r
 -              }\r
 -yy302:\r
 -              YYDEBUG(302, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy370;\r
 -              if (yych == 'a') goto yy370;\r
 -              goto yy187;\r
 -yy303:\r
 -              YYDEBUG(303, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy363;\r
 -              if (yych == 'l') goto yy363;\r
 -              goto yy187;\r
 -yy304:\r
 -              YYDEBUG(304, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy356;\r
 -              if (yych == 'r') goto yy356;\r
 -              goto yy187;\r
 -yy305:\r
 -              YYDEBUG(305, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'U') {\r
 -                      if (yych == 'I') goto yy340;\r
 -                      if (yych <= 'T') goto yy187;\r
 -                      goto yy341;\r
 -              } else {\r
 -                      if (yych <= 'i') {\r
 -                              if (yych <= 'h') goto yy187;\r
 -                              goto yy340;\r
 -                      } else {\r
 -                              if (yych == 'u') goto yy341;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy306:\r
 -              YYDEBUG(306, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy332;\r
 -              if (yych == 'e') goto yy332;\r
 -              goto yy187;\r
 -yy307:\r
 -              YYDEBUG(307, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy326;\r
 -              if (yych == 'i') goto yy326;\r
 -              goto yy187;\r
 -yy308:\r
 -              YYDEBUG(308, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy321;\r
 -              if (yych == 'i') goto yy321;\r
 -              goto yy187;\r
 -yy309:\r
 -              YYDEBUG(309, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy310;\r
 -              if (yych != 'a') goto yy187;\r
 -yy310:\r
 -              YYDEBUG(310, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'M') goto yy311;\r
 -              if (yych != 'm') goto yy187;\r
 -yy311:\r
 -              YYDEBUG(311, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy312;\r
 -              if (yych != 'e') goto yy187;\r
 -yy312:\r
 -              YYDEBUG(312, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy313;\r
 -              if (yych != 's') goto yy187;\r
 -yy313:\r
 -              YYDEBUG(313, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy314;\r
 -              if (yych != 'p') goto yy187;\r
 -yy314:\r
 -              YYDEBUG(314, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy315;\r
 -              if (yych != 'a') goto yy187;\r
 -yy315:\r
 -              YYDEBUG(315, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy316;\r
 -              if (yych != 'c') goto yy187;\r
 -yy316:\r
 -              YYDEBUG(316, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy317;\r
 -              if (yych != 'e') goto yy187;\r
 -yy317:\r
 -              YYDEBUG(317, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(318, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(319, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(320, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1676 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (CG(current_namespace)) {\r
 -              *zendlval = *CG(current_namespace);\r
 -              zval_copy_ctor(zendlval);\r
 -      } else {\r
 -              ZVAL_EMPTY_STRING(zendlval);\r
 -      }\r
 -      return T_NS_C;\r
 -}\r
 -#line 4176 "Zend/zend_language_scanner.c"\r
 -yy321:\r
 -              YYDEBUG(321, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy322;\r
 -              if (yych != 'r') goto yy187;\r
 -yy322:\r
 -              YYDEBUG(322, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(323, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(324, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(325, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1651 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      char *filename = zend_get_compiled_filename(TSRMLS_C);\r
 -      const size_t filename_len = strlen(filename);\r
 -      char *dirname;\r
 -\r
 -      if (!filename) {\r
 -              filename = "";\r
 -      }\r
 -\r
 -      dirname = estrndup(filename, filename_len);\r
 -      zend_dirname(dirname, filename_len);\r
 -\r
 -      if (strcmp(dirname, ".") == 0) {\r
 -              dirname = erealloc(dirname, MAXPATHLEN);\r
 -#if HAVE_GETCWD\r
 -              VCWD_GETCWD(dirname, MAXPATHLEN);\r
 -#elif HAVE_GETWD\r
 -              VCWD_GETWD(dirname);\r
 -#endif\r
 -      }\r
 -\r
 -      ZVAL_STRING(zendlval, dirname, 0);\r
 -      return T_DIR;\r
 -}\r
 -#line 4221 "Zend/zend_language_scanner.c"\r
 -yy326:\r
 -              YYDEBUG(326, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy327;\r
 -              if (yych != 'n') goto yy187;\r
 -yy327:\r
 -              YYDEBUG(327, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy328;\r
 -              if (yych != 'e') goto yy187;\r
 -yy328:\r
 -              YYDEBUG(328, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(329, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(330, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(331, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1636 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      ZVAL_LONG(zendlval, CG(zend_lineno));\r
 -      return T_LINE;\r
 -}\r
 -#line 4251 "Zend/zend_language_scanner.c"\r
 -yy332:\r
 -              YYDEBUG(332, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy333;\r
 -              if (yych != 't') goto yy187;\r
 -yy333:\r
 -              YYDEBUG(333, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy334;\r
 -              if (yych != 'h') goto yy187;\r
 -yy334:\r
 -              YYDEBUG(334, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy335;\r
 -              if (yych != 'o') goto yy187;\r
 -yy335:\r
 -              YYDEBUG(335, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'D') goto yy336;\r
 -              if (yych != 'd') goto yy187;\r
 -yy336:\r
 -              YYDEBUG(336, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(337, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(338, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(339, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1623 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL;\r
 -      const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL;\r
 -\r
 -      Z_STRLEN_P(zendlval) = zend_spprintf(&Z_STRVAL_P(zendlval), 0, "%s%s%s",\r
 -              class_name ? class_name : "",\r
 -              class_name && func_name ? "::" : "",\r
 -              func_name ? func_name : ""\r
 -              );\r
 -      zendlval->type = IS_STRING;\r
 -      return T_METHOD_C;\r
 -}\r
 -#line 4299 "Zend/zend_language_scanner.c"\r
 -yy340:\r
 -              YYDEBUG(340, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy351;\r
 -              if (yych == 'l') goto yy351;\r
 -              goto yy187;\r
 -yy341:\r
 -              YYDEBUG(341, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy342;\r
 -              if (yych != 'n') goto yy187;\r
 -yy342:\r
 -              YYDEBUG(342, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy343;\r
 -              if (yych != 'c') goto yy187;\r
 -yy343:\r
 -              YYDEBUG(343, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy344;\r
 -              if (yych != 't') goto yy187;\r
 -yy344:\r
 -              YYDEBUG(344, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy345;\r
 -              if (yych != 'i') goto yy187;\r
 -yy345:\r
 -              YYDEBUG(345, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy346;\r
 -              if (yych != 'o') goto yy187;\r
 -yy346:\r
 -              YYDEBUG(346, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy347;\r
 -              if (yych != 'n') goto yy187;\r
 -yy347:\r
 -              YYDEBUG(347, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(348, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(349, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(350, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1613 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_op_array *op_array = CG(active_op_array);\r
 -      if (op_array && op_array->function_name) {\r
 -              ZVAL_STRING(zendlval, op_array->function_name, 1);\r
 -      } else {\r
 -              ZVAL_EMPTY_STRING(zendlval);\r
 -      }\r
 -      return T_FUNC_C;\r
 -}\r
 -#line 4360 "Zend/zend_language_scanner.c"\r
 -yy351:\r
 -              YYDEBUG(351, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy352;\r
 -              if (yych != 'e') goto yy187;\r
 -yy352:\r
 -              YYDEBUG(352, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(353, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(354, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(355, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1641 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      char *filename = zend_get_compiled_filename(TSRMLS_C);\r
 -\r
 -      if (!filename) {\r
 -              filename = "";\r
 -      }\r
 -      ZVAL_STRING(zendlval, filename, 1);\r
 -      return T_FILE;\r
 -}\r
 -#line 4390 "Zend/zend_language_scanner.c"\r
 -yy356:\r
 -              YYDEBUG(356, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy357;\r
 -              if (yych != 'a') goto yy187;\r
 -yy357:\r
 -              YYDEBUG(357, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy358;\r
 -              if (yych != 'i') goto yy187;\r
 -yy358:\r
 -              YYDEBUG(358, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy359;\r
 -              if (yych != 't') goto yy187;\r
 -yy359:\r
 -              YYDEBUG(359, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(360, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(361, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(362, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1603 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_class_entry *ce = CG(active_class_entry);\r
 -      if (ce && ce->name && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {\r
 -              ZVAL_STRINGL(zendlval, ce->name, ce->name_length, 1);\r
 -      } else {\r
 -              ZVAL_EMPTY_STRING(zendlval);\r
 -      }\r
 -      return T_TRAIT_C;\r
 -}\r
 -#line 4430 "Zend/zend_language_scanner.c"\r
 -yy363:\r
 -              YYDEBUG(363, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy364;\r
 -              if (yych != 'a') goto yy187;\r
 -yy364:\r
 -              YYDEBUG(364, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy365;\r
 -              if (yych != 's') goto yy187;\r
 -yy365:\r
 -              YYDEBUG(365, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy366;\r
 -              if (yych != 's') goto yy187;\r
 -yy366:\r
 -              YYDEBUG(366, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(367, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(368, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(369, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1585 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_class_entry *ce = CG(active_class_entry);\r
 -      if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {\r
 -              /* We create a special __CLASS__ constant that is going to be resolved\r
 -                 at run-time */\r
 -              Z_STRLEN_P(zendlval) = sizeof("__CLASS__")-1;\r
 -              Z_STRVAL_P(zendlval) = estrndup("__CLASS__", Z_STRLEN_P(zendlval));\r
 -              zendlval->type = IS_CONSTANT;\r
 -      } else {\r
 -              if (ce && ce->name) {\r
 -                      ZVAL_STRINGL(zendlval, ce->name, ce->name_length, 1);\r
 -              } else {\r
 -                      ZVAL_EMPTY_STRING(zendlval);\r
 -              }\r
 -      }\r
 -      return T_CLASS_C;\r
 -}\r
 -#line 4478 "Zend/zend_language_scanner.c"\r
 -yy370:\r
 -              YYDEBUG(370, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy371;\r
 -              if (yych != 'l') goto yy187;\r
 -yy371:\r
 -              YYDEBUG(371, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy372;\r
 -              if (yych != 't') goto yy187;\r
 -yy372:\r
 -              YYDEBUG(372, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '_') goto yy187;\r
 -              YYDEBUG(373, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy374;\r
 -              if (yych != 'c') goto yy187;\r
 -yy374:\r
 -              YYDEBUG(374, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy375;\r
 -              if (yych != 'o') goto yy187;\r
 -yy375:\r
 -              YYDEBUG(375, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'M') goto yy376;\r
 -              if (yych != 'm') goto yy187;\r
 -yy376:\r
 -              YYDEBUG(376, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy377;\r
 -              if (yych != 'p') goto yy187;\r
 -yy377:\r
 -              YYDEBUG(377, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy378;\r
 -              if (yych != 'i') goto yy187;\r
 -yy378:\r
 -              YYDEBUG(378, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy379;\r
 -              if (yych != 'l') goto yy187;\r
 -yy379:\r
 -              YYDEBUG(379, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy380;\r
 -              if (yych != 'e') goto yy187;\r
 -yy380:\r
 -              YYDEBUG(380, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy381;\r
 -              if (yych != 'r') goto yy187;\r
 -yy381:\r
 -              YYDEBUG(381, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(382, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1294 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_HALT_COMPILER;\r
 -}\r
 -#line 4544 "Zend/zend_language_scanner.c"\r
 -yy383:\r
 -              YYDEBUG(383, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy387;\r
 -              if (yych == 's') goto yy387;\r
 -              goto yy187;\r
 -yy384:\r
 -              YYDEBUG(384, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy385;\r
 -              if (yych != 'e') goto yy187;\r
 -yy385:\r
 -              YYDEBUG(385, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(386, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1274 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_USE;\r
 -}\r
 -#line 4568 "Zend/zend_language_scanner.c"\r
 -yy387:\r
 -              YYDEBUG(387, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy388;\r
 -              if (yych != 'e') goto yy187;\r
 -yy388:\r
 -              YYDEBUG(388, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy389;\r
 -              if (yych != 't') goto yy187;\r
 -yy389:\r
 -              YYDEBUG(389, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(390, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1322 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_UNSET;\r
 -}\r
 -#line 4591 "Zend/zend_language_scanner.c"\r
 -yy391:\r
 -              YYDEBUG(391, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(7);\r
 -              yych = *YYCURSOR;\r
 -yy392:\r
 -              YYDEBUG(392, *YYCURSOR);\r
 -              if (yych <= 'S') {\r
 -                      if (yych <= 'D') {\r
 -                              if (yych <= ' ') {\r
 -                                      if (yych == '\t') goto yy391;\r
 -                                      if (yych <= 0x1F) goto yy194;\r
 -                                      goto yy391;\r
 -                              } else {\r
 -                                      if (yych <= 'A') {\r
 -                                              if (yych <= '@') goto yy194;\r
 -                                              goto yy396;\r
 -                                      } else {\r
 -                                              if (yych <= 'B') goto yy394;\r
 -                                              if (yych <= 'C') goto yy194;\r
 -                                              goto yy399;\r
 -                                      }\r
 -                              }\r
 -                      } else {\r
 -                              if (yych <= 'I') {\r
 -                                      if (yych == 'F') goto yy400;\r
 -                                      if (yych <= 'H') goto yy194;\r
 -                                      goto yy401;\r
 -                              } else {\r
 -                                      if (yych <= 'O') {\r
 -                                              if (yych <= 'N') goto yy194;\r
 -                                              goto yy395;\r
 -                                      } else {\r
 -                                              if (yych <= 'Q') goto yy194;\r
 -                                              if (yych <= 'R') goto yy398;\r
 -                                              goto yy397;\r
 -                                      }\r
 -                              }\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'f') {\r
 -                              if (yych <= 'a') {\r
 -                                      if (yych == 'U') goto yy393;\r
 -                                      if (yych <= '`') goto yy194;\r
 -                                      goto yy396;\r
 -                              } else {\r
 -                                      if (yych <= 'c') {\r
 -                                              if (yych <= 'b') goto yy394;\r
 -                                              goto yy194;\r
 -                                      } else {\r
 -                                              if (yych <= 'd') goto yy399;\r
 -                                              if (yych <= 'e') goto yy194;\r
 -                                              goto yy400;\r
 -                                      }\r
 -                              }\r
 -                      } else {\r
 -                              if (yych <= 'q') {\r
 -                                      if (yych <= 'i') {\r
 -                                              if (yych <= 'h') goto yy194;\r
 -                                              goto yy401;\r
 -                                      } else {\r
 -                                              if (yych == 'o') goto yy395;\r
 -                                              goto yy194;\r
 -                                      }\r
 -                              } else {\r
 -                                      if (yych <= 's') {\r
 -                                              if (yych <= 'r') goto yy398;\r
 -                                              goto yy397;\r
 -                                      } else {\r
 -                                              if (yych != 'u') goto yy194;\r
 -                                      }\r
 -                              }\r
 -                      }\r
 -              }\r
 -yy393:\r
 -              YYDEBUG(393, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy460;\r
 -              if (yych == 'n') goto yy460;\r
 -              goto yy194;\r
 -yy394:\r
 -              YYDEBUG(394, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'O') {\r
 -                      if (yych == 'I') goto yy447;\r
 -                      if (yych <= 'N') goto yy194;\r
 -                      goto yy448;\r
 -              } else {\r
 -                      if (yych <= 'i') {\r
 -                              if (yych <= 'h') goto yy194;\r
 -                              goto yy447;\r
 -                      } else {\r
 -                              if (yych == 'o') goto yy448;\r
 -                              goto yy194;\r
 -                      }\r
 -              }\r
 -yy395:\r
 -              YYDEBUG(395, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'B') goto yy439;\r
 -              if (yych == 'b') goto yy439;\r
 -              goto yy194;\r
 -yy396:\r
 -              YYDEBUG(396, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy432;\r
 -              if (yych == 'r') goto yy432;\r
 -              goto yy194;\r
 -yy397:\r
 -              YYDEBUG(397, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy424;\r
 -              if (yych == 't') goto yy424;\r
 -              goto yy194;\r
 -yy398:\r
 -              YYDEBUG(398, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy422;\r
 -              if (yych == 'e') goto yy422;\r
 -              goto yy194;\r
 -yy399:\r
 -              YYDEBUG(399, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy418;\r
 -              if (yych == 'o') goto yy418;\r
 -              goto yy194;\r
 -yy400:\r
 -              YYDEBUG(400, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy411;\r
 -              if (yych == 'l') goto yy411;\r
 -              goto yy194;\r
 -yy401:\r
 -              YYDEBUG(401, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy402;\r
 -              if (yych != 'n') goto yy194;\r
 -yy402:\r
 -              YYDEBUG(402, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy403;\r
 -              if (yych != 't') goto yy194;\r
 -yy403:\r
 -              YYDEBUG(403, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy404;\r
 -              if (yych != 'e') goto yy406;\r
 -yy404:\r
 -              YYDEBUG(404, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'G') goto yy409;\r
 -              if (yych == 'g') goto yy409;\r
 -              goto yy194;\r
 -yy405:\r
 -              YYDEBUG(405, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -yy406:\r
 -              YYDEBUG(406, *YYCURSOR);\r
 -              if (yych <= 0x1F) {\r
 -                      if (yych == '\t') goto yy405;\r
 -                      goto yy194;\r
 -              } else {\r
 -                      if (yych <= ' ') goto yy405;\r
 -                      if (yych != ')') goto yy194;\r
 -              }\r
 -              YYDEBUG(407, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(408, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1222 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_INT_CAST;\r
 -}\r
 -#line 4767 "Zend/zend_language_scanner.c"\r
 -yy409:\r
 -              YYDEBUG(409, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy410;\r
 -              if (yych != 'e') goto yy194;\r
 -yy410:\r
 -              YYDEBUG(410, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy405;\r
 -              if (yych == 'r') goto yy405;\r
 -              goto yy194;\r
 -yy411:\r
 -              YYDEBUG(411, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy412;\r
 -              if (yych != 'o') goto yy194;\r
 -yy412:\r
 -              YYDEBUG(412, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy413;\r
 -              if (yych != 'a') goto yy194;\r
 -yy413:\r
 -              YYDEBUG(413, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy414;\r
 -              if (yych != 't') goto yy194;\r
 -yy414:\r
 -              YYDEBUG(414, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(415, *YYCURSOR);\r
 -              if (yych <= 0x1F) {\r
 -                      if (yych == '\t') goto yy414;\r
 -                      goto yy194;\r
 -              } else {\r
 -                      if (yych <= ' ') goto yy414;\r
 -                      if (yych != ')') goto yy194;\r
 -              }\r
 -              YYDEBUG(416, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(417, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1226 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_DOUBLE_CAST;\r
 -}\r
 -#line 4815 "Zend/zend_language_scanner.c"\r
 -yy418:\r
 -              YYDEBUG(418, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'U') goto yy419;\r
 -              if (yych != 'u') goto yy194;\r
 -yy419:\r
 -              YYDEBUG(419, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'B') goto yy420;\r
 -              if (yych != 'b') goto yy194;\r
 -yy420:\r
 -              YYDEBUG(420, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy421;\r
 -              if (yych != 'l') goto yy194;\r
 -yy421:\r
 -              YYDEBUG(421, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy414;\r
 -              if (yych == 'e') goto yy414;\r
 -              goto yy194;\r
 -yy422:\r
 -              YYDEBUG(422, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy423;\r
 -              if (yych != 'a') goto yy194;\r
 -yy423:\r
 -              YYDEBUG(423, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy414;\r
 -              if (yych == 'l') goto yy414;\r
 -              goto yy194;\r
 -yy424:\r
 -              YYDEBUG(424, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy425;\r
 -              if (yych != 'r') goto yy194;\r
 -yy425:\r
 -              YYDEBUG(425, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy426;\r
 -              if (yych != 'i') goto yy194;\r
 -yy426:\r
 -              YYDEBUG(426, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy427;\r
 -              if (yych != 'n') goto yy194;\r
 -yy427:\r
 -              YYDEBUG(427, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'G') goto yy428;\r
 -              if (yych != 'g') goto yy194;\r
 -yy428:\r
 -              YYDEBUG(428, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(429, *YYCURSOR);\r
 -              if (yych <= 0x1F) {\r
 -                      if (yych == '\t') goto yy428;\r
 -                      goto yy194;\r
 -              } else {\r
 -                      if (yych <= ' ') goto yy428;\r
 -                      if (yych != ')') goto yy194;\r
 -              }\r
 -              YYDEBUG(430, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(431, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1230 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_STRING_CAST;\r
 -}\r
 -#line 4889 "Zend/zend_language_scanner.c"\r
 -yy432:\r
 -              YYDEBUG(432, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy433;\r
 -              if (yych != 'r') goto yy194;\r
 -yy433:\r
 -              YYDEBUG(433, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy434;\r
 -              if (yych != 'a') goto yy194;\r
 -yy434:\r
 -              YYDEBUG(434, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'Y') goto yy435;\r
 -              if (yych != 'y') goto yy194;\r
 -yy435:\r
 -              YYDEBUG(435, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(436, *YYCURSOR);\r
 -              if (yych <= 0x1F) {\r
 -                      if (yych == '\t') goto yy435;\r
 -                      goto yy194;\r
 -              } else {\r
 -                      if (yych <= ' ') goto yy435;\r
 -                      if (yych != ')') goto yy194;\r
 -              }\r
 -              YYDEBUG(437, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(438, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1234 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ARRAY_CAST;\r
 -}\r
 -#line 4926 "Zend/zend_language_scanner.c"\r
 -yy439:\r
 -              YYDEBUG(439, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'J') goto yy440;\r
 -              if (yych != 'j') goto yy194;\r
 -yy440:\r
 -              YYDEBUG(440, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy441;\r
 -              if (yych != 'e') goto yy194;\r
 -yy441:\r
 -              YYDEBUG(441, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy442;\r
 -              if (yych != 'c') goto yy194;\r
 -yy442:\r
 -              YYDEBUG(442, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy443;\r
 -              if (yych != 't') goto yy194;\r
 -yy443:\r
 -              YYDEBUG(443, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(444, *YYCURSOR);\r
 -              if (yych <= 0x1F) {\r
 -                      if (yych == '\t') goto yy443;\r
 -                      goto yy194;\r
 -              } else {\r
 -                      if (yych <= ' ') goto yy443;\r
 -                      if (yych != ')') goto yy194;\r
 -              }\r
 -              YYDEBUG(445, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(446, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1238 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_OBJECT_CAST;\r
 -}\r
 -#line 4968 "Zend/zend_language_scanner.c"\r
 -yy447:\r
 -              YYDEBUG(447, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy457;\r
 -              if (yych == 'n') goto yy457;\r
 -              goto yy194;\r
 -yy448:\r
 -              YYDEBUG(448, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy449;\r
 -              if (yych != 'o') goto yy194;\r
 -yy449:\r
 -              YYDEBUG(449, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy450;\r
 -              if (yych != 'l') goto yy194;\r
 -yy450:\r
 -              YYDEBUG(450, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy455;\r
 -              if (yych == 'e') goto yy455;\r
 -              goto yy452;\r
 -yy451:\r
 -              YYDEBUG(451, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -yy452:\r
 -              YYDEBUG(452, *YYCURSOR);\r
 -              if (yych <= 0x1F) {\r
 -                      if (yych == '\t') goto yy451;\r
 -                      goto yy194;\r
 -              } else {\r
 -                      if (yych <= ' ') goto yy451;\r
 -                      if (yych != ')') goto yy194;\r
 -              }\r
 -              YYDEBUG(453, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(454, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1242 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_BOOL_CAST;\r
 -}\r
 -#line 5013 "Zend/zend_language_scanner.c"\r
 -yy455:\r
 -              YYDEBUG(455, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy456;\r
 -              if (yych != 'a') goto yy194;\r
 -yy456:\r
 -              YYDEBUG(456, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy451;\r
 -              if (yych == 'n') goto yy451;\r
 -              goto yy194;\r
 -yy457:\r
 -              YYDEBUG(457, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy458;\r
 -              if (yych != 'a') goto yy194;\r
 -yy458:\r
 -              YYDEBUG(458, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy459;\r
 -              if (yych != 'r') goto yy194;\r
 -yy459:\r
 -              YYDEBUG(459, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'Y') goto yy428;\r
 -              if (yych == 'y') goto yy428;\r
 -              goto yy194;\r
 -yy460:\r
 -              YYDEBUG(460, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy461;\r
 -              if (yych != 's') goto yy194;\r
 -yy461:\r
 -              YYDEBUG(461, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy462;\r
 -              if (yych != 'e') goto yy194;\r
 -yy462:\r
 -              YYDEBUG(462, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy463;\r
 -              if (yych != 't') goto yy194;\r
 -yy463:\r
 -              YYDEBUG(463, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(464, *YYCURSOR);\r
 -              if (yych <= 0x1F) {\r
 -                      if (yych == '\t') goto yy463;\r
 -                      goto yy194;\r
 -              } else {\r
 -                      if (yych <= ' ') goto yy463;\r
 -                      if (yych != ')') goto yy194;\r
 -              }\r
 -              YYDEBUG(465, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(466, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1246 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_UNSET_CAST;\r
 -}\r
 -#line 5077 "Zend/zend_language_scanner.c"\r
 -yy467:\r
 -              YYDEBUG(467, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy468;\r
 -              if (yych != 'r') goto yy187;\r
 -yy468:\r
 -              YYDEBUG(468, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(469, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1218 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_VAR;\r
 -}\r
 -#line 5095 "Zend/zend_language_scanner.c"\r
 -yy470:\r
 -              YYDEBUG(470, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'M') goto yy474;\r
 -              if (yych == 'm') goto yy474;\r
 -              goto yy187;\r
 -yy471:\r
 -              YYDEBUG(471, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'W') goto yy472;\r
 -              if (yych != 'w') goto yy187;\r
 -yy472:\r
 -              YYDEBUG(472, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(473, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1210 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_NEW;\r
 -}\r
 -#line 5119 "Zend/zend_language_scanner.c"\r
 -yy474:\r
 -              YYDEBUG(474, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy475;\r
 -              if (yych != 'e') goto yy187;\r
 -yy475:\r
 -              YYDEBUG(475, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy476;\r
 -              if (yych != 's') goto yy187;\r
 -yy476:\r
 -              YYDEBUG(476, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy477;\r
 -              if (yych != 'p') goto yy187;\r
 -yy477:\r
 -              YYDEBUG(477, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy478;\r
 -              if (yych != 'a') goto yy187;\r
 -yy478:\r
 -              YYDEBUG(478, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy479;\r
 -              if (yych != 'c') goto yy187;\r
 -yy479:\r
 -              YYDEBUG(479, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy480;\r
 -              if (yych != 'e') goto yy187;\r
 -yy480:\r
 -              YYDEBUG(480, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(481, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1270 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_NAMESPACE;\r
 -}\r
 -#line 5162 "Zend/zend_language_scanner.c"\r
 -yy482:\r
 -              YYDEBUG(482, *YYCURSOR);\r
 -              yyaccept = 3;\r
 -              YYMARKER = ++YYCURSOR;\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(483, *YYCURSOR);\r
 -              if (yych <= 'D') {\r
 -                      if (yych <= '/') goto yy190;\r
 -                      if (yych <= '9') goto yy482;\r
 -                      goto yy190;\r
 -              } else {\r
 -                      if (yych <= 'E') goto yy193;\r
 -                      if (yych == 'e') goto yy193;\r
 -                      goto yy190;\r
 -              }\r
 -yy484:\r
 -              YYDEBUG(484, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(485, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1398 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_CONCAT_EQUAL;\r
 -}\r
 -#line 5188 "Zend/zend_language_scanner.c"\r
 -yy486:\r
 -              YYDEBUG(486, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych != '.') goto yy194;\r
 -              YYDEBUG(487, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(488, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1206 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ELLIPSIS;\r
 -}\r
 -#line 5201 "Zend/zend_language_scanner.c"\r
 -yy489:\r
 -              YYDEBUG(489, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(490, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1198 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_PAAMAYIM_NEKUDOTAYIM;\r
 -}\r
 -#line 5211 "Zend/zend_language_scanner.c"\r
 -yy491:\r
 -              YYDEBUG(491, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -yy492:\r
 -              YYDEBUG(492, *YYCURSOR);\r
 -              if (yych <= '\f') {\r
 -                      if (yych <= 0x08) goto yy141;\r
 -                      if (yych <= '\n') goto yy491;\r
 -                      goto yy141;\r
 -              } else {\r
 -                      if (yych <= '\r') goto yy491;\r
 -                      if (yych == ' ') goto yy491;\r
 -                      goto yy141;\r
 -              }\r
 -yy493:\r
 -              YYDEBUG(493, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(494, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1378 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_MINUS_EQUAL;\r
 -}\r
 -#line 5237 "Zend/zend_language_scanner.c"\r
 -yy495:\r
 -              YYDEBUG(495, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(496, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1346 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_DEC;\r
 -}\r
 -#line 5247 "Zend/zend_language_scanner.c"\r
 -yy497:\r
 -              YYDEBUG(497, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(498, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1170 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);\r
 -      return T_OBJECT_OPERATOR;\r
 -}\r
 -#line 5258 "Zend/zend_language_scanner.c"\r
 -yy499:\r
 -              YYDEBUG(499, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'O') {\r
 -                      if (yych == 'I') goto yy506;\r
 -                      if (yych <= 'N') goto yy187;\r
 -                      goto yy507;\r
 -              } else {\r
 -                      if (yych <= 'i') {\r
 -                              if (yych <= 'h') goto yy187;\r
 -                              goto yy506;\r
 -                      } else {\r
 -                              if (yych == 'o') goto yy507;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy500:\r
 -              YYDEBUG(500, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'B') goto yy501;\r
 -              if (yych != 'b') goto yy187;\r
 -yy501:\r
 -              YYDEBUG(501, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy502;\r
 -              if (yych != 'l') goto yy187;\r
 -yy502:\r
 -              YYDEBUG(502, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy503;\r
 -              if (yych != 'i') goto yy187;\r
 -yy503:\r
 -              YYDEBUG(503, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy504;\r
 -              if (yych != 'c') goto yy187;\r
 -yy504:\r
 -              YYDEBUG(504, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(505, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1318 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_PUBLIC;\r
 -}\r
 -#line 5307 "Zend/zend_language_scanner.c"\r
 -yy506:\r
 -              YYDEBUG(506, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'V') {\r
 -                      if (yych == 'N') goto yy515;\r
 -                      if (yych <= 'U') goto yy187;\r
 -                      goto yy516;\r
 -              } else {\r
 -                      if (yych <= 'n') {\r
 -                              if (yych <= 'm') goto yy187;\r
 -                              goto yy515;\r
 -                      } else {\r
 -                              if (yych == 'v') goto yy516;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy507:\r
 -              YYDEBUG(507, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy508;\r
 -              if (yych != 't') goto yy187;\r
 -yy508:\r
 -              YYDEBUG(508, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy509;\r
 -              if (yych != 'e') goto yy187;\r
 -yy509:\r
 -              YYDEBUG(509, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy510;\r
 -              if (yych != 'c') goto yy187;\r
 -yy510:\r
 -              YYDEBUG(510, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy511;\r
 -              if (yych != 't') goto yy187;\r
 -yy511:\r
 -              YYDEBUG(511, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy512;\r
 -              if (yych != 'e') goto yy187;\r
 -yy512:\r
 -              YYDEBUG(512, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'D') goto yy513;\r
 -              if (yych != 'd') goto yy187;\r
 -yy513:\r
 -              YYDEBUG(513, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(514, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1314 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_PROTECTED;\r
 -}\r
 -#line 5366 "Zend/zend_language_scanner.c"\r
 -yy515:\r
 -              YYDEBUG(515, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy521;\r
 -              if (yych == 't') goto yy521;\r
 -              goto yy187;\r
 -yy516:\r
 -              YYDEBUG(516, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy517;\r
 -              if (yych != 'a') goto yy187;\r
 -yy517:\r
 -              YYDEBUG(517, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy518;\r
 -              if (yych != 't') goto yy187;\r
 -yy518:\r
 -              YYDEBUG(518, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy519;\r
 -              if (yych != 'e') goto yy187;\r
 -yy519:\r
 -              YYDEBUG(519, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(520, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1310 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_PRIVATE;\r
 -}\r
 -#line 5400 "Zend/zend_language_scanner.c"\r
 -yy521:\r
 -              YYDEBUG(521, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(522, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1146 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_PRINT;\r
 -}\r
 -#line 5413 "Zend/zend_language_scanner.c"\r
 -yy523:\r
 -              YYDEBUG(523, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy528;\r
 -              if (yych == 'o') goto yy528;\r
 -              goto yy187;\r
 -yy524:\r
 -              YYDEBUG(524, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy525;\r
 -              if (yych != 't') goto yy187;\r
 -yy525:\r
 -              YYDEBUG(525, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy526;\r
 -              if (yych != 'o') goto yy187;\r
 -yy526:\r
 -              YYDEBUG(526, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(527, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1138 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_GOTO;\r
 -}\r
 -#line 5442 "Zend/zend_language_scanner.c"\r
 -yy528:\r
 -              YYDEBUG(528, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'B') goto yy529;\r
 -              if (yych != 'b') goto yy187;\r
 -yy529:\r
 -              YYDEBUG(529, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy530;\r
 -              if (yych != 'a') goto yy187;\r
 -yy530:\r
 -              YYDEBUG(530, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy531;\r
 -              if (yych != 'l') goto yy187;\r
 -yy531:\r
 -              YYDEBUG(531, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(532, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1282 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_GLOBAL;\r
 -}\r
 -#line 5470 "Zend/zend_language_scanner.c"\r
 -yy533:\r
 -              YYDEBUG(533, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '<') goto yy541;\r
 -              goto yy194;\r
 -yy534:\r
 -              YYDEBUG(534, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy181;\r
 -yy535:\r
 -              YYDEBUG(535, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy179;\r
 -yy536:\r
 -              YYDEBUG(536, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy537;\r
 -              if (yych != 'e') goto yy187;\r
 -yy537:\r
 -              YYDEBUG(537, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy538;\r
 -              if (yych != 'a') goto yy187;\r
 -yy538:\r
 -              YYDEBUG(538, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'K') goto yy539;\r
 -              if (yych != 'k') goto yy187;\r
 -yy539:\r
 -              YYDEBUG(539, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(540, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1130 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_BREAK;\r
 -}\r
 -#line 5511 "Zend/zend_language_scanner.c"\r
 -yy541:\r
 -              YYDEBUG(541, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == '<') goto yy270;\r
 -              goto yy194;\r
 -yy542:\r
 -              YYDEBUG(542, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy549;\r
 -              if (yych == 'a') goto yy549;\r
 -              goto yy187;\r
 -yy543:\r
 -              YYDEBUG(543, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy544;\r
 -              if (yych != 'i') goto yy187;\r
 -yy544:\r
 -              YYDEBUG(544, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy545;\r
 -              if (yych != 't') goto yy187;\r
 -yy545:\r
 -              YYDEBUG(545, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy546;\r
 -              if (yych != 'c') goto yy187;\r
 -yy546:\r
 -              YYDEBUG(546, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy547;\r
 -              if (yych != 'h') goto yy187;\r
 -yy547:\r
 -              YYDEBUG(547, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(548, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1114 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_SWITCH;\r
 -}\r
 -#line 5555 "Zend/zend_language_scanner.c"\r
 -yy549:\r
 -              YYDEBUG(549, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy550;\r
 -              if (yych != 't') goto yy187;\r
 -yy550:\r
 -              YYDEBUG(550, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy551;\r
 -              if (yych != 'i') goto yy187;\r
 -yy551:\r
 -              YYDEBUG(551, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy552;\r
 -              if (yych != 'c') goto yy187;\r
 -yy552:\r
 -              YYDEBUG(552, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(553, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1298 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_STATIC;\r
 -}\r
 -#line 5583 "Zend/zend_language_scanner.c"\r
 -yy554:\r
 -              YYDEBUG(554, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy565;\r
 -              if (yych == 's') goto yy565;\r
 -              goto yy187;\r
 -yy555:\r
 -              YYDEBUG(555, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'D') goto yy563;\r
 -              if (yych == 'd') goto yy563;\r
 -              goto yy187;\r
 -yy556:\r
 -              YYDEBUG(556, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy559;\r
 -              if (yych == 'r') goto yy559;\r
 -              goto yy187;\r
 -yy557:\r
 -              YYDEBUG(557, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(558, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1110 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_AS;\r
 -}\r
 -#line 5614 "Zend/zend_language_scanner.c"\r
 -yy559:\r
 -              YYDEBUG(559, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy560;\r
 -              if (yych != 'a') goto yy187;\r
 -yy560:\r
 -              YYDEBUG(560, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'Y') goto yy561;\r
 -              if (yych != 'y') goto yy187;\r
 -yy561:\r
 -              YYDEBUG(561, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(562, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1334 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ARRAY;\r
 -}\r
 -#line 5637 "Zend/zend_language_scanner.c"\r
 -yy563:\r
 -              YYDEBUG(563, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(564, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1438 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_LOGICAL_AND;\r
 -}\r
 -#line 5650 "Zend/zend_language_scanner.c"\r
 -yy565:\r
 -              YYDEBUG(565, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy566;\r
 -              if (yych != 't') goto yy187;\r
 -yy566:\r
 -              YYDEBUG(566, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy567;\r
 -              if (yych != 'r') goto yy187;\r
 -yy567:\r
 -              YYDEBUG(567, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy568;\r
 -              if (yych != 'a') goto yy187;\r
 -yy568:\r
 -              YYDEBUG(568, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy569;\r
 -              if (yych != 'c') goto yy187;\r
 -yy569:\r
 -              YYDEBUG(569, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy570;\r
 -              if (yych != 't') goto yy187;\r
 -yy570:\r
 -              YYDEBUG(570, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(571, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1302 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ABSTRACT;\r
 -}\r
 -#line 5688 "Zend/zend_language_scanner.c"\r
 -yy572:\r
 -              YYDEBUG(572, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy573;\r
 -              if (yych != 'i') goto yy187;\r
 -yy573:\r
 -              YYDEBUG(573, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy574;\r
 -              if (yych != 'l') goto yy187;\r
 -yy574:\r
 -              YYDEBUG(574, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy575;\r
 -              if (yych != 'e') goto yy187;\r
 -yy575:\r
 -              YYDEBUG(575, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(576, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1070 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_WHILE;\r
 -}\r
 -#line 5716 "Zend/zend_language_scanner.c"\r
 -yy577:\r
 -              YYDEBUG(577, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(578, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1054 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_IF;\r
 -}\r
 -#line 5729 "Zend/zend_language_scanner.c"\r
 -yy579:\r
 -              YYDEBUG(579, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy621;\r
 -              if (yych == 'p') goto yy621;\r
 -              goto yy187;\r
 -yy580:\r
 -              YYDEBUG(580, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'T') {\r
 -                      if (yych <= 'C') {\r
 -                              if (yych <= 'B') goto yy187;\r
 -                              goto yy588;\r
 -                      } else {\r
 -                              if (yych <= 'R') goto yy187;\r
 -                              if (yych <= 'S') goto yy586;\r
 -                              goto yy587;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'r') {\r
 -                              if (yych == 'c') goto yy588;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 's') goto yy586;\r
 -                              if (yych <= 't') goto yy587;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy581:\r
 -              YYDEBUG(581, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy582;\r
 -              if (yych != 's') goto yy187;\r
 -yy582:\r
 -              YYDEBUG(582, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy583;\r
 -              if (yych != 'e') goto yy187;\r
 -yy583:\r
 -              YYDEBUG(583, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy584;\r
 -              if (yych != 't') goto yy187;\r
 -yy584:\r
 -              YYDEBUG(584, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(585, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1286 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ISSET;\r
 -}\r
 -#line 5785 "Zend/zend_language_scanner.c"\r
 -yy586:\r
 -              YYDEBUG(586, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy607;\r
 -              if (yych == 't') goto yy607;\r
 -              goto yy187;\r
 -yy587:\r
 -              YYDEBUG(587, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy600;\r
 -              if (yych == 'e') goto yy600;\r
 -              goto yy187;\r
 -yy588:\r
 -              YYDEBUG(588, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy589;\r
 -              if (yych != 'l') goto yy187;\r
 -yy589:\r
 -              YYDEBUG(589, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'U') goto yy590;\r
 -              if (yych != 'u') goto yy187;\r
 -yy590:\r
 -              YYDEBUG(590, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'D') goto yy591;\r
 -              if (yych != 'd') goto yy187;\r
 -yy591:\r
 -              YYDEBUG(591, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy592;\r
 -              if (yych != 'e') goto yy187;\r
 -yy592:\r
 -              YYDEBUG(592, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '^') {\r
 -                      if (yych <= '9') {\r
 -                              if (yych >= '0') goto yy186;\r
 -                      } else {\r
 -                              if (yych <= '@') goto yy593;\r
 -                              if (yych <= 'Z') goto yy186;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '`') {\r
 -                              if (yych <= '_') goto yy594;\r
 -                      } else {\r
 -                              if (yych <= 'z') goto yy186;\r
 -                              if (yych >= 0x7F) goto yy186;\r
 -                      }\r
 -              }\r
 -yy593:\r
 -              YYDEBUG(593, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1254 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_INCLUDE;\r
 -}\r
 -#line 5843 "Zend/zend_language_scanner.c"\r
 -yy594:\r
 -              YYDEBUG(594, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy595;\r
 -              if (yych != 'o') goto yy187;\r
 -yy595:\r
 -              YYDEBUG(595, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy596;\r
 -              if (yych != 'n') goto yy187;\r
 -yy596:\r
 -              YYDEBUG(596, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy597;\r
 -              if (yych != 'c') goto yy187;\r
 -yy597:\r
 -              YYDEBUG(597, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy598;\r
 -              if (yych != 'e') goto yy187;\r
 -yy598:\r
 -              YYDEBUG(598, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(599, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1258 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_INCLUDE_ONCE;\r
 -}\r
 -#line 5876 "Zend/zend_language_scanner.c"\r
 -yy600:\r
 -              YYDEBUG(600, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy601;\r
 -              if (yych != 'r') goto yy187;\r
 -yy601:\r
 -              YYDEBUG(601, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'F') goto yy602;\r
 -              if (yych != 'f') goto yy187;\r
 -yy602:\r
 -              YYDEBUG(602, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy603;\r
 -              if (yych != 'a') goto yy187;\r
 -yy603:\r
 -              YYDEBUG(603, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy604;\r
 -              if (yych != 'c') goto yy187;\r
 -yy604:\r
 -              YYDEBUG(604, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy605;\r
 -              if (yych != 'e') goto yy187;\r
 -yy605:\r
 -              YYDEBUG(605, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(606, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1154 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_INTERFACE;\r
 -}\r
 -#line 5914 "Zend/zend_language_scanner.c"\r
 -yy607:\r
 -              YYDEBUG(607, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'E') {\r
 -                      if (yych == 'A') goto yy608;\r
 -                      if (yych <= 'D') goto yy187;\r
 -                      goto yy609;\r
 -              } else {\r
 -                      if (yych <= 'a') {\r
 -                              if (yych <= '`') goto yy187;\r
 -                      } else {\r
 -                              if (yych == 'e') goto yy609;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy608:\r
 -              YYDEBUG(608, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy615;\r
 -              if (yych == 'n') goto yy615;\r
 -              goto yy187;\r
 -yy609:\r
 -              YYDEBUG(609, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy610;\r
 -              if (yych != 'a') goto yy187;\r
 -yy610:\r
 -              YYDEBUG(610, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'D') goto yy611;\r
 -              if (yych != 'd') goto yy187;\r
 -yy611:\r
 -              YYDEBUG(611, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy612;\r
 -              if (yych != 'o') goto yy187;\r
 -yy612:\r
 -              YYDEBUG(612, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'F') goto yy613;\r
 -              if (yych != 'f') goto yy187;\r
 -yy613:\r
 -              YYDEBUG(613, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(614, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1278 "Zend/zend_language_scanner.l"\r
 -              {\r
 -        return T_INSTEADOF;\r
 -}\r
 -#line 5968 "Zend/zend_language_scanner.c"\r
 -yy615:\r
 -              YYDEBUG(615, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy616;\r
 -              if (yych != 'c') goto yy187;\r
 -yy616:\r
 -              YYDEBUG(616, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy617;\r
 -              if (yych != 'e') goto yy187;\r
 -yy617:\r
 -              YYDEBUG(617, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy618;\r
 -              if (yych != 'o') goto yy187;\r
 -yy618:\r
 -              YYDEBUG(618, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'F') goto yy619;\r
 -              if (yych != 'f') goto yy187;\r
 -yy619:\r
 -              YYDEBUG(619, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(620, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1106 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_INSTANCEOF;\r
 -}\r
 -#line 6001 "Zend/zend_language_scanner.c"\r
 -yy621:\r
 -              YYDEBUG(621, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy622;\r
 -              if (yych != 'l') goto yy187;\r
 -yy622:\r
 -              YYDEBUG(622, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy623;\r
 -              if (yych != 'e') goto yy187;\r
 -yy623:\r
 -              YYDEBUG(623, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'M') goto yy624;\r
 -              if (yych != 'm') goto yy187;\r
 -yy624:\r
 -              YYDEBUG(624, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy625;\r
 -              if (yych != 'e') goto yy187;\r
 -yy625:\r
 -              YYDEBUG(625, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy626;\r
 -              if (yych != 'n') goto yy187;\r
 -yy626:\r
 -              YYDEBUG(626, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy627;\r
 -              if (yych != 't') goto yy187;\r
 -yy627:\r
 -              YYDEBUG(627, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy628;\r
 -              if (yych != 's') goto yy187;\r
 -yy628:\r
 -              YYDEBUG(628, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(629, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1166 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_IMPLEMENTS;\r
 -}\r
 -#line 6049 "Zend/zend_language_scanner.c"\r
 -yy630:\r
 -              YYDEBUG(630, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy638;\r
 -              if (yych == 'r') goto yy638;\r
 -              goto yy187;\r
 -yy631:\r
 -              YYDEBUG(631, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'Y') {\r
 -                      if (yych == 'A') goto yy634;\r
 -                      if (yych <= 'X') goto yy187;\r
 -              } else {\r
 -                      if (yych <= 'a') {\r
 -                              if (yych <= '`') goto yy187;\r
 -                              goto yy634;\r
 -                      } else {\r
 -                              if (yych != 'y') goto yy187;\r
 -                      }\r
 -              }\r
 -              YYDEBUG(632, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(633, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1038 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_TRY;\r
 -}\r
 -#line 6081 "Zend/zend_language_scanner.c"\r
 -yy634:\r
 -              YYDEBUG(634, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy635;\r
 -              if (yych != 'i') goto yy187;\r
 -yy635:\r
 -              YYDEBUG(635, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy636;\r
 -              if (yych != 't') goto yy187;\r
 -yy636:\r
 -              YYDEBUG(636, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(637, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1158 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_TRAIT;\r
 -}\r
 -#line 6104 "Zend/zend_language_scanner.c"\r
 -yy638:\r
 -              YYDEBUG(638, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy639;\r
 -              if (yych != 'o') goto yy187;\r
 -yy639:\r
 -              YYDEBUG(639, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'W') goto yy640;\r
 -              if (yych != 'w') goto yy187;\r
 -yy640:\r
 -              YYDEBUG(640, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(641, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1050 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_THROW;\r
 -}\r
 -#line 6127 "Zend/zend_language_scanner.c"\r
 -yy642:\r
 -              YYDEBUG(642, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy643;\r
 -              if (yych != 'e') goto yy187;\r
 -yy643:\r
 -              YYDEBUG(643, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy644;\r
 -              if (yych != 'l') goto yy187;\r
 -yy644:\r
 -              YYDEBUG(644, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'D') goto yy645;\r
 -              if (yych != 'd') goto yy187;\r
 -yy645:\r
 -              YYDEBUG(645, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(646, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1034 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_YIELD;\r
 -}\r
 -#line 6155 "Zend/zend_language_scanner.c"\r
 -yy647:\r
 -              YYDEBUG(647, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'T') {\r
 -                      if (yych == 'Q') goto yy649;\r
 -                      if (yych <= 'S') goto yy187;\r
 -              } else {\r
 -                      if (yych <= 'q') {\r
 -                              if (yych <= 'p') goto yy187;\r
 -                              goto yy649;\r
 -                      } else {\r
 -                              if (yych != 't') goto yy187;\r
 -                      }\r
 -              }\r
 -              YYDEBUG(648, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'U') goto yy661;\r
 -              if (yych == 'u') goto yy661;\r
 -              goto yy187;\r
 -yy649:\r
 -              YYDEBUG(649, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'U') goto yy650;\r
 -              if (yych != 'u') goto yy187;\r
 -yy650:\r
 -              YYDEBUG(650, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy651;\r
 -              if (yych != 'i') goto yy187;\r
 -yy651:\r
 -              YYDEBUG(651, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy652;\r
 -              if (yych != 'r') goto yy187;\r
 -yy652:\r
 -              YYDEBUG(652, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy653;\r
 -              if (yych != 'e') goto yy187;\r
 -yy653:\r
 -              YYDEBUG(653, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '^') {\r
 -                      if (yych <= '9') {\r
 -                              if (yych >= '0') goto yy186;\r
 -                      } else {\r
 -                              if (yych <= '@') goto yy654;\r
 -                              if (yych <= 'Z') goto yy186;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '`') {\r
 -                              if (yych <= '_') goto yy655;\r
 -                      } else {\r
 -                              if (yych <= 'z') goto yy186;\r
 -                              if (yych >= 0x7F) goto yy186;\r
 -                      }\r
 -              }\r
 -yy654:\r
 -              YYDEBUG(654, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1262 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_REQUIRE;\r
 -}\r
 -#line 6220 "Zend/zend_language_scanner.c"\r
 -yy655:\r
 -              YYDEBUG(655, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy656;\r
 -              if (yych != 'o') goto yy187;\r
 -yy656:\r
 -              YYDEBUG(656, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy657;\r
 -              if (yych != 'n') goto yy187;\r
 -yy657:\r
 -              YYDEBUG(657, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy658;\r
 -              if (yych != 'c') goto yy187;\r
 -yy658:\r
 -              YYDEBUG(658, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy659;\r
 -              if (yych != 'e') goto yy187;\r
 -yy659:\r
 -              YYDEBUG(659, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(660, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1266 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_REQUIRE_ONCE;\r
 -}\r
 -#line 6253 "Zend/zend_language_scanner.c"\r
 -yy661:\r
 -              YYDEBUG(661, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy662;\r
 -              if (yych != 'r') goto yy187;\r
 -yy662:\r
 -              YYDEBUG(662, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy663;\r
 -              if (yych != 'n') goto yy187;\r
 -yy663:\r
 -              YYDEBUG(663, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(664, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1030 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_RETURN;\r
 -}\r
 -#line 6276 "Zend/zend_language_scanner.c"\r
 -yy665:\r
 -              YYDEBUG(665, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'T') {\r
 -                      if (yych <= 'L') {\r
 -                              if (yych <= 'K') goto yy187;\r
 -                              goto yy688;\r
 -                      } else {\r
 -                              if (yych <= 'R') goto yy187;\r
 -                              if (yych <= 'S') goto yy687;\r
 -                              goto yy686;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'r') {\r
 -                              if (yych == 'l') goto yy688;\r
 -                              goto yy187;\r
 -                      } else {\r
 -                              if (yych <= 's') goto yy687;\r
 -                              if (yych <= 't') goto yy686;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy666:\r
 -              YYDEBUG(666, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'O') {\r
 -                      if (yych == 'A') goto yy678;\r
 -                      if (yych <= 'N') goto yy187;\r
 -                      goto yy679;\r
 -              } else {\r
 -                      if (yych <= 'a') {\r
 -                              if (yych <= '`') goto yy187;\r
 -                              goto yy678;\r
 -                      } else {\r
 -                              if (yych == 'o') goto yy679;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy667:\r
 -              YYDEBUG(667, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy668;\r
 -              if (yych != 'n') goto yy187;\r
 -yy668:\r
 -              YYDEBUG(668, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'T') {\r
 -                      if (yych <= 'R') goto yy187;\r
 -                      if (yych >= 'T') goto yy670;\r
 -              } else {\r
 -                      if (yych <= 'r') goto yy187;\r
 -                      if (yych <= 's') goto yy669;\r
 -                      if (yych <= 't') goto yy670;\r
 -                      goto yy187;\r
 -              }\r
 -yy669:\r
 -              YYDEBUG(669, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy676;\r
 -              if (yych == 't') goto yy676;\r
 -              goto yy187;\r
 -yy670:\r
 -              YYDEBUG(670, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy671;\r
 -              if (yych != 'i') goto yy187;\r
 -yy671:\r
 -              YYDEBUG(671, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy672;\r
 -              if (yych != 'n') goto yy187;\r
 -yy672:\r
 -              YYDEBUG(672, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'U') goto yy673;\r
 -              if (yych != 'u') goto yy187;\r
 -yy673:\r
 -              YYDEBUG(673, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy674;\r
 -              if (yych != 'e') goto yy187;\r
 -yy674:\r
 -              YYDEBUG(674, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(675, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1134 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_CONTINUE;\r
 -}\r
 -#line 6370 "Zend/zend_language_scanner.c"\r
 -yy676:\r
 -              YYDEBUG(676, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(677, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1026 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_CONST;\r
 -}\r
 -#line 6383 "Zend/zend_language_scanner.c"\r
 -yy678:\r
 -              YYDEBUG(678, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy683;\r
 -              if (yych == 's') goto yy683;\r
 -              goto yy187;\r
 -yy679:\r
 -              YYDEBUG(679, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy680;\r
 -              if (yych != 'n') goto yy187;\r
 -yy680:\r
 -              YYDEBUG(680, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy681;\r
 -              if (yych != 'e') goto yy187;\r
 -yy681:\r
 -              YYDEBUG(681, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(682, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1214 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_CLONE;\r
 -}\r
 -#line 6412 "Zend/zend_language_scanner.c"\r
 -yy683:\r
 -              YYDEBUG(683, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy684;\r
 -              if (yych != 's') goto yy187;\r
 -yy684:\r
 -              YYDEBUG(684, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(685, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1150 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_CLASS;\r
 -}\r
 -#line 6430 "Zend/zend_language_scanner.c"\r
 -yy686:\r
 -              YYDEBUG(686, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy697;\r
 -              if (yych == 'c') goto yy697;\r
 -              goto yy187;\r
 -yy687:\r
 -              YYDEBUG(687, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy695;\r
 -              if (yych == 'e') goto yy695;\r
 -              goto yy187;\r
 -yy688:\r
 -              YYDEBUG(688, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy689;\r
 -              if (yych != 'l') goto yy187;\r
 -yy689:\r
 -              YYDEBUG(689, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy690;\r
 -              if (yych != 'a') goto yy187;\r
 -yy690:\r
 -              YYDEBUG(690, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'B') goto yy691;\r
 -              if (yych != 'b') goto yy187;\r
 -yy691:\r
 -              YYDEBUG(691, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy692;\r
 -              if (yych != 'l') goto yy187;\r
 -yy692:\r
 -              YYDEBUG(692, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy693;\r
 -              if (yych != 'e') goto yy187;\r
 -yy693:\r
 -              YYDEBUG(693, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(694, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1338 "Zend/zend_language_scanner.l"\r
 -              {\r
 - return T_CALLABLE;\r
 -}\r
 -#line 6480 "Zend/zend_language_scanner.c"\r
 -yy695:\r
 -              YYDEBUG(695, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(696, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1122 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_CASE;\r
 -}\r
 -#line 6493 "Zend/zend_language_scanner.c"\r
 -yy697:\r
 -              YYDEBUG(697, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy698;\r
 -              if (yych != 'h') goto yy187;\r
 -yy698:\r
 -              YYDEBUG(698, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(699, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1042 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_CATCH;\r
 -}\r
 -#line 6511 "Zend/zend_language_scanner.c"\r
 -yy700:\r
 -              YYDEBUG(700, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy717;\r
 -              if (yych == 'n') goto yy717;\r
 -              goto yy187;\r
 -yy701:\r
 -              YYDEBUG(701, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy710;\r
 -              if (yych == 'r') goto yy710;\r
 -              goto yy187;\r
 -yy702:\r
 -              YYDEBUG(702, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy703;\r
 -              if (yych != 'n') goto yy187;\r
 -yy703:\r
 -              YYDEBUG(703, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy704;\r
 -              if (yych != 'c') goto yy187;\r
 -yy704:\r
 -              YYDEBUG(704, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy705;\r
 -              if (yych != 't') goto yy187;\r
 -yy705:\r
 -              YYDEBUG(705, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy706;\r
 -              if (yych != 'i') goto yy187;\r
 -yy706:\r
 -              YYDEBUG(706, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy707;\r
 -              if (yych != 'o') goto yy187;\r
 -yy707:\r
 -              YYDEBUG(707, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy708;\r
 -              if (yych != 'n') goto yy187;\r
 -yy708:\r
 -              YYDEBUG(708, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(709, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1022 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_FUNCTION;\r
 -}\r
 -#line 6566 "Zend/zend_language_scanner.c"\r
 -yy710:\r
 -              YYDEBUG(710, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '^') {\r
 -                      if (yych <= '@') {\r
 -                              if (yych <= '/') goto yy711;\r
 -                              if (yych <= '9') goto yy186;\r
 -                      } else {\r
 -                              if (yych == 'E') goto yy712;\r
 -                              if (yych <= 'Z') goto yy186;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'd') {\r
 -                              if (yych != '`') goto yy186;\r
 -                      } else {\r
 -                              if (yych <= 'e') goto yy712;\r
 -                              if (yych <= 'z') goto yy186;\r
 -                              if (yych >= 0x7F) goto yy186;\r
 -                      }\r
 -              }\r
 -yy711:\r
 -              YYDEBUG(711, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1082 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_FOR;\r
 -}\r
 -#line 6594 "Zend/zend_language_scanner.c"\r
 -yy712:\r
 -              YYDEBUG(712, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy713;\r
 -              if (yych != 'a') goto yy187;\r
 -yy713:\r
 -              YYDEBUG(713, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy714;\r
 -              if (yych != 'c') goto yy187;\r
 -yy714:\r
 -              YYDEBUG(714, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy715;\r
 -              if (yych != 'h') goto yy187;\r
 -yy715:\r
 -              YYDEBUG(715, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(716, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1090 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_FOREACH;\r
 -}\r
 -#line 6622 "Zend/zend_language_scanner.c"\r
 -yy717:\r
 -              YYDEBUG(717, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy718;\r
 -              if (yych != 'a') goto yy187;\r
 -yy718:\r
 -              YYDEBUG(718, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy719;\r
 -              if (yych != 'l') goto yy187;\r
 -yy719:\r
 -              YYDEBUG(719, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '^') {\r
 -                      if (yych <= '@') {\r
 -                              if (yych <= '/') goto yy720;\r
 -                              if (yych <= '9') goto yy186;\r
 -                      } else {\r
 -                              if (yych == 'L') goto yy721;\r
 -                              if (yych <= 'Z') goto yy186;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'k') {\r
 -                              if (yych != '`') goto yy186;\r
 -                      } else {\r
 -                              if (yych <= 'l') goto yy721;\r
 -                              if (yych <= 'z') goto yy186;\r
 -                              if (yych >= 0x7F) goto yy186;\r
 -                      }\r
 -              }\r
 -yy720:\r
 -              YYDEBUG(720, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1306 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_FINAL;\r
 -}\r
 -#line 6660 "Zend/zend_language_scanner.c"\r
 -yy721:\r
 -              YYDEBUG(721, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'Y') goto yy722;\r
 -              if (yych != 'y') goto yy187;\r
 -yy722:\r
 -              YYDEBUG(722, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(723, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1046 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_FINALLY;\r
 -}\r
 -#line 6678 "Zend/zend_language_scanner.c"\r
 -yy724:\r
 -              YYDEBUG(724, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'F') {\r
 -                      if (yych == 'C') goto yy730;\r
 -                      if (yych <= 'E') goto yy187;\r
 -                      goto yy731;\r
 -              } else {\r
 -                      if (yych <= 'c') {\r
 -                              if (yych <= 'b') goto yy187;\r
 -                              goto yy730;\r
 -                      } else {\r
 -                              if (yych == 'f') goto yy731;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy725:\r
 -              YYDEBUG(725, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy728;\r
 -              if (yych == 'e') goto yy728;\r
 -              goto yy187;\r
 -yy726:\r
 -              YYDEBUG(726, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(727, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1078 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_DO;\r
 -}\r
 -#line 6713 "Zend/zend_language_scanner.c"\r
 -yy728:\r
 -              YYDEBUG(728, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(729, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1018 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_EXIT;\r
 -}\r
 -#line 6726 "Zend/zend_language_scanner.c"\r
 -yy730:\r
 -              YYDEBUG(730, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy737;\r
 -              if (yych == 'l') goto yy737;\r
 -              goto yy187;\r
 -yy731:\r
 -              YYDEBUG(731, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy732;\r
 -              if (yych != 'a') goto yy187;\r
 -yy732:\r
 -              YYDEBUG(732, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'U') goto yy733;\r
 -              if (yych != 'u') goto yy187;\r
 -yy733:\r
 -              YYDEBUG(733, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy734;\r
 -              if (yych != 'l') goto yy187;\r
 -yy734:\r
 -              YYDEBUG(734, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy735;\r
 -              if (yych != 't') goto yy187;\r
 -yy735:\r
 -              YYDEBUG(735, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(736, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1126 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_DEFAULT;\r
 -}\r
 -#line 6765 "Zend/zend_language_scanner.c"\r
 -yy737:\r
 -              YYDEBUG(737, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy738;\r
 -              if (yych != 'a') goto yy187;\r
 -yy738:\r
 -              YYDEBUG(738, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy739;\r
 -              if (yych != 'r') goto yy187;\r
 -yy739:\r
 -              YYDEBUG(739, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy740;\r
 -              if (yych != 'e') goto yy187;\r
 -yy740:\r
 -              YYDEBUG(740, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(741, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1098 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_DECLARE;\r
 -}\r
 -#line 6793 "Zend/zend_language_scanner.c"\r
 -yy742:\r
 -              YYDEBUG(742, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy804;\r
 -              if (yych == 'h') goto yy804;\r
 -              goto yy187;\r
 -yy743:\r
 -              YYDEBUG(743, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy798;\r
 -              if (yych == 's') goto yy798;\r
 -              goto yy187;\r
 -yy744:\r
 -              YYDEBUG(744, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'P') goto yy794;\r
 -              if (yych == 'p') goto yy794;\r
 -              goto yy187;\r
 -yy745:\r
 -              YYDEBUG(745, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'D') goto yy760;\r
 -              if (yych == 'd') goto yy760;\r
 -              goto yy187;\r
 -yy746:\r
 -              YYDEBUG(746, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy757;\r
 -              if (yych == 'a') goto yy757;\r
 -              goto yy187;\r
 -yy747:\r
 -              YYDEBUG(747, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych <= 'T') {\r
 -                      if (yych == 'I') goto yy748;\r
 -                      if (yych <= 'S') goto yy187;\r
 -                      goto yy749;\r
 -              } else {\r
 -                      if (yych <= 'i') {\r
 -                              if (yych <= 'h') goto yy187;\r
 -                      } else {\r
 -                              if (yych == 't') goto yy749;\r
 -                              goto yy187;\r
 -                      }\r
 -              }\r
 -yy748:\r
 -              YYDEBUG(748, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy755;\r
 -              if (yych == 't') goto yy755;\r
 -              goto yy187;\r
 -yy749:\r
 -              YYDEBUG(749, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy750;\r
 -              if (yych != 'e') goto yy187;\r
 -yy750:\r
 -              YYDEBUG(750, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'N') goto yy751;\r
 -              if (yych != 'n') goto yy187;\r
 -yy751:\r
 -              YYDEBUG(751, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'D') goto yy752;\r
 -              if (yych != 'd') goto yy187;\r
 -yy752:\r
 -              YYDEBUG(752, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'S') goto yy753;\r
 -              if (yych != 's') goto yy187;\r
 -yy753:\r
 -              YYDEBUG(753, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(754, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1162 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_EXTENDS;\r
 -}\r
 -#line 6877 "Zend/zend_language_scanner.c"\r
 -yy755:\r
 -              YYDEBUG(755, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(756, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1014 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_EXIT;\r
 -}\r
 -#line 6890 "Zend/zend_language_scanner.c"\r
 -yy757:\r
 -              YYDEBUG(757, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy758;\r
 -              if (yych != 'l') goto yy187;\r
 -yy758:\r
 -              YYDEBUG(758, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(759, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1250 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_EVAL;\r
 -}\r
 -#line 6908 "Zend/zend_language_scanner.c"\r
 -yy760:\r
 -              YYDEBUG(760, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              YYDEBUG(-1, yych);\r
 -              switch (yych) {\r
 -              case 'D':\r
 -              case 'd':       goto yy761;\r
 -              case 'F':\r
 -              case 'f':       goto yy762;\r
 -              case 'I':\r
 -              case 'i':       goto yy763;\r
 -              case 'S':\r
 -              case 's':       goto yy764;\r
 -              case 'W':\r
 -              case 'w':       goto yy765;\r
 -              default:        goto yy187;\r
 -              }\r
 -yy761:\r
 -              YYDEBUG(761, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy787;\r
 -              if (yych == 'e') goto yy787;\r
 -              goto yy187;\r
 -yy762:\r
 -              YYDEBUG(762, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy779;\r
 -              if (yych == 'o') goto yy779;\r
 -              goto yy187;\r
 -yy763:\r
 -              YYDEBUG(763, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'F') goto yy777;\r
 -              if (yych == 'f') goto yy777;\r
 -              goto yy187;\r
 -yy764:\r
 -              YYDEBUG(764, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'W') goto yy771;\r
 -              if (yych == 'w') goto yy771;\r
 -              goto yy187;\r
 -yy765:\r
 -              YYDEBUG(765, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy766;\r
 -              if (yych != 'h') goto yy187;\r
 -yy766:\r
 -              YYDEBUG(766, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy767;\r
 -              if (yych != 'i') goto yy187;\r
 -yy767:\r
 -              YYDEBUG(767, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy768;\r
 -              if (yych != 'l') goto yy187;\r
 -yy768:\r
 -              YYDEBUG(768, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy769;\r
 -              if (yych != 'e') goto yy187;\r
 -yy769:\r
 -              YYDEBUG(769, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(770, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1074 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ENDWHILE;\r
 -}\r
 -#line 6982 "Zend/zend_language_scanner.c"\r
 -yy771:\r
 -              YYDEBUG(771, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'I') goto yy772;\r
 -              if (yych != 'i') goto yy187;\r
 -yy772:\r
 -              YYDEBUG(772, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy773;\r
 -              if (yych != 't') goto yy187;\r
 -yy773:\r
 -              YYDEBUG(773, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy774;\r
 -              if (yych != 'c') goto yy187;\r
 -yy774:\r
 -              YYDEBUG(774, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy775;\r
 -              if (yych != 'h') goto yy187;\r
 -yy775:\r
 -              YYDEBUG(775, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(776, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1118 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ENDSWITCH;\r
 -}\r
 -#line 7015 "Zend/zend_language_scanner.c"\r
 -yy777:\r
 -              YYDEBUG(777, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(778, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1062 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ENDIF;\r
 -}\r
 -#line 7028 "Zend/zend_language_scanner.c"\r
 -yy779:\r
 -              YYDEBUG(779, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy780;\r
 -              if (yych != 'r') goto yy187;\r
 -yy780:\r
 -              YYDEBUG(780, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '^') {\r
 -                      if (yych <= '@') {\r
 -                              if (yych <= '/') goto yy781;\r
 -                              if (yych <= '9') goto yy186;\r
 -                      } else {\r
 -                              if (yych == 'E') goto yy782;\r
 -                              if (yych <= 'Z') goto yy186;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'd') {\r
 -                              if (yych != '`') goto yy186;\r
 -                      } else {\r
 -                              if (yych <= 'e') goto yy782;\r
 -                              if (yych <= 'z') goto yy186;\r
 -                              if (yych >= 0x7F) goto yy186;\r
 -                      }\r
 -              }\r
 -yy781:\r
 -              YYDEBUG(781, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1086 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ENDFOR;\r
 -}\r
 -#line 7061 "Zend/zend_language_scanner.c"\r
 -yy782:\r
 -              YYDEBUG(782, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy783;\r
 -              if (yych != 'a') goto yy187;\r
 -yy783:\r
 -              YYDEBUG(783, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy784;\r
 -              if (yych != 'c') goto yy187;\r
 -yy784:\r
 -              YYDEBUG(784, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'H') goto yy785;\r
 -              if (yych != 'h') goto yy187;\r
 -yy785:\r
 -              YYDEBUG(785, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(786, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1094 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ENDFOREACH;\r
 -}\r
 -#line 7089 "Zend/zend_language_scanner.c"\r
 -yy787:\r
 -              YYDEBUG(787, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'C') goto yy788;\r
 -              if (yych != 'c') goto yy187;\r
 -yy788:\r
 -              YYDEBUG(788, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'L') goto yy789;\r
 -              if (yych != 'l') goto yy187;\r
 -yy789:\r
 -              YYDEBUG(789, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'A') goto yy790;\r
 -              if (yych != 'a') goto yy187;\r
 -yy790:\r
 -              YYDEBUG(790, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'R') goto yy791;\r
 -              if (yych != 'r') goto yy187;\r
 -yy791:\r
 -              YYDEBUG(791, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy792;\r
 -              if (yych != 'e') goto yy187;\r
 -yy792:\r
 -              YYDEBUG(792, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(793, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1102 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ENDDECLARE;\r
 -}\r
 -#line 7127 "Zend/zend_language_scanner.c"\r
 -yy794:\r
 -              YYDEBUG(794, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'T') goto yy795;\r
 -              if (yych != 't') goto yy187;\r
 -yy795:\r
 -              YYDEBUG(795, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'Y') goto yy796;\r
 -              if (yych != 'y') goto yy187;\r
 -yy796:\r
 -              YYDEBUG(796, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(797, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1290 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_EMPTY;\r
 -}\r
 -#line 7150 "Zend/zend_language_scanner.c"\r
 -yy798:\r
 -              YYDEBUG(798, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'E') goto yy799;\r
 -              if (yych != 'e') goto yy187;\r
 -yy799:\r
 -              YYDEBUG(799, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '^') {\r
 -                      if (yych <= '@') {\r
 -                              if (yych <= '/') goto yy800;\r
 -                              if (yych <= '9') goto yy186;\r
 -                      } else {\r
 -                              if (yych == 'I') goto yy801;\r
 -                              if (yych <= 'Z') goto yy186;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'h') {\r
 -                              if (yych != '`') goto yy186;\r
 -                      } else {\r
 -                              if (yych <= 'i') goto yy801;\r
 -                              if (yych <= 'z') goto yy186;\r
 -                              if (yych >= 0x7F) goto yy186;\r
 -                      }\r
 -              }\r
 -yy800:\r
 -              YYDEBUG(800, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1066 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ELSE;\r
 -}\r
 -#line 7183 "Zend/zend_language_scanner.c"\r
 -yy801:\r
 -              YYDEBUG(801, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'F') goto yy802;\r
 -              if (yych != 'f') goto yy187;\r
 -yy802:\r
 -              YYDEBUG(802, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(803, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1058 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ELSEIF;\r
 -}\r
 -#line 7201 "Zend/zend_language_scanner.c"\r
 -yy804:\r
 -              YYDEBUG(804, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yych == 'O') goto yy805;\r
 -              if (yych != 'o') goto yy187;\r
 -yy805:\r
 -              YYDEBUG(805, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if (yybm[0+(yych = *YYCURSOR)] & 4) {\r
 -                      goto yy186;\r
 -              }\r
 -              YYDEBUG(806, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1142 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_ECHO;\r
 -}\r
 -#line 7219 "Zend/zend_language_scanner.c"\r
 -      }\r
 -/* *********************************** */\r
 -yyc_ST_LOOKING_FOR_PROPERTY:\r
 -      {\r
 -              static const unsigned char yybm[] = {\r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0, 128, 128,   0,   0, 128,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                      128,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,   0,   0,   0,   0,   0,   0, \r
 -                        0,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,   0,   0,   0,   0,  64, \r
 -                        0,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,   0,   0,   0,   0,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -                       64,  64,  64,  64,  64,  64,  64,  64, \r
 -              };\r
 -              YYDEBUG(807, *YYCURSOR);\r
 -              YYFILL(2);\r
 -              yych = *YYCURSOR;\r
 -              if (yych <= '-') {\r
 -                      if (yych <= '\r') {\r
 -                              if (yych <= 0x08) goto yy815;\r
 -                              if (yych <= '\n') goto yy809;\r
 -                              if (yych <= '\f') goto yy815;\r
 -                      } else {\r
 -                              if (yych == ' ') goto yy809;\r
 -                              if (yych <= ',') goto yy815;\r
 -                              goto yy811;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '_') {\r
 -                              if (yych <= '@') goto yy815;\r
 -                              if (yych <= 'Z') goto yy813;\r
 -                              if (yych <= '^') goto yy815;\r
 -                              goto yy813;\r
 -                      } else {\r
 -                              if (yych <= '`') goto yy815;\r
 -                              if (yych <= 'z') goto yy813;\r
 -                              if (yych <= '~') goto yy815;\r
 -                              goto yy813;\r
 -                      }\r
 -              }\r
 -yy809:\r
 -              YYDEBUG(809, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              yych = *YYCURSOR;\r
 -              goto yy821;\r
 -yy810:\r
 -              YYDEBUG(810, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1175 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */\r
 -      HANDLE_NEWLINES(yytext, yyleng);\r
 -      return T_WHITESPACE;\r
 -}\r
 -#line 7298 "Zend/zend_language_scanner.c"\r
 -yy811:\r
 -              YYDEBUG(811, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) == '>') goto yy818;\r
 -yy812:\r
 -              YYDEBUG(812, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1192 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yyless(0);\r
 -      yy_pop_state(TSRMLS_C);\r
 -      goto restart;\r
 -}\r
 -#line 7312 "Zend/zend_language_scanner.c"\r
 -yy813:\r
 -              YYDEBUG(813, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              yych = *YYCURSOR;\r
 -              goto yy817;\r
 -yy814:\r
 -              YYDEBUG(814, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1185 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yy_pop_state(TSRMLS_C);\r
 -      zend_copy_value(zendlval, yytext, yyleng);\r
 -      zendlval->type = IS_STRING;\r
 -      return T_STRING;\r
 -}\r
 -#line 7328 "Zend/zend_language_scanner.c"\r
 -yy815:\r
 -              YYDEBUG(815, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy812;\r
 -yy816:\r
 -              YYDEBUG(816, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -yy817:\r
 -              YYDEBUG(817, *YYCURSOR);\r
 -              if (yybm[0+yych] & 64) {\r
 -                      goto yy816;\r
 -              }\r
 -              goto yy814;\r
 -yy818:\r
 -              YYDEBUG(818, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(819, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1181 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      return T_OBJECT_OPERATOR;\r
 -}\r
 -#line 7353 "Zend/zend_language_scanner.c"\r
 -yy820:\r
 -              YYDEBUG(820, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -yy821:\r
 -              YYDEBUG(821, *YYCURSOR);\r
 -              if (yybm[0+yych] & 128) {\r
 -                      goto yy820;\r
 -              }\r
 -              goto yy810;\r
 -      }\r
 -/* *********************************** */\r
 -yyc_ST_LOOKING_FOR_VARNAME:\r
 -      {\r
 -              static const unsigned char yybm[] = {\r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128,   0,   0,   0,   0,   0,   0, \r
 -                        0, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128,   0,   0,   0,   0, 128, \r
 -                        0, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128,   0,   0,   0,   0, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -                      128, 128, 128, 128, 128, 128, 128, 128, \r
 -              };\r
 -              YYDEBUG(822, *YYCURSOR);\r
 -              YYFILL(2);\r
 -              yych = *YYCURSOR;\r
 -              if (yych <= '_') {\r
 -                      if (yych <= '@') goto yy826;\r
 -                      if (yych <= 'Z') goto yy824;\r
 -                      if (yych <= '^') goto yy826;\r
 -              } else {\r
 -                      if (yych <= '`') goto yy826;\r
 -                      if (yych <= 'z') goto yy824;\r
 -                      if (yych <= '~') goto yy826;\r
 -              }\r
 -yy824:\r
 -              YYDEBUG(824, *YYCURSOR);\r
 -              yyaccept = 0;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= '_') {\r
 -                      if (yych <= '@') {\r
 -                              if (yych <= '/') goto yy825;\r
 -                              if (yych <= '9') goto yy828;\r
 -                      } else {\r
 -                              if (yych <= '[') goto yy828;\r
 -                              if (yych >= '_') goto yy828;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '|') {\r
 -                              if (yych <= '`') goto yy825;\r
 -                              if (yych <= 'z') goto yy828;\r
 -                      } else {\r
 -                              if (yych != '~') goto yy828;\r
 -                      }\r
 -              }\r
 -yy825:\r
 -              YYDEBUG(825, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1490 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yyless(0);\r
 -      yy_pop_state(TSRMLS_C);\r
 -      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);\r
 -      goto restart;\r
 -}\r
 -#line 7445 "Zend/zend_language_scanner.c"\r
 -yy826:\r
 -              YYDEBUG(826, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy825;\r
 -yy827:\r
 -              YYDEBUG(827, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -yy828:\r
 -              YYDEBUG(828, *YYCURSOR);\r
 -              if (yybm[0+yych] & 128) {\r
 -                      goto yy827;\r
 -              }\r
 -              if (yych == '[') goto yy830;\r
 -              if (yych == '}') goto yy830;\r
 -              YYDEBUG(829, *YYCURSOR);\r
 -              YYCURSOR = YYMARKER;\r
 -              goto yy825;\r
 -yy830:\r
 -              YYDEBUG(830, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(831, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1480 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yyless(yyleng - 1);\r
 -      zend_copy_value(zendlval, yytext, yyleng);\r
 -      zendlval->type = IS_STRING;\r
 -      yy_pop_state(TSRMLS_C);\r
 -      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);\r
 -      return T_STRING_VARNAME;\r
 -}\r
 -#line 7479 "Zend/zend_language_scanner.c"\r
 -      }\r
 -/* *********************************** */\r
 -yyc_ST_NOWDOC:\r
 -      YYDEBUG(832, *YYCURSOR);\r
 -      YYFILL(1);\r
 -      yych = *YYCURSOR;\r
 -      YYDEBUG(834, *YYCURSOR);\r
 -      ++YYCURSOR;\r
 -      YYDEBUG(835, *YYCURSOR);\r
 -      yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2310 "Zend/zend_language_scanner.l"\r
 -      {\r
 -      int newline = 0;\r
 -\r
 -      zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));\r
 -\r
 -      if (YYCURSOR > YYLIMIT) {\r
 -              return 0;\r
 -      }\r
 -\r
 -      YYCURSOR--;\r
 -\r
 -      while (YYCURSOR < YYLIMIT) {\r
 -              switch (*YYCURSOR++) {\r
 -                      case '\r':\r
 -                              if (*YYCURSOR == '\n') {\r
 -                                      YYCURSOR++;\r
 -                              }\r
 -                              /* fall through */\r
 -                      case '\n':\r
 -                              /* Check for ending label on the next line */\r
 -                              if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {\r
 -                                      YYCTYPE *end = YYCURSOR + heredoc_label->length;\r
 -\r
 -                                      if (*end == ';') {\r
 -                                              end++;\r
 -                                      }\r
 -\r
 -                                      if (*end == '\n' || *end == '\r') {\r
 -                                              /* newline before label will be subtracted from returned text, but\r
 -                                               * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */\r
 -                                              if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') {\r
 -                                                      newline = 2; /* Windows newline */\r
 -                                              } else {\r
 -                                                      newline = 1;\r
 -                                              }\r
 -\r
 -                                              CG(increment_lineno) = 1; /* For newline before label */\r
 -                                              BEGIN(ST_END_HEREDOC);\r
 -\r
 -                                              goto nowdoc_scan_done;\r
 -                                      }\r
 -                              }\r
 -                              /* fall through */\r
 -                      default:\r
 -                              continue;\r
 -              }\r
 -      }\r
 -\r
 -nowdoc_scan_done:\r
 -      yyleng = YYCURSOR - SCNG(yy_text);\r
 -\r
 -      zend_copy_value(zendlval, yytext, yyleng - newline);\r
 -      zendlval->type = IS_STRING;\r
 -      HANDLE_NEWLINES(yytext, yyleng - newline);\r
 -      return T_ENCAPSED_AND_WHITESPACE;\r
 -}\r
 -#line 7547 "Zend/zend_language_scanner.c"\r
 -/* *********************************** */\r
 -yyc_ST_VAR_OFFSET:\r
 -      {\r
 -              static const unsigned char yybm[] = {\r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                        0,   0,   0,   0,   0,   0,   0,   0, \r
 -                      240, 240, 112, 112, 112, 112, 112, 112, \r
 -                      112, 112,   0,   0,   0,   0,   0,   0, \r
 -                        0,  80,  80,  80,  80,  80,  80,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,   0,   0,   0,   0,  16, \r
 -                        0,  80,  80,  80,  80,  80,  80,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,   0,   0,   0,   0,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -                       16,  16,  16,  16,  16,  16,  16,  16, \r
 -              };\r
 -              YYDEBUG(836, *YYCURSOR);\r
 -              YYFILL(3);\r
 -              yych = *YYCURSOR;\r
 -              if (yych <= '/') {\r
 -                      if (yych <= ' ') {\r
 -                              if (yych <= '\f') {\r
 -                                      if (yych <= 0x08) goto yy850;\r
 -                                      if (yych <= '\n') goto yy846;\r
 -                                      goto yy850;\r
 -                              } else {\r
 -                                      if (yych <= '\r') goto yy846;\r
 -                                      if (yych <= 0x1F) goto yy850;\r
 -                                      goto yy846;\r
 -                              }\r
 -                      } else {\r
 -                              if (yych <= '$') {\r
 -                                      if (yych <= '"') goto yy845;\r
 -                                      if (yych <= '#') goto yy846;\r
 -                                      goto yy841;\r
 -                              } else {\r
 -                                      if (yych == '\'') goto yy846;\r
 -                                      goto yy845;\r
 -                              }\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '\\') {\r
 -                              if (yych <= '@') {\r
 -                                      if (yych <= '0') goto yy838;\r
 -                                      if (yych <= '9') goto yy840;\r
 -                                      goto yy845;\r
 -                              } else {\r
 -                                      if (yych <= 'Z') goto yy848;\r
 -                                      if (yych <= '[') goto yy845;\r
 -                                      goto yy846;\r
 -                              }\r
 -                      } else {\r
 -                              if (yych <= '_') {\r
 -                                      if (yych <= ']') goto yy843;\r
 -                                      if (yych <= '^') goto yy845;\r
 -                                      goto yy848;\r
 -                              } else {\r
 -                                      if (yych <= '`') goto yy845;\r
 -                                      if (yych <= 'z') goto yy848;\r
 -                                      if (yych <= '~') goto yy845;\r
 -                                      goto yy848;\r
 -                              }\r
 -                      }\r
 -              }\r
 -yy838:\r
 -              YYDEBUG(838, *YYCURSOR);\r
 -              yyaccept = 0;\r
 -              yych = *(YYMARKER = ++YYCURSOR);\r
 -              if (yych <= 'W') {\r
 -                      if (yych <= '9') {\r
 -                              if (yych >= '0') goto yy862;\r
 -                      } else {\r
 -                              if (yych == 'B') goto yy859;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= 'b') {\r
 -                              if (yych <= 'X') goto yy861;\r
 -                              if (yych >= 'b') goto yy859;\r
 -                      } else {\r
 -                              if (yych == 'x') goto yy861;\r
 -                      }\r
 -              }\r
 -yy839:\r
 -              YYDEBUG(839, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1566 "Zend/zend_language_scanner.l"\r
 -              { /* Offset could be treated as a long */\r
 -      if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) {\r
 -              ZVAL_LONG(zendlval, strtol(yytext, NULL, 10));\r
 -      } else {\r
 -              ZVAL_STRINGL(zendlval, yytext, yyleng, 1);\r
 -      }\r
 -      return T_NUM_STRING;\r
 -}\r
 -#line 7663 "Zend/zend_language_scanner.c"\r
 -yy840:\r
 -              YYDEBUG(840, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy858;\r
 -yy841:\r
 -              YYDEBUG(841, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              if ((yych = *YYCURSOR) <= '_') {\r
 -                      if (yych <= '@') goto yy842;\r
 -                      if (yych <= 'Z') goto yy854;\r
 -                      if (yych >= '_') goto yy854;\r
 -              } else {\r
 -                      if (yych <= '`') goto yy842;\r
 -                      if (yych <= 'z') goto yy854;\r
 -                      if (yych >= 0x7F) goto yy854;\r
 -              }\r
 -yy842:\r
 -              YYDEBUG(842, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1842 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */\r
 -      return yytext[0];\r
 -}\r
 -#line 7688 "Zend/zend_language_scanner.c"\r
 -yy843:\r
 -              YYDEBUG(843, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(844, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1837 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      yy_pop_state(TSRMLS_C);\r
 -      return ']';\r
 -}\r
 -#line 7699 "Zend/zend_language_scanner.c"\r
 -yy845:\r
 -              YYDEBUG(845, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              goto yy842;\r
 -yy846:\r
 -              YYDEBUG(846, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(847, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1847 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      /* Invalid rule to return a more explicit parse error with proper line number */\r
 -      yyless(0);\r
 -      yy_pop_state(TSRMLS_C);\r
 -      return T_ENCAPSED_AND_WHITESPACE;\r
 -}\r
 -#line 7716 "Zend/zend_language_scanner.c"\r
 -yy848:\r
 -              YYDEBUG(848, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              yych = *YYCURSOR;\r
 -              goto yy853;\r
 -yy849:\r
 -              YYDEBUG(849, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1854 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_copy_value(zendlval, yytext, yyleng);\r
 -      zendlval->type = IS_STRING;\r
 -      return T_STRING;\r
 -}\r
 -#line 7731 "Zend/zend_language_scanner.c"\r
 -yy850:\r
 -              YYDEBUG(850, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYDEBUG(851, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 2368 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      if (YYCURSOR > YYLIMIT) {\r
 -              return 0;\r
 -      }\r
 -\r
 -      zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);\r
 -      goto restart;\r
 -}\r
 -#line 7746 "Zend/zend_language_scanner.c"\r
 -yy852:\r
 -              YYDEBUG(852, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -yy853:\r
 -              YYDEBUG(853, *YYCURSOR);\r
 -              if (yybm[0+yych] & 16) {\r
 -                      goto yy852;\r
 -              }\r
 -              goto yy849;\r
 -yy854:\r
 -              YYDEBUG(854, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(855, *YYCURSOR);\r
 -              if (yych <= '^') {\r
 -                      if (yych <= '9') {\r
 -                              if (yych >= '0') goto yy854;\r
 -                      } else {\r
 -                              if (yych <= '@') goto yy856;\r
 -                              if (yych <= 'Z') goto yy854;\r
 -                      }\r
 -              } else {\r
 -                      if (yych <= '`') {\r
 -                              if (yych <= '_') goto yy854;\r
 -                      } else {\r
 -                              if (yych <= 'z') goto yy854;\r
 -                              if (yych >= 0x7F) goto yy854;\r
 -                      }\r
 -              }\r
 -yy856:\r
 -              YYDEBUG(856, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1831 "Zend/zend_language_scanner.l"\r
 -              {\r
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));\r
 -      zendlval->type = IS_STRING;\r
 -      return T_VARIABLE;\r
 -}\r
 -#line 7788 "Zend/zend_language_scanner.c"\r
 -yy857:\r
 -              YYDEBUG(857, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -yy858:\r
 -              YYDEBUG(858, *YYCURSOR);\r
 -              if (yybm[0+yych] & 32) {\r
 -                      goto yy857;\r
 -              }\r
 -              goto yy839;\r
 -yy859:\r
 -              YYDEBUG(859, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yybm[0+yych] & 128) {\r
 -                      goto yy867;\r
 -              }\r
 -yy860:\r
 -              YYDEBUG(860, *YYCURSOR);\r
 -              YYCURSOR = YYMARKER;\r
 -              goto yy839;\r
 -yy861:\r
 -              YYDEBUG(861, *YYCURSOR);\r
 -              yych = *++YYCURSOR;\r
 -              if (yybm[0+yych] & 64) {\r
 -                      goto yy865;\r
 -              }\r
 -              goto yy860;\r
 -yy862:\r
 -              YYDEBUG(862, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(863, *YYCURSOR);\r
 -              if (yych <= '/') goto yy864;\r
 -              if (yych <= '9') goto yy862;\r
 -yy864:\r
 -              YYDEBUG(864, *YYCURSOR);\r
 -              yyleng = YYCURSOR - SCNG(yy_text);\r
 -#line 1575 "Zend/zend_language_scanner.l"\r
 -              { /* Offset must be treated as a string */\r
 -      ZVAL_STRINGL(zendlval, yytext, yyleng, 1);\r
 -      return T_NUM_STRING;\r
 -}\r
 -#line 7833 "Zend/zend_language_scanner.c"\r
 -yy865:\r
 -              YYDEBUG(865, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(866, *YYCURSOR);\r
 -              if (yybm[0+yych] & 64) {\r
 -                      goto yy865;\r
 -              }\r
 -              goto yy864;\r
 -yy867:\r
 -              YYDEBUG(867, *YYCURSOR);\r
 -              ++YYCURSOR;\r
 -              YYFILL(1);\r
 -              yych = *YYCURSOR;\r
 -              YYDEBUG(868, *YYCURSOR);\r
 -              if (yybm[0+yych] & 128) {\r
 -                      goto yy867;\r
 -              }\r
 -              goto yy864;\r
 -      }\r
 -}\r
 -#line 2377 "Zend/zend_language_scanner.l"\r
 -\r
 -}\r
 +/* Generated by re2c 0.13.5 */
 +#line 1 "Zend/zend_language_scanner.l"
 +/*
 +   +----------------------------------------------------------------------+
 +   | Zend Engine                                                          |
 +   +----------------------------------------------------------------------+
 +   | Copyright (c) 1998-2014 Zend Technologies Ltd. (http://www.zend.com) |
 +   +----------------------------------------------------------------------+
 +   | This source file is subject to version 2.00 of the Zend license,     |
 +   | that is bundled with this package in the file LICENSE, and is        |
 +   | available through the world-wide-web at the following url:           |
 +   | http://www.zend.com/license/2_00.txt.                                |
 +   | If you did not receive a copy of the Zend license and are unable to  |
 +   | obtain it through the world-wide-web, please send a note to          |
 +   | license@zend.com so we can mail you a copy immediately.              |
 +   +----------------------------------------------------------------------+
 +   | Authors: Marcus Boerger <helly@php.net>                              |
 +   |          Nuno Lopes <nlopess@php.net>                                |
 +   |          Scott MacVicar <scottmac@php.net>                           |
 +   | Flex version authors:                                                |
 +   |          Andi Gutmans <andi@zend.com>                                |
 +   |          Zeev Suraski <zeev@zend.com>                                |
 +   +----------------------------------------------------------------------+
 +*/
 +
 +/* $Id$ */
 +
 +#if 0
 +# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
 +#else
 +# define YYDEBUG(s, c)
 +#endif
 +
 +#include "zend_language_scanner_defs.h"
 +
 +#include <errno.h>
 +#include "zend.h"
 +#ifdef PHP_WIN32
 +# include <Winuser.h>
 +#endif
 +#include "zend_alloc.h"
 +#include <zend_language_parser.h>
 +#include "zend_compile.h"
 +#include "zend_language_scanner.h"
 +#include "zend_highlight.h"
 +#include "zend_constants.h"
 +#include "zend_variables.h"
 +#include "zend_operators.h"
 +#include "zend_API.h"
 +#include "zend_strtod.h"
 +#include "zend_exceptions.h"
 +#include "zend_virtual_cwd.h"
 +#include "tsrm_config_common.h"
 +
 +#define YYCTYPE   unsigned char
 +#define YYFILL(n) { if ((YYCURSOR + n) >= (YYLIMIT + ZEND_MMAP_AHEAD)) { return 0; } }
 +#define YYCURSOR  SCNG(yy_cursor)
 +#define YYLIMIT   SCNG(yy_limit)
 +#define YYMARKER  SCNG(yy_marker)
 +
 +#define YYGETCONDITION()  SCNG(yy_state)
 +#define YYSETCONDITION(s) SCNG(yy_state) = s
 +
 +#define STATE(name)  yyc##name
 +
 +/* emulate flex constructs */
 +#define BEGIN(state) YYSETCONDITION(STATE(state))
 +#define YYSTATE      YYGETCONDITION()
 +#define yytext       ((char*)SCNG(yy_text))
 +#define yyleng       SCNG(yy_leng)
 +#define yyless(x)    do { YYCURSOR = (unsigned char*)yytext + x; \
 +                          yyleng   = (unsigned int)x; } while(0)
 +#define yymore()     goto yymore_restart
 +
 +/* perform sanity check. If this message is triggered you should
 +   increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */
 +#define YYMAXFILL 16
 +#if ZEND_MMAP_AHEAD < YYMAXFILL
 +# error ZEND_MMAP_AHEAD should be greater than or equal to YYMAXFILL
 +#endif
 +
 +#ifdef HAVE_STDARG_H
 +# include <stdarg.h>
 +#endif
 +
 +#ifdef HAVE_UNISTD_H
 +# include <unistd.h>
 +#endif
 +
 +/* Globals Macros */
 +#define SCNG  LANG_SCNG
 +#ifdef ZTS
 +ZEND_API ts_rsrc_id language_scanner_globals_id;
 +#else
 +ZEND_API zend_php_scanner_globals language_scanner_globals;
 +#endif
 +
 +#define HANDLE_NEWLINES(s, l)                                                                                                 \
 +do {                                                                                                                                                  \
 +      char *p = (s), *boundary = p+(l);                                                                                       \
 +                                                                                                                                                              \
 +      while (p<boundary) {                                                                                                            \
 +              if (*p == '\n' || (*p == '\r' && (*(p+1) != '\n'))) {                                   \
 +                      CG(zend_lineno)++;                                                                                                      \
 +              }                                                                                                                                               \
 +              p++;                                                                                                                                    \
 +      }                                                                                                                                                       \
 +} while (0)
 +
 +#define HANDLE_NEWLINE(c) \
 +{ \
 +      if (c == '\n' || c == '\r') { \
 +              CG(zend_lineno)++; \
 +      } \
 +}
 +
 +/* To save initial string length after scanning to first variable */
 +#define SET_DOUBLE_QUOTES_SCANNED_LENGTH(len) SCNG(scanned_string_len) = (len)
 +#define GET_DOUBLE_QUOTES_SCANNED_LENGTH()    SCNG(scanned_string_len)
 +
 +#define IS_LABEL_START(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || (c) == '_' || (c) >= 0x7F)
 +
 +#define ZEND_IS_OCT(c)  ((c)>='0' && (c)<='7')
 +#define ZEND_IS_HEX(c)  (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F'))
 +
 +BEGIN_EXTERN_C()
 +
 +static size_t encoding_filter_script_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
 +{
 +      const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C);
 +      assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding));
 +      return zend_multibyte_encoding_converter(to, to_length, from, from_length, internal_encoding, LANG_SCNG(script_encoding) TSRMLS_CC);
 +}
 +
 +static size_t encoding_filter_script_to_intermediate(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
 +{
 +      return zend_multibyte_encoding_converter(to, to_length, from, from_length, zend_multibyte_encoding_utf8, LANG_SCNG(script_encoding) TSRMLS_CC);
 +}
 +
 +static size_t encoding_filter_intermediate_to_script(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
 +{
 +      return zend_multibyte_encoding_converter(to, to_length, from, from_length,
 +LANG_SCNG(script_encoding), zend_multibyte_encoding_utf8 TSRMLS_CC);
 +}
 +
 +static size_t encoding_filter_intermediate_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
 +{
 +      const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C);
 +      assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding));
 +      return zend_multibyte_encoding_converter(to, to_length, from, from_length,
 +internal_encoding, zend_multibyte_encoding_utf8 TSRMLS_CC);
 +}
 +
 +
 +static void _yy_push_state(int new_state TSRMLS_DC)
 +{
 +      zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int));
 +      YYSETCONDITION(new_state);
 +}
 +
 +#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm)
 +
 +static void yy_pop_state(TSRMLS_D)
 +{
 +      int *stack_state;
 +      zend_stack_top(&SCNG(state_stack), (void **) &stack_state);
 +      YYSETCONDITION(*stack_state);
 +      zend_stack_del_top(&SCNG(state_stack));
 +}
 +
 +static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC)
 +{
 +      YYCURSOR       = (YYCTYPE*)str;
 +      YYLIMIT        = YYCURSOR + len;
 +      if (!SCNG(yy_start)) {
 +              SCNG(yy_start) = YYCURSOR;
 +      }
 +}
 +
 +void startup_scanner(TSRMLS_D)
 +{
 +      CG(parse_error) = 0;
 +      CG(doc_comment) = NULL;
 +      zend_stack_init(&SCNG(state_stack));
 +      zend_ptr_stack_init(&SCNG(heredoc_label_stack));
 +}
 +
 +static void heredoc_label_dtor(zend_heredoc_label *heredoc_label) {
 +    efree(heredoc_label->label);
 +}
 +
 +void shutdown_scanner(TSRMLS_D)
 +{
 +      CG(parse_error) = 0;
 +      RESET_DOC_COMMENT();
 +      zend_stack_destroy(&SCNG(state_stack));
 +      zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1);
 +      zend_ptr_stack_destroy(&SCNG(heredoc_label_stack));
 +}
 +
 +ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
 +{
 +      lex_state->yy_leng   = SCNG(yy_leng);
 +      lex_state->yy_start  = SCNG(yy_start);
 +      lex_state->yy_text   = SCNG(yy_text);
 +      lex_state->yy_cursor = SCNG(yy_cursor);
 +      lex_state->yy_marker = SCNG(yy_marker);
 +      lex_state->yy_limit  = SCNG(yy_limit);
 +
 +      lex_state->state_stack = SCNG(state_stack);
 +      zend_stack_init(&SCNG(state_stack));
 +
 +      lex_state->heredoc_label_stack = SCNG(heredoc_label_stack);
 +      zend_ptr_stack_init(&SCNG(heredoc_label_stack));
 +
 +      lex_state->in = SCNG(yy_in);
 +      lex_state->yy_state = YYSTATE;
 +      lex_state->filename = zend_get_compiled_filename(TSRMLS_C);
 +      lex_state->lineno = CG(zend_lineno);
 +
 +      lex_state->script_org = SCNG(script_org);
 +      lex_state->script_org_size = SCNG(script_org_size);
 +      lex_state->script_filtered = SCNG(script_filtered);
 +      lex_state->script_filtered_size = SCNG(script_filtered_size);
 +      lex_state->input_filter = SCNG(input_filter);
 +      lex_state->output_filter = SCNG(output_filter);
 +      lex_state->script_encoding = SCNG(script_encoding);
 +}
 +
 +ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
 +{
 +      SCNG(yy_leng)   = lex_state->yy_leng;
 +      SCNG(yy_start)  = lex_state->yy_start;
 +      SCNG(yy_text)   = lex_state->yy_text;
 +      SCNG(yy_cursor) = lex_state->yy_cursor;
 +      SCNG(yy_marker) = lex_state->yy_marker;
 +      SCNG(yy_limit)  = lex_state->yy_limit;
 +
 +      zend_stack_destroy(&SCNG(state_stack));
 +      SCNG(state_stack) = lex_state->state_stack;
 +
 +      zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1);
 +      zend_ptr_stack_destroy(&SCNG(heredoc_label_stack));
 +      SCNG(heredoc_label_stack) = lex_state->heredoc_label_stack;
 +
 +      SCNG(yy_in) = lex_state->in;
 +      YYSETCONDITION(lex_state->yy_state);
 +      CG(zend_lineno) = lex_state->lineno;
 +      zend_restore_compiled_filename(lex_state->filename TSRMLS_CC);
 +
 +      if (SCNG(script_filtered)) {
 +              efree(SCNG(script_filtered));
 +              SCNG(script_filtered) = NULL;
 +      }
 +      SCNG(script_org) = lex_state->script_org;
 +      SCNG(script_org_size) = lex_state->script_org_size;
 +      SCNG(script_filtered) = lex_state->script_filtered;
 +      SCNG(script_filtered_size) = lex_state->script_filtered_size;
 +      SCNG(input_filter) = lex_state->input_filter;
 +      SCNG(output_filter) = lex_state->output_filter;
 +      SCNG(script_encoding) = lex_state->script_encoding;
 +
 +      RESET_DOC_COMMENT();
 +}
 +
 +ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)
 +{
 +      zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles);
 +      /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */
 +      file_handle->opened_path = NULL;
 +      if (file_handle->free_filename) {
 +              file_handle->filename = NULL;
 +      }
 +}
 +
 +#define BOM_UTF32_BE  "\x00\x00\xfe\xff"
 +#define       BOM_UTF32_LE    "\xff\xfe\x00\x00"
 +#define       BOM_UTF16_BE    "\xfe\xff"
 +#define       BOM_UTF16_LE    "\xff\xfe"
 +#define       BOM_UTF8                "\xef\xbb\xbf"
 +
 +static const zend_encoding *zend_multibyte_detect_utf_encoding(const unsigned char *script, size_t script_size TSRMLS_DC)
 +{
 +      const unsigned char *p;
 +      int wchar_size = 2;
 +      int le = 0;
 +
 +      /* utf-16 or utf-32? */
 +      p = script;
 +      while ((p-script) < script_size) {
 +              p = memchr(p, 0, script_size-(p-script)-2);
 +              if (!p) {
 +                      break;
 +              }
 +              if (*(p+1) == '\0' && *(p+2) == '\0') {
 +                      wchar_size = 4;
 +                      break;
 +              }
 +
 +              /* searching for UTF-32 specific byte orders, so this will do */
 +              p += 4;
 +      }
 +
 +      /* BE or LE? */
 +      p = script;
 +      while ((p-script) < script_size) {
 +              if (*p == '\0' && *(p+wchar_size-1) != '\0') {
 +                      /* BE */
 +                      le = 0;
 +                      break;
 +              } else if (*p != '\0' && *(p+wchar_size-1) == '\0') {
 +                      /* LE* */
 +                      le = 1;
 +                      break;
 +              }
 +              p += wchar_size;
 +      }
 +
 +      if (wchar_size == 2) {
 +              return le ? zend_multibyte_encoding_utf16le : zend_multibyte_encoding_utf16be;
 +      } else {
 +              return le ? zend_multibyte_encoding_utf32le : zend_multibyte_encoding_utf32be;
 +      }
 +
 +      return NULL;
 +}
 +
 +static const zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D)
 +{
 +      const zend_encoding *script_encoding = NULL;
 +      int bom_size;
 +      unsigned char *pos1, *pos2;
 +
 +      if (LANG_SCNG(script_org_size) < sizeof(BOM_UTF32_LE)-1) {
 +              return NULL;
 +      }
 +
 +      /* check out BOM */
 +      if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_BE, sizeof(BOM_UTF32_BE)-1)) {
 +              script_encoding = zend_multibyte_encoding_utf32be;
 +              bom_size = sizeof(BOM_UTF32_BE)-1;
 +      } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_LE, sizeof(BOM_UTF32_LE)-1)) {
 +              script_encoding = zend_multibyte_encoding_utf32le;
 +              bom_size = sizeof(BOM_UTF32_LE)-1;
 +      } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_BE, sizeof(BOM_UTF16_BE)-1)) {
 +              script_encoding = zend_multibyte_encoding_utf16be;
 +              bom_size = sizeof(BOM_UTF16_BE)-1;
 +      } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_LE, sizeof(BOM_UTF16_LE)-1)) {
 +              script_encoding = zend_multibyte_encoding_utf16le;
 +              bom_size = sizeof(BOM_UTF16_LE)-1;
 +      } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF8, sizeof(BOM_UTF8)-1)) {
 +              script_encoding = zend_multibyte_encoding_utf8;
 +              bom_size = sizeof(BOM_UTF8)-1;
 +      }
 +
 +      if (script_encoding) {
 +              /* remove BOM */
 +              LANG_SCNG(script_org) += bom_size;
 +              LANG_SCNG(script_org_size) -= bom_size;
 +
 +              return script_encoding;
 +      }
 +
 +      /* script contains NULL bytes -> auto-detection */
 +      if ((pos1 = memchr(LANG_SCNG(script_org), 0, LANG_SCNG(script_org_size)))) {
 +              /* check if the NULL byte is after the __HALT_COMPILER(); */
 +              pos2 = LANG_SCNG(script_org);
 +
 +              while (pos1 - pos2 >= sizeof("__HALT_COMPILER();")-1) {
 +                      pos2 = memchr(pos2, '_', pos1 - pos2);
 +                      if (!pos2) break;
 +                      pos2++;
 +                      if (strncasecmp((char*)pos2, "_HALT_COMPILER", sizeof("_HALT_COMPILER")-1) == 0) {
 +                              pos2 += sizeof("_HALT_COMPILER")-1;
 +                              while (*pos2 == ' '  ||
 +                                         *pos2 == '\t' ||
 +                                         *pos2 == '\r' ||
 +                                         *pos2 == '\n') {
 +                                      pos2++;
 +                              }
 +                              if (*pos2 == '(') {
 +                                      pos2++;
 +                                      while (*pos2 == ' '  ||
 +                                                 *pos2 == '\t' ||
 +                                                 *pos2 == '\r' ||
 +                                                 *pos2 == '\n') {
 +                                              pos2++;
 +                                      }
 +                                      if (*pos2 == ')') {
 +                                              pos2++;
 +                                              while (*pos2 == ' '  ||
 +                                                         *pos2 == '\t' ||
 +                                                         *pos2 == '\r' ||
 +                                                         *pos2 == '\n') {
 +                                                      pos2++;
 +                                              }
 +                                              if (*pos2 == ';') {
 +                                                      return NULL;
 +                                              }
 +                                      }
 +                              }
 +                      }
 +              }
 +              /* make best effort if BOM is missing */
 +              return zend_multibyte_detect_utf_encoding(LANG_SCNG(script_org), LANG_SCNG(script_org_size) TSRMLS_CC);
 +      }
 +
 +      return NULL;
 +}
 +
 +static const zend_encoding* zend_multibyte_find_script_encoding(TSRMLS_D)
 +{
 +      const zend_encoding *script_encoding;
 +
 +      if (CG(detect_unicode)) {
 +              /* check out bom(byte order mark) and see if containing wchars */
 +              script_encoding = zend_multibyte_detect_unicode(TSRMLS_C);
 +              if (script_encoding != NULL) {
 +                      /* bom or wchar detection is prior to 'script_encoding' option */
 +                      return script_encoding;
 +              }
 +      }
 +
 +      /* if no script_encoding specified, just leave alone */
 +      if (!CG(script_encoding_list) || !CG(script_encoding_list_size)) {
 +              return NULL;
 +      }
 +
 +      /* if multiple encodings specified, detect automagically */
 +      if (CG(script_encoding_list_size) > 1) {
 +              return zend_multibyte_encoding_detector(LANG_SCNG(script_org), LANG_SCNG(script_org_size), CG(script_encoding_list), CG(script_encoding_list_size) TSRMLS_CC);
 +      }
 +
 +      return CG(script_encoding_list)[0];
 +}
 +
 +ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding TSRMLS_DC)
 +{
 +      const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C);
 +      const zend_encoding *script_encoding = onetime_encoding ? onetime_encoding: zend_multibyte_find_script_encoding(TSRMLS_C);
 +
 +      if (!script_encoding) {
 +              return FAILURE;
 +      }
 +
 +      /* judge input/output filter */
 +      LANG_SCNG(script_encoding) = script_encoding;
 +      LANG_SCNG(input_filter) = NULL;
 +      LANG_SCNG(output_filter) = NULL;
 +
 +      if (!internal_encoding || LANG_SCNG(script_encoding) == internal_encoding) {
 +              if (!zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) {
 +                      /* and if not, work around w/ script_encoding -> utf-8 -> script_encoding conversion */
 +                      LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate;
 +                      LANG_SCNG(output_filter) = encoding_filter_intermediate_to_script;
 +              } else {
 +                      LANG_SCNG(input_filter) = NULL;
 +                      LANG_SCNG(output_filter) = NULL;
 +              }
 +              return SUCCESS;
 +      }
 +
 +      if (zend_multibyte_check_lexer_compatibility(internal_encoding)) {
 +              LANG_SCNG(input_filter) = encoding_filter_script_to_internal;
 +              LANG_SCNG(output_filter) = NULL;
 +      } else if (zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) {
 +              LANG_SCNG(input_filter) = NULL;
 +              LANG_SCNG(output_filter) = encoding_filter_script_to_internal;
 +      } else {
 +              /* both script and internal encodings are incompatible w/ flex */
 +              LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate;
 +              LANG_SCNG(output_filter) = encoding_filter_intermediate_to_internal;
 +      }
 +
 +      return 0;
 +}
 +
 +ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
 +{
 +      const char *file_path = NULL;
 +      char *buf;
 +      size_t size, offset = 0;
 +      zend_string *compiled_filename;
 +
 +      /* The shebang line was read, get the current position to obtain the buffer start */
 +      if (CG(start_lineno) == 2 && file_handle->type == ZEND_HANDLE_FP && file_handle->handle.fp) {
 +              if ((offset = ftell(file_handle->handle.fp)) == -1) {
 +                      offset = 0;
 +              }
 +      }
 +
 +      if (zend_stream_fixup(file_handle, &buf, &size TSRMLS_CC) == FAILURE) {
 +              return FAILURE;
 +      }
 +
 +      zend_llist_add_element(&CG(open_files), file_handle);
 +      if (file_handle->handle.stream.handle >= (void*)file_handle && file_handle->handle.stream.handle <= (void*)(file_handle+1)) {
 +              zend_file_handle *fh = (zend_file_handle*)zend_llist_get_last(&CG(open_files));
 +              size_t diff = (char*)file_handle->handle.stream.handle - (char*)file_handle;
 +              fh->handle.stream.handle = (void*)(((char*)fh) + diff);
 +              file_handle->handle.stream.handle = fh->handle.stream.handle;
 +      }
 +
 +      /* Reset the scanner for scanning the new file */
 +      SCNG(yy_in) = file_handle;
 +      SCNG(yy_start) = NULL;
 +
 +      if (size != -1) {
 +              if (CG(multibyte)) {
 +                      SCNG(script_org) = (unsigned char*)buf;
 +                      SCNG(script_org_size) = size;
 +                      SCNG(script_filtered) = NULL;
 +
 +                      zend_multibyte_set_filter(NULL TSRMLS_CC);
 +
 +                      if (SCNG(input_filter)) {
 +                              if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) {
 +                                      zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "
 +                                                      "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));
 +                              }
 +                              buf = (char*)SCNG(script_filtered);
 +                              size = SCNG(script_filtered_size);
 +                      }
 +              }
 +              SCNG(yy_start) = (unsigned char *)buf - offset;
 +              yy_scan_buffer(buf, size TSRMLS_CC);
 +      } else {
 +              zend_error_noreturn(E_COMPILE_ERROR, "zend_stream_mmap() failed");
 +      }
 +
 +      BEGIN(INITIAL);
 +
 +      if (file_handle->opened_path) {
 +              file_path = file_handle->opened_path;
 +      } else {
 +              file_path = file_handle->filename;
 +      }
 +
 +      compiled_filename = STR_INIT(file_path, strlen(file_path), 0);
 +      zend_set_compiled_filename(compiled_filename TSRMLS_CC);
 +      STR_RELEASE(compiled_filename);
 +
 +      if (CG(start_lineno)) {
 +              CG(zend_lineno) = CG(start_lineno);
 +              CG(start_lineno) = 0;
 +      } else {
 +              CG(zend_lineno) = 1;
 +      }
 +
 +      RESET_DOC_COMMENT();
 +      CG(increment_lineno) = 0;
 +      return SUCCESS;
 +}
 +END_EXTERN_C()
 +
 +
 +ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
 +{
 +      zend_lex_state original_lex_state;
 +      zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
 +      zend_op_array *original_active_op_array = CG(active_op_array);
 +      zend_op_array *retval=NULL;
 +      int compiler_result;
 +      zend_bool compilation_successful=0;
 +      znode retval_znode;
 +      zend_bool original_in_compilation = CG(in_compilation);
 +
 +      retval_znode.op_type = IS_CONST;
 +      ZVAL_LONG(&retval_znode.u.constant, 1);
 +
 +      zend_save_lexical_state(&original_lex_state TSRMLS_CC);
 +
 +      retval = op_array; /* success oriented */
 +
 +      if (open_file_for_scanning(file_handle TSRMLS_CC)==FAILURE) {
 +              if (type==ZEND_REQUIRE) {
 +                      zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename TSRMLS_CC);
 +                      zend_bailout();
 +              } else {
 +                      zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename TSRMLS_CC);
 +              }
 +              compilation_successful=0;
 +      } else {
 +              init_op_array(op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
 +              CG(in_compilation) = 1;
 +              CG(active_op_array) = op_array;
 +              zend_stack_push(&CG(context_stack), (void *) &CG(context), sizeof(CG(context)));
 +              zend_init_compiler_context(TSRMLS_C);
 +              compiler_result = zendparse(TSRMLS_C);
 +              zend_do_return(&retval_znode, 0 TSRMLS_CC);
 +              CG(in_compilation) = original_in_compilation;
 +              if (compiler_result != 0) { /* parser error */
 +                      zend_bailout();
 +              }
 +              compilation_successful=1;
 +      }
 +
 +      if (retval) {
 +              CG(active_op_array) = original_active_op_array;
 +              if (compilation_successful) {
 +                      pass_two(op_array TSRMLS_CC);
 +                      zend_release_labels(0 TSRMLS_CC);
 +              } else {
 +                      efree(op_array);
 +                      retval = NULL;
 +              }
 +      }
 +      zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
 +      return retval;
 +}
 +
 +
 +zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
 +{
 +      zend_file_handle file_handle;
 +      zval tmp;
 +      zend_op_array *retval;
 +      char *opened_path = NULL;
 +
 +      if (Z_TYPE_P(filename) != IS_STRING) {
 +              tmp = *filename;
 +              zval_copy_ctor(&tmp);
 +              convert_to_string(&tmp);
 +              filename = &tmp;
 +      }
 +      file_handle.filename = Z_STRVAL_P(filename);
 +      file_handle.free_filename = 0;
 +      file_handle.type = ZEND_HANDLE_FILENAME;
 +      file_handle.opened_path = NULL;
 +      file_handle.handle.fp = NULL;
 +
 +      retval = zend_compile_file(&file_handle, type TSRMLS_CC);
 +      if (retval && file_handle.handle.stream.handle) {
 +              if (!file_handle.opened_path) {
 +                      file_handle.opened_path = opened_path = estrndup(Z_STRVAL_P(filename), Z_STRLEN_P(filename));
 +              }
 +
 +              zend_hash_str_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path));
 +
 +              if (opened_path) {
 +                      efree(opened_path);
 +              }
 +      }
 +      zend_destroy_file_handle(&file_handle TSRMLS_CC);
 +
 +      if (filename==&tmp) {
 +              zval_dtor(&tmp);
 +      }
 +      return retval;
 +}
 +
 +ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_DC)
 +{
 +      char *buf;
 +      size_t size, old_len;
 +      zend_string *new_compiled_filename;
 +
 +      /* enforce ZEND_MMAP_AHEAD trailing NULLs for flex... */
 +      old_len = Z_STRLEN_P(str);
 +      Z_STR_P(str) = STR_REALLOC(Z_STR_P(str), old_len + ZEND_MMAP_AHEAD, 0);
 +      Z_TYPE_INFO_P(str) = IS_STRING_EX;
 +      memset(Z_STRVAL_P(str) + old_len, 0, ZEND_MMAP_AHEAD + 1);
 +
 +      SCNG(yy_in) = NULL;
 +      SCNG(yy_start) = NULL;
 +
 +      buf = Z_STRVAL_P(str);
 +      size = old_len;
 +
 +      if (CG(multibyte)) {
 +              SCNG(script_org) = (unsigned char*)buf;
 +              SCNG(script_org_size) = size;
 +              SCNG(script_filtered) = NULL;
 +
 +              zend_multibyte_set_filter(zend_multibyte_get_internal_encoding(TSRMLS_C) TSRMLS_CC);
 +
 +              if (SCNG(input_filter)) {
 +                      if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) {
 +                              zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "
 +                                              "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));
 +                      }
 +                      buf = (char*)SCNG(script_filtered);
 +                      size = SCNG(script_filtered_size);
 +              }
 +      }
 +
 +      yy_scan_buffer(buf, size TSRMLS_CC);
 +
 +      new_compiled_filename = STR_INIT(filename, strlen(filename), 0);
 +      zend_set_compiled_filename(new_compiled_filename TSRMLS_CC);
 +      STR_RELEASE(new_compiled_filename);
 +      CG(zend_lineno) = 1;
 +      CG(increment_lineno) = 0;
 +      RESET_DOC_COMMENT();
 +      return SUCCESS;
 +}
 +
 +
 +ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D)
 +{
 +      size_t offset = SCNG(yy_cursor) - SCNG(yy_start);
 +      if (SCNG(input_filter)) {
 +              size_t original_offset = offset, length = 0;
 +              do {
 +                      unsigned char *p = NULL;
 +                      if ((size_t)-1 == SCNG(input_filter)(&p, &length, SCNG(script_org), offset TSRMLS_CC)) {
 +                              return (size_t)-1;
 +                      }
 +                      efree(p);
 +                      if (length > original_offset) {
 +                              offset--;
 +                      } else if (length < original_offset) {
 +                              offset++;
 +                      }
 +              } while (original_offset != length);
 +      }
 +      return offset;
 +}
 +
 +
 +zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
 +{
 +      zend_lex_state original_lex_state;
 +      zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
 +      zend_op_array *original_active_op_array = CG(active_op_array);
 +      zend_op_array *retval;
 +      zval tmp;
 +      int compiler_result;
 +      zend_bool original_in_compilation = CG(in_compilation);
 +
 +      if (Z_STRLEN_P(source_string)==0) {
 +              efree(op_array);
 +              return NULL;
 +      }
 +
 +      CG(in_compilation) = 1;
 +
 +      ZVAL_DUP(&tmp, source_string);
 +      convert_to_string(&tmp);
 +      source_string = &tmp;
 +
 +      zend_save_lexical_state(&original_lex_state TSRMLS_CC);
 +      if (zend_prepare_string_for_scanning(source_string, filename TSRMLS_CC)==FAILURE) {
 +              efree(op_array);
 +              retval = NULL;
 +      } else {
 +              zend_bool orig_interactive = CG(interactive);
 +
 +              CG(interactive) = 0;
 +              init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
 +              CG(interactive) = orig_interactive;
 +              CG(active_op_array) = op_array;
 +              zend_stack_push(&CG(context_stack), (void *) &CG(context), sizeof(CG(context)));
 +              zend_init_compiler_context(TSRMLS_C);
 +              BEGIN(ST_IN_SCRIPTING);
 +              compiler_result = zendparse(TSRMLS_C);
 +
 +              if (SCNG(script_filtered)) {
 +                      efree(SCNG(script_filtered));
 +                      SCNG(script_filtered) = NULL;
 +              }
 +
 +              if (compiler_result != 0) {
 +                      CG(active_op_array) = original_active_op_array;
 +                      CG(unclean_shutdown)=1;
 +                      destroy_op_array(op_array TSRMLS_CC);
 +                      efree(op_array);
 +                      retval = NULL;
 +              } else {
 +                      zend_do_return(NULL, 0 TSRMLS_CC);
 +                      CG(active_op_array) = original_active_op_array;
 +                      pass_two(op_array TSRMLS_CC);
 +                      zend_release_labels(0 TSRMLS_CC);
 +                      retval = op_array;
 +              }
 +      }
 +      zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
 +      zval_dtor(&tmp);
 +      CG(in_compilation) = original_in_compilation;
 +      return retval;
 +}
 +
 +
 +BEGIN_EXTERN_C()
 +int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC)
 +{
 +      zend_lex_state original_lex_state;
 +      zend_file_handle file_handle;
 +
 +      file_handle.type = ZEND_HANDLE_FILENAME;
 +      file_handle.filename = filename;
 +      file_handle.free_filename = 0;
 +      file_handle.opened_path = NULL;
 +      zend_save_lexical_state(&original_lex_state TSRMLS_CC);
 +      if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) {
 +              zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename TSRMLS_CC);
 +              zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
 +              return FAILURE;
 +      }
 +      zend_highlight(syntax_highlighter_ini TSRMLS_CC);
 +      if (SCNG(script_filtered)) {
 +              efree(SCNG(script_filtered));
 +              SCNG(script_filtered) = NULL;
 +      }
 +      zend_destroy_file_handle(&file_handle TSRMLS_CC);
 +      zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
 +      return SUCCESS;
 +}
 +
 +int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC)
 +{
 +      zend_lex_state original_lex_state;
 +      zval tmp = *str;
 +
 +      str = &tmp;
 +      zval_copy_ctor(str);
 +      zend_save_lexical_state(&original_lex_state TSRMLS_CC);
 +      if (zend_prepare_string_for_scanning(str, str_name TSRMLS_CC)==FAILURE) {
 +              zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
 +              return FAILURE;
 +      }
 +      BEGIN(INITIAL);
 +      zend_highlight(syntax_highlighter_ini TSRMLS_CC);
 +      if (SCNG(script_filtered)) {
 +              efree(SCNG(script_filtered));
 +              SCNG(script_filtered) = NULL;
 +      }
 +      zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
 +      zval_dtor(str);
 +      return SUCCESS;
 +}
 +
 +ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding TSRMLS_DC)
 +{
 +      size_t length;
 +      unsigned char *new_yy_start;
 +
 +      /* convert and set */
 +      if (!SCNG(input_filter)) {
 +              if (SCNG(script_filtered)) {
 +                      efree(SCNG(script_filtered));
 +                      SCNG(script_filtered) = NULL;
 +              }
 +              SCNG(script_filtered_size) = 0;
 +              length = SCNG(script_org_size);
 +              new_yy_start = SCNG(script_org);
 +      } else {
 +              if ((size_t)-1 == SCNG(input_filter)(&new_yy_start, &length, SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) {
 +                      zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "
 +                                      "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));
 +              }
 +              if (SCNG(script_filtered)) {
 +                      efree(SCNG(script_filtered));
 +              }
 +              SCNG(script_filtered) = new_yy_start;
 +              SCNG(script_filtered_size) = length;
 +      }
 +
 +      SCNG(yy_cursor) = new_yy_start + (SCNG(yy_cursor) - SCNG(yy_start));
 +      SCNG(yy_marker) = new_yy_start + (SCNG(yy_marker) - SCNG(yy_start));
 +      SCNG(yy_text) = new_yy_start + (SCNG(yy_text) - SCNG(yy_start));
 +      SCNG(yy_limit) = new_yy_start + (SCNG(yy_limit) - SCNG(yy_start));
 +
 +      SCNG(yy_start) = new_yy_start;
 +}
 +
 +
 +// TODO: avoid reallocation ???
 +# define zend_copy_value(zendlval, yytext, yyleng) \
 +      if (SCNG(output_filter)) { \
 +              size_t sz = 0; \
 +              char *s = NULL; \
 +              SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \
 +              ZVAL_STRINGL(zendlval, s, sz); \
 +              efree(s); \
 +      } else { \
 +              ZVAL_STRINGL(zendlval, yytext, yyleng); \
 +      }
 +
 +// TODO: some extensions might need content, but we don't copy it intentional ???
 +#if 0
 +# define DUMMY_STRINGL(zendlval, yytext, yyleng) \
 +      ZVAL_STRINGL(zendlval, yytext, yyleng)
 +#else
 +# define DUMMY_STRINGL(zendlval, yytext, yyleng) \
 +      ZVAL_EMPTY_STRING(zendlval)
 +#endif
 +
 +static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quote_type TSRMLS_DC)
 +{
 +      register char *s, *t;
 +      char *end;
 +
 +      ZVAL_STRINGL(zendlval, str, len);
 +
 +      /* convert escape sequences */
 +      s = t = Z_STRVAL_P(zendlval);
 +      end = s+Z_STRLEN_P(zendlval);
 +      while (s<end) {
 +              if (*s=='\\') {
 +                      s++;
 +                      if (s >= end) {
 +                              *t++ = '\\';
 +                              break;
 +                      }
 +
 +                      switch(*s) {
 +                              case 'n':
 +                                      *t++ = '\n';
 +                                      Z_STRLEN_P(zendlval)--;
 +                                      break;
 +                              case 'r':
 +                                      *t++ = '\r';
 +                                      Z_STRLEN_P(zendlval)--;
 +                                      break;
 +                              case 't':
 +                                      *t++ = '\t';
 +                                      Z_STRLEN_P(zendlval)--;
 +                                      break;
 +                              case 'f':
 +                                      *t++ = '\f';
 +                                      Z_STRLEN_P(zendlval)--;
 +                                      break;
 +                              case 'v':
 +                                      *t++ = '\v';
 +                                      Z_STRLEN_P(zendlval)--;
 +                                      break;
 +                              case 'e':
 +#ifdef PHP_WIN32
 +                                      *t++ = VK_ESCAPE;
 +#else
 +                                      *t++ = '\e';
 +#endif
 +                                      Z_STRLEN_P(zendlval)--;
 +                                      break;
 +                              case '"':
 +                              case '`':
 +                                      if (*s != quote_type) {
 +                                              *t++ = '\\';
 +                                              *t++ = *s;
 +                                              break;
 +                                      }
 +                              case '\\':
 +                              case '$':
 +                                      *t++ = *s;
 +                                      Z_STRLEN_P(zendlval)--;
 +                                      break;
 +                              case 'x':
 +                              case 'X':
 +                                      if (ZEND_IS_HEX(*(s+1))) {
 +                                              char hex_buf[3] = { 0, 0, 0 };
 +
 +                                              Z_STRLEN_P(zendlval)--; /* for the 'x' */
 +
 +                                              hex_buf[0] = *(++s);
 +                                              Z_STRLEN_P(zendlval)--;
 +                                              if (ZEND_IS_HEX(*(s+1))) {
 +                                                      hex_buf[1] = *(++s);
 +                                                      Z_STRLEN_P(zendlval)--;
 +                                              }
 +                                              *t++ = (char) strtol(hex_buf, NULL, 16);
 +                                      } else {
 +                                              *t++ = '\\';
 +                                              *t++ = *s;
 +                                      }
 +                                      break;
 +                              default:
 +                                      /* check for an octal */
 +                                      if (ZEND_IS_OCT(*s)) {
 +                                              char octal_buf[4] = { 0, 0, 0, 0 };
 +
 +                                              octal_buf[0] = *s;
 +                                              Z_STRLEN_P(zendlval)--;
 +                                              if (ZEND_IS_OCT(*(s+1))) {
 +                                                      octal_buf[1] = *(++s);
 +                                                      Z_STRLEN_P(zendlval)--;
 +                                                      if (ZEND_IS_OCT(*(s+1))) {
 +                                                              octal_buf[2] = *(++s);
 +                                                              Z_STRLEN_P(zendlval)--;
 +                                                      }
 +                                              }
 +                                              *t++ = (char) strtol(octal_buf, NULL, 8);
 +                                      } else {
 +                                              *t++ = '\\';
 +                                              *t++ = *s;
 +                                      }
 +                                      break;
 +                      }
 +              } else {
 +                      *t++ = *s;
 +              }
 +
 +              if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
 +                      CG(zend_lineno)++;
 +              }
 +              s++;
 +      }
 +      *t = 0;
 +      if (SCNG(output_filter)) {
 +              size_t sz = 0;
 +              unsigned char *str;
 +              // TODO: avoid realocation ???
 +              s = Z_STRVAL_P(zendlval);
 +              SCNG(output_filter)(&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC);
 +              zval_ptr_dtor(zendlval);
 +              ZVAL_STRINGL(zendlval, str, sz);
 +              efree(str);
 +      }
 +}
 +
 +
 +int lex_scan(zval *zendlval TSRMLS_DC)
 +{
 +restart:
 +      SCNG(yy_text) = YYCURSOR;
 +
 +yymore_restart:
 +
 +
 +#line 1021 "Zend/zend_language_scanner.c"
 +{
 +      YYCTYPE yych;
 +      unsigned int yyaccept = 0;
 +      if (YYGETCONDITION() < 5) {
 +              if (YYGETCONDITION() < 2) {
 +                      if (YYGETCONDITION() < 1) {
 +                              goto yyc_ST_IN_SCRIPTING;
 +                      } else {
 +                              goto yyc_ST_LOOKING_FOR_PROPERTY;
 +                      }
 +              } else {
 +                      if (YYGETCONDITION() < 3) {
 +                              goto yyc_ST_BACKQUOTE;
 +                      } else {
 +                              if (YYGETCONDITION() < 4) {
 +                                      goto yyc_ST_DOUBLE_QUOTES;
 +                              } else {
 +                                      goto yyc_ST_HEREDOC;
 +                              }
 +                      }
 +              }
 +      } else {
 +              if (YYGETCONDITION() < 7) {
 +                      if (YYGETCONDITION() < 6) {
 +                              goto yyc_ST_LOOKING_FOR_VARNAME;
 +                      } else {
 +                              goto yyc_ST_VAR_OFFSET;
 +                      }
 +              } else {
 +                      if (YYGETCONDITION() < 8) {
 +                              goto yyc_INITIAL;
 +                      } else {
 +                              if (YYGETCONDITION() < 9) {
 +                                      goto yyc_ST_END_HEREDOC;
 +                              } else {
 +                                      goto yyc_ST_NOWDOC;
 +                              }
 +                      }
 +              }
 +      }
 +/* *********************************** */
 +yyc_INITIAL:
 +      {
 +              static const unsigned char yybm[] = {
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0, 128, 128,   0,   0, 128,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                      128,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +              };
 +
 +              YYDEBUG(0, *YYCURSOR);
 +              YYFILL(8);
 +              yych = *YYCURSOR;
 +              if (yych != '<') goto yy4;
 +              YYDEBUG(2, *YYCURSOR);
 +              yyaccept = 0;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= '?') {
 +                      if (yych == '%') goto yy7;
 +                      if (yych >= '?') goto yy5;
 +              } else {
 +                      if (yych <= 'S') {
 +                              if (yych >= 'S') goto yy9;
 +                      } else {
 +                              if (yych == 's') goto yy9;
 +                      }
 +              }
 +yy3:
 +              YYDEBUG(3, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1772 "Zend/zend_language_scanner.l"
++#line 1780 "Zend/zend_language_scanner.l"
 +              {
 +      if (YYCURSOR > YYLIMIT) {
 +              return 0;
 +      }
 +
 +inline_char_handler:
 +
 +      while (1) {
 +              YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR);
 +
 +              YYCURSOR = ptr ? ptr + 1 : YYLIMIT;
 +
 +              if (YYCURSOR < YYLIMIT) {
 +                      switch (*YYCURSOR) {
 +                              case '?':
 +                                      if (CG(short_tags) || !strncasecmp((char*)YYCURSOR + 1, "php", 3) || (*(YYCURSOR + 1) == '=')) { /* Assume [ \t\n\r] follows "php" */
 +                                              break;
 +                                      }
 +                                      continue;
 +                              case '%':
 +                                      if (CG(asp_tags)) {
 +                                              break;
 +                                      }
 +                                      continue;
 +                              case 's':
 +                              case 'S':
 +                                      /* Probably NOT an opening PHP <script> tag, so don't end the HTML chunk yet
 +                                       * If it is, the PHP <script> tag rule checks for any HTML scanned before it */
 +                                      YYCURSOR--;
 +                                      yymore();
 +                              default:
 +                                      continue;
 +                      }
 +
 +                      YYCURSOR--;
 +              }
 +
 +              break;
 +      }
 +
 +inline_html:
 +      yyleng = YYCURSOR - SCNG(yy_text);
 +
 +      if (SCNG(output_filter)) {
 +              int readsize;
 +              char *s = NULL;
 +              size_t sz = 0;
 +              // TODO: avoid reallocation ???
 +              readsize = SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC);
 +              ZVAL_STRINGL(zendlval, s, sz);
 +              efree(s);
 +              if (readsize < yyleng) {
 +                      yyless(readsize);
 +              }
 +      } else {
 +        ZVAL_STRINGL(zendlval, yytext, yyleng);
 +      }
 +      HANDLE_NEWLINES(yytext, yyleng);
 +      return T_INLINE_HTML;
 +}
 +#line 1181 "Zend/zend_language_scanner.c"
 +yy4:
 +              YYDEBUG(4, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy3;
 +yy5:
 +              YYDEBUG(5, *YYCURSOR);
 +              yyaccept = 1;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= 'O') {
 +                      if (yych == '=') goto yy45;
 +              } else {
 +                      if (yych <= 'P') goto yy47;
 +                      if (yych == 'p') goto yy47;
 +              }
 +yy6:
 +              YYDEBUG(6, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1762 "Zend/zend_language_scanner.l"
++#line 1770 "Zend/zend_language_scanner.l"
 +              {
 +      if (CG(short_tags)) {
 +              DUMMY_STRINGL(zendlval, yytext, yyleng);
 +              BEGIN(ST_IN_SCRIPTING);
 +              return T_OPEN_TAG;
 +      } else {
 +              goto inline_char_handler;
 +      }
 +}
 +#line 1209 "Zend/zend_language_scanner.c"
 +yy7:
 +              YYDEBUG(7, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) == '=') goto yy43;
 +              YYDEBUG(8, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1743 "Zend/zend_language_scanner.l"
++#line 1751 "Zend/zend_language_scanner.l"
 +              {
 +      if (CG(asp_tags)) {
 +              DUMMY_STRINGL(zendlval, yytext, yyleng);
 +              BEGIN(ST_IN_SCRIPTING);
 +              return T_OPEN_TAG;
 +      } else {
 +              goto inline_char_handler;
 +      }
 +}
 +#line 1226 "Zend/zend_language_scanner.c"
 +yy9:
 +              YYDEBUG(9, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'C') goto yy11;
 +              if (yych == 'c') goto yy11;
 +yy10:
 +              YYDEBUG(10, *YYCURSOR);
 +              YYCURSOR = YYMARKER;
 +              if (yyaccept <= 0) {
 +                      goto yy3;
 +              } else {
 +                      goto yy6;
 +              }
 +yy11:
 +              YYDEBUG(11, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'R') goto yy12;
 +              if (yych != 'r') goto yy10;
 +yy12:
 +              YYDEBUG(12, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'I') goto yy13;
 +              if (yych != 'i') goto yy10;
 +yy13:
 +              YYDEBUG(13, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'P') goto yy14;
 +              if (yych != 'p') goto yy10;
 +yy14:
 +              YYDEBUG(14, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'T') goto yy15;
 +              if (yych != 't') goto yy10;
 +yy15:
 +              YYDEBUG(15, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'L') goto yy10;
 +              if (yych == 'l') goto yy10;
 +              goto yy17;
 +yy16:
 +              YYDEBUG(16, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(8);
 +              yych = *YYCURSOR;
 +yy17:
 +              YYDEBUG(17, *YYCURSOR);
 +              if (yybm[0+yych] & 128) {
 +                      goto yy16;
 +              }
 +              if (yych == 'L') goto yy18;
 +              if (yych != 'l') goto yy10;
 +yy18:
 +              YYDEBUG(18, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'A') goto yy19;
 +              if (yych != 'a') goto yy10;
 +yy19:
 +              YYDEBUG(19, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'N') goto yy20;
 +              if (yych != 'n') goto yy10;
 +yy20:
 +              YYDEBUG(20, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'G') goto yy21;
 +              if (yych != 'g') goto yy10;
 +yy21:
 +              YYDEBUG(21, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'U') goto yy22;
 +              if (yych != 'u') goto yy10;
 +yy22:
 +              YYDEBUG(22, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'A') goto yy23;
 +              if (yych != 'a') goto yy10;
 +yy23:
 +              YYDEBUG(23, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'G') goto yy24;
 +              if (yych != 'g') goto yy10;
 +yy24:
 +              YYDEBUG(24, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'E') goto yy25;
 +              if (yych != 'e') goto yy10;
 +yy25:
 +              YYDEBUG(25, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
 +              YYDEBUG(26, *YYCURSOR);
 +              if (yych <= '\r') {
 +                      if (yych <= 0x08) goto yy10;
 +                      if (yych <= '\n') goto yy25;
 +                      if (yych <= '\f') goto yy10;
 +                      goto yy25;
 +              } else {
 +                      if (yych <= ' ') {
 +                              if (yych <= 0x1F) goto yy10;
 +                              goto yy25;
 +                      } else {
 +                              if (yych != '=') goto yy10;
 +                      }
 +              }
 +yy27:
 +              YYDEBUG(27, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(5);
 +              yych = *YYCURSOR;
 +              YYDEBUG(28, *YYCURSOR);
 +              if (yych <= '!') {
 +                      if (yych <= '\f') {
 +                              if (yych <= 0x08) goto yy10;
 +                              if (yych <= '\n') goto yy27;
 +                              goto yy10;
 +                      } else {
 +                              if (yych <= '\r') goto yy27;
 +                              if (yych == ' ') goto yy27;
 +                              goto yy10;
 +                      }
 +              } else {
 +                      if (yych <= 'O') {
 +                              if (yych <= '"') goto yy30;
 +                              if (yych == '\'') goto yy31;
 +                              goto yy10;
 +                      } else {
 +                              if (yych <= 'P') goto yy29;
 +                              if (yych != 'p') goto yy10;
 +                      }
 +              }
 +yy29:
 +              YYDEBUG(29, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'H') goto yy42;
 +              if (yych == 'h') goto yy42;
 +              goto yy10;
 +yy30:
 +              YYDEBUG(30, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'P') goto yy39;
 +              if (yych == 'p') goto yy39;
 +              goto yy10;
 +yy31:
 +              YYDEBUG(31, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'P') goto yy32;
 +              if (yych != 'p') goto yy10;
 +yy32:
 +              YYDEBUG(32, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'H') goto yy33;
 +              if (yych != 'h') goto yy10;
 +yy33:
 +              YYDEBUG(33, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'P') goto yy34;
 +              if (yych != 'p') goto yy10;
 +yy34:
 +              YYDEBUG(34, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '\'') goto yy10;
 +yy35:
 +              YYDEBUG(35, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
 +              YYDEBUG(36, *YYCURSOR);
 +              if (yych <= '\r') {
 +                      if (yych <= 0x08) goto yy10;
 +                      if (yych <= '\n') goto yy35;
 +                      if (yych <= '\f') goto yy10;
 +                      goto yy35;
 +              } else {
 +                      if (yych <= ' ') {
 +                              if (yych <= 0x1F) goto yy10;
 +                              goto yy35;
 +                      } else {
 +                              if (yych != '>') goto yy10;
 +                      }
 +              }
 +              YYDEBUG(37, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(38, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1709 "Zend/zend_language_scanner.l"
++#line 1717 "Zend/zend_language_scanner.l"
 +              {
 +      YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));
 +
 +      if (bracket != SCNG(yy_text)) {
 +              /* Handle previously scanned HTML, as possible <script> tags found are assumed to not be PHP's */
 +              YYCURSOR = bracket;
 +              goto inline_html;
 +      }
 +
 +      HANDLE_NEWLINES(yytext, yyleng);
 +      DUMMY_STRINGL(zendlval, yytext, yyleng);
 +      BEGIN(ST_IN_SCRIPTING);
 +      return T_OPEN_TAG;
 +}
 +#line 1427 "Zend/zend_language_scanner.c"
 +yy39:
 +              YYDEBUG(39, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'H') goto yy40;
 +              if (yych != 'h') goto yy10;
 +yy40:
 +              YYDEBUG(40, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'P') goto yy41;
 +              if (yych != 'p') goto yy10;
 +yy41:
 +              YYDEBUG(41, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '"') goto yy35;
 +              goto yy10;
 +yy42:
 +              YYDEBUG(42, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'P') goto yy35;
 +              if (yych == 'p') goto yy35;
 +              goto yy10;
 +yy43:
 +              YYDEBUG(43, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(44, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1725 "Zend/zend_language_scanner.l"
++#line 1733 "Zend/zend_language_scanner.l"
 +              {
 +      if (CG(asp_tags)) {
 +              DUMMY_STRINGL(zendlval, yytext, yyleng);
 +              BEGIN(ST_IN_SCRIPTING);
 +              return T_OPEN_TAG_WITH_ECHO;
 +      } else {
 +              goto inline_char_handler;
 +      }
 +}
 +#line 1464 "Zend/zend_language_scanner.c"
 +yy45:
 +              YYDEBUG(45, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(46, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1736 "Zend/zend_language_scanner.l"
++#line 1744 "Zend/zend_language_scanner.l"
 +              {
 +      DUMMY_STRINGL(zendlval, yytext, yyleng);
 +      BEGIN(ST_IN_SCRIPTING);
 +      return T_OPEN_TAG_WITH_ECHO;
 +}
 +#line 1476 "Zend/zend_language_scanner.c"
 +yy47:
 +              YYDEBUG(47, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'H') goto yy48;
 +              if (yych != 'h') goto yy10;
 +yy48:
 +              YYDEBUG(48, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'P') goto yy49;
 +              if (yych != 'p') goto yy10;
 +yy49:
 +              YYDEBUG(49, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '\f') {
 +                      if (yych <= 0x08) goto yy10;
 +                      if (yych >= '\v') goto yy10;
 +              } else {
 +                      if (yych <= '\r') goto yy52;
 +                      if (yych != ' ') goto yy10;
 +              }
 +yy50:
 +              YYDEBUG(50, *YYCURSOR);
 +              ++YYCURSOR;
 +yy51:
 +              YYDEBUG(51, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1754 "Zend/zend_language_scanner.l"
++#line 1762 "Zend/zend_language_scanner.l"
 +              {
 +      DUMMY_STRINGL(zendlval, yytext, yyleng);
 +      HANDLE_NEWLINE(yytext[yyleng-1]);
 +      BEGIN(ST_IN_SCRIPTING);
 +      return T_OPEN_TAG;
 +}
 +#line 1510 "Zend/zend_language_scanner.c"
 +yy52:
 +              YYDEBUG(52, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) == '\n') goto yy50;
 +              goto yy51;
 +      }
 +/* *********************************** */
 +yyc_ST_BACKQUOTE:
 +      {
 +              static const unsigned char yybm[] = {
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128,   0,   0,   0,   0,   0,   0, 
 +                        0, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128,   0,   0,   0,   0, 128, 
 +                        0, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128,   0,   0,   0,   0, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +              };
 +              YYDEBUG(53, *YYCURSOR);
 +              YYFILL(2);
 +              yych = *YYCURSOR;
 +              if (yych <= '_') {
 +                      if (yych != '$') goto yy60;
 +              } else {
 +                      if (yych <= '`') goto yy58;
 +                      if (yych == '{') goto yy57;
 +                      goto yy60;
 +              }
 +              YYDEBUG(55, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '_') {
 +                      if (yych <= '@') goto yy56;
 +                      if (yych <= 'Z') goto yy63;
 +                      if (yych >= '_') goto yy63;
 +              } else {
 +                      if (yych <= 'z') {
 +                              if (yych >= 'a') goto yy63;
 +                      } else {
 +                              if (yych <= '{') goto yy66;
 +                              if (yych >= 0x7F) goto yy63;
 +                      }
 +              }
 +yy56:
 +              YYDEBUG(56, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2215 "Zend/zend_language_scanner.l"
++#line 2223 "Zend/zend_language_scanner.l"
 +              {
 +      if (YYCURSOR > YYLIMIT) {
 +              return 0;
 +      }
 +      if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
 +              YYCURSOR++;
 +      }
 +
 +      while (YYCURSOR < YYLIMIT) {
 +              switch (*YYCURSOR++) {
 +                      case '`':
 +                              break;
 +                      case '$':
 +                              if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
 +                                      break;
 +                              }
 +                              continue;
 +                      case '{':
 +                              if (*YYCURSOR == '$') {
 +                                      break;
 +                              }
 +                              continue;
 +                      case '\\':
 +                              if (YYCURSOR < YYLIMIT) {
 +                                      YYCURSOR++;
 +                              }
 +                              /* fall through */
 +                      default:
 +                              continue;
 +              }
 +
 +              YYCURSOR--;
 +              break;
 +      }
 +
 +      yyleng = YYCURSOR - SCNG(yy_text);
 +
 +      zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);
 +      return T_ENCAPSED_AND_WHITESPACE;
 +}
 +#line 1622 "Zend/zend_language_scanner.c"
 +yy57:
 +              YYDEBUG(57, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '$') goto yy61;
 +              goto yy56;
 +yy58:
 +              YYDEBUG(58, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(59, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2159 "Zend/zend_language_scanner.l"
++#line 2167 "Zend/zend_language_scanner.l"
 +              {
 +      BEGIN(ST_IN_SCRIPTING);
 +      return '`';
 +}
 +#line 1638 "Zend/zend_language_scanner.c"
 +yy60:
 +              YYDEBUG(60, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy56;
 +yy61:
 +              YYDEBUG(61, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(62, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2146 "Zend/zend_language_scanner.l"
++#line 2154 "Zend/zend_language_scanner.l"
 +              {
 +      Z_LVAL_P(zendlval) = (long) '{';
 +      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 +      yyless(1);
 +      return T_CURLY_OPEN;
 +}
 +#line 1655 "Zend/zend_language_scanner.c"
 +yy63:
 +              YYDEBUG(63, *YYCURSOR);
 +              yyaccept = 0;
 +              YYMARKER = ++YYCURSOR;
 +              YYFILL(3);
 +              yych = *YYCURSOR;
 +              YYDEBUG(64, *YYCURSOR);
 +              if (yybm[0+yych] & 128) {
 +                      goto yy63;
 +              }
 +              if (yych == '-') goto yy68;
 +              if (yych == '[') goto yy70;
 +yy65:
 +              YYDEBUG(65, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1853 "Zend/zend_language_scanner.l"
++#line 1861 "Zend/zend_language_scanner.l"
 +              {
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
 +#line 1676 "Zend/zend_language_scanner.c"
 +yy66:
 +              YYDEBUG(66, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(67, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1476 "Zend/zend_language_scanner.l"
++#line 1484 "Zend/zend_language_scanner.l"
 +              {
 +      yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
 +      return T_DOLLAR_OPEN_CURLY_BRACES;
 +}
 +#line 1687 "Zend/zend_language_scanner.c"
 +yy68:
 +              YYDEBUG(68, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '>') goto yy72;
 +yy69:
 +              YYDEBUG(69, *YYCURSOR);
 +              YYCURSOR = YYMARKER;
 +              goto yy65;
 +yy70:
 +              YYDEBUG(70, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(71, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1846 "Zend/zend_language_scanner.l"
++#line 1854 "Zend/zend_language_scanner.l"
 +              {
 +      yyless(yyleng - 1);
 +      yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
 +#line 1708 "Zend/zend_language_scanner.c"
 +yy72:
 +              YYDEBUG(72, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '_') {
 +                      if (yych <= '@') goto yy69;
 +                      if (yych <= 'Z') goto yy73;
 +                      if (yych <= '^') goto yy69;
 +              } else {
 +                      if (yych <= '`') goto yy69;
 +                      if (yych <= 'z') goto yy73;
 +                      if (yych <= '~') goto yy69;
 +              }
 +yy73:
 +              YYDEBUG(73, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(74, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1837 "Zend/zend_language_scanner.l"
++#line 1845 "Zend/zend_language_scanner.l"
 +              {
 +      yyless(yyleng - 3);
 +      yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
 +#line 1733 "Zend/zend_language_scanner.c"
 +      }
 +/* *********************************** */
 +yyc_ST_DOUBLE_QUOTES:
 +      {
 +              static const unsigned char yybm[] = {
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128,   0,   0,   0,   0,   0,   0, 
 +                        0, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128,   0,   0,   0,   0, 128, 
 +                        0, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128,   0,   0,   0,   0, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +              };
 +              YYDEBUG(75, *YYCURSOR);
 +              YYFILL(2);
 +              yych = *YYCURSOR;
 +              if (yych <= '#') {
 +                      if (yych == '"') goto yy80;
 +                      goto yy82;
 +              } else {
 +                      if (yych <= '$') goto yy77;
 +                      if (yych == '{') goto yy79;
 +                      goto yy82;
 +              }
 +yy77:
 +              YYDEBUG(77, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '_') {
 +                      if (yych <= '@') goto yy78;
 +                      if (yych <= 'Z') goto yy85;
 +                      if (yych >= '_') goto yy85;
 +              } else {
 +                      if (yych <= 'z') {
 +                              if (yych >= 'a') goto yy85;
 +                      } else {
 +                              if (yych <= '{') goto yy88;
 +                              if (yych >= 0x7F) goto yy85;
 +                      }
 +              }
 +yy78:
 +              YYDEBUG(78, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2165 "Zend/zend_language_scanner.l"
++#line 2173 "Zend/zend_language_scanner.l"
 +              {
 +      if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
 +              YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
 +              SET_DOUBLE_QUOTES_SCANNED_LENGTH(0);
 +
 +              goto double_quotes_scan_done;
 +      }
 +
 +      if (YYCURSOR > YYLIMIT) {
 +              return 0;
 +      }
 +      if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
 +              YYCURSOR++;
 +      }
 +
 +      while (YYCURSOR < YYLIMIT) {
 +              switch (*YYCURSOR++) {
 +                      case '"':
 +                              break;
 +                      case '$':
 +                              if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
 +                                      break;
 +                              }
 +                              continue;
 +                      case '{':
 +                              if (*YYCURSOR == '$') {
 +                                      break;
 +                              }
 +                              continue;
 +                      case '\\':
 +                              if (YYCURSOR < YYLIMIT) {
 +                                      YYCURSOR++;
 +                              }
 +                              /* fall through */
 +                      default:
 +                              continue;
 +              }
 +
 +              YYCURSOR--;
 +              break;
 +      }
 +
 +double_quotes_scan_done:
 +      yyleng = YYCURSOR - SCNG(yy_text);
 +
 +      zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
 +      return T_ENCAPSED_AND_WHITESPACE;
 +}
 +#line 1850 "Zend/zend_language_scanner.c"
 +yy79:
 +              YYDEBUG(79, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '$') goto yy83;
 +              goto yy78;
 +yy80:
 +              YYDEBUG(80, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(81, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2154 "Zend/zend_language_scanner.l"
++#line 2162 "Zend/zend_language_scanner.l"
 +              {
 +      BEGIN(ST_IN_SCRIPTING);
 +      return '"';
 +}
 +#line 1866 "Zend/zend_language_scanner.c"
 +yy82:
 +              YYDEBUG(82, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy78;
 +yy83:
 +              YYDEBUG(83, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(84, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2146 "Zend/zend_language_scanner.l"
++#line 2154 "Zend/zend_language_scanner.l"
 +              {
 +      Z_LVAL_P(zendlval) = (long) '{';
 +      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 +      yyless(1);
 +      return T_CURLY_OPEN;
 +}
 +#line 1883 "Zend/zend_language_scanner.c"
 +yy85:
 +              YYDEBUG(85, *YYCURSOR);
 +              yyaccept = 0;
 +              YYMARKER = ++YYCURSOR;
 +              YYFILL(3);
 +              yych = *YYCURSOR;
 +              YYDEBUG(86, *YYCURSOR);
 +              if (yybm[0+yych] & 128) {
 +                      goto yy85;
 +              }
 +              if (yych == '-') goto yy90;
 +              if (yych == '[') goto yy92;
 +yy87:
 +              YYDEBUG(87, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1853 "Zend/zend_language_scanner.l"
++#line 1861 "Zend/zend_language_scanner.l"
 +              {
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
 +#line 1904 "Zend/zend_language_scanner.c"
 +yy88:
 +              YYDEBUG(88, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(89, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1476 "Zend/zend_language_scanner.l"
++#line 1484 "Zend/zend_language_scanner.l"
 +              {
 +      yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
 +      return T_DOLLAR_OPEN_CURLY_BRACES;
 +}
 +#line 1915 "Zend/zend_language_scanner.c"
 +yy90:
 +              YYDEBUG(90, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '>') goto yy94;
 +yy91:
 +              YYDEBUG(91, *YYCURSOR);
 +              YYCURSOR = YYMARKER;
 +              goto yy87;
 +yy92:
 +              YYDEBUG(92, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(93, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1846 "Zend/zend_language_scanner.l"
++#line 1854 "Zend/zend_language_scanner.l"
 +              {
 +      yyless(yyleng - 1);
 +      yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
 +#line 1936 "Zend/zend_language_scanner.c"
 +yy94:
 +              YYDEBUG(94, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '_') {
 +                      if (yych <= '@') goto yy91;
 +                      if (yych <= 'Z') goto yy95;
 +                      if (yych <= '^') goto yy91;
 +              } else {
 +                      if (yych <= '`') goto yy91;
 +                      if (yych <= 'z') goto yy95;
 +                      if (yych <= '~') goto yy91;
 +              }
 +yy95:
 +              YYDEBUG(95, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(96, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1837 "Zend/zend_language_scanner.l"
++#line 1845 "Zend/zend_language_scanner.l"
 +              {
 +      yyless(yyleng - 3);
 +      yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
 +#line 1961 "Zend/zend_language_scanner.c"
 +      }
 +/* *********************************** */
 +yyc_ST_END_HEREDOC:
 +      YYDEBUG(97, *YYCURSOR);
 +      YYFILL(1);
 +      yych = *YYCURSOR;
 +      YYDEBUG(99, *YYCURSOR);
 +      ++YYCURSOR;
 +      YYDEBUG(100, *YYCURSOR);
 +      yyleng = YYCURSOR - SCNG(yy_text);
- #line 2132 "Zend/zend_language_scanner.l"
++#line 2140 "Zend/zend_language_scanner.l"
 +      {
 +      zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
 +
 +      YYCURSOR += heredoc_label->length - 1;
 +      yyleng = heredoc_label->length;
 +
 +      heredoc_label_dtor(heredoc_label);
 +      efree(heredoc_label);
 +
 +      BEGIN(ST_IN_SCRIPTING);
 +      return T_END_HEREDOC;
 +}
 +#line 1985 "Zend/zend_language_scanner.c"
 +/* *********************************** */
 +yyc_ST_HEREDOC:
 +      {
 +              static const unsigned char yybm[] = {
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128,   0,   0,   0,   0,   0,   0, 
 +                        0, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128,   0,   0,   0,   0, 128, 
 +                        0, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128,   0,   0,   0,   0, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +              };
 +              YYDEBUG(101, *YYCURSOR);
 +              YYFILL(2);
 +              yych = *YYCURSOR;
 +              if (yych == '$') goto yy103;
 +              if (yych == '{') goto yy105;
 +              goto yy106;
 +yy103:
 +              YYDEBUG(103, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '_') {
 +                      if (yych <= '@') goto yy104;
 +                      if (yych <= 'Z') goto yy109;
 +                      if (yych >= '_') goto yy109;
 +              } else {
 +                      if (yych <= 'z') {
 +                              if (yych >= 'a') goto yy109;
 +                      } else {
 +                              if (yych <= '{') goto yy112;
 +                              if (yych >= 0x7F) goto yy109;
 +                      }
 +              }
 +yy104:
 +              YYDEBUG(104, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2257 "Zend/zend_language_scanner.l"
++#line 2265 "Zend/zend_language_scanner.l"
 +              {
 +      int newline = 0;
 +
 +      zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));
 +
 +      if (YYCURSOR > YYLIMIT) {
 +              return 0;
 +      }
 +
 +      YYCURSOR--;
 +
 +      while (YYCURSOR < YYLIMIT) {
 +              switch (*YYCURSOR++) {
 +                      case '\r':
 +                              if (*YYCURSOR == '\n') {
 +                                      YYCURSOR++;
 +                              }
 +                              /* fall through */
 +                      case '\n':
 +                              /* Check for ending label on the next line */
 +                              if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {
 +                                      YYCTYPE *end = YYCURSOR + heredoc_label->length;
 +
 +                                      if (*end == ';') {
 +                                              end++;
 +                                      }
 +
 +                                      if (*end == '\n' || *end == '\r') {
 +                                              /* newline before label will be subtracted from returned text, but
 +                                               * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
 +                                              if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') {
 +                                                      newline = 2; /* Windows newline */
 +                                              } else {
 +                                                      newline = 1;
 +                                              }
 +
 +                                              CG(increment_lineno) = 1; /* For newline before label */
 +                                              BEGIN(ST_END_HEREDOC);
 +
 +                                              goto heredoc_scan_done;
 +                                      }
 +                              }
 +                              continue;
 +                      case '$':
 +                              if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
 +                                      break;
 +                              }
 +                              continue;
 +                      case '{':
 +                              if (*YYCURSOR == '$') {
 +                                      break;
 +                              }
 +                              continue;
 +                      case '\\':
 +                              if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') {
 +                                      YYCURSOR++;
 +                              }
 +                              /* fall through */
 +                      default:
 +                              continue;
 +              }
 +
 +              YYCURSOR--;
 +              break;
 +      }
 +
 +heredoc_scan_done:
 +      yyleng = YYCURSOR - SCNG(yy_text);
 +
 +      zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0 TSRMLS_CC);
 +      return T_ENCAPSED_AND_WHITESPACE;
 +}
 +#line 2120 "Zend/zend_language_scanner.c"
 +yy105:
 +              YYDEBUG(105, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '$') goto yy107;
 +              goto yy104;
 +yy106:
 +              YYDEBUG(106, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy104;
 +yy107:
 +              YYDEBUG(107, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(108, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2146 "Zend/zend_language_scanner.l"
++#line 2154 "Zend/zend_language_scanner.l"
 +              {
 +      Z_LVAL_P(zendlval) = (long) '{';
 +      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 +      yyless(1);
 +      return T_CURLY_OPEN;
 +}
 +#line 2142 "Zend/zend_language_scanner.c"
 +yy109:
 +              YYDEBUG(109, *YYCURSOR);
 +              yyaccept = 0;
 +              YYMARKER = ++YYCURSOR;
 +              YYFILL(3);
 +              yych = *YYCURSOR;
 +              YYDEBUG(110, *YYCURSOR);
 +              if (yybm[0+yych] & 128) {
 +                      goto yy109;
 +              }
 +              if (yych == '-') goto yy114;
 +              if (yych == '[') goto yy116;
 +yy111:
 +              YYDEBUG(111, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1853 "Zend/zend_language_scanner.l"
++#line 1861 "Zend/zend_language_scanner.l"
 +              {
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
 +#line 2163 "Zend/zend_language_scanner.c"
 +yy112:
 +              YYDEBUG(112, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(113, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1476 "Zend/zend_language_scanner.l"
++#line 1484 "Zend/zend_language_scanner.l"
 +              {
 +      yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
 +      return T_DOLLAR_OPEN_CURLY_BRACES;
 +}
 +#line 2174 "Zend/zend_language_scanner.c"
 +yy114:
 +              YYDEBUG(114, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '>') goto yy118;
 +yy115:
 +              YYDEBUG(115, *YYCURSOR);
 +              YYCURSOR = YYMARKER;
 +              goto yy111;
 +yy116:
 +              YYDEBUG(116, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(117, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1846 "Zend/zend_language_scanner.l"
++#line 1854 "Zend/zend_language_scanner.l"
 +              {
 +      yyless(yyleng - 1);
 +      yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
 +#line 2195 "Zend/zend_language_scanner.c"
 +yy118:
 +              YYDEBUG(118, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '_') {
 +                      if (yych <= '@') goto yy115;
 +                      if (yych <= 'Z') goto yy119;
 +                      if (yych <= '^') goto yy115;
 +              } else {
 +                      if (yych <= '`') goto yy115;
 +                      if (yych <= 'z') goto yy119;
 +                      if (yych <= '~') goto yy115;
 +              }
 +yy119:
 +              YYDEBUG(119, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(120, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1837 "Zend/zend_language_scanner.l"
++#line 1845 "Zend/zend_language_scanner.l"
 +              {
 +      yyless(yyleng - 3);
 +      yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
 +#line 2220 "Zend/zend_language_scanner.c"
 +      }
 +/* *********************************** */
 +yyc_ST_IN_SCRIPTING:
 +      {
 +              static const unsigned char yybm[] = {
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0, 192,  64,   0,   0,  64,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                      192,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                       60,  60,  44,  44,  44,  44,  44,  44, 
 +                       44,  44,   0,   0,   0,   0,   0,   0, 
 +                        0,  36,  36,  36,  36,  36,  36,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   0,   0,   0,   0,   4, 
 +                        0,  36,  36,  36,  36,  36,  36,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   0,   0,   0,   0,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +                        4,   4,   4,   4,   4,   4,   4,   4, 
 +              };
 +              YYDEBUG(121, *YYCURSOR);
 +              YYFILL(16);
 +              yych = *YYCURSOR;
 +              YYDEBUG(-1, yych);
 +              switch (yych) {
 +              case 0x00:
 +              case 0x01:
 +              case 0x02:
 +              case 0x03:
 +              case 0x04:
 +              case 0x05:
 +              case 0x06:
 +              case 0x07:
 +              case 0x08:
 +              case '\v':
 +              case '\f':
 +              case 0x0E:
 +              case 0x0F:
 +              case 0x10:
 +              case 0x11:
 +              case 0x12:
 +              case 0x13:
 +              case 0x14:
 +              case 0x15:
 +              case 0x16:
 +              case 0x17:
 +              case 0x18:
 +              case 0x19:
 +              case 0x1A:
 +              case 0x1B:
 +              case 0x1C:
 +              case 0x1D:
 +              case 0x1E:
 +              case 0x1F:      goto yy184;
 +              case '\t':
 +              case '\n':
 +              case '\r':
 +              case ' ':       goto yy140;
 +              case '!':       goto yy154;
 +              case '"':       goto yy180;
 +              case '#':       goto yy176;
 +              case '$':       goto yy165;
 +              case '%':       goto yy159;
 +              case '&':       goto yy160;
 +              case '\'':      goto yy178;
 +              case '(':       goto yy148;
 +              case ')':
 +              case ',':
 +              case ';':
 +              case '@':
 +              case '[':
 +              case ']':
 +              case '~':       goto yy166;
 +              case '*':       goto yy157;
 +              case '+':       goto yy153;
 +              case '-':       goto yy138;
 +              case '.':       goto yy145;
 +              case '/':       goto yy158;
 +              case '0':       goto yy172;
 +              case '1':
 +              case '2':
 +              case '3':
 +              case '4':
 +              case '5':
 +              case '6':
 +              case '7':
 +              case '8':
 +              case '9':       goto yy174;
 +              case ':':       goto yy142;
 +              case '<':       goto yy155;
 +              case '=':       goto yy151;
 +              case '>':       goto yy156;
 +              case '?':       goto yy167;
 +              case 'A':
 +              case 'a':       goto yy133;
 +              case 'B':
 +              case 'b':       goto yy135;
 +              case 'C':
 +              case 'c':       goto yy127;
 +              case 'D':
 +              case 'd':       goto yy125;
 +              case 'E':
 +              case 'e':       goto yy123;
 +              case 'F':
 +              case 'f':       goto yy126;
 +              case 'G':
 +              case 'g':       goto yy136;
 +              case 'I':
 +              case 'i':       goto yy131;
 +              case 'L':
 +              case 'l':       goto yy152;
 +              case 'N':
 +              case 'n':       goto yy146;
 +              case 'O':
 +              case 'o':       goto yy163;
 +              case 'P':
 +              case 'p':       goto yy137;
 +              case 'R':
 +              case 'r':       goto yy128;
 +              case 'S':
 +              case 's':       goto yy134;
 +              case 'T':
 +              case 't':       goto yy130;
 +              case 'U':
 +              case 'u':       goto yy149;
 +              case 'V':
 +              case 'v':       goto yy147;
 +              case 'W':
 +              case 'w':       goto yy132;
 +              case 'X':
 +              case 'x':       goto yy164;
 +              case 'Y':
 +              case 'y':       goto yy129;
 +              case '\\':      goto yy143;
 +              case '^':       goto yy162;
 +              case '_':       goto yy150;
 +              case '`':       goto yy182;
 +              case '{':       goto yy168;
 +              case '|':       goto yy161;
 +              case '}':       goto yy170;
 +              default:        goto yy175;
 +              }
 +yy123:
 +              YYDEBUG(123, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(-1, yych);
 +              switch ((yych = *YYCURSOR)) {
 +              case 'C':
-               case 'c':       goto yy738;
++              case 'c':       goto yy742;
 +              case 'L':
-               case 'l':       goto yy739;
++              case 'l':       goto yy743;
 +              case 'M':
-               case 'm':       goto yy740;
++              case 'm':       goto yy744;
 +              case 'N':
-               case 'n':       goto yy741;
++              case 'n':       goto yy745;
 +              case 'V':
-               case 'v':       goto yy742;
++              case 'v':       goto yy746;
 +              case 'X':
-               case 'x':       goto yy743;
++              case 'x':       goto yy747;
 +              default:        goto yy187;
 +              }
 +yy124:
 +              YYDEBUG(124, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1875 "Zend/zend_language_scanner.l"
++#line 1883 "Zend/zend_language_scanner.l"
 +              {
 +      zend_copy_value(zendlval, yytext, yyleng);
 +      return T_STRING;
 +}
 +#line 2408 "Zend/zend_language_scanner.c"
 +yy125:
 +              YYDEBUG(125, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'O') {
 +                      if (yych <= 'H') {
-                               if (yych == 'E') goto yy720;
++                              if (yych == 'E') goto yy724;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 'I') goto yy721;
++                              if (yych <= 'I') goto yy725;
 +                              if (yych <= 'N') goto yy187;
-                               goto yy722;
++                              goto yy726;
 +                      }
 +              } else {
 +                      if (yych <= 'h') {
-                               if (yych == 'e') goto yy720;
++                              if (yych == 'e') goto yy724;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 'i') goto yy721;
-                               if (yych == 'o') goto yy722;
++                              if (yych <= 'i') goto yy725;
++                              if (yych == 'o') goto yy726;
 +                              goto yy187;
 +                      }
 +              }
 +yy126:
 +              YYDEBUG(126, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'U') {
 +                      if (yych <= 'N') {
-                               if (yych == 'I') goto yy696;
++                              if (yych == 'I') goto yy700;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 'O') goto yy697;
++                              if (yych <= 'O') goto yy701;
 +                              if (yych <= 'T') goto yy187;
-                               goto yy698;
++                              goto yy702;
 +                      }
 +              } else {
 +                      if (yych <= 'n') {
-                               if (yych == 'i') goto yy696;
++                              if (yych == 'i') goto yy700;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 'o') goto yy697;
-                               if (yych == 'u') goto yy698;
++                              if (yych <= 'o') goto yy701;
++                              if (yych == 'u') goto yy702;
 +                              goto yy187;
 +                      }
 +              }
 +yy127:
 +              YYDEBUG(127, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'O') {
 +                      if (yych <= 'K') {
-                               if (yych == 'A') goto yy661;
++                              if (yych == 'A') goto yy665;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 'L') goto yy662;
++                              if (yych <= 'L') goto yy666;
 +                              if (yych <= 'N') goto yy187;
-                               goto yy663;
++                              goto yy667;
 +                      }
 +              } else {
 +                      if (yych <= 'k') {
-                               if (yych == 'a') goto yy661;
++                              if (yych == 'a') goto yy665;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 'l') goto yy662;
-                               if (yych == 'o') goto yy663;
++                              if (yych <= 'l') goto yy666;
++                              if (yych == 'o') goto yy667;
 +                              goto yy187;
 +                      }
 +              }
 +yy128:
 +              YYDEBUG(128, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy643;
-               if (yych == 'e') goto yy643;
++              if (yych == 'E') goto yy647;
++              if (yych == 'e') goto yy647;
 +              goto yy187;
 +yy129:
 +              YYDEBUG(129, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy638;
-               if (yych == 'i') goto yy638;
++              if (yych == 'I') goto yy642;
++              if (yych == 'i') goto yy642;
 +              goto yy187;
 +yy130:
 +              YYDEBUG(130, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'R') {
-                       if (yych == 'H') goto yy626;
++                      if (yych == 'H') goto yy630;
 +                      if (yych <= 'Q') goto yy187;
-                       goto yy627;
++                      goto yy631;
 +              } else {
 +                      if (yych <= 'h') {
 +                              if (yych <= 'g') goto yy187;
-                               goto yy626;
++                              goto yy630;
 +                      } else {
-                               if (yych == 'r') goto yy627;
++                              if (yych == 'r') goto yy631;
 +                              goto yy187;
 +                      }
 +              }
 +yy131:
 +              YYDEBUG(131, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'S') {
 +                      if (yych <= 'L') {
-                               if (yych == 'F') goto yy573;
++                              if (yych == 'F') goto yy577;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 'M') goto yy575;
-                               if (yych <= 'N') goto yy576;
++                              if (yych <= 'M') goto yy579;
++                              if (yych <= 'N') goto yy580;
 +                              if (yych <= 'R') goto yy187;
-                               goto yy577;
++                              goto yy581;
 +                      }
 +              } else {
 +                      if (yych <= 'm') {
-                               if (yych == 'f') goto yy573;
++                              if (yych == 'f') goto yy577;
 +                              if (yych <= 'l') goto yy187;
-                               goto yy575;
++                              goto yy579;
 +                      } else {
-                               if (yych <= 'n') goto yy576;
-                               if (yych == 's') goto yy577;
++                              if (yych <= 'n') goto yy580;
++                              if (yych == 's') goto yy581;
 +                              goto yy187;
 +                      }
 +              }
 +yy132:
 +              YYDEBUG(132, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy568;
-               if (yych == 'h') goto yy568;
++              if (yych == 'H') goto yy572;
++              if (yych == 'h') goto yy572;
 +              goto yy187;
 +yy133:
 +              YYDEBUG(133, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'S') {
 +                      if (yych <= 'M') {
-                               if (yych == 'B') goto yy550;
++                              if (yych == 'B') goto yy554;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 'N') goto yy551;
++                              if (yych <= 'N') goto yy555;
 +                              if (yych <= 'Q') goto yy187;
-                               if (yych <= 'R') goto yy552;
-                               goto yy553;
++                              if (yych <= 'R') goto yy556;
++                              goto yy557;
 +                      }
 +              } else {
 +                      if (yych <= 'n') {
-                               if (yych == 'b') goto yy550;
++                              if (yych == 'b') goto yy554;
 +                              if (yych <= 'm') goto yy187;
-                               goto yy551;
++                              goto yy555;
 +                      } else {
 +                              if (yych <= 'q') goto yy187;
-                               if (yych <= 'r') goto yy552;
-                               if (yych <= 's') goto yy553;
++                              if (yych <= 'r') goto yy556;
++                              if (yych <= 's') goto yy557;
 +                              goto yy187;
 +                      }
 +              }
 +yy134:
 +              YYDEBUG(134, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'W') {
-                       if (yych == 'T') goto yy538;
++                      if (yych == 'T') goto yy542;
 +                      if (yych <= 'V') goto yy187;
-                       goto yy539;
++                      goto yy543;
 +              } else {
 +                      if (yych <= 't') {
 +                              if (yych <= 's') goto yy187;
-                               goto yy538;
++                              goto yy542;
 +                      } else {
-                               if (yych == 'w') goto yy539;
++                              if (yych == 'w') goto yy543;
 +                              goto yy187;
 +                      }
 +              }
 +yy135:
 +              YYDEBUG(135, *YYCURSOR);
 +              yyaccept = 0;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= ';') {
 +                      if (yych <= '"') {
 +                              if (yych <= '!') goto yy187;
-                               goto yy530;
++                              goto yy534;
 +                      } else {
-                               if (yych == '\'') goto yy531;
++                              if (yych == '\'') goto yy535;
 +                              goto yy187;
 +                      }
 +              } else {
 +                      if (yych <= 'R') {
-                               if (yych <= '<') goto yy529;
++                              if (yych <= '<') goto yy533;
 +                              if (yych <= 'Q') goto yy187;
-                               goto yy532;
++                              goto yy536;
 +                      } else {
-                               if (yych == 'r') goto yy532;
++                              if (yych == 'r') goto yy536;
 +                              goto yy187;
 +                      }
 +              }
 +yy136:
 +              YYDEBUG(136, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'O') {
-                       if (yych == 'L') goto yy519;
++                      if (yych == 'L') goto yy523;
 +                      if (yych <= 'N') goto yy187;
-                       goto yy520;
++                      goto yy524;
 +              } else {
 +                      if (yych <= 'l') {
 +                              if (yych <= 'k') goto yy187;
-                               goto yy519;
++                              goto yy523;
 +                      } else {
-                               if (yych == 'o') goto yy520;
++                              if (yych == 'o') goto yy524;
 +                              goto yy187;
 +                      }
 +              }
 +yy137:
 +              YYDEBUG(137, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'U') {
-                       if (yych == 'R') goto yy495;
++                      if (yych == 'R') goto yy499;
 +                      if (yych <= 'T') goto yy187;
-                       goto yy496;
++                      goto yy500;
 +              } else {
 +                      if (yych <= 'r') {
 +                              if (yych <= 'q') goto yy187;
-                               goto yy495;
++                              goto yy499;
 +                      } else {
-                               if (yych == 'u') goto yy496;
++                              if (yych == 'u') goto yy500;
 +                              goto yy187;
 +                      }
 +              }
 +yy138:
 +              YYDEBUG(138, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '<') {
-                       if (yych == '-') goto yy491;
++                      if (yych == '-') goto yy495;
 +              } else {
-                       if (yych <= '=') goto yy489;
-                       if (yych <= '>') goto yy493;
++                      if (yych <= '=') goto yy493;
++                      if (yych <= '>') goto yy497;
 +              }
 +yy139:
 +              YYDEBUG(139, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1465 "Zend/zend_language_scanner.l"
++#line 1473 "Zend/zend_language_scanner.l"
 +              {
 +      return yytext[0];
 +}
 +#line 2644 "Zend/zend_language_scanner.c"
 +yy140:
 +              YYDEBUG(140, *YYCURSOR);
 +              ++YYCURSOR;
 +              yych = *YYCURSOR;
-               goto yy488;
++              goto yy492;
 +yy141:
 +              YYDEBUG(141, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1195 "Zend/zend_language_scanner.l"
 +              {
 +      DUMMY_STRINGL(zendlval, yytext, yyleng);
 +      HANDLE_NEWLINES(yytext, yyleng);
 +      return T_WHITESPACE;
 +}
 +#line 2659 "Zend/zend_language_scanner.c"
 +yy142:
 +              YYDEBUG(142, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == ':') goto yy485;
++              if (yych == ':') goto yy489;
 +              goto yy139;
 +yy143:
 +              YYDEBUG(143, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(144, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1221 "Zend/zend_language_scanner.l"
 +              {
 +      return T_NS_SEPARATOR;
 +}
 +#line 2674 "Zend/zend_language_scanner.c"
 +yy145:
 +              YYDEBUG(145, *YYCURSOR);
 +              yyaccept = 1;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= '/') {
-                       if (yych == '.') goto yy482;
++                      if (yych == '.') goto yy486;
 +                      goto yy139;
 +              } else {
-                       if (yych <= '9') goto yy478;
-                       if (yych == '=') goto yy480;
++                      if (yych <= '9') goto yy482;
++                      if (yych == '=') goto yy484;
 +                      goto yy139;
 +              }
 +yy146:
 +              YYDEBUG(146, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'E') {
-                       if (yych == 'A') goto yy466;
++                      if (yych == 'A') goto yy470;
 +                      if (yych <= 'D') goto yy187;
-                       goto yy467;
++                      goto yy471;
 +              } else {
 +                      if (yych <= 'a') {
 +                              if (yych <= '`') goto yy187;
-                               goto yy466;
++                              goto yy470;
 +                      } else {
-                               if (yych == 'e') goto yy467;
++                              if (yych == 'e') goto yy471;
 +                              goto yy187;
 +                      }
 +              }
 +yy147:
 +              YYDEBUG(147, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy463;
-               if (yych == 'a') goto yy463;
++              if (yych == 'A') goto yy467;
++              if (yych == 'a') goto yy467;
 +              goto yy187;
 +yy148:
 +              YYDEBUG(148, *YYCURSOR);
 +              yyaccept = 1;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= 'S') {
 +                      if (yych <= 'D') {
 +                              if (yych <= ' ') {
-                                       if (yych == '\t') goto yy388;
++                                      if (yych == '\t') goto yy392;
 +                                      if (yych <= 0x1F) goto yy139;
-                                       goto yy388;
++                                      goto yy392;
 +                              } else {
 +                                      if (yych <= '@') goto yy139;
 +                                      if (yych == 'C') goto yy139;
-                                       goto yy388;
++                                      goto yy392;
 +                              }
 +                      } else {
 +                              if (yych <= 'I') {
-                                       if (yych == 'F') goto yy388;
++                                      if (yych == 'F') goto yy392;
 +                                      if (yych <= 'H') goto yy139;
-                                       goto yy388;
++                                      goto yy392;
 +                              } else {
-                                       if (yych == 'O') goto yy388;
++                                      if (yych == 'O') goto yy392;
 +                                      if (yych <= 'Q') goto yy139;
-                                       goto yy388;
++                                      goto yy392;
 +                              }
 +                      }
 +              } else {
 +                      if (yych <= 'f') {
 +                              if (yych <= 'b') {
-                                       if (yych == 'U') goto yy388;
++                                      if (yych == 'U') goto yy392;
 +                                      if (yych <= '`') goto yy139;
-                                       goto yy388;
++                                      goto yy392;
 +                              } else {
-                                       if (yych == 'd') goto yy388;
++                                      if (yych == 'd') goto yy392;
 +                                      if (yych <= 'e') goto yy139;
-                                       goto yy388;
++                                      goto yy392;
 +                              }
 +                      } else {
 +                              if (yych <= 'o') {
-                                       if (yych == 'i') goto yy388;
++                                      if (yych == 'i') goto yy392;
 +                                      if (yych <= 'n') goto yy139;
-                                       goto yy388;
++                                      goto yy392;
 +                              } else {
 +                                      if (yych <= 's') {
 +                                              if (yych <= 'q') goto yy139;
-                                               goto yy388;
++                                              goto yy392;
 +                                      } else {
-                                               if (yych == 'u') goto yy388;
++                                              if (yych == 'u') goto yy392;
 +                                              goto yy139;
 +                                      }
 +                              }
 +                      }
 +              }
 +yy149:
 +              YYDEBUG(149, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'S') {
-                       if (yych == 'N') goto yy379;
++                      if (yych == 'N') goto yy383;
 +                      if (yych <= 'R') goto yy187;
-                       goto yy380;
++                      goto yy384;
 +              } else {
 +                      if (yych <= 'n') {
 +                              if (yych <= 'm') goto yy187;
-                               goto yy379;
++                              goto yy383;
 +                      } else {
-                               if (yych == 's') goto yy380;
++                              if (yych == 's') goto yy384;
 +                              goto yy187;
 +                      }
 +              }
 +yy150:
 +              YYDEBUG(150, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == '_') goto yy297;
++              if (yych == '_') goto yy301;
 +              goto yy187;
 +yy151:
 +              YYDEBUG(151, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '<') goto yy139;
-               if (yych <= '=') goto yy291;
-               if (yych <= '>') goto yy293;
++              if (yych <= '=') goto yy295;
++              if (yych <= '>') goto yy297;
 +              goto yy139;
 +yy152:
 +              YYDEBUG(152, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy287;
-               if (yych == 'i') goto yy287;
++              if (yych == 'I') goto yy291;
++              if (yych == 'i') goto yy291;
 +              goto yy187;
 +yy153:
 +              YYDEBUG(153, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == '+') goto yy285;
-               if (yych == '=') goto yy283;
++              if (yych == '+') goto yy289;
++              if (yych == '=') goto yy287;
 +              goto yy139;
 +yy154:
 +              YYDEBUG(154, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == '=') goto yy280;
++              if (yych == '=') goto yy284;
 +              goto yy139;
 +yy155:
 +              YYDEBUG(155, *YYCURSOR);
 +              yyaccept = 1;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= ';') {
-                       if (yych == '/') goto yy252;
++                      if (yych == '/') goto yy256;
 +                      goto yy139;
 +              } else {
-                       if (yych <= '<') goto yy250;
-                       if (yych <= '=') goto yy253;
-                       if (yych <= '>') goto yy255;
++                      if (yych <= '<') goto yy254;
++                      if (yych <= '=') goto yy257;
++                      if (yych <= '>') goto yy259;
 +                      goto yy139;
 +              }
 +yy156:
 +              YYDEBUG(156, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '<') goto yy139;
-               if (yych <= '=') goto yy246;
-               if (yych <= '>') goto yy244;
++              if (yych <= '=') goto yy250;
++              if (yych <= '>') goto yy248;
 +              goto yy139;
 +yy157:
 +              YYDEBUG(157, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == '=') goto yy242;
++              if (yych == '*') goto yy242;
++              if (yych == '=') goto yy244;
 +              goto yy139;
 +yy158:
 +              YYDEBUG(158, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '.') {
 +                      if (yych == '*') goto yy234;
 +                      goto yy139;
 +              } else {
 +                      if (yych <= '/') goto yy236;
 +                      if (yych == '=') goto yy237;
 +                      goto yy139;
 +              }
 +yy159:
 +              YYDEBUG(159, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '<') goto yy139;
 +              if (yych <= '=') goto yy230;
 +              if (yych <= '>') goto yy228;
 +              goto yy139;
 +yy160:
 +              YYDEBUG(160, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '&') goto yy224;
 +              if (yych == '=') goto yy226;
 +              goto yy139;
 +yy161:
 +              YYDEBUG(161, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '=') goto yy222;
 +              if (yych == '|') goto yy220;
 +              goto yy139;
 +yy162:
 +              YYDEBUG(162, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '=') goto yy218;
 +              goto yy139;
 +yy163:
 +              YYDEBUG(163, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'R') goto yy216;
 +              if (yych == 'r') goto yy216;
 +              goto yy187;
 +yy164:
 +              YYDEBUG(164, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'O') goto yy213;
 +              if (yych == 'o') goto yy213;
 +              goto yy187;
 +yy165:
 +              YYDEBUG(165, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '_') {
 +                      if (yych <= '@') goto yy139;
 +                      if (yych <= 'Z') goto yy210;
 +                      if (yych <= '^') goto yy139;
 +                      goto yy210;
 +              } else {
 +                      if (yych <= '`') goto yy139;
 +                      if (yych <= 'z') goto yy210;
 +                      if (yych <= '~') goto yy139;
 +                      goto yy210;
 +              }
 +yy166:
 +              YYDEBUG(166, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy139;
 +yy167:
 +              YYDEBUG(167, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '>') goto yy206;
 +              goto yy139;
 +yy168:
 +              YYDEBUG(168, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(169, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1470 "Zend/zend_language_scanner.l"
++#line 1478 "Zend/zend_language_scanner.l"
 +              {
 +      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 +      return '{';
 +}
- #line 2912 "Zend/zend_language_scanner.c"
++#line 2913 "Zend/zend_language_scanner.c"
 +yy170:
 +              YYDEBUG(170, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(171, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1482 "Zend/zend_language_scanner.l"
++#line 1490 "Zend/zend_language_scanner.l"
 +              {
 +      RESET_DOC_COMMENT();
 +      if (!zend_stack_is_empty(&SCNG(state_stack))) {
 +              yy_pop_state(TSRMLS_C);
 +      }
 +      return '}';
 +}
- #line 2926 "Zend/zend_language_scanner.c"
++#line 2927 "Zend/zend_language_scanner.c"
 +yy172:
 +              YYDEBUG(172, *YYCURSOR);
 +              yyaccept = 2;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= 'E') {
 +                      if (yych <= '9') {
 +                              if (yych == '.') goto yy188;
 +                              if (yych >= '0') goto yy191;
 +                      } else {
 +                              if (yych == 'B') goto yy199;
 +                              if (yych >= 'E') goto yy193;
 +                      }
 +              } else {
 +                      if (yych <= 'b') {
 +                              if (yych == 'X') goto yy198;
 +                              if (yych >= 'b') goto yy199;
 +                      } else {
 +                              if (yych <= 'e') {
 +                                      if (yych >= 'e') goto yy193;
 +                              } else {
 +                                      if (yych == 'x') goto yy198;
 +                              }
 +                      }
 +              }
 +yy173:
 +              YYDEBUG(173, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1530 "Zend/zend_language_scanner.l"
++#line 1538 "Zend/zend_language_scanner.l"
 +              {
 +      if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
 +              ZVAL_LONG(zendlval, strtol(yytext, NULL, 0));
 +      } else {
 +              errno = 0;
 +              ZVAL_LONG(zendlval, strtol(yytext, NULL, 0));
 +              if (errno == ERANGE) { /* Overflow */
 +                      if (yytext[0] == '0') { /* octal overflow */
 +                              ZVAL_DOUBLE(zendlval, zend_oct_strtod(yytext, NULL));
 +                      } else {
 +                              ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL));
 +                      }
 +                      return T_DNUMBER;
 +              }
 +      }
 +      return T_LNUMBER;
 +}
- #line 2972 "Zend/zend_language_scanner.c"
++#line 2973 "Zend/zend_language_scanner.c"
 +yy174:
 +              YYDEBUG(174, *YYCURSOR);
 +              yyaccept = 2;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= '9') {
 +                      if (yych == '.') goto yy188;
 +                      if (yych <= '/') goto yy173;
 +                      goto yy191;
 +              } else {
 +                      if (yych <= 'E') {
 +                              if (yych <= 'D') goto yy173;
 +                              goto yy193;
 +                      } else {
 +                              if (yych == 'e') goto yy193;
 +                              goto yy173;
 +                      }
 +              }
 +yy175:
 +              YYDEBUG(175, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy187;
 +yy176:
 +              YYDEBUG(176, *YYCURSOR);
 +              ++YYCURSOR;
 +yy177:
 +              YYDEBUG(177, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1881 "Zend/zend_language_scanner.l"
++#line 1889 "Zend/zend_language_scanner.l"
 +              {
 +      while (YYCURSOR < YYLIMIT) {
 +              switch (*YYCURSOR++) {
 +                      case '\r':
 +                              if (*YYCURSOR == '\n') {
 +                                      YYCURSOR++;
 +                              }
 +                              /* fall through */
 +                      case '\n':
 +                              CG(zend_lineno)++;
 +                              break;
 +                      case '%':
 +                              if (!CG(asp_tags)) {
 +                                      continue;
 +                              }
 +                              /* fall through */
 +                      case '?':
 +                              if (*YYCURSOR == '>') {
 +                                      YYCURSOR--;
 +                                      break;
 +                              }
 +                              /* fall through */
 +                      default:
 +                              continue;
 +              }
 +
 +              break;
 +      }
 +
 +      yyleng = YYCURSOR - SCNG(yy_text);
 +
 +      return T_COMMENT;
 +}
- #line 3034 "Zend/zend_language_scanner.c"
++#line 3035 "Zend/zend_language_scanner.c"
 +yy178:
 +              YYDEBUG(178, *YYCURSOR);
 +              ++YYCURSOR;
 +yy179:
 +              YYDEBUG(179, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1967 "Zend/zend_language_scanner.l"
++#line 1975 "Zend/zend_language_scanner.l"
 +              {
 +      register char *s, *t;
 +      char *end;
 +      int bprefix = (yytext[0] != '\'') ? 1 : 0;
 +
 +      while (1) {
 +              if (YYCURSOR < YYLIMIT) {
 +                      if (*YYCURSOR == '\'') {
 +                              YYCURSOR++;
 +                              yyleng = YYCURSOR - SCNG(yy_text);
 +
 +                              break;
 +                      } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) {
 +                              YYCURSOR++;
 +                      }
 +              } else {
 +                      yyleng = YYLIMIT - SCNG(yy_text);
 +
 +                      /* Unclosed single quotes; treat similar to double quotes, but without a separate token
 +                       * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..."
 +                       * rule, which continued in ST_IN_SCRIPTING state after the quote */
 +                      return T_ENCAPSED_AND_WHITESPACE;
 +              }
 +      }
 +
 +      ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2);
 +
 +      /* convert escape sequences */
 +      s = t = Z_STRVAL_P(zendlval);
 +      end = s+Z_STRLEN_P(zendlval);
 +      while (s<end) {
 +              if (*s=='\\') {
 +                      s++;
 +
 +                      switch(*s) {
 +                              case '\\':
 +                              case '\'':
 +                                      *t++ = *s;
 +                                      Z_STRLEN_P(zendlval)--;
 +                                      break;
 +                              default:
 +                                      *t++ = '\\';
 +                                      *t++ = *s;
 +                                      break;
 +                      }
 +              } else {
 +                      *t++ = *s;
 +              }
 +
 +              if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
 +                      CG(zend_lineno)++;
 +              }
 +              s++;
 +      }
 +      *t = 0;
 +
 +      if (SCNG(output_filter)) {
 +              size_t sz = 0;
 +              char *str = NULL;
 +              s = Z_STRVAL_P(zendlval);
 +              // TODO: avoid reallocation ???
 +              SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC);
 +              ZVAL_STRINGL(zendlval, str, sz);
 +              efree(s);
 +      }
 +      return T_CONSTANT_ENCAPSED_STRING;
 +}
- #line 3109 "Zend/zend_language_scanner.c"
++#line 3110 "Zend/zend_language_scanner.c"
 +yy180:
 +              YYDEBUG(180, *YYCURSOR);
 +              ++YYCURSOR;
 +yy181:
 +              YYDEBUG(181, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2036 "Zend/zend_language_scanner.l"
++#line 2044 "Zend/zend_language_scanner.l"
 +              {
 +      int bprefix = (yytext[0] != '"') ? 1 : 0;
 +
 +      while (YYCURSOR < YYLIMIT) {
 +              switch (*YYCURSOR++) {
 +                      case '"':
 +                              yyleng = YYCURSOR - SCNG(yy_text);
 +                              zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"' TSRMLS_CC);
 +                              return T_CONSTANT_ENCAPSED_STRING;
 +                      case '$':
 +                              if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
 +                                      break;
 +                              }
 +                              continue;
 +                      case '{':
 +                              if (*YYCURSOR == '$') {
 +                                      break;
 +                              }
 +                              continue;
 +                      case '\\':
 +                              if (YYCURSOR < YYLIMIT) {
 +                                      YYCURSOR++;
 +                              }
 +                              /* fall through */
 +                      default:
 +                              continue;
 +              }
 +
 +              YYCURSOR--;
 +              break;
 +      }
 +
 +      /* Remember how much was scanned to save rescanning */
 +      SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng);
 +
 +      YYCURSOR = SCNG(yy_text) + yyleng;
 +
 +      BEGIN(ST_DOUBLE_QUOTES);
 +      return '"';
 +}
- #line 3157 "Zend/zend_language_scanner.c"
++#line 3158 "Zend/zend_language_scanner.c"
 +yy182:
 +              YYDEBUG(182, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(183, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2126 "Zend/zend_language_scanner.l"
++#line 2134 "Zend/zend_language_scanner.l"
 +              {
 +      BEGIN(ST_BACKQUOTE);
 +      return '`';
 +}
- #line 3168 "Zend/zend_language_scanner.c"
++#line 3169 "Zend/zend_language_scanner.c"
 +yy184:
 +              YYDEBUG(184, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(185, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2388 "Zend/zend_language_scanner.l"
++#line 2396 "Zend/zend_language_scanner.l"
 +              {
 +      if (YYCURSOR > YYLIMIT) {
 +              return 0;
 +      }
 +
 +      zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
 +      goto restart;
 +}
- #line 3183 "Zend/zend_language_scanner.c"
++#line 3184 "Zend/zend_language_scanner.c"
 +yy186:
 +              YYDEBUG(186, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
 +yy187:
 +              YYDEBUG(187, *YYCURSOR);
 +              if (yybm[0+yych] & 4) {
 +                      goto yy186;
 +              }
 +              goto yy124;
 +yy188:
 +              YYDEBUG(188, *YYCURSOR);
 +              yyaccept = 3;
 +              YYMARKER = ++YYCURSOR;
 +              YYFILL(3);
 +              yych = *YYCURSOR;
 +              YYDEBUG(189, *YYCURSOR);
 +              if (yybm[0+yych] & 8) {
 +                      goto yy188;
 +              }
 +              if (yych == 'E') goto yy193;
 +              if (yych == 'e') goto yy193;
 +yy190:
 +              YYDEBUG(190, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1585 "Zend/zend_language_scanner.l"
++#line 1593 "Zend/zend_language_scanner.l"
 +              {
 +      ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL));
 +      return T_DNUMBER;
 +}
- #line 3215 "Zend/zend_language_scanner.c"
++#line 3216 "Zend/zend_language_scanner.c"
 +yy191:
 +              YYDEBUG(191, *YYCURSOR);
 +              yyaccept = 2;
 +              YYMARKER = ++YYCURSOR;
 +              YYFILL(3);
 +              yych = *YYCURSOR;
 +              YYDEBUG(192, *YYCURSOR);
 +              if (yych <= '9') {
 +                      if (yych == '.') goto yy188;
 +                      if (yych <= '/') goto yy173;
 +                      goto yy191;
 +              } else {
 +                      if (yych <= 'E') {
 +                              if (yych <= 'D') goto yy173;
 +                      } else {
 +                              if (yych != 'e') goto yy173;
 +                      }
 +              }
 +yy193:
 +              YYDEBUG(193, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= ',') {
 +                      if (yych == '+') goto yy195;
 +              } else {
 +                      if (yych <= '-') goto yy195;
 +                      if (yych <= '/') goto yy194;
 +                      if (yych <= '9') goto yy196;
 +              }
 +yy194:
 +              YYDEBUG(194, *YYCURSOR);
 +              YYCURSOR = YYMARKER;
 +              if (yyaccept <= 2) {
 +                      if (yyaccept <= 1) {
 +                              if (yyaccept <= 0) {
 +                                      goto yy124;
 +                              } else {
 +                                      goto yy139;
 +                              }
 +                      } else {
 +                              goto yy173;
 +                      }
 +              } else {
 +                      if (yyaccept <= 4) {
 +                              if (yyaccept <= 3) {
 +                                      goto yy190;
 +                              } else {
 +                                      goto yy235;
 +                              }
 +                      } else {
-                               goto yy251;
++                              goto yy255;
 +                      }
 +              }
 +yy195:
 +              YYDEBUG(195, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= '/') goto yy194;
 +              if (yych >= ':') goto yy194;
 +yy196:
 +              YYDEBUG(196, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
 +              YYDEBUG(197, *YYCURSOR);
 +              if (yych <= '/') goto yy190;
 +              if (yych <= '9') goto yy196;
 +              goto yy190;
 +yy198:
 +              YYDEBUG(198, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yybm[0+yych] & 32) {
 +                      goto yy203;
 +              }
 +              goto yy194;
 +yy199:
 +              YYDEBUG(199, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yybm[0+yych] & 16) {
 +                      goto yy200;
 +              }
 +              goto yy194;
 +yy200:
 +              YYDEBUG(200, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
 +              YYDEBUG(201, *YYCURSOR);
 +              if (yybm[0+yych] & 16) {
 +                      goto yy200;
 +              }
 +              YYDEBUG(202, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1507 "Zend/zend_language_scanner.l"
++#line 1515 "Zend/zend_language_scanner.l"
 +              {
 +      char *bin = yytext + 2; /* Skip "0b" */
 +      int len = yyleng - 2;
 +
 +      /* Skip any leading 0s */
 +      while (*bin == '0') {
 +              ++bin;
 +              --len;
 +      }
 +
 +      if (len < SIZEOF_LONG * 8) {
 +              if (len == 0) {
 +                      ZVAL_LONG(zendlval, 0);
 +              } else {
 +                      ZVAL_LONG(zendlval, strtol(bin, NULL, 2));
 +              }
 +              return T_LNUMBER;
 +      } else {
 +              ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, NULL));
 +              return T_DNUMBER;
 +      }
 +}
- #line 3330 "Zend/zend_language_scanner.c"
++#line 3331 "Zend/zend_language_scanner.c"
 +yy203:
 +              YYDEBUG(203, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
 +              YYDEBUG(204, *YYCURSOR);
 +              if (yybm[0+yych] & 32) {
 +                      goto yy203;
 +              }
 +              YYDEBUG(205, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1548 "Zend/zend_language_scanner.l"
++#line 1556 "Zend/zend_language_scanner.l"
 +              {
 +      char *hex = yytext + 2; /* Skip "0x" */
 +      int len = yyleng - 2;
 +
 +      /* Skip any leading 0s */
 +      while (*hex == '0') {
 +              hex++;
 +              len--;
 +      }
 +
 +      if (len < SIZEOF_LONG * 2 || (len == SIZEOF_LONG * 2 && *hex <= '7')) {
 +              if (len == 0) {
 +                      ZVAL_LONG(zendlval, 0);
 +              } else {
 +                      ZVAL_LONG(zendlval, strtol(hex, NULL, 16));
 +              }
 +              return T_LNUMBER;
 +      } else {
 +              ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, NULL));
 +              return T_DNUMBER;
 +      }
 +}
- #line 3365 "Zend/zend_language_scanner.c"
++#line 3366 "Zend/zend_language_scanner.c"
 +yy206:
 +              YYDEBUG(206, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) == '\n') goto yy208;
 +              if (yych == '\r') goto yy209;
 +yy207:
 +              YYDEBUG(207, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1948 "Zend/zend_language_scanner.l"
++#line 1956 "Zend/zend_language_scanner.l"
 +              {
 +      DUMMY_STRINGL(zendlval, yytext, yyleng);
 +      BEGIN(INITIAL);
 +      return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 +}
- #line 3380 "Zend/zend_language_scanner.c"
++#line 3381 "Zend/zend_language_scanner.c"
 +yy208:
 +              YYDEBUG(208, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy207;
 +yy209:
 +              YYDEBUG(209, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '\n') goto yy208;
 +              goto yy207;
 +yy210:
 +              YYDEBUG(210, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
 +              YYDEBUG(211, *YYCURSOR);
 +              if (yych <= '^') {
 +                      if (yych <= '9') {
 +                              if (yych >= '0') goto yy210;
 +                      } else {
 +                              if (yych <= '@') goto yy212;
 +                              if (yych <= 'Z') goto yy210;
 +                      }
 +              } else {
 +                      if (yych <= '`') {
 +                              if (yych <= '_') goto yy210;
 +                      } else {
 +                              if (yych <= 'z') goto yy210;
 +                              if (yych >= 0x7F) goto yy210;
 +                      }
 +              }
 +yy212:
 +              YYDEBUG(212, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1853 "Zend/zend_language_scanner.l"
++#line 1861 "Zend/zend_language_scanner.l"
 +              {
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
- #line 3419 "Zend/zend_language_scanner.c"
++#line 3420 "Zend/zend_language_scanner.c"
 +yy213:
 +              YYDEBUG(213, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == 'R') goto yy214;
 +              if (yych != 'r') goto yy187;
 +yy214:
 +              YYDEBUG(214, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
 +              YYDEBUG(215, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1453 "Zend/zend_language_scanner.l"
++#line 1461 "Zend/zend_language_scanner.l"
 +              {
 +      return T_LOGICAL_XOR;
 +}
- #line 3437 "Zend/zend_language_scanner.c"
++#line 3438 "Zend/zend_language_scanner.c"
 +yy216:
 +              YYDEBUG(216, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
 +              YYDEBUG(217, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1445 "Zend/zend_language_scanner.l"
++#line 1453 "Zend/zend_language_scanner.l"
 +              {
 +      return T_LOGICAL_OR;
 +}
- #line 3450 "Zend/zend_language_scanner.c"
++#line 3451 "Zend/zend_language_scanner.c"
 +yy218:
 +              YYDEBUG(218, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(219, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1433 "Zend/zend_language_scanner.l"
++#line 1441 "Zend/zend_language_scanner.l"
 +              {
 +      return T_XOR_EQUAL;
 +}
- #line 3460 "Zend/zend_language_scanner.c"
++#line 3461 "Zend/zend_language_scanner.c"
 +yy220:
 +              YYDEBUG(220, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(221, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1437 "Zend/zend_language_scanner.l"
++#line 1445 "Zend/zend_language_scanner.l"
 +              {
 +      return T_BOOLEAN_OR;
 +}
- #line 3470 "Zend/zend_language_scanner.c"
++#line 3471 "Zend/zend_language_scanner.c"
 +yy222:
 +              YYDEBUG(222, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(223, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1429 "Zend/zend_language_scanner.l"
++#line 1437 "Zend/zend_language_scanner.l"
 +              {
 +      return T_OR_EQUAL;
 +}
- #line 3480 "Zend/zend_language_scanner.c"
++#line 3481 "Zend/zend_language_scanner.c"
 +yy224:
 +              YYDEBUG(224, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(225, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1441 "Zend/zend_language_scanner.l"
++#line 1449 "Zend/zend_language_scanner.l"
 +              {
 +      return T_BOOLEAN_AND;
 +}
- #line 3490 "Zend/zend_language_scanner.c"
++#line 3491 "Zend/zend_language_scanner.c"
 +yy226:
 +              YYDEBUG(226, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(227, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1425 "Zend/zend_language_scanner.l"
++#line 1433 "Zend/zend_language_scanner.l"
 +              {
 +      return T_AND_EQUAL;
 +}
- #line 3500 "Zend/zend_language_scanner.c"
++#line 3501 "Zend/zend_language_scanner.c"
 +yy228:
 +              YYDEBUG(228, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) == '\n') goto yy232;
 +              if (yych == '\r') goto yy233;
 +yy229:
 +              YYDEBUG(229, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1955 "Zend/zend_language_scanner.l"
++#line 1963 "Zend/zend_language_scanner.l"
 +              {
 +      if (CG(asp_tags)) {
 +              BEGIN(INITIAL);
 +              DUMMY_STRINGL(zendlval, yytext, yyleng);
 +              return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 +      } else {
 +              yyless(1);
 +              return yytext[0];
 +      }
 +}
- #line 3520 "Zend/zend_language_scanner.c"
++#line 3521 "Zend/zend_language_scanner.c"
 +yy230:
 +              YYDEBUG(230, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(231, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1413 "Zend/zend_language_scanner.l"
++#line 1421 "Zend/zend_language_scanner.l"
 +              {
 +      return T_MOD_EQUAL;
 +}
- #line 3530 "Zend/zend_language_scanner.c"
++#line 3531 "Zend/zend_language_scanner.c"
 +yy232:
 +              YYDEBUG(232, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy229;
 +yy233:
 +              YYDEBUG(233, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '\n') goto yy232;
 +              goto yy229;
 +yy234:
 +              YYDEBUG(234, *YYCURSOR);
 +              yyaccept = 4;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych == '*') goto yy239;
 +yy235:
 +              YYDEBUG(235, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1915 "Zend/zend_language_scanner.l"
++#line 1923 "Zend/zend_language_scanner.l"
 +              {
 +      int doc_com;
 +
 +      if (yyleng > 2) {
 +              doc_com = 1;
 +              RESET_DOC_COMMENT();
 +      } else {
 +              doc_com = 0;
 +      }
 +
 +      while (YYCURSOR < YYLIMIT) {
 +              if (*YYCURSOR++ == '*' && *YYCURSOR == '/') {
 +                      break;
 +              }
 +      }
 +
 +      if (YYCURSOR < YYLIMIT) {
 +              YYCURSOR++;
 +      } else {
 +              zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno));
 +      }
 +
 +      yyleng = YYCURSOR - SCNG(yy_text);
 +      HANDLE_NEWLINES(yytext, yyleng);
 +
 +      if (doc_com) {
 +              CG(doc_comment) = STR_INIT(yytext, yyleng, 0);
 +              return T_DOC_COMMENT;
 +      }
 +
 +      return T_COMMENT;
 +}
- #line 3581 "Zend/zend_language_scanner.c"
++#line 3582 "Zend/zend_language_scanner.c"
 +yy236:
 +              YYDEBUG(236, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy177;
 +yy237:
 +              YYDEBUG(237, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(238, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1405 "Zend/zend_language_scanner.l"
++#line 1413 "Zend/zend_language_scanner.l"
 +              {
 +      return T_DIV_EQUAL;
 +}
- #line 3595 "Zend/zend_language_scanner.c"
++#line 3596 "Zend/zend_language_scanner.c"
 +yy239:
 +              YYDEBUG(239, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yybm[0+yych] & 64) {
 +                      goto yy240;
 +              }
 +              goto yy194;
 +yy240:
 +              YYDEBUG(240, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
 +              YYDEBUG(241, *YYCURSOR);
 +              if (yybm[0+yych] & 64) {
 +                      goto yy240;
 +              }
 +              goto yy235;
 +yy242:
 +              YYDEBUG(242, *YYCURSOR);
 +              ++YYCURSOR;
++              if ((yych = *YYCURSOR) == '=') goto yy246;
 +              YYDEBUG(243, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1401 "Zend/zend_language_scanner.l"
++#line 1405 "Zend/zend_language_scanner.l"
 +              {
-       return T_MUL_EQUAL;
++      return T_POW;
 +}
- #line 3622 "Zend/zend_language_scanner.c"
++#line 3624 "Zend/zend_language_scanner.c"
 +yy244:
 +              YYDEBUG(244, *YYCURSOR);
 +              ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '=') goto yy248;
 +              YYDEBUG(245, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1461 "Zend/zend_language_scanner.l"
++#line 1401 "Zend/zend_language_scanner.l"
 +              {
-       return T_SR;
++      return T_MUL_EQUAL;
 +}
- #line 3633 "Zend/zend_language_scanner.c"
++#line 3634 "Zend/zend_language_scanner.c"
 +yy246:
 +              YYDEBUG(246, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYDEBUG(247, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1389 "Zend/zend_language_scanner.l"
++#line 1409 "Zend/zend_language_scanner.l"
 +              {
-       return T_IS_GREATER_OR_EQUAL;
++      return T_POW_EQUAL;
 +}
- #line 3643 "Zend/zend_language_scanner.c"
++#line 3644 "Zend/zend_language_scanner.c"
 +yy248:
 +              YYDEBUG(248, *YYCURSOR);
 +              ++YYCURSOR;
++              if ((yych = *YYCURSOR) == '=') goto yy252;
 +              YYDEBUG(249, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1421 "Zend/zend_language_scanner.l"
++#line 1469 "Zend/zend_language_scanner.l"
 +              {
-       return T_SR_EQUAL;
++      return T_SR;
 +}
- #line 3653 "Zend/zend_language_scanner.c"
++#line 3655 "Zend/zend_language_scanner.c"
 +yy250:
 +              YYDEBUG(250, *YYCURSOR);
-               yyaccept = 5;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych <= ';') goto yy251;
-               if (yych <= '<') goto yy266;
-               if (yych <= '=') goto yy264;
- yy251:
++              ++YYCURSOR;
 +              YYDEBUG(251, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1457 "Zend/zend_language_scanner.l"
++#line 1389 "Zend/zend_language_scanner.l"
 +              {
-       return T_SL;
++      return T_IS_GREATER_OR_EQUAL;
 +}
- #line 3668 "Zend/zend_language_scanner.c"
++#line 3665 "Zend/zend_language_scanner.c"
 +yy252:
 +              YYDEBUG(252, *YYCURSOR);
++              ++YYCURSOR;
++              YYDEBUG(253, *YYCURSOR);
++              yyleng = YYCURSOR - SCNG(yy_text);
++#line 1429 "Zend/zend_language_scanner.l"
++              {
++      return T_SR_EQUAL;
++}
++#line 3675 "Zend/zend_language_scanner.c"
++yy254:
++              YYDEBUG(254, *YYCURSOR);
++              yyaccept = 5;
++              yych = *(YYMARKER = ++YYCURSOR);
++              if (yych <= ';') goto yy255;
++              if (yych <= '<') goto yy270;
++              if (yych <= '=') goto yy268;
++yy255:
++              YYDEBUG(255, *YYCURSOR);
++              yyleng = YYCURSOR - SCNG(yy_text);
++#line 1465 "Zend/zend_language_scanner.l"
++              {
++      return T_SL;
++}
++#line 3690 "Zend/zend_language_scanner.c"
++yy256:
++              YYDEBUG(256, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy257;
-               if (yych == 's') goto yy257;
++              if (yych == 'S') goto yy261;
++              if (yych == 's') goto yy261;
 +              goto yy194;
- yy253:
-               YYDEBUG(253, *YYCURSOR);
++yy257:
++              YYDEBUG(257, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(254, *YYCURSOR);
++              YYDEBUG(258, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1385 "Zend/zend_language_scanner.l"
 +              {
 +      return T_IS_SMALLER_OR_EQUAL;
 +}
- #line 3684 "Zend/zend_language_scanner.c"
- yy255:
-               YYDEBUG(255, *YYCURSOR);
++#line 3706 "Zend/zend_language_scanner.c"
++yy259:
++              YYDEBUG(259, *YYCURSOR);
 +              ++YYCURSOR;
- yy256:
-               YYDEBUG(256, *YYCURSOR);
++yy260:
++              YYDEBUG(260, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1381 "Zend/zend_language_scanner.l"
 +              {
 +      return T_IS_NOT_EQUAL;
 +}
- #line 3695 "Zend/zend_language_scanner.c"
- yy257:
-               YYDEBUG(257, *YYCURSOR);
++#line 3717 "Zend/zend_language_scanner.c"
++yy261:
++              YYDEBUG(261, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy258;
++              if (yych == 'C') goto yy262;
 +              if (yych != 'c') goto yy194;
- yy258:
-               YYDEBUG(258, *YYCURSOR);
++yy262:
++              YYDEBUG(262, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy259;
++              if (yych == 'R') goto yy263;
 +              if (yych != 'r') goto yy194;
- yy259:
-               YYDEBUG(259, *YYCURSOR);
++yy263:
++              YYDEBUG(263, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy260;
++              if (yych == 'I') goto yy264;
 +              if (yych != 'i') goto yy194;
- yy260:
-               YYDEBUG(260, *YYCURSOR);
++yy264:
++              YYDEBUG(264, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'P') goto yy261;
++              if (yych == 'P') goto yy265;
 +              if (yych != 'p') goto yy194;
- yy261:
-               YYDEBUG(261, *YYCURSOR);
++yy265:
++              YYDEBUG(265, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy262;
++              if (yych == 'T') goto yy266;
 +              if (yych != 't') goto yy194;
- yy262:
-               YYDEBUG(262, *YYCURSOR);
++yy266:
++              YYDEBUG(266, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(3);
 +              yych = *YYCURSOR;
-               YYDEBUG(263, *YYCURSOR);
++              YYDEBUG(267, *YYCURSOR);
 +              if (yych <= '\r') {
 +                      if (yych <= 0x08) goto yy194;
-                       if (yych <= '\n') goto yy262;
++                      if (yych <= '\n') goto yy266;
 +                      if (yych <= '\f') goto yy194;
-                       goto yy262;
++                      goto yy266;
 +              } else {
 +                      if (yych <= ' ') {
 +                              if (yych <= 0x1F) goto yy194;
-                               goto yy262;
++                              goto yy266;
 +                      } else {
 +                              if (yych == '>') goto yy206;
 +                              goto yy194;
 +                      }
 +              }
- yy264:
-               YYDEBUG(264, *YYCURSOR);
++yy268:
++              YYDEBUG(268, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(265, *YYCURSOR);
++              YYDEBUG(269, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1417 "Zend/zend_language_scanner.l"
++#line 1425 "Zend/zend_language_scanner.l"
 +              {
 +      return T_SL_EQUAL;
 +}
- #line 3750 "Zend/zend_language_scanner.c"
- yy266:
-               YYDEBUG(266, *YYCURSOR);
++#line 3772 "Zend/zend_language_scanner.c"
++yy270:
++              YYDEBUG(270, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(2);
 +              yych = *YYCURSOR;
-               YYDEBUG(267, *YYCURSOR);
++              YYDEBUG(271, *YYCURSOR);
 +              if (yybm[0+yych] & 128) {
-                       goto yy266;
++                      goto yy270;
 +              }
 +              if (yych <= 'Z') {
 +                      if (yych <= '&') {
-                               if (yych == '"') goto yy271;
++                              if (yych == '"') goto yy275;
 +                              goto yy194;
 +                      } else {
-                               if (yych <= '\'') goto yy270;
++                              if (yych <= '\'') goto yy274;
 +                              if (yych <= '@') goto yy194;
 +                      }
 +              } else {
 +                      if (yych <= '`') {
 +                              if (yych != '_') goto yy194;
 +                      } else {
-                               if (yych <= 'z') goto yy268;
++                              if (yych <= 'z') goto yy272;
 +                              if (yych <= '~') goto yy194;
 +                      }
 +              }
- yy268:
-               YYDEBUG(268, *YYCURSOR);
++yy272:
++              YYDEBUG(272, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(2);
 +              yych = *YYCURSOR;
-               YYDEBUG(269, *YYCURSOR);
++              YYDEBUG(273, *YYCURSOR);
 +              if (yych <= '@') {
 +                      if (yych <= '\f') {
-                               if (yych == '\n') goto yy275;
++                              if (yych == '\n') goto yy279;
 +                              goto yy194;
 +                      } else {
-                               if (yych <= '\r') goto yy277;
++                              if (yych <= '\r') goto yy281;
 +                              if (yych <= '/') goto yy194;
-                               if (yych <= '9') goto yy268;
++                              if (yych <= '9') goto yy272;
 +                              goto yy194;
 +                      }
 +              } else {
 +                      if (yych <= '_') {
-                               if (yych <= 'Z') goto yy268;
++                              if (yych <= 'Z') goto yy272;
 +                              if (yych <= '^') goto yy194;
-                               goto yy268;
++                              goto yy272;
 +                      } else {
 +                              if (yych <= '`') goto yy194;
-                               if (yych <= 'z') goto yy268;
++                              if (yych <= 'z') goto yy272;
 +                              if (yych <= '~') goto yy194;
-                               goto yy268;
++                              goto yy272;
 +                      }
 +              }
- yy270:
-               YYDEBUG(270, *YYCURSOR);
++yy274:
++              YYDEBUG(274, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '\'') goto yy194;
-               if (yych <= '/') goto yy279;
++              if (yych <= '/') goto yy283;
 +              if (yych <= '9') goto yy194;
-               goto yy279;
- yy271:
-               YYDEBUG(271, *YYCURSOR);
++              goto yy283;
++yy275:
++              YYDEBUG(275, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '"') goto yy194;
-               if (yych <= '/') goto yy273;
++              if (yych <= '/') goto yy277;
 +              if (yych <= '9') goto yy194;
-               goto yy273;
- yy272:
-               YYDEBUG(272, *YYCURSOR);
++              goto yy277;
++yy276:
++              YYDEBUG(276, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(3);
 +              yych = *YYCURSOR;
- yy273:
-               YYDEBUG(273, *YYCURSOR);
++yy277:
++              YYDEBUG(277, *YYCURSOR);
 +              if (yych <= 'Z') {
 +                      if (yych <= '/') {
 +                              if (yych != '"') goto yy194;
 +                      } else {
-                               if (yych <= '9') goto yy272;
++                              if (yych <= '9') goto yy276;
 +                              if (yych <= '@') goto yy194;
-                               goto yy272;
++                              goto yy276;
 +                      }
 +              } else {
 +                      if (yych <= '`') {
-                               if (yych == '_') goto yy272;
++                              if (yych == '_') goto yy276;
 +                              goto yy194;
 +                      } else {
-                               if (yych <= 'z') goto yy272;
++                              if (yych <= 'z') goto yy276;
 +                              if (yych <= '~') goto yy194;
-                               goto yy272;
++                              goto yy276;
 +                      }
 +              }
- yy274:
-               YYDEBUG(274, *YYCURSOR);
++yy278:
++              YYDEBUG(278, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == '\n') goto yy275;
-               if (yych == '\r') goto yy277;
++              if (yych == '\n') goto yy279;
++              if (yych == '\r') goto yy281;
 +              goto yy194;
- yy275:
-               YYDEBUG(275, *YYCURSOR);
++yy279:
++              YYDEBUG(279, *YYCURSOR);
 +              ++YYCURSOR;
- yy276:
-               YYDEBUG(276, *YYCURSOR);
++yy280:
++              YYDEBUG(280, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2078 "Zend/zend_language_scanner.l"
++#line 2086 "Zend/zend_language_scanner.l"
 +              {
 +      char *s;
 +      int bprefix = (yytext[0] != '<') ? 1 : 0;
 +      zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label));
 +
 +      CG(zend_lineno)++;
 +      heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0);
 +      s = yytext+bprefix+3;
 +      while ((*s == ' ') || (*s == '\t')) {
 +              s++;
 +              heredoc_label->length--;
 +      }
 +
 +      if (*s == '\'') {
 +              s++;
 +              heredoc_label->length -= 2;
 +
 +              BEGIN(ST_NOWDOC);
 +      } else {
 +              if (*s == '"') {
 +                      s++;
 +                      heredoc_label->length -= 2;
 +              }
 +
 +              BEGIN(ST_HEREDOC);
 +      }
 +
 +      heredoc_label->label = estrndup(s, heredoc_label->length);
 +
 +      /* Check for ending label on the next line */
 +      if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) {
 +              YYCTYPE *end = YYCURSOR + heredoc_label->length;
 +
 +              if (*end == ';') {
 +                      end++;
 +              }
 +
 +              if (*end == '\n' || *end == '\r') {
 +                      BEGIN(ST_END_HEREDOC);
 +              }
 +      }
 +
 +      zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label);
 +
 +      return T_START_HEREDOC;
 +}
- #line 3902 "Zend/zend_language_scanner.c"
- yy277:
-               YYDEBUG(277, *YYCURSOR);
++#line 3924 "Zend/zend_language_scanner.c"
++yy281:
++              YYDEBUG(281, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == '\n') goto yy275;
-               goto yy276;
- yy278:
-               YYDEBUG(278, *YYCURSOR);
++              if (yych == '\n') goto yy279;
++              goto yy280;
++yy282:
++              YYDEBUG(282, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(3);
 +              yych = *YYCURSOR;
- yy279:
-               YYDEBUG(279, *YYCURSOR);
++yy283:
++              YYDEBUG(283, *YYCURSOR);
 +              if (yych <= 'Z') {
 +                      if (yych <= '/') {
-                               if (yych == '\'') goto yy274;
++                              if (yych == '\'') goto yy278;
 +                              goto yy194;
 +                      } else {
-                               if (yych <= '9') goto yy278;
++                              if (yych <= '9') goto yy282;
 +                              if (yych <= '@') goto yy194;
-                               goto yy278;
++                              goto yy282;
 +                      }
 +              } else {
 +                      if (yych <= '`') {
-                               if (yych == '_') goto yy278;
++                              if (yych == '_') goto yy282;
 +                              goto yy194;
 +                      } else {
-                               if (yych <= 'z') goto yy278;
++                              if (yych <= 'z') goto yy282;
 +                              if (yych <= '~') goto yy194;
-                               goto yy278;
++                              goto yy282;
 +                      }
 +              }
- yy280:
-               YYDEBUG(280, *YYCURSOR);
++yy284:
++              YYDEBUG(284, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych != '=') goto yy256;
-               YYDEBUG(281, *YYCURSOR);
++              if (yych != '=') goto yy260;
++              YYDEBUG(285, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(282, *YYCURSOR);
++              YYDEBUG(286, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1373 "Zend/zend_language_scanner.l"
 +              {
 +      return T_IS_NOT_IDENTICAL;
 +}
- #line 3946 "Zend/zend_language_scanner.c"
- yy283:
-               YYDEBUG(283, *YYCURSOR);
++#line 3968 "Zend/zend_language_scanner.c"
++yy287:
++              YYDEBUG(287, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(284, *YYCURSOR);
++              YYDEBUG(288, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1393 "Zend/zend_language_scanner.l"
 +              {
 +      return T_PLUS_EQUAL;
 +}
- #line 3956 "Zend/zend_language_scanner.c"
- yy285:
-               YYDEBUG(285, *YYCURSOR);
++#line 3978 "Zend/zend_language_scanner.c"
++yy289:
++              YYDEBUG(289, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(286, *YYCURSOR);
++              YYDEBUG(290, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1361 "Zend/zend_language_scanner.l"
 +              {
 +      return T_INC;
 +}
- #line 3966 "Zend/zend_language_scanner.c"
- yy287:
-               YYDEBUG(287, *YYCURSOR);
++#line 3988 "Zend/zend_language_scanner.c"
++yy291:
++              YYDEBUG(291, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy288;
++              if (yych == 'S') goto yy292;
 +              if (yych != 's') goto yy187;
- yy288:
-               YYDEBUG(288, *YYCURSOR);
++yy292:
++              YYDEBUG(292, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy289;
++              if (yych == 'T') goto yy293;
 +              if (yych != 't') goto yy187;
- yy289:
-               YYDEBUG(289, *YYCURSOR);
++yy293:
++              YYDEBUG(293, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(290, *YYCURSOR);
++              YYDEBUG(294, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1349 "Zend/zend_language_scanner.l"
 +              {
 +      return T_LIST;
 +}
- #line 3989 "Zend/zend_language_scanner.c"
- yy291:
-               YYDEBUG(291, *YYCURSOR);
++#line 4011 "Zend/zend_language_scanner.c"
++yy295:
++              YYDEBUG(295, *YYCURSOR);
 +              ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '=') goto yy295;
-               YYDEBUG(292, *YYCURSOR);
++              if ((yych = *YYCURSOR) == '=') goto yy299;
++              YYDEBUG(296, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1377 "Zend/zend_language_scanner.l"
 +              {
 +      return T_IS_EQUAL;
 +}
- #line 4000 "Zend/zend_language_scanner.c"
- yy293:
-               YYDEBUG(293, *YYCURSOR);
++#line 4022 "Zend/zend_language_scanner.c"
++yy297:
++              YYDEBUG(297, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(294, *YYCURSOR);
++              YYDEBUG(298, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1345 "Zend/zend_language_scanner.l"
 +              {
 +      return T_DOUBLE_ARROW;
 +}
- #line 4010 "Zend/zend_language_scanner.c"
- yy295:
-               YYDEBUG(295, *YYCURSOR);
++#line 4032 "Zend/zend_language_scanner.c"
++yy299:
++              YYDEBUG(299, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(296, *YYCURSOR);
++              YYDEBUG(300, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1369 "Zend/zend_language_scanner.l"
 +              {
 +      return T_IS_IDENTICAL;
 +}
- #line 4020 "Zend/zend_language_scanner.c"
- yy297:
-               YYDEBUG(297, *YYCURSOR);
++#line 4042 "Zend/zend_language_scanner.c"
++yy301:
++              YYDEBUG(301, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              YYDEBUG(-1, yych);
 +              switch (yych) {
 +              case 'C':
-               case 'c':       goto yy299;
++              case 'c':       goto yy303;
 +              case 'D':
-               case 'd':       goto yy304;
++              case 'd':       goto yy308;
 +              case 'F':
-               case 'f':       goto yy301;
++              case 'f':       goto yy305;
 +              case 'H':
-               case 'h':       goto yy298;
++              case 'h':       goto yy302;
 +              case 'L':
-               case 'l':       goto yy303;
++              case 'l':       goto yy307;
 +              case 'M':
-               case 'm':       goto yy302;
++              case 'm':       goto yy306;
 +              case 'N':
-               case 'n':       goto yy305;
++              case 'n':       goto yy309;
 +              case 'T':
-               case 't':       goto yy300;
++              case 't':       goto yy304;
 +              default:        goto yy187;
 +              }
- yy298:
-               YYDEBUG(298, *YYCURSOR);
++yy302:
++              YYDEBUG(302, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy366;
-               if (yych == 'a') goto yy366;
++              if (yych == 'A') goto yy370;
++              if (yych == 'a') goto yy370;
 +              goto yy187;
- yy299:
-               YYDEBUG(299, *YYCURSOR);
++yy303:
++              YYDEBUG(303, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy359;
-               if (yych == 'l') goto yy359;
++              if (yych == 'L') goto yy363;
++              if (yych == 'l') goto yy363;
 +              goto yy187;
- yy300:
-               YYDEBUG(300, *YYCURSOR);
++yy304:
++              YYDEBUG(304, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy352;
-               if (yych == 'r') goto yy352;
++              if (yych == 'R') goto yy356;
++              if (yych == 'r') goto yy356;
 +              goto yy187;
- yy301:
-               YYDEBUG(301, *YYCURSOR);
++yy305:
++              YYDEBUG(305, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'U') {
-                       if (yych == 'I') goto yy336;
++                      if (yych == 'I') goto yy340;
 +                      if (yych <= 'T') goto yy187;
-                       goto yy337;
++                      goto yy341;
 +              } else {
 +                      if (yych <= 'i') {
 +                              if (yych <= 'h') goto yy187;
-                               goto yy336;
++                              goto yy340;
 +                      } else {
-                               if (yych == 'u') goto yy337;
++                              if (yych == 'u') goto yy341;
 +                              goto yy187;
 +                      }
 +              }
- yy302:
-               YYDEBUG(302, *YYCURSOR);
++yy306:
++              YYDEBUG(306, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy328;
-               if (yych == 'e') goto yy328;
++              if (yych == 'E') goto yy332;
++              if (yych == 'e') goto yy332;
 +              goto yy187;
- yy303:
-               YYDEBUG(303, *YYCURSOR);
++yy307:
++              YYDEBUG(307, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy322;
-               if (yych == 'i') goto yy322;
++              if (yych == 'I') goto yy326;
++              if (yych == 'i') goto yy326;
 +              goto yy187;
- yy304:
-               YYDEBUG(304, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'I') goto yy317;
-               if (yych == 'i') goto yy317;
-               goto yy187;
- yy305:
-               YYDEBUG(305, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy306;
-               if (yych != 'a') goto yy187;
- yy306:
-               YYDEBUG(306, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'M') goto yy307;
-               if (yych != 'm') goto yy187;
- yy307:
-               YYDEBUG(307, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy308;
-               if (yych != 'e') goto yy187;
 +yy308:
 +              YYDEBUG(308, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy309;
-               if (yych != 's') goto yy187;
++              if (yych == 'I') goto yy321;
++              if (yych == 'i') goto yy321;
++              goto yy187;
 +yy309:
 +              YYDEBUG(309, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'P') goto yy310;
-               if (yych != 'p') goto yy187;
++              if (yych == 'A') goto yy310;
++              if (yych != 'a') goto yy187;
 +yy310:
 +              YYDEBUG(310, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy311;
-               if (yych != 'a') goto yy187;
++              if (yych == 'M') goto yy311;
++              if (yych != 'm') goto yy187;
 +yy311:
 +              YYDEBUG(311, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy312;
-               if (yych != 'c') goto yy187;
++              if (yych == 'E') goto yy312;
++              if (yych != 'e') goto yy187;
 +yy312:
 +              YYDEBUG(312, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy313;
-               if (yych != 'e') goto yy187;
++              if (yych == 'S') goto yy313;
++              if (yych != 's') goto yy187;
 +yy313:
 +              YYDEBUG(313, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych != '_') goto yy187;
++              if (yych == 'P') goto yy314;
++              if (yych != 'p') goto yy187;
++yy314:
 +              YYDEBUG(314, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych != '_') goto yy187;
++              if (yych == 'A') goto yy315;
++              if (yych != 'a') goto yy187;
++yy315:
 +              YYDEBUG(315, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'C') goto yy316;
++              if (yych != 'c') goto yy187;
++yy316:
++              YYDEBUG(316, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'E') goto yy317;
++              if (yych != 'e') goto yy187;
++yy317:
++              YYDEBUG(317, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych != '_') goto yy187;
++              YYDEBUG(318, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych != '_') goto yy187;
++              YYDEBUG(319, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(316, *YYCURSOR);
++              YYDEBUG(320, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1700 "Zend/zend_language_scanner.l"
++#line 1708 "Zend/zend_language_scanner.l"
 +              {
 +      if (Z_TYPE(CG(current_namespace)) != IS_UNDEF) {
 +              ZVAL_DUP(zendlval, &CG(current_namespace));
 +      } else {
 +              ZVAL_EMPTY_STRING(zendlval);
 +      }
 +      return T_NS_C;
 +}
- #line 4159 "Zend/zend_language_scanner.c"
- yy317:
-               YYDEBUG(317, *YYCURSOR);
++#line 4181 "Zend/zend_language_scanner.c"
++yy321:
++              YYDEBUG(321, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy318;
++              if (yych == 'R') goto yy322;
 +              if (yych != 'r') goto yy187;
- yy318:
-               YYDEBUG(318, *YYCURSOR);
++yy322:
++              YYDEBUG(322, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(319, *YYCURSOR);
++              YYDEBUG(323, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(320, *YYCURSOR);
++              YYDEBUG(324, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(321, *YYCURSOR);
++              YYDEBUG(325, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1675 "Zend/zend_language_scanner.l"
++#line 1683 "Zend/zend_language_scanner.l"
 +              {
 +      zend_string *filename = zend_get_compiled_filename(TSRMLS_C);
 +      zend_string *dirname;
 +
 +      if (!filename) {
 +              filename = STR_EMPTY_ALLOC();
 +      }
 +
 +      dirname = STR_INIT(filename->val, filename->len, 0);
 +      zend_dirname(dirname->val, dirname->len);
 +
 +      if (strcmp(dirname->val, ".") == 0) {
 +              dirname = STR_REALLOC(dirname, MAXPATHLEN, 0);
 +#if HAVE_GETCWD
 +              VCWD_GETCWD(dirname->val, MAXPATHLEN);
 +#elif HAVE_GETWD
 +              VCWD_GETWD(dirname->val);
 +#endif
 +      }
 +
 +      dirname->len = strlen(dirname->val);
 +      ZVAL_STR(zendlval, dirname);
 +      return T_DIR;
 +}
- #line 4204 "Zend/zend_language_scanner.c"
- yy322:
-               YYDEBUG(322, *YYCURSOR);
++#line 4226 "Zend/zend_language_scanner.c"
++yy326:
++              YYDEBUG(326, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy323;
++              if (yych == 'N') goto yy327;
 +              if (yych != 'n') goto yy187;
- yy323:
-               YYDEBUG(323, *YYCURSOR);
++yy327:
++              YYDEBUG(327, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy324;
++              if (yych == 'E') goto yy328;
 +              if (yych != 'e') goto yy187;
- yy324:
-               YYDEBUG(324, *YYCURSOR);
++yy328:
++              YYDEBUG(328, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(325, *YYCURSOR);
++              YYDEBUG(329, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(326, *YYCURSOR);
++              YYDEBUG(330, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(327, *YYCURSOR);
++              YYDEBUG(331, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1659 "Zend/zend_language_scanner.l"
++#line 1667 "Zend/zend_language_scanner.l"
 +              {
 +      ZVAL_LONG(zendlval, CG(zend_lineno));
 +      return T_LINE;
 +}
- #line 4234 "Zend/zend_language_scanner.c"
- yy328:
-               YYDEBUG(328, *YYCURSOR);
++#line 4256 "Zend/zend_language_scanner.c"
++yy332:
++              YYDEBUG(332, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy329;
++              if (yych == 'T') goto yy333;
 +              if (yych != 't') goto yy187;
- yy329:
-               YYDEBUG(329, *YYCURSOR);
++yy333:
++              YYDEBUG(333, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy330;
++              if (yych == 'H') goto yy334;
 +              if (yych != 'h') goto yy187;
- yy330:
-               YYDEBUG(330, *YYCURSOR);
++yy334:
++              YYDEBUG(334, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy331;
++              if (yych == 'O') goto yy335;
 +              if (yych != 'o') goto yy187;
- yy331:
-               YYDEBUG(331, *YYCURSOR);
++yy335:
++              YYDEBUG(335, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'D') goto yy332;
++              if (yych == 'D') goto yy336;
 +              if (yych != 'd') goto yy187;
- yy332:
-               YYDEBUG(332, *YYCURSOR);
++yy336:
++              YYDEBUG(336, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(333, *YYCURSOR);
++              YYDEBUG(337, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(334, *YYCURSOR);
++              YYDEBUG(338, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(335, *YYCURSOR);
++              YYDEBUG(339, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1627 "Zend/zend_language_scanner.l"
++#line 1635 "Zend/zend_language_scanner.l"
 +              {
 +      if (CG(active_class_entry)) {
 +              int len = 0;
 +
 +              if (CG(active_class_entry)->name) {
 +                      len += CG(active_class_entry)->name->len;
 +              }
 +              if (CG(active_op_array) && CG(active_op_array)->function_name) {
 +                      len += sizeof("::")-1;
 +                      len += CG(active_op_array)->function_name->len;
 +              }
 +              ZVAL_NEW_STR(zendlval, STR_ALLOC(len, 0));
 +              len = 0;
 +              if (CG(active_class_entry)->name) {
 +                      memcpy(Z_STRVAL_P(zendlval), CG(active_class_entry)->name->val, CG(active_class_entry)->name->len);
 +                      len += CG(active_class_entry)->name->len;
 +              }
 +              if (CG(active_op_array) && CG(active_op_array)->function_name) {
 +                      memcpy(Z_STRVAL_P(zendlval) + len, "::", sizeof("::")-1);
 +                      len += sizeof("::")-1;
 +                      memcpy(Z_STRVAL_P(zendlval) + len, CG(active_op_array)->function_name->val, CG(active_op_array)->function_name->len);
 +                      len += CG(active_op_array)->function_name->len;
 +              }
 +              Z_STRVAL_P(zendlval)[len] = 0;
 +      } else if (CG(active_op_array) && CG(active_op_array)->function_name) {
 +              ZVAL_STR(zendlval, STR_COPY(CG(active_op_array)->function_name));
 +      } else {
 +              ZVAL_EMPTY_STRING(zendlval);
 +      }
 +      return T_METHOD_C;
 +}
- #line 4301 "Zend/zend_language_scanner.c"
- yy336:
-               YYDEBUG(336, *YYCURSOR);
++#line 4323 "Zend/zend_language_scanner.c"
++yy340:
++              YYDEBUG(340, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy347;
-               if (yych == 'l') goto yy347;
++              if (yych == 'L') goto yy351;
++              if (yych == 'l') goto yy351;
 +              goto yy187;
- yy337:
-               YYDEBUG(337, *YYCURSOR);
++yy341:
++              YYDEBUG(341, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy338;
++              if (yych == 'N') goto yy342;
 +              if (yych != 'n') goto yy187;
- yy338:
-               YYDEBUG(338, *YYCURSOR);
++yy342:
++              YYDEBUG(342, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy339;
++              if (yych == 'C') goto yy343;
 +              if (yych != 'c') goto yy187;
- yy339:
-               YYDEBUG(339, *YYCURSOR);
++yy343:
++              YYDEBUG(343, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy340;
++              if (yych == 'T') goto yy344;
 +              if (yych != 't') goto yy187;
- yy340:
-               YYDEBUG(340, *YYCURSOR);
++yy344:
++              YYDEBUG(344, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy341;
++              if (yych == 'I') goto yy345;
 +              if (yych != 'i') goto yy187;
- yy341:
-               YYDEBUG(341, *YYCURSOR);
++yy345:
++              YYDEBUG(345, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy342;
++              if (yych == 'O') goto yy346;
 +              if (yych != 'o') goto yy187;
- yy342:
-               YYDEBUG(342, *YYCURSOR);
++yy346:
++              YYDEBUG(346, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy343;
++              if (yych == 'N') goto yy347;
 +              if (yych != 'n') goto yy187;
- yy343:
-               YYDEBUG(343, *YYCURSOR);
++yy347:
++              YYDEBUG(347, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(344, *YYCURSOR);
++              YYDEBUG(348, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(345, *YYCURSOR);
++              YYDEBUG(349, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(346, *YYCURSOR);
++              YYDEBUG(350, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1617 "Zend/zend_language_scanner.l"
++#line 1625 "Zend/zend_language_scanner.l"
 +              {
 +      zend_op_array *op_array = CG(active_op_array);
 +      if (op_array && op_array->function_name) {
 +              ZVAL_STR(zendlval, STR_COPY(op_array->function_name));
 +      } else {
 +              ZVAL_EMPTY_STRING(zendlval);
 +      }
 +      return T_FUNC_C;
 +}
- #line 4362 "Zend/zend_language_scanner.c"
- yy347:
-               YYDEBUG(347, *YYCURSOR);
++#line 4384 "Zend/zend_language_scanner.c"
++yy351:
++              YYDEBUG(351, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy348;
++              if (yych == 'E') goto yy352;
 +              if (yych != 'e') goto yy187;
- yy348:
-               YYDEBUG(348, *YYCURSOR);
++yy352:
++              YYDEBUG(352, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(349, *YYCURSOR);
++              YYDEBUG(353, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(350, *YYCURSOR);
++              YYDEBUG(354, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(351, *YYCURSOR);
++              YYDEBUG(355, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1664 "Zend/zend_language_scanner.l"
++#line 1672 "Zend/zend_language_scanner.l"
 +              {
 +      zend_string *filename = zend_get_compiled_filename(TSRMLS_C);
 +
 +      if (!filename) {
 +              ZVAL_EMPTY_STRING(zendlval);
 +      } else {
 +              ZVAL_STR(zendlval, STR_COPY(filename));
 +      }
 +      return T_FILE;
 +}
- #line 4393 "Zend/zend_language_scanner.c"
- yy352:
-               YYDEBUG(352, *YYCURSOR);
++#line 4415 "Zend/zend_language_scanner.c"
++yy356:
++              YYDEBUG(356, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy353;
++              if (yych == 'A') goto yy357;
 +              if (yych != 'a') goto yy187;
- yy353:
-               YYDEBUG(353, *YYCURSOR);
++yy357:
++              YYDEBUG(357, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy354;
++              if (yych == 'I') goto yy358;
 +              if (yych != 'i') goto yy187;
- yy354:
-               YYDEBUG(354, *YYCURSOR);
++yy358:
++              YYDEBUG(358, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy355;
++              if (yych == 'T') goto yy359;
 +              if (yych != 't') goto yy187;
- yy355:
-               YYDEBUG(355, *YYCURSOR);
++yy359:
++              YYDEBUG(359, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(356, *YYCURSOR);
++              YYDEBUG(360, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(357, *YYCURSOR);
++              YYDEBUG(361, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(358, *YYCURSOR);
++              YYDEBUG(362, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1607 "Zend/zend_language_scanner.l"
++#line 1615 "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)) {
 +              ZVAL_STR(zendlval, STR_COPY(ce->name));
 +      } else {
 +              ZVAL_EMPTY_STRING(zendlval);
 +      }
 +      return T_TRAIT_C;
 +}
- #line 4433 "Zend/zend_language_scanner.c"
- yy359:
-               YYDEBUG(359, *YYCURSOR);
++#line 4455 "Zend/zend_language_scanner.c"
++yy363:
++              YYDEBUG(363, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy360;
++              if (yych == 'A') goto yy364;
 +              if (yych != 'a') goto yy187;
- yy360:
-               YYDEBUG(360, *YYCURSOR);
++yy364:
++              YYDEBUG(364, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy361;
++              if (yych == 'S') goto yy365;
 +              if (yych != 's') goto yy187;
- yy361:
-               YYDEBUG(361, *YYCURSOR);
++yy365:
++              YYDEBUG(365, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy362;
++              if (yych == 'S') goto yy366;
 +              if (yych != 's') goto yy187;
- yy362:
-               YYDEBUG(362, *YYCURSOR);
++yy366:
++              YYDEBUG(366, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(363, *YYCURSOR);
++              YYDEBUG(367, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '_') goto yy187;
-               YYDEBUG(364, *YYCURSOR);
++              YYDEBUG(368, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(365, *YYCURSOR);
++              YYDEBUG(369, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1590 "Zend/zend_language_scanner.l"
++#line 1598 "Zend/zend_language_scanner.l"
 +              {
 +      zend_class_entry *ce = CG(active_class_entry);
 +      if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
 +              /* We create a special __CLASS__ constant that is going to be resolved
 +                 at run-time */
 +              ZVAL_STRINGL(zendlval, "__CLASS__", sizeof("__CLASS__") - 1);
 +              Z_TYPE_INFO_P(zendlval) = IS_CONSTANT_EX;
 +      } else {
 +              if (ce && ce->name) {
 +                      ZVAL_STR(zendlval, STR_COPY(ce->name));
 +              } else {
 +                      ZVAL_EMPTY_STRING(zendlval);
 +              }
 +      }
 +      return T_CLASS_C;
 +}
- #line 4480 "Zend/zend_language_scanner.c"
- yy366:
-               YYDEBUG(366, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy367;
-               if (yych != 'l') goto yy187;
- yy367:
-               YYDEBUG(367, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy368;
-               if (yych != 't') goto yy187;
- yy368:
-               YYDEBUG(368, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych != '_') goto yy187;
-               YYDEBUG(369, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy370;
-               if (yych != 'c') goto yy187;
++#line 4502 "Zend/zend_language_scanner.c"
 +yy370:
 +              YYDEBUG(370, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy371;
-               if (yych != 'o') goto yy187;
++              if (yych == 'L') goto yy371;
++              if (yych != 'l') goto yy187;
 +yy371:
 +              YYDEBUG(371, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'M') goto yy372;
-               if (yych != 'm') goto yy187;
++              if (yych == 'T') goto yy372;
++              if (yych != 't') goto yy187;
 +yy372:
 +              YYDEBUG(372, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'P') goto yy373;
-               if (yych != 'p') goto yy187;
- yy373:
++              if (yych != '_') goto yy187;
 +              YYDEBUG(373, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy374;
-               if (yych != 'i') goto yy187;
++              if (yych == 'C') goto yy374;
++              if (yych != 'c') goto yy187;
 +yy374:
 +              YYDEBUG(374, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy375;
-               if (yych != 'l') goto yy187;
++              if (yych == 'O') goto yy375;
++              if (yych != 'o') goto yy187;
 +yy375:
 +              YYDEBUG(375, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy376;
-               if (yych != 'e') goto yy187;
++              if (yych == 'M') goto yy376;
++              if (yych != 'm') goto yy187;
 +yy376:
 +              YYDEBUG(376, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy377;
-               if (yych != 'r') goto yy187;
++              if (yych == 'P') goto yy377;
++              if (yych != 'p') goto yy187;
 +yy377:
 +              YYDEBUG(377, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 4) {
-                       goto yy186;
-               }
++              yych = *++YYCURSOR;
++              if (yych == 'I') goto yy378;
++              if (yych != 'i') goto yy187;
++yy378:
 +              YYDEBUG(378, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
- #line 1313 "Zend/zend_language_scanner.l"
-               {
-       return T_HALT_COMPILER;
- }
- #line 4546 "Zend/zend_language_scanner.c"
++              yych = *++YYCURSOR;
++              if (yych == 'L') goto yy379;
++              if (yych != 'l') goto yy187;
 +yy379:
 +              YYDEBUG(379, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy383;
-               if (yych == 's') goto yy383;
-               goto yy187;
++              if (yych == 'E') goto yy380;
++              if (yych != 'e') goto yy187;
 +yy380:
 +              YYDEBUG(380, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy381;
-               if (yych != 'e') goto yy187;
++              if (yych == 'R') goto yy381;
++              if (yych != 'r') goto yy187;
 +yy381:
 +              YYDEBUG(381, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
 +              YYDEBUG(382, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1293 "Zend/zend_language_scanner.l"
++#line 1313 "Zend/zend_language_scanner.l"
 +              {
-       return T_USE;
++      return T_HALT_COMPILER;
 +}
- #line 4570 "Zend/zend_language_scanner.c"
++#line 4568 "Zend/zend_language_scanner.c"
 +yy383:
 +              YYDEBUG(383, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy384;
-               if (yych != 'e') goto yy187;
++              if (yych == 'S') goto yy387;
++              if (yych == 's') goto yy387;
++              goto yy187;
 +yy384:
 +              YYDEBUG(384, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy385;
-               if (yych != 't') goto yy187;
++              if (yych == 'E') goto yy385;
++              if (yych != 'e') goto yy187;
 +yy385:
 +              YYDEBUG(385, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
 +              YYDEBUG(386, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1341 "Zend/zend_language_scanner.l"
++#line 1293 "Zend/zend_language_scanner.l"
 +              {
-       return T_UNSET;
++      return T_USE;
 +}
- #line 4593 "Zend/zend_language_scanner.c"
++#line 4592 "Zend/zend_language_scanner.c"
 +yy387:
 +              YYDEBUG(387, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'E') goto yy388;
++              if (yych != 'e') goto yy187;
++yy388:
++              YYDEBUG(388, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'T') goto yy389;
++              if (yych != 't') goto yy187;
++yy389:
++              YYDEBUG(389, *YYCURSOR);
++              ++YYCURSOR;
++              if (yybm[0+(yych = *YYCURSOR)] & 4) {
++                      goto yy186;
++              }
++              YYDEBUG(390, *YYCURSOR);
++              yyleng = YYCURSOR - SCNG(yy_text);
++#line 1341 "Zend/zend_language_scanner.l"
++              {
++      return T_UNSET;
++}
++#line 4615 "Zend/zend_language_scanner.c"
++yy391:
++              YYDEBUG(391, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(7);
 +              yych = *YYCURSOR;
- yy388:
-               YYDEBUG(388, *YYCURSOR);
++yy392:
++              YYDEBUG(392, *YYCURSOR);
 +              if (yych <= 'S') {
 +                      if (yych <= 'D') {
 +                              if (yych <= ' ') {
-                                       if (yych == '\t') goto yy387;
++                                      if (yych == '\t') goto yy391;
 +                                      if (yych <= 0x1F) goto yy194;
-                                       goto yy387;
++                                      goto yy391;
 +                              } else {
 +                                      if (yych <= 'A') {
 +                                              if (yych <= '@') goto yy194;
-                                               goto yy392;
++                                              goto yy396;
 +                                      } else {
-                                               if (yych <= 'B') goto yy390;
++                                              if (yych <= 'B') goto yy394;
 +                                              if (yych <= 'C') goto yy194;
-                                               goto yy395;
++                                              goto yy399;
 +                                      }
 +                              }
 +                      } else {
 +                              if (yych <= 'I') {
-                                       if (yych == 'F') goto yy396;
++                                      if (yych == 'F') goto yy400;
 +                                      if (yych <= 'H') goto yy194;
-                                       goto yy397;
++                                      goto yy401;
 +                              } else {
 +                                      if (yych <= 'O') {
 +                                              if (yych <= 'N') goto yy194;
-                                               goto yy391;
++                                              goto yy395;
 +                                      } else {
 +                                              if (yych <= 'Q') goto yy194;
-                                               if (yych <= 'R') goto yy394;
-                                               goto yy393;
++                                              if (yych <= 'R') goto yy398;
++                                              goto yy397;
 +                                      }
 +                              }
 +                      }
 +              } else {
 +                      if (yych <= 'f') {
 +                              if (yych <= 'a') {
-                                       if (yych == 'U') goto yy389;
++                                      if (yych == 'U') goto yy393;
 +                                      if (yych <= '`') goto yy194;
-                                       goto yy392;
++                                      goto yy396;
 +                              } else {
 +                                      if (yych <= 'c') {
-                                               if (yych <= 'b') goto yy390;
++                                              if (yych <= 'b') goto yy394;
 +                                              goto yy194;
 +                                      } else {
-                                               if (yych <= 'd') goto yy395;
++                                              if (yych <= 'd') goto yy399;
 +                                              if (yych <= 'e') goto yy194;
-                                               goto yy396;
++                                              goto yy400;
 +                                      }
 +                              }
 +                      } else {
 +                              if (yych <= 'q') {
 +                                      if (yych <= 'i') {
 +                                              if (yych <= 'h') goto yy194;
-                                               goto yy397;
++                                              goto yy401;
 +                                      } else {
-                                               if (yych == 'o') goto yy391;
++                                              if (yych == 'o') goto yy395;
 +                                              goto yy194;
 +                                      }
 +                              } else {
 +                                      if (yych <= 's') {
-                                               if (yych <= 'r') goto yy394;
-                                               goto yy393;
++                                              if (yych <= 'r') goto yy398;
++                                              goto yy397;
 +                                      } else {
 +                                              if (yych != 'u') goto yy194;
 +                                      }
 +                              }
 +                      }
 +              }
- yy389:
-               YYDEBUG(389, *YYCURSOR);
++yy393:
++              YYDEBUG(393, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy456;
-               if (yych == 'n') goto yy456;
++              if (yych == 'N') goto yy460;
++              if (yych == 'n') goto yy460;
 +              goto yy194;
- yy390:
-               YYDEBUG(390, *YYCURSOR);
++yy394:
++              YYDEBUG(394, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'O') {
-                       if (yych == 'I') goto yy443;
++                      if (yych == 'I') goto yy447;
 +                      if (yych <= 'N') goto yy194;
-                       goto yy444;
++                      goto yy448;
 +              } else {
 +                      if (yych <= 'i') {
 +                              if (yych <= 'h') goto yy194;
-                               goto yy443;
++                              goto yy447;
 +                      } else {
-                               if (yych == 'o') goto yy444;
++                              if (yych == 'o') goto yy448;
 +                              goto yy194;
 +                      }
 +              }
- yy391:
-               YYDEBUG(391, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'B') goto yy435;
-               if (yych == 'b') goto yy435;
-               goto yy194;
- yy392:
-               YYDEBUG(392, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy428;
-               if (yych == 'r') goto yy428;
-               goto yy194;
- yy393:
-               YYDEBUG(393, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy420;
-               if (yych == 't') goto yy420;
-               goto yy194;
- yy394:
-               YYDEBUG(394, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy418;
-               if (yych == 'e') goto yy418;
-               goto yy194;
 +yy395:
 +              YYDEBUG(395, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy414;
-               if (yych == 'o') goto yy414;
++              if (yych == 'B') goto yy439;
++              if (yych == 'b') goto yy439;
 +              goto yy194;
 +yy396:
 +              YYDEBUG(396, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy407;
-               if (yych == 'l') goto yy407;
++              if (yych == 'R') goto yy432;
++              if (yych == 'r') goto yy432;
 +              goto yy194;
 +yy397:
 +              YYDEBUG(397, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy398;
-               if (yych != 'n') goto yy194;
++              if (yych == 'T') goto yy424;
++              if (yych == 't') goto yy424;
++              goto yy194;
 +yy398:
 +              YYDEBUG(398, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy399;
-               if (yych != 't') goto yy194;
++              if (yych == 'E') goto yy422;
++              if (yych == 'e') goto yy422;
++              goto yy194;
 +yy399:
 +              YYDEBUG(399, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy400;
-               if (yych != 'e') goto yy402;
++              if (yych == 'O') goto yy418;
++              if (yych == 'o') goto yy418;
++              goto yy194;
 +yy400:
 +              YYDEBUG(400, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'G') goto yy405;
-               if (yych == 'g') goto yy405;
++              if (yych == 'L') goto yy411;
++              if (yych == 'l') goto yy411;
 +              goto yy194;
 +yy401:
 +              YYDEBUG(401, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'N') goto yy402;
++              if (yych != 'n') goto yy194;
++yy402:
++              YYDEBUG(402, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'T') goto yy403;
++              if (yych != 't') goto yy194;
++yy403:
++              YYDEBUG(403, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'E') goto yy404;
++              if (yych != 'e') goto yy406;
++yy404:
++              YYDEBUG(404, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'G') goto yy409;
++              if (yych == 'g') goto yy409;
++              goto yy194;
++yy405:
++              YYDEBUG(405, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
- yy402:
-               YYDEBUG(402, *YYCURSOR);
++yy406:
++              YYDEBUG(406, *YYCURSOR);
 +              if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy401;
++                      if (yych == '\t') goto yy405;
 +                      goto yy194;
 +              } else {
-                       if (yych <= ' ') goto yy401;
++                      if (yych <= ' ') goto yy405;
 +                      if (yych != ')') goto yy194;
 +              }
-               YYDEBUG(403, *YYCURSOR);
++              YYDEBUG(407, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(404, *YYCURSOR);
++              YYDEBUG(408, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1241 "Zend/zend_language_scanner.l"
 +              {
 +      return T_INT_CAST;
 +}
- #line 4769 "Zend/zend_language_scanner.c"
- yy405:
-               YYDEBUG(405, *YYCURSOR);
++#line 4791 "Zend/zend_language_scanner.c"
++yy409:
++              YYDEBUG(409, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy406;
++              if (yych == 'E') goto yy410;
 +              if (yych != 'e') goto yy194;
- yy406:
-               YYDEBUG(406, *YYCURSOR);
++yy410:
++              YYDEBUG(410, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy401;
-               if (yych == 'r') goto yy401;
++              if (yych == 'R') goto yy405;
++              if (yych == 'r') goto yy405;
 +              goto yy194;
- yy407:
-               YYDEBUG(407, *YYCURSOR);
++yy411:
++              YYDEBUG(411, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy408;
++              if (yych == 'O') goto yy412;
 +              if (yych != 'o') goto yy194;
- yy408:
-               YYDEBUG(408, *YYCURSOR);
++yy412:
++              YYDEBUG(412, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy409;
++              if (yych == 'A') goto yy413;
 +              if (yych != 'a') goto yy194;
- yy409:
-               YYDEBUG(409, *YYCURSOR);
++yy413:
++              YYDEBUG(413, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy410;
++              if (yych == 'T') goto yy414;
 +              if (yych != 't') goto yy194;
- yy410:
-               YYDEBUG(410, *YYCURSOR);
++yy414:
++              YYDEBUG(414, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-               YYDEBUG(411, *YYCURSOR);
++              YYDEBUG(415, *YYCURSOR);
 +              if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy410;
++                      if (yych == '\t') goto yy414;
 +                      goto yy194;
 +              } else {
-                       if (yych <= ' ') goto yy410;
++                      if (yych <= ' ') goto yy414;
 +                      if (yych != ')') goto yy194;
 +              }
-               YYDEBUG(412, *YYCURSOR);
++              YYDEBUG(416, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(413, *YYCURSOR);
++              YYDEBUG(417, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1245 "Zend/zend_language_scanner.l"
 +              {
 +      return T_DOUBLE_CAST;
 +}
- #line 4817 "Zend/zend_language_scanner.c"
- yy414:
-               YYDEBUG(414, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'U') goto yy415;
-               if (yych != 'u') goto yy194;
- yy415:
-               YYDEBUG(415, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'B') goto yy416;
-               if (yych != 'b') goto yy194;
- yy416:
-               YYDEBUG(416, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy417;
-               if (yych != 'l') goto yy194;
- yy417:
-               YYDEBUG(417, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy410;
-               if (yych == 'e') goto yy410;
-               goto yy194;
++#line 4839 "Zend/zend_language_scanner.c"
 +yy418:
 +              YYDEBUG(418, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy419;
-               if (yych != 'a') goto yy194;
++              if (yych == 'U') goto yy419;
++              if (yych != 'u') goto yy194;
 +yy419:
 +              YYDEBUG(419, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy410;
-               if (yych == 'l') goto yy410;
-               goto yy194;
++              if (yych == 'B') goto yy420;
++              if (yych != 'b') goto yy194;
 +yy420:
 +              YYDEBUG(420, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy421;
-               if (yych != 'r') goto yy194;
++              if (yych == 'L') goto yy421;
++              if (yych != 'l') goto yy194;
 +yy421:
 +              YYDEBUG(421, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy422;
-               if (yych != 'i') goto yy194;
++              if (yych == 'E') goto yy414;
++              if (yych == 'e') goto yy414;
++              goto yy194;
 +yy422:
 +              YYDEBUG(422, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy423;
-               if (yych != 'n') goto yy194;
++              if (yych == 'A') goto yy423;
++              if (yych != 'a') goto yy194;
 +yy423:
 +              YYDEBUG(423, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'G') goto yy424;
-               if (yych != 'g') goto yy194;
++              if (yych == 'L') goto yy414;
++              if (yych == 'l') goto yy414;
++              goto yy194;
 +yy424:
 +              YYDEBUG(424, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'R') goto yy425;
++              if (yych != 'r') goto yy194;
++yy425:
++              YYDEBUG(425, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'I') goto yy426;
++              if (yych != 'i') goto yy194;
++yy426:
++              YYDEBUG(426, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'N') goto yy427;
++              if (yych != 'n') goto yy194;
++yy427:
++              YYDEBUG(427, *YYCURSOR);
++              yych = *++YYCURSOR;
++              if (yych == 'G') goto yy428;
++              if (yych != 'g') goto yy194;
++yy428:
++              YYDEBUG(428, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-               YYDEBUG(425, *YYCURSOR);
++              YYDEBUG(429, *YYCURSOR);
 +              if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy424;
++                      if (yych == '\t') goto yy428;
 +                      goto yy194;
 +              } else {
-                       if (yych <= ' ') goto yy424;
++                      if (yych <= ' ') goto yy428;
 +                      if (yych != ')') goto yy194;
 +              }
-               YYDEBUG(426, *YYCURSOR);
++              YYDEBUG(430, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(427, *YYCURSOR);
++              YYDEBUG(431, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1249 "Zend/zend_language_scanner.l"
 +              {
 +      return T_STRING_CAST;
 +}
- #line 4891 "Zend/zend_language_scanner.c"
- yy428:
-               YYDEBUG(428, *YYCURSOR);
++#line 4913 "Zend/zend_language_scanner.c"
++yy432:
++              YYDEBUG(432, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy429;
++              if (yych == 'R') goto yy433;
 +              if (yych != 'r') goto yy194;
- yy429:
-               YYDEBUG(429, *YYCURSOR);
++yy433:
++              YYDEBUG(433, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy430;
++              if (yych == 'A') goto yy434;
 +              if (yych != 'a') goto yy194;
- yy430:
-               YYDEBUG(430, *YYCURSOR);
++yy434:
++              YYDEBUG(434, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy431;
++              if (yych == 'Y') goto yy435;
 +              if (yych != 'y') goto yy194;
- yy431:
-               YYDEBUG(431, *YYCURSOR);
++yy435:
++              YYDEBUG(435, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-               YYDEBUG(432, *YYCURSOR);
++              YYDEBUG(436, *YYCURSOR);
 +              if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy431;
++                      if (yych == '\t') goto yy435;
 +                      goto yy194;
 +              } else {
-                       if (yych <= ' ') goto yy431;
++                      if (yych <= ' ') goto yy435;
 +                      if (yych != ')') goto yy194;
 +              }
-               YYDEBUG(433, *YYCURSOR);
++              YYDEBUG(437, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(434, *YYCURSOR);
++              YYDEBUG(438, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1253 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ARRAY_CAST;
 +}
- #line 4928 "Zend/zend_language_scanner.c"
- yy435:
-               YYDEBUG(435, *YYCURSOR);
++#line 4950 "Zend/zend_language_scanner.c"
++yy439:
++              YYDEBUG(439, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'J') goto yy436;
++              if (yych == 'J') goto yy440;
 +              if (yych != 'j') goto yy194;
- yy436:
-               YYDEBUG(436, *YYCURSOR);
++yy440:
++              YYDEBUG(440, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy437;
++              if (yych == 'E') goto yy441;
 +              if (yych != 'e') goto yy194;
- yy437:
-               YYDEBUG(437, *YYCURSOR);
++yy441:
++              YYDEBUG(441, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy438;
++              if (yych == 'C') goto yy442;
 +              if (yych != 'c') goto yy194;
- yy438:
-               YYDEBUG(438, *YYCURSOR);
++yy442:
++              YYDEBUG(442, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy439;
++              if (yych == 'T') goto yy443;
 +              if (yych != 't') goto yy194;
- yy439:
-               YYDEBUG(439, *YYCURSOR);
++yy443:
++              YYDEBUG(443, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-               YYDEBUG(440, *YYCURSOR);
++              YYDEBUG(444, *YYCURSOR);
 +              if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy439;
++                      if (yych == '\t') goto yy443;
 +                      goto yy194;
 +              } else {
-                       if (yych <= ' ') goto yy439;
++                      if (yych <= ' ') goto yy443;
 +                      if (yych != ')') goto yy194;
 +              }
-               YYDEBUG(441, *YYCURSOR);
++              YYDEBUG(445, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(442, *YYCURSOR);
++              YYDEBUG(446, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1257 "Zend/zend_language_scanner.l"
 +              {
 +      return T_OBJECT_CAST;
 +}
- #line 4970 "Zend/zend_language_scanner.c"
- yy443:
-               YYDEBUG(443, *YYCURSOR);
++#line 4992 "Zend/zend_language_scanner.c"
++yy447:
++              YYDEBUG(447, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy453;
-               if (yych == 'n') goto yy453;
++              if (yych == 'N') goto yy457;
++              if (yych == 'n') goto yy457;
 +              goto yy194;
- yy444:
-               YYDEBUG(444, *YYCURSOR);
++yy448:
++              YYDEBUG(448, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy445;
++              if (yych == 'O') goto yy449;
 +              if (yych != 'o') goto yy194;
- yy445:
-               YYDEBUG(445, *YYCURSOR);
++yy449:
++              YYDEBUG(449, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy446;
++              if (yych == 'L') goto yy450;
 +              if (yych != 'l') goto yy194;
- yy446:
-               YYDEBUG(446, *YYCURSOR);
++yy450:
++              YYDEBUG(450, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy451;
-               if (yych == 'e') goto yy451;
-               goto yy448;
- yy447:
-               YYDEBUG(447, *YYCURSOR);
++              if (yych == 'E') goto yy455;
++              if (yych == 'e') goto yy455;
++              goto yy452;
++yy451:
++              YYDEBUG(451, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
- yy448:
-               YYDEBUG(448, *YYCURSOR);
++yy452:
++              YYDEBUG(452, *YYCURSOR);
 +              if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy447;
++                      if (yych == '\t') goto yy451;
 +                      goto yy194;
 +              } else {
-                       if (yych <= ' ') goto yy447;
++                      if (yych <= ' ') goto yy451;
 +                      if (yych != ')') goto yy194;
 +              }
-               YYDEBUG(449, *YYCURSOR);
++              YYDEBUG(453, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(450, *YYCURSOR);
++              YYDEBUG(454, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1261 "Zend/zend_language_scanner.l"
 +              {
 +      return T_BOOL_CAST;
 +}
- #line 5015 "Zend/zend_language_scanner.c"
- yy451:
-               YYDEBUG(451, *YYCURSOR);
++#line 5037 "Zend/zend_language_scanner.c"
++yy455:
++              YYDEBUG(455, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy452;
++              if (yych == 'A') goto yy456;
 +              if (yych != 'a') goto yy194;
- yy452:
-               YYDEBUG(452, *YYCURSOR);
++yy456:
++              YYDEBUG(456, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy447;
-               if (yych == 'n') goto yy447;
++              if (yych == 'N') goto yy451;
++              if (yych == 'n') goto yy451;
 +              goto yy194;
- yy453:
-               YYDEBUG(453, *YYCURSOR);
++yy457:
++              YYDEBUG(457, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy454;
++              if (yych == 'A') goto yy458;
 +              if (yych != 'a') goto yy194;
- yy454:
-               YYDEBUG(454, *YYCURSOR);
++yy458:
++              YYDEBUG(458, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy455;
++              if (yych == 'R') goto yy459;
 +              if (yych != 'r') goto yy194;
- yy455:
-               YYDEBUG(455, *YYCURSOR);
++yy459:
++              YYDEBUG(459, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy424;
-               if (yych == 'y') goto yy424;
++              if (yych == 'Y') goto yy428;
++              if (yych == 'y') goto yy428;
 +              goto yy194;
- yy456:
-               YYDEBUG(456, *YYCURSOR);
++yy460:
++              YYDEBUG(460, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy457;
++              if (yych == 'S') goto yy461;
 +              if (yych != 's') goto yy194;
- yy457:
-               YYDEBUG(457, *YYCURSOR);
++yy461:
++              YYDEBUG(461, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy458;
++              if (yych == 'E') goto yy462;
 +              if (yych != 'e') goto yy194;
- yy458:
-               YYDEBUG(458, *YYCURSOR);
++yy462:
++              YYDEBUG(462, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy459;
++              if (yych == 'T') goto yy463;
 +              if (yych != 't') goto yy194;
- yy459:
-               YYDEBUG(459, *YYCURSOR);
++yy463:
++              YYDEBUG(463, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-               YYDEBUG(460, *YYCURSOR);
++              YYDEBUG(464, *YYCURSOR);
 +              if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy459;
++                      if (yych == '\t') goto yy463;
 +                      goto yy194;
 +              } else {
-                       if (yych <= ' ') goto yy459;
++                      if (yych <= ' ') goto yy463;
 +                      if (yych != ')') goto yy194;
 +              }
-               YYDEBUG(461, *YYCURSOR);
++              YYDEBUG(465, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(462, *YYCURSOR);
++              YYDEBUG(466, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1265 "Zend/zend_language_scanner.l"
 +              {
 +      return T_UNSET_CAST;
 +}
- #line 5079 "Zend/zend_language_scanner.c"
- yy463:
-               YYDEBUG(463, *YYCURSOR);
++#line 5101 "Zend/zend_language_scanner.c"
++yy467:
++              YYDEBUG(467, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy464;
++              if (yych == 'R') goto yy468;
 +              if (yych != 'r') goto yy187;
- yy464:
-               YYDEBUG(464, *YYCURSOR);
++yy468:
++              YYDEBUG(468, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(465, *YYCURSOR);
++              YYDEBUG(469, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1237 "Zend/zend_language_scanner.l"
 +              {
 +      return T_VAR;
 +}
- #line 5097 "Zend/zend_language_scanner.c"
- yy466:
-               YYDEBUG(466, *YYCURSOR);
++#line 5119 "Zend/zend_language_scanner.c"
++yy470:
++              YYDEBUG(470, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'M') goto yy470;
-               if (yych == 'm') goto yy470;
++              if (yych == 'M') goto yy474;
++              if (yych == 'm') goto yy474;
 +              goto yy187;
- yy467:
-               YYDEBUG(467, *YYCURSOR);
++yy471:
++              YYDEBUG(471, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'W') goto yy468;
++              if (yych == 'W') goto yy472;
 +              if (yych != 'w') goto yy187;
- yy468:
-               YYDEBUG(468, *YYCURSOR);
++yy472:
++              YYDEBUG(472, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(469, *YYCURSOR);
++              YYDEBUG(473, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1229 "Zend/zend_language_scanner.l"
 +              {
 +      return T_NEW;
 +}
- #line 5121 "Zend/zend_language_scanner.c"
- yy470:
-               YYDEBUG(470, *YYCURSOR);
++#line 5143 "Zend/zend_language_scanner.c"
++yy474:
++              YYDEBUG(474, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy471;
++              if (yych == 'E') goto yy475;
 +              if (yych != 'e') goto yy187;
- yy471:
-               YYDEBUG(471, *YYCURSOR);
++yy475:
++              YYDEBUG(475, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy472;
++              if (yych == 'S') goto yy476;
 +              if (yych != 's') goto yy187;
- yy472:
-               YYDEBUG(472, *YYCURSOR);
++yy476:
++              YYDEBUG(476, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'P') goto yy473;
++              if (yych == 'P') goto yy477;
 +              if (yych != 'p') goto yy187;
- yy473:
-               YYDEBUG(473, *YYCURSOR);
++yy477:
++              YYDEBUG(477, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy474;
++              if (yych == 'A') goto yy478;
 +              if (yych != 'a') goto yy187;
- yy474:
-               YYDEBUG(474, *YYCURSOR);
++yy478:
++              YYDEBUG(478, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy475;
++              if (yych == 'C') goto yy479;
 +              if (yych != 'c') goto yy187;
- yy475:
-               YYDEBUG(475, *YYCURSOR);
++yy479:
++              YYDEBUG(479, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy476;
++              if (yych == 'E') goto yy480;
 +              if (yych != 'e') goto yy187;
- yy476:
-               YYDEBUG(476, *YYCURSOR);
++yy480:
++              YYDEBUG(480, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(477, *YYCURSOR);
++              YYDEBUG(481, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1289 "Zend/zend_language_scanner.l"
 +              {
 +      return T_NAMESPACE;
 +}
- #line 5164 "Zend/zend_language_scanner.c"
- yy478:
-               YYDEBUG(478, *YYCURSOR);
++#line 5186 "Zend/zend_language_scanner.c"
++yy482:
++              YYDEBUG(482, *YYCURSOR);
 +              yyaccept = 3;
 +              YYMARKER = ++YYCURSOR;
 +              YYFILL(3);
 +              yych = *YYCURSOR;
-               YYDEBUG(479, *YYCURSOR);
++              YYDEBUG(483, *YYCURSOR);
 +              if (yych <= 'D') {
 +                      if (yych <= '/') goto yy190;
-                       if (yych <= '9') goto yy478;
++                      if (yych <= '9') goto yy482;
 +                      goto yy190;
 +              } else {
 +                      if (yych <= 'E') goto yy193;
 +                      if (yych == 'e') goto yy193;
 +                      goto yy190;
 +              }
- yy480:
-               YYDEBUG(480, *YYCURSOR);
++yy484:
++              YYDEBUG(484, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(481, *YYCURSOR);
++              YYDEBUG(485, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1409 "Zend/zend_language_scanner.l"
++#line 1417 "Zend/zend_language_scanner.l"
 +              {
 +      return T_CONCAT_EQUAL;
 +}
- #line 5190 "Zend/zend_language_scanner.c"
- yy482:
-               YYDEBUG(482, *YYCURSOR);
++#line 5212 "Zend/zend_language_scanner.c"
++yy486:
++              YYDEBUG(486, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych != '.') goto yy194;
-               YYDEBUG(483, *YYCURSOR);
++              YYDEBUG(487, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(484, *YYCURSOR);
++              YYDEBUG(488, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1225 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ELLIPSIS;
 +}
- #line 5203 "Zend/zend_language_scanner.c"
- yy485:
-               YYDEBUG(485, *YYCURSOR);
++#line 5225 "Zend/zend_language_scanner.c"
++yy489:
++              YYDEBUG(489, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(486, *YYCURSOR);
++              YYDEBUG(490, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1217 "Zend/zend_language_scanner.l"
 +              {
 +      return T_PAAMAYIM_NEKUDOTAYIM;
 +}
- #line 5213 "Zend/zend_language_scanner.c"
- yy487:
-               YYDEBUG(487, *YYCURSOR);
++#line 5235 "Zend/zend_language_scanner.c"
++yy491:
++              YYDEBUG(491, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
- yy488:
-               YYDEBUG(488, *YYCURSOR);
++yy492:
++              YYDEBUG(492, *YYCURSOR);
 +              if (yych <= '\f') {
 +                      if (yych <= 0x08) goto yy141;
-                       if (yych <= '\n') goto yy487;
++                      if (yych <= '\n') goto yy491;
 +                      goto yy141;
 +              } else {
-                       if (yych <= '\r') goto yy487;
-                       if (yych == ' ') goto yy487;
++                      if (yych <= '\r') goto yy491;
++                      if (yych == ' ') goto yy491;
 +                      goto yy141;
 +              }
- yy489:
-               YYDEBUG(489, *YYCURSOR);
++yy493:
++              YYDEBUG(493, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(490, *YYCURSOR);
++              YYDEBUG(494, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1397 "Zend/zend_language_scanner.l"
 +              {
 +      return T_MINUS_EQUAL;
 +}
- #line 5239 "Zend/zend_language_scanner.c"
- yy491:
-               YYDEBUG(491, *YYCURSOR);
++#line 5261 "Zend/zend_language_scanner.c"
++yy495:
++              YYDEBUG(495, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(492, *YYCURSOR);
++              YYDEBUG(496, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1365 "Zend/zend_language_scanner.l"
 +              {
 +      return T_DEC;
 +}
- #line 5249 "Zend/zend_language_scanner.c"
- yy493:
-               YYDEBUG(493, *YYCURSOR);
++#line 5271 "Zend/zend_language_scanner.c"
++yy497:
++              YYDEBUG(497, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(494, *YYCURSOR);
++              YYDEBUG(498, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1190 "Zend/zend_language_scanner.l"
 +              {
 +      yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
 +      return T_OBJECT_OPERATOR;
 +}
- #line 5260 "Zend/zend_language_scanner.c"
- yy495:
-               YYDEBUG(495, *YYCURSOR);
++#line 5282 "Zend/zend_language_scanner.c"
++yy499:
++              YYDEBUG(499, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'O') {
-                       if (yych == 'I') goto yy502;
++                      if (yych == 'I') goto yy506;
 +                      if (yych <= 'N') goto yy187;
-                       goto yy503;
++                      goto yy507;
 +              } else {
 +                      if (yych <= 'i') {
 +                              if (yych <= 'h') goto yy187;
-                               goto yy502;
++                              goto yy506;
 +                      } else {
-                               if (yych == 'o') goto yy503;
++                              if (yych == 'o') goto yy507;
 +                              goto yy187;
 +                      }
 +              }
- yy496:
-               YYDEBUG(496, *YYCURSOR);
++yy500:
++              YYDEBUG(500, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'B') goto yy497;
++              if (yych == 'B') goto yy501;
 +              if (yych != 'b') goto yy187;
- yy497:
-               YYDEBUG(497, *YYCURSOR);
++yy501:
++              YYDEBUG(501, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy498;
++              if (yych == 'L') goto yy502;
 +              if (yych != 'l') goto yy187;
- yy498:
-               YYDEBUG(498, *YYCURSOR);
++yy502:
++              YYDEBUG(502, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy499;
++              if (yych == 'I') goto yy503;
 +              if (yych != 'i') goto yy187;
- yy499:
-               YYDEBUG(499, *YYCURSOR);
++yy503:
++              YYDEBUG(503, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy500;
++              if (yych == 'C') goto yy504;
 +              if (yych != 'c') goto yy187;
- yy500:
-               YYDEBUG(500, *YYCURSOR);
++yy504:
++              YYDEBUG(504, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(501, *YYCURSOR);
++              YYDEBUG(505, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1337 "Zend/zend_language_scanner.l"
 +              {
 +      return T_PUBLIC;
 +}
- #line 5309 "Zend/zend_language_scanner.c"
- yy502:
-               YYDEBUG(502, *YYCURSOR);
++#line 5331 "Zend/zend_language_scanner.c"
++yy506:
++              YYDEBUG(506, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'V') {
-                       if (yych == 'N') goto yy511;
++                      if (yych == 'N') goto yy515;
 +                      if (yych <= 'U') goto yy187;
-                       goto yy512;
++                      goto yy516;
 +              } else {
 +                      if (yych <= 'n') {
 +                              if (yych <= 'm') goto yy187;
-                               goto yy511;
++                              goto yy515;
 +                      } else {
-                               if (yych == 'v') goto yy512;
++                              if (yych == 'v') goto yy516;
 +                              goto yy187;
 +                      }
 +              }
- yy503:
-               YYDEBUG(503, *YYCURSOR);
++yy507:
++              YYDEBUG(507, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy504;
++              if (yych == 'T') goto yy508;
 +              if (yych != 't') goto yy187;
- yy504:
-               YYDEBUG(504, *YYCURSOR);
++yy508:
++              YYDEBUG(508, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy505;
++              if (yych == 'E') goto yy509;
 +              if (yych != 'e') goto yy187;
- yy505:
-               YYDEBUG(505, *YYCURSOR);
++yy509:
++              YYDEBUG(509, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy506;
++              if (yych == 'C') goto yy510;
 +              if (yych != 'c') goto yy187;
- yy506:
-               YYDEBUG(506, *YYCURSOR);
++yy510:
++              YYDEBUG(510, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy507;
++              if (yych == 'T') goto yy511;
 +              if (yych != 't') goto yy187;
- yy507:
-               YYDEBUG(507, *YYCURSOR);
++yy511:
++              YYDEBUG(511, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy508;
++              if (yych == 'E') goto yy512;
 +              if (yych != 'e') goto yy187;
- yy508:
-               YYDEBUG(508, *YYCURSOR);
++yy512:
++              YYDEBUG(512, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'D') goto yy509;
++              if (yych == 'D') goto yy513;
 +              if (yych != 'd') goto yy187;
- yy509:
-               YYDEBUG(509, *YYCURSOR);
++yy513:
++              YYDEBUG(513, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(510, *YYCURSOR);
++              YYDEBUG(514, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1333 "Zend/zend_language_scanner.l"
 +              {
 +      return T_PROTECTED;
 +}
- #line 5368 "Zend/zend_language_scanner.c"
- yy511:
-               YYDEBUG(511, *YYCURSOR);
++#line 5390 "Zend/zend_language_scanner.c"
++yy515:
++              YYDEBUG(515, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy517;
-               if (yych == 't') goto yy517;
++              if (yych == 'T') goto yy521;
++              if (yych == 't') goto yy521;
 +              goto yy187;
- yy512:
-               YYDEBUG(512, *YYCURSOR);
++yy516:
++              YYDEBUG(516, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy513;
++              if (yych == 'A') goto yy517;
 +              if (yych != 'a') goto yy187;
- yy513:
-               YYDEBUG(513, *YYCURSOR);
++yy517:
++              YYDEBUG(517, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy514;
++              if (yych == 'T') goto yy518;
 +              if (yych != 't') goto yy187;
- yy514:
-               YYDEBUG(514, *YYCURSOR);
++yy518:
++              YYDEBUG(518, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy515;
++              if (yych == 'E') goto yy519;
 +              if (yych != 'e') goto yy187;
- yy515:
-               YYDEBUG(515, *YYCURSOR);
++yy519:
++              YYDEBUG(519, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(516, *YYCURSOR);
++              YYDEBUG(520, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1329 "Zend/zend_language_scanner.l"
 +              {
 +      return T_PRIVATE;
 +}
- #line 5402 "Zend/zend_language_scanner.c"
- yy517:
-               YYDEBUG(517, *YYCURSOR);
++#line 5424 "Zend/zend_language_scanner.c"
++yy521:
++              YYDEBUG(521, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(518, *YYCURSOR);
++              YYDEBUG(522, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1166 "Zend/zend_language_scanner.l"
 +              {
 +      return T_PRINT;
 +}
- #line 5415 "Zend/zend_language_scanner.c"
- yy519:
-               YYDEBUG(519, *YYCURSOR);
++#line 5437 "Zend/zend_language_scanner.c"
++yy523:
++              YYDEBUG(523, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy524;
-               if (yych == 'o') goto yy524;
++              if (yych == 'O') goto yy528;
++              if (yych == 'o') goto yy528;
 +              goto yy187;
- yy520:
-               YYDEBUG(520, *YYCURSOR);
++yy524:
++              YYDEBUG(524, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy521;
++              if (yych == 'T') goto yy525;
 +              if (yych != 't') goto yy187;
- yy521:
-               YYDEBUG(521, *YYCURSOR);
++yy525:
++              YYDEBUG(525, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy522;
++              if (yych == 'O') goto yy526;
 +              if (yych != 'o') goto yy187;
- yy522:
-               YYDEBUG(522, *YYCURSOR);
++yy526:
++              YYDEBUG(526, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(523, *YYCURSOR);
++              YYDEBUG(527, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1158 "Zend/zend_language_scanner.l"
 +              {
 +      return T_GOTO;
 +}
- #line 5444 "Zend/zend_language_scanner.c"
- yy524:
-               YYDEBUG(524, *YYCURSOR);
++#line 5466 "Zend/zend_language_scanner.c"
++yy528:
++              YYDEBUG(528, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'B') goto yy525;
++              if (yych == 'B') goto yy529;
 +              if (yych != 'b') goto yy187;
- yy525:
-               YYDEBUG(525, *YYCURSOR);
++yy529:
++              YYDEBUG(529, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy526;
++              if (yych == 'A') goto yy530;
 +              if (yych != 'a') goto yy187;
- yy526:
-               YYDEBUG(526, *YYCURSOR);
++yy530:
++              YYDEBUG(530, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy527;
++              if (yych == 'L') goto yy531;
 +              if (yych != 'l') goto yy187;
- yy527:
-               YYDEBUG(527, *YYCURSOR);
++yy531:
++              YYDEBUG(531, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(528, *YYCURSOR);
++              YYDEBUG(532, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1301 "Zend/zend_language_scanner.l"
 +              {
 +      return T_GLOBAL;
 +}
- #line 5472 "Zend/zend_language_scanner.c"
- yy529:
-               YYDEBUG(529, *YYCURSOR);
++#line 5494 "Zend/zend_language_scanner.c"
++yy533:
++              YYDEBUG(533, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == '<') goto yy537;
++              if (yych == '<') goto yy541;
 +              goto yy194;
- yy530:
-               YYDEBUG(530, *YYCURSOR);
++yy534:
++              YYDEBUG(534, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy181;
- yy531:
-               YYDEBUG(531, *YYCURSOR);
++yy535:
++              YYDEBUG(535, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy179;
- yy532:
-               YYDEBUG(532, *YYCURSOR);
++yy536:
++              YYDEBUG(536, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy533;
++              if (yych == 'E') goto yy537;
 +              if (yych != 'e') goto yy187;
- yy533:
-               YYDEBUG(533, *YYCURSOR);
++yy537:
++              YYDEBUG(537, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy534;
++              if (yych == 'A') goto yy538;
 +              if (yych != 'a') goto yy187;
- yy534:
-               YYDEBUG(534, *YYCURSOR);
++yy538:
++              YYDEBUG(538, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'K') goto yy535;
++              if (yych == 'K') goto yy539;
 +              if (yych != 'k') goto yy187;
- yy535:
-               YYDEBUG(535, *YYCURSOR);
++yy539:
++              YYDEBUG(539, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(536, *YYCURSOR);
++              YYDEBUG(540, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1150 "Zend/zend_language_scanner.l"
 +              {
 +      return T_BREAK;
 +}
- #line 5513 "Zend/zend_language_scanner.c"
- yy537:
-               YYDEBUG(537, *YYCURSOR);
++#line 5535 "Zend/zend_language_scanner.c"
++yy541:
++              YYDEBUG(541, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == '<') goto yy266;
++              if (yych == '<') goto yy270;
 +              goto yy194;
- yy538:
-               YYDEBUG(538, *YYCURSOR);
++yy542:
++              YYDEBUG(542, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy545;
-               if (yych == 'a') goto yy545;
++              if (yych == 'A') goto yy549;
++              if (yych == 'a') goto yy549;
 +              goto yy187;
- yy539:
-               YYDEBUG(539, *YYCURSOR);
++yy543:
++              YYDEBUG(543, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy540;
++              if (yych == 'I') goto yy544;
 +              if (yych != 'i') goto yy187;
- yy540:
-               YYDEBUG(540, *YYCURSOR);
++yy544:
++              YYDEBUG(544, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy541;
++              if (yych == 'T') goto yy545;
 +              if (yych != 't') goto yy187;
- yy541:
-               YYDEBUG(541, *YYCURSOR);
++yy545:
++              YYDEBUG(545, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy542;
++              if (yych == 'C') goto yy546;
 +              if (yych != 'c') goto yy187;
- yy542:
-               YYDEBUG(542, *YYCURSOR);
++yy546:
++              YYDEBUG(546, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy543;
++              if (yych == 'H') goto yy547;
 +              if (yych != 'h') goto yy187;
- yy543:
-               YYDEBUG(543, *YYCURSOR);
++yy547:
++              YYDEBUG(547, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(544, *YYCURSOR);
++              YYDEBUG(548, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1134 "Zend/zend_language_scanner.l"
 +              {
 +      return T_SWITCH;
 +}
- #line 5557 "Zend/zend_language_scanner.c"
- yy545:
-               YYDEBUG(545, *YYCURSOR);
++#line 5579 "Zend/zend_language_scanner.c"
++yy549:
++              YYDEBUG(549, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy546;
++              if (yych == 'T') goto yy550;
 +              if (yych != 't') goto yy187;
- yy546:
-               YYDEBUG(546, *YYCURSOR);
++yy550:
++              YYDEBUG(550, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy547;
++              if (yych == 'I') goto yy551;
 +              if (yych != 'i') goto yy187;
- yy547:
-               YYDEBUG(547, *YYCURSOR);
++yy551:
++              YYDEBUG(551, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy548;
++              if (yych == 'C') goto yy552;
 +              if (yych != 'c') goto yy187;
- yy548:
-               YYDEBUG(548, *YYCURSOR);
++yy552:
++              YYDEBUG(552, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(549, *YYCURSOR);
++              YYDEBUG(553, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1317 "Zend/zend_language_scanner.l"
 +              {
 +      return T_STATIC;
 +}
- #line 5585 "Zend/zend_language_scanner.c"
- yy550:
-               YYDEBUG(550, *YYCURSOR);
++#line 5607 "Zend/zend_language_scanner.c"
++yy554:
++              YYDEBUG(554, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy561;
-               if (yych == 's') goto yy561;
++              if (yych == 'S') goto yy565;
++              if (yych == 's') goto yy565;
 +              goto yy187;
- yy551:
-               YYDEBUG(551, *YYCURSOR);
++yy555:
++              YYDEBUG(555, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'D') goto yy559;
-               if (yych == 'd') goto yy559;
-               goto yy187;
- yy552:
-               YYDEBUG(552, *YYCURSOR);
++              if (yych == 'D') goto yy563;
++              if (yych == 'd') goto yy563;
++              goto yy187;
++yy556:
++              YYDEBUG(556, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy555;
-               if (yych == 'r') goto yy555;
++              if (yych == 'R') goto yy559;
++              if (yych == 'r') goto yy559;
 +              goto yy187;
- yy553:
-               YYDEBUG(553, *YYCURSOR);
++yy557:
++              YYDEBUG(557, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(554, *YYCURSOR);
++              YYDEBUG(558, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1130 "Zend/zend_language_scanner.l"
 +              {
 +      return T_AS;
 +}
- #line 5616 "Zend/zend_language_scanner.c"
- yy555:
-               YYDEBUG(555, *YYCURSOR);
++#line 5638 "Zend/zend_language_scanner.c"
++yy559:
++              YYDEBUG(559, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy556;
++              if (yych == 'A') goto yy560;
 +              if (yych != 'a') goto yy187;
- yy556:
-               YYDEBUG(556, *YYCURSOR);
++yy560:
++              YYDEBUG(560, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy557;
++              if (yych == 'Y') goto yy561;
 +              if (yych != 'y') goto yy187;
- yy557:
-               YYDEBUG(557, *YYCURSOR);
++yy561:
++              YYDEBUG(561, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(558, *YYCURSOR);
++              YYDEBUG(562, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1353 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ARRAY;
 +}
- #line 5639 "Zend/zend_language_scanner.c"
- yy559:
-               YYDEBUG(559, *YYCURSOR);
++#line 5661 "Zend/zend_language_scanner.c"
++yy563:
++              YYDEBUG(563, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(560, *YYCURSOR);
++              YYDEBUG(564, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1449 "Zend/zend_language_scanner.l"
++#line 1457 "Zend/zend_language_scanner.l"
 +              {
 +      return T_LOGICAL_AND;
 +}
- #line 5652 "Zend/zend_language_scanner.c"
- yy561:
-               YYDEBUG(561, *YYCURSOR);
++#line 5674 "Zend/zend_language_scanner.c"
++yy565:
++              YYDEBUG(565, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy562;
++              if (yych == 'T') goto yy566;
 +              if (yych != 't') goto yy187;
- yy562:
-               YYDEBUG(562, *YYCURSOR);
++yy566:
++              YYDEBUG(566, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy563;
++              if (yych == 'R') goto yy567;
 +              if (yych != 'r') goto yy187;
- yy563:
-               YYDEBUG(563, *YYCURSOR);
++yy567:
++              YYDEBUG(567, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy564;
++              if (yych == 'A') goto yy568;
 +              if (yych != 'a') goto yy187;
- yy564:
-               YYDEBUG(564, *YYCURSOR);
++yy568:
++              YYDEBUG(568, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy565;
++              if (yych == 'C') goto yy569;
 +              if (yych != 'c') goto yy187;
- yy565:
-               YYDEBUG(565, *YYCURSOR);
++yy569:
++              YYDEBUG(569, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy566;
++              if (yych == 'T') goto yy570;
 +              if (yych != 't') goto yy187;
- yy566:
-               YYDEBUG(566, *YYCURSOR);
++yy570:
++              YYDEBUG(570, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(567, *YYCURSOR);
++              YYDEBUG(571, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1321 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ABSTRACT;
 +}
- #line 5690 "Zend/zend_language_scanner.c"
- yy568:
-               YYDEBUG(568, *YYCURSOR);
++#line 5712 "Zend/zend_language_scanner.c"
++yy572:
++              YYDEBUG(572, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy569;
++              if (yych == 'I') goto yy573;
 +              if (yych != 'i') goto yy187;
- yy569:
-               YYDEBUG(569, *YYCURSOR);
++yy573:
++              YYDEBUG(573, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy570;
++              if (yych == 'L') goto yy574;
 +              if (yych != 'l') goto yy187;
- yy570:
-               YYDEBUG(570, *YYCURSOR);
++yy574:
++              YYDEBUG(574, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy571;
++              if (yych == 'E') goto yy575;
 +              if (yych != 'e') goto yy187;
- yy571:
-               YYDEBUG(571, *YYCURSOR);
++yy575:
++              YYDEBUG(575, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(572, *YYCURSOR);
++              YYDEBUG(576, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1090 "Zend/zend_language_scanner.l"
 +              {
 +      return T_WHILE;
 +}
- #line 5718 "Zend/zend_language_scanner.c"
- yy573:
-               YYDEBUG(573, *YYCURSOR);
++#line 5740 "Zend/zend_language_scanner.c"
++yy577:
++              YYDEBUG(577, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(574, *YYCURSOR);
++              YYDEBUG(578, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1074 "Zend/zend_language_scanner.l"
 +              {
 +      return T_IF;
 +}
- #line 5731 "Zend/zend_language_scanner.c"
- yy575:
-               YYDEBUG(575, *YYCURSOR);
++#line 5753 "Zend/zend_language_scanner.c"
++yy579:
++              YYDEBUG(579, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'P') goto yy617;
-               if (yych == 'p') goto yy617;
++              if (yych == 'P') goto yy621;
++              if (yych == 'p') goto yy621;
 +              goto yy187;
- yy576:
-               YYDEBUG(576, *YYCURSOR);
++yy580:
++              YYDEBUG(580, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'T') {
 +                      if (yych <= 'C') {
 +                              if (yych <= 'B') goto yy187;
-                               goto yy584;
++                              goto yy588;
 +                      } else {
 +                              if (yych <= 'R') goto yy187;
-                               if (yych <= 'S') goto yy582;
-                               goto yy583;
++                              if (yych <= 'S') goto yy586;
++                              goto yy587;
 +                      }
 +              } else {
 +                      if (yych <= 'r') {
-                               if (yych == 'c') goto yy584;
++                              if (yych == 'c') goto yy588;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 's') goto yy582;
-                               if (yych <= 't') goto yy583;
++                              if (yych <= 's') goto yy586;
++                              if (yych <= 't') goto yy587;
 +                              goto yy187;
 +                      }
 +              }
- yy577:
-               YYDEBUG(577, *YYCURSOR);
++yy581:
++              YYDEBUG(581, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy578;
++              if (yych == 'S') goto yy582;
 +              if (yych != 's') goto yy187;
- yy578:
-               YYDEBUG(578, *YYCURSOR);
++yy582:
++              YYDEBUG(582, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy579;
++              if (yych == 'E') goto yy583;
 +              if (yych != 'e') goto yy187;
- yy579:
-               YYDEBUG(579, *YYCURSOR);
++yy583:
++              YYDEBUG(583, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy580;
++              if (yych == 'T') goto yy584;
 +              if (yych != 't') goto yy187;
- yy580:
-               YYDEBUG(580, *YYCURSOR);
++yy584:
++              YYDEBUG(584, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(581, *YYCURSOR);
++              YYDEBUG(585, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1305 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ISSET;
 +}
- #line 5787 "Zend/zend_language_scanner.c"
- yy582:
-               YYDEBUG(582, *YYCURSOR);
++#line 5809 "Zend/zend_language_scanner.c"
++yy586:
++              YYDEBUG(586, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy603;
-               if (yych == 't') goto yy603;
++              if (yych == 'T') goto yy607;
++              if (yych == 't') goto yy607;
 +              goto yy187;
- yy583:
-               YYDEBUG(583, *YYCURSOR);
++yy587:
++              YYDEBUG(587, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy596;
-               if (yych == 'e') goto yy596;
++              if (yych == 'E') goto yy600;
++              if (yych == 'e') goto yy600;
 +              goto yy187;
- yy584:
-               YYDEBUG(584, *YYCURSOR);
++yy588:
++              YYDEBUG(588, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy585;
++              if (yych == 'L') goto yy589;
 +              if (yych != 'l') goto yy187;
- yy585:
-               YYDEBUG(585, *YYCURSOR);
++yy589:
++              YYDEBUG(589, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'U') goto yy586;
++              if (yych == 'U') goto yy590;
 +              if (yych != 'u') goto yy187;
- yy586:
-               YYDEBUG(586, *YYCURSOR);
++yy590:
++              YYDEBUG(590, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'D') goto yy587;
++              if (yych == 'D') goto yy591;
 +              if (yych != 'd') goto yy187;
- yy587:
-               YYDEBUG(587, *YYCURSOR);
++yy591:
++              YYDEBUG(591, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy588;
++              if (yych == 'E') goto yy592;
 +              if (yych != 'e') goto yy187;
- yy588:
-               YYDEBUG(588, *YYCURSOR);
++yy592:
++              YYDEBUG(592, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '^') {
 +                      if (yych <= '9') {
 +                              if (yych >= '0') goto yy186;
 +                      } else {
-                               if (yych <= '@') goto yy589;
++                              if (yych <= '@') goto yy593;
 +                              if (yych <= 'Z') goto yy186;
 +                      }
 +              } else {
 +                      if (yych <= '`') {
-                               if (yych <= '_') goto yy590;
++                              if (yych <= '_') goto yy594;
 +                      } else {
 +                              if (yych <= 'z') goto yy186;
 +                              if (yych >= 0x7F) goto yy186;
 +                      }
 +              }
- yy589:
-               YYDEBUG(589, *YYCURSOR);
++yy593:
++              YYDEBUG(593, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1273 "Zend/zend_language_scanner.l"
 +              {
 +      return T_INCLUDE;
 +}
- #line 5845 "Zend/zend_language_scanner.c"
- yy590:
-               YYDEBUG(590, *YYCURSOR);
++#line 5867 "Zend/zend_language_scanner.c"
++yy594:
++              YYDEBUG(594, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy591;
++              if (yych == 'O') goto yy595;
 +              if (yych != 'o') goto yy187;
- yy591:
-               YYDEBUG(591, *YYCURSOR);
++yy595:
++              YYDEBUG(595, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy592;
++              if (yych == 'N') goto yy596;
 +              if (yych != 'n') goto yy187;
- yy592:
-               YYDEBUG(592, *YYCURSOR);
++yy596:
++              YYDEBUG(596, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy593;
++              if (yych == 'C') goto yy597;
 +              if (yych != 'c') goto yy187;
- yy593:
-               YYDEBUG(593, *YYCURSOR);
++yy597:
++              YYDEBUG(597, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy594;
++              if (yych == 'E') goto yy598;
 +              if (yych != 'e') goto yy187;
- yy594:
-               YYDEBUG(594, *YYCURSOR);
++yy598:
++              YYDEBUG(598, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(595, *YYCURSOR);
++              YYDEBUG(599, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1277 "Zend/zend_language_scanner.l"
 +              {
 +      return T_INCLUDE_ONCE;
 +}
- #line 5878 "Zend/zend_language_scanner.c"
- yy596:
-               YYDEBUG(596, *YYCURSOR);
++#line 5900 "Zend/zend_language_scanner.c"
++yy600:
++              YYDEBUG(600, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy597;
++              if (yych == 'R') goto yy601;
 +              if (yych != 'r') goto yy187;
- yy597:
-               YYDEBUG(597, *YYCURSOR);
++yy601:
++              YYDEBUG(601, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'F') goto yy598;
++              if (yych == 'F') goto yy602;
 +              if (yych != 'f') goto yy187;
- yy598:
-               YYDEBUG(598, *YYCURSOR);
++yy602:
++              YYDEBUG(602, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy599;
++              if (yych == 'A') goto yy603;
 +              if (yych != 'a') goto yy187;
- yy599:
-               YYDEBUG(599, *YYCURSOR);
++yy603:
++              YYDEBUG(603, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy600;
++              if (yych == 'C') goto yy604;
 +              if (yych != 'c') goto yy187;
- yy600:
-               YYDEBUG(600, *YYCURSOR);
++yy604:
++              YYDEBUG(604, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy601;
++              if (yych == 'E') goto yy605;
 +              if (yych != 'e') goto yy187;
- yy601:
-               YYDEBUG(601, *YYCURSOR);
++yy605:
++              YYDEBUG(605, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(602, *YYCURSOR);
++              YYDEBUG(606, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1174 "Zend/zend_language_scanner.l"
 +              {
 +      return T_INTERFACE;
 +}
- #line 5916 "Zend/zend_language_scanner.c"
- yy603:
-               YYDEBUG(603, *YYCURSOR);
++#line 5938 "Zend/zend_language_scanner.c"
++yy607:
++              YYDEBUG(607, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'E') {
-                       if (yych == 'A') goto yy604;
++                      if (yych == 'A') goto yy608;
 +                      if (yych <= 'D') goto yy187;
-                       goto yy605;
++                      goto yy609;
 +              } else {
 +                      if (yych <= 'a') {
 +                              if (yych <= '`') goto yy187;
 +                      } else {
-                               if (yych == 'e') goto yy605;
++                              if (yych == 'e') goto yy609;
 +                              goto yy187;
 +                      }
 +              }
- yy604:
-               YYDEBUG(604, *YYCURSOR);
++yy608:
++              YYDEBUG(608, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy611;
-               if (yych == 'n') goto yy611;
++              if (yych == 'N') goto yy615;
++              if (yych == 'n') goto yy615;
 +              goto yy187;
- yy605:
-               YYDEBUG(605, *YYCURSOR);
++yy609:
++              YYDEBUG(609, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy606;
++              if (yych == 'A') goto yy610;
 +              if (yych != 'a') goto yy187;
- yy606:
-               YYDEBUG(606, *YYCURSOR);
++yy610:
++              YYDEBUG(610, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'D') goto yy607;
++              if (yych == 'D') goto yy611;
 +              if (yych != 'd') goto yy187;
- yy607:
-               YYDEBUG(607, *YYCURSOR);
++yy611:
++              YYDEBUG(611, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy608;
++              if (yych == 'O') goto yy612;
 +              if (yych != 'o') goto yy187;
- yy608:
-               YYDEBUG(608, *YYCURSOR);
++yy612:
++              YYDEBUG(612, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'F') goto yy609;
++              if (yych == 'F') goto yy613;
 +              if (yych != 'f') goto yy187;
- yy609:
-               YYDEBUG(609, *YYCURSOR);
++yy613:
++              YYDEBUG(613, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(610, *YYCURSOR);
++              YYDEBUG(614, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1297 "Zend/zend_language_scanner.l"
 +              {
 +        return T_INSTEADOF;
 +}
- #line 5970 "Zend/zend_language_scanner.c"
- yy611:
-               YYDEBUG(611, *YYCURSOR);
++#line 5992 "Zend/zend_language_scanner.c"
++yy615:
++              YYDEBUG(615, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy612;
++              if (yych == 'C') goto yy616;
 +              if (yych != 'c') goto yy187;
- yy612:
-               YYDEBUG(612, *YYCURSOR);
++yy616:
++              YYDEBUG(616, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy613;
++              if (yych == 'E') goto yy617;
 +              if (yych != 'e') goto yy187;
- yy613:
-               YYDEBUG(613, *YYCURSOR);
++yy617:
++              YYDEBUG(617, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy614;
++              if (yych == 'O') goto yy618;
 +              if (yych != 'o') goto yy187;
- yy614:
-               YYDEBUG(614, *YYCURSOR);
++yy618:
++              YYDEBUG(618, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'F') goto yy615;
++              if (yych == 'F') goto yy619;
 +              if (yych != 'f') goto yy187;
- yy615:
-               YYDEBUG(615, *YYCURSOR);
++yy619:
++              YYDEBUG(619, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(616, *YYCURSOR);
++              YYDEBUG(620, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1126 "Zend/zend_language_scanner.l"
 +              {
 +      return T_INSTANCEOF;
 +}
- #line 6003 "Zend/zend_language_scanner.c"
- yy617:
-               YYDEBUG(617, *YYCURSOR);
++#line 6025 "Zend/zend_language_scanner.c"
++yy621:
++              YYDEBUG(621, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy618;
++              if (yych == 'L') goto yy622;
 +              if (yych != 'l') goto yy187;
- yy618:
-               YYDEBUG(618, *YYCURSOR);
++yy622:
++              YYDEBUG(622, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy619;
++              if (yych == 'E') goto yy623;
 +              if (yych != 'e') goto yy187;
- yy619:
-               YYDEBUG(619, *YYCURSOR);
++yy623:
++              YYDEBUG(623, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'M') goto yy620;
++              if (yych == 'M') goto yy624;
 +              if (yych != 'm') goto yy187;
- yy620:
-               YYDEBUG(620, *YYCURSOR);
++yy624:
++              YYDEBUG(624, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy621;
++              if (yych == 'E') goto yy625;
 +              if (yych != 'e') goto yy187;
- yy621:
-               YYDEBUG(621, *YYCURSOR);
++yy625:
++              YYDEBUG(625, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy622;
++              if (yych == 'N') goto yy626;
 +              if (yych != 'n') goto yy187;
- yy622:
-               YYDEBUG(622, *YYCURSOR);
++yy626:
++              YYDEBUG(626, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy623;
++              if (yych == 'T') goto yy627;
 +              if (yych != 't') goto yy187;
- yy623:
-               YYDEBUG(623, *YYCURSOR);
++yy627:
++              YYDEBUG(627, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy624;
++              if (yych == 'S') goto yy628;
 +              if (yych != 's') goto yy187;
- yy624:
-               YYDEBUG(624, *YYCURSOR);
++yy628:
++              YYDEBUG(628, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(625, *YYCURSOR);
++              YYDEBUG(629, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1186 "Zend/zend_language_scanner.l"
 +              {
 +      return T_IMPLEMENTS;
- }
- #line 6051 "Zend/zend_language_scanner.c"
- yy626:
-               YYDEBUG(626, *YYCURSOR);
++}
++#line 6073 "Zend/zend_language_scanner.c"
++yy630:
++              YYDEBUG(630, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy634;
-               if (yych == 'r') goto yy634;
++              if (yych == 'R') goto yy638;
++              if (yych == 'r') goto yy638;
 +              goto yy187;
- yy627:
-               YYDEBUG(627, *YYCURSOR);
++yy631:
++              YYDEBUG(631, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'Y') {
-                       if (yych == 'A') goto yy630;
++                      if (yych == 'A') goto yy634;
 +                      if (yych <= 'X') goto yy187;
 +              } else {
 +                      if (yych <= 'a') {
 +                              if (yych <= '`') goto yy187;
-                               goto yy630;
++                              goto yy634;
 +                      } else {
 +                              if (yych != 'y') goto yy187;
 +                      }
 +              }
-               YYDEBUG(628, *YYCURSOR);
++              YYDEBUG(632, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(629, *YYCURSOR);
++              YYDEBUG(633, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1058 "Zend/zend_language_scanner.l"
 +              {
 +      return T_TRY;
 +}
- #line 6083 "Zend/zend_language_scanner.c"
- yy630:
-               YYDEBUG(630, *YYCURSOR);
++#line 6105 "Zend/zend_language_scanner.c"
++yy634:
++              YYDEBUG(634, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy631;
++              if (yych == 'I') goto yy635;
 +              if (yych != 'i') goto yy187;
- yy631:
-               YYDEBUG(631, *YYCURSOR);
++yy635:
++              YYDEBUG(635, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy632;
++              if (yych == 'T') goto yy636;
 +              if (yych != 't') goto yy187;
- yy632:
-               YYDEBUG(632, *YYCURSOR);
++yy636:
++              YYDEBUG(636, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(633, *YYCURSOR);
++              YYDEBUG(637, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1178 "Zend/zend_language_scanner.l"
 +              {
 +      return T_TRAIT;
 +}
- #line 6106 "Zend/zend_language_scanner.c"
- yy634:
-               YYDEBUG(634, *YYCURSOR);
++#line 6128 "Zend/zend_language_scanner.c"
++yy638:
++              YYDEBUG(638, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy635;
++              if (yych == 'O') goto yy639;
 +              if (yych != 'o') goto yy187;
- yy635:
-               YYDEBUG(635, *YYCURSOR);
++yy639:
++              YYDEBUG(639, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'W') goto yy636;
++              if (yych == 'W') goto yy640;
 +              if (yych != 'w') goto yy187;
- yy636:
-               YYDEBUG(636, *YYCURSOR);
++yy640:
++              YYDEBUG(640, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(637, *YYCURSOR);
++              YYDEBUG(641, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1070 "Zend/zend_language_scanner.l"
 +              {
 +      return T_THROW;
 +}
- #line 6129 "Zend/zend_language_scanner.c"
- yy638:
-               YYDEBUG(638, *YYCURSOR);
++#line 6151 "Zend/zend_language_scanner.c"
++yy642:
++              YYDEBUG(642, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy639;
++              if (yych == 'E') goto yy643;
 +              if (yych != 'e') goto yy187;
- yy639:
-               YYDEBUG(639, *YYCURSOR);
++yy643:
++              YYDEBUG(643, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy640;
++              if (yych == 'L') goto yy644;
 +              if (yych != 'l') goto yy187;
- yy640:
-               YYDEBUG(640, *YYCURSOR);
++yy644:
++              YYDEBUG(644, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'D') goto yy641;
++              if (yych == 'D') goto yy645;
 +              if (yych != 'd') goto yy187;
- yy641:
-               YYDEBUG(641, *YYCURSOR);
++yy645:
++              YYDEBUG(645, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(642, *YYCURSOR);
++              YYDEBUG(646, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1054 "Zend/zend_language_scanner.l"
 +              {
 +      return T_YIELD;
 +}
- #line 6157 "Zend/zend_language_scanner.c"
- yy643:
-               YYDEBUG(643, *YYCURSOR);
++#line 6179 "Zend/zend_language_scanner.c"
++yy647:
++              YYDEBUG(647, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'T') {
-                       if (yych == 'Q') goto yy645;
++                      if (yych == 'Q') goto yy649;
 +                      if (yych <= 'S') goto yy187;
 +              } else {
 +                      if (yych <= 'q') {
 +                              if (yych <= 'p') goto yy187;
-                               goto yy645;
++                              goto yy649;
 +                      } else {
 +                              if (yych != 't') goto yy187;
 +                      }
 +              }
-               YYDEBUG(644, *YYCURSOR);
++              YYDEBUG(648, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'U') goto yy657;
-               if (yych == 'u') goto yy657;
++              if (yych == 'U') goto yy661;
++              if (yych == 'u') goto yy661;
 +              goto yy187;
- yy645:
-               YYDEBUG(645, *YYCURSOR);
++yy649:
++              YYDEBUG(649, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'U') goto yy646;
++              if (yych == 'U') goto yy650;
 +              if (yych != 'u') goto yy187;
- yy646:
-               YYDEBUG(646, *YYCURSOR);
++yy650:
++              YYDEBUG(650, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy647;
++              if (yych == 'I') goto yy651;
 +              if (yych != 'i') goto yy187;
- yy647:
-               YYDEBUG(647, *YYCURSOR);
++yy651:
++              YYDEBUG(651, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy648;
++              if (yych == 'R') goto yy652;
 +              if (yych != 'r') goto yy187;
- yy648:
-               YYDEBUG(648, *YYCURSOR);
++yy652:
++              YYDEBUG(652, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy649;
++              if (yych == 'E') goto yy653;
 +              if (yych != 'e') goto yy187;
- yy649:
-               YYDEBUG(649, *YYCURSOR);
++yy653:
++              YYDEBUG(653, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '^') {
 +                      if (yych <= '9') {
 +                              if (yych >= '0') goto yy186;
 +                      } else {
-                               if (yych <= '@') goto yy650;
++                              if (yych <= '@') goto yy654;
 +                              if (yych <= 'Z') goto yy186;
 +                      }
 +              } else {
 +                      if (yych <= '`') {
-                               if (yych <= '_') goto yy651;
++                              if (yych <= '_') goto yy655;
 +                      } else {
 +                              if (yych <= 'z') goto yy186;
 +                              if (yych >= 0x7F) goto yy186;
 +                      }
 +              }
- yy650:
-               YYDEBUG(650, *YYCURSOR);
++yy654:
++              YYDEBUG(654, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1281 "Zend/zend_language_scanner.l"
 +              {
 +      return T_REQUIRE;
 +}
- #line 6222 "Zend/zend_language_scanner.c"
- yy651:
-               YYDEBUG(651, *YYCURSOR);
++#line 6244 "Zend/zend_language_scanner.c"
++yy655:
++              YYDEBUG(655, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy652;
++              if (yych == 'O') goto yy656;
 +              if (yych != 'o') goto yy187;
- yy652:
-               YYDEBUG(652, *YYCURSOR);
++yy656:
++              YYDEBUG(656, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy653;
++              if (yych == 'N') goto yy657;
 +              if (yych != 'n') goto yy187;
- yy653:
-               YYDEBUG(653, *YYCURSOR);
++yy657:
++              YYDEBUG(657, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy654;
++              if (yych == 'C') goto yy658;
 +              if (yych != 'c') goto yy187;
- yy654:
-               YYDEBUG(654, *YYCURSOR);
++yy658:
++              YYDEBUG(658, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy655;
++              if (yych == 'E') goto yy659;
 +              if (yych != 'e') goto yy187;
- yy655:
-               YYDEBUG(655, *YYCURSOR);
++yy659:
++              YYDEBUG(659, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(656, *YYCURSOR);
++              YYDEBUG(660, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1285 "Zend/zend_language_scanner.l"
 +              {
 +      return T_REQUIRE_ONCE;
 +}
- #line 6255 "Zend/zend_language_scanner.c"
- yy657:
-               YYDEBUG(657, *YYCURSOR);
++#line 6277 "Zend/zend_language_scanner.c"
++yy661:
++              YYDEBUG(661, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy658;
++              if (yych == 'R') goto yy662;
 +              if (yych != 'r') goto yy187;
- yy658:
-               YYDEBUG(658, *YYCURSOR);
++yy662:
++              YYDEBUG(662, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy659;
++              if (yych == 'N') goto yy663;
 +              if (yych != 'n') goto yy187;
- yy659:
-               YYDEBUG(659, *YYCURSOR);
++yy663:
++              YYDEBUG(663, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(660, *YYCURSOR);
++              YYDEBUG(664, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1050 "Zend/zend_language_scanner.l"
 +              {
 +      return T_RETURN;
 +}
- #line 6278 "Zend/zend_language_scanner.c"
- yy661:
-               YYDEBUG(661, *YYCURSOR);
++#line 6300 "Zend/zend_language_scanner.c"
++yy665:
++              YYDEBUG(665, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'T') {
 +                      if (yych <= 'L') {
 +                              if (yych <= 'K') goto yy187;
-                               goto yy684;
++                              goto yy688;
 +                      } else {
 +                              if (yych <= 'R') goto yy187;
-                               if (yych <= 'S') goto yy683;
-                               goto yy682;
++                              if (yych <= 'S') goto yy687;
++                              goto yy686;
 +                      }
 +              } else {
 +                      if (yych <= 'r') {
-                               if (yych == 'l') goto yy684;
++                              if (yych == 'l') goto yy688;
 +                              goto yy187;
 +                      } else {
-                               if (yych <= 's') goto yy683;
-                               if (yych <= 't') goto yy682;
++                              if (yych <= 's') goto yy687;
++                              if (yych <= 't') goto yy686;
 +                              goto yy187;
 +                      }
 +              }
- yy662:
-               YYDEBUG(662, *YYCURSOR);
++yy666:
++              YYDEBUG(666, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'O') {
-                       if (yych == 'A') goto yy674;
++                      if (yych == 'A') goto yy678;
 +                      if (yych <= 'N') goto yy187;
-                       goto yy675;
++                      goto yy679;
 +              } else {
 +                      if (yych <= 'a') {
 +                              if (yych <= '`') goto yy187;
-                               goto yy674;
++                              goto yy678;
 +                      } else {
-                               if (yych == 'o') goto yy675;
++                              if (yych == 'o') goto yy679;
 +                              goto yy187;
 +                      }
 +              }
- yy663:
-               YYDEBUG(663, *YYCURSOR);
++yy667:
++              YYDEBUG(667, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy664;
++              if (yych == 'N') goto yy668;
 +              if (yych != 'n') goto yy187;
- yy664:
-               YYDEBUG(664, *YYCURSOR);
++yy668:
++              YYDEBUG(668, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'T') {
 +                      if (yych <= 'R') goto yy187;
-                       if (yych >= 'T') goto yy666;
++                      if (yych >= 'T') goto yy670;
 +              } else {
 +                      if (yych <= 'r') goto yy187;
-                       if (yych <= 's') goto yy665;
-                       if (yych <= 't') goto yy666;
++                      if (yych <= 's') goto yy669;
++                      if (yych <= 't') goto yy670;
 +                      goto yy187;
 +              }
- yy665:
-               YYDEBUG(665, *YYCURSOR);
++yy669:
++              YYDEBUG(669, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy672;
-               if (yych == 't') goto yy672;
++              if (yych == 'T') goto yy676;
++              if (yych == 't') goto yy676;
 +              goto yy187;
- yy666:
-               YYDEBUG(666, *YYCURSOR);
++yy670:
++              YYDEBUG(670, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy667;
++              if (yych == 'I') goto yy671;
 +              if (yych != 'i') goto yy187;
- yy667:
-               YYDEBUG(667, *YYCURSOR);
++yy671:
++              YYDEBUG(671, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy668;
++              if (yych == 'N') goto yy672;
 +              if (yych != 'n') goto yy187;
- yy668:
-               YYDEBUG(668, *YYCURSOR);
++yy672:
++              YYDEBUG(672, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'U') goto yy669;
++              if (yych == 'U') goto yy673;
 +              if (yych != 'u') goto yy187;
- yy669:
-               YYDEBUG(669, *YYCURSOR);
++yy673:
++              YYDEBUG(673, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy670;
++              if (yych == 'E') goto yy674;
 +              if (yych != 'e') goto yy187;
- yy670:
-               YYDEBUG(670, *YYCURSOR);
++yy674:
++              YYDEBUG(674, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(671, *YYCURSOR);
++              YYDEBUG(675, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1154 "Zend/zend_language_scanner.l"
 +              {
 +      return T_CONTINUE;
 +}
- #line 6372 "Zend/zend_language_scanner.c"
- yy672:
-               YYDEBUG(672, *YYCURSOR);
++#line 6394 "Zend/zend_language_scanner.c"
++yy676:
++              YYDEBUG(676, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(673, *YYCURSOR);
++              YYDEBUG(677, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1046 "Zend/zend_language_scanner.l"
 +              {
 +      return T_CONST;
 +}
- #line 6385 "Zend/zend_language_scanner.c"
- yy674:
-               YYDEBUG(674, *YYCURSOR);
++#line 6407 "Zend/zend_language_scanner.c"
++yy678:
++              YYDEBUG(678, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy679;
-               if (yych == 's') goto yy679;
++              if (yych == 'S') goto yy683;
++              if (yych == 's') goto yy683;
 +              goto yy187;
- yy675:
-               YYDEBUG(675, *YYCURSOR);
++yy679:
++              YYDEBUG(679, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy676;
++              if (yych == 'N') goto yy680;
 +              if (yych != 'n') goto yy187;
- yy676:
-               YYDEBUG(676, *YYCURSOR);
++yy680:
++              YYDEBUG(680, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy677;
++              if (yych == 'E') goto yy681;
 +              if (yych != 'e') goto yy187;
- yy677:
-               YYDEBUG(677, *YYCURSOR);
++yy681:
++              YYDEBUG(681, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(678, *YYCURSOR);
++              YYDEBUG(682, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1233 "Zend/zend_language_scanner.l"
 +              {
 +      return T_CLONE;
 +}
- #line 6414 "Zend/zend_language_scanner.c"
- yy679:
-               YYDEBUG(679, *YYCURSOR);
++#line 6436 "Zend/zend_language_scanner.c"
++yy683:
++              YYDEBUG(683, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy680;
++              if (yych == 'S') goto yy684;
 +              if (yych != 's') goto yy187;
- yy680:
-               YYDEBUG(680, *YYCURSOR);
++yy684:
++              YYDEBUG(684, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(681, *YYCURSOR);
++              YYDEBUG(685, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1170 "Zend/zend_language_scanner.l"
 +              {
 +      return T_CLASS;
 +}
- #line 6432 "Zend/zend_language_scanner.c"
- yy682:
-               YYDEBUG(682, *YYCURSOR);
++#line 6454 "Zend/zend_language_scanner.c"
++yy686:
++              YYDEBUG(686, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy693;
-               if (yych == 'c') goto yy693;
++              if (yych == 'C') goto yy697;
++              if (yych == 'c') goto yy697;
 +              goto yy187;
- yy683:
-               YYDEBUG(683, *YYCURSOR);
++yy687:
++              YYDEBUG(687, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy691;
-               if (yych == 'e') goto yy691;
++              if (yych == 'E') goto yy695;
++              if (yych == 'e') goto yy695;
 +              goto yy187;
- yy684:
-               YYDEBUG(684, *YYCURSOR);
++yy688:
++              YYDEBUG(688, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy685;
++              if (yych == 'L') goto yy689;
 +              if (yych != 'l') goto yy187;
- yy685:
-               YYDEBUG(685, *YYCURSOR);
++yy689:
++              YYDEBUG(689, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy686;
++              if (yych == 'A') goto yy690;
 +              if (yych != 'a') goto yy187;
- yy686:
-               YYDEBUG(686, *YYCURSOR);
++yy690:
++              YYDEBUG(690, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'B') goto yy687;
++              if (yych == 'B') goto yy691;
 +              if (yych != 'b') goto yy187;
- yy687:
-               YYDEBUG(687, *YYCURSOR);
++yy691:
++              YYDEBUG(691, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy688;
++              if (yych == 'L') goto yy692;
 +              if (yych != 'l') goto yy187;
- yy688:
-               YYDEBUG(688, *YYCURSOR);
++yy692:
++              YYDEBUG(692, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy689;
++              if (yych == 'E') goto yy693;
 +              if (yych != 'e') goto yy187;
- yy689:
-               YYDEBUG(689, *YYCURSOR);
++yy693:
++              YYDEBUG(693, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(690, *YYCURSOR);
++              YYDEBUG(694, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1357 "Zend/zend_language_scanner.l"
 +              {
 + return T_CALLABLE;
 +}
- #line 6482 "Zend/zend_language_scanner.c"
- yy691:
-               YYDEBUG(691, *YYCURSOR);
++#line 6504 "Zend/zend_language_scanner.c"
++yy695:
++              YYDEBUG(695, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(692, *YYCURSOR);
++              YYDEBUG(696, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1142 "Zend/zend_language_scanner.l"
 +              {
 +      return T_CASE;
 +}
- #line 6495 "Zend/zend_language_scanner.c"
- yy693:
-               YYDEBUG(693, *YYCURSOR);
++#line 6517 "Zend/zend_language_scanner.c"
++yy697:
++              YYDEBUG(697, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy694;
++              if (yych == 'H') goto yy698;
 +              if (yych != 'h') goto yy187;
- yy694:
-               YYDEBUG(694, *YYCURSOR);
++yy698:
++              YYDEBUG(698, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(695, *YYCURSOR);
++              YYDEBUG(699, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1062 "Zend/zend_language_scanner.l"
 +              {
 +      return T_CATCH;
 +}
- #line 6513 "Zend/zend_language_scanner.c"
- yy696:
-               YYDEBUG(696, *YYCURSOR);
++#line 6535 "Zend/zend_language_scanner.c"
++yy700:
++              YYDEBUG(700, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy713;
-               if (yych == 'n') goto yy713;
++              if (yych == 'N') goto yy717;
++              if (yych == 'n') goto yy717;
 +              goto yy187;
- yy697:
-               YYDEBUG(697, *YYCURSOR);
++yy701:
++              YYDEBUG(701, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy706;
-               if (yych == 'r') goto yy706;
++              if (yych == 'R') goto yy710;
++              if (yych == 'r') goto yy710;
 +              goto yy187;
- yy698:
-               YYDEBUG(698, *YYCURSOR);
++yy702:
++              YYDEBUG(702, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy699;
++              if (yych == 'N') goto yy703;
 +              if (yych != 'n') goto yy187;
- yy699:
-               YYDEBUG(699, *YYCURSOR);
++yy703:
++              YYDEBUG(703, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy700;
++              if (yych == 'C') goto yy704;
 +              if (yych != 'c') goto yy187;
- yy700:
-               YYDEBUG(700, *YYCURSOR);
++yy704:
++              YYDEBUG(704, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy701;
++              if (yych == 'T') goto yy705;
 +              if (yych != 't') goto yy187;
- yy701:
-               YYDEBUG(701, *YYCURSOR);
++yy705:
++              YYDEBUG(705, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy702;
++              if (yych == 'I') goto yy706;
 +              if (yych != 'i') goto yy187;
- yy702:
-               YYDEBUG(702, *YYCURSOR);
++yy706:
++              YYDEBUG(706, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy703;
++              if (yych == 'O') goto yy707;
 +              if (yych != 'o') goto yy187;
- yy703:
-               YYDEBUG(703, *YYCURSOR);
++yy707:
++              YYDEBUG(707, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy704;
++              if (yych == 'N') goto yy708;
 +              if (yych != 'n') goto yy187;
- yy704:
-               YYDEBUG(704, *YYCURSOR);
++yy708:
++              YYDEBUG(708, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(705, *YYCURSOR);
++              YYDEBUG(709, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1042 "Zend/zend_language_scanner.l"
 +              {
 +      return T_FUNCTION;
 +}
- #line 6568 "Zend/zend_language_scanner.c"
- yy706:
-               YYDEBUG(706, *YYCURSOR);
++#line 6590 "Zend/zend_language_scanner.c"
++yy710:
++              YYDEBUG(710, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '^') {
 +                      if (yych <= '@') {
-                               if (yych <= '/') goto yy707;
++                              if (yych <= '/') goto yy711;
 +                              if (yych <= '9') goto yy186;
 +                      } else {
-                               if (yych == 'E') goto yy708;
++                              if (yych == 'E') goto yy712;
 +                              if (yych <= 'Z') goto yy186;
 +                      }
 +              } else {
 +                      if (yych <= 'd') {
 +                              if (yych != '`') goto yy186;
 +                      } else {
-                               if (yych <= 'e') goto yy708;
++                              if (yych <= 'e') goto yy712;
 +                              if (yych <= 'z') goto yy186;
 +                              if (yych >= 0x7F) goto yy186;
 +                      }
 +              }
- yy707:
-               YYDEBUG(707, *YYCURSOR);
++yy711:
++              YYDEBUG(711, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1102 "Zend/zend_language_scanner.l"
 +              {
 +      return T_FOR;
 +}
- #line 6596 "Zend/zend_language_scanner.c"
- yy708:
-               YYDEBUG(708, *YYCURSOR);
++#line 6618 "Zend/zend_language_scanner.c"
++yy712:
++              YYDEBUG(712, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy709;
++              if (yych == 'A') goto yy713;
 +              if (yych != 'a') goto yy187;
- yy709:
-               YYDEBUG(709, *YYCURSOR);
++yy713:
++              YYDEBUG(713, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy710;
++              if (yych == 'C') goto yy714;
 +              if (yych != 'c') goto yy187;
- yy710:
-               YYDEBUG(710, *YYCURSOR);
++yy714:
++              YYDEBUG(714, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy711;
++              if (yych == 'H') goto yy715;
 +              if (yych != 'h') goto yy187;
- yy711:
-               YYDEBUG(711, *YYCURSOR);
++yy715:
++              YYDEBUG(715, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(712, *YYCURSOR);
++              YYDEBUG(716, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1110 "Zend/zend_language_scanner.l"
 +              {
 +      return T_FOREACH;
 +}
- #line 6624 "Zend/zend_language_scanner.c"
- yy713:
-               YYDEBUG(713, *YYCURSOR);
++#line 6646 "Zend/zend_language_scanner.c"
++yy717:
++              YYDEBUG(717, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy714;
++              if (yych == 'A') goto yy718;
 +              if (yych != 'a') goto yy187;
- yy714:
-               YYDEBUG(714, *YYCURSOR);
++yy718:
++              YYDEBUG(718, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy715;
++              if (yych == 'L') goto yy719;
 +              if (yych != 'l') goto yy187;
- yy715:
-               YYDEBUG(715, *YYCURSOR);
++yy719:
++              YYDEBUG(719, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '^') {
 +                      if (yych <= '@') {
-                               if (yych <= '/') goto yy716;
++                              if (yych <= '/') goto yy720;
 +                              if (yych <= '9') goto yy186;
 +                      } else {
-                               if (yych == 'L') goto yy717;
++                              if (yych == 'L') goto yy721;
 +                              if (yych <= 'Z') goto yy186;
 +                      }
 +              } else {
 +                      if (yych <= 'k') {
 +                              if (yych != '`') goto yy186;
 +                      } else {
-                               if (yych <= 'l') goto yy717;
++                              if (yych <= 'l') goto yy721;
 +                              if (yych <= 'z') goto yy186;
 +                              if (yych >= 0x7F) goto yy186;
 +                      }
 +              }
- yy716:
-               YYDEBUG(716, *YYCURSOR);
++yy720:
++              YYDEBUG(720, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1325 "Zend/zend_language_scanner.l"
 +              {
 +      return T_FINAL;
 +}
- #line 6662 "Zend/zend_language_scanner.c"
- yy717:
-               YYDEBUG(717, *YYCURSOR);
++#line 6684 "Zend/zend_language_scanner.c"
++yy721:
++              YYDEBUG(721, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy718;
++              if (yych == 'Y') goto yy722;
 +              if (yych != 'y') goto yy187;
- yy718:
-               YYDEBUG(718, *YYCURSOR);
++yy722:
++              YYDEBUG(722, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(719, *YYCURSOR);
++              YYDEBUG(723, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1066 "Zend/zend_language_scanner.l"
 +              {
 +      return T_FINALLY;
 +}
- #line 6680 "Zend/zend_language_scanner.c"
- yy720:
-               YYDEBUG(720, *YYCURSOR);
++#line 6702 "Zend/zend_language_scanner.c"
++yy724:
++              YYDEBUG(724, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'F') {
-                       if (yych == 'C') goto yy726;
++                      if (yych == 'C') goto yy730;
 +                      if (yych <= 'E') goto yy187;
-                       goto yy727;
++                      goto yy731;
 +              } else {
 +                      if (yych <= 'c') {
 +                              if (yych <= 'b') goto yy187;
-                               goto yy726;
++                              goto yy730;
 +                      } else {
-                               if (yych == 'f') goto yy727;
++                              if (yych == 'f') goto yy731;
 +                              goto yy187;
 +                      }
 +              }
- yy721:
-               YYDEBUG(721, *YYCURSOR);
++yy725:
++              YYDEBUG(725, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy724;
-               if (yych == 'e') goto yy724;
++              if (yych == 'E') goto yy728;
++              if (yych == 'e') goto yy728;
 +              goto yy187;
- yy722:
-               YYDEBUG(722, *YYCURSOR);
++yy726:
++              YYDEBUG(726, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(723, *YYCURSOR);
++              YYDEBUG(727, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1098 "Zend/zend_language_scanner.l"
 +              {
 +      return T_DO;
 +}
- #line 6715 "Zend/zend_language_scanner.c"
- yy724:
-               YYDEBUG(724, *YYCURSOR);
++#line 6737 "Zend/zend_language_scanner.c"
++yy728:
++              YYDEBUG(728, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(725, *YYCURSOR);
++              YYDEBUG(729, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1038 "Zend/zend_language_scanner.l"
 +              {
 +      return T_EXIT;
 +}
- #line 6728 "Zend/zend_language_scanner.c"
- yy726:
-               YYDEBUG(726, *YYCURSOR);
++#line 6750 "Zend/zend_language_scanner.c"
++yy730:
++              YYDEBUG(730, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy733;
-               if (yych == 'l') goto yy733;
++              if (yych == 'L') goto yy737;
++              if (yych == 'l') goto yy737;
 +              goto yy187;
- yy727:
-               YYDEBUG(727, *YYCURSOR);
++yy731:
++              YYDEBUG(731, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy728;
++              if (yych == 'A') goto yy732;
 +              if (yych != 'a') goto yy187;
- yy728:
-               YYDEBUG(728, *YYCURSOR);
++yy732:
++              YYDEBUG(732, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'U') goto yy729;
++              if (yych == 'U') goto yy733;
 +              if (yych != 'u') goto yy187;
- yy729:
-               YYDEBUG(729, *YYCURSOR);
++yy733:
++              YYDEBUG(733, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy730;
++              if (yych == 'L') goto yy734;
 +              if (yych != 'l') goto yy187;
- yy730:
-               YYDEBUG(730, *YYCURSOR);
++yy734:
++              YYDEBUG(734, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy731;
++              if (yych == 'T') goto yy735;
 +              if (yych != 't') goto yy187;
- yy731:
-               YYDEBUG(731, *YYCURSOR);
++yy735:
++              YYDEBUG(735, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(732, *YYCURSOR);
++              YYDEBUG(736, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1146 "Zend/zend_language_scanner.l"
 +              {
 +      return T_DEFAULT;
 +}
- #line 6767 "Zend/zend_language_scanner.c"
- yy733:
-               YYDEBUG(733, *YYCURSOR);
++#line 6789 "Zend/zend_language_scanner.c"
++yy737:
++              YYDEBUG(737, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy734;
++              if (yych == 'A') goto yy738;
 +              if (yych != 'a') goto yy187;
- yy734:
-               YYDEBUG(734, *YYCURSOR);
++yy738:
++              YYDEBUG(738, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy735;
++              if (yych == 'R') goto yy739;
 +              if (yych != 'r') goto yy187;
- yy735:
-               YYDEBUG(735, *YYCURSOR);
++yy739:
++              YYDEBUG(739, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy736;
++              if (yych == 'E') goto yy740;
 +              if (yych != 'e') goto yy187;
- yy736:
-               YYDEBUG(736, *YYCURSOR);
++yy740:
++              YYDEBUG(740, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(737, *YYCURSOR);
++              YYDEBUG(741, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1118 "Zend/zend_language_scanner.l"
 +              {
 +      return T_DECLARE;
 +}
- #line 6795 "Zend/zend_language_scanner.c"
- yy738:
-               YYDEBUG(738, *YYCURSOR);
++#line 6817 "Zend/zend_language_scanner.c"
++yy742:
++              YYDEBUG(742, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy800;
-               if (yych == 'h') goto yy800;
++              if (yych == 'H') goto yy804;
++              if (yych == 'h') goto yy804;
 +              goto yy187;
- yy739:
-               YYDEBUG(739, *YYCURSOR);
++yy743:
++              YYDEBUG(743, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy794;
-               if (yych == 's') goto yy794;
++              if (yych == 'S') goto yy798;
++              if (yych == 's') goto yy798;
 +              goto yy187;
- yy740:
-               YYDEBUG(740, *YYCURSOR);
++yy744:
++              YYDEBUG(744, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'P') goto yy790;
-               if (yych == 'p') goto yy790;
++              if (yych == 'P') goto yy794;
++              if (yych == 'p') goto yy794;
 +              goto yy187;
- yy741:
-               YYDEBUG(741, *YYCURSOR);
++yy745:
++              YYDEBUG(745, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'D') goto yy756;
-               if (yych == 'd') goto yy756;
++              if (yych == 'D') goto yy760;
++              if (yych == 'd') goto yy760;
 +              goto yy187;
- yy742:
-               YYDEBUG(742, *YYCURSOR);
++yy746:
++              YYDEBUG(746, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy753;
-               if (yych == 'a') goto yy753;
++              if (yych == 'A') goto yy757;
++              if (yych == 'a') goto yy757;
 +              goto yy187;
- yy743:
-               YYDEBUG(743, *YYCURSOR);
++yy747:
++              YYDEBUG(747, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych <= 'T') {
-                       if (yych == 'I') goto yy744;
++                      if (yych == 'I') goto yy748;
 +                      if (yych <= 'S') goto yy187;
-                       goto yy745;
++                      goto yy749;
 +              } else {
 +                      if (yych <= 'i') {
 +                              if (yych <= 'h') goto yy187;
 +                      } else {
-                               if (yych == 't') goto yy745;
++                              if (yych == 't') goto yy749;
 +                              goto yy187;
 +                      }
 +              }
- yy744:
-               YYDEBUG(744, *YYCURSOR);
++yy748:
++              YYDEBUG(748, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy751;
-               if (yych == 't') goto yy751;
++              if (yych == 'T') goto yy755;
++              if (yych == 't') goto yy755;
 +              goto yy187;
- yy745:
-               YYDEBUG(745, *YYCURSOR);
++yy749:
++              YYDEBUG(749, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy746;
++              if (yych == 'E') goto yy750;
 +              if (yych != 'e') goto yy187;
- yy746:
-               YYDEBUG(746, *YYCURSOR);
++yy750:
++              YYDEBUG(750, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy747;
++              if (yych == 'N') goto yy751;
 +              if (yych != 'n') goto yy187;
- yy747:
-               YYDEBUG(747, *YYCURSOR);
++yy751:
++              YYDEBUG(751, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'D') goto yy748;
++              if (yych == 'D') goto yy752;
 +              if (yych != 'd') goto yy187;
- yy748:
-               YYDEBUG(748, *YYCURSOR);
++yy752:
++              YYDEBUG(752, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy749;
++              if (yych == 'S') goto yy753;
 +              if (yych != 's') goto yy187;
- yy749:
-               YYDEBUG(749, *YYCURSOR);
++yy753:
++              YYDEBUG(753, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(750, *YYCURSOR);
++              YYDEBUG(754, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1182 "Zend/zend_language_scanner.l"
 +              {
 +      return T_EXTENDS;
 +}
- #line 6879 "Zend/zend_language_scanner.c"
- yy751:
-               YYDEBUG(751, *YYCURSOR);
++#line 6901 "Zend/zend_language_scanner.c"
++yy755:
++              YYDEBUG(755, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(752, *YYCURSOR);
++              YYDEBUG(756, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1034 "Zend/zend_language_scanner.l"
 +              {
 +      return T_EXIT;
 +}
- #line 6892 "Zend/zend_language_scanner.c"
- yy753:
-               YYDEBUG(753, *YYCURSOR);
++#line 6914 "Zend/zend_language_scanner.c"
++yy757:
++              YYDEBUG(757, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy754;
++              if (yych == 'L') goto yy758;
 +              if (yych != 'l') goto yy187;
- yy754:
-               YYDEBUG(754, *YYCURSOR);
++yy758:
++              YYDEBUG(758, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(755, *YYCURSOR);
++              YYDEBUG(759, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1269 "Zend/zend_language_scanner.l"
 +              {
 +      return T_EVAL;
 +}
- #line 6910 "Zend/zend_language_scanner.c"
- yy756:
-               YYDEBUG(756, *YYCURSOR);
++#line 6932 "Zend/zend_language_scanner.c"
++yy760:
++              YYDEBUG(760, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              YYDEBUG(-1, yych);
 +              switch (yych) {
 +              case 'D':
-               case 'd':       goto yy757;
++              case 'd':       goto yy761;
 +              case 'F':
-               case 'f':       goto yy758;
++              case 'f':       goto yy762;
 +              case 'I':
-               case 'i':       goto yy759;
++              case 'i':       goto yy763;
 +              case 'S':
-               case 's':       goto yy760;
++              case 's':       goto yy764;
 +              case 'W':
-               case 'w':       goto yy761;
++              case 'w':       goto yy765;
 +              default:        goto yy187;
 +              }
- yy757:
-               YYDEBUG(757, *YYCURSOR);
++yy761:
++              YYDEBUG(761, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy783;
-               if (yych == 'e') goto yy783;
++              if (yych == 'E') goto yy787;
++              if (yych == 'e') goto yy787;
 +              goto yy187;
- yy758:
-               YYDEBUG(758, *YYCURSOR);
++yy762:
++              YYDEBUG(762, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy775;
-               if (yych == 'o') goto yy775;
++              if (yych == 'O') goto yy779;
++              if (yych == 'o') goto yy779;
 +              goto yy187;
- yy759:
-               YYDEBUG(759, *YYCURSOR);
++yy763:
++              YYDEBUG(763, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'F') goto yy773;
-               if (yych == 'f') goto yy773;
++              if (yych == 'F') goto yy777;
++              if (yych == 'f') goto yy777;
 +              goto yy187;
- yy760:
-               YYDEBUG(760, *YYCURSOR);
++yy764:
++              YYDEBUG(764, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'W') goto yy767;
-               if (yych == 'w') goto yy767;
++              if (yych == 'W') goto yy771;
++              if (yych == 'w') goto yy771;
 +              goto yy187;
- yy761:
-               YYDEBUG(761, *YYCURSOR);
++yy765:
++              YYDEBUG(765, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy762;
++              if (yych == 'H') goto yy766;
 +              if (yych != 'h') goto yy187;
- yy762:
-               YYDEBUG(762, *YYCURSOR);
++yy766:
++              YYDEBUG(766, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy763;
++              if (yych == 'I') goto yy767;
 +              if (yych != 'i') goto yy187;
- yy763:
-               YYDEBUG(763, *YYCURSOR);
++yy767:
++              YYDEBUG(767, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy764;
++              if (yych == 'L') goto yy768;
 +              if (yych != 'l') goto yy187;
- yy764:
-               YYDEBUG(764, *YYCURSOR);
++yy768:
++              YYDEBUG(768, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy765;
++              if (yych == 'E') goto yy769;
 +              if (yych != 'e') goto yy187;
- yy765:
-               YYDEBUG(765, *YYCURSOR);
++yy769:
++              YYDEBUG(769, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(766, *YYCURSOR);
++              YYDEBUG(770, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1094 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ENDWHILE;
 +}
- #line 6984 "Zend/zend_language_scanner.c"
- yy767:
-               YYDEBUG(767, *YYCURSOR);
++#line 7006 "Zend/zend_language_scanner.c"
++yy771:
++              YYDEBUG(771, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'I') goto yy768;
++              if (yych == 'I') goto yy772;
 +              if (yych != 'i') goto yy187;
- yy768:
-               YYDEBUG(768, *YYCURSOR);
++yy772:
++              YYDEBUG(772, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy769;
++              if (yych == 'T') goto yy773;
 +              if (yych != 't') goto yy187;
- yy769:
-               YYDEBUG(769, *YYCURSOR);
++yy773:
++              YYDEBUG(773, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy770;
++              if (yych == 'C') goto yy774;
 +              if (yych != 'c') goto yy187;
- yy770:
-               YYDEBUG(770, *YYCURSOR);
++yy774:
++              YYDEBUG(774, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy771;
++              if (yych == 'H') goto yy775;
 +              if (yych != 'h') goto yy187;
- yy771:
-               YYDEBUG(771, *YYCURSOR);
++yy775:
++              YYDEBUG(775, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(772, *YYCURSOR);
++              YYDEBUG(776, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1138 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ENDSWITCH;
 +}
- #line 7017 "Zend/zend_language_scanner.c"
- yy773:
-               YYDEBUG(773, *YYCURSOR);
++#line 7039 "Zend/zend_language_scanner.c"
++yy777:
++              YYDEBUG(777, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(774, *YYCURSOR);
++              YYDEBUG(778, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1082 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ENDIF;
 +}
- #line 7030 "Zend/zend_language_scanner.c"
- yy775:
-               YYDEBUG(775, *YYCURSOR);
++#line 7052 "Zend/zend_language_scanner.c"
++yy779:
++              YYDEBUG(779, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy776;
++              if (yych == 'R') goto yy780;
 +              if (yych != 'r') goto yy187;
- yy776:
-               YYDEBUG(776, *YYCURSOR);
++yy780:
++              YYDEBUG(780, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '^') {
 +                      if (yych <= '@') {
-                               if (yych <= '/') goto yy777;
++                              if (yych <= '/') goto yy781;
 +                              if (yych <= '9') goto yy186;
 +                      } else {
-                               if (yych == 'E') goto yy778;
++                              if (yych == 'E') goto yy782;
 +                              if (yych <= 'Z') goto yy186;
 +                      }
 +              } else {
 +                      if (yych <= 'd') {
 +                              if (yych != '`') goto yy186;
 +                      } else {
-                               if (yych <= 'e') goto yy778;
++                              if (yych <= 'e') goto yy782;
 +                              if (yych <= 'z') goto yy186;
 +                              if (yych >= 0x7F) goto yy186;
 +                      }
 +              }
- yy777:
-               YYDEBUG(777, *YYCURSOR);
++yy781:
++              YYDEBUG(781, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1106 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ENDFOR;
 +}
- #line 7063 "Zend/zend_language_scanner.c"
- yy778:
-               YYDEBUG(778, *YYCURSOR);
++#line 7085 "Zend/zend_language_scanner.c"
++yy782:
++              YYDEBUG(782, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy779;
++              if (yych == 'A') goto yy783;
 +              if (yych != 'a') goto yy187;
- yy779:
-               YYDEBUG(779, *YYCURSOR);
++yy783:
++              YYDEBUG(783, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy780;
++              if (yych == 'C') goto yy784;
 +              if (yych != 'c') goto yy187;
- yy780:
-               YYDEBUG(780, *YYCURSOR);
++yy784:
++              YYDEBUG(784, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy781;
++              if (yych == 'H') goto yy785;
 +              if (yych != 'h') goto yy187;
- yy781:
-               YYDEBUG(781, *YYCURSOR);
++yy785:
++              YYDEBUG(785, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(782, *YYCURSOR);
++              YYDEBUG(786, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1114 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ENDFOREACH;
 +}
- #line 7091 "Zend/zend_language_scanner.c"
- yy783:
-               YYDEBUG(783, *YYCURSOR);
++#line 7113 "Zend/zend_language_scanner.c"
++yy787:
++              YYDEBUG(787, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy784;
++              if (yych == 'C') goto yy788;
 +              if (yych != 'c') goto yy187;
- yy784:
-               YYDEBUG(784, *YYCURSOR);
++yy788:
++              YYDEBUG(788, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy785;
++              if (yych == 'L') goto yy789;
 +              if (yych != 'l') goto yy187;
- yy785:
-               YYDEBUG(785, *YYCURSOR);
++yy789:
++              YYDEBUG(789, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy786;
++              if (yych == 'A') goto yy790;
 +              if (yych != 'a') goto yy187;
- yy786:
-               YYDEBUG(786, *YYCURSOR);
++yy790:
++              YYDEBUG(790, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy787;
++              if (yych == 'R') goto yy791;
 +              if (yych != 'r') goto yy187;
- yy787:
-               YYDEBUG(787, *YYCURSOR);
++yy791:
++              YYDEBUG(791, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy788;
++              if (yych == 'E') goto yy792;
 +              if (yych != 'e') goto yy187;
- yy788:
-               YYDEBUG(788, *YYCURSOR);
++yy792:
++              YYDEBUG(792, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(789, *YYCURSOR);
++              YYDEBUG(793, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1122 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ENDDECLARE;
 +}
- #line 7129 "Zend/zend_language_scanner.c"
- yy790:
-               YYDEBUG(790, *YYCURSOR);
++#line 7151 "Zend/zend_language_scanner.c"
++yy794:
++              YYDEBUG(794, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy791;
++              if (yych == 'T') goto yy795;
 +              if (yych != 't') goto yy187;
- yy791:
-               YYDEBUG(791, *YYCURSOR);
++yy795:
++              YYDEBUG(795, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy792;
++              if (yych == 'Y') goto yy796;
 +              if (yych != 'y') goto yy187;
- yy792:
-               YYDEBUG(792, *YYCURSOR);
++yy796:
++              YYDEBUG(796, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(793, *YYCURSOR);
++              YYDEBUG(797, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1309 "Zend/zend_language_scanner.l"
 +              {
 +      return T_EMPTY;
 +}
- #line 7152 "Zend/zend_language_scanner.c"
- yy794:
-               YYDEBUG(794, *YYCURSOR);
++#line 7174 "Zend/zend_language_scanner.c"
++yy798:
++              YYDEBUG(798, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy795;
++              if (yych == 'E') goto yy799;
 +              if (yych != 'e') goto yy187;
- yy795:
-               YYDEBUG(795, *YYCURSOR);
++yy799:
++              YYDEBUG(799, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '^') {
 +                      if (yych <= '@') {
-                               if (yych <= '/') goto yy796;
++                              if (yych <= '/') goto yy800;
 +                              if (yych <= '9') goto yy186;
 +                      } else {
-                               if (yych == 'I') goto yy797;
++                              if (yych == 'I') goto yy801;
 +                              if (yych <= 'Z') goto yy186;
 +                      }
 +              } else {
 +                      if (yych <= 'h') {
 +                              if (yych != '`') goto yy186;
 +                      } else {
-                               if (yych <= 'i') goto yy797;
++                              if (yych <= 'i') goto yy801;
 +                              if (yych <= 'z') goto yy186;
 +                              if (yych >= 0x7F) goto yy186;
 +                      }
 +              }
- yy796:
-               YYDEBUG(796, *YYCURSOR);
++yy800:
++              YYDEBUG(800, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1086 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ELSE;
 +}
- #line 7185 "Zend/zend_language_scanner.c"
- yy797:
-               YYDEBUG(797, *YYCURSOR);
++#line 7207 "Zend/zend_language_scanner.c"
++yy801:
++              YYDEBUG(801, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'F') goto yy798;
++              if (yych == 'F') goto yy802;
 +              if (yych != 'f') goto yy187;
- yy798:
-               YYDEBUG(798, *YYCURSOR);
++yy802:
++              YYDEBUG(802, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(799, *YYCURSOR);
++              YYDEBUG(803, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1078 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ELSEIF;
 +}
- #line 7203 "Zend/zend_language_scanner.c"
- yy800:
-               YYDEBUG(800, *YYCURSOR);
++#line 7225 "Zend/zend_language_scanner.c"
++yy804:
++              YYDEBUG(804, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy801;
++              if (yych == 'O') goto yy805;
 +              if (yych != 'o') goto yy187;
- yy801:
-               YYDEBUG(801, *YYCURSOR);
++yy805:
++              YYDEBUG(805, *YYCURSOR);
 +              ++YYCURSOR;
 +              if (yybm[0+(yych = *YYCURSOR)] & 4) {
 +                      goto yy186;
 +              }
-               YYDEBUG(802, *YYCURSOR);
++              YYDEBUG(806, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1162 "Zend/zend_language_scanner.l"
 +              {
 +      return T_ECHO;
 +}
- #line 7221 "Zend/zend_language_scanner.c"
++#line 7243 "Zend/zend_language_scanner.c"
 +      }
 +/* *********************************** */
 +yyc_ST_LOOKING_FOR_PROPERTY:
 +      {
 +              static const unsigned char yybm[] = {
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0, 128, 128,   0,   0, 128,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                      128,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,   0,   0,   0,   0,   0,   0, 
 +                        0,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,   0,   0,   0,   0,  64, 
 +                        0,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,   0,   0,   0,   0,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +                       64,  64,  64,  64,  64,  64,  64,  64, 
 +              };
-               YYDEBUG(803, *YYCURSOR);
++              YYDEBUG(807, *YYCURSOR);
 +              YYFILL(2);
 +              yych = *YYCURSOR;
 +              if (yych <= '-') {
 +                      if (yych <= '\r') {
-                               if (yych <= 0x08) goto yy811;
-                               if (yych <= '\n') goto yy805;
-                               if (yych <= '\f') goto yy811;
++                              if (yych <= 0x08) goto yy815;
++                              if (yych <= '\n') goto yy809;
++                              if (yych <= '\f') goto yy815;
 +                      } else {
-                               if (yych == ' ') goto yy805;
-                               if (yych <= ',') goto yy811;
-                               goto yy807;
++                              if (yych == ' ') goto yy809;
++                              if (yych <= ',') goto yy815;
++                              goto yy811;
 +                      }
 +              } else {
 +                      if (yych <= '_') {
-                               if (yych <= '@') goto yy811;
-                               if (yych <= 'Z') goto yy809;
-                               if (yych <= '^') goto yy811;
-                               goto yy809;
++                              if (yych <= '@') goto yy815;
++                              if (yych <= 'Z') goto yy813;
++                              if (yych <= '^') goto yy815;
++                              goto yy813;
 +                      } else {
-                               if (yych <= '`') goto yy811;
-                               if (yych <= 'z') goto yy809;
-                               if (yych <= '~') goto yy811;
-                               goto yy809;
++                              if (yych <= '`') goto yy815;
++                              if (yych <= 'z') goto yy813;
++                              if (yych <= '~') goto yy815;
++                              goto yy813;
 +                      }
 +              }
- yy805:
-               YYDEBUG(805, *YYCURSOR);
++yy809:
++              YYDEBUG(809, *YYCURSOR);
 +              ++YYCURSOR;
 +              yych = *YYCURSOR;
-               goto yy817;
- yy806:
-               YYDEBUG(806, *YYCURSOR);
++              goto yy821;
++yy810:
++              YYDEBUG(810, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1195 "Zend/zend_language_scanner.l"
 +              {
 +      DUMMY_STRINGL(zendlval, yytext, yyleng);
 +      HANDLE_NEWLINES(yytext, yyleng);
 +      return T_WHITESPACE;
 +}
- #line 7300 "Zend/zend_language_scanner.c"
- yy807:
-               YYDEBUG(807, *YYCURSOR);
++#line 7322 "Zend/zend_language_scanner.c"
++yy811:
++              YYDEBUG(811, *YYCURSOR);
 +              ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '>') goto yy814;
- yy808:
-               YYDEBUG(808, *YYCURSOR);
++              if ((yych = *YYCURSOR) == '>') goto yy818;
++yy812:
++              YYDEBUG(812, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1211 "Zend/zend_language_scanner.l"
 +              {
 +      yyless(0);
 +      yy_pop_state(TSRMLS_C);
 +      goto restart;
 +}
- #line 7314 "Zend/zend_language_scanner.c"
- yy809:
-               YYDEBUG(809, *YYCURSOR);
++#line 7336 "Zend/zend_language_scanner.c"
++yy813:
++              YYDEBUG(813, *YYCURSOR);
 +              ++YYCURSOR;
 +              yych = *YYCURSOR;
-               goto yy813;
- yy810:
-               YYDEBUG(810, *YYCURSOR);
++              goto yy817;
++yy814:
++              YYDEBUG(814, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1205 "Zend/zend_language_scanner.l"
 +              {
 +      yy_pop_state(TSRMLS_C);
 +      zend_copy_value(zendlval, yytext, yyleng);
 +      return T_STRING;
 +}
- #line 7329 "Zend/zend_language_scanner.c"
- yy811:
-               YYDEBUG(811, *YYCURSOR);
++#line 7351 "Zend/zend_language_scanner.c"
++yy815:
++              YYDEBUG(815, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               goto yy808;
- yy812:
-               YYDEBUG(812, *YYCURSOR);
++              goto yy812;
++yy816:
++              YYDEBUG(816, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
- yy813:
-               YYDEBUG(813, *YYCURSOR);
++yy817:
++              YYDEBUG(817, *YYCURSOR);
 +              if (yybm[0+yych] & 64) {
-                       goto yy812;
++                      goto yy816;
 +              }
-               goto yy810;
- yy814:
-               YYDEBUG(814, *YYCURSOR);
++              goto yy814;
++yy818:
++              YYDEBUG(818, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(815, *YYCURSOR);
++              YYDEBUG(819, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
 +#line 1201 "Zend/zend_language_scanner.l"
 +              {
 +      return T_OBJECT_OPERATOR;
 +}
- #line 7354 "Zend/zend_language_scanner.c"
- yy816:
-               YYDEBUG(816, *YYCURSOR);
++#line 7376 "Zend/zend_language_scanner.c"
++yy820:
++              YYDEBUG(820, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
- yy817:
-               YYDEBUG(817, *YYCURSOR);
++yy821:
++              YYDEBUG(821, *YYCURSOR);
 +              if (yybm[0+yych] & 128) {
-                       goto yy816;
++                      goto yy820;
 +              }
-               goto yy806;
++              goto yy810;
 +      }
 +/* *********************************** */
 +yyc_ST_LOOKING_FOR_VARNAME:
 +      {
 +              static const unsigned char yybm[] = {
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128,   0,   0,   0,   0,   0,   0, 
 +                        0, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128,   0,   0,   0,   0, 128, 
 +                        0, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128,   0,   0,   0,   0, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +                      128, 128, 128, 128, 128, 128, 128, 128, 
 +              };
-               YYDEBUG(818, *YYCURSOR);
++              YYDEBUG(822, *YYCURSOR);
 +              YYFILL(2);
 +              yych = *YYCURSOR;
 +              if (yych <= '_') {
-                       if (yych <= '@') goto yy822;
-                       if (yych <= 'Z') goto yy820;
-                       if (yych <= '^') goto yy822;
++                      if (yych <= '@') goto yy826;
++                      if (yych <= 'Z') goto yy824;
++                      if (yych <= '^') goto yy826;
 +              } else {
-                       if (yych <= '`') goto yy822;
-                       if (yych <= 'z') goto yy820;
-                       if (yych <= '~') goto yy822;
++                      if (yych <= '`') goto yy826;
++                      if (yych <= 'z') goto yy824;
++                      if (yych <= '~') goto yy826;
 +              }
- yy820:
-               YYDEBUG(820, *YYCURSOR);
++yy824:
++              YYDEBUG(824, *YYCURSOR);
 +              yyaccept = 0;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= '_') {
 +                      if (yych <= '@') {
-                               if (yych <= '/') goto yy821;
-                               if (yych <= '9') goto yy824;
++                              if (yych <= '/') goto yy825;
++                              if (yych <= '9') goto yy828;
 +                      } else {
-                               if (yych <= '[') goto yy824;
-                               if (yych >= '_') goto yy824;
++                              if (yych <= '[') goto yy828;
++                              if (yych >= '_') goto yy828;
 +                      }
 +              } else {
 +                      if (yych <= '|') {
-                               if (yych <= '`') goto yy821;
-                               if (yych <= 'z') goto yy824;
++                              if (yych <= '`') goto yy825;
++                              if (yych <= 'z') goto yy828;
 +                      } else {
-                               if (yych != '~') goto yy824;
++                              if (yych != '~') goto yy828;
 +                      }
 +              }
- yy821:
-               YYDEBUG(821, *YYCURSOR);
++yy825:
++              YYDEBUG(825, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1500 "Zend/zend_language_scanner.l"
++#line 1508 "Zend/zend_language_scanner.l"
 +              {
 +      yyless(0);
 +      yy_pop_state(TSRMLS_C);
 +      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 +      goto restart;
 +}
- #line 7446 "Zend/zend_language_scanner.c"
- yy822:
-               YYDEBUG(822, *YYCURSOR);
++#line 7468 "Zend/zend_language_scanner.c"
++yy826:
++              YYDEBUG(826, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               goto yy821;
- yy823:
-               YYDEBUG(823, *YYCURSOR);
++              goto yy825;
++yy827:
++              YYDEBUG(827, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
- yy824:
-               YYDEBUG(824, *YYCURSOR);
++yy828:
++              YYDEBUG(828, *YYCURSOR);
 +              if (yybm[0+yych] & 128) {
-                       goto yy823;
++                      goto yy827;
 +              }
-               if (yych == '[') goto yy826;
-               if (yych == '}') goto yy826;
-               YYDEBUG(825, *YYCURSOR);
++              if (yych == '[') goto yy830;
++              if (yych == '}') goto yy830;
++              YYDEBUG(829, *YYCURSOR);
 +              YYCURSOR = YYMARKER;
-               goto yy821;
- yy826:
-               YYDEBUG(826, *YYCURSOR);
++              goto yy825;
++yy830:
++              YYDEBUG(830, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(827, *YYCURSOR);
++              YYDEBUG(831, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1491 "Zend/zend_language_scanner.l"
++#line 1499 "Zend/zend_language_scanner.l"
 +              {
 +      yyless(yyleng - 1);
 +      zend_copy_value(zendlval, yytext, yyleng);
 +      yy_pop_state(TSRMLS_C);
 +      yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
 +      return T_STRING_VARNAME;
 +}
- #line 7479 "Zend/zend_language_scanner.c"
++#line 7501 "Zend/zend_language_scanner.c"
 +      }
 +/* *********************************** */
 +yyc_ST_NOWDOC:
-       YYDEBUG(828, *YYCURSOR);
++      YYDEBUG(832, *YYCURSOR);
 +      YYFILL(1);
 +      yych = *YYCURSOR;
-       YYDEBUG(830, *YYCURSOR);
++      YYDEBUG(834, *YYCURSOR);
 +      ++YYCURSOR;
-       YYDEBUG(831, *YYCURSOR);
++      YYDEBUG(835, *YYCURSOR);
 +      yyleng = YYCURSOR - SCNG(yy_text);
- #line 2331 "Zend/zend_language_scanner.l"
++#line 2339 "Zend/zend_language_scanner.l"
 +      {
 +      int newline = 0;
 +
 +      zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));
 +
 +      if (YYCURSOR > YYLIMIT) {
 +              return 0;
 +      }
 +
 +      YYCURSOR--;
 +
 +      while (YYCURSOR < YYLIMIT) {
 +              switch (*YYCURSOR++) {
 +                      case '\r':
 +                              if (*YYCURSOR == '\n') {
 +                                      YYCURSOR++;
 +                              }
 +                              /* fall through */
 +                      case '\n':
 +                              /* Check for ending label on the next line */
 +                              if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {
 +                                      YYCTYPE *end = YYCURSOR + heredoc_label->length;
 +
 +                                      if (*end == ';') {
 +                                              end++;
 +                                      }
 +
 +                                      if (*end == '\n' || *end == '\r') {
 +                                              /* newline before label will be subtracted from returned text, but
 +                                               * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
 +                                              if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') {
 +                                                      newline = 2; /* Windows newline */
 +                                              } else {
 +                                                      newline = 1;
 +                                              }
 +
 +                                              CG(increment_lineno) = 1; /* For newline before label */
 +                                              BEGIN(ST_END_HEREDOC);
 +
 +                                              goto nowdoc_scan_done;
 +                                      }
 +                              }
 +                              /* fall through */
 +                      default:
 +                              continue;
 +              }
 +      }
 +
 +nowdoc_scan_done:
 +      yyleng = YYCURSOR - SCNG(yy_text);
 +
 +      zend_copy_value(zendlval, yytext, yyleng - newline);
 +      HANDLE_NEWLINES(yytext, yyleng - newline);
 +      return T_ENCAPSED_AND_WHITESPACE;
 +}
- #line 7546 "Zend/zend_language_scanner.c"
++#line 7568 "Zend/zend_language_scanner.c"
 +/* *********************************** */
 +yyc_ST_VAR_OFFSET:
 +      {
 +              static const unsigned char yybm[] = {
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                        0,   0,   0,   0,   0,   0,   0,   0, 
 +                      240, 240, 112, 112, 112, 112, 112, 112, 
 +                      112, 112,   0,   0,   0,   0,   0,   0, 
 +                        0,  80,  80,  80,  80,  80,  80,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,   0,   0,   0,   0,  16, 
 +                        0,  80,  80,  80,  80,  80,  80,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,   0,   0,   0,   0,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +                       16,  16,  16,  16,  16,  16,  16,  16, 
 +              };
-               YYDEBUG(832, *YYCURSOR);
++              YYDEBUG(836, *YYCURSOR);
 +              YYFILL(3);
 +              yych = *YYCURSOR;
 +              if (yych <= '/') {
 +                      if (yych <= ' ') {
 +                              if (yych <= '\f') {
-                                       if (yych <= 0x08) goto yy846;
-                                       if (yych <= '\n') goto yy842;
-                                       goto yy846;
++                                      if (yych <= 0x08) goto yy850;
++                                      if (yych <= '\n') goto yy846;
++                                      goto yy850;
 +                              } else {
-                                       if (yych <= '\r') goto yy842;
-                                       if (yych <= 0x1F) goto yy846;
-                                       goto yy842;
++                                      if (yych <= '\r') goto yy846;
++                                      if (yych <= 0x1F) goto yy850;
++                                      goto yy846;
 +                              }
 +                      } else {
 +                              if (yych <= '$') {
-                                       if (yych <= '"') goto yy841;
-                                       if (yych <= '#') goto yy842;
-                                       goto yy837;
-                               } else {
-                                       if (yych == '\'') goto yy842;
++                                      if (yych <= '"') goto yy845;
++                                      if (yych <= '#') goto yy846;
 +                                      goto yy841;
++                              } else {
++                                      if (yych == '\'') goto yy846;
++                                      goto yy845;
 +                              }
 +                      }
 +              } else {
 +                      if (yych <= '\\') {
 +                              if (yych <= '@') {
-                                       if (yych <= '0') goto yy834;
-                                       if (yych <= '9') goto yy836;
-                                       goto yy841;
++                                      if (yych <= '0') goto yy838;
++                                      if (yych <= '9') goto yy840;
++                                      goto yy845;
 +                              } else {
-                                       if (yych <= 'Z') goto yy844;
-                                       if (yych <= '[') goto yy841;
-                                       goto yy842;
++                                      if (yych <= 'Z') goto yy848;
++                                      if (yych <= '[') goto yy845;
++                                      goto yy846;
 +                              }
 +                      } else {
 +                              if (yych <= '_') {
-                                       if (yych <= ']') goto yy839;
-                                       if (yych <= '^') goto yy841;
-                                       goto yy844;
++                                      if (yych <= ']') goto yy843;
++                                      if (yych <= '^') goto yy845;
++                                      goto yy848;
 +                              } else {
-                                       if (yych <= '`') goto yy841;
-                                       if (yych <= 'z') goto yy844;
-                                       if (yych <= '~') goto yy841;
-                                       goto yy844;
++                                      if (yych <= '`') goto yy845;
++                                      if (yych <= 'z') goto yy848;
++                                      if (yych <= '~') goto yy845;
++                                      goto yy848;
 +                              }
 +                      }
 +              }
- yy834:
-               YYDEBUG(834, *YYCURSOR);
++yy838:
++              YYDEBUG(838, *YYCURSOR);
 +              yyaccept = 0;
 +              yych = *(YYMARKER = ++YYCURSOR);
 +              if (yych <= 'W') {
 +                      if (yych <= '9') {
-                               if (yych >= '0') goto yy858;
++                              if (yych >= '0') goto yy862;
 +                      } else {
-                               if (yych == 'B') goto yy855;
++                              if (yych == 'B') goto yy859;
 +                      }
 +              } else {
 +                      if (yych <= 'b') {
-                               if (yych <= 'X') goto yy857;
-                               if (yych >= 'b') goto yy855;
++                              if (yych <= 'X') goto yy861;
++                              if (yych >= 'b') goto yy859;
 +                      } else {
-                               if (yych == 'x') goto yy857;
++                              if (yych == 'x') goto yy861;
 +                      }
 +              }
- yy835:
-               YYDEBUG(835, *YYCURSOR);
++yy839:
++              YYDEBUG(839, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1571 "Zend/zend_language_scanner.l"
++#line 1579 "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));
 +      } else {
 +              ZVAL_STRINGL(zendlval, yytext, yyleng);
 +      }
 +      return T_NUM_STRING;
 +}
- #line 7662 "Zend/zend_language_scanner.c"
- yy836:
-               YYDEBUG(836, *YYCURSOR);
++#line 7684 "Zend/zend_language_scanner.c"
++yy840:
++              YYDEBUG(840, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               goto yy854;
- yy837:
-               YYDEBUG(837, *YYCURSOR);
++              goto yy858;
++yy841:
++              YYDEBUG(841, *YYCURSOR);
 +              ++YYCURSOR;
 +              if ((yych = *YYCURSOR) <= '_') {
-                       if (yych <= '@') goto yy838;
-                       if (yych <= 'Z') goto yy850;
-                       if (yych >= '_') goto yy850;
++                      if (yych <= '@') goto yy842;
++                      if (yych <= 'Z') goto yy854;
++                      if (yych >= '_') goto yy854;
 +              } else {
-                       if (yych <= '`') goto yy838;
-                       if (yych <= 'z') goto yy850;
-                       if (yych >= 0x7F) goto yy850;
++                      if (yych <= '`') goto yy842;
++                      if (yych <= 'z') goto yy854;
++                      if (yych >= 0x7F) goto yy854;
 +              }
- yy838:
-               YYDEBUG(838, *YYCURSOR);
++yy842:
++              YYDEBUG(842, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1863 "Zend/zend_language_scanner.l"
++#line 1871 "Zend/zend_language_scanner.l"
 +              {
 +      /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
 +      return yytext[0];
 +}
- #line 7687 "Zend/zend_language_scanner.c"
- yy839:
-               YYDEBUG(839, *YYCURSOR);
++#line 7709 "Zend/zend_language_scanner.c"
++yy843:
++              YYDEBUG(843, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(840, *YYCURSOR);
++              YYDEBUG(844, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1858 "Zend/zend_language_scanner.l"
++#line 1866 "Zend/zend_language_scanner.l"
 +              {
 +      yy_pop_state(TSRMLS_C);
 +      return ']';
 +}
- #line 7698 "Zend/zend_language_scanner.c"
- yy841:
-               YYDEBUG(841, *YYCURSOR);
++#line 7720 "Zend/zend_language_scanner.c"
++yy845:
++              YYDEBUG(845, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               goto yy838;
- yy842:
-               YYDEBUG(842, *YYCURSOR);
++              goto yy842;
++yy846:
++              YYDEBUG(846, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(843, *YYCURSOR);
++              YYDEBUG(847, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1868 "Zend/zend_language_scanner.l"
++#line 1876 "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 7715 "Zend/zend_language_scanner.c"
- yy844:
-               YYDEBUG(844, *YYCURSOR);
++#line 7737 "Zend/zend_language_scanner.c"
++yy848:
++              YYDEBUG(848, *YYCURSOR);
 +              ++YYCURSOR;
 +              yych = *YYCURSOR;
-               goto yy849;
- yy845:
-               YYDEBUG(845, *YYCURSOR);
++              goto yy853;
++yy849:
++              YYDEBUG(849, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1875 "Zend/zend_language_scanner.l"
++#line 1883 "Zend/zend_language_scanner.l"
 +              {
 +      zend_copy_value(zendlval, yytext, yyleng);
 +      return T_STRING;
 +}
- #line 7729 "Zend/zend_language_scanner.c"
- yy846:
-               YYDEBUG(846, *YYCURSOR);
++#line 7751 "Zend/zend_language_scanner.c"
++yy850:
++              YYDEBUG(850, *YYCURSOR);
 +              ++YYCURSOR;
-               YYDEBUG(847, *YYCURSOR);
++              YYDEBUG(851, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 2388 "Zend/zend_language_scanner.l"
++#line 2396 "Zend/zend_language_scanner.l"
 +              {
 +      if (YYCURSOR > YYLIMIT) {
 +              return 0;
 +      }
 +
 +      zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
 +      goto restart;
 +}
- #line 7744 "Zend/zend_language_scanner.c"
- yy848:
-               YYDEBUG(848, *YYCURSOR);
++#line 7766 "Zend/zend_language_scanner.c"
++yy852:
++              YYDEBUG(852, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
- yy849:
-               YYDEBUG(849, *YYCURSOR);
++yy853:
++              YYDEBUG(853, *YYCURSOR);
 +              if (yybm[0+yych] & 16) {
-                       goto yy848;
++                      goto yy852;
 +              }
-               goto yy845;
- yy850:
-               YYDEBUG(850, *YYCURSOR);
++              goto yy849;
++yy854:
++              YYDEBUG(854, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-               YYDEBUG(851, *YYCURSOR);
++              YYDEBUG(855, *YYCURSOR);
 +              if (yych <= '^') {
 +                      if (yych <= '9') {
-                               if (yych >= '0') goto yy850;
++                              if (yych >= '0') goto yy854;
 +                      } else {
-                               if (yych <= '@') goto yy852;
-                               if (yych <= 'Z') goto yy850;
++                              if (yych <= '@') goto yy856;
++                              if (yych <= 'Z') goto yy854;
 +                      }
 +              } else {
 +                      if (yych <= '`') {
-                               if (yych <= '_') goto yy850;
++                              if (yych <= '_') goto yy854;
 +                      } else {
-                               if (yych <= 'z') goto yy850;
-                               if (yych >= 0x7F) goto yy850;
++                              if (yych <= 'z') goto yy854;
++                              if (yych >= 0x7F) goto yy854;
 +                      }
 +              }
- yy852:
-               YYDEBUG(852, *YYCURSOR);
++yy856:
++              YYDEBUG(856, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1853 "Zend/zend_language_scanner.l"
++#line 1861 "Zend/zend_language_scanner.l"
 +              {
 +      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 +      return T_VARIABLE;
 +}
- #line 7785 "Zend/zend_language_scanner.c"
- yy853:
-               YYDEBUG(853, *YYCURSOR);
++#line 7807 "Zend/zend_language_scanner.c"
++yy857:
++              YYDEBUG(857, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
- yy854:
-               YYDEBUG(854, *YYCURSOR);
++yy858:
++              YYDEBUG(858, *YYCURSOR);
 +              if (yybm[0+yych] & 32) {
-                       goto yy853;
++                      goto yy857;
 +              }
-               goto yy835;
- yy855:
-               YYDEBUG(855, *YYCURSOR);
++              goto yy839;
++yy859:
++              YYDEBUG(859, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yybm[0+yych] & 128) {
-                       goto yy863;
++                      goto yy867;
 +              }
- yy856:
-               YYDEBUG(856, *YYCURSOR);
++yy860:
++              YYDEBUG(860, *YYCURSOR);
 +              YYCURSOR = YYMARKER;
-               goto yy835;
- yy857:
-               YYDEBUG(857, *YYCURSOR);
++              goto yy839;
++yy861:
++              YYDEBUG(861, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yybm[0+yych] & 64) {
-                       goto yy861;
++                      goto yy865;
 +              }
-               goto yy856;
- yy858:
-               YYDEBUG(858, *YYCURSOR);
++              goto yy860;
++yy862:
++              YYDEBUG(862, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-               YYDEBUG(859, *YYCURSOR);
-               if (yych <= '/') goto yy860;
-               if (yych <= '9') goto yy858;
- yy860:
-               YYDEBUG(860, *YYCURSOR);
++              YYDEBUG(863, *YYCURSOR);
++              if (yych <= '/') goto yy864;
++              if (yych <= '9') goto yy862;
++yy864:
++              YYDEBUG(864, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 1580 "Zend/zend_language_scanner.l"
++#line 1588 "Zend/zend_language_scanner.l"
 +              { /* Offset must be treated as a string */
 +      ZVAL_STRINGL(zendlval, yytext, yyleng);
 +      return T_NUM_STRING;
 +}
- #line 7830 "Zend/zend_language_scanner.c"
- yy861:
-               YYDEBUG(861, *YYCURSOR);
++#line 7852 "Zend/zend_language_scanner.c"
++yy865:
++              YYDEBUG(865, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-               YYDEBUG(862, *YYCURSOR);
++              YYDEBUG(866, *YYCURSOR);
 +              if (yybm[0+yych] & 64) {
-                       goto yy861;
++                      goto yy865;
 +              }
-               goto yy860;
- yy863:
-               YYDEBUG(863, *YYCURSOR);
++              goto yy864;
++yy867:
++              YYDEBUG(867, *YYCURSOR);
 +              ++YYCURSOR;
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-               YYDEBUG(864, *YYCURSOR);
++              YYDEBUG(868, *YYCURSOR);
 +              if (yybm[0+yych] & 128) {
-                       goto yy863;
++                      goto yy867;
 +              }
-               goto yy860;
++              goto yy864;
 +      }
 +}
- #line 2397 "Zend/zend_language_scanner.l"
++#line 2405 "Zend/zend_language_scanner.l"
 +
 +}
Simple merge
index 9ec102fb15008f936bd4be4ae3e7cff8536e88ab,7f1d3e4e8654723421d7c377fa6aaf488c25e032..a41452dae88aecd3685fb3280ea68efcf1cff657
@@@ -137,8 -138,40 +137,39 @@@ ZEND_API HashTable *zend_std_get_gc(zva
  
  ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */
  {
-       *is_temp = 0;
-       return zend_std_get_properties(object TSRMLS_CC);
+       zend_class_entry *ce = Z_OBJCE_P(object);
 -      zval *retval = NULL;
++      zval retval;
++      HashTable *ht;
+       if (!ce->__debugInfo) {
+               *is_temp = 0;
+               return Z_OBJ_HANDLER_P(object, get_properties)
+                       ? Z_OBJ_HANDLER_P(object, get_properties)(object TSRMLS_CC)
+                       : NULL;
+       }
 -      zend_call_method_with_0_params(&object, ce, &ce->__debugInfo, ZEND_DEBUGINFO_FUNC_NAME, &retval);
 -      if (retval && Z_TYPE_P(retval) == IS_ARRAY) {
 -              HashTable *ht = Z_ARRVAL_P(retval);
 -              if (Z_REFCOUNT_P(retval) <= 1) {
++      zend_call_method_with_0_params(object, ce, &ce->__debugInfo, ZEND_DEBUGINFO_FUNC_NAME, &retval);
++      if (Z_TYPE(retval) == IS_ARRAY) {
++              if (Z_REFCOUNT(retval) <= 1) {
+                       *is_temp = 1;
 -                      efree(retval);
++                      ALLOC_HASHTABLE(ht);
++                      *ht = *Z_ARRVAL(retval);
++                      efree(Z_ARR(retval));
+                       return ht;
+               } else {
+                       *is_temp = 0;
+                       zval_ptr_dtor(&retval);
+               }
 -              return ht;
 -      }
 -      if (retval && Z_TYPE_P(retval) == IS_NULL) {
 -              zval ret;
 -              array_init(&ret);
++      } else if (Z_TYPE(retval) == IS_NULL) {
+               *is_temp = 1;
 -              zval_ptr_dtor(&retval);
 -              return Z_ARRVAL(ret);
++              ALLOC_HASHTABLE(ht);
++              zend_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0);
++              return ht;
+       }
+       zend_error_noreturn(E_ERROR, ZEND_DEBUGINFO_FUNC_NAME "() must return an array");
+       return NULL; /* Compilers are dumb and don't understand that noreturn means that the function does NOT need a return value... */
  }
  /* }}} */
  
Simple merge
Simple merge
Simple merge
index 2d4771c004f4f11bb82070f58eb3ffe366f7041a,195772a3954c17d2d6cb06a7c715850d5550eb98..812a2acaf99e532da820d4c37e56b61b7b5c256f
@@@ -1170,33 -1070,24 +1170,33 @@@ ZEND_VM_HELPER_EX(zend_fetch_var_addres
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (OP1_TYPE != IS_TMP_VAR) {
 -                                      FREE_OP1();
 -                              }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 -                              FREE_OP1();
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (OP1_TYPE == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
 +                      FREE_OP1();
                }
        }
  
@@@ -3031,8 -3124,7 +3030,7 @@@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_R
  {
        USE_OPLINE
        zend_free_op free_op1;
 -      zval *varptr;
 +      zval *varptr, *top;
-       int arg_num;
  
        SAVE_OPLINE();
        if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */
                }
                zend_vm_stack_push(varptr TSRMLS_CC);
        } else {
 -              zval *valptr;
 -
                if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
                        !(opline->extended_value & ZEND_ARG_SEND_SILENT) :
-                       !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) {
+                       !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) {
                        zend_error(E_STRICT, "Only variables should be passed by reference");
                }
 -              ALLOC_ZVAL(valptr);
 -              INIT_PZVAL_COPY(valptr, varptr);
 -              if (!IS_OP1_TMP_FREE()) {
 -                      zval_copy_ctor(valptr);
 -              }
 +              top = zend_vm_stack_top_inc(TSRMLS_C);
 +              ZVAL_COPY_VALUE(top, varptr);
 +              zval_opt_copy_ctor(top);
                FREE_OP1_IF_VAR();
 -              zend_vm_stack_push(valptr TSRMLS_CC);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@@ -3115,12 -3208,9 +3112,11 @@@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|
  ZEND_VM_HANDLER(66, ZEND_SEND_VAR, VAR|CV, ANY)
  {
        USE_OPLINE
 +      zval *varptr, *top;
 +      zend_free_op free_op1;
  
        if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) {
-               int arg_num = opline->op2.num + EX(call)->num_additional_args;
-               if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) {
+               if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) {
                        ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_REF);
                }
        }
@@@ -3603,41 -3705,40 +3599,37 @@@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT
                                zend_error_noreturn(E_ERROR, "Undefined constant '%s'", Z_STRVAL_P(opline->op2.zv));
                        }
                } else {
 -                      CACHE_PTR(opline->op2.literal->cache_slot, c);
 +                      CACHE_PTR(Z_CACHE_SLOT_P(opline->op2.zv), c);
                }
 -              retval = &EX_T(opline->result.var).tmp_var;
 -              ZVAL_COPY_VALUE(retval, &c->value);
 -              zval_copy_ctor(retval);
 +              retval = EX_VAR(opline->result.var);
 +              ZVAL_DUP(retval, &c->value);
-               CHECK_EXCEPTION();
-               ZEND_VM_NEXT_OPCODE();
        } else {
                /* class constant */
                zend_class_entry *ce;
 -              zval **value;
 +              zval *value;
  
                if (OP1_TYPE == IS_CONST) {
 -                      if (CACHED_PTR(opline->op2.literal->cache_slot)) {
 -                              value = CACHED_PTR(opline->op2.literal->cache_slot);
 -                              ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
 -                              zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
 +                      if (CACHED_PTR(Z_CACHE_SLOT_P(opline->op2.zv))) {
 +                              value = CACHED_PTR(Z_CACHE_SLOT_P(opline->op2.zv));
 +                              ZVAL_DUP(EX_VAR(opline->result.var), value);
-                               CHECK_EXCEPTION();
-                               ZEND_VM_NEXT_OPCODE();
+                               goto constant_fetch_end;
 -                      } else if (CACHED_PTR(opline->op1.literal->cache_slot)) {
 -                              ce = CACHED_PTR(opline->op1.literal->cache_slot);
 +                      } else if (CACHED_PTR(Z_CACHE_SLOT_P(opline->op1.zv))) {
 +                              ce = CACHED_PTR(Z_CACHE_SLOT_P(opline->op1.zv));
                        } else {
 -                              ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
 +                              ce = zend_fetch_class_by_name(Z_STR_P(opline->op1.zv), opline->op1.zv + 1, opline->extended_value TSRMLS_CC);
                                if (UNEXPECTED(EG(exception) != NULL)) {
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
                                }
 -                              CACHE_PTR(opline->op1.literal->cache_slot, ce);
 +                              CACHE_PTR(Z_CACHE_SLOT_P(opline->op1.zv), ce);
                        }
                } else {
 -                      ce = EX_T(opline->op1.var).class_entry;
 -                      if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) {
 -                              ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
 -                              zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
 +                      ce = Z_CE_P(EX_VAR(opline->op1.var));
 +                      if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(opline->op2.zv), ce)) != NULL) {
 +                              ZVAL_DUP(EX_VAR(opline->result.var), value);
-                               CHECK_EXCEPTION();
-                               ZEND_VM_NEXT_OPCODE();
+                               goto constant_fetch_end;
                        }
                }
  
                } else {
                        zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv));
                }
-               CHECK_EXCEPTION();
-               ZEND_VM_NEXT_OPCODE();
        }
 -      if (Z_TYPE(EX_T(opline->result.var).tmp_var) == IS_ARRAY) {
 -              zend_error_noreturn(E_ERROR, "Arrays are not allowed in constants at run-time");
 -      }
+ constant_fetch_end:
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
  }
  
  ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMP|VAR|UNUSED|CV)
@@@ -5259,20 -5370,21 +5251,20 @@@ ZEND_VM_HANDLER(143, ZEND_DECLARE_CONST
        name  = GET_OP1_ZVAL_PTR(BP_VAR_R);
        val   = GET_OP2_ZVAL_PTR(BP_VAR_R);
  
 -      if (IS_CONSTANT_TYPE(Z_TYPE_P(val))) {
 -              zval tmp;
 -              zval *tmp_ptr = &tmp;
 -
 -              ZVAL_COPY_VALUE(&tmp, val);
 -              INIT_PZVAL(&tmp);
 -              zval_update_constant(&tmp_ptr, 0 TSRMLS_CC);
 -              c.value = *tmp_ptr;
 +      ZVAL_COPY_VALUE(&c.value, val);
 +      if (Z_OPT_CONSTANT(c.value)) {
 +              if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) {
 +                      zval_opt_copy_ctor(&c.value);
 +              }
-               zval_update_constant(&c.value, NULL TSRMLS_CC);
++              zval_update_constant(&c.value, 0 TSRMLS_CC);
        } else {
 -              INIT_PZVAL_COPY(&c.value, val);
 -              zval_copy_ctor(&c.value);
 +              /* IS_CONST can't be IS_OBJECT, IS_RESOURCE or IS_REFERENCE */
 +              if (UNEXPECTED(Z_OPT_COPYABLE(c.value))) {
 +                      _zval_copy_ctor_func(&c.value ZEND_FILE_LINE_CC);
 +              }
        }
        c.flags = CONST_CS; /* non persistent, case sensetive */
 -      c.name = str_strndup(Z_STRVAL_P(name), Z_STRLEN_P(name));
 -      c.name_len = Z_STRLEN_P(name)+1;
 +      c.name = STR_DUP(Z_STR_P(name), 0);
        c.module_number = PHP_USER_CONSTANT;
  
        if (zend_register_constant(&c TSRMLS_CC) == FAILURE) {
@@@ -5505,4 -5650,24 +5497,24 @@@ ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY
        }
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
 -              GET_OP1_ZVAL_PTR(BP_VAR_R),
 -              GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+ ZEND_VM_HANDLER(166, ZEND_POW, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
+ {
+       USE_OPLINE
+       zend_free_op free_op1, free_op2;
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
++              GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
++              GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
+       FREE_OP1();
+       FREE_OP2();
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
+ ZEND_VM_HANDLER(167, ZEND_ASSIGN_POW, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV)
+ {
+       ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op,pow_function);
+ }
  ZEND_VM_EXPORT_HELPER(zend_do_fcall, zend_do_fcall_common_helper)
index 1ec6d973437969e5e9ab701195ad6efdfc228550,4690c3e3ae117e140745344a34eaa255d1ef64a7..f09990fb49f42dd7c3c04ae2c78eb37ec356b26f
@@@ -3598,48 -3673,54 +3597,48 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
 +                              }
 +                      }
                }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_CONST != IS_TMP_VAR) {
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
  
 -                              }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 +              }
 +      }
  
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_CONST == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 -                              }
 -                              break;
 -              }
 -      }
 -
 -
 -      if (IS_CONST != IS_CONST && varname == &tmp_varname) {
 +      if (IS_CONST != IS_CONST) {
                zval_dtor(&tmp_varname);
        }
 -      if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
 -              SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
 -      }
 -      PZVAL_LOCK(*retval);
 -      switch (type) {
 -              case BP_VAR_R:
 -              case BP_VAR_IS:
 -                      EX_T(opline->result.var).var.ptr = *retval;
 -                      break;
 -              case BP_VAR_UNSET: {
 -                      zend_free_op free_res;
  
 -                      PZVAL_UNLOCK(*retval, &free_res);
 -                      if (retval != &EG(uninitialized_zval_ptr)) {
 -                              SEPARATE_ZVAL_IF_NOT_REF(retval);
 -                      }
 -                      PZVAL_LOCK(*retval);
 -                      FREE_OP_VAR_PTR(free_res);
 +      ZEND_ASSERT(retval != NULL);
 +      if (type == BP_VAR_R || type == BP_VAR_IS) {
 +              ZVAL_COPY(EX_VAR(opline->result.var), retval);
 +      } else {
 +              if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
 +                      SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                }
 -              /* break missing intentionally */
 -              default:
 -                      EX_T(opline->result.var).var.ptr_ptr = retval;
 -                      break;
 +              ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@@ -3877,41 -3966,40 +3876,37 @@@ static int ZEND_FASTCALL  ZEND_FETCH_CO
                                zend_error_noreturn(E_ERROR, "Undefined constant '%s'", Z_STRVAL_P(opline->op2.zv));
                        }
                } else {
 -                      CACHE_PTR(opline->op2.literal->cache_slot, c);
 +                      CACHE_PTR(Z_CACHE_SLOT_P(opline->op2.zv), c);
                }
 -              retval = &EX_T(opline->result.var).tmp_var;
 -              ZVAL_COPY_VALUE(retval, &c->value);
 -              zval_copy_ctor(retval);
 +              retval = EX_VAR(opline->result.var);
 +              ZVAL_DUP(retval, &c->value);
-               CHECK_EXCEPTION();
-               ZEND_VM_NEXT_OPCODE();
        } else {
                /* class constant */
                zend_class_entry *ce;
 -              zval **value;
 +              zval *value;
  
                if (IS_CONST == IS_CONST) {
 -                      if (CACHED_PTR(opline->op2.literal->cache_slot)) {
 -                              value = CACHED_PTR(opline->op2.literal->cache_slot);
 -                              ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
 -                              zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
 +                      if (CACHED_PTR(Z_CACHE_SLOT_P(opline->op2.zv))) {
 +                              value = CACHED_PTR(Z_CACHE_SLOT_P(opline->op2.zv));
 +                              ZVAL_DUP(EX_VAR(opline->result.var), value);
-                               CHECK_EXCEPTION();
-                               ZEND_VM_NEXT_OPCODE();
+                               goto constant_fetch_end;
 -                      } else if (CACHED_PTR(opline->op1.literal->cache_slot)) {
 -                              ce = CACHED_PTR(opline->op1.literal->cache_slot);
 +                      } else if (CACHED_PTR(Z_CACHE_SLOT_P(opline->op1.zv))) {
 +                              ce = CACHED_PTR(Z_CACHE_SLOT_P(opline->op1.zv));
                        } else {
 -                              ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
 +                              ce = zend_fetch_class_by_name(Z_STR_P(opline->op1.zv), opline->op1.zv + 1, opline->extended_value TSRMLS_CC);
                                if (UNEXPECTED(EG(exception) != NULL)) {
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
                                }
 -                              CACHE_PTR(opline->op1.literal->cache_slot, ce);
 +                              CACHE_PTR(Z_CACHE_SLOT_P(opline->op1.zv), ce);
                        }
                } else {
 -                      ce = EX_T(opline->op1.var).class_entry;
 -                      if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) {
 -                              ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
 -                              zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
 +                      ce = Z_CE_P(EX_VAR(opline->op1.var));
 +                      if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(opline->op2.zv), ce)) != NULL) {
 +                              ZVAL_DUP(EX_VAR(opline->result.var), value);
-                               CHECK_EXCEPTION();
-                               ZEND_VM_NEXT_OPCODE();
+                               goto constant_fetch_end;
                        }
                }
  
                } else {
                        zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv));
                }
-               CHECK_EXCEPTION();
-               ZEND_VM_NEXT_OPCODE();
        }
 -      if (Z_TYPE(EX_T(opline->result.var).tmp_var) == IS_ARRAY) {
 -              zend_error_noreturn(E_ERROR, "Arrays are not allowed in constants at run-time");
 -      }
+ constant_fetch_end:
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
  }
  
  static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@@ -4218,20 -4303,21 +4213,20 @@@ static int ZEND_FASTCALL  ZEND_DECLARE_
        name  = opline->op1.zv;
        val   = opline->op2.zv;
  
 -      if (IS_CONSTANT_TYPE(Z_TYPE_P(val))) {
 -              zval tmp;
 -              zval *tmp_ptr = &tmp;
 -
 -              ZVAL_COPY_VALUE(&tmp, val);
 -              INIT_PZVAL(&tmp);
 -              zval_update_constant(&tmp_ptr, 0 TSRMLS_CC);
 -              c.value = *tmp_ptr;
 +      ZVAL_COPY_VALUE(&c.value, val);
 +      if (Z_OPT_CONSTANT(c.value)) {
 +              if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) {
 +                      zval_opt_copy_ctor(&c.value);
 +              }
-               zval_update_constant(&c.value, NULL TSRMLS_CC);
++              zval_update_constant(&c.value, 0 TSRMLS_CC);
        } else {
 -              INIT_PZVAL_COPY(&c.value, val);
 -              zval_copy_ctor(&c.value);
 +              /* IS_CONST can't be IS_OBJECT, IS_RESOURCE or IS_REFERENCE */
 +              if (UNEXPECTED(Z_OPT_COPYABLE(c.value))) {
 +                      _zval_copy_ctor_func(&c.value ZEND_FILE_LINE_CC);
 +              }
        }
        c.flags = CONST_CS; /* non persistent, case sensetive */
 -      c.name = str_strndup(Z_STRVAL_P(name), Z_STRLEN_P(name));
 -      c.name_len = Z_STRLEN_P(name)+1;
 +      c.name = STR_DUP(Z_STR_P(name), 0);
        c.module_number = PHP_USER_CONSTANT;
  
        if (zend_register_constant(&c TSRMLS_CC) == FAILURE) {
@@@ -4372,6 -4487,21 +4367,21 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
+               opline->op1.zv,
+               opline->op2.zv TSRMLS_CC);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
  static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -5035,6 -5189,21 +5045,21 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op2;
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
+               opline->op1.zv,
+               _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+       zval_dtor(free_op2.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
  static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -5374,33 -5557,24 +5399,33 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_CONST != IS_TMP_VAR) {
 -
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
  
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_CONST == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 -                              }
 -                              break;
                }
        }
  
@@@ -5995,6 -6217,21 +6020,21 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op2;
+       SAVE_OPLINE();
 -              _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
++      pow_function(EX_VAR(opline->result.var),
+               opline->op1.zv,
 -      zval_ptr_dtor_nogc(&free_op2.var);
++              _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
++      zval_ptr_dtor_nogc(free_op2.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
  static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_CONST != IS_TMP_VAR) {
 -
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
  
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_CONST == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 -                              }
 -                              break;
                }
        }
  
@@@ -7379,6 -7700,21 +7419,21 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       SAVE_OPLINE();
 -              _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
++      pow_function(EX_VAR(opline->result.var),
+               opline->op1.zv,
++              _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
  static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -8684,33 -9079,24 +8738,33 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_TMP_VAR != IS_TMP_VAR) {
 -                                      zval_dtor(free_op1.var);
 -                              }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 -                              zval_dtor(free_op1.var);
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
 +                      zval_dtor(free_op1.var);
                }
        }
  
@@@ -9319,6 -9763,21 +9373,21 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op1;
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
+               _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               opline->op2.zv TSRMLS_CC);
+       zval_dtor(free_op1.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
  static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -9982,6 -10467,21 +10051,21 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op1, free_op2;
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
+               _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+       zval_dtor(free_op1.var);
+       zval_dtor(free_op2.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
  static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -10321,33 -10835,24 +10405,33 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_TMP_VAR != IS_TMP_VAR) {
 -                                      zval_dtor(free_op1.var);
 -                              }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 -                              zval_dtor(free_op1.var);
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
 +                      zval_dtor(free_op1.var);
                }
        }
  
@@@ -10942,6 -11497,21 +11026,21 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op1, free_op2;
+       SAVE_OPLINE();
 -              _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
++      pow_function(EX_VAR(opline->result.var),
+               _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
 -      zval_ptr_dtor_nogc(&free_op2.var);
++              _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+       zval_dtor(free_op1.var);
++      zval_ptr_dtor_nogc(free_op2.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
  static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_TMP_VAR != IS_TMP_VAR) {
 -                                      zval_dtor(free_op1.var);
 -                              }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 -                              zval_dtor(free_op1.var);
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
 +                      zval_dtor(free_op1.var);
                }
        }
  
@@@ -12139,6 -12777,21 +12238,21 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op1;
+       SAVE_OPLINE();
 -              _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
++      pow_function(EX_VAR(opline->result.var),
+               _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
++              _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+       zval_dtor(free_op1.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
  static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -12723,8 -13378,7 +12837,7 @@@ static int ZEND_FASTCALL  ZEND_SEND_VAR
  {
        USE_OPLINE
        zend_free_op free_op1;
 -      zval *varptr;
 +      zval *varptr, *top;
-       int arg_num;
  
        SAVE_OPLINE();
        if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */
                }
                zend_vm_stack_push(varptr TSRMLS_CC);
        } else {
 -              zval *valptr;
 -
                if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
                        !(opline->extended_value & ZEND_ARG_SEND_SILENT) :
-                       !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) {
+                       !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) {
                        zend_error(E_STRICT, "Only variables should be passed by reference");
                }
 -              ALLOC_ZVAL(valptr);
 -              INIT_PZVAL_COPY(valptr, varptr);
 -              if (!0) {
 -                      zval_copy_ctor(valptr);
 -              }
 -              zval_ptr_dtor_nogc(&free_op1.var);
 -              zend_vm_stack_push(valptr TSRMLS_CC);
 +              top = zend_vm_stack_top_inc(TSRMLS_C);
 +              ZVAL_COPY_VALUE(top, varptr);
 +              zval_opt_copy_ctor(top);
 +              zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@@ -12807,12 -13462,9 +12919,11 @@@ static int ZEND_FASTCALL  ZEND_SEND_REF
  static int ZEND_FASTCALL  ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
 +      zval *varptr, *top;
 +      zend_free_op free_op1;
  
        if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) {
-               int arg_num = opline->op2.num + EX(call)->num_additional_args;
-               if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) {
+               if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) {
                        return ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                }
        }
@@@ -14430,33 -15009,24 +14541,33 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_VAR != IS_TMP_VAR) {
 -                                      zval_ptr_dtor_nogc(&free_op1.var);
 -                              }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 -                              zval_ptr_dtor_nogc(&free_op1.var);
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_VAR == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
 +                      zval_ptr_dtor_nogc(free_op1.var);
                }
        }
  
@@@ -15170,41 -15915,40 +15281,37 @@@ static int ZEND_FASTCALL  ZEND_FETCH_CO
                                zend_error_noreturn(E_ERROR, "Undefined constant '%s'", Z_STRVAL_P(opline->op2.zv));
                        }
                } else {
 -                      CACHE_PTR(opline->op2.literal->cache_slot, c);
 +                      CACHE_PTR(Z_CACHE_SLOT_P(opline->op2.zv), c);
                }
 -              retval = &EX_T(opline->result.var).tmp_var;
 -              ZVAL_COPY_VALUE(retval, &c->value);
 -              zval_copy_ctor(retval);
 +              retval = EX_VAR(opline->result.var);
 +              ZVAL_DUP(retval, &c->value);
-               CHECK_EXCEPTION();
-               ZEND_VM_NEXT_OPCODE();
        } else {
                /* class constant */
                zend_class_entry *ce;
 -              zval **value;
 +              zval *value;
  
                if (IS_VAR == IS_CONST) {
 -                      if (CACHED_PTR(opline->op2.literal->cache_slot)) {
 -                              value = CACHED_PTR(opline->op2.literal->cache_slot);
 -                              ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
 -                              zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
 +                      if (CACHED_PTR(Z_CACHE_SLOT_P(opline->op2.zv))) {
 +                              value = CACHED_PTR(Z_CACHE_SLOT_P(opline->op2.zv));
 +                              ZVAL_DUP(EX_VAR(opline->result.var), value);
-                               CHECK_EXCEPTION();
-                               ZEND_VM_NEXT_OPCODE();
+                               goto constant_fetch_end;
 -                      } else if (CACHED_PTR(opline->op1.literal->cache_slot)) {
 -                              ce = CACHED_PTR(opline->op1.literal->cache_slot);
 +                      } else if (CACHED_PTR(Z_CACHE_SLOT_P(opline->op1.zv))) {
 +                              ce = CACHED_PTR(Z_CACHE_SLOT_P(opline->op1.zv));
                        } else {
 -                              ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
 +                              ce = zend_fetch_class_by_name(Z_STR_P(opline->op1.zv), opline->op1.zv + 1, opline->extended_value TSRMLS_CC);
                                if (UNEXPECTED(EG(exception) != NULL)) {
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
                                }
 -                              CACHE_PTR(opline->op1.literal->cache_slot, ce);
 +                              CACHE_PTR(Z_CACHE_SLOT_P(opline->op1.zv), ce);
                        }
                } else {
 -                      ce = EX_T(opline->op1.var).class_entry;
 -                      if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) {
 -                              ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
 -                              zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
 +                      ce = Z_CE_P(EX_VAR(opline->op1.var));
 +                      if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(opline->op2.zv), ce)) != NULL) {
 +                              ZVAL_DUP(EX_VAR(opline->result.var), value);
-                               CHECK_EXCEPTION();
-                               ZEND_VM_NEXT_OPCODE();
+                               goto constant_fetch_end;
                        }
                }
  
                } else {
                        zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv));
                }
-               CHECK_EXCEPTION();
-               ZEND_VM_NEXT_OPCODE();
        }
 -      if (Z_TYPE(EX_T(opline->result.var).tmp_var) == IS_ARRAY) {
 -              zend_error_noreturn(E_ERROR, "Arrays are not allowed in constants at run-time");
 -      }
+ constant_fetch_end:
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
  }
  
  static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@@ -15885,6 -16684,26 +15992,26 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
 -              _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op1;
+       SAVE_OPLINE();
 -      zval_ptr_dtor_nogc(&free_op1.var);
++      pow_function(EX_VAR(opline->result.var),
++              _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               opline->op2.zv TSRMLS_CC);
++      zval_ptr_dtor_nogc(free_op1.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
+ static int ZEND_FASTCALL  ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       return zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
  static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -17825,6 -18774,26 +17952,26 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
 -              _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op1, free_op2;
+       SAVE_OPLINE();
 -      zval_ptr_dtor_nogc(&free_op1.var);
++      pow_function(EX_VAR(opline->result.var),
++              _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
++      zval_ptr_dtor_nogc(free_op1.var);
+       zval_dtor(free_op2.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
+ static int ZEND_FASTCALL  ZEND_ASSIGN_POW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       return zend_binary_assign_op_helper_SPEC_VAR_TMP(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
  static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -18696,33 -19606,24 +18843,33 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_VAR != IS_TMP_VAR) {
 -                                      zval_ptr_dtor_nogc(&free_op1.var);
 -                              }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 -                              zval_ptr_dtor_nogc(&free_op1.var);
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_VAR == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
 +                      zval_ptr_dtor_nogc(free_op1.var);
                }
        }
  
@@@ -20126,6 -21245,26 +20273,26 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
 -              _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
 -              _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 -      zval_ptr_dtor_nogc(&free_op1.var);
 -      zval_ptr_dtor_nogc(&free_op2.var);
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op1, free_op2;
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
++              _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
++              _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
++      zval_ptr_dtor_nogc(free_op1.var);
++      zval_ptr_dtor_nogc(free_op2.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
+ static int ZEND_FASTCALL  ZEND_ASSIGN_POW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       return zend_binary_assign_op_helper_SPEC_VAR_VAR(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
  static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -20540,33 -21594,24 +20707,33 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_VAR != IS_TMP_VAR) {
 -                                      zval_ptr_dtor_nogc(&free_op1.var);
 -                              }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 -                              zval_ptr_dtor_nogc(&free_op1.var);
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_VAR == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
 +                      zval_ptr_dtor_nogc(free_op1.var);
                }
        }
  
@@@ -23282,6 -24536,26 +23454,26 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
 -              _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
 -              _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 -      zval_ptr_dtor_nogc(&free_op1.var);
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op1;
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
++              _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
++              _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
++      zval_ptr_dtor_nogc(free_op1.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
+ static int ZEND_FASTCALL  ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       return zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
  static int ZEND_FASTCALL  ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -24218,41 -25527,40 +24410,37 @@@ static int ZEND_FASTCALL  ZEND_FETCH_CO
                                zend_error_noreturn(E_ERROR, "Undefined constant '%s'", Z_STRVAL_P(opline->op2.zv));
                        }
                } else {
 -                      CACHE_PTR(opline->op2.literal->cache_slot, c);
 +                      CACHE_PTR(Z_CACHE_SLOT_P(opline->op2.zv), c);
                }
 -              retval = &EX_T(opline->result.var).tmp_var;
 -              ZVAL_COPY_VALUE(retval, &c->value);
 -              zval_copy_ctor(retval);
 +              retval = EX_VAR(opline->result.var);
 +              ZVAL_DUP(retval, &c->value);
-               CHECK_EXCEPTION();
-               ZEND_VM_NEXT_OPCODE();
        } else {
                /* class constant */
                zend_class_entry *ce;
 -              zval **value;
 +              zval *value;
  
                if (IS_UNUSED == IS_CONST) {
 -                      if (CACHED_PTR(opline->op2.literal->cache_slot)) {
 -                              value = CACHED_PTR(opline->op2.literal->cache_slot);
 -                              ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
 -                              zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
 +                      if (CACHED_PTR(Z_CACHE_SLOT_P(opline->op2.zv))) {
 +                              value = CACHED_PTR(Z_CACHE_SLOT_P(opline->op2.zv));
 +                              ZVAL_DUP(EX_VAR(opline->result.var), value);
-                               CHECK_EXCEPTION();
-                               ZEND_VM_NEXT_OPCODE();
+                               goto constant_fetch_end;
 -                      } else if (CACHED_PTR(opline->op1.literal->cache_slot)) {
 -                              ce = CACHED_PTR(opline->op1.literal->cache_slot);
 +                      } else if (CACHED_PTR(Z_CACHE_SLOT_P(opline->op1.zv))) {
 +                              ce = CACHED_PTR(Z_CACHE_SLOT_P(opline->op1.zv));
                        } else {
 -                              ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
 +                              ce = zend_fetch_class_by_name(Z_STR_P(opline->op1.zv), opline->op1.zv + 1, opline->extended_value TSRMLS_CC);
                                if (UNEXPECTED(EG(exception) != NULL)) {
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
                                }
 -                              CACHE_PTR(opline->op1.literal->cache_slot, ce);
 +                              CACHE_PTR(Z_CACHE_SLOT_P(opline->op1.zv), ce);
                        }
                } else {
 -                      ce = EX_T(opline->op1.var).class_entry;
 -                      if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) {
 -                              ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
 -                              zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
 +                      ce = Z_CE_P(EX_VAR(opline->op1.var));
 +                      if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(opline->op2.zv), ce)) != NULL) {
 +                              ZVAL_DUP(EX_VAR(opline->result.var), value);
-                               CHECK_EXCEPTION();
-                               ZEND_VM_NEXT_OPCODE();
+                               goto constant_fetch_end;
                        }
                }
  
                } else {
                        zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv));
                }
-               CHECK_EXCEPTION();
-               ZEND_VM_NEXT_OPCODE();
        }
 -      if (Z_TYPE(EX_T(opline->result.var).tmp_var) == IS_ARRAY) {
 -              zend_error_noreturn(E_ERROR, "Arrays are not allowed in constants at run-time");
 -      }
+ constant_fetch_end:
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
  }
  
  static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@@ -29542,8 -30987,7 +29755,7 @@@ static int ZEND_FASTCALL  ZEND_SEND_VAR
  {
        USE_OPLINE
  
 -      zval *varptr;
 +      zval *varptr, *top;
-       int arg_num;
  
        SAVE_OPLINE();
        if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */
                }
                zend_vm_stack_push(varptr TSRMLS_CC);
        } else {
 -              zval *valptr;
 -
                if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
                        !(opline->extended_value & ZEND_ARG_SEND_SILENT) :
-                       !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) {
+                       !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) {
                        zend_error(E_STRICT, "Only variables should be passed by reference");
                }
 -              ALLOC_ZVAL(valptr);
 -              INIT_PZVAL_COPY(valptr, varptr);
 -              if (!0) {
 -                      zval_copy_ctor(valptr);
 -              }
 +              top = zend_vm_stack_top_inc(TSRMLS_C);
 +              ZVAL_COPY_VALUE(top, varptr);
 +              zval_opt_copy_ctor(top);
  
 -              zend_vm_stack_push(valptr TSRMLS_CC);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@@ -29625,12 -31070,9 +29836,11 @@@ static int ZEND_FASTCALL  ZEND_SEND_REF
  static int ZEND_FASTCALL  ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
 +      zval *varptr, *top;
 +
  
        if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) {
-               int arg_num = opline->op2.num + EX(call)->num_additional_args;
-               if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) {
+               if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) {
                        return ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                }
        }
@@@ -31094,33 -32471,24 +31304,33 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_CV != IS_TMP_VAR) {
 -
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
  
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_CV == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 -                              }
 -                              break;
                }
        }
  
@@@ -32337,6 -33913,26 +32547,26 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
 -              _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
++              _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               opline->op2.zv TSRMLS_CC);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
+ static int ZEND_FASTCALL  ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       return zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
  static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -34160,6 -35864,26 +34390,26 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
 -              _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op2;
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
++              _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+       zval_dtor(free_op2.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
+ static int ZEND_FASTCALL  ZEND_ASSIGN_POW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       return zend_binary_assign_op_helper_SPEC_CV_TMP(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
  static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -35030,33 -36695,24 +35280,33 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_CV != IS_TMP_VAR) {
 -
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
  
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_CV == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 -                              }
 -                              break;
                }
        }
  
@@@ -36343,6 -38195,26 +36593,26 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
 -              _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
 -              _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       zend_free_op free_op2;
+       SAVE_OPLINE();
 -      zval_ptr_dtor_nogc(&free_op2.var);
++      pow_function(EX_VAR(opline->result.var),
++              _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
++              _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
++      zval_ptr_dtor_nogc(free_op2.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
+ static int ZEND_FASTCALL  ZEND_ASSIGN_POW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       return zend_binary_assign_op_helper_SPEC_CV_VAR(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
  static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
@@@ -36756,33 -38543,24 +37026,33 @@@ static int ZEND_FASTCALL zend_fetch_var
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
                        }
 -              }
 -              switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
 -                      case ZEND_FETCH_GLOBAL:
 -                              if (IS_CV != IS_TMP_VAR) {
 -
 +              /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
 +              } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
 +                      retval = Z_INDIRECT_P(retval);
 +                      if (Z_TYPE_P(retval) == IS_UNDEF) {
 +                              switch (type) {
 +                                      case BP_VAR_R:
 +                                      case BP_VAR_UNSET:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_IS:
 +                                              retval = EX_VAR(opline->result.var);
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      case BP_VAR_RW:
 +                                              zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
 +                                              /* break missing intentionally */
 +                                      case BP_VAR_W:
 +                                              ZVAL_NULL(retval);
 +                                              break;
 +                                      EMPTY_SWITCH_DEFAULT_CASE()
                                }
 -                              break;
 -                      case ZEND_FETCH_LOCAL:
 +                      }
 +              }
 +              if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
-                       zval_update_constant(retval, (void*) 1 TSRMLS_CC);
++                      zval_update_constant(retval, 1 TSRMLS_CC);
 +              } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
  
 -                              break;
 -                      case ZEND_FETCH_STATIC:
 -                              zval_update_constant(retval, 1 TSRMLS_CC);
 -                              break;
 -                      case ZEND_FETCH_GLOBAL_LOCK:
 -                              if (IS_CV == IS_VAR && !free_op1.var) {
 -                                      PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
 -                              }
 -                              break;
                }
        }
  
@@@ -39247,6 -41197,26 +39522,26 @@@ static int ZEND_FASTCALL  ZEND_YIELD_SP
        ZEND_VM_RETURN();
  }
  
 -      pow_function(&EX_T(opline->result.var).tmp_var,
 -              _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
 -              _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+ static int ZEND_FASTCALL  ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       SAVE_OPLINE();
++      pow_function(EX_VAR(opline->result.var),
++              _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
++              _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+ }
+ static int ZEND_FASTCALL  ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       return zend_binary_assign_op_helper_SPEC_CV_CV(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
  static int ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
Simple merge
diff --cc ext/bz2/bz2.c
Simple merge
Simple merge
index 35c018e324f335ed48bbb35ebf67f90c2f1590db,69f990ca51cc695210a56fd120c7b2c46db3c136..dbcd7d8695f4975d4250d794f995fcd569b80b84
@@@ -2699,12 -2753,40 +2704,40 @@@ PHP_METHOD(DateTimeImmutable, __constru
  }
  /* }}} */
  
 -      old_obj = (php_date_obj *) zend_object_store_get_object(datetime_object TSRMLS_CC);
 -      new_obj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC);
+ /* {{{ proto DateTimeImmutable::createFromMutable(DateTimeZone object)
+    Creates new DateTimeImmutable object from an existing mutable DateTime object.
+ */
+ PHP_METHOD(DateTimeImmutable, createFromMutable)
+ {
+       zval *datetime_object = NULL;
+       php_date_obj *new_obj = NULL;
+       php_date_obj *old_obj = NULL;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O!", &datetime_object, date_ce_date) == FAILURE) {
+               return;
+       }
+       php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC);
 -static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC)
++      old_obj = Z_PHPDATE_P(datetime_object);
++      new_obj = Z_PHPDATE_P(return_value);
+       new_obj->time = timelib_time_ctor();
+       *new_obj->time = *old_obj->time;
+       if (old_obj->time->tz_abbr) {
+               new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr);
+       }
+       if (old_obj->time->tz_info) {
+               new_obj->time->tz_info = old_obj->time->tz_info;
+       }
+ }
+ /* }}} */
 +static int php_date_initialize_from_hash(zval *return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC) /* {{{ */
  {
 -      zval            **z_date = NULL;
 -      zval            **z_timezone = NULL;
 -      zval            **z_timezone_type = NULL;
 -      zval             *tmp_obj = NULL;
 +      zval             *z_date;
 +      zval             *z_timezone;
 +      zval             *z_timezone_type;
 +      zval              tmp_obj;
        timelib_tzinfo   *tzi;
        php_timezone_obj *tzobj;
  
  
                                        case TIMELIB_ZONETYPE_ID: {
                                                int ret;
 -                                              convert_to_string(*z_timezone);
 +                                              convert_to_string(z_timezone);
  
 -                                              tzi = php_date_parse_tzfile(Z_STRVAL_PP(z_timezone), DATE_TIMEZONEDB TSRMLS_CC);
 +                                              tzi = php_date_parse_tzfile(Z_STRVAL_P(z_timezone), DATE_TIMEZONEDB TSRMLS_CC);
  
 -                                              ALLOC_INIT_ZVAL(tmp_obj);
 -                                              tzobj = zend_object_store_get_object(php_date_instantiate(date_ce_timezone, tmp_obj TSRMLS_CC) TSRMLS_CC);
+                                               if (tzi == NULL) {
+                                                       return 0;
+                                               }
 +                                              tzobj = Z_PHPTIMEZONE_P(php_date_instantiate(date_ce_timezone, &tmp_obj TSRMLS_CC));
                                                tzobj->type = TIMELIB_ZONETYPE_ID;
                                                tzobj->tzi.tz = tzi;
                                                tzobj->initialized = 1;
@@@ -3204,22 -3311,8 +3261,8 @@@ PHP_FUNCTION(date_timezone_get
        DATE_CHECK_INITIALIZED(dateobj->time, DateTime);
        if (dateobj->time->is_localtime/* && dateobj->time->tz_info*/) {
                php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC);
 -              tzobj = (php_timezone_obj *) zend_object_store_get_object(return_value TSRMLS_CC);
 +              tzobj = Z_PHPTIMEZONE_P(return_value);
-               tzobj->initialized = 1;
-               tzobj->type = dateobj->time->zone_type;
-               switch (dateobj->time->zone_type) {
-                       case TIMELIB_ZONETYPE_ID:
-                               tzobj->tzi.tz = dateobj->time->tz_info;
-                               break;
-                       case TIMELIB_ZONETYPE_OFFSET:
-                               tzobj->tzi.utc_offset = dateobj->time->z;
-                               break;
-                       case TIMELIB_ZONETYPE_ABBR:
-                               tzobj->tzi.z.utc_offset = dateobj->time->z;
-                               tzobj->tzi.z.dst = dateobj->time->dst;
-                               tzobj->tzi.z.abbr = strdup(dateobj->time->tz_abbr);
-                               break;
-               }
+               set_timezone_from_timelib_time(tzobj, dateobj->time);
        } else {
                RETURN_FALSE;
        }
@@@ -3231,16 -3324,23 +3274,23 @@@ static void php_date_timezone_set(zval 
        php_date_obj     *dateobj;
        php_timezone_obj *tzobj;
  
 -      dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC);
 +      dateobj = Z_PHPDATE_P(object);
        DATE_CHECK_INITIALIZED(dateobj->time, DateTime);
 -      tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC);
 +      tzobj = Z_PHPTIMEZONE_P(timezone_object);
-       if (tzobj->type != TIMELIB_ZONETYPE_ID) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can only do this for zones with ID for now");
-               return;
+       switch (tzobj->type) {
+               case TIMELIB_ZONETYPE_OFFSET:
+                       timelib_set_timezone_from_offset(dateobj->time, tzobj->tzi.utc_offset);
+                       break;
+               case TIMELIB_ZONETYPE_ABBR:
+                       timelib_set_timezone_from_abbr(dateobj->time, tzobj->tzi.z);
+                       break;
+               case TIMELIB_ZONETYPE_ID:
+                       timelib_set_timezone(dateobj->time, tzobj->tzi.tz);
+                       break;
        }
-       timelib_set_timezone(dateobj->time, tzobj->tzi.tz);
        timelib_unixtime2local(dateobj->time, dateobj->time->sse);
 -}
 +} /* }}} */
  
  /* {{{ proto DateTime date_timezone_set(DateTime object, DateTimeZone object)
     Sets the timezone for the DateTime object.
@@@ -3563,25 -3663,23 +3613,23 @@@ PHP_FUNCTION(date_diff
  }
  /* }}} */
  
- static int timezone_initialize(timelib_tzinfo **tzi, /*const*/ char *tz TSRMLS_DC) /* {{{ */
 -static int timezone_initialize(php_timezone_obj *tzobj, /*const*/ char *tz TSRMLS_DC)
++static int timezone_initialize(php_timezone_obj *tzobj, /*const*/ char *tz TSRMLS_DC) /* {{{ */
  {
-       char *tzid;
-       
-       *tzi = NULL;
-       
-       if ((tzid = timelib_timezone_id_from_abbr(tz, -1, 0))) {
-               *tzi = php_date_parse_tzfile(tzid, DATE_TIMEZONEDB TSRMLS_CC);
+       timelib_time *dummy_t = ecalloc(1, sizeof(timelib_time));
+       int           dst, not_found;
+       char         *orig_tz = tz;
+       dummy_t->z = timelib_parse_zone(&tz, &dst, dummy_t, &not_found, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper);
+       if (not_found) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad timezone (%s)", orig_tz);
+               efree(dummy_t);
+               return FAILURE;
        } else {
-               *tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB TSRMLS_CC);
-       }
-       
-       if (*tzi) {
+               set_timezone_from_timelib_time(tzobj, dummy_t);
+               efree(dummy_t);
                return SUCCESS;
-       } else {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad timezone (%s)", tz);
-               return FAILURE;
        }
 -}
 +} /* }}} */
  
  /* {{{ proto DateTimeZone timezone_open(string timezone)
     Returns new DateTimeZone object
@@@ -3596,13 -3693,10 +3643,10 @@@ PHP_FUNCTION(timezone_open
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len) == FAILURE) {
                RETURN_FALSE;
        }
-       if (SUCCESS != timezone_initialize(&tzi, tz TSRMLS_CC)) {
 -      tzobj = zend_object_store_get_object(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC);
++      tzobj = Z_PHPTIMEZONE_P(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC));
+       if (SUCCESS != timezone_initialize(tzobj, tz TSRMLS_CC)) {
                RETURN_FALSE;
        }
-       tzobj = Z_PHPTIMEZONE_P(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC));
-       tzobj->type = TIMELIB_ZONETYPE_ID;
-       tzobj->tzi.tz = tzi;
-       tzobj->initialized = 1;
  }
  /* }}} */
  
@@@ -3619,58 -3712,25 +3662,25 @@@ PHP_METHOD(DateTimeZone, __construct
        
        zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
        if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len)) {
-               if (SUCCESS == timezone_initialize(&tzi, tz TSRMLS_CC)) {
-                       tzobj = Z_PHPTIMEZONE_P(getThis());
-                       tzobj->type = TIMELIB_ZONETYPE_ID;
-                       tzobj->tzi.tz = tzi;
-                       tzobj->initialized = 1;
- //???         } else {
 -              tzobj = zend_object_store_get_object(getThis() TSRMLS_CC);
++              tzobj = Z_PHPTIMEZONE_P(getThis());
+               if (FAILURE == timezone_initialize(tzobj, tz TSRMLS_CC)) {
 -                      ZVAL_NULL(getThis());
 +//???                 ZVAL_NULL(getThis());
                }
        }
        zend_restore_error_handling(&error_handling TSRMLS_CC);
  }
  /* }}} */
  
 -static int php_date_timezone_initialize_from_hash(zval **return_value, php_timezone_obj **tzobj, HashTable *myht TSRMLS_DC)
 +static int php_date_timezone_initialize_from_hash(zval **return_value, php_timezone_obj **tzobj, HashTable *myht TSRMLS_DC) /* {{{ */
  {
 -      zval            **z_timezone = NULL;
 -      zval            **z_timezone_type = NULL;
 +      zval            *z_timezone;
 +      zval            *z_timezone_type;
-       timelib_tzinfo  *tzi;
  
-       z_timezone_type = zend_hash_str_find(myht, "timezone_type", sizeof("timezone_type")-1);
-       if (z_timezone_type) {
-               z_timezone = zend_hash_str_find(myht, "timezone", sizeof("timezone")-1);
-               if (z_timezone) {
 -      if (zend_hash_find(myht, "timezone_type", 14, (void**) &z_timezone_type) == SUCCESS) {
 -              if (zend_hash_find(myht, "timezone", 9, (void**) &z_timezone) == SUCCESS) {
 -                      convert_to_long(*z_timezone_type);
 -                      if (SUCCESS == timezone_initialize(*tzobj, Z_STRVAL_PP(z_timezone) TSRMLS_CC)) {
++      if ((z_timezone_type = zend_hash_str_find(myht, "timezone_type", sizeof("timezone_type")-1)) != NULL) {
++              if ((z_timezone = zend_hash_str_find(myht, "timezone", sizeof("timezone")-1)) != NULL) {
 +                      convert_to_long(z_timezone_type);
-                       switch (Z_LVAL_P(z_timezone_type)) {
-                               case TIMELIB_ZONETYPE_OFFSET: {
-                                       char *offset, *offset_start;
-                                       offset = emalloc(sizeof(char) * (Z_STRLEN_P(z_timezone) + 1));
-                                       memmove(offset, Z_STRVAL_P(z_timezone), Z_STRLEN_P(z_timezone)+1);
-                                       offset_start = offset;
-                                       ++offset;
-                                       if(*offset_start == '+'){
-                                               (*tzobj)->tzi.utc_offset = -1 * timelib_parse_tz_cor(&offset);
-                                       } else {
-                                               (*tzobj)->tzi.utc_offset = timelib_parse_tz_cor(&offset);
-                                       }
-                                       efree(offset_start);
-                                       (*tzobj)->type = TIMELIB_ZONETYPE_OFFSET;
-                                       (*tzobj)->initialized = 1;
-                                       return SUCCESS;
-                                       break;
-                               }
-                               case TIMELIB_ZONETYPE_ABBR:
-                               case TIMELIB_ZONETYPE_ID:
-                                       if (SUCCESS == timezone_initialize(&tzi, Z_STRVAL_P(z_timezone) TSRMLS_CC)) {
-                                               (*tzobj)->type = TIMELIB_ZONETYPE_ID;
-                                               (*tzobj)->tzi.tz = tzi;
-                                               (*tzobj)->initialized = 1;
-                                               return SUCCESS;
-                                       }
++                      if (SUCCESS == timezone_initialize(*tzobj, Z_STRVAL_P(z_timezone) TSRMLS_CC)) {
+                               return SUCCESS;
                        }
                }
        }
@@@ -4939,11 -5008,13 +4949,10 @@@ static zval *date_period_read_property(
  
        Z_OBJPROP_P(object); /* build properties hash table */
  
 -      zv = std_object_handlers.read_property(object, member, type, key TSRMLS_CC);
 +      zv = std_object_handlers.read_property(object, member, type, cache_slot, rv TSRMLS_CC);
        if (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJ_HANDLER_P(zv, clone_obj)) {
                /* defensive copy */
- //???         MAKE_STD_ZVAL(zv);
 -              zend_object_value zov = Z_OBJ_HANDLER_P(zv, clone_obj)(zv TSRMLS_CC);
 -              MAKE_STD_ZVAL(zv);
 -              Z_TYPE_P(zv) = IS_OBJECT;
 -              Z_OBJVAL_P(zv) = zov;
 +              ZVAL_OBJ(zv, Z_OBJ_HANDLER_P(zv, clone_obj)(zv TSRMLS_CC));
        }
  
        return zv;
index 7c3b01797595b8c939bebbd3d01a8e817c46ee0f,2b3ae4dcc1e3e743e3170f28f31ead2ce693562e..ff26c0fba36a205d70d624c8332bf5263107d203
@@@ -142,26 -137,16 +143,21 @@@ struct _php_timezone_obj 
        int             initialized;
        int             type;
        union {
-               timelib_tzinfo *tz; /* TIMELIB_ZONETYPE_ID; */
-               timelib_sll     utc_offset; /* TIMELIB_ZONETYPE_OFFSET */
-               struct                      /* TIMELIB_ZONETYPE_ABBR */
-               {
-                       timelib_sll  utc_offset;
-                       char        *abbr;
-                       int          dst;
-               } z;
+               timelib_tzinfo   *tz;         /* TIMELIB_ZONETYPE_ID */
+               timelib_sll       utc_offset; /* TIMELIB_ZONETYPE_OFFSET */
+               timelib_abbr_info z;          /* TIMELIB_ZONETYPE_ABBR */
        } tzi;
        HashTable *props;
 +      zend_object std;
  };
  
 +static inline php_timezone_obj *php_timezone_obj_from_obj(zend_object *obj) {
 +      return (php_timezone_obj*)((char*)(obj) - XtOffsetOf(php_timezone_obj, std));
 +}
 +
 +#define Z_PHPTIMEZONE_P(zv)  php_timezone_obj_from_obj(Z_OBJ_P((zv)))
 +
  struct _php_interval_obj {
 -      zend_object       std;
        timelib_rel_time *diff;
        HashTable        *props;
        int               initialized;
diff --cc ext/dba/dba.c
Simple merge
Simple merge
index 6f2c1e8e0c1e1ed3efef76c9c4c631b885645889,9042457e8673885c5fc001a067dc3331b88d3205..1193ed44d53a4e7013fc4238aaecaaad26e17946
@@@ -169,33 -184,52 +169,47 @@@ readonly=ye
  URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-internalSubset
  Since: DOM Level 2
  */
 -int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC)
 +int dom_documenttype_internal_subset_read(dom_object *obj, zval *retval TSRMLS_DC)
  {
 -
 -      xmlDtdPtr dtdptr;
 +      xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
-       xmlDtd *intsubset;
-       xmlOutputBuffer *buff = NULL;
+       xmlDtdPtr intsubset;
  
 -      dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
 -
        if (dtdptr == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
  
-       if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) {
-               buff = xmlAllocOutputBuffer(NULL);
-               if (buff != NULL) {
-                       xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL);
-                       xmlOutputBufferFlush(buff);
 -      ALLOC_ZVAL(*retval);
 -
 -      if (dtdptr->doc != NULL && ((intsubset = xmlGetIntSubset(dtdptr->doc)) != NULL) && intsubset->children != NULL) {
++      if (dtdptr->doc != NULL && ((intsubset = xmlGetIntSubset(dtdptr->doc)) != NULL)) {
+               smart_str ret_buf = {0};
+               xmlNodePtr cur = intsubset->children;
+               while (cur != NULL) {
+                       xmlOutputBuffer *buff = xmlAllocOutputBuffer(NULL);
+                       if (buff != NULL) {
+                               xmlNodeDumpOutput (buff, NULL, cur, 0, 0, NULL);
+                               xmlOutputBufferFlush(buff);
  #ifdef LIBXML2_NEW_BUFFER
-                       ZVAL_STRINGL(retval, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff));
+                               smart_str_appendl(&ret_buf, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff));
  #else
-                       ZVAL_STRINGL(retval, buff->buffer->content, buff->buffer->use);
+                               smart_str_appendl(&ret_buf, buff->buffer->content, buff->buffer->use);
  #endif
-                       (void)xmlOutputBufferClose(buff);
+                               (void)xmlOutputBufferClose(buff);
+                       }
+                       cur = cur->next;
+               }
 -              if (ret_buf.len) {
 -                      ZVAL_STRINGL(*retval, ret_buf.c, ret_buf.len, 1);
 -                      smart_str_free(&ret_buf);
++              if (ret_buf.s) {
++                      smart_str_0(&ret_buf);
++                      ZVAL_STR(retval, ret_buf.s);
                        return SUCCESS;
                }
        }
  
-       ZVAL_EMPTY_STRING(retval);
 -      ZVAL_NULL(*retval);
++      ZVAL_NULL(retval);
  
        return SUCCESS;
  
diff --cc ext/gd/gd.c
Simple merge
diff --cc ext/hash/hash.c
index 15568b8d9fd1a58852b953ddcd8fd9c96a1323e4,f14437d96fa7008a5d410a277c7df55b7f0fb13c..63167b8d516ba626bba18f60a265e40fa4bfa498
@@@ -599,11 -609,10 +599,11 @@@ Generate a PBKDF2 hash of the given pas
  Returns lowercase hexits by default */
  PHP_FUNCTION(hash_pbkdf2)
  {
 -      char *returnval, *algo, *salt, *pass;
 -      unsigned char *computed_salt, *digest, *temp, *result, *K1, *K2;
 -      long loops, i, j, iterations, length = 0, digest_length;
 -      int algo_len, pass_len, salt_len;
 +      zend_string *returnval;
 +      char *algo, *salt, *pass = NULL;
 +      unsigned char *computed_salt, *digest, *temp, *result, *K1, *K2 = NULL;
-       long loops, i, j, algo_len, pass_len, iterations, length, digest_length = 0;
++      long loops, i, j, algo_len, pass_len, iterations, length = 0, digest_length = 0;
 +      int argc, salt_len = 0;
        zend_bool raw_output = 0;
        const php_hash_ops *ops;
        void *context;
  }
  /* }}} */
  
+ /* {{{ proto bool hash_equals(string known_string, string user_string)
+    Compares two strings using the same time whether they're equal or not.
+    A difference in length will leak */
+ PHP_FUNCTION(hash_equals)
+ {
+       zval *known_zval, *user_zval;
+       char *known_str, *user_str;
+       int result = 0, j;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &known_zval, &user_zval) == FAILURE) {
+               return;
+       }
+       /* We only allow comparing string to prevent unexpected results. */
+       if (Z_TYPE_P(known_zval) != IS_STRING) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected known_string to be a string, %s given", zend_zval_type_name(known_zval));
+               RETURN_FALSE;
+       }
+       if (Z_TYPE_P(user_zval) != IS_STRING) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected user_string to be a string, %s given", zend_zval_type_name(user_zval));
+               RETURN_FALSE;
+       }
+       if (Z_STRLEN_P(known_zval) != Z_STRLEN_P(user_zval)) {
+               RETURN_FALSE;
+       }
+       known_str = Z_STRVAL_P(known_zval);
+       user_str = Z_STRVAL_P(user_zval);
+       /* This is security sensitive code. Do not optimize this for speed. */
+       for (j = 0; j < Z_STRLEN_P(known_zval); j++) {
+               result |= known_str[j] ^ user_str[j];
+       }
+       RETURN_BOOL(0 == result);
+ }
+ /* }}} */
  /* Module Housekeeping */
  
 -static void php_hash_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
 +static void php_hash_dtor(zend_resource *rsrc TSRMLS_DC) /* {{{ */
  {
        php_hash_data *hash = (php_hash_data*)rsrc->ptr;
  
index ec4753e40964bc539db56c97938b79c2ff495391,2df759f99b48aa8af06ea64109563a6f47952b54..6eeaab62fc644dd0bd25733389e43bb11897678e
@@@ -2451,15 -2516,15 +2516,15 @@@ PHP_FUNCTION(iconv_get_encoding
  
        if (!strcasecmp("all", type)) {
                array_init(return_value);
-               add_assoc_string(return_value, "input_encoding",    ICONVG(input_encoding));
-               add_assoc_string(return_value, "output_encoding",   ICONVG(output_encoding));
-               add_assoc_string(return_value, "internal_encoding", ICONVG(internal_encoding));
 -              add_assoc_string(return_value, "input_encoding",    get_input_encoding(TSRMLS_C), 1);
 -              add_assoc_string(return_value, "output_encoding",   get_output_encoding(TSRMLS_C), 1);
 -              add_assoc_string(return_value, "internal_encoding", get_internal_encoding(TSRMLS_C), 1);
++              add_assoc_string(return_value, "input_encoding",    get_input_encoding(TSRMLS_C));
++              add_assoc_string(return_value, "output_encoding",   get_output_encoding(TSRMLS_C));
++              add_assoc_string(return_value, "internal_encoding", get_internal_encoding(TSRMLS_C));
        } else if (!strcasecmp("input_encoding", type)) {
-               RETVAL_STRING(ICONVG(input_encoding), 1);
+               RETVAL_STRING(get_input_encoding(TSRMLS_C), 1);
        } else if (!strcasecmp("output_encoding", type)) {
-               RETVAL_STRING(ICONVG(output_encoding), 1);
+               RETVAL_STRING(get_output_encoding(TSRMLS_C), 1);
        } else if (!strcasecmp("internal_encoding", type)) {
-               RETVAL_STRING(ICONVG(internal_encoding), 1);
+               RETVAL_STRING(get_internal_encoding(TSRMLS_C), 1);
        } else {
                RETURN_FALSE;
        }
Simple merge
Simple merge
Simple merge
diff --cc ext/ldap/ldap.c
Simple merge
index 8b6af6a52b6ff6f8f7daa3c250ab3fc1f9d18d37,3114b251999fb62c90966e5740c2409435821ddb..c7efa13c2764d89eba0adb7a5cf91a8991700b57
@@@ -86,10 -86,9 +86,10 @@@ ZEND_GET_MODULE(libxml
  /* {{{ function prototypes */
  static PHP_MINIT_FUNCTION(libxml);
  static PHP_RINIT_FUNCTION(libxml);
 +static PHP_RSHUTDOWN_FUNCTION(libxml);
  static PHP_MSHUTDOWN_FUNCTION(libxml);
  static PHP_MINFO_FUNCTION(libxml);
- static int php_libxml_post_deactivate();
+ static int php_libxml_post_deactivate(void);
  
  /* }}} */
  
Simple merge
index 494b5041298e0473e0d2db7f376d4b4e3272c02a,ebc10b48beb397812a2b4792bb36a8b74623489e..8a1a57280443e1550e0e37df3e950fe8effc7942
@@@ -1,6 -1,7 +1,5 @@@
  --TEST--
  zend multibyte (2)
- --SKIPIF--
 ---XFAIL--
 -https://bugs.php.net/bug.php?id=66582
  --INI--
  zend.multibyte=On
  zend.script_encoding=UTF-8
index 95fdd78c31ca67406db55e93bba1cba2722275ca,e0b4ead545b2fab219738d26cd9445ae156de0f9..1b8adb51861a7121e93f3383cdba077cb344b9ad
@@@ -1,6 -1,7 +1,5 @@@
  --TEST--
  zend multibyte (6)
- --SKIPIF--
 ---XFAIL--
 -https://bugs.php.net/bug.php?id=66582
  --INI--
  zend.multibyte=On
  zend.script_encoding=EUC-JP
index cefa314e9162e73b3714b73cf0861fa4f9a3e66f,90968e88201ec07747f5a3b29c63472f13a0a239..bbfa25d97f55a85963e90678ec05fafa0fc6b547
@@@ -1,8 -1,8 +1,7 @@@
  --TEST--
  zend multibyte (12)
----SKIPIF--
  --INI--
- zend.multibyte=On
+ zend.multibyte=1
  --FILE--
  <?php
  declare(encoding="ISO-8859-15");
Simple merge
index 1731c8a538fc7549c7e3c46b2a6f0f05409b9445,56e48a0a67e6ac30d7b6f7e9bef00c3dafedc244..56dcf7b3731f637e86db4c2b0fb961a401f74ada
@@@ -2179,24 -2169,16 +2179,16 @@@ static void php_mysql_fetch_hash(INTERN
                if (ce->constructor) {
                        fci.size = sizeof(fci);
                        fci.function_table = &ce->function_table;
 -                      fci.function_name = NULL;
 +                      ZVAL_UNDEF(&fci.function_name);
                        fci.symbol_table = NULL;
 -                      fci.object_ptr = return_value;
 -                      fci.retval_ptr_ptr = &retval_ptr;
 +                      fci.object = Z_OBJ_P(return_value);
 +                      fci.retval = &retval;
+                       fci.params = NULL;
+                       fci.param_count = 0;
+                       fci.no_separation = 1;
                        if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) {
-                               if (Z_TYPE_P(ctor_params) == IS_ARRAY) {
-                                       HashTable *htl = Z_ARRVAL_P(ctor_params);
-                                       uint idx;
-                                       Bucket *p;
-                                       fci.param_count = 0;
-                                       fci.params = safe_emalloc(sizeof(zval), htl->nNumOfElements, 0);
-                                       for (idx = 0; idx < htl->nNumUsed; idx++) {
-                                               p = htl->arData + idx;
-                                               if (ZVAL_IS_NULL(&p->val)) continue;
-                                               ZVAL_COPY_VALUE(&fci.params[fci.param_count++], &p->val);
-                                       }
-                               } else {
+                               if (zend_fcall_info_args(&fci, ctor_params TSRMLS_CC) == FAILURE) {
                                        /* Two problems why we throw exceptions here: PHP is typeless
                                         * and hence passing one argument that's not an array could be
                                         * by mistake and the other way round is possible, too. The
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 11ca76e2f37a91fb0a81edf327b7d32a1a720f4f,7c55de3752f054b77cccce4d230e0e367e4aadc0..bf951ff72a4aa62c76dbb5e8ea2e5a47096396d9
@@@ -324,22 -326,24 +324,23 @@@ zend_string *accel_new_interned_string(
        nIndex = h & ZCSG(interned_strings).nTableMask;
  
        /* check for existing interned string */
 -      p = ZCSG(interned_strings).arBuckets[nIndex];
 -      while (p != NULL) {
 -              if ((p->h == h) && (p->nKeyLength == (uint)nKeyLength)) {
 -                      if (!memcmp(p->arKey, arKey, nKeyLength)) {
 -                              if (free_src) {
 -                                      efree((char*)arKey);
 -                              }
 -                              return p->arKey;
 +      idx = ZCSG(interned_strings).arHash[nIndex];
 +      while (idx != INVALID_IDX) {
 +              p = ZCSG(interned_strings).arData + idx;
 +              if ((p->h == h) && (p->key->len == str->len)) {
 +                      if (!memcmp(p->key->val, str->val, str->len)) {
 +                              STR_RELEASE(str);
 +                              return p->key;
                        }
                }
 -              p = p->pNext;
 +              idx = Z_NEXT(p->val);
        }
  
 -      if (ZCSG(interned_strings_top) + ZEND_MM_ALIGNED_SIZE(sizeof(Bucket) + nKeyLength) >=
 +      if (ZCSG(interned_strings_top) + ZEND_MM_ALIGNED_SIZE(_STR_HEADER_SIZE + str->len + 1) >=
            ZCSG(interned_strings_end)) {
            /* no memory, return the same non-interned string */
 -              return arKey;
+               zend_accel_error(ACCEL_LOG_WARNING, "Interned string buffer overflow");
 +              return str;
        }
  
        /* create new interning string in shared interned strings buffer */
@@@ -2207,16 -2199,20 +2208,18 @@@ static void accel_fast_hash_destroy(Has
        }
  }
  
 -static void accel_fast_zval_ptr_dtor(zval **zval_ptr)
 +static void accel_fast_zval_dtor(zval *zvalue)
  {
 -      zval *zvalue = *zval_ptr;
 -
 -      if (Z_DELREF_P(zvalue) == 0) {
 +      if (Z_REFCOUNTED_P(zvalue) && Z_DELREF_P(zvalue) == 0) {
  #if ZEND_EXTENSION_API_NO >= PHP_5_3_X_API_NO
 -              switch (Z_TYPE_P(zvalue) & IS_CONSTANT_TYPE_MASK) {
 +              switch (Z_TYPE_P(zvalue)) {
  #else
 -              switch (Z_TYPE_P(zvalue) & ~IS_CONSTANT_INDEX) {
 +              switch (Z_TYPE_P(zvalue)) {
  #endif
-                       case IS_ARRAY:
-                       case IS_CONSTANT_ARRAY: {
+ #if ZEND_EXTENSION_API_NO <= PHP_5_5_API_NO
+                       case IS_CONSTANT_ARRAY:
+ #endif
+                       case IS_ARRAY: {
                                        TSRMLS_FETCH();
  
  #if ZEND_EXTENSION_API_NO >= PHP_5_3_X_API_NO
Simple merge
index 78d95023b52c5b37e2e03f0acffff0dc3e809f20,f4dd9fbb85f5fcf27ec10fc28fda97aaf3e9dc02..7ed055e9c63854baf756abe9ad9a8feb8bad2228
@@@ -562,30 -584,46 +576,43 @@@ static ZEND_FUNCTION(opcache_get_status
        add_assoc_bool(return_value, "restart_in_progress", ZCSG(restart_in_progress));
  
        /* Memory usage statistics */
 -      MAKE_STD_ZVAL(memory_usage);
 -      array_init(memory_usage);
 -      add_assoc_long(memory_usage, "used_memory", ZCG(accel_directives).memory_consumption-zend_shared_alloc_get_free_memory()-ZSMMG(wasted_shared_memory));
 -      add_assoc_long(memory_usage, "free_memory", zend_shared_alloc_get_free_memory());
 -      add_assoc_long(memory_usage, "wasted_memory", ZSMMG(wasted_shared_memory));
 -      add_assoc_double(memory_usage, "current_wasted_percentage", (((double) ZSMMG(wasted_shared_memory))/ZCG(accel_directives).memory_consumption)*100.0);
 -      add_assoc_zval(return_value, "memory_usage", memory_usage);
 +      array_init(&memory_usage);
 +      add_assoc_long(&memory_usage, "used_memory", ZCG(accel_directives).memory_consumption-zend_shared_alloc_get_free_memory()-ZSMMG(wasted_shared_memory));
 +      add_assoc_long(&memory_usage, "free_memory", zend_shared_alloc_get_free_memory());
 +      add_assoc_long(&memory_usage, "wasted_memory", ZSMMG(wasted_shared_memory));
 +      add_assoc_double(&memory_usage, "current_wasted_percentage", (((double) ZSMMG(wasted_shared_memory))/ZCG(accel_directives).memory_consumption)*100.0);
 +      add_assoc_zval(return_value, "memory_usage", &memory_usage);
  
 -              zval *interned_strings_usage;
 -
 -              MAKE_STD_ZVAL(interned_strings_usage);
 -              array_init(interned_strings_usage);
 -              add_assoc_long(interned_strings_usage, "buffer_size", ZCSG(interned_strings_end) - ZCSG(interned_strings_start));
 -              add_assoc_long(interned_strings_usage, "used_memory", ZCSG(interned_strings_top) - ZCSG(interned_strings_start));
 -              add_assoc_long(interned_strings_usage, "free_memory", ZCSG(interned_strings_end) - ZCSG(interned_strings_top));
 -              add_assoc_long(interned_strings_usage, "number_of_strings", ZCSG(interned_strings).nNumOfElements);
 -              add_assoc_zval(return_value, "interned_strings_usage", interned_strings_usage);
+ #if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
+       if (ZCSG(interned_strings_start) && ZCSG(interned_strings_end) && ZCSG(interned_strings_top)) {
++              zval interned_strings_usage;
++
++              array_init(&interned_strings_usage);
++              add_assoc_long(&interned_strings_usage, "buffer_size", ZCSG(interned_strings_end) - ZCSG(interned_strings_start));
++              add_assoc_long(&interned_strings_usage, "used_memory", ZCSG(interned_strings_top) - ZCSG(interned_strings_start));
++              add_assoc_long(&interned_strings_usage, "free_memory", ZCSG(interned_strings_end) - ZCSG(interned_strings_top));
++              add_assoc_long(&interned_strings_usage, "number_of_strings", ZCSG(interned_strings).nNumOfElements);
++              add_assoc_zval(return_value, "interned_strings_usage", &interned_strings_usage);
+       }
+ #endif
+       
        /* Accelerator statistics */
 -      MAKE_STD_ZVAL(statistics);
 -      array_init(statistics);
 -      add_assoc_long(statistics, "num_cached_scripts", ZCSG(hash).num_direct_entries);
 -      add_assoc_long(statistics, "num_cached_keys",    ZCSG(hash).num_entries);
 -      add_assoc_long(statistics, "max_cached_keys",    ZCSG(hash).max_num_entries);
 -      add_assoc_long(statistics, "hits", ZCSG(hits));
 -      add_assoc_long(statistics, "start_time", ZCSG(start_time));
 -      add_assoc_long(statistics, "last_restart_time", ZCSG(last_restart_time));
 -      add_assoc_long(statistics, "oom_restarts", ZCSG(oom_restarts));
 -      add_assoc_long(statistics, "hash_restarts", ZCSG(hash_restarts));
 -      add_assoc_long(statistics, "manual_restarts", ZCSG(manual_restarts));
 -      add_assoc_long(statistics, "misses", ZSMMG(memory_exhausted)?ZCSG(misses):ZCSG(misses)-ZCSG(blacklist_misses));
 -      add_assoc_long(statistics, "blacklist_misses", ZCSG(blacklist_misses));
 +      array_init(&statistics);
 +      add_assoc_long(&statistics, "num_cached_scripts", ZCSG(hash).num_direct_entries);
 +      add_assoc_long(&statistics, "num_cached_keys",    ZCSG(hash).num_entries);
 +      add_assoc_long(&statistics, "max_cached_keys",    ZCSG(hash).max_num_entries);
 +      add_assoc_long(&statistics, "hits", ZCSG(hits));
 +      add_assoc_long(&statistics, "start_time", ZCSG(start_time));
 +      add_assoc_long(&statistics, "last_restart_time", ZCSG(last_restart_time));
 +      add_assoc_long(&statistics, "oom_restarts", ZCSG(oom_restarts));
 +      add_assoc_long(&statistics, "hash_restarts", ZCSG(hash_restarts));
 +      add_assoc_long(&statistics, "manual_restarts", ZCSG(manual_restarts));
 +      add_assoc_long(&statistics, "misses", ZSMMG(memory_exhausted)?ZCSG(misses):ZCSG(misses)-ZCSG(blacklist_misses));
 +      add_assoc_long(&statistics, "blacklist_misses", ZCSG(blacklist_misses));
        reqs = ZCSG(hits)+ZCSG(misses);
 -      add_assoc_double(statistics, "blacklist_miss_ratio", reqs?(((double) ZCSG(blacklist_misses))/reqs)*100.0:0);
 -      add_assoc_double(statistics, "opcache_hit_rate", reqs?(((double) ZCSG(hits))/reqs)*100.0:0);
 -      add_assoc_zval(return_value, "opcache_statistics", statistics);
 +      add_assoc_double(&statistics, "blacklist_miss_ratio", reqs?(((double) ZCSG(blacklist_misses))/reqs)*100.0:0);
 +      add_assoc_double(&statistics, "opcache_hit_rate", reqs?(((double) ZCSG(hits))/reqs)*100.0:0);
 +      add_assoc_zval(return_value, "opcache_statistics", &statistics);
  
        if (fetch_scripts) {
                /* accelerated scripts */
index f9b0e819a60ba4689cc9266035d089fa0196b4e6,ae33e765ca76760d6511b68873fa1a5386d12f3a..3c143de1c12b9bcebae919d17fbd4bcb408b3efe
@@@ -730,6 -794,6 +730,7 @@@ static void zend_class_copy_ctor(zend_c
  /* 5.3 stuff */
        zend_update_inherited_handler(__callstatic);
  #endif
++      zend_update_inherited_handler(__debugInfo);
  
  #if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
  /* 5.4 traits */
index bc63705e5e014f8763f885a8983be8ee32ef8d5f,17f8e8798f5fd439b65d5c649fa8d6f3eedcb809..0130e12d075b35719aedd32d980fa9bd1a5ad58d
@@@ -655,6 -686,6 +655,10 @@@ static int zend_update_parent_ce(zval *
                ce->__callstatic->op_array.refcount++;
        }
  #endif
++      if (ce->__debugInfo) {
++              ce->__debugInfo = zend_shared_alloc_get_xlat_entry(ce->__debugInfo);
++              ce->__debugInfo->op_array.refcount++;
++      }
        zend_hash_apply(&ce->properties_info, (apply_func_t) zend_update_property_info_ce TSRMLS_CC);
        return 0;
  }
index b65f2d9736d65107a855ac8f02c437040758374b,4f8f4b73340d2caa13b0c7406a7eedc0c007bab5..42f8196aa0b92f1a6c5fe532dc0253bf884df07b
mode 100644,100755..100755
index 983dd6d4fc9b7e28d7f3647a98959941cbe65085,52d43ced3023f34217cf2dbd123eda7a5cc34357..b815667238dbbc8d97822f813d42b3789621bb1a
@@@ -582,6 -577,8 +582,10 @@@ PHPAPI void php_pcre_match_impl(pcre_ca
        int                              i, rc;
        int                              subpats_order;         /* Order of subpattern matches */
        int                              offset_capture;    /* Capture match offsets: yes/no */
 -      zval            *marks = NULL;      /* Array of marks for PREG_PATTERN_ORDER */
+       unsigned char   *mark = NULL;       /* Target for MARK name */
++      zval            marks;                  /* Array of marks for PREG_PATTERN_ORDER */
++
++      ZVAL_UNDEF(&marks);
  
        /* Overwrite the passed-in value for subpatterns with an empty array. */
        if (subpats != NULL) {
                                                /* For each subpattern, insert it into the appropriate array. */
                                                for (i = 0; i < count; i++) {
                                                        if (offset_capture) {
 -                                                              add_offset_pair(match_sets[i], (char *)stringlist[i],
 +                                                              add_offset_pair(&match_sets[i], (char *)stringlist[i],
                                                                                                offsets[(i<<1)+1] - offsets[i<<1], offsets[i<<1], NULL);
                                                        } else {
 -                                                              add_next_index_stringl(match_sets[i], (char *)stringlist[i],
 -                                                                                                         offsets[(i<<1)+1] - offsets[i<<1], 1);
 +                                                              add_next_index_stringl(&match_sets[i], (char *)stringlist[i],
 +                                                                                                         offsets[(i<<1)+1] - offsets[i<<1]);
                                                        }
                                                }
 -                                                      if (!marks) {
 -                                                              MAKE_STD_ZVAL(marks);
 -                                                              array_init(marks);
+                                               /* Add MARK, if available */
+                                               if (mark) {
 -                                                      add_index_string(marks, matched - 1, (char *) mark, 1);
++                                                      if (Z_TYPE(marks) == IS_UNDEF) {
++                                                              array_init(&marks);
+                                                       }
++                                                      add_index_string(&marks, matched - 1, (char *) mark);
+                                               }
                                                /*
                                                 * If the number of captured subpatterns on this run is
                                                 * less than the total possible number, pad the result
                                                                                                offsets[(i<<1)+1] - offsets[i<<1], offsets[i<<1], subpat_names[i]);
                                                        } else {
                                                                if (subpat_names[i]) {
 -                                                                      add_assoc_stringl(result_set, subpat_names[i], (char *)stringlist[i],
 -                                                                                                                 offsets[(i<<1)+1] - offsets[i<<1], 1);
 +                                                                      add_assoc_stringl(&result_set, subpat_names[i], (char *)stringlist[i],
 +                                                                                                                 offsets[(i<<1)+1] - offsets[i<<1]);
                                                                }
 -                                                              add_next_index_stringl(result_set, (char *)stringlist[i],
 -                                                                                                         offsets[(i<<1)+1] - offsets[i<<1], 1);
 +                                                              add_next_index_stringl(&result_set, (char *)stringlist[i],
 +                                                                                                         offsets[(i<<1)+1] - offsets[i<<1]);
                                                        }
                                                }
 -                                                      add_assoc_string(result_set, "MARK", (char *) mark, 1);
+                                               /* Add MARK, if available */
+                                               if (mark) {
++                                                      add_assoc_string(&result_set, "MARK", (char *) mark);
+                                               }
                                                /* And add it to the output array */
 -                                              zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &result_set, sizeof(zval *), NULL);
 +                                              zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &result_set);
                                        }
                                } else {                        /* single pattern matching */
                                        /* For each subpattern, insert it into the subpatterns array. */
                                                } else {
                                                        if (subpat_names[i]) {
                                                                add_assoc_stringl(subpats, subpat_names[i], (char *)stringlist[i],
 -                                                                                                offsets[(i<<1)+1] - offsets[i<<1], 1);
 +                                                                                                offsets[(i<<1)+1] - offsets[i<<1]);
                                                        }
                                                        add_next_index_stringl(subpats, (char *)stringlist[i],
 -                                                                                                 offsets[(i<<1)+1] - offsets[i<<1], 1);
 +                                                                                                 offsets[(i<<1)+1] - offsets[i<<1]);
                                                }
                                        }
 -                                              add_assoc_string(subpats, "MARK", (char *) mark, 1);
+                                       /* Add MARK, if available */
+                                       if (mark) {
++                                              add_assoc_string(subpats, "MARK", (char *) mark);
+                                       }
                                }
  
                                pcre_free((void *) stringlist);
        if (global && subpats && subpats_order == PREG_PATTERN_ORDER) {
                for (i = 0; i < num_subpats; i++) {
                        if (subpat_names[i]) {
 -                              zend_hash_update(Z_ARRVAL_P(subpats), subpat_names[i],
 -                                                               strlen(subpat_names[i])+1, &match_sets[i], sizeof(zval *), NULL);
 -                              Z_ADDREF_P(match_sets[i]);
 +                              zend_hash_str_update(Z_ARRVAL_P(subpats), subpat_names[i],
 +                                                               strlen(subpat_names[i]), &match_sets[i]);
 +                              Z_ADDREF(match_sets[i]);
                        }
 -                      zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &match_sets[i], sizeof(zval *), NULL);
 +                      zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &match_sets[i]);
                }
                efree(match_sets);
 -              if (marks) {
 -                      add_assoc_zval(subpats, "MARK", marks);
++              if (Z_TYPE(marks) != IS_UNDEF) {
++                      add_assoc_zval(subpats, "MARK", &marks);
+               }
        }
        
        efree(offsets);
@@@ -856,26 -881,32 +883,29 @@@ static int preg_get_backref(char **str
  
  /* {{{ preg_do_repl_func
   */
- static int preg_do_repl_func(zval *function, char *subject, int *offsets, char **subpat_names, int count, char **result TSRMLS_DC)
+ static int preg_do_repl_func(zval *function, char *subject, int *offsets, char **subpat_names, int count, unsigned char *mark, char **result TSRMLS_DC)
  {
 -      zval            *retval_ptr;            /* Function return value */
 -      zval       **args[1];                   /* Argument to pass to function */
 -      zval            *subpats;                       /* Captured subpatterns */ 
 +      zval             retval;                        /* Function return value */
 +      zval         args[1];                   /* Argument to pass to function */
        int                      result_len;            /* Return value length */
        int                      i;
  
 -      MAKE_STD_ZVAL(subpats);
 -      array_init(subpats);
 +      array_init(&args[0]);
        for (i = 0; i < count; i++) {
                if (subpat_names[i]) {
 -                      add_assoc_stringl(subpats, subpat_names[i], &subject[offsets[i<<1]] , offsets[(i<<1)+1] - offsets[i<<1], 1);
 +                      add_assoc_stringl(&args[0], subpat_names[i], &subject[offsets[i<<1]] , offsets[(i<<1)+1] - offsets[i<<1]);
                }
 -              add_next_index_stringl(subpats, &subject[offsets[i<<1]], offsets[(i<<1)+1] - offsets[i<<1], 1);
 +              add_next_index_stringl(&args[0], &subject[offsets[i<<1]], offsets[(i<<1)+1] - offsets[i<<1]);
        }
 -              add_assoc_string(subpats, "MARK", (char *) mark, 1);
+       if (mark) {
 -      args[0] = &subpats;
++              add_assoc_string(&args[0], "MARK", (char *) mark);
+       }
  
 -      if (call_user_function_ex(EG(function_table), NULL, function, &retval_ptr, 1, args, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
 -              convert_to_string_ex(&retval_ptr);
 -              *result = estrndup(Z_STRVAL_P(retval_ptr), Z_STRLEN_P(retval_ptr));
 -              result_len = Z_STRLEN_P(retval_ptr);
 -              zval_ptr_dtor(&retval_ptr);
 +      if (call_user_function_ex(EG(function_table), NULL, function, &retval, 1, args, 0, NULL TSRMLS_CC) == SUCCESS && Z_TYPE(retval) != IS_UNDEF) {
 +              convert_to_string_ex(&retval);
 +              *result = estrndup(Z_STRVAL(retval), Z_STRLEN(retval));
 +              result_len = Z_STRLEN(retval);
 +              zval_ptr_dtor(&retval);
        } else {
                if (!EG(exception)) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call custom replacement function");
@@@ -1021,11 -1058,10 +1051,12 @@@ PHPAPI zend_string *php_pcre_replace_im
                                        *match,                         /* The current match */
                                        *piece,                         /* The current piece of subject */
                                        *replace_end=NULL,      /* End of replacement string */
 -                                      *eval_result,           /* Result of eval or custom function */
 +                                      *eval_result=NULL,      /* Result of eval or custom function */
                                         walk_last;                     /* Last walked character */
 -      int                              rc;
 +      int                              rc,
 +                                       result_len;            /* Length of result */
+       unsigned char   *mark = NULL;       /* Target for MARK name */
 +      zend_string             *result;                        /* Result of replacement */
  
        if (extra == NULL) {
                extra_data.flags = PCRE_EXTRA_MATCH_LIMIT | PCRE_EXTRA_MATCH_LIMIT_RECURSION;
index 89b38511ea4f41d96e44cdc35d8ae7f7643cf51d,32e6e1bdd01e11683f72268986927e8d790aa1ea..73431049d668dc8af1081b3bab7b33ff51c0b3b4
@@@ -461,28 -464,15 +461,16 @@@ static void pdo_stmt_construct(pdo_stmt
  
                fci.size = sizeof(zend_fcall_info);
                fci.function_table = &dbstmt_ce->function_table;
 -              fci.function_name = NULL;
 -              fci.object_ptr = object;
 +              ZVAL_UNDEF(&fci.function_name);
 +              fci.object = Z_OBJ_P(object);
                fci.symbol_table = NULL;
 -              fci.retval_ptr_ptr = &retval;
 +              fci.retval = &retval;
-               if (!ZVAL_IS_UNDEF(ctor_args)) {
-                       HashTable *ht = Z_ARRVAL_P(ctor_args);
-                       uint idx;
-                       Bucket *p;
-                       fci.param_count = 0;
-                       fci.params = safe_emalloc(sizeof(zval), ht->nNumOfElements, 0);
-                       for (idx = 0; idx < ht->nNumUsed; idx++) {
-                               p = ht->arData + idx;
-                               if (ZVAL_IS_UNDEF(&p->val)) continue;
-                               ZVAL_COPY_VALUE(&fci.params[fci.param_count++], &p->val);
-                       }
-               } else {
-                       fci.param_count = 0;
-                       fci.params = NULL;
-               }
++              fci.param_count = 0;
+               fci.params = NULL;
                fci.no_separation = 1;
  
+               zend_fcall_info_args(&fci, ctor_args TSRMLS_CC);
                fcc.initialized = 1;
                fcc.function_handler = dbstmt_ce->constructor;
                fcc.calling_scope = EG(scope);
index 642274c13d68483feb0da42db44c3bc030501167,2593d02e96a5d7684691feddf8eaaa779be11d32..8ec246926c532b5120280f6d0589c38ab442029b
@@@ -745,24 -754,14 +745,15 @@@ static int do_fetch_class_prepare(pdo_s
        
        if (ce->constructor) {
                fci->function_table = &ce->function_table;
 -              fci->function_name = NULL;
 +              ZVAL_UNDEF(&fci->function_name);
                fci->symbol_table = NULL;
 -              fci->retval_ptr_ptr = &stmt->fetch.cls.retval_ptr;
 +              fci->retval = &stmt->fetch.cls.retval;
-               if (!ZVAL_IS_UNDEF(&stmt->fetch.cls.ctor_args)) {
-                       HashTable *ht = Z_ARRVAL(stmt->fetch.cls.ctor_args);
-                       zval *val;
-                       fci->param_count = 0;
-                       fci->params = safe_emalloc(sizeof(zval), ht->nNumOfElements, 0);
-                       ZEND_HASH_FOREACH_VAL(ht, val) {
-                               ZVAL_COPY_VALUE(&fci->params[fci->param_count++], val);
-                       } ZEND_HASH_FOREACH_END();
-               } else {
-                       fci->param_count = 0;
-                       fci->params = NULL;
-               }
++              fci->param_count = 0;
+               fci->params = NULL;
                fci->no_separation = 1;
  
 -              zend_fcall_info_args(fci, stmt->fetch.cls.ctor_args TSRMLS_CC);
++              zend_fcall_info_args(fci, &stmt->fetch.cls.ctor_args TSRMLS_CC);
                fcc->initialized = 1;
                fcc->function_handler = ce->constructor;
                fcc->calling_scope = EG(scope);
Simple merge
Simple merge
index ebdaaed3f137858505ba67f5d661f8ab948e8807,96f6fa7f72fb28eca240b7eec918ff4fec4bb9a0..24a5865c75428fd011701eeb2cd4a9f0fd0d84d6
@@@ -873,8 -868,8 +868,8 @@@ static PHP_METHOD(PDO, pgsqlCopyToArray
                        int ret = PQgetCopyData(H->server, &csv, 0);
                        if (ret == -1) {
                                break; /* copy done */
-                       } else if (ret > 0) { 
+                       } else if (ret > 0) {
 -                              add_next_index_stringl(return_value, csv, ret, 1);
 +                              add_next_index_stringl(return_value, csv, ret);
                                PQfreemem(csv);
                        } else {
                                pdo_pgsql_error(dbh, PGRES_FATAL_ERROR, NULL);
index 904bce6c67339704c9828e15881f1b8111f2f219,35e69a3c02dda368a942c57dd74bd59a4143bb5b..c9c9e5c45022d80027ebdaf9d3d813958ae52a16
@@@ -605,9 -603,9 +603,9 @@@ static int pgsql_stmt_get_column_meta(p
                goto done;
        }
  
 -      add_assoc_string(return_value, "native_type", PQgetvalue(res, 0, 0), 1);
 +      add_assoc_string(return_value, "native_type", PQgetvalue(res, 0, 0));
  done:
-       PQclear(res);           
+       PQclear(res);
        return 1;
  }
  
index 8ca12387778e4cd395f64d4f9c31c749c347124c,d867f433b23d5692209b31ee930f10fe745178a5..fcf5b4799b66824d3a26007feaf3e8675ddf1ecf
@@@ -2628,15 -2756,22 +2756,18 @@@ static void php_pgsql_fetch_hash(INTERN
                } else {
                        char *element = PQgetvalue(pgsql_result, pgsql_row, i);
                        if (element) {
 -                              char *data;
 -                              int data_len;
 -                              int should_copy=0;
                                const uint element_len = strlen(element);
  
+                               data = safe_estrndup(element, element_len);
+                               data_len = element_len;
                                if (result_type & PGSQL_NUM) {
 -                                      add_index_stringl(return_value, i, data, data_len, should_copy);
 -                                      should_copy=1;
 +                                      add_index_stringl(return_value, i, element, element_len);
                                }
-                       
                                if (result_type & PGSQL_ASSOC) {
                                        field_name = PQfname(pgsql_result, i);
 -                                      add_assoc_stringl(return_value, field_name, data, data_len, should_copy);
 +                                      add_assoc_stringl(return_value, field_name, element, element_len);
                                }
                        }
                }
@@@ -2805,8 -2929,8 +2925,8 @@@ PHP_FUNCTION(pg_fetch_all_columns
                if (PQgetisnull(pgsql_result, pg_row, colno)) {
                        add_next_index_null(return_value);
                } else {
 -                      add_next_index_string(return_value, PQgetvalue(pgsql_result, pg_row, colno), 1); 
 +                      add_next_index_string(return_value, PQgetvalue(pgsql_result, pg_row, colno)); 
-               }               
+               }
        }
  }
  /* }}} */
@@@ -5240,28 -5519,29 +5515,29 @@@ PHP_PGSQL_API int php_pgsql_meta_data(P
                char *name;
                MAKE_STD_ZVAL(elem);
                array_init(elem);
+               /* pg_attribute.attnum */
                add_assoc_long(elem, "num", atoi(PQgetvalue(pg_result,i,1)));
 -              add_assoc_string(elem, "type", PQgetvalue(pg_result,i,2), 1);
+               /* pg_type.typname */
 +              add_assoc_string(elem, "type", PQgetvalue(pg_result,i,2));
+               /* pg_attribute.attlen */
                add_assoc_long(elem, "len", atoi(PQgetvalue(pg_result,i,3)));
-               if (!strcmp(PQgetvalue(pg_result,i,4), "t")) {
-                       add_assoc_bool(elem, "not null", 1);
-               }
-               else {
-                       add_assoc_bool(elem, "not null", 0);
-               }
-               if (!strcmp(PQgetvalue(pg_result,i,5), "t")) {
-                       add_assoc_bool(elem, "has default", 1);
-               }
-               else {
-                       add_assoc_bool(elem, "has default", 0);
-               }
+               /* pg_attribute.attnonull */
+               add_assoc_bool(elem, "not null", !strcmp(PQgetvalue(pg_result,i,4), "t"));
+               /* pg_attribute.atthasdef */
+               add_assoc_bool(elem, "has default", !strcmp(PQgetvalue(pg_result,i,5), "t"));
+               /* pg_attribute.attndims */
                add_assoc_long(elem, "array dims", atoi(PQgetvalue(pg_result,i,6)));
-               if (!strcmp(PQgetvalue(pg_result,i,7), "t")) {
-                       add_assoc_bool(elem, "is enum", 1);
-               }
-               else {
-                       add_assoc_bool(elem, "is enum", 0);
-               }
+               /* pg_type.typtype */
+               add_assoc_bool(elem, "is enum", !strcmp(PQgetvalue(pg_result,i,7), "e"));
+               if (extended) {
+                       /* pg_type.typtype */
+                       add_assoc_bool(elem, "is base", !strcmp(PQgetvalue(pg_result,i,7), "b"));
+                       add_assoc_bool(elem, "is composite", !strcmp(PQgetvalue(pg_result,i,7), "c"));
+                       add_assoc_bool(elem, "is pesudo", !strcmp(PQgetvalue(pg_result,i,7), "p"));
+                       /* pg_description.description */
+                       add_assoc_string(elem, "description", PQgetvalue(pg_result,i,8), 1);
+               }
+               /* pg_attribute.attname */
                name = PQgetvalue(pg_result,i,0);
                add_assoc_zval(meta, name, elem);
        }
Simple merge
index 4af0b7383d015c556be92b1bdefec7d57d0ccfea,703e14113f05c361a7257390f119030d32900b40..c3f02fe079c6f32fceab7cb016347b1e96b8a8fc
@@@ -721,12 -726,16 +721,12 @@@ static void _parameter_string(string *s
        if (fptr->type == ZEND_USER_FUNCTION && offset >= required) {
                zend_op *precv = _get_recv_op((zend_op_array*)fptr, offset);
                if (precv && precv->opcode == ZEND_RECV_INIT && precv->op2_type != IS_UNUSED) {
 -                      zval *zv, zv_copy;
 -                      int use_copy;
 +                      zval zv;
                        string_write(str, " = ", sizeof(" = ")-1);
 -                      ALLOC_ZVAL(zv);
 -                      *zv = *precv->op2.zv;
 -                      zval_copy_ctor(zv);
 -                      INIT_PZVAL(zv);
 +                      ZVAL_DUP(&zv, precv->op2.zv);
-                       zval_update_constant_ex(&zv, (void*)1, fptr->common.scope TSRMLS_CC);
+                       zval_update_constant_ex(&zv, 1, fptr->common.scope TSRMLS_CC);
 -                      if (Z_TYPE_P(zv) == IS_BOOL) {
 -                              if (Z_LVAL_P(zv)) {
 +                      if (Z_TYPE(zv) == IS_BOOL) {
 +                              if (Z_LVAL(zv)) {
                                        string_write(str, "true", sizeof("true")-1);
                                } else {
                                        string_write(str, "false", sizeof("false")-1);
@@@ -2574,12 -2594,12 +2574,12 @@@ ZEND_METHOD(reflection_parameter, getDe
                return;
        }
  
 -      *return_value = *precv->op2.zv;
 -      INIT_PZVAL(return_value);
 -      if (!IS_CONSTANT_TYPE(Z_TYPE_P(return_value))) {
 +      ZVAL_COPY_VALUE(return_value, precv->op2.zv);
 +      if (Z_CONSTANT_P(return_value)) {
-               zval_update_constant_ex(return_value, (void*)0, param->fptr->common.scope TSRMLS_CC);
++              zval_update_constant_ex(return_value, 0, param->fptr->common.scope TSRMLS_CC);
 +      } else {
                zval_copy_ctor(return_value);
        }
 -      zval_update_constant_ex(&return_value, 0, param->fptr->common.scope TSRMLS_CC);
  }
  /* }}} */
  
@@@ -3373,11 -3410,11 +3373,11 @@@ static void add_class_vars(zend_class_e
  
                /* this is necessary to make it able to work with default array
                * properties, returned to user */
 -              if (IS_CONSTANT_TYPE(Z_TYPE_P(prop_copy))) {
 +              if (Z_CONSTANT(prop_copy)) {
-                       zval_update_constant(&prop_copy, (void *) 1 TSRMLS_CC);
+                       zval_update_constant(&prop_copy, 1 TSRMLS_CC);
                }
  
 -              add_assoc_zval(return_value, key, prop_copy);
 +              zend_hash_update(Z_ARRVAL_P(return_value), key, &prop_copy);
        }
  }
  /* }}} */
Simple merge
index 6982449af47d95e3d77f8c76c68039f299640fac,1d60c40188a31c39c0fc12c3a6de877df9d47e9d..8784016db615de621ae93664e51163158f660eed
@@@ -1262,6 -1297,49 +1262,49 @@@ static int php_session_cache_limiter(TS
  #define COOKIE_SECURE "; secure"
  #define COOKIE_HTTPONLY       "; HttpOnly"
  
 -      e_session_name = php_url_encode(PS(session_name), strlen(PS(session_name)), NULL);
+ /*
+  * Remove already sent session ID cookie.
+  * It must be directly removed from SG(sapi_header) because sapi_add_header_ex()
+  * removes all of matching cookie. i.e. It deletes all of Set-Cookie headers.
+  */
+ static void php_session_remove_cookie(TSRMLS_D) {
+       sapi_header_struct *header;
+       zend_llist *l = &SG(sapi_headers).headers;
+       zend_llist_element *next;
+       zend_llist_element *current;
+       char *session_cookie, *e_session_name;
+       int session_cookie_len, len = sizeof("Set-Cookie")-1;
++      e_session_name = php_url_encode(PS(session_name), strlen(PS(session_name)));
+       spprintf(&session_cookie, 0, "Set-Cookie: %s=", e_session_name);
+       efree(e_session_name);
+       session_cookie_len = strlen(session_cookie);
+       current = l->head;
+       while (current) {
+               header = (sapi_header_struct *)(current->data);
+               next = current->next;
+               if (header->header_len > len && header->header[len] == ':'
+                       && !strncmp(header->header, session_cookie, session_cookie_len)) {
+                       if (current->prev) {
+                               current->prev->next = next;
+                       } else {
+                               l->head = next;
+                       }
+                       if (next) {
+                               next->prev = current->prev;
+                       } else {
+                               l->tail = current->prev;
+                       }
+                       sapi_free_header(header);
+                       efree(current);
+                       --l->count;
+               }
+               current = next;
+       }
+       efree(session_cookie);
+ }
  static void php_session_send_cookie(TSRMLS_D) /* {{{ */
  {
        smart_str ncookie = {0};
  
        smart_str_0(&ncookie);
  
 -      sapi_add_header_ex(ncookie.c, ncookie.len, 0, 0 TSRMLS_CC);
+       php_session_remove_cookie(TSRMLS_C); /* remove already sent session ID cookie */
 +      /*      'replace' must be 0 here, else a previous Set-Cookie
 +              header, probably sent with setcookie() will be replaced! */
 +      sapi_add_header_ex(estrndup(ncookie.s->val, ncookie.s->len), ncookie.s->len, 0, 0 TSRMLS_CC);
 +      smart_str_free(&ncookie);
  }
  /* }}} */
  
@@@ -1913,10 -1945,10 +1929,10 @@@ static PHP_FUNCTION(session_save_path
     Return the current session id. If newid is given, the session id is replaced with newid */
  static PHP_FUNCTION(session_id)
  {
 -      char *name = NULL;
 -      int name_len, argc = ZEND_NUM_ARGS();
 +      zend_string *name = NULL;
-       int name_len, argc = ZEND_NUM_ARGS();
++      int argc = ZEND_NUM_ARGS();
  
 -      if (zend_parse_parameters(argc TSRMLS_CC, "|s", &name, &name_len) == FAILURE) {
 +      if (zend_parse_parameters(argc TSRMLS_CC, "|S", &name) == FAILURE) {
                return;
        }
  
index 1c6a20c3528571a4fa8ce9080eb8a089b343544a,f84e1e014d888b0412910755edb035e56483fcf8..31beb1a9f089ad6203a2ee34771d92e298ae8d18
@@@ -1108,11 -1129,11 +1108,11 @@@ static HashTable *sxe_get_prop_hash(zva
                        node = NULL;
                } else if (sxe->iter.type != SXE_ITER_CHILD) {
  
-                       if ( !node->children || !node->parent || node->children->next || node->children->children || node->parent->children == node->parent->last ) {
+                       if ( !node->children || !node->parent || !node->next || node->children->next || node->children->children || node->parent->children == node->parent->last ) {
                                node = node->children;
                        } else {
 -                              iter_data = sxe->iter.data;
 -                              sxe->iter.data = NULL;
 +                              ZVAL_COPY_VALUE(&iter_data, &sxe->iter.data);
 +                              ZVAL_UNDEF(&sxe->iter.data);
  
                                node = php_sxe_reset_iterator(sxe, 0 TSRMLS_CC);
  
Simple merge
index eafc280f0e10b5326c5f91e64ef4a247b5e70a7d,3e97e9448dfa1c7f772f27c0271b546ac4064f7a..0baba586ced0b339c8f3938ffa8f7a1f92ab826e
@@@ -605,63 -591,82 +605,84 @@@ static void spl_array_unset_dimension(z
  
  static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *offset, int check_empty TSRMLS_DC) /* {{{ */
  {
-       long index;
-       zval rv, *tmp;
 -      spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
 +      spl_array_object *intern = Z_SPLARRAY_P(object);
+       long index;
 -      zval *rv, *value = NULL, **tmp;
++      zval rv, *value = NULL, *tmp;
  
        if (check_inherited && intern->fptr_offset_has) {
 -              zval *offset_tmp = offset;
 -              SEPARATE_ARG_IF_REF(offset_tmp);
 -              zend_call_method_with_1_params(&object, Z_OBJCE_P(object), &intern->fptr_offset_has, "offsetExists", &rv, offset_tmp);
 -              zval_ptr_dtor(&offset_tmp);
++//???         zval offset_tmp;
++//???         ZVAL_COPY_VALUE(&offset_tmp, offset);
++//???         SEPARATE_ARG_IF_REF(&offset_tmp);
++//???         zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_has, "offsetExists", &rv, &offset_tmp);
++//???         zval_ptr_dtor(&offset_tmp);
 +              SEPARATE_ARG_IF_REF(offset);
 +              zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_has, "offsetExists", &rv, offset);
 +              zval_ptr_dtor(offset);
 -              if (rv && zend_is_true(rv TSRMLS_CC)) {
 +              if (!ZVAL_IS_UNDEF(&rv) && zend_is_true(&rv TSRMLS_CC)) {
-                       return 1;
+                       zval_ptr_dtor(&rv);
+                       if (check_empty == 2) {
+                               return 1;
+                       } else if (intern->fptr_offset_get) {
 -                              value = spl_array_read_dimension_ex(1, object, offset, BP_VAR_R TSRMLS_CC);
++                              value = spl_array_read_dimension_ex(1, object, offset, BP_VAR_R, &rv TSRMLS_CC);
+                       }
+               } else {
 -                      if (rv) {
 -                              zval_ptr_dtor(&rv);
 -                      }
++                      zval_ptr_dtor(&rv);
+                       return 0;
                }
-               zval_ptr_dtor(&rv);
-               return 0;
        }
  
-       switch(Z_TYPE_P(offset)) {
-               case IS_STRING:
-                       {
-                               HashTable *ht = spl_array_get_hash_table(intern, 0 TSRMLS_CC);
-                               if ((tmp = zend_symtable_find_ind(ht, Z_STR_P(offset))) != NULL) {
-                                       switch (check_empty) {
-                                               case 0:
-                                                       return Z_TYPE_P(tmp) != IS_NULL;
-                                               case 2:
-                                                       return 1;
-                                               default:
-                                                       return zend_is_true(tmp TSRMLS_CC);
+       if (!value) {
+               HashTable *ht = spl_array_get_hash_table(intern, 0 TSRMLS_CC);
+               switch(Z_TYPE_P(offset)) {
+                       case IS_STRING: 
 -                              if (zend_symtable_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **) &tmp) != FAILURE) {
++                              if ((tmp = zend_symtable_find(ht, Z_STR_P(offset))) != NULL) {
+                                       if (check_empty == 2) {
+                                               return 1;
                                        }
+                               } else {
+                                       return 0;
                                }
-                       }
-                       return 0;
-               case IS_DOUBLE:
-               case IS_RESOURCE:
-               case IS_BOOL:
-               case IS_LONG:
-                       {
-                               HashTable *ht = spl_array_get_hash_table(intern, 0 TSRMLS_CC);
+                               break;
+                       case IS_DOUBLE:
+                       case IS_RESOURCE:
+                       case IS_BOOL: 
+                       case IS_LONG:
 -                              if (offset->type == IS_DOUBLE) {
 +                              if (Z_TYPE_P(offset) == IS_DOUBLE) {
                                        index = (long)Z_DVAL_P(offset);
                                } else {
                                        index = Z_LVAL_P(offset);
                                }
 -                              if (zend_hash_index_find(ht, index, (void **)&tmp) != FAILURE) {
 +                              if ((tmp = zend_hash_index_find(ht, index)) != NULL) {
-                                       switch (check_empty) {
-                                               case 0:
-                                                       return Z_TYPE_P(tmp) != IS_NULL;
-                                               case 2:
-                                                       return 1;
-                                               default:
-                                                       return zend_is_true(tmp TSRMLS_CC);
+                                       if (check_empty == 2) {
+                                               return 1;
                                        }
+                               } else {
+                                       return 0;
                                }
+                               break;
+                       default:
+                               zend_error(E_WARNING, "Illegal offset type");
                                return 0;
-                       }
-               default:
-                       zend_error(E_WARNING, "Illegal offset type");
+               }
+               if (check_inherited && intern->fptr_offset_get) {
 -                      value = spl_array_read_dimension_ex(1, object, offset, BP_VAR_R TSRMLS_CC);
++                      value = spl_array_read_dimension_ex(1, object, offset, BP_VAR_R, &rv TSRMLS_CC);
+               } else {
 -                      value = *tmp;
++                      value = tmp;
+               }
        }
+       switch (check_empty) {
+               case 0:
+                       return Z_TYPE_P(value) != IS_NULL;
+               case 2:
+                       return 1;
+               case 1:
+                       return zend_is_true(value TSRMLS_CC);
+       }
        return 0;
  } /* }}} */
  
index 9c80be4aaab09706ea1410926300d177e43e319a,edb4c071cfdc36a11ed4bd78eb72fe85ea8a9173..ca6c4adbb2f527774e75b85a7d786b513e5ef0a4
@@@ -2816,6 -2848,28 +2816,27 @@@ SPL_METHOD(SplFileObject, fwrite
        RETURN_LONG(php_stream_write(intern->u.file.stream, str, str_len));
  } /* }}} */
  
 -      spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+ SPL_METHOD(SplFileObject, fread)
+ {
 -      Z_STRVAL_P(return_value) = emalloc(length + 1);
++      spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(getThis());
+       long length = 0;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &length) == FAILURE) {
+               return;
+       }
+       if (length <= 0) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length parameter must be greater than 0");
+               RETURN_FALSE;
+       }
 -      Z_TYPE_P(return_value) = IS_STRING;
++      ZVAL_STR(return_value, STR_ALLOC(length, 0));
+       Z_STRLEN_P(return_value) = php_stream_read(intern->u.file.stream, Z_STRVAL_P(return_value), length);
+       /* needed because recv/read/gzread doesnt put a null at the end*/
+       Z_STRVAL_P(return_value)[Z_STRLEN_P(return_value)] = 0;
+ }
  /* {{{ proto bool SplFileObject::fstat()
     Stat() on a filehandle */
  FileFunction(fstat)
Simple merge
index 35c5353da100cfa0bc45f62a47f215c6a9fc6eed,91830ab000da50d4a549a4bc0f304df7daa12647..4ddd86773e2e5e6d4cb95ee1784185a13a3108b8
@@@ -613,12 -621,28 +614,25 @@@ SPL_METHOD(SplObjectStorage, contains
   Determine number of objects in storage */
  SPL_METHOD(SplObjectStorage, count)
  {
 -      spl_SplObjectStorage *intern = (spl_SplObjectStorage*)zend_object_store_get_object(getThis() TSRMLS_CC);
 +      spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(getThis());
-       
-       if (zend_parse_parameters_none() == FAILURE) {
+       long mode = COUNT_NORMAL;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &mode) == FAILURE) {
                return;
        }
-       
+       if (mode == COUNT_RECURSIVE) {
+               long ret = zend_hash_num_elements(&intern->storage);
 -              HashPosition position;
+               zval *element;
 -              for (zend_hash_internal_pointer_reset_ex(&intern->storage, &position);
 -                   zend_hash_get_current_data_ex(&intern->storage, (void**) &element, &position) == SUCCESS;
 -                   zend_hash_move_forward_ex(&intern->storage, &position)) {
++              ZEND_HASH_FOREACH_VAL(&intern->storage, element) {
+                       ret += php_count_recursive(element, mode TSRMLS_CC);
 -              }
++              } ZEND_HASH_FOREACH_END();
+               RETURN_LONG(ret);
+               return;
+       }
        RETURN_LONG(zend_hash_num_elements(&intern->storage));
  } /* }}} */
  
index 918d5112e612a805e49cde66a5de9078bc443d6b,450e6995c22af325befdc6b52292039a9be51fb0..a38c389d93a100685643d259155946e2ce0e194e
@@@ -268,13 -271,13 +265,13 @@@ PHP_FUNCTION(ksort
  }
  /* }}} */
  
static int php_count_recursive(zval *array, long mode TSRMLS_DC) /* {{{ */
PHPAPI int php_count_recursive(zval *array, long mode TSRMLS_DC) /* {{{ */
  {
        long cnt = 0;
 -      zval **element;
 +      zval *element;
  
        if (Z_TYPE_P(array) == IS_ARRAY) {
 -              if (Z_ARRVAL_P(array)->nApplyCount > 1) {
 +              if (Z_ARRVAL_P(array)->u.v.nApplyCount > 1) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected");
                        return 0;
                }
@@@ -326,12 -333,17 +323,15 @@@ PHP_FUNCTION(count
  #ifdef HAVE_SPL
                        /* if not and the object implements Countable we call its count() method */
                        if (Z_OBJ_HT_P(array)->get_class_entry && instanceof_function(Z_OBJCE_P(array), spl_ce_Countable TSRMLS_CC)) {
-                               zend_call_method_with_0_params(array, NULL, NULL, "count", &retval);
 -                              zval *mode_zv;
 -                              MAKE_STD_ZVAL(mode_zv);
 -                              ZVAL_LONG(mode_zv, mode);
 -                              zend_call_method_with_1_params(&array, NULL, NULL, "count", &retval, mode_zv);
 -                              if (retval) {
++                              zval mode_zv;
++                              ZVAL_LONG(&mode_zv, mode);
++                              zend_call_method_with_1_params(array, NULL, NULL, "count", &retval, &mode_zv);
 +                              if (Z_TYPE(retval) != IS_UNDEF) {
                                        convert_to_long_ex(&retval);
 -                                      RETVAL_LONG(Z_LVAL_P(retval));
 +                                      RETVAL_LONG(Z_LVAL(retval));
                                        zval_ptr_dtor(&retval);
                                }
 -                              zval_dtor(mode_zv);
 -                              efree(mode_zv);
++                              zval_dtor(&mode_zv);
                                return;
                        }
  #endif
@@@ -2269,83 -2095,75 +2269,82 @@@ PHP_FUNCTION(array_slice
  
  PHPAPI int php_array_merge(HashTable *dest, HashTable *src, int recursive TSRMLS_DC) /* {{{ */
  {
 -      zval **src_entry, **dest_entry;
 -      char *string_key;
 -      uint string_key_len;
 -      ulong num_key;
 -      HashPosition pos;
 -
 -      zend_hash_internal_pointer_reset_ex(src, &pos);
 -      while (zend_hash_get_current_data_ex(src, (void **)&src_entry, &pos) == SUCCESS) {
 -              switch (zend_hash_get_current_key_ex(src, &string_key, &string_key_len, &num_key, 0, &pos)) {
 -                      case HASH_KEY_IS_STRING:
 -                              if (recursive && zend_hash_find(dest, string_key, string_key_len, (void **)&dest_entry) == SUCCESS) {
 -                                      HashTable *thash = Z_TYPE_PP(dest_entry) == IS_ARRAY ? Z_ARRVAL_PP(dest_entry) : NULL;
 -                                      zval *src_zval;
 -                                      zval *tmp = NULL;
 -
 -                                      if ((thash && thash->nApplyCount > 1) || (*src_entry == *dest_entry && Z_ISREF_PP(dest_entry) && (Z_REFCOUNT_PP(dest_entry) % 2))) {
 -                                              php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected");
 -                                              return 0;
 -                                      }
 -                                      SEPARATE_ZVAL(dest_entry);
 -
 -                                      if (Z_TYPE_PP(dest_entry) == IS_NULL) {
 -                                              convert_to_array_ex(dest_entry);
 -                                              add_next_index_null(*dest_entry);
 +      zval *src_entry, *dest_entry;
 +      zend_string *string_key;
-       ulong num_key;
 +
-       ZEND_HASH_FOREACH_KEY_VAL(src, num_key, string_key, src_entry) {
++      ZEND_HASH_FOREACH_STR_KEY_VAL(src, string_key, src_entry) {
 +              if (string_key) {
 +                      if (recursive && (dest_entry = zend_hash_find(dest, string_key)) != NULL) {
 +                              zval *src_zval = src_entry;
 +                              zval *dest_zval = dest_entry;
 +                              HashTable *thash;
 +                              zval tmp;
 +                                      
 +                              ZVAL_DEREF(src_zval);
 +                              ZVAL_DEREF(dest_zval);
 +                              thash = Z_TYPE_P(dest_zval) == IS_ARRAY ? Z_ARRVAL_P(dest_zval) : NULL;
 +                              if ((thash && thash->u.v.nApplyCount > 1) || (src_entry == dest_entry && Z_ISREF_P(dest_entry) && (Z_REFCOUNT_P(dest_entry) % 2))) {
 +                                      php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected");
 +                                      return 0;
 +                              }
 +                                      
 +                              if (Z_ISREF_P(dest_entry)) {
 +                                      if (Z_REFCOUNT_P(dest_entry) == 1) {
 +                                              ZVAL_UNREF(dest_entry);
                                        } else {
 -                                              convert_to_array_ex(dest_entry);
 +                                              Z_DELREF_P(dest_entry);
 +                                              ZVAL_DUP(dest_entry, dest_zval);
                                        }
 -                                      if (Z_TYPE_PP(src_entry) == IS_OBJECT) {
 -                                              ALLOC_ZVAL(src_zval);
 -                                              INIT_PZVAL_COPY(src_zval, *src_entry);
 -                                              zval_copy_ctor(src_zval);
 -                                              convert_to_array(src_zval);
 -                                              tmp = src_zval;
 -                                      } else {
 -                                              src_zval = *src_entry;
 +                                      dest_zval = dest_entry;
 +                              } else {
 +                                      SEPARATE_ZVAL(dest_zval);
 +                              }
 +
 +                              if (Z_TYPE_P(dest_zval) == IS_NULL) {
 +                                      convert_to_array_ex(dest_zval);
 +                                      add_next_index_null(dest_zval);
 +                              } else {
 +                                      convert_to_array_ex(dest_zval);
 +                              }
 +                              ZVAL_UNDEF(&tmp);
 +                              if (Z_TYPE_P(src_zval) == IS_OBJECT) {
 +                                      ZVAL_DUP(&tmp, src_zval);
 +                                      convert_to_array(&tmp);
 +                                      src_zval = &tmp;
 +                              }
 +                              if (Z_TYPE_P(src_zval) == IS_ARRAY) {
 +                                      if (thash) {
 +                                              thash->u.v.nApplyCount++;
                                        }
 -                                      if (Z_TYPE_P(src_zval) == IS_ARRAY) {
 +                                      if (!php_array_merge(Z_ARRVAL_P(dest_zval), Z_ARRVAL_P(src_zval), recursive TSRMLS_CC)) {
                                                if (thash) {
 -                                                      thash->nApplyCount++;
 +                                                      thash->u.v.nApplyCount--;
                                                }
 -                                              if (!php_array_merge(Z_ARRVAL_PP(dest_entry), Z_ARRVAL_P(src_zval), recursive TSRMLS_CC)) {
 -                                                      if (thash) {
 -                                                              thash->nApplyCount--;
 -                                                      }
 -                                                      return 0;
 -                                              }
 -                                              if (thash) {
 -                                                      thash->nApplyCount--;
 -                                              }
 -                                      } else {
 -                                              Z_ADDREF_PP(src_entry);
 -                                              zend_hash_next_index_insert(Z_ARRVAL_PP(dest_entry), &src_zval, sizeof(zval *), NULL);
 +                                              return 0;
                                        }
 -                                      if (tmp) {
 -                                              zval_ptr_dtor(&tmp);
 +                                      if (thash) {
 +                                              thash->u.v.nApplyCount--;
                                        }
                                } else {
 -                                      Z_ADDREF_PP(src_entry);
 -                                      zend_hash_update(dest, string_key, string_key_len, src_entry, sizeof(zval *), NULL);
 +                                      if (Z_REFCOUNTED_P(src_entry)) {
 +                                              Z_ADDREF_P(src_entry);
 +                                      }
 +                                      zend_hash_next_index_insert(Z_ARRVAL_P(dest_zval), src_zval);
                                }
 -                              break;
 -
 -                      case HASH_KEY_IS_LONG:
 -                              Z_ADDREF_PP(src_entry);
 -                              zend_hash_next_index_insert(dest, src_entry, sizeof(zval *), NULL);
 -                              break;
 +                              zval_ptr_dtor(&tmp);
 +                      } else {
 +                              if (Z_REFCOUNTED_P(src_entry)) {
 +                                      Z_ADDREF_P(src_entry);
 +                              }
 +                              zend_hash_update(dest, string_key, src_entry);
 +                      }
 +              } else {
 +                      if (Z_REFCOUNTED_P(src_entry)) {
 +                              Z_ADDREF_P(src_entry);
 +                      }
 +                      zend_hash_next_index_insert(dest, src_entry);
                }
 -              zend_hash_move_forward_ex(src, &pos);
 -      }
 +      } ZEND_HASH_FOREACH_END();
        return 1;
  }
  /* }}} */
@@@ -4033,20 -3830,21 +4032,19 @@@ PHP_FUNCTION(array_multisort
        /* Restructure the arrays based on sorted indirect - this is mostly taken from zend_hash_sort() function. */
        HANDLE_BLOCK_INTERRUPTIONS();
        for (i = 0; i < num_arrays; i++) {
 -              hash = Z_ARRVAL_PP(arrays[i]);
 -              hash->pListHead = indirect[0][i];;
 -              hash->pListTail = NULL;
 -              hash->pInternalPointer = hash->pListHead;
 -
 -              for (k = 0; k < array_size; k++) {
 -                      if (hash->pListTail) {
 -                              hash->pListTail->pListNext = indirect[k][i];
 -                      }
 -                      indirect[k][i]->pListLast = hash->pListTail;
 -                      indirect[k][i]->pListNext = NULL;
 -                      hash->pListTail = indirect[k][i];
 +              hash = Z_ARRVAL_P(arrays[i]);
 +              hash->nNumUsed = array_size;
 +              hash->nInternalPointer = 0;
 +
 +              for (n = 0, k = 0; k < array_size; k++) {
 +                      hash->arData[k] = indirect[k][i];
 +                      if (hash->arData[k].key == NULL)
 +                              hash->arData[k].h = n++;
 +              }
 +              hash->nNextFreeElement = array_size;
 +              if (!(hash->u.flags & HASH_FLAG_PACKED)) {
 +                      zend_hash_to_packed(hash);
                }
 -
 -              zend_hash_reindex(hash, 1);
        }
        HANDLE_UNBLOCK_INTERRUPTIONS();
  
index 0393917e23bd5c5f95d4dc651626c1f8c67dc849,de3719e1e93804b4707ace0bdabed5600e662a7b..537ca177319303bd443c435f476cd50e49027614
@@@ -3861,15 -3813,8 +3814,15 @@@ PHP_FUNCTION(constant
                return;
        }
  
 -      if (!zend_get_constant_ex(const_name, const_name_len, return_value, NULL, ZEND_FETCH_CLASS_SILENT TSRMLS_CC)) {
 -              php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't find constant %s", const_name);
 +      c = zend_get_constant_ex(const_name, NULL, ZEND_FETCH_CLASS_SILENT TSRMLS_CC);
 +      if (c) {
 +              ZVAL_COPY_VALUE(return_value, c);
 +              if (Z_CONSTANT_P(return_value)) {
-                       zval_update_constant_ex(return_value, (void*)1, NULL TSRMLS_CC);
++                      zval_update_constant_ex(return_value, 1, NULL TSRMLS_CC);
 +              }
 +              zval_copy_ctor(return_value);
 +      } else {
 +              php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't find constant %s", const_name->val);
                RETURN_NULL();
        }
  }
Simple merge
Simple merge
Simple merge
index 69f2400c53650f8cb0af16c76e6c4c01adde97d0,5bbe39ccbbcee92a7e4fc506406c59d70fa79739..4b605e145cf3204ffc0983c6c30dbff651bf8912
@@@ -1440,8 -1455,12 +1452,11 @@@ static void php_html_entities(INTERNAL_
                return;
        }
  
 -      replaced = php_escape_html_entities_ex(str, str_len, &new_len, all, (int) flags, hint_charset, double_encode TSRMLS_CC);
 -
 -      RETVAL_STRINGL(replaced, (int)new_len, 0);
+       if (!hint_charset) {
+               hint_charset = get_default_charset(TSRMLS_C);
+       }
 +      replaced = php_escape_html_entities_ex((unsigned char*)str, str_len, all, (int) flags, hint_charset, double_encode TSRMLS_CC);
 +      RETVAL_STR(replaced);
  }
  /* }}} */
  
@@@ -1501,18 -1521,23 +1516,23 @@@ PHP_FUNCTION(htmlspecialchars_decode
  PHP_FUNCTION(html_entity_decode)
  {
        char *str, *hint_charset = NULL;
 -      int str_len, hint_charset_len;
 +      int str_len, hint_charset_len = 0;
+       size_t new_len = 0;
        long quote_style = ENT_COMPAT;
 -      char *replaced;
 +      zend_string *replaced;
  
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ls", &str, &str_len,
                                                          &quote_style, &hint_charset, &hint_charset_len) == FAILURE) {
                return;
        }
  
 -      replaced = php_unescape_html_entities(str, str_len, &new_len, 1 /*all*/, quote_style, hint_charset TSRMLS_CC);
+       if (!hint_charset) {
+               hint_charset = get_default_charset(TSRMLS_C);
+       }
 +      replaced = php_unescape_html_entities((unsigned char*)str, str_len, 1 /*all*/, quote_style, hint_charset TSRMLS_CC);
        if (replaced) {
 -              RETURN_STRINGL(replaced, (int)new_len, 0);
 +              RETURN_STR(replaced);
        }
        RETURN_FALSE;
  }
Simple merge
index 40c01a650e4043d8648224231c717e0966fc4b0b,b877b87420119b43fe7083680eff25e4eef43622..815f83118fb56215c6f591dd3970e2691b490364
@@@ -280,16 -278,17 +280,16 @@@ PHPAPI int php_mail(char *to, char *sub
        }
        if (PG(mail_x_header)) {
                const char *tmp = zend_get_executed_filename(TSRMLS_C);
 -              char *f;
 -              size_t f_len;
 +              zend_string *f;
  
 -              php_basename(tmp, strlen(tmp), NULL, 0,&f, &f_len TSRMLS_CC);
 +              f = php_basename(tmp, strlen(tmp), NULL, 0 TSRMLS_CC);
  
                if (headers != NULL) {
 -                      spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n%s", php_getuid(TSRMLS_C), f, headers);
 +                      spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n%s", php_getuid(TSRMLS_C), f->val, headers);
                } else {
-                       spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n", php_getuid(TSRMLS_C), f->val);
 -                      spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s", php_getuid(TSRMLS_C), f);
++                      spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s", php_getuid(TSRMLS_C), f->val);
                }
 -              efree(f);
 +              STR_RELEASE(f);
        }
  
        if (!sendmail_path) {
Simple merge
Simple merge
index d5eb85d371f3a57faebda156497d8ddb6dae6ccb,50ceb605ed6560f630596736f1cfd3cba7371059..0ab8ffa7e73c17a46b5043017429a4b236864684
@@@ -108,62 -109,95 +109,82 @@@ static php_process_env_t _php_array_to_
        }
  
        /* first, we have to get the size of all the elements in the hash */
 -      for (zend_hash_internal_pointer_reset_ex(target_hash, &pos);
 -                      zend_hash_get_current_data_ex(target_hash, (void **) &element, &pos) == SUCCESS;
 -                      zend_hash_move_forward_ex(target_hash, &pos)) {
 -
 -              if (Z_TYPE_PP(element) != IS_STRING) {
 -                      zval tmp;
 +      ZEND_HASH_FOREACH_KEY_VAL(target_hash, num_key, string_key, element) {
-               convert_to_string_ex(element);
-               el_len = Z_STRLEN_P(element);
++              zval tmp;
 -                      MAKE_COPY_ZVAL(element, &tmp);
++              if (Z_TYPE_P(element) != IS_STRING) {
++                      ZVAL_DUP(&tmp, element);
+                       convert_to_string(&tmp);
+                       el_len = Z_STRLEN(tmp);
 -
+                       zval_dtor(&tmp);
+               } else {
 -                      el_len = Z_STRLEN_PP(element);
++                      el_len = Z_STRLEN_P(element);
+               }
                if (el_len == 0) {
                        continue;
                }
  
                sizeenv += el_len+1;
  
 -              switch (zend_hash_get_current_key_ex(target_hash, &string_key, &string_length, &num_key, 0, &pos)) {
 -                      case HASH_KEY_IS_STRING:
 -                              if (string_length == 0) {
 -                                      continue;
 -                              }
 -                              sizeenv += string_length;
 -                              break;
 +              if (string_key) {
 +                      if (string_key->len == 0) {
 +                              continue;
 +                      }
-                       sizeenv += string_key->len + 2;
++                      sizeenv += string_key->len + 1;
                }
 -      }
 +      } ZEND_HASH_FOREACH_END();
  
  #ifndef PHP_WIN32
        ep = env.envarray = (char **) pecalloc(cnt + 1, sizeof(char *), is_persistent);
  #endif
        p = env.envp = (char *) pecalloc(sizeenv + 4, 1, is_persistent);
  
 -      for (zend_hash_internal_pointer_reset_ex(target_hash, &pos);
 -                      zend_hash_get_current_data_ex(target_hash, (void **) &element, &pos) == SUCCESS;
 -                      zend_hash_move_forward_ex(target_hash, &pos)) {
 +      ZEND_HASH_FOREACH_KEY_VAL(target_hash, num_key, string_key, element) {
-               convert_to_string_ex(element);
-               el_len = Z_STRLEN_P(element);
+               zval tmp;
 -              if (Z_TYPE_PP(element) != IS_STRING) {
 -                      MAKE_COPY_ZVAL(element, &tmp);
++              if (Z_TYPE_P(element) != IS_STRING) {
++                      ZVAL_DUP(&tmp, element);
+                       convert_to_string(&tmp);
+               } else {
 -                      tmp = **element;
++                      ZVAL_COPY_VALUE(&tmp, element);
+               }
+               el_len = Z_STRLEN(tmp);
  
                if (el_len == 0) {
-                       continue;
+                       goto next_element;
                }
  
-               data = Z_STRVAL_P(element);
+               data = Z_STRVAL(tmp);
 -              switch (zend_hash_get_current_key_ex(target_hash, &string_key, &string_length, &num_key, 0, &pos)) {
 -                      case HASH_KEY_IS_STRING:
 -                              if (string_length == 0) {
 -                                      goto next_element;
 -                              }
  
 -                              l = string_length + el_len + 1;
 -                              memcpy(p, string_key, string_length);
 -                              strncat(p, "=", 1);
 -                              strncat(p, data, el_len);
 +              if (string_key) {
 +                      if (string_key->len == 0) {
-                               continue;
++                              goto next_element;
 +                      }
 +
 +                      l = string_key->len + el_len + 2;
 +                      memcpy(p, string_key->val, string_key->len);
 +                      strncat(p, "=", 1);
 +                      strncat(p, data, el_len);
  
  #ifndef PHP_WIN32
 -                              *ep = p;
 -                              ++ep;
 +                      *ep = p;
 +                      ++ep;
  #endif
 -                              p += l;
 -                              break;
 -                      case HASH_KEY_IS_LONG:
 -                              memcpy(p,data,el_len);
 +                      p += l;
 +              } else {
 +                      memcpy(p,data,el_len);
  #ifndef PHP_WIN32
 -                              *ep = p;
 -                              ++ep;
 +                      *ep = p;
 +                      ++ep;
  #endif
 -                              p += el_len + 1;
 -                              break;
 -                      case HASH_KEY_NON_EXISTENT:
 -                              break;
 +                      p += el_len + 1;
                }
 -
+ next_element:
 -              if (Z_TYPE_PP(element) != IS_STRING) {
++              if (Z_TYPE_P(element) != IS_STRING) {
+                       zval_dtor(&tmp);
+               }
 -      }
 +      } ZEND_HASH_FOREACH_END();
  
        assert((uint)(p - env.envp) <= sizeenv);
  
@@@ -515,10 -554,10 +536,10 @@@ PHP_FUNCTION(proc_open
  
                descriptors[ndesc].index = nindex;
  
 -              if (Z_TYPE_PP(descitem) == IS_RESOURCE) {
 +              if (Z_TYPE_P(descitem) == IS_RESOURCE) {
                        /* should be a stream - try and dup the descriptor */
                        php_stream *stream;
-                       int fd;
+                       php_socket_t fd;
  
                        php_stream_from_zval(stream, descitem);
  
                                        descriptors[ndesc].mode_flags |= O_BINARY;
  #endif
  
 -                      } else if (strcmp(Z_STRVAL_PP(ztype), "file") == 0) {
 -                              zval **zfile, **zmode;
 +                      } else if (strcmp(Z_STRVAL_P(ztype), "file") == 0) {
 +                              zval *zfile, *zmode;
-                               int fd;
+                               php_socket_t fd;
                                php_stream *stream;
  
                                descriptors[ndesc].mode = DESC_FILE;
index c39a9f3310db0f4c704fd9444e7f28b5c9984958,8d42a51af67781c2a5ef2cb6bc097d43406b8dc7..71cdc1392764bfc6ad4fa07060a69e81aae3aca1
@@@ -547,18 -541,24 +547,17 @@@ PHP_FUNCTION(stream_get_meta_data
  PHP_FUNCTION(stream_get_transports)
  {
        HashTable *stream_xport_hash;
 -      char *stream_xport;
 -      uint stream_xport_len;
 -      ulong num_key;
 +      zend_string *stream_xport;
-       ulong num_key;
  
        if (zend_parse_parameters_none() == FAILURE) {
                return;
        }
  
        if ((stream_xport_hash = php_stream_xport_get_hash())) {
 -              HashPosition pos;
                array_init(return_value);
-               ZEND_HASH_FOREACH_KEY(stream_xport_hash, num_key, stream_xport) {
 -              zend_hash_internal_pointer_reset_ex(stream_xport_hash, &pos);
 -              while (zend_hash_get_current_key_ex(stream_xport_hash,
 -                                      &stream_xport, &stream_xport_len,
 -                                      &num_key, 0, &pos) == HASH_KEY_IS_STRING) {
 -                      add_next_index_stringl(return_value, stream_xport, stream_xport_len - 1, 1);
 -                      zend_hash_move_forward_ex(stream_xport_hash, &pos);
 -              }
++              ZEND_HASH_FOREACH_STR_KEY(stream_xport_hash, stream_xport) {
 +                      add_next_index_str(return_value, STR_COPY(stream_xport));
 +              } ZEND_HASH_FOREACH_END();
        } else {
                RETURN_FALSE;
        }
  PHP_FUNCTION(stream_get_wrappers)
  {
        HashTable *url_stream_wrappers_hash;
 -      char *stream_protocol;
 -      int key_flags;
 -      uint stream_protocol_len = 0;
 -      ulong num_key;
 +      zend_string *stream_protocol;
-       int key_flags;
-       ulong num_key;
  
        if (zend_parse_parameters_none() == FAILURE) {
                return;
        }
  
        if ((url_stream_wrappers_hash = php_stream_get_url_stream_wrappers_hash())) {
 -              HashPosition pos;
                array_init(return_value);
-               ZEND_HASH_FOREACH_KEY(url_stream_wrappers_hash, num_key, stream_protocol) {
-                       if (key_flags == HASH_KEY_IS_STRING) {
 -              for (zend_hash_internal_pointer_reset_ex(url_stream_wrappers_hash, &pos);
 -                      (key_flags = zend_hash_get_current_key_ex(url_stream_wrappers_hash, &stream_protocol, &stream_protocol_len, &num_key, 0, &pos)) != HASH_KEY_NON_EXISTENT;
 -                      zend_hash_move_forward_ex(url_stream_wrappers_hash, &pos)) {
 -                              if (key_flags == HASH_KEY_IS_STRING) {
 -                                      add_next_index_stringl(return_value, stream_protocol, stream_protocol_len - 1, 1);
 -                              }
 -              }
++              ZEND_HASH_FOREACH_STR_KEY(url_stream_wrappers_hash, stream_protocol) {
++                      if (stream_protocol) {
 +                              add_next_index_str(return_value, STR_COPY(stream_protocol));
 +                      }
 +              } ZEND_HASH_FOREACH_END();
        } else {
                RETURN_FALSE;
        }
@@@ -602,12 -606,11 +599,12 @@@ static int stream_array_to_fd_set(zval 
        if (Z_TYPE_P(stream_array) != IS_ARRAY) {
                return 0;
        }
 -      for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream_array));
 -               zend_hash_get_current_data(Z_ARRVAL_P(stream_array), (void **) &elem) == SUCCESS;
 -               zend_hash_move_forward(Z_ARRVAL_P(stream_array))) {
  
-               int tmp_fd;
 +      ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(stream_array), elem) {
 +              /* Temporary int fd is needed for the STREAM data type on windows, passing this_fd directly to php_stream_cast()
 +                      would eventually bring a wrong result on x64. php_stream_cast() casts to int internally, and this will leave
 +                      the higher bits of a SOCKET variable uninitialized on systems with little endian. */
+               php_socket_t this_fd;
  
                php_stream_from_zval_no_verify(stream, elem);
                if (stream == NULL) {
                        }
                        cnt++;
                }
 -      }
 +      } ZEND_HASH_FOREACH_END();
        return cnt ? 1 : 0;
  }
  
@@@ -645,15 -644,27 +639,12 @@@ static int stream_array_from_fd_set(zva
        if (Z_TYPE_P(stream_array) != IS_ARRAY) {
                return 0;
        }
 -      ALLOC_HASHTABLE(new_hash);
 -      zend_hash_init(new_hash, zend_hash_num_elements(Z_ARRVAL_P(stream_array)), NULL, ZVAL_PTR_DTOR, 0);
 +      ZVAL_NEW_ARR(&new_array);
 +      zend_hash_init(Z_ARRVAL(new_array), zend_hash_num_elements(Z_ARRVAL_P(stream_array)), NULL, ZVAL_PTR_DTOR, 0);
  
 -      for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream_array));
 -               zend_hash_has_more_elements(Z_ARRVAL_P(stream_array)) == SUCCESS;
 -               zend_hash_move_forward(Z_ARRVAL_P(stream_array))) {
 -
 -              int type;
 -              char *key;
 -              uint key_len;
 -              ulong num_ind;
 +      ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(stream_array), num_ind, key, elem) {
-               /* Temporary int fd is needed for the STREAM data type on windows, passing this_fd directly to php_stream_cast()
-                       would eventually bring a wrong result on x64. php_stream_cast() casts to int internally, and this will leave
-                       the higher bits of a SOCKET variable uninitialized on systems with little endian. */
-               int tmp_fd;
+               php_socket_t this_fd;
  
 -
 -              type = zend_hash_get_current_key_ex(Z_ARRVAL_P(stream_array),
 -                              &key, &key_len, &num_ind, 0, NULL);
 -              if (type == HASH_KEY_NON_EXISTENT ||
 -                      zend_hash_get_current_data(Z_ARRVAL_P(stream_array), (void **) &elem) == FAILURE) {
 -                      continue; /* should not happen */
 -              }
 -
                php_stream_from_zval_no_verify(stream, elem);
                if (stream == NULL) {
                        continue;
                 * when casting.  It is only used here so that the buffered data warning
                 * is not displayed.
                 */
-               if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&tmp_fd, 1) && tmp_fd != -1) {
-                       php_socket_t this_fd = (php_socket_t)tmp_fd;
+               if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&this_fd, 1) && this_fd != SOCK_ERR) {
                        if (PHP_SAFE_FD_ISSET(this_fd, fds)) {
 -                              if (type == HASH_KEY_IS_LONG) {
 -                                      zend_hash_index_update(new_hash, num_ind, (void *)elem, sizeof(zval *), (void **)&dest_elem);
 -                              } else { /* HASH_KEY_IS_STRING */
 -                                      zend_hash_update(new_hash, key, key_len, (void *)elem, sizeof(zval *), (void **)&dest_elem);
 +                              if (!key) {
 +                                      dest_elem = zend_hash_index_update(Z_ARRVAL(new_array), num_ind, elem);
 +                              } else {
 +                                      dest_elem = zend_hash_update(Z_ARRVAL(new_array), key, elem);
                                }
                                
                                if (dest_elem) {
@@@ -884,19 -909,26 +872,18 @@@ static void user_space_stream_notifier_
  
  static int parse_context_options(php_stream_context *context, zval *options TSRMLS_DC)
  {
 -      HashPosition pos, opos;
 -      zval **wval, **oval;
 -      char *wkey, *okey;
 -      uint wkey_len, okey_len;
 +      zval *wval, *oval;
 +      zend_string *wkey, *okey;
        int ret = SUCCESS;
--      ulong num_key;
  
-       ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(options), num_key, wkey, wval) {
 -      zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(options), &pos);
 -      while (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_P(options), (void**)&wval, &pos)) {
 -              if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(Z_ARRVAL_P(options), &wkey, &wkey_len, &num_key, 0, &pos)
 -                              && Z_TYPE_PP(wval) == IS_ARRAY) {
++      ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(options), wkey, wval) {
 +              if (wkey && Z_TYPE_P(wval) == IS_ARRAY) {
  
-                   ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(wval), num_key, okey, oval) {
 -                      zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(wval), &opos);
 -                      while (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(wval), (void**)&oval, &opos)) {
 -
 -                              if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(Z_ARRVAL_PP(wval), &okey, &okey_len, &num_key, 0, &opos)) {
 -                                      php_stream_context_set_option(context, wkey, okey, *oval);
++                  ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(wval), okey, oval) {
 +                              if (okey) {
 +                                      php_stream_context_set_option(context, wkey->val, okey->val, oval);
                                }
 -                              zend_hash_move_forward_ex(Z_ARRVAL_PP(wval), &opos);
 -                      }
 +                      } ZEND_HASH_FOREACH_END();
  
                } else {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "options should have the form [\"wrappername\"][\"optionname\"] = $value");
Simple merge
Simple merge
index e55c05b953ebd9a94a0607dbd221fb7239365e93,1f745b574a6a7294fb79bcfe0abefd3414442fa6..69453159030d53046134423193e781662362f360
@@@ -179,34 -180,46 +179,39 @@@ php_stream_filter_status_t userfilter_f
        zval zpropname;
        int call_result;
  
 -      if (FAILURE == zend_hash_find(Z_OBJPROP_P(obj), "stream", sizeof("stream"), (void**)&zstream)) {
+       /* the userfilter object probably doesn't exist anymore */
+       if (CG(unclean_shutdown)) {
+               return ret;
+       }
 +      if (!zend_hash_str_exists(Z_OBJPROP_P(obj), "stream", sizeof("stream")-1)) {
 +              zval tmp;
 +
                /* Give the userfilter class a hook back to the stream */
 -              ALLOC_INIT_ZVAL(zstream);
 -              php_stream_to_zval(stream, zstream);
 -              zval_copy_ctor(zstream);
 -              add_property_zval(obj, "stream", zstream);
 +              php_stream_to_zval(stream, &tmp);
 +              zval_copy_ctor(&tmp);
 +              add_property_zval(obj, "stream", &tmp);
                /* add_property_zval increments the refcount which is unwanted here */
 -              zval_ptr_dtor(&zstream);
 +              zval_ptr_dtor(&tmp);
        }
  
 -      ZVAL_STRINGL(&func_name, "filter", sizeof("filter")-1, 0);
 +      ZVAL_STRINGL(&func_name, "filter", sizeof("filter")-1);
  
        /* Setup calling arguments */
 -      ALLOC_INIT_ZVAL(zin);
 -      ZEND_REGISTER_RESOURCE(zin, buckets_in, le_bucket_brigade);
 -      args[0] = &zin;
 +      ZEND_REGISTER_RESOURCE(&args[0], buckets_in, le_bucket_brigade);
  
 -      ALLOC_INIT_ZVAL(zout);
 -      ZEND_REGISTER_RESOURCE(zout, buckets_out, le_bucket_brigade);
 -      args[1] = &zout;
 +      ZEND_REGISTER_RESOURCE(&args[1], buckets_out, le_bucket_brigade);
  
 -      ALLOC_INIT_ZVAL(zconsumed);
        if (bytes_consumed) {
 -              ZVAL_LONG(zconsumed, *bytes_consumed);
 +              ZVAL_LONG(&args[2], *bytes_consumed);
        } else {
 -              ZVAL_NULL(zconsumed);
 +              ZVAL_NULL(&args[2]);
        }
 -      args[2] = &zconsumed;
  
 -      ALLOC_INIT_ZVAL(zclosing);
 -      ZVAL_BOOL(zclosing, flags & PSFS_FLAG_FLUSH_CLOSE);
 -      args[3] = &zclosing;
 +      ZVAL_BOOL(&args[3], flags & PSFS_FLAG_FLUSH_CLOSE);
  
        call_result = call_user_function_ex(NULL,
 -                      &obj,
 +                      obj,
                        &func_name,
                        &retval,
                        4, args,
index 2525350bbcd21187c9747c994bf4ed8331838f05,003bac9547370bbefab8f562a918e365d61b0502..e1d899587ce2acc27bd1b8e5df9690b3a8668a0c
@@@ -411,7 -396,15 +411,15 @@@ static inline long object_common1(UNSER
  
        (*p) += 2;
        
-       object_init_ex(rval, ce);
+       if (ce->serialize == NULL) {
 -              object_init_ex(*rval, ce);
++              object_init_ex(rval, ce);
+       } else {
+               /* If this class implements Serializable, it should not land here but in object_custom(). The passed string
+               obviously doesn't descend from the regular serializer. */
 -              zend_error(E_WARNING, "Erroneous data format for unserializing '%s'", ce->name);
++              zend_error(E_WARNING, "Erroneous data format for unserializing '%s'", ce->name->val);
+               return 0;
+       }
        return elements;
  }
  
  #endif
  static inline int object_common2(UNSERIALIZE_PARAMETER, long elements)
  {
 -      zval *retval_ptr = NULL;
 +      zval retval;
        zval fname;
  
 -      if (Z_TYPE_PP(rval) != IS_OBJECT) {
++      if (Z_TYPE_P(rval) != IS_OBJECT) {
+               return 0;
+       }
 -      if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_PP(rval), elements, 1)) {
 +      //??? TODO: resize before
 +      if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_P(rval), elements, 1)) {
                return 0;
        }
  
@@@ -468,8 -466,10 +480,8 @@@ PHPAPI int php_var_unserialize(UNSERIAL
  
        start = cursor;
  
 -      
 -      
  
--#line 473 "ext/standard/var_unserializer.c"
++#line 485 "ext/standard/var_unserializer.c"
  {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@@ -529,9 -529,9 +541,9 @@@ yy2
        yych = *(YYMARKER = ++YYCURSOR);
        if (yych == ':') goto yy95;
  yy3:
- #line 817 "ext/standard/var_unserializer.re"
 -#line 824 "ext/standard/var_unserializer.re"
++#line 829 "ext/standard/var_unserializer.re"
        { return 0; }
--#line 535 "ext/standard/var_unserializer.c"
++#line 547 "ext/standard/var_unserializer.c"
  yy4:
        yych = *(YYMARKER = ++YYCURSOR);
        if (yych == ':') goto yy89;
@@@ -574,13 -574,13 +586,13 @@@ yy13
        goto yy3;
  yy14:
        ++YYCURSOR;
- #line 811 "ext/standard/var_unserializer.re"
 -#line 818 "ext/standard/var_unserializer.re"
++#line 823 "ext/standard/var_unserializer.re"
        {
        /* this is the case where we have less data than planned */
        php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data");
        return 0; /* not sure if it should be 0 or 1 here? */
  }
--#line 584 "ext/standard/var_unserializer.c"
++#line 596 "ext/standard/var_unserializer.c"
  yy16:
        yych = *++YYCURSOR;
        goto yy3;
@@@ -610,7 -610,7 +622,7 @@@ yy20
        yych = *++YYCURSOR;
        if (yych != '"') goto yy18;
        ++YYCURSOR;
--#line 672 "ext/standard/var_unserializer.re"
++#line 684 "ext/standard/var_unserializer.re"
        {
        size_t len, len2, len3, maxlen;
        long elements;
  
        return object_common2(UNSERIALIZE_PASSTHRU, elements);
  }
- #line 753 "ext/standard/var_unserializer.c"
 -#line 760 "ext/standard/var_unserializer.c"
++#line 765 "ext/standard/var_unserializer.c"
  yy25:
        yych = *++YYCURSOR;
        if (yych <= ',') {
@@@ -774,15 -781,15 +786,15 @@@ yy27
        yych = *++YYCURSOR;
        if (yych != '"') goto yy18;
        ++YYCURSOR;
--#line 664 "ext/standard/var_unserializer.re"
++#line 676 "ext/standard/var_unserializer.re"
        {
  
 -      INIT_PZVAL(*rval);
 +//??? INIT_PZVAL(rval);
        
        return object_common2(UNSERIALIZE_PASSTHRU,
                        object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
  }
- #line 786 "ext/standard/var_unserializer.c"
 -#line 793 "ext/standard/var_unserializer.c"
++#line 798 "ext/standard/var_unserializer.c"
  yy32:
        yych = *++YYCURSOR;
        if (yych == '+') goto yy33;
@@@ -803,7 -810,7 +815,7 @@@ yy34
        yych = *++YYCURSOR;
        if (yych != '{') goto yy18;
        ++YYCURSOR;
- #line 643 "ext/standard/var_unserializer.re"
 -#line 644 "ext/standard/var_unserializer.re"
++#line 655 "ext/standard/var_unserializer.re"
        {
        long elements = parse_iv(start + 2);
        /* use iv() not uiv() in order to check data range */
  
        return finish_nested_data(UNSERIALIZE_PASSTHRU);
  }
- #line 828 "ext/standard/var_unserializer.c"
 -#line 834 "ext/standard/var_unserializer.c"
++#line 840 "ext/standard/var_unserializer.c"
  yy39:
        yych = *++YYCURSOR;
        if (yych == '+') goto yy40;
@@@ -845,10 -851,9 +857,10 @@@ yy41
        yych = *++YYCURSOR;
        if (yych != '"') goto yy18;
        ++YYCURSOR;
- #line 613 "ext/standard/var_unserializer.re"
 -#line 615 "ext/standard/var_unserializer.re"
++#line 625 "ext/standard/var_unserializer.re"
        {
        size_t len, maxlen;
 +//??? TODO: use zend_string* instead of char*
        char *str;
  
        len = parse_uiv(start + 2);
        YYCURSOR += 2;
        *p = YYCURSOR;
  
 -      INIT_PZVAL(*rval);
 -      ZVAL_STRINGL(*rval, str, len, 0);
 +      ZVAL_STRINGL(rval, str, len);
 +      efree(str);
        return 1;
  }
- #line 879 "ext/standard/var_unserializer.c"
 -#line 884 "ext/standard/var_unserializer.c"
++#line 891 "ext/standard/var_unserializer.c"
  yy46:
        yych = *++YYCURSOR;
        if (yych == '+') goto yy47;
@@@ -896,7 -901,7 +908,7 @@@ yy48
        yych = *++YYCURSOR;
        if (yych != '"') goto yy18;
        ++YYCURSOR;
- #line 586 "ext/standard/var_unserializer.re"
 -#line 587 "ext/standard/var_unserializer.re"
++#line 598 "ext/standard/var_unserializer.re"
        {
        size_t len, maxlen;
        char *str;
        YYCURSOR += 2;
        *p = YYCURSOR;
  
 -      INIT_PZVAL(*rval);
 -      ZVAL_STRINGL(*rval, str, len, 1);
 +      ZVAL_STRINGL(rval, str, len);
        return 1;
  }
- #line 927 "ext/standard/var_unserializer.c"
 -#line 933 "ext/standard/var_unserializer.c"
++#line 939 "ext/standard/var_unserializer.c"
  yy53:
        yych = *++YYCURSOR;
        if (yych <= '/') {
@@@ -1011,16 -1017,17 +1023,16 @@@ yy61
        }
  yy63:
        ++YYCURSOR;
--#line 577 "ext/standard/var_unserializer.re"
++#line 589 "ext/standard/var_unserializer.re"
        {
  #if SIZEOF_LONG == 4
  use_double:
  #endif
        *p = YYCURSOR;
 -      INIT_PZVAL(*rval);
 -      ZVAL_DOUBLE(*rval, zend_strtod((const char *)start + 2, NULL));
 +      ZVAL_DOUBLE(rval, zend_strtod((const char *)start + 2, NULL));
        return 1;
  }
- #line 1024 "ext/standard/var_unserializer.c"
 -#line 1031 "ext/standard/var_unserializer.c"
++#line 1036 "ext/standard/var_unserializer.c"
  yy65:
        yych = *++YYCURSOR;
        if (yych <= ',') {
@@@ -1079,23 -1086,22 +1091,23 @@@ yy73
        yych = *++YYCURSOR;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
- #line 561 "ext/standard/var_unserializer.re"
 -#line 562 "ext/standard/var_unserializer.re"
++#line 573 "ext/standard/var_unserializer.re"
        {
        *p = YYCURSOR;
 -      INIT_PZVAL(*rval);
 -
 -      if (!strncmp(start + 2, "NAN", 3)) {
 -              ZVAL_DOUBLE(*rval, php_get_nan());
 -      } else if (!strncmp(start + 2, "INF", 3)) {
 -              ZVAL_DOUBLE(*rval, php_get_inf());
 -      } else if (!strncmp(start + 2, "-INF", 4)) {
 -              ZVAL_DOUBLE(*rval, -php_get_inf());
 +
 +      if (!strncmp((char*)start + 2, "NAN", 3)) {
 +              ZVAL_DOUBLE(rval, php_get_nan());
 +      } else if (!strncmp((char*)start + 2, "INF", 3)) {
 +              ZVAL_DOUBLE(rval, php_get_inf());
 +      } else if (!strncmp((char*)start + 2, "-INF", 4)) {
 +              ZVAL_DOUBLE(rval, -php_get_inf());
 +      } else {
 +              ZVAL_NULL(rval);
        }
  
        return 1;
  }
- #line 1099 "ext/standard/var_unserializer.c"
 -#line 1105 "ext/standard/var_unserializer.c"
++#line 1111 "ext/standard/var_unserializer.c"
  yy76:
        yych = *++YYCURSOR;
        if (yych == 'N') goto yy73;
@@@ -1122,7 -1128,7 +1134,7 @@@ yy79
        if (yych <= '9') goto yy79;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
--#line 535 "ext/standard/var_unserializer.re"
++#line 547 "ext/standard/var_unserializer.re"
        {
  #if SIZEOF_LONG == 4
        int digits = YYCURSOR - start - 3;
        }
  #endif
        *p = YYCURSOR;
 -      INIT_PZVAL(*rval);
 -      ZVAL_LONG(*rval, parse_iv(start + 2));
 +      ZVAL_LONG(rval, parse_iv(start + 2));
        return 1;
  }
- #line 1152 "ext/standard/var_unserializer.c"
 -#line 1159 "ext/standard/var_unserializer.c"
++#line 1164 "ext/standard/var_unserializer.c"
  yy83:
        yych = *++YYCURSOR;
        if (yych <= '/') goto yy18;
        yych = *++YYCURSOR;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
- #line 529 "ext/standard/var_unserializer.re"
 -#line 528 "ext/standard/var_unserializer.re"
++#line 541 "ext/standard/var_unserializer.re"
        {
        *p = YYCURSOR;
 -      INIT_PZVAL(*rval);
 -      ZVAL_BOOL(*rval, parse_iv(start + 2));
 +      ZVAL_BOOL(rval, parse_iv(start + 2));
        return 1;
  }
- #line 1166 "ext/standard/var_unserializer.c"
 -#line 1174 "ext/standard/var_unserializer.c"
++#line 1178 "ext/standard/var_unserializer.c"
  yy87:
        ++YYCURSOR;
- #line 523 "ext/standard/var_unserializer.re"
 -#line 521 "ext/standard/var_unserializer.re"
++#line 535 "ext/standard/var_unserializer.re"
        {
        *p = YYCURSOR;
 -      INIT_PZVAL(*rval);
 -      ZVAL_NULL(*rval);
 +      ZVAL_NULL(rval);
        return 1;
  }
- #line 1175 "ext/standard/var_unserializer.c"
 -#line 1184 "ext/standard/var_unserializer.c"
++#line 1187 "ext/standard/var_unserializer.c"
  yy89:
        yych = *++YYCURSOR;
        if (yych <= ',') {
@@@ -1194,7 -1203,7 +1206,7 @@@ yy91
        if (yych <= '9') goto yy91;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
- #line 500 "ext/standard/var_unserializer.re"
 -#line 498 "ext/standard/var_unserializer.re"
++#line 512 "ext/standard/var_unserializer.re"
        {
        long id;
  
        
        return 1;
  }
- #line 1221 "ext/standard/var_unserializer.c"
 -#line 1230 "ext/standard/var_unserializer.c"
++#line 1233 "ext/standard/var_unserializer.c"
  yy95:
        yych = *++YYCURSOR;
        if (yych <= ',') {
@@@ -1240,7 -1249,7 +1252,7 @@@ yy97
        if (yych <= '9') goto yy97;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
--#line 477 "ext/standard/var_unserializer.re"
++#line 489 "ext/standard/var_unserializer.re"
        {
        long id;
  
        
        return 1;
  }
- #line 1267 "ext/standard/var_unserializer.c"
 -#line 1274 "ext/standard/var_unserializer.c"
++#line 1279 "ext/standard/var_unserializer.c"
  }
- #line 819 "ext/standard/var_unserializer.re"
 -#line 826 "ext/standard/var_unserializer.re"
++#line 831 "ext/standard/var_unserializer.re"
  
  
        return 0;
index c4595a63c45d39952b975955f15a42db14045ce0,b3f5d29ca2185c31ae24b310baa8807c15033d41..70bff6704b9ad57c3d914d30de3286c4d4e50118
@@@ -415,7 -400,15 +415,15 @@@ static inline long object_common1(UNSER
  
        (*p) += 2;
        
-       object_init_ex(rval, ce);
+       if (ce->serialize == NULL) {
 -              object_init_ex(*rval, ce);
++              object_init_ex(rval, ce);
+       } else {
+               /* If this class implements Serializable, it should not land here but in object_custom(). The passed string
+               obviously doesn't descend from the regular serializer. */
 -              zend_error(E_WARNING, "Erroneous data format for unserializing '%s'", ce->name);
++              zend_error(E_WARNING, "Erroneous data format for unserializing '%s'", ce->name->val);
+               return 0;
+       }
        return elements;
  }
  
  #endif
  static inline int object_common2(UNSERIALIZE_PARAMETER, long elements)
  {
 -      zval *retval_ptr = NULL;
 +      zval retval;
        zval fname;
  
 -      if (Z_TYPE_PP(rval) != IS_OBJECT) {
++      if (Z_TYPE_P(rval) != IS_OBJECT) {
+               return 0;
+       }
 -      if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_PP(rval), elements, 1)) {
 +      //??? TODO: resize before
 +      if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_P(rval), elements, 1)) {
                return 0;
        }
  
Simple merge
Simple merge
diff --cc main/SAPI.c
Simple merge
diff --cc main/SAPI.h
Simple merge
diff --cc main/main.c
Simple merge
diff --cc main/output.c
Simple merge
Simple merge
diff --cc main/php_ini.c
Simple merge
Simple merge
index 4202db5aa2b46a549ca605d6456d583d529521b9,fef905ff7d439e098c83a7d5872119ad4ff9e93b..547dbd5582cc83ee6e0255f0bcc27f11bbff6e5d
@@@ -656,9 -688,13 +656,9 @@@ static void php_autoglobal_merge(HashTa
  }
  /* }}} */
  
 -static zend_bool php_auto_globals_create_server(const char *name, uint name_len TSRMLS_DC);
 -static zend_bool php_auto_globals_create_env(const char *name, uint name_len TSRMLS_DC);
 -static zend_bool php_auto_globals_create_request(const char *name, uint name_len TSRMLS_DC);
 -
  /* {{{ php_hash_environment
   */
- int php_hash_environment(TSRMLS_D)
PHPAPI int php_hash_environment(TSRMLS_D)
  {
        memset(PG(http_globals), 0, sizeof(PG(http_globals)));
        zend_activate_auto_globals(TSRMLS_C);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge