]> granicus.if.org Git - php/commitdiff
Implement variadic function syntax
authorNikita Popov <nikic@php.net>
Thu, 26 Sep 2013 16:39:17 +0000 (18:39 +0200)
committerNikita Popov <nikic@php.net>
Thu, 26 Sep 2013 16:39:17 +0000 (18:39 +0200)
As per RFC: https://wiki.php.net/rfc/variadics

43 files changed:
NEWS
UPGRADING
UPGRADING.INTERNALS
Zend/tests/variadic/adding_additional_optional_parameter.phpt [new file with mode: 0644]
Zend/tests/variadic/adding_additional_optional_parameter_error.phpt [new file with mode: 0644]
Zend/tests/variadic/basic.phpt [new file with mode: 0644]
Zend/tests/variadic/by_ref.phpt [new file with mode: 0644]
Zend/tests/variadic/by_ref_error.phpt [new file with mode: 0644]
Zend/tests/variadic/no_default_error.phpt [new file with mode: 0644]
Zend/tests/variadic/non_variadic_implements_variadic_error.phpt [new file with mode: 0644]
Zend/tests/variadic/only_last_error.phpt [new file with mode: 0644]
Zend/tests/variadic/optional_params.phpt [new file with mode: 0644]
Zend/tests/variadic/removing_parameter_error.phpt [new file with mode: 0644]
Zend/tests/variadic/typehint_error.phpt [new file with mode: 0644]
Zend/tests/variadic/typehint_suppressed_error.phpt [new file with mode: 0644]
Zend/tests/variadic/variadic_changed_byref_error.phpt [new file with mode: 0644]
Zend/tests/variadic/variadic_changed_typehint_error.phpt [new file with mode: 0644]
Zend/tests/variadic/variadic_implements_non_variadic.phpt [new file with mode: 0644]
Zend/zend_API.c
Zend/zend_API.h
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_execute.c
Zend/zend_language_parser.y
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Zend/zend_vm_opcodes.h
ext/mbstring/mbstring.c
ext/mysqli/mysqli_fe.c
ext/opcache/Optimizer/block_pass.c
ext/pdo/pdo_dbh.c
ext/reflection/php_reflection.c
ext/reflection/tests/ReflectionFunction_isVariadic_basic.phpt [new file with mode: 0644]
ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt
ext/reflection/tests/ReflectionParameter_isVariadic_basic.phpt [new file with mode: 0644]
ext/reflection/tests/ReflectionParameter_toString_basic.phpt
ext/spl/spl_directory.c
ext/spl/tests/bug51532.phpt
ext/sqlite3/sqlite3.c
ext/standard/basic_functions.c
ext/tokenizer/tokenizer_data.c

diff --git a/NEWS b/NEWS
index 540f896fe4c684ea3dfd496bc370ee05fe0920ba..95acaa66692f76102d5e64cb10d6b6954e2d6f4a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,8 @@ PHP                                                                        NEWS
   . Reduced POST data memory usage by 200-300%. Removed INI setting
     always_populate_raw_post_data and the $HTTP_RAW_POST_DATA global
     variable. (Mike)
+  . Implemented dedicated syntax for variadic functions
+    (RFC: https://wiki.php.net/rfc/variadics). (Nikita)
 
 - cURL:
   . Implemented FR #65646 (re-enable CURLOPT_FOLLOWLOCATION with open_basedir
index 581a38e2ad2ecb5a3ffaaeb45481c75ad984f079..87b9eefeedb5242efeb54fafcdbba8d603851f4f 100755 (executable)
--- a/UPGRADING
+++ b/UPGRADING
@@ -34,8 +34,10 @@ PHP X.Y UPGRADE NOTES
 2. New Features
 ========================================
 
-- Core:
-  The php://input stream is now re-usable and can be used concurrently with 
+- Added dedicated syntax for variadic functions.
+  (https://wiki.php.net/rfc/variadics)
+
+- The php://input stream is now re-usable and can be used concurrently with 
   enable_post_data_reading=0.
 
 ========================================
index 90202f00f03ca8efdc903506c3e28233fc417ae0..d1aca29dc4533b6bfde8f0986695818df9883e1b 100644 (file)
@@ -6,6 +6,7 @@ UPGRADE NOTES - PHP X.Y
   a. Addition of do_operation and compare object handlers
   b. return_value_ptr now always available, RETVAL_ZVAL_FAST macros
   c. POST data handling
+  d. Arginfo changes
 
 2. Build system changes
   a. Unix build system changes
@@ -68,6 +69,47 @@ UPGRADE NOTES - PHP X.Y
   The recommended way to access raw POST data is to open and use a php://input 
   stream wrapper.  It is safe to be used concurrently and more than once. 
 
+  d. Arginfo changes
+
+  The pass_rest_by_reference argument of the ZEND_BEGIN_ARG_INFO and
+  ZEND_BEGIN_ARG_INFO_EX() is no longer used. The value passed to it is ignored.
+
+  Instead a variadic argument is created using ZEND_ARG_VARIADIC_INFO():
+
+      ZEND_ARG_VARIADIC_INFO(0, name) /* pass rest by value */
+      ZEND_ARG_VARIADIC_INFO(1, name) /* pass rest by reference */
+      ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, name)
+          /* pass rest by prefer-ref */
+
+  ZEND_ARG_VARIADIC_INFO() should only be used for the last argument.
+
+  The following changes were applied to the zend_arg_info struct:
+
+       typedef struct _zend_arg_info {
+           const char *class_name;
+           zend_uint class_name_len;
+           zend_uchar type_hint;
+      +    zend_uchar pass_by_reference;
+           zend_bool allow_null;
+      -    zend_bool pass_by_reference;
+      +    zend_bool is_variadic;
+       } zend_arg_info;
+
+  The following changes were applied to the zend_internal_function_info struct:
+
+       typedef struct _zend_internal_function_info {
+           zend_uint required_num_args;
+           zend_uchar _type_hint;
+           zend_bool return_reference;
+      -    zend_bool pass_rest_by_reference;
+      +    zend_bool _allow_null;
+      +    zend_bool _is_variadic;
+       } zend_internal_function_info;
+
+  The CHECK_ARG_SEND_TYPE(), ARG_MUST_BE_SENT_BY_REF(),
+  ARG_SHOULD_BE_SENT_BY_REF() and ARG_MAY_BE_SENT_BY_REF() macros now assume
+  that the argument passed to them is a zend_function* and that it is non-NULL.
+
 ========================
 2. Build system changes
 ========================
diff --git a/Zend/tests/variadic/adding_additional_optional_parameter.phpt b/Zend/tests/variadic/adding_additional_optional_parameter.phpt
new file mode 100644 (file)
index 0000000..b4e7978
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+It's possible to add additional optional arguments with matching signature
+--FILE--
+<?php
+
+interface DB {
+    public function query($query, string ...$params);
+}
+
+class MySQL implements DB {
+    public function query($query, string $extraParam = null, string ...$params) { }
+}
+
+?>
+===DONE===
+--EXPECT--
+===DONE===
diff --git a/Zend/tests/variadic/adding_additional_optional_parameter_error.phpt b/Zend/tests/variadic/adding_additional_optional_parameter_error.phpt
new file mode 100644 (file)
index 0000000..2f31d47
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+Additional optional parameters must have a matching prototype
+--FILE--
+<?php
+
+interface DB {
+    public function query($query, string ...$params);
+}
+
+class MySQL implements DB {
+    public function query($query, int $extraParam = null, string ...$params) { }
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of MySQL::query() must be compatible with DB::query($query, string ...$params) in %s on line %d
diff --git a/Zend/tests/variadic/basic.phpt b/Zend/tests/variadic/basic.phpt
new file mode 100644 (file)
index 0000000..810d475
--- /dev/null
@@ -0,0 +1,57 @@
+--TEST--
+Basic variadic function
+--FILE--
+<?php
+
+function test1(... $args) {
+    var_dump($args);
+}
+
+test1();
+test1(1);
+test1(1, 2, 3);
+
+function test2($arg1, $arg2, ...$args) {
+    var_dump($arg1, $arg2, $args);
+}
+
+test2(1, 2);
+test2(1, 2, 3);
+test2(1, 2, 3, 4, 5);
+
+?>
+--EXPECT--
+array(0) {
+}
+array(1) {
+  [0]=>
+  int(1)
+}
+array(3) {
+  [0]=>
+  int(1)
+  [1]=>
+  int(2)
+  [2]=>
+  int(3)
+}
+int(1)
+int(2)
+array(0) {
+}
+int(1)
+int(2)
+array(1) {
+  [0]=>
+  int(3)
+}
+int(1)
+int(2)
+array(3) {
+  [0]=>
+  int(3)
+  [1]=>
+  int(4)
+  [2]=>
+  int(5)
+}
diff --git a/Zend/tests/variadic/by_ref.phpt b/Zend/tests/variadic/by_ref.phpt
new file mode 100644 (file)
index 0000000..e1635f4
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+Variadic arguments with by-reference passing
+--FILE--
+<?php
+
+function test(&... $args) {
+    $i = 0;
+    foreach ($args as &$arg) {
+        $arg = $i++;
+    }
+}
+
+test();
+test($a);
+var_dump($a);
+test($b, $c, $d);
+var_dump($b, $c, $d);
+
+?>
+--EXPECT--
+int(0)
+int(0)
+int(1)
+int(2)
diff --git a/Zend/tests/variadic/by_ref_error.phpt b/Zend/tests/variadic/by_ref_error.phpt
new file mode 100644 (file)
index 0000000..7f21014
--- /dev/null
@@ -0,0 +1,12 @@
+--TEST--
+By-ref variadics enforce the reference
+--FILE--
+<?php
+
+function test(&... $args) { }
+
+test(1);
+
+?>
+--EXPECTF--
+Fatal error: Only variables can be passed by reference in %s on line %d
diff --git a/Zend/tests/variadic/no_default_error.phpt b/Zend/tests/variadic/no_default_error.phpt
new file mode 100644 (file)
index 0000000..427ebed
--- /dev/null
@@ -0,0 +1,10 @@
+--TEST--
+Variadic argument cannot have a default value
+--FILE--
+<?php
+
+function test(...$args = 123) {}
+
+?>
+--EXPECTF--
+Fatal error: Variadic parameter cannot have a default value in %s on line %d
diff --git a/Zend/tests/variadic/non_variadic_implements_variadic_error.phpt b/Zend/tests/variadic/non_variadic_implements_variadic_error.phpt
new file mode 100644 (file)
index 0000000..f447837
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+It's not possible to turn a variadic function into a non-variadic one
+--FILE--
+<?php
+
+interface DB {
+    public function query($query, ...$params);
+}
+
+class MySQL implements DB {
+    public function query($query, $params) { }
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of MySQL::query() must be compatible with DB::query($query, ...$params) in %s on line %d
diff --git a/Zend/tests/variadic/only_last_error.phpt b/Zend/tests/variadic/only_last_error.phpt
new file mode 100644 (file)
index 0000000..ee6ff3f
--- /dev/null
@@ -0,0 +1,10 @@
+--TEST--
+Only the last argument can be variadic
+--FILE--
+<?php
+
+function test($foo, ...$bar, $baz) {}
+
+?>
+--EXPECTF--
+Fatal error: Only the last parameter can be variadic in %s on line %d
diff --git a/Zend/tests/variadic/optional_params.phpt b/Zend/tests/variadic/optional_params.phpt
new file mode 100644 (file)
index 0000000..ba965e5
--- /dev/null
@@ -0,0 +1,49 @@
+--TEST--
+Optional parameter before variadic parameter
+--FILE--
+<?php
+
+function fn($reqParam, $optParam = null, ...$params) {
+    var_dump($reqParam, $optParam, $params);
+}
+fn(1);
+fn(1, 2);
+fn(1, 2, 3);
+fn(1, 2, 3, 4);
+fn(1, 2, 3, 4, 5);
+
+?>
+--EXPECT--
+int(1)
+NULL
+array(0) {
+}
+int(1)
+int(2)
+array(0) {
+}
+int(1)
+int(2)
+array(1) {
+  [0]=>
+  int(3)
+}
+int(1)
+int(2)
+array(2) {
+  [0]=>
+  int(3)
+  [1]=>
+  int(4)
+}
+int(1)
+int(2)
+array(3) {
+  [0]=>
+  int(3)
+  [1]=>
+  int(4)
+  [2]=>
+  int(5)
+}
diff --git a/Zend/tests/variadic/removing_parameter_error.phpt b/Zend/tests/variadic/removing_parameter_error.phpt
new file mode 100644 (file)
index 0000000..a189e5c
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+It's not possible to remove required parameter before a variadic parameter
+--FILE--
+<?php
+
+/* Theoretically this should be valid because it weakens the constraint, but
+ * PHP does not allow this (for non-variadics), so I'm not allowing it here, too,
+ * to stay consistent. */
+
+interface DB {
+    public function query($query, ...$params);
+}
+
+class MySQL implements DB {
+    public function query(...$params) { }
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of MySQL::query() must be compatible with DB::query($query, ...$params) in %s on line %d
diff --git a/Zend/tests/variadic/typehint_error.phpt b/Zend/tests/variadic/typehint_error.phpt
new file mode 100644 (file)
index 0000000..3006b99
--- /dev/null
@@ -0,0 +1,36 @@
+--TEST--
+Variadic arguments enforce typehints
+--FILE--
+<?php
+
+function test(array... $args) {
+    var_dump($args);
+}
+
+test();
+test([0], [1], [2]);
+test([0], [1], 2);
+
+?>
+--EXPECTF--
+array(0) {
+}
+array(3) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(0)
+  }
+  [1]=>
+  array(1) {
+    [0]=>
+    int(1)
+  }
+  [2]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}
+
+Catchable fatal error: Argument 3 passed to test() must be of the type array, integer given, called in %s on line %d
diff --git a/Zend/tests/variadic/typehint_suppressed_error.phpt b/Zend/tests/variadic/typehint_suppressed_error.phpt
new file mode 100644 (file)
index 0000000..5048e1c
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Error suppression for typehints on variadic arguments works
+--FILE--
+<?php
+
+function test(array... $args) {
+    var_dump($args);
+}
+
+set_error_handler(function($errno, $errstr) {
+    var_dump($errstr);
+    return true;
+});
+
+test([0], [1], 2);
+
+?>
+--EXPECTF--
+string(%d) "Argument 3 passed to test() must be of the type array, integer given, called in %s on line %d and defined"
+array(3) {
+  [0]=>
+  array(1) {
+    [0]=>
+    int(0)
+  }
+  [1]=>
+  array(1) {
+    [0]=>
+    int(1)
+  }
+  [2]=>
+  int(2)
+}
diff --git a/Zend/tests/variadic/variadic_changed_byref_error.phpt b/Zend/tests/variadic/variadic_changed_byref_error.phpt
new file mode 100644 (file)
index 0000000..14fb6ae
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+Variadic arguments must have compatible passing modes
+--FILE--
+<?php
+
+interface DB {
+    public function query($query, &...$params);
+}
+
+class MySQL implements DB {
+    public function query($query, ...$params) { }
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of MySQL::query() must be compatible with DB::query($query, &...$params) in %s on line %d
diff --git a/Zend/tests/variadic/variadic_changed_typehint_error.phpt b/Zend/tests/variadic/variadic_changed_typehint_error.phpt
new file mode 100644 (file)
index 0000000..00df33a
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+Typehints for variadic arguments have to be compatible
+--FILE--
+<?php
+
+interface DB {
+    public function query($query, string ...$params);
+}
+
+class MySQL implements DB {
+    public function query($query, int ...$params) { }
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of MySQL::query() must be compatible with DB::query($query, string ...$params) in %s on line %d
diff --git a/Zend/tests/variadic/variadic_implements_non_variadic.phpt b/Zend/tests/variadic/variadic_implements_non_variadic.phpt
new file mode 100644 (file)
index 0000000..a66ec28
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+A non-variadic function can be turned into a variadic one
+--FILE--
+<?php
+
+interface DB {
+    public function query($query);
+}
+
+class MySQL implements DB {
+    public function query($query, ...$params) { }
+}
+
+?>
+===DONE===
+--EXPECT--
+===DONE===
index 6241df1cad39b48f6a4295c03b58cec1e2b4bd18..5fa7fb908e500d336c465b8f3e9c38ce986b498f 100644 (file)
@@ -2090,16 +2090,12 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
                        } else {
                                internal_function->required_num_args = info->required_num_args;
                        }
-                       if (info->pass_rest_by_reference) {
-                               if (info->pass_rest_by_reference == ZEND_SEND_PREFER_REF) {
-                                       internal_function->fn_flags |= ZEND_ACC_PASS_REST_PREFER_REF;
-                               } else {
-                                       internal_function->fn_flags |= ZEND_ACC_PASS_REST_BY_REFERENCE;
-                               }
-                       }
                        if (info->return_reference) {
                                internal_function->fn_flags |= ZEND_ACC_RETURN_REFERENCE;
                        }
+                       if (ptr->arg_info[ptr->num_args].is_variadic) {
+                               internal_function->fn_flags |= ZEND_ACC_VARIADIC;
+                       }
                } else {
                        internal_function->arg_info = NULL;
                        internal_function->num_args = 0;
index 16e766d8a51ea8595e430370e6cdfee55659e94f..007d9896092beee18723ca36f88f88d3255359ef 100644 (file)
@@ -98,16 +98,18 @@ typedef struct _zend_fcall_info_cache {
 
 #define ZEND_FE_END            { NULL, NULL, NULL, 0, 0 }
 
-#define ZEND_ARG_INFO(pass_by_ref, name)                                                       { #name, sizeof(#name)-1, NULL, 0, 0, 0, pass_by_ref},
-#define ZEND_ARG_PASS_INFO(pass_by_ref)                                                                { NULL, 0, NULL, 0, 0, 0, pass_by_ref},
-#define ZEND_ARG_OBJ_INFO(pass_by_ref, name, classname, allow_null) { #name, sizeof(#name)-1, #classname, sizeof(#classname)-1, IS_OBJECT, allow_null, pass_by_ref},
-#define ZEND_ARG_ARRAY_INFO(pass_by_ref, name, allow_null) { #name, sizeof(#name)-1, NULL, 0, IS_ARRAY, allow_null, pass_by_ref},
-#define ZEND_ARG_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) { #name, sizeof(#name)-1, NULL, 0, type_hint, allow_null, pass_by_ref},
-#define ZEND_BEGIN_ARG_INFO_EX(name, pass_rest_by_reference, return_reference, required_num_args)      \
+#define ZEND_ARG_INFO(pass_by_ref, name)                                                       { #name, sizeof(#name)-1, NULL, 0, 0, pass_by_ref, 0, 0 },
+#define ZEND_ARG_PASS_INFO(pass_by_ref)                                                                { NULL, 0, NULL, 0, 0, pass_by_ref, 0, 0 },
+#define ZEND_ARG_OBJ_INFO(pass_by_ref, name, classname, allow_null) { #name, sizeof(#name)-1, #classname, sizeof(#classname)-1, IS_OBJECT, pass_by_ref, allow_null, 0 },
+#define ZEND_ARG_ARRAY_INFO(pass_by_ref, name, allow_null) { #name, sizeof(#name)-1, NULL, 0, IS_ARRAY, pass_by_ref, allow_null, 0 },
+#define ZEND_ARG_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) { #name, sizeof(#name)-1, NULL, 0, type_hint, pass_by_ref, allow_null, 0 },
+#define ZEND_ARG_VARIADIC_INFO(pass_by_ref, name)                                      { #name, sizeof(#name)-1, NULL, 0, 0, pass_by_ref, 0, 1 },
+
+#define ZEND_BEGIN_ARG_INFO_EX(name, _unused, return_reference, required_num_args)     \
        static const zend_arg_info name[] = {                                                                                                                                           \
-               { NULL, 0, NULL, required_num_args, 0, return_reference, pass_rest_by_reference},
-#define ZEND_BEGIN_ARG_INFO(name, pass_rest_by_reference)      \
-       ZEND_BEGIN_ARG_INFO_EX(name, pass_rest_by_reference, ZEND_RETURN_VALUE, -1)
+               { NULL, 0, NULL, required_num_args, 0, return_reference, 0, 0 },
+#define ZEND_BEGIN_ARG_INFO(name, _unused)     \
+       ZEND_BEGIN_ARG_INFO_EX(name, 0, ZEND_RETURN_VALUE, -1)
 #define ZEND_END_ARG_INFO()            };
 
 /* Name macros */
index 672f62b7eefa348be6a608ed8c114743d54516f2..90ff26297ae166f16ae050d53a1e7b5efe9881c6 100644 (file)
@@ -1822,7 +1822,7 @@ void zend_do_end_function_declaration(const znode *function_token TSRMLS_DC) /*
 }
 /* }}} */
 
-void zend_do_receive_arg(zend_uchar op, znode *varname, const znode *offset, const znode *initialization, znode *class_type, zend_uchar pass_by_reference TSRMLS_DC) /* {{{ */
+void zend_do_receive_arg(zend_uchar op, znode *varname, const znode *offset, const znode *initialization, znode *class_type, zend_uchar pass_by_reference, zend_bool is_variadic TSRMLS_DC) /* {{{ */
 {
        zend_op *opline;
        zend_arg_info *cur_arg_info;
@@ -1846,6 +1846,19 @@ void zend_do_receive_arg(zend_uchar op, znode *varname, const znode *offset, con
                }
        }
 
+       if (CG(active_op_array)->fn_flags & ZEND_ACC_VARIADIC) {
+               zend_error(E_COMPILE_ERROR, "Only the last parameter can be variadic");
+       }
+
+       if (is_variadic) {
+               if (op == ZEND_RECV_INIT) {
+                       zend_error(E_COMPILE_ERROR, "Variadic parameter cannot have a default value");
+               }
+
+               op = ZEND_RECV_VARIADIC;
+               CG(active_op_array)->fn_flags |= ZEND_ACC_VARIADIC;
+       }
+
        opline = get_next_op(CG(active_op_array) TSRMLS_CC);
        CG(active_op_array)->num_args++;
        opline->opcode = op;
@@ -1854,16 +1867,19 @@ void zend_do_receive_arg(zend_uchar op, znode *varname, const znode *offset, con
        if (op == ZEND_RECV_INIT) {
                SET_NODE(opline->op2, initialization);
        } else {
-               CG(active_op_array)->required_num_args = CG(active_op_array)->num_args;
                SET_UNUSED(opline->op2);
+               if (!is_variadic) {
+                       CG(active_op_array)->required_num_args = CG(active_op_array)->num_args;
+               }
        }
        CG(active_op_array)->arg_info = erealloc(CG(active_op_array)->arg_info, sizeof(zend_arg_info)*(CG(active_op_array)->num_args));
        cur_arg_info = &CG(active_op_array)->arg_info[CG(active_op_array)->num_args-1];
        cur_arg_info->name = zend_new_interned_string(estrndup(Z_STRVAL(varname->u.constant), Z_STRLEN(varname->u.constant)), Z_STRLEN(varname->u.constant) + 1, 1 TSRMLS_CC);
        cur_arg_info->name_len = Z_STRLEN(varname->u.constant);
        cur_arg_info->type_hint = 0;
-       cur_arg_info->allow_null = 1;
        cur_arg_info->pass_by_reference = pass_by_reference;
+       cur_arg_info->allow_null = 1;
+       cur_arg_info->is_variadic = is_variadic;
        cur_arg_info->class_name = NULL;
        cur_arg_info->class_name_len = 0;
 
@@ -3083,7 +3099,7 @@ static void do_inherit_method(zend_function *function) /* {{{ */
 
 static zend_bool zend_do_perform_implementation_check(const zend_function *fe, const zend_function *proto TSRMLS_DC) /* {{{ */
 {
-       zend_uint i;
+       zend_uint i, num_args;
 
        /* If it's a user function then arg_info == NULL means we don't have any parameters but
         * we still need to do the arg number checks.  We are only willing to ignore this for internal
@@ -3113,48 +3129,66 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
                return 0;
        }
 
-       if (fe->common.type != ZEND_USER_FUNCTION
-               && (proto->common.fn_flags & ZEND_ACC_PASS_REST_BY_REFERENCE) != 0
-               && (fe->common.fn_flags & ZEND_ACC_PASS_REST_BY_REFERENCE) == 0) {
-               return 0;
-       }
-
        /* by-ref constraints on return values are covariant */
        if ((proto->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
                && !(fe->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
                return 0;
        }
 
-       for (i=0; i < proto->common.num_args; i++) {
-               if (ZEND_LOG_XOR(fe->common.arg_info[i].class_name, proto->common.arg_info[i].class_name)) {
+       if ((proto->common.fn_flags & ZEND_ACC_VARIADIC)
+               && !(fe->common.fn_flags & ZEND_ACC_VARIADIC)) {
+               return 0;
+       }
+
+       /* For variadic functions any additional (optional) arguments that were added must be
+        * checked against the signature of the variadic argument, so in this case we have to
+        * go through all the parameters of the function and not just those present in the
+        * prototype. */
+       num_args = proto->common.num_args;
+       if ((fe->common.fn_flags & ZEND_ACC_VARIADIC)
+               && fe->common.num_args > proto->common.num_args) {
+               num_args = fe->common.num_args;
+       }
+
+       for (i = 0; i < num_args; i++) {
+               zend_arg_info *fe_arg_info = &fe->common.arg_info[i];
+
+               zend_arg_info *proto_arg_info;
+               if (i < proto->common.num_args) {
+                       proto_arg_info = &proto->common.arg_info[i];
+               } else {
+                       proto_arg_info = &proto->common.arg_info[proto->common.num_args-1];
+               }
+
+               if (ZEND_LOG_XOR(fe_arg_info->class_name, proto_arg_info->class_name)) {
                        /* Only one has a type hint and the other one doesn't */
                        return 0;
                }
 
-               if (fe->common.arg_info[i].class_name) {
+               if (fe_arg_info->class_name) {
                        const char *fe_class_name, *proto_class_name;
                        zend_uint fe_class_name_len, proto_class_name_len;
 
-                       if (!strcasecmp(fe->common.arg_info[i].class_name, "parent") && proto->common.scope) {
+                       if (!strcasecmp(fe_arg_info->class_name, "parent") && proto->common.scope) {
                                fe_class_name = proto->common.scope->name;
                                fe_class_name_len = proto->common.scope->name_length;
-                       } else if (!strcasecmp(fe->common.arg_info[i].class_name, "self") && fe->common.scope) {
+                       } else if (!strcasecmp(fe_arg_info->class_name, "self") && fe->common.scope) {
                                fe_class_name = fe->common.scope->name;
                                fe_class_name_len = fe->common.scope->name_length;
                        } else {
-                               fe_class_name = fe->common.arg_info[i].class_name;
-                               fe_class_name_len = fe->common.arg_info[i].class_name_len;
+                               fe_class_name = fe_arg_info->class_name;
+                               fe_class_name_len = fe_arg_info->class_name_len;
                        }
 
-                       if (!strcasecmp(proto->common.arg_info[i].class_name, "parent") && proto->common.scope && proto->common.scope->parent) {
+                       if (!strcasecmp(proto_arg_info->class_name, "parent") && proto->common.scope && proto->common.scope->parent) {
                                proto_class_name = proto->common.scope->parent->name;
                                proto_class_name_len = proto->common.scope->parent->name_length;
-                       } else if (!strcasecmp(proto->common.arg_info[i].class_name, "self") && proto->common.scope) {
+                       } else if (!strcasecmp(proto_arg_info->class_name, "self") && proto->common.scope) {
                                proto_class_name = proto->common.scope->name;
                                proto_class_name_len = proto->common.scope->name_length;
                        } else {
-                               proto_class_name = proto->common.arg_info[i].class_name;
-                               proto_class_name_len = proto->common.arg_info[i].class_name_len;
+                               proto_class_name = proto_arg_info->class_name;
+                               proto_class_name_len = proto_arg_info->class_name_len;
                        }
 
                        if (strcasecmp(fe_class_name, proto_class_name)!=0) {
@@ -3181,24 +3215,17 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
                                }
                        }
                }
-               if (fe->common.arg_info[i].type_hint != proto->common.arg_info[i].type_hint) {
+               if (fe_arg_info->type_hint != proto_arg_info->type_hint) {
                        /* Incompatible type hint */
                        return 0;
                }
 
                /* by-ref constraints on arguments are invariant */
-               if (fe->common.arg_info[i].pass_by_reference != proto->common.arg_info[i].pass_by_reference) {
+               if (fe_arg_info->pass_by_reference != proto_arg_info->pass_by_reference) {
                        return 0;
                }
        }
 
-       if (proto->common.fn_flags & ZEND_ACC_PASS_REST_BY_REFERENCE) {
-               for (i=proto->common.num_args; i < fe->common.num_args; i++) {
-                       if (!fe->common.arg_info[i].pass_by_reference) {
-                               return 0;
-                       }
-               }
-       }
        return 1;
 }
 /* }}} */
@@ -3271,6 +3298,13 @@ static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* {{
                        if (arg_info->pass_by_reference) {
                                *(offset++) = '&';
                        }
+
+                       if (arg_info->is_variadic) {
+                               *(offset++) = '.';
+                               *(offset++) = '.';
+                               *(offset++) = '.';
+                       }
+
                        *(offset++) = '$';
 
                        if (arg_info->name) {
@@ -3286,7 +3320,7 @@ static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* {{
                                        idx /= 10;
                                } while (idx > 0);
                        }
-                       if (i >= required) {
+                       if (i >= required && !arg_info->is_variadic) {
                                *(offset++) = ' ';
                                *(offset++) = '=';
                                *(offset++) = ' ';
index 61d11427a1e4963d165c16ebdb65461d8b9ff45f..0e070294125c80930cd9627040fbd684f8dd483d 100644 (file)
@@ -207,8 +207,7 @@ typedef struct _zend_try_catch_element {
 /* disable inline caching */
 #define ZEND_ACC_NEVER_CACHE          0x400000
 
-#define ZEND_ACC_PASS_REST_BY_REFERENCE 0x1000000
-#define ZEND_ACC_PASS_REST_PREFER_REF  0x2000000
+#define ZEND_ACC_VARIADIC                              0x1000000
 
 #define ZEND_ACC_RETURN_REFERENCE              0x4000000
 #define ZEND_ACC_DONE_PASS_TWO                 0x8000000
@@ -234,8 +233,9 @@ typedef struct _zend_arg_info {
        const char *class_name;
        zend_uint class_name_len;
        zend_uchar type_hint;
+       zend_uchar pass_by_reference;
        zend_bool allow_null;
-       zend_bool pass_by_reference;
+       zend_bool is_variadic;
 } zend_arg_info;
 
 /* the following structure repeats the layout of zend_arg_info,
@@ -249,7 +249,8 @@ typedef struct _zend_internal_function_info {
        zend_uint required_num_args;
        zend_uchar _type_hint;
        zend_bool return_reference;
-       zend_bool pass_rest_by_reference;
+       zend_bool _allow_null;
+       zend_bool _is_variadic;
 } zend_internal_function_info;
 
 typedef struct _zend_compiled_variable {
@@ -500,7 +501,7 @@ void zend_do_add_variable(znode *result, const znode *op1, const znode *op2 TSRM
 int zend_do_verify_access_types(const znode *current_access_type, const znode *new_modifier);
 void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference, znode *fn_flags_znode TSRMLS_DC);
 void zend_do_end_function_declaration(const znode *function_token TSRMLS_DC);
-void zend_do_receive_arg(zend_uchar op, znode *varname, const znode *offset, const znode *initialization, znode *class_type, zend_bool pass_by_reference TSRMLS_DC);
+void zend_do_receive_arg(zend_uchar op, znode *varname, const znode *offset, const znode *initialization, znode *class_type, zend_bool pass_by_reference, zend_bool is_variadic TSRMLS_DC);
 int zend_do_begin_function_call(znode *function_name, zend_bool check_namespace TSRMLS_DC);
 void zend_do_begin_method_call(znode *left_bracket TSRMLS_DC);
 void zend_do_clone(znode *result, const znode *expr TSRMLS_DC);
@@ -817,21 +818,21 @@ int zend_add_literal(zend_op_array *op_array, const zval *zv TSRMLS_DC);
 #define ZEND_SEND_BY_REF     1
 #define ZEND_SEND_PREFER_REF 2
 
-#define CHECK_ARG_SEND_TYPE(zf, arg_num, m1, m2)                                                                                       \
-       ((zf) &&                                                                                                                                                                \
-         ((((zend_function*)(zf))->common.arg_info &&                                                                                  \
-           arg_num <= ((zend_function*)(zf))->common.num_args) ?                                                               \
-          (((zend_function *)(zf))->common.arg_info[arg_num-1].pass_by_reference & (m1)) :             \
-       (((zend_function *)(zf))->common.fn_flags & (m2))))
+#define CHECK_ARG_SEND_TYPE(zf, arg_num, m) \
+       ((zf)->common.arg_info && \
+       (arg_num <= (zf)->common.num_args \
+               ? ((zf)->common.arg_info[arg_num-1].pass_by_reference & (m)) \
+               : ((zf)->common.fn_flags & ZEND_ACC_VARIADIC) \
+                       ? ((zf)->common.arg_info[(zf)->common.num_args-1].pass_by_reference & (m)) : 0))
 
 #define ARG_MUST_BE_SENT_BY_REF(zf, arg_num) \
-       CHECK_ARG_SEND_TYPE(zf, arg_num, ZEND_SEND_BY_REF, ZEND_ACC_PASS_REST_BY_REFERENCE)
+       CHECK_ARG_SEND_TYPE(zf, arg_num, ZEND_SEND_BY_REF)
 
 #define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \
-       CHECK_ARG_SEND_TYPE(zf, arg_num, ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF, ZEND_ACC_PASS_REST_BY_REFERENCE|ZEND_ACC_PASS_REST_PREFER_REF)
+       CHECK_ARG_SEND_TYPE(zf, arg_num, ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF)
 
 #define ARG_MAY_BE_SENT_BY_REF(zf, arg_num) \
-       CHECK_ARG_SEND_TYPE(zf, arg_num, ZEND_SEND_PREFER_REF, ZEND_ACC_PASS_REST_PREFER_REF)
+       CHECK_ARG_SEND_TYPE(zf, arg_num, ZEND_SEND_PREFER_REF)
 
 #define ZEND_RETURN_VAL 0
 #define ZEND_RETURN_REF 1
index c79a55169c86ed5fc679357acaddcf3259abbaf2..9f78218d3de35272aa610657e0eb692142654e6f 100644 (file)
@@ -616,12 +616,17 @@ static inline int zend_verify_arg_type(zend_function *zf, zend_uint arg_num, zva
        char *need_msg;
        zend_class_entry *ce;
 
-       if (!zf->common.arg_info
-               || arg_num>zf->common.num_args) {
+       if (!zf->common.arg_info) {
                return 1;
        }
 
-       cur_arg_info = &zf->common.arg_info[arg_num-1];
+       if (arg_num <= zf->common.num_args) {
+               cur_arg_info = &zf->common.arg_info[arg_num-1];
+       } else if (zf->common.fn_flags & ZEND_ACC_VARIADIC) {
+               cur_arg_info = &zf->common.arg_info[zf->common.num_args-1];
+       } else {
+               return 1;
+       }
 
        if (cur_arg_info->class_name) {
                const char *class_name;
index 403146e16486e30273537fe696816adc9396c2d2..4523783dec8ce86ecea73f41777cfb4465e966b6 100644 (file)
@@ -212,6 +212,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
 %token T_NS_C            "__NAMESPACE__ (T_NS_C)"
 %token T_DIR             "__DIR__ (T_DIR)"
 %token T_NS_SEPARATOR    "\\ (T_NS_SEPARATOR)"
+%token T_ELLIPSIS        "... (T_ELLIPSIS)"
 
 %% /* Rules */
 
@@ -371,10 +372,14 @@ class_declaration_statement:
 ;
 
 is_reference:
-               /* empty */     { $$.op_type = ZEND_RETURN_VAL; }
-       |       '&'                     { $$.op_type = ZEND_RETURN_REF; }
+               /* empty */     { $$.op_type = 0; }
+       |       '&'                     { $$.op_type = 1; }
 ;
 
+is_variadic:
+               /* empty */ { $$.op_type = 0; }
+       |       T_ELLIPSIS  { $$.op_type = 1; }
+;
 
 unticked_function_declaration_statement:
                function is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$3, 0, $2.op_type, NULL TSRMLS_CC); }
@@ -523,14 +528,14 @@ parameter_list:
 
 
 non_empty_parameter_list:
-               optional_class_type T_VARIABLE                          { $$.op_type = IS_UNUSED; $$.u.op.num=1; zend_do_receive_arg(ZEND_RECV, &$2, &$$, NULL, &$1, 0 TSRMLS_CC); }
-       |       optional_class_type '&' T_VARIABLE                      { $$.op_type = IS_UNUSED; $$.u.op.num=1; zend_do_receive_arg(ZEND_RECV, &$3, &$$, NULL, &$1, 1 TSRMLS_CC); }
-       |       optional_class_type '&' T_VARIABLE '=' static_scalar                    { $$.op_type = IS_UNUSED; $$.u.op.num=1; zend_do_receive_arg(ZEND_RECV_INIT, &$3, &$$, &$5, &$1, 1 TSRMLS_CC); }
-       |       optional_class_type T_VARIABLE '=' static_scalar                                { $$.op_type = IS_UNUSED; $$.u.op.num=1; zend_do_receive_arg(ZEND_RECV_INIT, &$2, &$$, &$4, &$1, 0 TSRMLS_CC); }
-       |       non_empty_parameter_list ',' optional_class_type T_VARIABLE     { $$=$1; $$.u.op.num++; zend_do_receive_arg(ZEND_RECV, &$4, &$$, NULL, &$3, 0 TSRMLS_CC); }
-       |       non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE { $$=$1; $$.u.op.num++; zend_do_receive_arg(ZEND_RECV, &$5, &$$, NULL, &$3, 1 TSRMLS_CC); }
-       |       non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE  '=' static_scalar { $$=$1; $$.u.op.num++; zend_do_receive_arg(ZEND_RECV_INIT, &$5, &$$, &$7, &$3, 1 TSRMLS_CC); }
-       |       non_empty_parameter_list ',' optional_class_type T_VARIABLE '=' static_scalar   { $$=$1; $$.u.op.num++; zend_do_receive_arg(ZEND_RECV_INIT, &$4, &$$, &$6, &$3, 0 TSRMLS_CC); }
+               optional_class_type is_reference is_variadic T_VARIABLE
+                       { $$.op_type = IS_UNUSED; $$.u.op.num=1; zend_do_receive_arg(ZEND_RECV, &$4, &$$, NULL, &$1, $2.op_type, $3.op_type TSRMLS_CC); }
+       |       optional_class_type is_reference is_variadic T_VARIABLE '=' static_scalar
+                       { $$.op_type = IS_UNUSED; $$.u.op.num=1; zend_do_receive_arg(ZEND_RECV_INIT, &$4, &$$, &$6, &$1, $2.op_type, $3.op_type TSRMLS_CC); }
+       |       non_empty_parameter_list ',' optional_class_type is_reference is_variadic T_VARIABLE
+                       { $$=$1; $$.u.op.num++; zend_do_receive_arg(ZEND_RECV, &$6, &$$, NULL, &$3, $4.op_type, $5.op_type TSRMLS_CC); }
+       |       non_empty_parameter_list ',' optional_class_type is_reference is_variadic T_VARIABLE '=' static_scalar
+                       { $$=$1; $$.u.op.num++; zend_do_receive_arg(ZEND_RECV_INIT, &$6, &$$, &$8, &$3, $4.op_type, $5.op_type TSRMLS_CC); }
 ;
 
 
index d5768d33455698c586d3fed6d9f3c1785c6e2c54..12ee1f59c2da0a441824e2a73ad120b94129efe3 100644 (file)
@@ -1096,7 +1096,7 @@ yyc_INITIAL:
 yy3:
                YYDEBUG(3, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1738 "Zend/zend_language_scanner.l"
+#line 1741 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -1174,7 +1174,7 @@ yy5:
 yy6:
                YYDEBUG(6, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1728 "Zend/zend_language_scanner.l"
+#line 1731 "Zend/zend_language_scanner.l"
                {
        if (CG(short_tags)) {
                ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
@@ -1191,7 +1191,7 @@ yy7:
                if ((yych = *YYCURSOR) == '=') goto yy43;
                YYDEBUG(8, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1709 "Zend/zend_language_scanner.l"
+#line 1712 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
@@ -1387,7 +1387,7 @@ yy35:
                ++YYCURSOR;
                YYDEBUG(38, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1675 "Zend/zend_language_scanner.l"
+#line 1678 "Zend/zend_language_scanner.l"
                {
        YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));
 
@@ -1429,7 +1429,7 @@ yy43:
                ++YYCURSOR;
                YYDEBUG(44, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1691 "Zend/zend_language_scanner.l"
+#line 1694 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
@@ -1445,7 +1445,7 @@ yy45:
                ++YYCURSOR;
                YYDEBUG(46, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1702 "Zend/zend_language_scanner.l"
+#line 1705 "Zend/zend_language_scanner.l"
                {
        ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        BEGIN(ST_IN_SCRIPTING);
@@ -1478,7 +1478,7 @@ yy50:
 yy51:
                YYDEBUG(51, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1720 "Zend/zend_language_scanner.l"
+#line 1723 "Zend/zend_language_scanner.l"
                {
        ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        HANDLE_NEWLINE(yytext[yyleng-1]);
@@ -1556,7 +1556,7 @@ yyc_ST_BACKQUOTE:
 yy56:
                YYDEBUG(56, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2183 "Zend/zend_language_scanner.l"
+#line 2186 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -1608,7 +1608,7 @@ yy58:
                ++YYCURSOR;
                YYDEBUG(59, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2127 "Zend/zend_language_scanner.l"
+#line 2130 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '`';
@@ -1623,7 +1623,7 @@ yy61:
                ++YYCURSOR;
                YYDEBUG(62, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2114 "Zend/zend_language_scanner.l"
+#line 2117 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1646,7 +1646,7 @@ yy63:
 yy65:
                YYDEBUG(65, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1820 "Zend/zend_language_scanner.l"
+#line 1823 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
@@ -1658,7 +1658,7 @@ yy66:
                ++YYCURSOR;
                YYDEBUG(67, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1454 "Zend/zend_language_scanner.l"
+#line 1457 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
@@ -1677,7 +1677,7 @@ yy70:
                ++YYCURSOR;
                YYDEBUG(71, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1812 "Zend/zend_language_scanner.l"
+#line 1815 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1703,7 +1703,7 @@ yy73:
                ++YYCURSOR;
                YYDEBUG(74, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1802 "Zend/zend_language_scanner.l"
+#line 1805 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1779,7 +1779,7 @@ yy77:
 yy78:
                YYDEBUG(78, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2133 "Zend/zend_language_scanner.l"
+#line 2136 "Zend/zend_language_scanner.l"
                {
        if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
                YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1839,7 +1839,7 @@ yy80:
                ++YYCURSOR;
                YYDEBUG(81, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2122 "Zend/zend_language_scanner.l"
+#line 2125 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '"';
@@ -1854,7 +1854,7 @@ yy83:
                ++YYCURSOR;
                YYDEBUG(84, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2114 "Zend/zend_language_scanner.l"
+#line 2117 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1877,7 +1877,7 @@ yy85:
 yy87:
                YYDEBUG(87, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1820 "Zend/zend_language_scanner.l"
+#line 1823 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
@@ -1889,7 +1889,7 @@ yy88:
                ++YYCURSOR;
                YYDEBUG(89, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1454 "Zend/zend_language_scanner.l"
+#line 1457 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
@@ -1908,7 +1908,7 @@ yy92:
                ++YYCURSOR;
                YYDEBUG(93, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1812 "Zend/zend_language_scanner.l"
+#line 1815 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1934,7 +1934,7 @@ yy95:
                ++YYCURSOR;
                YYDEBUG(96, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1802 "Zend/zend_language_scanner.l"
+#line 1805 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1953,7 +1953,7 @@ yyc_ST_END_HEREDOC:
        ++YYCURSOR;
        YYDEBUG(100, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2100 "Zend/zend_language_scanner.l"
+#line 2103 "Zend/zend_language_scanner.l"
        {
        zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
 
@@ -2028,7 +2028,7 @@ yy103:
 yy104:
                YYDEBUG(104, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2225 "Zend/zend_language_scanner.l"
+#line 2228 "Zend/zend_language_scanner.l"
                {
        int newline = 0;
 
@@ -2116,7 +2116,7 @@ yy107:
                ++YYCURSOR;
                YYDEBUG(108, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2114 "Zend/zend_language_scanner.l"
+#line 2117 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -2139,7 +2139,7 @@ yy109:
 yy111:
                YYDEBUG(111, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1820 "Zend/zend_language_scanner.l"
+#line 1823 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
@@ -2151,7 +2151,7 @@ yy112:
                ++YYCURSOR;
                YYDEBUG(113, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1454 "Zend/zend_language_scanner.l"
+#line 1457 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
@@ -2170,7 +2170,7 @@ yy116:
                ++YYCURSOR;
                YYDEBUG(117, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1812 "Zend/zend_language_scanner.l"
+#line 1815 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -2196,7 +2196,7 @@ yy119:
                ++YYCURSOR;
                YYDEBUG(120, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1802 "Zend/zend_language_scanner.l"
+#line 1805 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -2281,14 +2281,14 @@ yyc_ST_IN_SCRIPTING:
                case '\n':
                case '\r':
                case ' ':       goto yy140;
-               case '!':       goto yy153;
+               case '!':       goto yy154;
                case '"':       goto yy180;
                case '#':       goto yy176;
                case '$':       goto yy165;
                case '%':       goto yy159;
                case '&':       goto yy160;
                case '\'':      goto yy178;
-               case '(':       goto yy147;
+               case '(':       goto yy148;
                case ')':
                case ',':
                case ';':
@@ -2296,11 +2296,11 @@ yyc_ST_IN_SCRIPTING:
                case '[':
                case ']':
                case '~':       goto yy166;
-               case '*':       goto yy156;
-               case '+':       goto yy152;
+               case '*':       goto yy157;
+               case '+':       goto yy153;
                case '-':       goto yy138;
-               case '.':       goto yy158;
-               case '/':       goto yy157;
+               case '.':       goto yy145;
+               case '/':       goto yy158;
                case '0':       goto yy172;
                case '1':
                case '2':
@@ -2312,9 +2312,9 @@ yyc_ST_IN_SCRIPTING:
                case '8':
                case '9':       goto yy174;
                case ':':       goto yy142;
-               case '<':       goto yy154;
-               case '=':       goto yy150;
-               case '>':       goto yy155;
+               case '<':       goto yy155;
+               case '=':       goto yy151;
+               case '>':       goto yy156;
                case '?':       goto yy167;
                case 'A':
                case 'a':       goto yy133;
@@ -2333,9 +2333,9 @@ yyc_ST_IN_SCRIPTING:
                case 'I':
                case 'i':       goto yy131;
                case 'L':
-               case 'l':       goto yy151;
+               case 'l':       goto yy152;
                case 'N':
-               case 'n':       goto yy145;
+               case 'n':       goto yy146;
                case 'O':
                case 'o':       goto yy163;
                case 'P':
@@ -2347,9 +2347,9 @@ yyc_ST_IN_SCRIPTING:
                case 'T':
                case 't':       goto yy130;
                case 'U':
-               case 'u':       goto yy148;
+               case 'u':       goto yy149;
                case 'V':
-               case 'v':       goto yy146;
+               case 'v':       goto yy147;
                case 'W':
                case 'w':       goto yy132;
                case 'X':
@@ -2358,7 +2358,7 @@ yyc_ST_IN_SCRIPTING:
                case 'y':       goto yy129;
                case '\\':      goto yy143;
                case '^':       goto yy162;
-               case '_':       goto yy149;
+               case '_':       goto yy150;
                case '`':       goto yy182;
                case '{':       goto yy168;
                case '|':       goto yy161;
@@ -2371,23 +2371,23 @@ yy123:
                YYDEBUG(-1, yych);
                switch ((yych = *YYCURSOR)) {
                case 'C':
-               case 'c':       goto yy735;
+               case 'c':       goto yy738;
                case 'L':
-               case 'l':       goto yy736;
+               case 'l':       goto yy739;
                case 'M':
-               case 'm':       goto yy737;
+               case 'm':       goto yy740;
                case 'N':
-               case 'n':       goto yy738;
+               case 'n':       goto yy741;
                case 'V':
-               case 'v':       goto yy739;
+               case 'v':       goto yy742;
                case 'X':
-               case 'x':       goto yy740;
+               case 'x':       goto yy743;
                default:        goto yy187;
                }
 yy124:
                YYDEBUG(124, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1843 "Zend/zend_language_scanner.l"
+#line 1846 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
@@ -2399,20 +2399,20 @@ yy125:
                yych = *++YYCURSOR;
                if (yych <= 'O') {
                        if (yych <= 'H') {
-                               if (yych == 'E') goto yy717;
+                               if (yych == 'E') goto yy720;
                                goto yy187;
                        } else {
-                               if (yych <= 'I') goto yy718;
+                               if (yych <= 'I') goto yy721;
                                if (yych <= 'N') goto yy187;
-                               goto yy719;
+                               goto yy722;
                        }
                } else {
                        if (yych <= 'h') {
-                               if (yych == 'e') goto yy717;
+                               if (yych == 'e') goto yy720;
                                goto yy187;
                        } else {
-                               if (yych <= 'i') goto yy718;
-                               if (yych == 'o') goto yy719;
+                               if (yych <= 'i') goto yy721;
+                               if (yych == 'o') goto yy722;
                                goto yy187;
                        }
                }
@@ -2421,20 +2421,20 @@ yy126:
                yych = *++YYCURSOR;
                if (yych <= 'U') {
                        if (yych <= 'N') {
-                               if (yych == 'I') goto yy693;
+                               if (yych == 'I') goto yy696;
                                goto yy187;
                        } else {
-                               if (yych <= 'O') goto yy694;
+                               if (yych <= 'O') goto yy697;
                                if (yych <= 'T') goto yy187;
-                               goto yy695;
+                               goto yy698;
                        }
                } else {
                        if (yych <= 'n') {
-                               if (yych == 'i') goto yy693;
+                               if (yych == 'i') goto yy696;
                                goto yy187;
                        } else {
-                               if (yych <= 'o') goto yy694;
-                               if (yych == 'u') goto yy695;
+                               if (yych <= 'o') goto yy697;
+                               if (yych == 'u') goto yy698;
                                goto yy187;
                        }
                }
@@ -2443,48 +2443,48 @@ yy127:
                yych = *++YYCURSOR;
                if (yych <= 'O') {
                        if (yych <= 'K') {
-                               if (yych == 'A') goto yy658;
+                               if (yych == 'A') goto yy661;
                                goto yy187;
                        } else {
-                               if (yych <= 'L') goto yy659;
+                               if (yych <= 'L') goto yy662;
                                if (yych <= 'N') goto yy187;
-                               goto yy660;
+                               goto yy663;
                        }
                } else {
                        if (yych <= 'k') {
-                               if (yych == 'a') goto yy658;
+                               if (yych == 'a') goto yy661;
                                goto yy187;
                        } else {
-                               if (yych <= 'l') goto yy659;
-                               if (yych == 'o') goto yy660;
+                               if (yych <= 'l') goto yy662;
+                               if (yych == 'o') goto yy663;
                                goto yy187;
                        }
                }
 yy128:
                YYDEBUG(128, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy640;
-               if (yych == 'e') goto yy640;
+               if (yych == 'E') goto yy643;
+               if (yych == 'e') goto yy643;
                goto yy187;
 yy129:
                YYDEBUG(129, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy635;
-               if (yych == 'i') goto yy635;
+               if (yych == 'I') goto yy638;
+               if (yych == 'i') goto yy638;
                goto yy187;
 yy130:
                YYDEBUG(130, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'R') {
-                       if (yych == 'H') goto yy623;
+                       if (yych == 'H') goto yy626;
                        if (yych <= 'Q') goto yy187;
-                       goto yy624;
+                       goto yy627;
                } else {
                        if (yych <= 'h') {
                                if (yych <= 'g') goto yy187;
-                               goto yy623;
+                               goto yy626;
                        } else {
-                               if (yych == 'r') goto yy624;
+                               if (yych == 'r') goto yy627;
                                goto yy187;
                        }
                }
@@ -2493,53 +2493,53 @@ yy131:
                yych = *++YYCURSOR;
                if (yych <= 'S') {
                        if (yych <= 'L') {
-                               if (yych == 'F') goto yy570;
+                               if (yych == 'F') goto yy573;
                                goto yy187;
                        } else {
-                               if (yych <= 'M') goto yy572;
-                               if (yych <= 'N') goto yy573;
+                               if (yych <= 'M') goto yy575;
+                               if (yych <= 'N') goto yy576;
                                if (yych <= 'R') goto yy187;
-                               goto yy574;
+                               goto yy577;
                        }
                } else {
                        if (yych <= 'm') {
-                               if (yych == 'f') goto yy570;
+                               if (yych == 'f') goto yy573;
                                if (yych <= 'l') goto yy187;
-                               goto yy572;
+                               goto yy575;
                        } else {
-                               if (yych <= 'n') goto yy573;
-                               if (yych == 's') goto yy574;
+                               if (yych <= 'n') goto yy576;
+                               if (yych == 's') goto yy577;
                                goto yy187;
                        }
                }
 yy132:
                YYDEBUG(132, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy565;
-               if (yych == 'h') goto yy565;
+               if (yych == 'H') goto yy568;
+               if (yych == 'h') goto yy568;
                goto yy187;
 yy133:
                YYDEBUG(133, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'S') {
                        if (yych <= 'M') {
-                               if (yych == 'B') goto yy547;
+                               if (yych == 'B') goto yy550;
                                goto yy187;
                        } else {
-                               if (yych <= 'N') goto yy548;
+                               if (yych <= 'N') goto yy551;
                                if (yych <= 'Q') goto yy187;
-                               if (yych <= 'R') goto yy549;
-                               goto yy550;
+                               if (yych <= 'R') goto yy552;
+                               goto yy553;
                        }
                } else {
                        if (yych <= 'n') {
-                               if (yych == 'b') goto yy547;
+                               if (yych == 'b') goto yy550;
                                if (yych <= 'm') goto yy187;
-                               goto yy548;
+                               goto yy551;
                        } else {
                                if (yych <= 'q') goto yy187;
-                               if (yych <= 'r') goto yy549;
-                               if (yych <= 's') goto yy550;
+                               if (yych <= 'r') goto yy552;
+                               if (yych <= 's') goto yy553;
                                goto yy187;
                        }
                }
@@ -2547,15 +2547,15 @@ yy134:
                YYDEBUG(134, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'W') {
-                       if (yych == 'T') goto yy535;
+                       if (yych == 'T') goto yy538;
                        if (yych <= 'V') goto yy187;
-                       goto yy536;
+                       goto yy539;
                } else {
                        if (yych <= 't') {
                                if (yych <= 's') goto yy187;
-                               goto yy535;
+                               goto yy538;
                        } else {
-                               if (yych == 'w') goto yy536;
+                               if (yych == 'w') goto yy539;
                                goto yy187;
                        }
                }
@@ -2566,18 +2566,18 @@ yy135:
                if (yych <= ';') {
                        if (yych <= '"') {
                                if (yych <= '!') goto yy187;
-                               goto yy527;
+                               goto yy530;
                        } else {
-                               if (yych == '\'') goto yy528;
+                               if (yych == '\'') goto yy531;
                                goto yy187;
                        }
                } else {
                        if (yych <= 'R') {
-                               if (yych <= '<') goto yy526;
+                               if (yych <= '<') goto yy529;
                                if (yych <= 'Q') goto yy187;
-                               goto yy529;
+                               goto yy532;
                        } else {
-                               if (yych == 'r') goto yy529;
+                               if (yych == 'r') goto yy532;
                                goto yy187;
                        }
                }
@@ -2585,15 +2585,15 @@ yy136:
                YYDEBUG(136, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'O') {
-                       if (yych == 'L') goto yy516;
+                       if (yych == 'L') goto yy519;
                        if (yych <= 'N') goto yy187;
-                       goto yy517;
+                       goto yy520;
                } else {
                        if (yych <= 'l') {
                                if (yych <= 'k') goto yy187;
-                               goto yy516;
+                               goto yy519;
                        } else {
-                               if (yych == 'o') goto yy517;
+                               if (yych == 'o') goto yy520;
                                goto yy187;
                        }
                }
@@ -2601,15 +2601,15 @@ yy137:
                YYDEBUG(137, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'U') {
-                       if (yych == 'R') goto yy492;
+                       if (yych == 'R') goto yy495;
                        if (yych <= 'T') goto yy187;
-                       goto yy493;
+                       goto yy496;
                } else {
                        if (yych <= 'r') {
                                if (yych <= 'q') goto yy187;
-                               goto yy492;
+                               goto yy495;
                        } else {
-                               if (yych == 'u') goto yy493;
+                               if (yych == 'u') goto yy496;
                                goto yy187;
                        }
                }
@@ -2617,15 +2617,15 @@ yy138:
                YYDEBUG(138, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '<') {
-                       if (yych == '-') goto yy488;
+                       if (yych == '-') goto yy491;
                } else {
-                       if (yych <= '=') goto yy486;
-                       if (yych <= '>') goto yy490;
+                       if (yych <= '=') goto yy489;
+                       if (yych <= '>') goto yy493;
                }
 yy139:
                YYDEBUG(139, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1443 "Zend/zend_language_scanner.l"
+#line 1446 "Zend/zend_language_scanner.l"
                {
        return yytext[0];
 }
@@ -2634,11 +2634,11 @@ yy140:
                YYDEBUG(140, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy485;
+               goto yy488;
 yy141:
                YYDEBUG(141, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1176 "Zend/zend_language_scanner.l"
+#line 1175 "Zend/zend_language_scanner.l"
                {
        ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        HANDLE_NEWLINES(yytext, yyleng);
@@ -2648,181 +2648,186 @@ yy141:
 yy142:
                YYDEBUG(142, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == ':') goto yy482;
+               if (yych == ':') goto yy485;
                goto yy139;
 yy143:
                YYDEBUG(143, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(144, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1203 "Zend/zend_language_scanner.l"
+#line 1202 "Zend/zend_language_scanner.l"
                {
        return T_NS_SEPARATOR;
 }
 #line 2663 "Zend/zend_language_scanner.c"
 yy145:
                YYDEBUG(145, *YYCURSOR);
+               yyaccept = 1;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych <= '/') {
+                       if (yych == '.') goto yy482;
+                       goto yy139;
+               } else {
+                       if (yych <= '9') goto yy478;
+                       if (yych == '=') goto yy480;
+                       goto yy139;
+               }
+yy146:
+               YYDEBUG(146, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'E') {
-                       if (yych == 'A') goto yy470;
+                       if (yych == 'A') goto yy466;
                        if (yych <= 'D') goto yy187;
-                       goto yy471;
+                       goto yy467;
                } else {
                        if (yych <= 'a') {
                                if (yych <= '`') goto yy187;
-                               goto yy470;
+                               goto yy466;
                        } else {
-                               if (yych == 'e') goto yy471;
+                               if (yych == 'e') goto yy467;
                                goto yy187;
                        }
                }
-yy146:
-               YYDEBUG(146, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy467;
-               if (yych == 'a') goto yy467;
-               goto yy187;
 yy147:
                YYDEBUG(147, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy463;
+               if (yych == 'a') goto yy463;
+               goto yy187;
+yy148:
+               YYDEBUG(148, *YYCURSOR);
                yyaccept = 1;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= 'S') {
                        if (yych <= 'D') {
                                if (yych <= ' ') {
-                                       if (yych == '\t') goto yy392;
+                                       if (yych == '\t') goto yy388;
                                        if (yych <= 0x1F) goto yy139;
-                                       goto yy392;
+                                       goto yy388;
                                } else {
                                        if (yych <= '@') goto yy139;
                                        if (yych == 'C') goto yy139;
-                                       goto yy392;
+                                       goto yy388;
                                }
                        } else {
                                if (yych <= 'I') {
-                                       if (yych == 'F') goto yy392;
+                                       if (yych == 'F') goto yy388;
                                        if (yych <= 'H') goto yy139;
-                                       goto yy392;
+                                       goto yy388;
                                } else {
-                                       if (yych == 'O') goto yy392;
+                                       if (yych == 'O') goto yy388;
                                        if (yych <= 'Q') goto yy139;
-                                       goto yy392;
+                                       goto yy388;
                                }
                        }
                } else {
                        if (yych <= 'f') {
                                if (yych <= 'b') {
-                                       if (yych == 'U') goto yy392;
+                                       if (yych == 'U') goto yy388;
                                        if (yych <= '`') goto yy139;
-                                       goto yy392;
+                                       goto yy388;
                                } else {
-                                       if (yych == 'd') goto yy392;
+                                       if (yych == 'd') goto yy388;
                                        if (yych <= 'e') goto yy139;
-                                       goto yy392;
+                                       goto yy388;
                                }
                        } else {
                                if (yych <= 'o') {
-                                       if (yych == 'i') goto yy392;
+                                       if (yych == 'i') goto yy388;
                                        if (yych <= 'n') goto yy139;
-                                       goto yy392;
+                                       goto yy388;
                                } else {
                                        if (yych <= 's') {
                                                if (yych <= 'q') goto yy139;
-                                               goto yy392;
+                                               goto yy388;
                                        } else {
-                                               if (yych == 'u') goto yy392;
+                                               if (yych == 'u') goto yy388;
                                                goto yy139;
                                        }
                                }
                        }
                }
-yy148:
-               YYDEBUG(148, *YYCURSOR);
+yy149:
+               YYDEBUG(149, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'S') {
-                       if (yych == 'N') goto yy383;
+                       if (yych == 'N') goto yy379;
                        if (yych <= 'R') goto yy187;
-                       goto yy384;
+                       goto yy380;
                } else {
                        if (yych <= 'n') {
                                if (yych <= 'm') goto yy187;
-                               goto yy383;
+                               goto yy379;
                        } else {
-                               if (yych == 's') goto yy384;
+                               if (yych == 's') goto yy380;
                                goto yy187;
                        }
                }
-yy149:
-               YYDEBUG(149, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy301;
-               goto yy187;
 yy150:
                YYDEBUG(150, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '<') goto yy139;
-               if (yych <= '=') goto yy295;
-               if (yych <= '>') goto yy297;
-               goto yy139;
+               if (yych == '_') goto yy297;
+               goto yy187;
 yy151:
                YYDEBUG(151, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy291;
-               if (yych == 'i') goto yy291;
-               goto yy187;
+               if (yych <= '<') goto yy139;
+               if (yych <= '=') goto yy291;
+               if (yych <= '>') goto yy293;
+               goto yy139;
 yy152:
                YYDEBUG(152, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '+') goto yy289;
-               if (yych == '=') goto yy287;
-               goto yy139;
+               if (yych == 'I') goto yy287;
+               if (yych == 'i') goto yy287;
+               goto yy187;
 yy153:
                YYDEBUG(153, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '=') goto yy284;
+               if (yych == '+') goto yy285;
+               if (yych == '=') goto yy283;
                goto yy139;
 yy154:
                YYDEBUG(154, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '=') goto yy280;
+               goto yy139;
+yy155:
+               YYDEBUG(155, *YYCURSOR);
                yyaccept = 1;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= ';') {
-                       if (yych == '/') goto yy256;
+                       if (yych == '/') goto yy252;
                        goto yy139;
                } else {
-                       if (yych <= '<') goto yy254;
-                       if (yych <= '=') goto yy257;
-                       if (yych <= '>') goto yy259;
+                       if (yych <= '<') goto yy250;
+                       if (yych <= '=') goto yy253;
+                       if (yych <= '>') goto yy255;
                        goto yy139;
                }
-yy155:
-               YYDEBUG(155, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= '<') goto yy139;
-               if (yych <= '=') goto yy250;
-               if (yych <= '>') goto yy248;
-               goto yy139;
 yy156:
                YYDEBUG(156, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '=') goto yy246;
+               if (yych <= '<') goto yy139;
+               if (yych <= '=') goto yy246;
+               if (yych <= '>') goto yy244;
                goto yy139;
 yy157:
                YYDEBUG(157, *YYCURSOR);
                yych = *++YYCURSOR;
+               if (yych == '=') goto yy242;
+               goto yy139;
+yy158:
+               YYDEBUG(158, *YYCURSOR);
+               yych = *++YYCURSOR;
                if (yych <= '.') {
-                       if (yych == '*') goto yy238;
+                       if (yych == '*') goto yy234;
                        goto yy139;
                } else {
-                       if (yych <= '/') goto yy240;
-                       if (yych == '=') goto yy241;
+                       if (yych <= '/') goto yy236;
+                       if (yych == '=') goto yy237;
                        goto yy139;
                }
-yy158:
-               YYDEBUG(158, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= '/') goto yy139;
-               if (yych <= '9') goto yy234;
-               if (yych == '=') goto yy236;
-               goto yy139;
 yy159:
                YYDEBUG(159, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2887,18 +2892,18 @@ yy168:
                ++YYCURSOR;
                YYDEBUG(169, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1448 "Zend/zend_language_scanner.l"
+#line 1451 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return '{';
 }
-#line 2896 "Zend/zend_language_scanner.c"
+#line 2901 "Zend/zend_language_scanner.c"
 yy170:
                YYDEBUG(170, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(171, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1460 "Zend/zend_language_scanner.l"
+#line 1463 "Zend/zend_language_scanner.l"
                {
        RESET_DOC_COMMENT();
        if (!zend_stack_is_empty(&SCNG(state_stack))) {
@@ -2906,7 +2911,7 @@ yy170:
        }
        return '}';
 }
-#line 2910 "Zend/zend_language_scanner.c"
+#line 2915 "Zend/zend_language_scanner.c"
 yy172:
                YYDEBUG(172, *YYCURSOR);
                yyaccept = 2;
@@ -2934,7 +2939,7 @@ yy172:
 yy173:
                YYDEBUG(173, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1510 "Zend/zend_language_scanner.l"
+#line 1513 "Zend/zend_language_scanner.l"
                {
        if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
                Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);
@@ -2955,7 +2960,7 @@ yy173:
        zendlval->type = IS_LONG;
        return T_LNUMBER;
 }
-#line 2959 "Zend/zend_language_scanner.c"
+#line 2964 "Zend/zend_language_scanner.c"
 yy174:
                YYDEBUG(174, *YYCURSOR);
                yyaccept = 2;
@@ -2983,7 +2988,7 @@ yy176:
 yy177:
                YYDEBUG(177, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1850 "Zend/zend_language_scanner.l"
+#line 1853 "Zend/zend_language_scanner.l"
                {
        while (YYCURSOR < YYLIMIT) {
                switch (*YYCURSOR++) {
@@ -3017,14 +3022,14 @@ yy177:
 
        return T_COMMENT;
 }
-#line 3021 "Zend/zend_language_scanner.c"
+#line 3026 "Zend/zend_language_scanner.c"
 yy178:
                YYDEBUG(178, *YYCURSOR);
                ++YYCURSOR;
 yy179:
                YYDEBUG(179, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1937 "Zend/zend_language_scanner.l"
+#line 1940 "Zend/zend_language_scanner.l"
                {
        register char *s, *t;
        char *end;
@@ -3090,14 +3095,14 @@ yy179:
        }
        return T_CONSTANT_ENCAPSED_STRING;
 }
-#line 3094 "Zend/zend_language_scanner.c"
+#line 3099 "Zend/zend_language_scanner.c"
 yy180:
                YYDEBUG(180, *YYCURSOR);
                ++YYCURSOR;
 yy181:
                YYDEBUG(181, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2004 "Zend/zend_language_scanner.l"
+#line 2007 "Zend/zend_language_scanner.l"
                {
        int bprefix = (yytext[0] != '"') ? 1 : 0;
 
@@ -3138,24 +3143,24 @@ yy181:
        BEGIN(ST_DOUBLE_QUOTES);
        return '"';
 }
-#line 3142 "Zend/zend_language_scanner.c"
+#line 3147 "Zend/zend_language_scanner.c"
 yy182:
                YYDEBUG(182, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(183, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2094 "Zend/zend_language_scanner.l"
+#line 2097 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_BACKQUOTE);
        return '`';
 }
-#line 3153 "Zend/zend_language_scanner.c"
+#line 3158 "Zend/zend_language_scanner.c"
 yy184:
                YYDEBUG(184, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(185, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2357 "Zend/zend_language_scanner.l"
+#line 2360 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -3164,7 +3169,7 @@ yy184:
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
        goto restart;
 }
-#line 3168 "Zend/zend_language_scanner.c"
+#line 3173 "Zend/zend_language_scanner.c"
 yy186:
                YYDEBUG(186, *YYCURSOR);
                ++YYCURSOR;
@@ -3191,12 +3196,12 @@ yy188:
 yy190:
                YYDEBUG(190, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1569 "Zend/zend_language_scanner.l"
+#line 1572 "Zend/zend_language_scanner.l"
                {
        ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL));
        return T_DNUMBER;
 }
-#line 3200 "Zend/zend_language_scanner.c"
+#line 3205 "Zend/zend_language_scanner.c"
 yy191:
                YYDEBUG(191, *YYCURSOR);
                yyaccept = 2;
@@ -3243,10 +3248,10 @@ yy194:
                                if (yyaccept <= 3) {
                                        goto yy190;
                                } else {
-                                       goto yy239;
+                                       goto yy235;
                                }
                        } else {
-                               goto yy255;
+                               goto yy251;
                        }
                }
 yy195:
@@ -3288,7 +3293,7 @@ yy200:
                }
                YYDEBUG(202, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1486 "Zend/zend_language_scanner.l"
+#line 1489 "Zend/zend_language_scanner.l"
                {
        char *bin = yytext + 2; /* Skip "0b" */
        int len = yyleng - 2;
@@ -3312,7 +3317,7 @@ yy200:
                return T_DNUMBER;
        }
 }
-#line 3316 "Zend/zend_language_scanner.c"
+#line 3321 "Zend/zend_language_scanner.c"
 yy203:
                YYDEBUG(203, *YYCURSOR);
                ++YYCURSOR;
@@ -3324,7 +3329,7 @@ yy203:
                }
                YYDEBUG(205, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1531 "Zend/zend_language_scanner.l"
+#line 1534 "Zend/zend_language_scanner.l"
                {
        char *hex = yytext + 2; /* Skip "0x" */
        int len = yyleng - 2;
@@ -3348,7 +3353,7 @@ yy203:
                return T_DNUMBER;
        }
 }
-#line 3352 "Zend/zend_language_scanner.c"
+#line 3357 "Zend/zend_language_scanner.c"
 yy206:
                YYDEBUG(206, *YYCURSOR);
                ++YYCURSOR;
@@ -3357,13 +3362,13 @@ yy206:
 yy207:
                YYDEBUG(207, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1918 "Zend/zend_language_scanner.l"
+#line 1921 "Zend/zend_language_scanner.l"
                {
        ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        BEGIN(INITIAL);
        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 }
-#line 3367 "Zend/zend_language_scanner.c"
+#line 3372 "Zend/zend_language_scanner.c"
 yy208:
                YYDEBUG(208, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3397,13 +3402,13 @@ yy210:
 yy212:
                YYDEBUG(212, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1820 "Zend/zend_language_scanner.l"
+#line 1823 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 3407 "Zend/zend_language_scanner.c"
+#line 3412 "Zend/zend_language_scanner.c"
 yy213:
                YYDEBUG(213, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3417,11 +3422,11 @@ yy214:
                }
                YYDEBUG(215, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1431 "Zend/zend_language_scanner.l"
+#line 1434 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_XOR;
 }
-#line 3425 "Zend/zend_language_scanner.c"
+#line 3430 "Zend/zend_language_scanner.c"
 yy216:
                YYDEBUG(216, *YYCURSOR);
                ++YYCURSOR;
@@ -3430,61 +3435,61 @@ yy216:
                }
                YYDEBUG(217, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1423 "Zend/zend_language_scanner.l"
+#line 1426 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_OR;
 }
-#line 3438 "Zend/zend_language_scanner.c"
+#line 3443 "Zend/zend_language_scanner.c"
 yy218:
                YYDEBUG(218, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(219, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1411 "Zend/zend_language_scanner.l"
+#line 1414 "Zend/zend_language_scanner.l"
                {
        return T_XOR_EQUAL;
 }
-#line 3448 "Zend/zend_language_scanner.c"
+#line 3453 "Zend/zend_language_scanner.c"
 yy220:
                YYDEBUG(220, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(221, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1415 "Zend/zend_language_scanner.l"
+#line 1418 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_OR;
 }
-#line 3458 "Zend/zend_language_scanner.c"
+#line 3463 "Zend/zend_language_scanner.c"
 yy222:
                YYDEBUG(222, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(223, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1407 "Zend/zend_language_scanner.l"
+#line 1410 "Zend/zend_language_scanner.l"
                {
        return T_OR_EQUAL;
 }
-#line 3468 "Zend/zend_language_scanner.c"
+#line 3473 "Zend/zend_language_scanner.c"
 yy224:
                YYDEBUG(224, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(225, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1419 "Zend/zend_language_scanner.l"
+#line 1422 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_AND;
 }
-#line 3478 "Zend/zend_language_scanner.c"
+#line 3483 "Zend/zend_language_scanner.c"
 yy226:
                YYDEBUG(226, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(227, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1403 "Zend/zend_language_scanner.l"
+#line 1406 "Zend/zend_language_scanner.l"
                {
        return T_AND_EQUAL;
 }
-#line 3488 "Zend/zend_language_scanner.c"
+#line 3493 "Zend/zend_language_scanner.c"
 yy228:
                YYDEBUG(228, *YYCURSOR);
                ++YYCURSOR;
@@ -3493,7 +3498,7 @@ yy228:
 yy229:
                YYDEBUG(229, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1925 "Zend/zend_language_scanner.l"
+#line 1928 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                BEGIN(INITIAL);
@@ -3504,17 +3509,17 @@ yy229:
                return yytext[0];
        }
 }
-#line 3508 "Zend/zend_language_scanner.c"
+#line 3513 "Zend/zend_language_scanner.c"
 yy230:
                YYDEBUG(230, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(231, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1391 "Zend/zend_language_scanner.l"
+#line 1394 "Zend/zend_language_scanner.l"
                {
        return T_MOD_EQUAL;
 }
-#line 3518 "Zend/zend_language_scanner.c"
+#line 3523 "Zend/zend_language_scanner.c"
 yy232:
                YYDEBUG(232, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3526,39 +3531,13 @@ yy233:
                goto yy229;
 yy234:
                YYDEBUG(234, *YYCURSOR);
-               yyaccept = 3;
-               YYMARKER = ++YYCURSOR;
-               YYFILL(3);
-               yych = *YYCURSOR;
-               YYDEBUG(235, *YYCURSOR);
-               if (yych <= 'D') {
-                       if (yych <= '/') goto yy190;
-                       if (yych <= '9') goto yy234;
-                       goto yy190;
-               } else {
-                       if (yych <= 'E') goto yy193;
-                       if (yych == 'e') goto yy193;
-                       goto yy190;
-               }
-yy236:
-               YYDEBUG(236, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(237, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1387 "Zend/zend_language_scanner.l"
-               {
-       return T_CONCAT_EQUAL;
-}
-#line 3553 "Zend/zend_language_scanner.c"
-yy238:
-               YYDEBUG(238, *YYCURSOR);
                yyaccept = 4;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == '*') goto yy243;
-yy239:
-               YYDEBUG(239, *YYCURSOR);
+               if (yych == '*') goto yy239;
+yy235:
+               YYDEBUG(235, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1884 "Zend/zend_language_scanner.l"
+#line 1887 "Zend/zend_language_scanner.l"
                {
        int doc_com;
 
@@ -3592,281 +3571,281 @@ yy239:
 
        return T_COMMENT;
 }
-#line 3596 "Zend/zend_language_scanner.c"
-yy240:
-               YYDEBUG(240, *YYCURSOR);
+#line 3575 "Zend/zend_language_scanner.c"
+yy236:
+               YYDEBUG(236, *YYCURSOR);
                yych = *++YYCURSOR;
                goto yy177;
-yy241:
-               YYDEBUG(241, *YYCURSOR);
+yy237:
+               YYDEBUG(237, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(242, *YYCURSOR);
+               YYDEBUG(238, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1383 "Zend/zend_language_scanner.l"
+#line 1386 "Zend/zend_language_scanner.l"
                {
        return T_DIV_EQUAL;
 }
-#line 3610 "Zend/zend_language_scanner.c"
-yy243:
-               YYDEBUG(243, *YYCURSOR);
+#line 3589 "Zend/zend_language_scanner.c"
+yy239:
+               YYDEBUG(239, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yybm[0+yych] & 64) {
-                       goto yy244;
+                       goto yy240;
                }
                goto yy194;
-yy244:
-               YYDEBUG(244, *YYCURSOR);
+yy240:
+               YYDEBUG(240, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(245, *YYCURSOR);
+               YYDEBUG(241, *YYCURSOR);
                if (yybm[0+yych] & 64) {
-                       goto yy244;
+                       goto yy240;
                }
-               goto yy239;
-yy246:
-               YYDEBUG(246, *YYCURSOR);
+               goto yy235;
+yy242:
+               YYDEBUG(242, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(247, *YYCURSOR);
+               YYDEBUG(243, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1379 "Zend/zend_language_scanner.l"
+#line 1382 "Zend/zend_language_scanner.l"
                {
        return T_MUL_EQUAL;
 }
-#line 3637 "Zend/zend_language_scanner.c"
-yy248:
-               YYDEBUG(248, *YYCURSOR);
+#line 3616 "Zend/zend_language_scanner.c"
+yy244:
+               YYDEBUG(244, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '=') goto yy252;
-               YYDEBUG(249, *YYCURSOR);
+               if ((yych = *YYCURSOR) == '=') goto yy248;
+               YYDEBUG(245, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1439 "Zend/zend_language_scanner.l"
+#line 1442 "Zend/zend_language_scanner.l"
                {
        return T_SR;
 }
-#line 3648 "Zend/zend_language_scanner.c"
-yy250:
-               YYDEBUG(250, *YYCURSOR);
+#line 3627 "Zend/zend_language_scanner.c"
+yy246:
+               YYDEBUG(246, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(251, *YYCURSOR);
+               YYDEBUG(247, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1367 "Zend/zend_language_scanner.l"
+#line 1370 "Zend/zend_language_scanner.l"
                {
        return T_IS_GREATER_OR_EQUAL;
 }
-#line 3658 "Zend/zend_language_scanner.c"
-yy252:
-               YYDEBUG(252, *YYCURSOR);
+#line 3637 "Zend/zend_language_scanner.c"
+yy248:
+               YYDEBUG(248, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(253, *YYCURSOR);
+               YYDEBUG(249, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1399 "Zend/zend_language_scanner.l"
+#line 1402 "Zend/zend_language_scanner.l"
                {
        return T_SR_EQUAL;
 }
-#line 3668 "Zend/zend_language_scanner.c"
-yy254:
-               YYDEBUG(254, *YYCURSOR);
+#line 3647 "Zend/zend_language_scanner.c"
+yy250:
+               YYDEBUG(250, *YYCURSOR);
                yyaccept = 5;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych <= ';') goto yy255;
-               if (yych <= '<') goto yy270;
-               if (yych <= '=') goto yy268;
-yy255:
-               YYDEBUG(255, *YYCURSOR);
+               if (yych <= ';') goto yy251;
+               if (yych <= '<') goto yy266;
+               if (yych <= '=') goto yy264;
+yy251:
+               YYDEBUG(251, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1435 "Zend/zend_language_scanner.l"
+#line 1438 "Zend/zend_language_scanner.l"
                {
        return T_SL;
 }
-#line 3683 "Zend/zend_language_scanner.c"
-yy256:
-               YYDEBUG(256, *YYCURSOR);
+#line 3662 "Zend/zend_language_scanner.c"
+yy252:
+               YYDEBUG(252, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy261;
-               if (yych == 's') goto yy261;
+               if (yych == 'S') goto yy257;
+               if (yych == 's') goto yy257;
                goto yy194;
-yy257:
-               YYDEBUG(257, *YYCURSOR);
+yy253:
+               YYDEBUG(253, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(258, *YYCURSOR);
+               YYDEBUG(254, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1363 "Zend/zend_language_scanner.l"
+#line 1366 "Zend/zend_language_scanner.l"
                {
        return T_IS_SMALLER_OR_EQUAL;
 }
-#line 3699 "Zend/zend_language_scanner.c"
-yy259:
-               YYDEBUG(259, *YYCURSOR);
+#line 3678 "Zend/zend_language_scanner.c"
+yy255:
+               YYDEBUG(255, *YYCURSOR);
                ++YYCURSOR;
-yy260:
-               YYDEBUG(260, *YYCURSOR);
+yy256:
+               YYDEBUG(256, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1359 "Zend/zend_language_scanner.l"
+#line 1362 "Zend/zend_language_scanner.l"
                {
        return T_IS_NOT_EQUAL;
 }
-#line 3710 "Zend/zend_language_scanner.c"
-yy261:
-               YYDEBUG(261, *YYCURSOR);
+#line 3689 "Zend/zend_language_scanner.c"
+yy257:
+               YYDEBUG(257, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy262;
+               if (yych == 'C') goto yy258;
                if (yych != 'c') goto yy194;
-yy262:
-               YYDEBUG(262, *YYCURSOR);
+yy258:
+               YYDEBUG(258, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy263;
+               if (yych == 'R') goto yy259;
                if (yych != 'r') goto yy194;
-yy263:
-               YYDEBUG(263, *YYCURSOR);
+yy259:
+               YYDEBUG(259, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy264;
+               if (yych == 'I') goto yy260;
                if (yych != 'i') goto yy194;
-yy264:
-               YYDEBUG(264, *YYCURSOR);
+yy260:
+               YYDEBUG(260, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy265;
+               if (yych == 'P') goto yy261;
                if (yych != 'p') goto yy194;
-yy265:
-               YYDEBUG(265, *YYCURSOR);
+yy261:
+               YYDEBUG(261, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy266;
+               if (yych == 'T') goto yy262;
                if (yych != 't') goto yy194;
-yy266:
-               YYDEBUG(266, *YYCURSOR);
+yy262:
+               YYDEBUG(262, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(3);
                yych = *YYCURSOR;
-               YYDEBUG(267, *YYCURSOR);
+               YYDEBUG(263, *YYCURSOR);
                if (yych <= '\r') {
                        if (yych <= 0x08) goto yy194;
-                       if (yych <= '\n') goto yy266;
+                       if (yych <= '\n') goto yy262;
                        if (yych <= '\f') goto yy194;
-                       goto yy266;
+                       goto yy262;
                } else {
                        if (yych <= ' ') {
                                if (yych <= 0x1F) goto yy194;
-                               goto yy266;
+                               goto yy262;
                        } else {
                                if (yych == '>') goto yy206;
                                goto yy194;
                        }
                }
-yy268:
-               YYDEBUG(268, *YYCURSOR);
+yy264:
+               YYDEBUG(264, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(269, *YYCURSOR);
+               YYDEBUG(265, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1395 "Zend/zend_language_scanner.l"
+#line 1398 "Zend/zend_language_scanner.l"
                {
        return T_SL_EQUAL;
 }
-#line 3765 "Zend/zend_language_scanner.c"
-yy270:
-               YYDEBUG(270, *YYCURSOR);
+#line 3744 "Zend/zend_language_scanner.c"
+yy266:
+               YYDEBUG(266, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(2);
                yych = *YYCURSOR;
-               YYDEBUG(271, *YYCURSOR);
+               YYDEBUG(267, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy270;
+                       goto yy266;
                }
                if (yych <= 'Z') {
                        if (yych <= '&') {
-                               if (yych == '"') goto yy275;
+                               if (yych == '"') goto yy271;
                                goto yy194;
                        } else {
-                               if (yych <= '\'') goto yy274;
+                               if (yych <= '\'') goto yy270;
                                if (yych <= '@') goto yy194;
                        }
                } else {
                        if (yych <= '`') {
                                if (yych != '_') goto yy194;
                        } else {
-                               if (yych <= 'z') goto yy272;
+                               if (yych <= 'z') goto yy268;
                                if (yych <= '~') goto yy194;
                        }
                }
-yy272:
-               YYDEBUG(272, *YYCURSOR);
+yy268:
+               YYDEBUG(268, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(2);
                yych = *YYCURSOR;
-               YYDEBUG(273, *YYCURSOR);
+               YYDEBUG(269, *YYCURSOR);
                if (yych <= '@') {
                        if (yych <= '\f') {
-                               if (yych == '\n') goto yy279;
+                               if (yych == '\n') goto yy275;
                                goto yy194;
                        } else {
-                               if (yych <= '\r') goto yy281;
+                               if (yych <= '\r') goto yy277;
                                if (yych <= '/') goto yy194;
-                               if (yych <= '9') goto yy272;
+                               if (yych <= '9') goto yy268;
                                goto yy194;
                        }
                } else {
                        if (yych <= '_') {
-                               if (yych <= 'Z') goto yy272;
+                               if (yych <= 'Z') goto yy268;
                                if (yych <= '^') goto yy194;
-                               goto yy272;
+                               goto yy268;
                        } else {
                                if (yych <= '`') goto yy194;
-                               if (yych <= 'z') goto yy272;
+                               if (yych <= 'z') goto yy268;
                                if (yych <= '~') goto yy194;
-                               goto yy272;
+                               goto yy268;
                        }
                }
-yy274:
-               YYDEBUG(274, *YYCURSOR);
+yy270:
+               YYDEBUG(270, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych == '\'') goto yy194;
-               if (yych <= '/') goto yy283;
+               if (yych <= '/') goto yy279;
                if (yych <= '9') goto yy194;
-               goto yy283;
-yy275:
-               YYDEBUG(275, *YYCURSOR);
+               goto yy279;
+yy271:
+               YYDEBUG(271, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych == '"') goto yy194;
-               if (yych <= '/') goto yy277;
+               if (yych <= '/') goto yy273;
                if (yych <= '9') goto yy194;
-               goto yy277;
-yy276:
-               YYDEBUG(276, *YYCURSOR);
+               goto yy273;
+yy272:
+               YYDEBUG(272, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(3);
                yych = *YYCURSOR;
-yy277:
-               YYDEBUG(277, *YYCURSOR);
+yy273:
+               YYDEBUG(273, *YYCURSOR);
                if (yych <= 'Z') {
                        if (yych <= '/') {
                                if (yych != '"') goto yy194;
                        } else {
-                               if (yych <= '9') goto yy276;
+                               if (yych <= '9') goto yy272;
                                if (yych <= '@') goto yy194;
-                               goto yy276;
+                               goto yy272;
                        }
                } else {
                        if (yych <= '`') {
-                               if (yych == '_') goto yy276;
+                               if (yych == '_') goto yy272;
                                goto yy194;
                        } else {
-                               if (yych <= 'z') goto yy276;
+                               if (yych <= 'z') goto yy272;
                                if (yych <= '~') goto yy194;
-                               goto yy276;
+                               goto yy272;
                        }
                }
-yy278:
-               YYDEBUG(278, *YYCURSOR);
+yy274:
+               YYDEBUG(274, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy279;
-               if (yych == '\r') goto yy281;
+               if (yych == '\n') goto yy275;
+               if (yych == '\r') goto yy277;
                goto yy194;
-yy279:
-               YYDEBUG(279, *YYCURSOR);
+yy275:
+               YYDEBUG(275, *YYCURSOR);
                ++YYCURSOR;
-yy280:
-               YYDEBUG(280, *YYCURSOR);
+yy276:
+               YYDEBUG(276, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2046 "Zend/zend_language_scanner.l"
+#line 2049 "Zend/zend_language_scanner.l"
                {
        char *s;
        int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -3913,255 +3892,255 @@ yy280:
 
        return T_START_HEREDOC;
 }
-#line 3917 "Zend/zend_language_scanner.c"
-yy281:
-               YYDEBUG(281, *YYCURSOR);
+#line 3896 "Zend/zend_language_scanner.c"
+yy277:
+               YYDEBUG(277, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy279;
-               goto yy280;
-yy282:
-               YYDEBUG(282, *YYCURSOR);
+               if (yych == '\n') goto yy275;
+               goto yy276;
+yy278:
+               YYDEBUG(278, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(3);
                yych = *YYCURSOR;
-yy283:
-               YYDEBUG(283, *YYCURSOR);
+yy279:
+               YYDEBUG(279, *YYCURSOR);
                if (yych <= 'Z') {
                        if (yych <= '/') {
-                               if (yych == '\'') goto yy278;
+                               if (yych == '\'') goto yy274;
                                goto yy194;
                        } else {
-                               if (yych <= '9') goto yy282;
+                               if (yych <= '9') goto yy278;
                                if (yych <= '@') goto yy194;
-                               goto yy282;
+                               goto yy278;
                        }
                } else {
                        if (yych <= '`') {
-                               if (yych == '_') goto yy282;
+                               if (yych == '_') goto yy278;
                                goto yy194;
                        } else {
-                               if (yych <= 'z') goto yy282;
+                               if (yych <= 'z') goto yy278;
                                if (yych <= '~') goto yy194;
-                               goto yy282;
+                               goto yy278;
                        }
                }
-yy284:
-               YYDEBUG(284, *YYCURSOR);
+yy280:
+               YYDEBUG(280, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych != '=') goto yy260;
-               YYDEBUG(285, *YYCURSOR);
+               if (yych != '=') goto yy256;
+               YYDEBUG(281, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(286, *YYCURSOR);
+               YYDEBUG(282, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1351 "Zend/zend_language_scanner.l"
+#line 1354 "Zend/zend_language_scanner.l"
                {
        return T_IS_NOT_IDENTICAL;
 }
-#line 3961 "Zend/zend_language_scanner.c"
-yy287:
-               YYDEBUG(287, *YYCURSOR);
+#line 3940 "Zend/zend_language_scanner.c"
+yy283:
+               YYDEBUG(283, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(288, *YYCURSOR);
+               YYDEBUG(284, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1371 "Zend/zend_language_scanner.l"
+#line 1374 "Zend/zend_language_scanner.l"
                {
        return T_PLUS_EQUAL;
 }
-#line 3971 "Zend/zend_language_scanner.c"
-yy289:
-               YYDEBUG(289, *YYCURSOR);
+#line 3950 "Zend/zend_language_scanner.c"
+yy285:
+               YYDEBUG(285, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(290, *YYCURSOR);
+               YYDEBUG(286, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1339 "Zend/zend_language_scanner.l"
+#line 1342 "Zend/zend_language_scanner.l"
                {
        return T_INC;
 }
-#line 3981 "Zend/zend_language_scanner.c"
-yy291:
-               YYDEBUG(291, *YYCURSOR);
+#line 3960 "Zend/zend_language_scanner.c"
+yy287:
+               YYDEBUG(287, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy292;
+               if (yych == 'S') goto yy288;
                if (yych != 's') goto yy187;
-yy292:
-               YYDEBUG(292, *YYCURSOR);
+yy288:
+               YYDEBUG(288, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy293;
+               if (yych == 'T') goto yy289;
                if (yych != 't') goto yy187;
-yy293:
-               YYDEBUG(293, *YYCURSOR);
+yy289:
+               YYDEBUG(289, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(294, *YYCURSOR);
+               YYDEBUG(290, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1327 "Zend/zend_language_scanner.l"
+#line 1330 "Zend/zend_language_scanner.l"
                {
        return T_LIST;
 }
-#line 4004 "Zend/zend_language_scanner.c"
-yy295:
-               YYDEBUG(295, *YYCURSOR);
+#line 3983 "Zend/zend_language_scanner.c"
+yy291:
+               YYDEBUG(291, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '=') goto yy299;
-               YYDEBUG(296, *YYCURSOR);
+               if ((yych = *YYCURSOR) == '=') goto yy295;
+               YYDEBUG(292, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1355 "Zend/zend_language_scanner.l"
+#line 1358 "Zend/zend_language_scanner.l"
                {
        return T_IS_EQUAL;
 }
-#line 4015 "Zend/zend_language_scanner.c"
-yy297:
-               YYDEBUG(297, *YYCURSOR);
+#line 3994 "Zend/zend_language_scanner.c"
+yy293:
+               YYDEBUG(293, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(298, *YYCURSOR);
+               YYDEBUG(294, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1323 "Zend/zend_language_scanner.l"
+#line 1326 "Zend/zend_language_scanner.l"
                {
        return T_DOUBLE_ARROW;
 }
-#line 4025 "Zend/zend_language_scanner.c"
-yy299:
-               YYDEBUG(299, *YYCURSOR);
+#line 4004 "Zend/zend_language_scanner.c"
+yy295:
+               YYDEBUG(295, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(300, *YYCURSOR);
+               YYDEBUG(296, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1347 "Zend/zend_language_scanner.l"
+#line 1350 "Zend/zend_language_scanner.l"
                {
        return T_IS_IDENTICAL;
 }
-#line 4035 "Zend/zend_language_scanner.c"
-yy301:
-               YYDEBUG(301, *YYCURSOR);
+#line 4014 "Zend/zend_language_scanner.c"
+yy297:
+               YYDEBUG(297, *YYCURSOR);
                yych = *++YYCURSOR;
                YYDEBUG(-1, yych);
                switch (yych) {
                case 'C':
-               case 'c':       goto yy303;
+               case 'c':       goto yy299;
                case 'D':
-               case 'd':       goto yy308;
+               case 'd':       goto yy304;
                case 'F':
-               case 'f':       goto yy305;
+               case 'f':       goto yy301;
                case 'H':
-               case 'h':       goto yy302;
+               case 'h':       goto yy298;
                case 'L':
-               case 'l':       goto yy307;
+               case 'l':       goto yy303;
                case 'M':
-               case 'm':       goto yy306;
+               case 'm':       goto yy302;
                case 'N':
-               case 'n':       goto yy309;
+               case 'n':       goto yy305;
                case 'T':
-               case 't':       goto yy304;
+               case 't':       goto yy300;
                default:        goto yy187;
                }
-yy302:
-               YYDEBUG(302, *YYCURSOR);
+yy298:
+               YYDEBUG(298, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy370;
-               if (yych == 'a') goto yy370;
+               if (yych == 'A') goto yy366;
+               if (yych == 'a') goto yy366;
                goto yy187;
-yy303:
-               YYDEBUG(303, *YYCURSOR);
+yy299:
+               YYDEBUG(299, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy363;
-               if (yych == 'l') goto yy363;
+               if (yych == 'L') goto yy359;
+               if (yych == 'l') goto yy359;
                goto yy187;
-yy304:
-               YYDEBUG(304, *YYCURSOR);
+yy300:
+               YYDEBUG(300, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy356;
-               if (yych == 'r') goto yy356;
+               if (yych == 'R') goto yy352;
+               if (yych == 'r') goto yy352;
                goto yy187;
-yy305:
-               YYDEBUG(305, *YYCURSOR);
+yy301:
+               YYDEBUG(301, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'U') {
-                       if (yych == 'I') goto yy340;
+                       if (yych == 'I') goto yy336;
                        if (yych <= 'T') goto yy187;
-                       goto yy341;
+                       goto yy337;
                } else {
                        if (yych <= 'i') {
                                if (yych <= 'h') goto yy187;
-                               goto yy340;
+                               goto yy336;
                        } else {
-                               if (yych == 'u') goto yy341;
+                               if (yych == 'u') goto yy337;
                                goto yy187;
                        }
                }
+yy302:
+               YYDEBUG(302, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy328;
+               if (yych == 'e') goto yy328;
+               goto yy187;
+yy303:
+               YYDEBUG(303, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy322;
+               if (yych == 'i') goto yy322;
+               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 == 'E') goto yy332;
-               if (yych == 'e') goto yy332;
-               goto yy187;
+               if (yych == 'M') goto yy307;
+               if (yych != 'm') goto yy187;
 yy307:
                YYDEBUG(307, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy326;
-               if (yych == 'i') goto yy326;
-               goto yy187;
+               if (yych == 'E') goto yy308;
+               if (yych != 'e') goto yy187;
 yy308:
                YYDEBUG(308, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy321;
-               if (yych == 'i') goto yy321;
-               goto yy187;
+               if (yych == 'S') goto yy309;
+               if (yych != 's') goto yy187;
 yy309:
                YYDEBUG(309, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy310;
-               if (yych != 'a') goto yy187;
+               if (yych == 'P') goto yy310;
+               if (yych != 'p') goto yy187;
 yy310:
                YYDEBUG(310, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'M') goto yy311;
-               if (yych != 'm') goto yy187;
+               if (yych == 'A') goto yy311;
+               if (yych != 'a') goto yy187;
 yy311:
                YYDEBUG(311, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy312;
-               if (yych != 'e') goto yy187;
+               if (yych == 'C') goto yy312;
+               if (yych != 'c') goto yy187;
 yy312:
                YYDEBUG(312, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy313;
-               if (yych != 's') goto yy187;
+               if (yych == 'E') goto yy313;
+               if (yych != 'e') goto yy187;
 yy313:
                YYDEBUG(313, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy314;
-               if (yych != 'p') goto yy187;
-yy314:
-               YYDEBUG(314, *YYCURSOR);
-               yych = *++YYCURSOR;
-               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);
+               YYDEBUG(314, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(319, *YYCURSOR);
+               YYDEBUG(315, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(320, *YYCURSOR);
+               YYDEBUG(316, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1665 "Zend/zend_language_scanner.l"
+#line 1668 "Zend/zend_language_scanner.l"
                {
        if (CG(current_namespace)) {
                *zendlval = *CG(current_namespace);
@@ -4171,27 +4150,27 @@ yy317:
        }
        return T_NS_C;
 }
-#line 4175 "Zend/zend_language_scanner.c"
-yy321:
-               YYDEBUG(321, *YYCURSOR);
+#line 4154 "Zend/zend_language_scanner.c"
+yy317:
+               YYDEBUG(317, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy322;
+               if (yych == 'R') goto yy318;
                if (yych != 'r') goto yy187;
-yy322:
-               YYDEBUG(322, *YYCURSOR);
+yy318:
+               YYDEBUG(318, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(323, *YYCURSOR);
+               YYDEBUG(319, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(324, *YYCURSOR);
+               YYDEBUG(320, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(325, *YYCURSOR);
+               YYDEBUG(321, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1640 "Zend/zend_language_scanner.l"
+#line 1643 "Zend/zend_language_scanner.l"
                {
        char *filename = zend_get_compiled_filename(TSRMLS_C);
        const size_t filename_len = strlen(filename);
@@ -4216,72 +4195,72 @@ yy322:
        ZVAL_STRING(zendlval, dirname, 0);
        return T_DIR;
 }
-#line 4220 "Zend/zend_language_scanner.c"
-yy326:
-               YYDEBUG(326, *YYCURSOR);
+#line 4199 "Zend/zend_language_scanner.c"
+yy322:
+               YYDEBUG(322, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy327;
+               if (yych == 'N') goto yy323;
                if (yych != 'n') goto yy187;
-yy327:
-               YYDEBUG(327, *YYCURSOR);
+yy323:
+               YYDEBUG(323, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy328;
+               if (yych == 'E') goto yy324;
                if (yych != 'e') goto yy187;
-yy328:
-               YYDEBUG(328, *YYCURSOR);
+yy324:
+               YYDEBUG(324, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(329, *YYCURSOR);
+               YYDEBUG(325, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(330, *YYCURSOR);
+               YYDEBUG(326, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(331, *YYCURSOR);
+               YYDEBUG(327, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1625 "Zend/zend_language_scanner.l"
+#line 1628 "Zend/zend_language_scanner.l"
                {
        ZVAL_LONG(zendlval, CG(zend_lineno));
        return T_LINE;
 }
-#line 4250 "Zend/zend_language_scanner.c"
-yy332:
-               YYDEBUG(332, *YYCURSOR);
+#line 4229 "Zend/zend_language_scanner.c"
+yy328:
+               YYDEBUG(328, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy333;
+               if (yych == 'T') goto yy329;
                if (yych != 't') goto yy187;
-yy333:
-               YYDEBUG(333, *YYCURSOR);
+yy329:
+               YYDEBUG(329, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy334;
+               if (yych == 'H') goto yy330;
                if (yych != 'h') goto yy187;
-yy334:
-               YYDEBUG(334, *YYCURSOR);
+yy330:
+               YYDEBUG(330, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy335;
+               if (yych == 'O') goto yy331;
                if (yych != 'o') goto yy187;
-yy335:
-               YYDEBUG(335, *YYCURSOR);
+yy331:
+               YYDEBUG(331, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy336;
+               if (yych == 'D') goto yy332;
                if (yych != 'd') goto yy187;
-yy336:
-               YYDEBUG(336, *YYCURSOR);
+yy332:
+               YYDEBUG(332, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(337, *YYCURSOR);
+               YYDEBUG(333, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(338, *YYCURSOR);
+               YYDEBUG(334, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(339, *YYCURSOR);
+               YYDEBUG(335, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1612 "Zend/zend_language_scanner.l"
+#line 1615 "Zend/zend_language_scanner.l"
                {
        const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL;
        const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL;
@@ -4294,58 +4273,58 @@ yy336:
        zendlval->type = IS_STRING;
        return T_METHOD_C;
 }
-#line 4298 "Zend/zend_language_scanner.c"
-yy340:
-               YYDEBUG(340, *YYCURSOR);
+#line 4277 "Zend/zend_language_scanner.c"
+yy336:
+               YYDEBUG(336, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy351;
-               if (yych == 'l') goto yy351;
+               if (yych == 'L') goto yy347;
+               if (yych == 'l') goto yy347;
                goto yy187;
-yy341:
-               YYDEBUG(341, *YYCURSOR);
+yy337:
+               YYDEBUG(337, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy342;
+               if (yych == 'N') goto yy338;
                if (yych != 'n') goto yy187;
-yy342:
-               YYDEBUG(342, *YYCURSOR);
+yy338:
+               YYDEBUG(338, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy343;
+               if (yych == 'C') goto yy339;
                if (yych != 'c') goto yy187;
-yy343:
-               YYDEBUG(343, *YYCURSOR);
+yy339:
+               YYDEBUG(339, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy344;
+               if (yych == 'T') goto yy340;
                if (yych != 't') goto yy187;
-yy344:
-               YYDEBUG(344, *YYCURSOR);
+yy340:
+               YYDEBUG(340, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy345;
+               if (yych == 'I') goto yy341;
                if (yych != 'i') goto yy187;
-yy345:
-               YYDEBUG(345, *YYCURSOR);
+yy341:
+               YYDEBUG(341, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy346;
+               if (yych == 'O') goto yy342;
                if (yych != 'o') goto yy187;
-yy346:
-               YYDEBUG(346, *YYCURSOR);
+yy342:
+               YYDEBUG(342, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy347;
+               if (yych == 'N') goto yy343;
                if (yych != 'n') goto yy187;
-yy347:
-               YYDEBUG(347, *YYCURSOR);
+yy343:
+               YYDEBUG(343, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(348, *YYCURSOR);
+               YYDEBUG(344, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(349, *YYCURSOR);
+               YYDEBUG(345, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(350, *YYCURSOR);
+               YYDEBUG(346, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1602 "Zend/zend_language_scanner.l"
+#line 1605 "Zend/zend_language_scanner.l"
                {
        zend_op_array *op_array = CG(active_op_array);
        if (op_array && op_array->function_name) {
@@ -4355,27 +4334,27 @@ yy347:
        }
        return T_FUNC_C;
 }
-#line 4359 "Zend/zend_language_scanner.c"
-yy351:
-               YYDEBUG(351, *YYCURSOR);
+#line 4338 "Zend/zend_language_scanner.c"
+yy347:
+               YYDEBUG(347, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy352;
+               if (yych == 'E') goto yy348;
                if (yych != 'e') goto yy187;
-yy352:
-               YYDEBUG(352, *YYCURSOR);
+yy348:
+               YYDEBUG(348, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(353, *YYCURSOR);
+               YYDEBUG(349, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(354, *YYCURSOR);
+               YYDEBUG(350, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(355, *YYCURSOR);
+               YYDEBUG(351, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1630 "Zend/zend_language_scanner.l"
+#line 1633 "Zend/zend_language_scanner.l"
                {
        char *filename = zend_get_compiled_filename(TSRMLS_C);
 
@@ -4385,37 +4364,37 @@ yy352:
        ZVAL_STRING(zendlval, filename, 1);
        return T_FILE;
 }
-#line 4389 "Zend/zend_language_scanner.c"
-yy356:
-               YYDEBUG(356, *YYCURSOR);
+#line 4368 "Zend/zend_language_scanner.c"
+yy352:
+               YYDEBUG(352, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy357;
+               if (yych == 'A') goto yy353;
                if (yych != 'a') goto yy187;
-yy357:
-               YYDEBUG(357, *YYCURSOR);
+yy353:
+               YYDEBUG(353, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy358;
+               if (yych == 'I') goto yy354;
                if (yych != 'i') goto yy187;
-yy358:
-               YYDEBUG(358, *YYCURSOR);
+yy354:
+               YYDEBUG(354, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy359;
+               if (yych == 'T') goto yy355;
                if (yych != 't') goto yy187;
-yy359:
-               YYDEBUG(359, *YYCURSOR);
+yy355:
+               YYDEBUG(355, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(360, *YYCURSOR);
+               YYDEBUG(356, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(361, *YYCURSOR);
+               YYDEBUG(357, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(362, *YYCURSOR);
+               YYDEBUG(358, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1592 "Zend/zend_language_scanner.l"
+#line 1595 "Zend/zend_language_scanner.l"
                {
        zend_class_entry *ce = CG(active_class_entry);
        if (ce && ce->name && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
@@ -4425,37 +4404,37 @@ yy359:
        }
        return T_TRAIT_C;
 }
-#line 4429 "Zend/zend_language_scanner.c"
-yy363:
-               YYDEBUG(363, *YYCURSOR);
+#line 4408 "Zend/zend_language_scanner.c"
+yy359:
+               YYDEBUG(359, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy364;
+               if (yych == 'A') goto yy360;
                if (yych != 'a') goto yy187;
-yy364:
-               YYDEBUG(364, *YYCURSOR);
+yy360:
+               YYDEBUG(360, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy365;
+               if (yych == 'S') goto yy361;
                if (yych != 's') goto yy187;
-yy365:
-               YYDEBUG(365, *YYCURSOR);
+yy361:
+               YYDEBUG(361, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy366;
+               if (yych == 'S') goto yy362;
                if (yych != 's') goto yy187;
-yy366:
-               YYDEBUG(366, *YYCURSOR);
+yy362:
+               YYDEBUG(362, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(367, *YYCURSOR);
+               YYDEBUG(363, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy187;
-               YYDEBUG(368, *YYCURSOR);
+               YYDEBUG(364, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(369, *YYCURSOR);
+               YYDEBUG(365, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1574 "Zend/zend_language_scanner.l"
+#line 1577 "Zend/zend_language_scanner.l"
                {
        zend_class_entry *ce = CG(active_class_entry);
        if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
@@ -4473,60 +4452,84 @@ yy366:
        }
        return T_CLASS_C;
 }
-#line 4477 "Zend/zend_language_scanner.c"
+#line 4456 "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;
 yy370:
                YYDEBUG(370, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy371;
-               if (yych != 'l') goto yy187;
+               if (yych == 'O') goto yy371;
+               if (yych != 'o') goto yy187;
 yy371:
                YYDEBUG(371, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy372;
-               if (yych != 't') goto yy187;
+               if (yych == 'M') goto yy372;
+               if (yych != 'm') goto yy187;
 yy372:
                YYDEBUG(372, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych != '_') goto yy187;
+               if (yych == 'P') goto yy373;
+               if (yych != 'p') goto yy187;
+yy373:
                YYDEBUG(373, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy374;
-               if (yych != 'c') goto yy187;
+               if (yych == 'I') goto yy374;
+               if (yych != 'i') goto yy187;
 yy374:
                YYDEBUG(374, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy375;
-               if (yych != 'o') goto yy187;
+               if (yych == 'L') goto yy375;
+               if (yych != 'l') goto yy187;
 yy375:
                YYDEBUG(375, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'M') goto yy376;
-               if (yych != 'm') goto yy187;
+               if (yych == 'E') goto yy376;
+               if (yych != 'e') goto yy187;
 yy376:
                YYDEBUG(376, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy377;
-               if (yych != 'p') goto yy187;
+               if (yych == 'R') goto yy377;
+               if (yych != 'r') goto yy187;
 yy377:
                YYDEBUG(377, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'I') goto yy378;
-               if (yych != 'i') goto yy187;
-yy378:
+               ++YYCURSOR;
+               if (yybm[0+(yych = *YYCURSOR)] & 4) {
+                       goto yy186;
+               }
                YYDEBUG(378, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy379;
-               if (yych != 'l') goto yy187;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1294 "Zend/zend_language_scanner.l"
+               {
+       return T_HALT_COMPILER;
+}
+#line 4522 "Zend/zend_language_scanner.c"
 yy379:
                YYDEBUG(379, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy380;
-               if (yych != 'e') goto yy187;
+               if (yych == 'S') goto yy383;
+               if (yych == 's') goto yy383;
+               goto yy187;
 yy380:
                YYDEBUG(380, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy381;
-               if (yych != 'r') goto yy187;
+               if (yych == 'E') goto yy381;
+               if (yych != 'e') goto yy187;
 yy381:
                YYDEBUG(381, *YYCURSOR);
                ++YYCURSOR;
@@ -4535,22 +4538,21 @@ yy381:
                }
                YYDEBUG(382, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1291 "Zend/zend_language_scanner.l"
+#line 1274 "Zend/zend_language_scanner.l"
                {
-       return T_HALT_COMPILER;
+       return T_USE;
 }
-#line 4543 "Zend/zend_language_scanner.c"
+#line 4546 "Zend/zend_language_scanner.c"
 yy383:
                YYDEBUG(383, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy387;
-               if (yych == 's') goto yy387;
-               goto yy187;
+               if (yych == 'E') goto yy384;
+               if (yych != 'e') goto yy187;
 yy384:
                YYDEBUG(384, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy385;
-               if (yych != 'e') goto yy187;
+               if (yych == 'T') goto yy385;
+               if (yych != 't') goto yy187;
 yy385:
                YYDEBUG(385, *YYCURSOR);
                ++YYCURSOR;
@@ -4559,742 +4561,743 @@ yy385:
                }
                YYDEBUG(386, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1271 "Zend/zend_language_scanner.l"
+#line 1322 "Zend/zend_language_scanner.l"
                {
-       return T_USE;
+       return T_UNSET;
 }
-#line 4567 "Zend/zend_language_scanner.c"
+#line 4569 "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 1319 "Zend/zend_language_scanner.l"
-               {
-       return T_UNSET;
-}
-#line 4590 "Zend/zend_language_scanner.c"
-yy391:
-               YYDEBUG(391, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(7);
                yych = *YYCURSOR;
-yy392:
-               YYDEBUG(392, *YYCURSOR);
+yy388:
+               YYDEBUG(388, *YYCURSOR);
                if (yych <= 'S') {
                        if (yych <= 'D') {
                                if (yych <= ' ') {
-                                       if (yych == '\t') goto yy391;
+                                       if (yych == '\t') goto yy387;
                                        if (yych <= 0x1F) goto yy194;
-                                       goto yy391;
+                                       goto yy387;
                                } else {
                                        if (yych <= 'A') {
                                                if (yych <= '@') goto yy194;
-                                               goto yy396;
+                                               goto yy392;
                                        } else {
-                                               if (yych <= 'B') goto yy394;
+                                               if (yych <= 'B') goto yy390;
                                                if (yych <= 'C') goto yy194;
-                                               goto yy399;
+                                               goto yy395;
                                        }
                                }
                        } else {
                                if (yych <= 'I') {
-                                       if (yych == 'F') goto yy400;
+                                       if (yych == 'F') goto yy396;
                                        if (yych <= 'H') goto yy194;
-                                       goto yy401;
+                                       goto yy397;
                                } else {
                                        if (yych <= 'O') {
                                                if (yych <= 'N') goto yy194;
-                                               goto yy395;
+                                               goto yy391;
                                        } else {
                                                if (yych <= 'Q') goto yy194;
-                                               if (yych <= 'R') goto yy398;
-                                               goto yy397;
+                                               if (yych <= 'R') goto yy394;
+                                               goto yy393;
                                        }
                                }
                        }
                } else {
                        if (yych <= 'f') {
                                if (yych <= 'a') {
-                                       if (yych == 'U') goto yy393;
+                                       if (yych == 'U') goto yy389;
                                        if (yych <= '`') goto yy194;
-                                       goto yy396;
+                                       goto yy392;
                                } else {
                                        if (yych <= 'c') {
-                                               if (yych <= 'b') goto yy394;
+                                               if (yych <= 'b') goto yy390;
                                                goto yy194;
                                        } else {
-                                               if (yych <= 'd') goto yy399;
+                                               if (yych <= 'd') goto yy395;
                                                if (yych <= 'e') goto yy194;
-                                               goto yy400;
+                                               goto yy396;
                                        }
                                }
                        } else {
                                if (yych <= 'q') {
                                        if (yych <= 'i') {
                                                if (yych <= 'h') goto yy194;
-                                               goto yy401;
+                                               goto yy397;
                                        } else {
-                                               if (yych == 'o') goto yy395;
+                                               if (yych == 'o') goto yy391;
                                                goto yy194;
                                        }
                                } else {
                                        if (yych <= 's') {
-                                               if (yych <= 'r') goto yy398;
-                                               goto yy397;
+                                               if (yych <= 'r') goto yy394;
+                                               goto yy393;
                                        } else {
                                                if (yych != 'u') goto yy194;
                                        }
                                }
                        }
                }
-yy393:
-               YYDEBUG(393, *YYCURSOR);
+yy389:
+               YYDEBUG(389, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy460;
-               if (yych == 'n') goto yy460;
+               if (yych == 'N') goto yy456;
+               if (yych == 'n') goto yy456;
                goto yy194;
-yy394:
-               YYDEBUG(394, *YYCURSOR);
+yy390:
+               YYDEBUG(390, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'O') {
-                       if (yych == 'I') goto yy447;
+                       if (yych == 'I') goto yy443;
                        if (yych <= 'N') goto yy194;
-                       goto yy448;
+                       goto yy444;
                } else {
                        if (yych <= 'i') {
                                if (yych <= 'h') goto yy194;
-                               goto yy447;
+                               goto yy443;
                        } else {
-                               if (yych == 'o') goto yy448;
+                               if (yych == 'o') goto yy444;
                                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 == 'B') goto yy439;
-               if (yych == 'b') goto yy439;
+               if (yych == 'O') goto yy414;
+               if (yych == 'o') goto yy414;
                goto yy194;
 yy396:
                YYDEBUG(396, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy432;
-               if (yych == 'r') goto yy432;
+               if (yych == 'L') goto yy407;
+               if (yych == 'l') goto yy407;
                goto yy194;
 yy397:
                YYDEBUG(397, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy424;
-               if (yych == 't') goto yy424;
-               goto yy194;
+               if (yych == 'N') goto yy398;
+               if (yych != 'n') goto yy194;
 yy398:
                YYDEBUG(398, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy422;
-               if (yych == 'e') goto yy422;
-               goto yy194;
+               if (yych == 'T') goto yy399;
+               if (yych != 't') goto yy194;
 yy399:
                YYDEBUG(399, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy418;
-               if (yych == 'o') goto yy418;
-               goto yy194;
+               if (yych == 'E') goto yy400;
+               if (yych != 'e') goto yy402;
 yy400:
                YYDEBUG(400, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy411;
-               if (yych == 'l') goto yy411;
+               if (yych == 'G') goto yy405;
+               if (yych == 'g') goto yy405;
                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;
-yy406:
-               YYDEBUG(406, *YYCURSOR);
+yy402:
+               YYDEBUG(402, *YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy405;
+                       if (yych == '\t') goto yy401;
                        goto yy194;
                } else {
-                       if (yych <= ' ') goto yy405;
+                       if (yych <= ' ') goto yy401;
                        if (yych != ')') goto yy194;
                }
-               YYDEBUG(407, *YYCURSOR);
+               YYDEBUG(403, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(408, *YYCURSOR);
+               YYDEBUG(404, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1219 "Zend/zend_language_scanner.l"
+#line 1222 "Zend/zend_language_scanner.l"
                {
        return T_INT_CAST;
 }
-#line 4766 "Zend/zend_language_scanner.c"
-yy409:
-               YYDEBUG(409, *YYCURSOR);
+#line 4745 "Zend/zend_language_scanner.c"
+yy405:
+               YYDEBUG(405, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy410;
+               if (yych == 'E') goto yy406;
                if (yych != 'e') goto yy194;
-yy410:
-               YYDEBUG(410, *YYCURSOR);
+yy406:
+               YYDEBUG(406, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy405;
-               if (yych == 'r') goto yy405;
+               if (yych == 'R') goto yy401;
+               if (yych == 'r') goto yy401;
                goto yy194;
-yy411:
-               YYDEBUG(411, *YYCURSOR);
+yy407:
+               YYDEBUG(407, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy412;
+               if (yych == 'O') goto yy408;
                if (yych != 'o') goto yy194;
-yy412:
-               YYDEBUG(412, *YYCURSOR);
+yy408:
+               YYDEBUG(408, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy413;
+               if (yych == 'A') goto yy409;
                if (yych != 'a') goto yy194;
-yy413:
-               YYDEBUG(413, *YYCURSOR);
+yy409:
+               YYDEBUG(409, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy414;
+               if (yych == 'T') goto yy410;
                if (yych != 't') goto yy194;
-yy414:
-               YYDEBUG(414, *YYCURSOR);
+yy410:
+               YYDEBUG(410, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(415, *YYCURSOR);
+               YYDEBUG(411, *YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy414;
+                       if (yych == '\t') goto yy410;
                        goto yy194;
                } else {
-                       if (yych <= ' ') goto yy414;
+                       if (yych <= ' ') goto yy410;
                        if (yych != ')') goto yy194;
                }
-               YYDEBUG(416, *YYCURSOR);
+               YYDEBUG(412, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(417, *YYCURSOR);
+               YYDEBUG(413, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1223 "Zend/zend_language_scanner.l"
+#line 1226 "Zend/zend_language_scanner.l"
                {
        return T_DOUBLE_CAST;
 }
-#line 4814 "Zend/zend_language_scanner.c"
-yy418:
-               YYDEBUG(418, *YYCURSOR);
+#line 4793 "Zend/zend_language_scanner.c"
+yy414:
+               YYDEBUG(414, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy419;
+               if (yych == 'U') goto yy415;
                if (yych != 'u') goto yy194;
-yy419:
-               YYDEBUG(419, *YYCURSOR);
+yy415:
+               YYDEBUG(415, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'B') goto yy420;
+               if (yych == 'B') goto yy416;
                if (yych != 'b') goto yy194;
-yy420:
-               YYDEBUG(420, *YYCURSOR);
+yy416:
+               YYDEBUG(416, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy421;
+               if (yych == 'L') goto yy417;
                if (yych != 'l') goto yy194;
-yy421:
-               YYDEBUG(421, *YYCURSOR);
+yy417:
+               YYDEBUG(417, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy414;
-               if (yych == 'e') goto yy414;
+               if (yych == 'E') goto yy410;
+               if (yych == 'e') goto yy410;
                goto yy194;
-yy422:
-               YYDEBUG(422, *YYCURSOR);
+yy418:
+               YYDEBUG(418, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy423;
+               if (yych == 'A') goto yy419;
                if (yych != 'a') goto yy194;
-yy423:
-               YYDEBUG(423, *YYCURSOR);
+yy419:
+               YYDEBUG(419, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy414;
-               if (yych == 'l') goto yy414;
+               if (yych == 'L') goto yy410;
+               if (yych == 'l') goto yy410;
                goto yy194;
-yy424:
-               YYDEBUG(424, *YYCURSOR);
+yy420:
+               YYDEBUG(420, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy425;
+               if (yych == 'R') goto yy421;
                if (yych != 'r') goto yy194;
-yy425:
-               YYDEBUG(425, *YYCURSOR);
+yy421:
+               YYDEBUG(421, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy426;
+               if (yych == 'I') goto yy422;
                if (yych != 'i') goto yy194;
-yy426:
-               YYDEBUG(426, *YYCURSOR);
+yy422:
+               YYDEBUG(422, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy427;
+               if (yych == 'N') goto yy423;
                if (yych != 'n') goto yy194;
-yy427:
-               YYDEBUG(427, *YYCURSOR);
+yy423:
+               YYDEBUG(423, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'G') goto yy428;
+               if (yych == 'G') goto yy424;
                if (yych != 'g') goto yy194;
-yy428:
-               YYDEBUG(428, *YYCURSOR);
+yy424:
+               YYDEBUG(424, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(429, *YYCURSOR);
+               YYDEBUG(425, *YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy428;
+                       if (yych == '\t') goto yy424;
                        goto yy194;
                } else {
-                       if (yych <= ' ') goto yy428;
+                       if (yych <= ' ') goto yy424;
                        if (yych != ')') goto yy194;
                }
-               YYDEBUG(430, *YYCURSOR);
+               YYDEBUG(426, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(431, *YYCURSOR);
+               YYDEBUG(427, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1227 "Zend/zend_language_scanner.l"
+#line 1230 "Zend/zend_language_scanner.l"
                {
        return T_STRING_CAST;
 }
-#line 4888 "Zend/zend_language_scanner.c"
-yy432:
-               YYDEBUG(432, *YYCURSOR);
+#line 4867 "Zend/zend_language_scanner.c"
+yy428:
+               YYDEBUG(428, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy433;
+               if (yych == 'R') goto yy429;
                if (yych != 'r') goto yy194;
-yy433:
-               YYDEBUG(433, *YYCURSOR);
+yy429:
+               YYDEBUG(429, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy434;
+               if (yych == 'A') goto yy430;
                if (yych != 'a') goto yy194;
-yy434:
-               YYDEBUG(434, *YYCURSOR);
+yy430:
+               YYDEBUG(430, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy435;
+               if (yych == 'Y') goto yy431;
                if (yych != 'y') goto yy194;
-yy435:
-               YYDEBUG(435, *YYCURSOR);
+yy431:
+               YYDEBUG(431, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(436, *YYCURSOR);
+               YYDEBUG(432, *YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy435;
+                       if (yych == '\t') goto yy431;
                        goto yy194;
                } else {
-                       if (yych <= ' ') goto yy435;
+                       if (yych <= ' ') goto yy431;
                        if (yych != ')') goto yy194;
                }
-               YYDEBUG(437, *YYCURSOR);
+               YYDEBUG(433, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(438, *YYCURSOR);
+               YYDEBUG(434, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1231 "Zend/zend_language_scanner.l"
+#line 1234 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY_CAST;
 }
-#line 4925 "Zend/zend_language_scanner.c"
-yy439:
-               YYDEBUG(439, *YYCURSOR);
+#line 4904 "Zend/zend_language_scanner.c"
+yy435:
+               YYDEBUG(435, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'J') goto yy440;
+               if (yych == 'J') goto yy436;
                if (yych != 'j') goto yy194;
-yy440:
-               YYDEBUG(440, *YYCURSOR);
+yy436:
+               YYDEBUG(436, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy441;
+               if (yych == 'E') goto yy437;
                if (yych != 'e') goto yy194;
-yy441:
-               YYDEBUG(441, *YYCURSOR);
+yy437:
+               YYDEBUG(437, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy442;
+               if (yych == 'C') goto yy438;
                if (yych != 'c') goto yy194;
-yy442:
-               YYDEBUG(442, *YYCURSOR);
+yy438:
+               YYDEBUG(438, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy443;
+               if (yych == 'T') goto yy439;
                if (yych != 't') goto yy194;
-yy443:
-               YYDEBUG(443, *YYCURSOR);
+yy439:
+               YYDEBUG(439, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(444, *YYCURSOR);
+               YYDEBUG(440, *YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy443;
+                       if (yych == '\t') goto yy439;
                        goto yy194;
                } else {
-                       if (yych <= ' ') goto yy443;
+                       if (yych <= ' ') goto yy439;
                        if (yych != ')') goto yy194;
                }
-               YYDEBUG(445, *YYCURSOR);
+               YYDEBUG(441, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(446, *YYCURSOR);
+               YYDEBUG(442, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1235 "Zend/zend_language_scanner.l"
+#line 1238 "Zend/zend_language_scanner.l"
                {
        return T_OBJECT_CAST;
 }
-#line 4967 "Zend/zend_language_scanner.c"
-yy447:
-               YYDEBUG(447, *YYCURSOR);
+#line 4946 "Zend/zend_language_scanner.c"
+yy443:
+               YYDEBUG(443, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy457;
-               if (yych == 'n') goto yy457;
+               if (yych == 'N') goto yy453;
+               if (yych == 'n') goto yy453;
                goto yy194;
-yy448:
-               YYDEBUG(448, *YYCURSOR);
+yy444:
+               YYDEBUG(444, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy449;
+               if (yych == 'O') goto yy445;
                if (yych != 'o') goto yy194;
-yy449:
-               YYDEBUG(449, *YYCURSOR);
+yy445:
+               YYDEBUG(445, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy450;
+               if (yych == 'L') goto yy446;
                if (yych != 'l') goto yy194;
-yy450:
-               YYDEBUG(450, *YYCURSOR);
+yy446:
+               YYDEBUG(446, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy455;
-               if (yych == 'e') goto yy455;
-               goto yy452;
-yy451:
-               YYDEBUG(451, *YYCURSOR);
+               if (yych == 'E') goto yy451;
+               if (yych == 'e') goto yy451;
+               goto yy448;
+yy447:
+               YYDEBUG(447, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy452:
-               YYDEBUG(452, *YYCURSOR);
+yy448:
+               YYDEBUG(448, *YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy451;
+                       if (yych == '\t') goto yy447;
                        goto yy194;
                } else {
-                       if (yych <= ' ') goto yy451;
+                       if (yych <= ' ') goto yy447;
                        if (yych != ')') goto yy194;
                }
-               YYDEBUG(453, *YYCURSOR);
+               YYDEBUG(449, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(454, *YYCURSOR);
+               YYDEBUG(450, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1239 "Zend/zend_language_scanner.l"
+#line 1242 "Zend/zend_language_scanner.l"
                {
        return T_BOOL_CAST;
 }
-#line 5012 "Zend/zend_language_scanner.c"
-yy455:
-               YYDEBUG(455, *YYCURSOR);
+#line 4991 "Zend/zend_language_scanner.c"
+yy451:
+               YYDEBUG(451, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy456;
+               if (yych == 'A') goto yy452;
                if (yych != 'a') goto yy194;
-yy456:
-               YYDEBUG(456, *YYCURSOR);
+yy452:
+               YYDEBUG(452, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy451;
-               if (yych == 'n') goto yy451;
+               if (yych == 'N') goto yy447;
+               if (yych == 'n') goto yy447;
                goto yy194;
-yy457:
-               YYDEBUG(457, *YYCURSOR);
+yy453:
+               YYDEBUG(453, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy458;
+               if (yych == 'A') goto yy454;
                if (yych != 'a') goto yy194;
-yy458:
-               YYDEBUG(458, *YYCURSOR);
+yy454:
+               YYDEBUG(454, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy459;
+               if (yych == 'R') goto yy455;
                if (yych != 'r') goto yy194;
-yy459:
-               YYDEBUG(459, *YYCURSOR);
+yy455:
+               YYDEBUG(455, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy428;
-               if (yych == 'y') goto yy428;
+               if (yych == 'Y') goto yy424;
+               if (yych == 'y') goto yy424;
                goto yy194;
-yy460:
-               YYDEBUG(460, *YYCURSOR);
+yy456:
+               YYDEBUG(456, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy461;
+               if (yych == 'S') goto yy457;
                if (yych != 's') goto yy194;
-yy461:
-               YYDEBUG(461, *YYCURSOR);
+yy457:
+               YYDEBUG(457, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy462;
+               if (yych == 'E') goto yy458;
                if (yych != 'e') goto yy194;
-yy462:
-               YYDEBUG(462, *YYCURSOR);
+yy458:
+               YYDEBUG(458, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy463;
+               if (yych == 'T') goto yy459;
                if (yych != 't') goto yy194;
-yy463:
-               YYDEBUG(463, *YYCURSOR);
+yy459:
+               YYDEBUG(459, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(464, *YYCURSOR);
+               YYDEBUG(460, *YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy463;
+                       if (yych == '\t') goto yy459;
                        goto yy194;
                } else {
-                       if (yych <= ' ') goto yy463;
+                       if (yych <= ' ') goto yy459;
                        if (yych != ')') goto yy194;
                }
-               YYDEBUG(465, *YYCURSOR);
+               YYDEBUG(461, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(466, *YYCURSOR);
+               YYDEBUG(462, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1243 "Zend/zend_language_scanner.l"
+#line 1246 "Zend/zend_language_scanner.l"
                {
        return T_UNSET_CAST;
 }
-#line 5076 "Zend/zend_language_scanner.c"
-yy467:
-               YYDEBUG(467, *YYCURSOR);
+#line 5055 "Zend/zend_language_scanner.c"
+yy463:
+               YYDEBUG(463, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy468;
+               if (yych == 'R') goto yy464;
                if (yych != 'r') goto yy187;
-yy468:
-               YYDEBUG(468, *YYCURSOR);
+yy464:
+               YYDEBUG(464, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(469, *YYCURSOR);
+               YYDEBUG(465, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1215 "Zend/zend_language_scanner.l"
+#line 1218 "Zend/zend_language_scanner.l"
                {
        return T_VAR;
 }
-#line 5094 "Zend/zend_language_scanner.c"
-yy470:
-               YYDEBUG(470, *YYCURSOR);
+#line 5073 "Zend/zend_language_scanner.c"
+yy466:
+               YYDEBUG(466, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'M') goto yy474;
-               if (yych == 'm') goto yy474;
+               if (yych == 'M') goto yy470;
+               if (yych == 'm') goto yy470;
                goto yy187;
-yy471:
-               YYDEBUG(471, *YYCURSOR);
+yy467:
+               YYDEBUG(467, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'W') goto yy472;
+               if (yych == 'W') goto yy468;
                if (yych != 'w') goto yy187;
-yy472:
-               YYDEBUG(472, *YYCURSOR);
+yy468:
+               YYDEBUG(468, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(473, *YYCURSOR);
+               YYDEBUG(469, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1207 "Zend/zend_language_scanner.l"
+#line 1210 "Zend/zend_language_scanner.l"
                {
        return T_NEW;
 }
-#line 5118 "Zend/zend_language_scanner.c"
-yy474:
-               YYDEBUG(474, *YYCURSOR);
+#line 5097 "Zend/zend_language_scanner.c"
+yy470:
+               YYDEBUG(470, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy475;
+               if (yych == 'E') goto yy471;
                if (yych != 'e') goto yy187;
-yy475:
-               YYDEBUG(475, *YYCURSOR);
+yy471:
+               YYDEBUG(471, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy476;
+               if (yych == 'S') goto yy472;
                if (yych != 's') goto yy187;
-yy476:
-               YYDEBUG(476, *YYCURSOR);
+yy472:
+               YYDEBUG(472, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy477;
+               if (yych == 'P') goto yy473;
                if (yych != 'p') goto yy187;
-yy477:
-               YYDEBUG(477, *YYCURSOR);
+yy473:
+               YYDEBUG(473, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy478;
+               if (yych == 'A') goto yy474;
                if (yych != 'a') goto yy187;
-yy478:
-               YYDEBUG(478, *YYCURSOR);
+yy474:
+               YYDEBUG(474, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy479;
+               if (yych == 'C') goto yy475;
                if (yych != 'c') goto yy187;
-yy479:
-               YYDEBUG(479, *YYCURSOR);
+yy475:
+               YYDEBUG(475, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy480;
+               if (yych == 'E') goto yy476;
                if (yych != 'e') goto yy187;
-yy480:
-               YYDEBUG(480, *YYCURSOR);
+yy476:
+               YYDEBUG(476, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(481, *YYCURSOR);
+               YYDEBUG(477, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1267 "Zend/zend_language_scanner.l"
+#line 1270 "Zend/zend_language_scanner.l"
                {
        return T_NAMESPACE;
 }
-#line 5161 "Zend/zend_language_scanner.c"
+#line 5140 "Zend/zend_language_scanner.c"
+yy478:
+               YYDEBUG(478, *YYCURSOR);
+               yyaccept = 3;
+               YYMARKER = ++YYCURSOR;
+               YYFILL(3);
+               yych = *YYCURSOR;
+               YYDEBUG(479, *YYCURSOR);
+               if (yych <= 'D') {
+                       if (yych <= '/') goto yy190;
+                       if (yych <= '9') goto yy478;
+                       goto yy190;
+               } else {
+                       if (yych <= 'E') goto yy193;
+                       if (yych == 'e') goto yy193;
+                       goto yy190;
+               }
+yy480:
+               YYDEBUG(480, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(481, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1390 "Zend/zend_language_scanner.l"
+               {
+       return T_CONCAT_EQUAL;
+}
+#line 5166 "Zend/zend_language_scanner.c"
 yy482:
                YYDEBUG(482, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych != '.') goto yy194;
                YYDEBUG(483, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(484, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1206 "Zend/zend_language_scanner.l"
+               {
+       return T_ELLIPSIS;
+}
+#line 5179 "Zend/zend_language_scanner.c"
+yy485:
+               YYDEBUG(485, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(486, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1199 "Zend/zend_language_scanner.l"
+#line 1198 "Zend/zend_language_scanner.l"
                {
        return T_PAAMAYIM_NEKUDOTAYIM;
 }
-#line 5171 "Zend/zend_language_scanner.c"
-yy484:
-               YYDEBUG(484, *YYCURSOR);
+#line 5189 "Zend/zend_language_scanner.c"
+yy487:
+               YYDEBUG(487, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy485:
-               YYDEBUG(485, *YYCURSOR);
+yy488:
+               YYDEBUG(488, *YYCURSOR);
                if (yych <= '\f') {
                        if (yych <= 0x08) goto yy141;
-                       if (yych <= '\n') goto yy484;
+                       if (yych <= '\n') goto yy487;
                        goto yy141;
                } else {
-                       if (yych <= '\r') goto yy484;
-                       if (yych == ' ') goto yy484;
+                       if (yych <= '\r') goto yy487;
+                       if (yych == ' ') goto yy487;
                        goto yy141;
                }
-yy486:
-               YYDEBUG(486, *YYCURSOR);
+yy489:
+               YYDEBUG(489, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(487, *YYCURSOR);
+               YYDEBUG(490, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1375 "Zend/zend_language_scanner.l"
+#line 1378 "Zend/zend_language_scanner.l"
                {
        return T_MINUS_EQUAL;
 }
-#line 5197 "Zend/zend_language_scanner.c"
-yy488:
-               YYDEBUG(488, *YYCURSOR);
+#line 5215 "Zend/zend_language_scanner.c"
+yy491:
+               YYDEBUG(491, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(489, *YYCURSOR);
+               YYDEBUG(492, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1343 "Zend/zend_language_scanner.l"
+#line 1346 "Zend/zend_language_scanner.l"
                {
        return T_DEC;
 }
-#line 5207 "Zend/zend_language_scanner.c"
-yy490:
-               YYDEBUG(490, *YYCURSOR);
+#line 5225 "Zend/zend_language_scanner.c"
+yy493:
+               YYDEBUG(493, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(491, *YYCURSOR);
+               YYDEBUG(494, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1171 "Zend/zend_language_scanner.l"
+#line 1170 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        return T_OBJECT_OPERATOR;
 }
-#line 5218 "Zend/zend_language_scanner.c"
-yy492:
-               YYDEBUG(492, *YYCURSOR);
+#line 5236 "Zend/zend_language_scanner.c"
+yy495:
+               YYDEBUG(495, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'O') {
-                       if (yych == 'I') goto yy499;
+                       if (yych == 'I') goto yy502;
                        if (yych <= 'N') goto yy187;
-                       goto yy500;
+                       goto yy503;
                } else {
                        if (yych <= 'i') {
                                if (yych <= 'h') goto yy187;
-                               goto yy499;
+                               goto yy502;
                        } else {
-                               if (yych == 'o') goto yy500;
+                               if (yych == 'o') goto yy503;
                                goto yy187;
                        }
                }
-yy493:
-               YYDEBUG(493, *YYCURSOR);
+yy496:
+               YYDEBUG(496, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'B') goto yy494;
+               if (yych == 'B') goto yy497;
                if (yych != 'b') goto yy187;
-yy494:
-               YYDEBUG(494, *YYCURSOR);
+yy497:
+               YYDEBUG(497, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy495;
+               if (yych == 'L') goto yy498;
                if (yych != 'l') goto yy187;
-yy495:
-               YYDEBUG(495, *YYCURSOR);
+yy498:
+               YYDEBUG(498, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy496;
+               if (yych == 'I') goto yy499;
                if (yych != 'i') goto yy187;
-yy496:
-               YYDEBUG(496, *YYCURSOR);
+yy499:
+               YYDEBUG(499, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy497;
+               if (yych == 'C') goto yy500;
                if (yych != 'c') goto yy187;
-yy497:
-               YYDEBUG(497, *YYCURSOR);
+yy500:
+               YYDEBUG(500, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(498, *YYCURSOR);
+               YYDEBUG(501, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1315 "Zend/zend_language_scanner.l"
+#line 1318 "Zend/zend_language_scanner.l"
                {
        return T_PUBLIC;
 }
-#line 5267 "Zend/zend_language_scanner.c"
-yy499:
-               YYDEBUG(499, *YYCURSOR);
+#line 5285 "Zend/zend_language_scanner.c"
+yy502:
+               YYDEBUG(502, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'V') {
-                       if (yych == 'N') goto yy508;
+                       if (yych == 'N') goto yy511;
                        if (yych <= 'U') goto yy187;
-                       goto yy509;
+                       goto yy512;
                } else {
                        if (yych <= 'n') {
                                if (yych <= 'm') goto yy187;
-                               goto yy508;
+                               goto yy511;
                        } else {
-                               if (yych == 'v') goto yy509;
+                               if (yych == 'v') goto yy512;
                                goto yy187;
                        }
                }
-yy500:
-               YYDEBUG(500, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy501;
-               if (yych != 't') goto yy187;
-yy501:
-               YYDEBUG(501, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy502;
-               if (yych != 'e') goto yy187;
-yy502:
-               YYDEBUG(502, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy503;
-               if (yych != 'c') goto yy187;
 yy503:
                YYDEBUG(503, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5308,1072 +5311,1069 @@ yy504:
 yy505:
                YYDEBUG(505, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy506;
-               if (yych != 'd') goto yy187;
+               if (yych == 'C') goto yy506;
+               if (yych != 'c') goto yy187;
 yy506:
                YYDEBUG(506, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy507;
+               if (yych != 't') goto yy187;
+yy507:
+               YYDEBUG(507, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy508;
+               if (yych != 'e') goto yy187;
+yy508:
+               YYDEBUG(508, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'D') goto yy509;
+               if (yych != 'd') goto yy187;
+yy509:
+               YYDEBUG(509, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(507, *YYCURSOR);
+               YYDEBUG(510, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1311 "Zend/zend_language_scanner.l"
+#line 1314 "Zend/zend_language_scanner.l"
                {
        return T_PROTECTED;
 }
-#line 5326 "Zend/zend_language_scanner.c"
-yy508:
-               YYDEBUG(508, *YYCURSOR);
+#line 5344 "Zend/zend_language_scanner.c"
+yy511:
+               YYDEBUG(511, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy514;
-               if (yych == 't') goto yy514;
+               if (yych == 'T') goto yy517;
+               if (yych == 't') goto yy517;
                goto yy187;
-yy509:
-               YYDEBUG(509, *YYCURSOR);
+yy512:
+               YYDEBUG(512, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy510;
+               if (yych == 'A') goto yy513;
                if (yych != 'a') goto yy187;
-yy510:
-               YYDEBUG(510, *YYCURSOR);
+yy513:
+               YYDEBUG(513, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy511;
+               if (yych == 'T') goto yy514;
                if (yych != 't') goto yy187;
-yy511:
-               YYDEBUG(511, *YYCURSOR);
+yy514:
+               YYDEBUG(514, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy512;
+               if (yych == 'E') goto yy515;
                if (yych != 'e') goto yy187;
-yy512:
-               YYDEBUG(512, *YYCURSOR);
+yy515:
+               YYDEBUG(515, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(513, *YYCURSOR);
+               YYDEBUG(516, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1307 "Zend/zend_language_scanner.l"
+#line 1310 "Zend/zend_language_scanner.l"
                {
        return T_PRIVATE;
 }
-#line 5360 "Zend/zend_language_scanner.c"
-yy514:
-               YYDEBUG(514, *YYCURSOR);
+#line 5378 "Zend/zend_language_scanner.c"
+yy517:
+               YYDEBUG(517, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(515, *YYCURSOR);
+               YYDEBUG(518, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1147 "Zend/zend_language_scanner.l"
+#line 1146 "Zend/zend_language_scanner.l"
                {
        return T_PRINT;
 }
-#line 5373 "Zend/zend_language_scanner.c"
-yy516:
-               YYDEBUG(516, *YYCURSOR);
+#line 5391 "Zend/zend_language_scanner.c"
+yy519:
+               YYDEBUG(519, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy521;
-               if (yych == 'o') goto yy521;
+               if (yych == 'O') goto yy524;
+               if (yych == 'o') goto yy524;
                goto yy187;
-yy517:
-               YYDEBUG(517, *YYCURSOR);
+yy520:
+               YYDEBUG(520, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy518;
+               if (yych == 'T') goto yy521;
                if (yych != 't') goto yy187;
-yy518:
-               YYDEBUG(518, *YYCURSOR);
+yy521:
+               YYDEBUG(521, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy519;
+               if (yych == 'O') goto yy522;
                if (yych != 'o') goto yy187;
-yy519:
-               YYDEBUG(519, *YYCURSOR);
+yy522:
+               YYDEBUG(522, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(520, *YYCURSOR);
+               YYDEBUG(523, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1139 "Zend/zend_language_scanner.l"
+#line 1138 "Zend/zend_language_scanner.l"
                {
        return T_GOTO;
 }
-#line 5402 "Zend/zend_language_scanner.c"
-yy521:
-               YYDEBUG(521, *YYCURSOR);
+#line 5420 "Zend/zend_language_scanner.c"
+yy524:
+               YYDEBUG(524, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'B') goto yy522;
+               if (yych == 'B') goto yy525;
                if (yych != 'b') goto yy187;
-yy522:
-               YYDEBUG(522, *YYCURSOR);
+yy525:
+               YYDEBUG(525, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy523;
+               if (yych == 'A') goto yy526;
                if (yych != 'a') goto yy187;
-yy523:
-               YYDEBUG(523, *YYCURSOR);
+yy526:
+               YYDEBUG(526, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy524;
+               if (yych == 'L') goto yy527;
                if (yych != 'l') goto yy187;
-yy524:
-               YYDEBUG(524, *YYCURSOR);
+yy527:
+               YYDEBUG(527, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(525, *YYCURSOR);
+               YYDEBUG(528, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1279 "Zend/zend_language_scanner.l"
+#line 1282 "Zend/zend_language_scanner.l"
                {
        return T_GLOBAL;
 }
-#line 5430 "Zend/zend_language_scanner.c"
-yy526:
-               YYDEBUG(526, *YYCURSOR);
+#line 5448 "Zend/zend_language_scanner.c"
+yy529:
+               YYDEBUG(529, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '<') goto yy534;
+               if (yych == '<') goto yy537;
                goto yy194;
-yy527:
-               YYDEBUG(527, *YYCURSOR);
+yy530:
+               YYDEBUG(530, *YYCURSOR);
                yych = *++YYCURSOR;
                goto yy181;
-yy528:
-               YYDEBUG(528, *YYCURSOR);
+yy531:
+               YYDEBUG(531, *YYCURSOR);
                yych = *++YYCURSOR;
                goto yy179;
-yy529:
-               YYDEBUG(529, *YYCURSOR);
+yy532:
+               YYDEBUG(532, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy530;
+               if (yych == 'E') goto yy533;
                if (yych != 'e') goto yy187;
-yy530:
-               YYDEBUG(530, *YYCURSOR);
+yy533:
+               YYDEBUG(533, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy531;
+               if (yych == 'A') goto yy534;
                if (yych != 'a') goto yy187;
-yy531:
-               YYDEBUG(531, *YYCURSOR);
+yy534:
+               YYDEBUG(534, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'K') goto yy532;
+               if (yych == 'K') goto yy535;
                if (yych != 'k') goto yy187;
-yy532:
-               YYDEBUG(532, *YYCURSOR);
+yy535:
+               YYDEBUG(535, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(533, *YYCURSOR);
+               YYDEBUG(536, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1131 "Zend/zend_language_scanner.l"
+#line 1130 "Zend/zend_language_scanner.l"
                {
        return T_BREAK;
 }
-#line 5471 "Zend/zend_language_scanner.c"
-yy534:
-               YYDEBUG(534, *YYCURSOR);
+#line 5489 "Zend/zend_language_scanner.c"
+yy537:
+               YYDEBUG(537, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '<') goto yy270;
+               if (yych == '<') goto yy266;
                goto yy194;
-yy535:
-               YYDEBUG(535, *YYCURSOR);
+yy538:
+               YYDEBUG(538, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy542;
-               if (yych == 'a') goto yy542;
+               if (yych == 'A') goto yy545;
+               if (yych == 'a') goto yy545;
                goto yy187;
-yy536:
-               YYDEBUG(536, *YYCURSOR);
+yy539:
+               YYDEBUG(539, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy537;
+               if (yych == 'I') goto yy540;
                if (yych != 'i') goto yy187;
-yy537:
-               YYDEBUG(537, *YYCURSOR);
+yy540:
+               YYDEBUG(540, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy538;
+               if (yych == 'T') goto yy541;
                if (yych != 't') goto yy187;
-yy538:
-               YYDEBUG(538, *YYCURSOR);
+yy541:
+               YYDEBUG(541, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy539;
+               if (yych == 'C') goto yy542;
                if (yych != 'c') goto yy187;
-yy539:
-               YYDEBUG(539, *YYCURSOR);
+yy542:
+               YYDEBUG(542, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy540;
+               if (yych == 'H') goto yy543;
                if (yych != 'h') goto yy187;
-yy540:
-               YYDEBUG(540, *YYCURSOR);
+yy543:
+               YYDEBUG(543, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(541, *YYCURSOR);
+               YYDEBUG(544, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1115 "Zend/zend_language_scanner.l"
+#line 1114 "Zend/zend_language_scanner.l"
                {
        return T_SWITCH;
 }
-#line 5515 "Zend/zend_language_scanner.c"
-yy542:
-               YYDEBUG(542, *YYCURSOR);
+#line 5533 "Zend/zend_language_scanner.c"
+yy545:
+               YYDEBUG(545, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy543;
+               if (yych == 'T') goto yy546;
                if (yych != 't') goto yy187;
-yy543:
-               YYDEBUG(543, *YYCURSOR);
+yy546:
+               YYDEBUG(546, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy544;
+               if (yych == 'I') goto yy547;
                if (yych != 'i') goto yy187;
-yy544:
-               YYDEBUG(544, *YYCURSOR);
+yy547:
+               YYDEBUG(547, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy545;
+               if (yych == 'C') goto yy548;
                if (yych != 'c') goto yy187;
-yy545:
-               YYDEBUG(545, *YYCURSOR);
+yy548:
+               YYDEBUG(548, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(546, *YYCURSOR);
+               YYDEBUG(549, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1295 "Zend/zend_language_scanner.l"
+#line 1298 "Zend/zend_language_scanner.l"
                {
        return T_STATIC;
 }
-#line 5543 "Zend/zend_language_scanner.c"
-yy547:
-               YYDEBUG(547, *YYCURSOR);
+#line 5561 "Zend/zend_language_scanner.c"
+yy550:
+               YYDEBUG(550, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy558;
-               if (yych == 's') goto yy558;
+               if (yych == 'S') goto yy561;
+               if (yych == 's') goto yy561;
                goto yy187;
-yy548:
-               YYDEBUG(548, *YYCURSOR);
+yy551:
+               YYDEBUG(551, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy556;
-               if (yych == 'd') goto yy556;
+               if (yych == 'D') goto yy559;
+               if (yych == 'd') goto yy559;
                goto yy187;
-yy549:
-               YYDEBUG(549, *YYCURSOR);
+yy552:
+               YYDEBUG(552, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy552;
-               if (yych == 'r') goto yy552;
+               if (yych == 'R') goto yy555;
+               if (yych == 'r') goto yy555;
                goto yy187;
-yy550:
-               YYDEBUG(550, *YYCURSOR);
+yy553:
+               YYDEBUG(553, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(551, *YYCURSOR);
+               YYDEBUG(554, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1111 "Zend/zend_language_scanner.l"
+#line 1110 "Zend/zend_language_scanner.l"
                {
        return T_AS;
 }
-#line 5574 "Zend/zend_language_scanner.c"
-yy552:
-               YYDEBUG(552, *YYCURSOR);
+#line 5592 "Zend/zend_language_scanner.c"
+yy555:
+               YYDEBUG(555, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy553;
+               if (yych == 'A') goto yy556;
                if (yych != 'a') goto yy187;
-yy553:
-               YYDEBUG(553, *YYCURSOR);
+yy556:
+               YYDEBUG(556, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy554;
+               if (yych == 'Y') goto yy557;
                if (yych != 'y') goto yy187;
-yy554:
-               YYDEBUG(554, *YYCURSOR);
+yy557:
+               YYDEBUG(557, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(555, *YYCURSOR);
+               YYDEBUG(558, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1331 "Zend/zend_language_scanner.l"
+#line 1334 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY;
 }
-#line 5597 "Zend/zend_language_scanner.c"
-yy556:
-               YYDEBUG(556, *YYCURSOR);
+#line 5615 "Zend/zend_language_scanner.c"
+yy559:
+               YYDEBUG(559, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(557, *YYCURSOR);
+               YYDEBUG(560, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1427 "Zend/zend_language_scanner.l"
+#line 1430 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_AND;
 }
-#line 5610 "Zend/zend_language_scanner.c"
-yy558:
-               YYDEBUG(558, *YYCURSOR);
+#line 5628 "Zend/zend_language_scanner.c"
+yy561:
+               YYDEBUG(561, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy559;
+               if (yych == 'T') goto yy562;
                if (yych != 't') goto yy187;
-yy559:
-               YYDEBUG(559, *YYCURSOR);
+yy562:
+               YYDEBUG(562, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy560;
+               if (yych == 'R') goto yy563;
                if (yych != 'r') goto yy187;
-yy560:
-               YYDEBUG(560, *YYCURSOR);
+yy563:
+               YYDEBUG(563, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy561;
+               if (yych == 'A') goto yy564;
                if (yych != 'a') goto yy187;
-yy561:
-               YYDEBUG(561, *YYCURSOR);
+yy564:
+               YYDEBUG(564, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy562;
+               if (yych == 'C') goto yy565;
                if (yych != 'c') goto yy187;
-yy562:
-               YYDEBUG(562, *YYCURSOR);
+yy565:
+               YYDEBUG(565, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy563;
+               if (yych == 'T') goto yy566;
                if (yych != 't') goto yy187;
-yy563:
-               YYDEBUG(563, *YYCURSOR);
+yy566:
+               YYDEBUG(566, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(564, *YYCURSOR);
+               YYDEBUG(567, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1299 "Zend/zend_language_scanner.l"
+#line 1302 "Zend/zend_language_scanner.l"
                {
        return T_ABSTRACT;
 }
-#line 5648 "Zend/zend_language_scanner.c"
-yy565:
-               YYDEBUG(565, *YYCURSOR);
+#line 5666 "Zend/zend_language_scanner.c"
+yy568:
+               YYDEBUG(568, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy566;
+               if (yych == 'I') goto yy569;
                if (yych != 'i') goto yy187;
-yy566:
-               YYDEBUG(566, *YYCURSOR);
+yy569:
+               YYDEBUG(569, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy567;
+               if (yych == 'L') goto yy570;
                if (yych != 'l') goto yy187;
-yy567:
-               YYDEBUG(567, *YYCURSOR);
+yy570:
+               YYDEBUG(570, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy568;
+               if (yych == 'E') goto yy571;
                if (yych != 'e') goto yy187;
-yy568:
-               YYDEBUG(568, *YYCURSOR);
+yy571:
+               YYDEBUG(571, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(569, *YYCURSOR);
+               YYDEBUG(572, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1071 "Zend/zend_language_scanner.l"
+#line 1070 "Zend/zend_language_scanner.l"
                {
        return T_WHILE;
 }
-#line 5676 "Zend/zend_language_scanner.c"
-yy570:
-               YYDEBUG(570, *YYCURSOR);
+#line 5694 "Zend/zend_language_scanner.c"
+yy573:
+               YYDEBUG(573, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(571, *YYCURSOR);
+               YYDEBUG(574, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1055 "Zend/zend_language_scanner.l"
+#line 1054 "Zend/zend_language_scanner.l"
                {
        return T_IF;
 }
-#line 5689 "Zend/zend_language_scanner.c"
-yy572:
-               YYDEBUG(572, *YYCURSOR);
+#line 5707 "Zend/zend_language_scanner.c"
+yy575:
+               YYDEBUG(575, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy614;
-               if (yych == 'p') goto yy614;
+               if (yych == 'P') goto yy617;
+               if (yych == 'p') goto yy617;
                goto yy187;
-yy573:
-               YYDEBUG(573, *YYCURSOR);
+yy576:
+               YYDEBUG(576, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'T') {
                        if (yych <= 'C') {
                                if (yych <= 'B') goto yy187;
-                               goto yy581;
+                               goto yy584;
                        } else {
                                if (yych <= 'R') goto yy187;
-                               if (yych <= 'S') goto yy579;
-                               goto yy580;
+                               if (yych <= 'S') goto yy582;
+                               goto yy583;
                        }
                } else {
                        if (yych <= 'r') {
-                               if (yych == 'c') goto yy581;
+                               if (yych == 'c') goto yy584;
                                goto yy187;
                        } else {
-                               if (yych <= 's') goto yy579;
-                               if (yych <= 't') goto yy580;
+                               if (yych <= 's') goto yy582;
+                               if (yych <= 't') goto yy583;
                                goto yy187;
                        }
                }
-yy574:
-               YYDEBUG(574, *YYCURSOR);
+yy577:
+               YYDEBUG(577, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy575;
+               if (yych == 'S') goto yy578;
                if (yych != 's') goto yy187;
-yy575:
-               YYDEBUG(575, *YYCURSOR);
+yy578:
+               YYDEBUG(578, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy576;
+               if (yych == 'E') goto yy579;
                if (yych != 'e') goto yy187;
-yy576:
-               YYDEBUG(576, *YYCURSOR);
+yy579:
+               YYDEBUG(579, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy577;
+               if (yych == 'T') goto yy580;
                if (yych != 't') goto yy187;
-yy577:
-               YYDEBUG(577, *YYCURSOR);
+yy580:
+               YYDEBUG(580, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(578, *YYCURSOR);
+               YYDEBUG(581, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1283 "Zend/zend_language_scanner.l"
+#line 1286 "Zend/zend_language_scanner.l"
                {
        return T_ISSET;
 }
-#line 5745 "Zend/zend_language_scanner.c"
-yy579:
-               YYDEBUG(579, *YYCURSOR);
+#line 5763 "Zend/zend_language_scanner.c"
+yy582:
+               YYDEBUG(582, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy600;
-               if (yych == 't') goto yy600;
+               if (yych == 'T') goto yy603;
+               if (yych == 't') goto yy603;
                goto yy187;
-yy580:
-               YYDEBUG(580, *YYCURSOR);
+yy583:
+               YYDEBUG(583, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy593;
-               if (yych == 'e') goto yy593;
+               if (yych == 'E') goto yy596;
+               if (yych == 'e') goto yy596;
                goto yy187;
-yy581:
-               YYDEBUG(581, *YYCURSOR);
+yy584:
+               YYDEBUG(584, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy582;
+               if (yych == 'L') goto yy585;
                if (yych != 'l') goto yy187;
-yy582:
-               YYDEBUG(582, *YYCURSOR);
+yy585:
+               YYDEBUG(585, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy583;
+               if (yych == 'U') goto yy586;
                if (yych != 'u') goto yy187;
-yy583:
-               YYDEBUG(583, *YYCURSOR);
+yy586:
+               YYDEBUG(586, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy584;
+               if (yych == 'D') goto yy587;
                if (yych != 'd') goto yy187;
-yy584:
-               YYDEBUG(584, *YYCURSOR);
+yy587:
+               YYDEBUG(587, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy585;
+               if (yych == 'E') goto yy588;
                if (yych != 'e') goto yy187;
-yy585:
-               YYDEBUG(585, *YYCURSOR);
+yy588:
+               YYDEBUG(588, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '9') {
                                if (yych >= '0') goto yy186;
                        } else {
-                               if (yych <= '@') goto yy586;
+                               if (yych <= '@') goto yy589;
                                if (yych <= 'Z') goto yy186;
                        }
                } else {
                        if (yych <= '`') {
-                               if (yych <= '_') goto yy587;
+                               if (yych <= '_') goto yy590;
                        } else {
                                if (yych <= 'z') goto yy186;
                                if (yych >= 0x7F) goto yy186;
                        }
                }
-yy586:
-               YYDEBUG(586, *YYCURSOR);
+yy589:
+               YYDEBUG(589, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1251 "Zend/zend_language_scanner.l"
+#line 1254 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE;
 }
-#line 5803 "Zend/zend_language_scanner.c"
-yy587:
-               YYDEBUG(587, *YYCURSOR);
+#line 5821 "Zend/zend_language_scanner.c"
+yy590:
+               YYDEBUG(590, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy588;
+               if (yych == 'O') goto yy591;
                if (yych != 'o') goto yy187;
-yy588:
-               YYDEBUG(588, *YYCURSOR);
+yy591:
+               YYDEBUG(591, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy589;
+               if (yych == 'N') goto yy592;
                if (yych != 'n') goto yy187;
-yy589:
-               YYDEBUG(589, *YYCURSOR);
+yy592:
+               YYDEBUG(592, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy590;
+               if (yych == 'C') goto yy593;
                if (yych != 'c') goto yy187;
-yy590:
-               YYDEBUG(590, *YYCURSOR);
+yy593:
+               YYDEBUG(593, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy591;
+               if (yych == 'E') goto yy594;
                if (yych != 'e') goto yy187;
-yy591:
-               YYDEBUG(591, *YYCURSOR);
+yy594:
+               YYDEBUG(594, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(592, *YYCURSOR);
+               YYDEBUG(595, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1255 "Zend/zend_language_scanner.l"
+#line 1258 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE_ONCE;
 }
-#line 5836 "Zend/zend_language_scanner.c"
-yy593:
-               YYDEBUG(593, *YYCURSOR);
+#line 5854 "Zend/zend_language_scanner.c"
+yy596:
+               YYDEBUG(596, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy594;
+               if (yych == 'R') goto yy597;
                if (yych != 'r') goto yy187;
-yy594:
-               YYDEBUG(594, *YYCURSOR);
+yy597:
+               YYDEBUG(597, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'F') goto yy595;
+               if (yych == 'F') goto yy598;
                if (yych != 'f') goto yy187;
-yy595:
-               YYDEBUG(595, *YYCURSOR);
+yy598:
+               YYDEBUG(598, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy596;
+               if (yych == 'A') goto yy599;
                if (yych != 'a') goto yy187;
-yy596:
-               YYDEBUG(596, *YYCURSOR);
+yy599:
+               YYDEBUG(599, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy597;
+               if (yych == 'C') goto yy600;
                if (yych != 'c') goto yy187;
-yy597:
-               YYDEBUG(597, *YYCURSOR);
+yy600:
+               YYDEBUG(600, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy598;
+               if (yych == 'E') goto yy601;
                if (yych != 'e') goto yy187;
-yy598:
-               YYDEBUG(598, *YYCURSOR);
+yy601:
+               YYDEBUG(601, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(599, *YYCURSOR);
+               YYDEBUG(602, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1155 "Zend/zend_language_scanner.l"
+#line 1154 "Zend/zend_language_scanner.l"
                {
        return T_INTERFACE;
 }
-#line 5874 "Zend/zend_language_scanner.c"
-yy600:
-               YYDEBUG(600, *YYCURSOR);
+#line 5892 "Zend/zend_language_scanner.c"
+yy603:
+               YYDEBUG(603, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'E') {
-                       if (yych == 'A') goto yy601;
+                       if (yych == 'A') goto yy604;
                        if (yych <= 'D') goto yy187;
-                       goto yy602;
+                       goto yy605;
                } else {
                        if (yych <= 'a') {
                                if (yych <= '`') goto yy187;
                        } else {
-                               if (yych == 'e') goto yy602;
+                               if (yych == 'e') goto yy605;
                                goto yy187;
                        }
                }
-yy601:
-               YYDEBUG(601, *YYCURSOR);
+yy604:
+               YYDEBUG(604, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy608;
-               if (yych == 'n') goto yy608;
+               if (yych == 'N') goto yy611;
+               if (yych == 'n') goto yy611;
                goto yy187;
-yy602:
-               YYDEBUG(602, *YYCURSOR);
+yy605:
+               YYDEBUG(605, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy603;
+               if (yych == 'A') goto yy606;
                if (yych != 'a') goto yy187;
-yy603:
-               YYDEBUG(603, *YYCURSOR);
+yy606:
+               YYDEBUG(606, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy604;
+               if (yych == 'D') goto yy607;
                if (yych != 'd') goto yy187;
-yy604:
-               YYDEBUG(604, *YYCURSOR);
+yy607:
+               YYDEBUG(607, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy605;
+               if (yych == 'O') goto yy608;
                if (yych != 'o') goto yy187;
-yy605:
-               YYDEBUG(605, *YYCURSOR);
+yy608:
+               YYDEBUG(608, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'F') goto yy606;
+               if (yych == 'F') goto yy609;
                if (yych != 'f') goto yy187;
-yy606:
-               YYDEBUG(606, *YYCURSOR);
+yy609:
+               YYDEBUG(609, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(607, *YYCURSOR);
+               YYDEBUG(610, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1275 "Zend/zend_language_scanner.l"
+#line 1278 "Zend/zend_language_scanner.l"
                {
         return T_INSTEADOF;
 }
-#line 5928 "Zend/zend_language_scanner.c"
-yy608:
-               YYDEBUG(608, *YYCURSOR);
+#line 5946 "Zend/zend_language_scanner.c"
+yy611:
+               YYDEBUG(611, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy609;
+               if (yych == 'C') goto yy612;
                if (yych != 'c') goto yy187;
-yy609:
-               YYDEBUG(609, *YYCURSOR);
+yy612:
+               YYDEBUG(612, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy610;
+               if (yych == 'E') goto yy613;
                if (yych != 'e') goto yy187;
-yy610:
-               YYDEBUG(610, *YYCURSOR);
+yy613:
+               YYDEBUG(613, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy611;
+               if (yych == 'O') goto yy614;
                if (yych != 'o') goto yy187;
-yy611:
-               YYDEBUG(611, *YYCURSOR);
+yy614:
+               YYDEBUG(614, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'F') goto yy612;
+               if (yych == 'F') goto yy615;
                if (yych != 'f') goto yy187;
-yy612:
-               YYDEBUG(612, *YYCURSOR);
+yy615:
+               YYDEBUG(615, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(613, *YYCURSOR);
+               YYDEBUG(616, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1107 "Zend/zend_language_scanner.l"
+#line 1106 "Zend/zend_language_scanner.l"
                {
        return T_INSTANCEOF;
 }
-#line 5961 "Zend/zend_language_scanner.c"
-yy614:
-               YYDEBUG(614, *YYCURSOR);
+#line 5979 "Zend/zend_language_scanner.c"
+yy617:
+               YYDEBUG(617, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy615;
+               if (yych == 'L') goto yy618;
                if (yych != 'l') goto yy187;
-yy615:
-               YYDEBUG(615, *YYCURSOR);
+yy618:
+               YYDEBUG(618, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy616;
+               if (yych == 'E') goto yy619;
                if (yych != 'e') goto yy187;
-yy616:
-               YYDEBUG(616, *YYCURSOR);
+yy619:
+               YYDEBUG(619, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'M') goto yy617;
+               if (yych == 'M') goto yy620;
                if (yych != 'm') goto yy187;
-yy617:
-               YYDEBUG(617, *YYCURSOR);
+yy620:
+               YYDEBUG(620, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy618;
+               if (yych == 'E') goto yy621;
                if (yych != 'e') goto yy187;
-yy618:
-               YYDEBUG(618, *YYCURSOR);
+yy621:
+               YYDEBUG(621, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy619;
+               if (yych == 'N') goto yy622;
                if (yych != 'n') goto yy187;
-yy619:
-               YYDEBUG(619, *YYCURSOR);
+yy622:
+               YYDEBUG(622, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy620;
+               if (yych == 'T') goto yy623;
                if (yych != 't') goto yy187;
-yy620:
-               YYDEBUG(620, *YYCURSOR);
+yy623:
+               YYDEBUG(623, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy621;
+               if (yych == 'S') goto yy624;
                if (yych != 's') goto yy187;
-yy621:
-               YYDEBUG(621, *YYCURSOR);
+yy624:
+               YYDEBUG(624, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(622, *YYCURSOR);
+               YYDEBUG(625, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1167 "Zend/zend_language_scanner.l"
+#line 1166 "Zend/zend_language_scanner.l"
                {
        return T_IMPLEMENTS;
 }
-#line 6009 "Zend/zend_language_scanner.c"
-yy623:
-               YYDEBUG(623, *YYCURSOR);
+#line 6027 "Zend/zend_language_scanner.c"
+yy626:
+               YYDEBUG(626, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy631;
-               if (yych == 'r') goto yy631;
+               if (yych == 'R') goto yy634;
+               if (yych == 'r') goto yy634;
                goto yy187;
-yy624:
-               YYDEBUG(624, *YYCURSOR);
+yy627:
+               YYDEBUG(627, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'Y') {
-                       if (yych == 'A') goto yy627;
+                       if (yych == 'A') goto yy630;
                        if (yych <= 'X') goto yy187;
                } else {
                        if (yych <= 'a') {
                                if (yych <= '`') goto yy187;
-                               goto yy627;
+                               goto yy630;
                        } else {
                                if (yych != 'y') goto yy187;
                        }
                }
-               YYDEBUG(625, *YYCURSOR);
+               YYDEBUG(628, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(626, *YYCURSOR);
+               YYDEBUG(629, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1039 "Zend/zend_language_scanner.l"
+#line 1038 "Zend/zend_language_scanner.l"
                {
        return T_TRY;
 }
-#line 6041 "Zend/zend_language_scanner.c"
-yy627:
-               YYDEBUG(627, *YYCURSOR);
+#line 6059 "Zend/zend_language_scanner.c"
+yy630:
+               YYDEBUG(630, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy628;
+               if (yych == 'I') goto yy631;
                if (yych != 'i') goto yy187;
-yy628:
-               YYDEBUG(628, *YYCURSOR);
+yy631:
+               YYDEBUG(631, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy629;
+               if (yych == 'T') goto yy632;
                if (yych != 't') goto yy187;
-yy629:
-               YYDEBUG(629, *YYCURSOR);
+yy632:
+               YYDEBUG(632, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(630, *YYCURSOR);
+               YYDEBUG(633, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1159 "Zend/zend_language_scanner.l"
+#line 1158 "Zend/zend_language_scanner.l"
                {
        return T_TRAIT;
 }
-#line 6064 "Zend/zend_language_scanner.c"
-yy631:
-               YYDEBUG(631, *YYCURSOR);
+#line 6082 "Zend/zend_language_scanner.c"
+yy634:
+               YYDEBUG(634, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy632;
+               if (yych == 'O') goto yy635;
                if (yych != 'o') goto yy187;
-yy632:
-               YYDEBUG(632, *YYCURSOR);
+yy635:
+               YYDEBUG(635, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'W') goto yy633;
+               if (yych == 'W') goto yy636;
                if (yych != 'w') goto yy187;
-yy633:
-               YYDEBUG(633, *YYCURSOR);
+yy636:
+               YYDEBUG(636, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(634, *YYCURSOR);
+               YYDEBUG(637, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1051 "Zend/zend_language_scanner.l"
+#line 1050 "Zend/zend_language_scanner.l"
                {
        return T_THROW;
 }
-#line 6087 "Zend/zend_language_scanner.c"
-yy635:
-               YYDEBUG(635, *YYCURSOR);
+#line 6105 "Zend/zend_language_scanner.c"
+yy638:
+               YYDEBUG(638, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy636;
+               if (yych == 'E') goto yy639;
                if (yych != 'e') goto yy187;
-yy636:
-               YYDEBUG(636, *YYCURSOR);
+yy639:
+               YYDEBUG(639, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy637;
+               if (yych == 'L') goto yy640;
                if (yych != 'l') goto yy187;
-yy637:
-               YYDEBUG(637, *YYCURSOR);
+yy640:
+               YYDEBUG(640, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy638;
+               if (yych == 'D') goto yy641;
                if (yych != 'd') goto yy187;
-yy638:
-               YYDEBUG(638, *YYCURSOR);
+yy641:
+               YYDEBUG(641, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(639, *YYCURSOR);
+               YYDEBUG(642, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1035 "Zend/zend_language_scanner.l"
+#line 1034 "Zend/zend_language_scanner.l"
                {
        return T_YIELD;
 }
-#line 6115 "Zend/zend_language_scanner.c"
-yy640:
-               YYDEBUG(640, *YYCURSOR);
+#line 6133 "Zend/zend_language_scanner.c"
+yy643:
+               YYDEBUG(643, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'T') {
-                       if (yych == 'Q') goto yy642;
+                       if (yych == 'Q') goto yy645;
                        if (yych <= 'S') goto yy187;
                } else {
                        if (yych <= 'q') {
                                if (yych <= 'p') goto yy187;
-                               goto yy642;
+                               goto yy645;
                        } else {
                                if (yych != 't') goto yy187;
                        }
                }
-               YYDEBUG(641, *YYCURSOR);
+               YYDEBUG(644, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy654;
-               if (yych == 'u') goto yy654;
+               if (yych == 'U') goto yy657;
+               if (yych == 'u') goto yy657;
                goto yy187;
-yy642:
-               YYDEBUG(642, *YYCURSOR);
+yy645:
+               YYDEBUG(645, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy643;
+               if (yych == 'U') goto yy646;
                if (yych != 'u') goto yy187;
-yy643:
-               YYDEBUG(643, *YYCURSOR);
+yy646:
+               YYDEBUG(646, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy644;
+               if (yych == 'I') goto yy647;
                if (yych != 'i') goto yy187;
-yy644:
-               YYDEBUG(644, *YYCURSOR);
+yy647:
+               YYDEBUG(647, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy645;
+               if (yych == 'R') goto yy648;
                if (yych != 'r') goto yy187;
-yy645:
-               YYDEBUG(645, *YYCURSOR);
+yy648:
+               YYDEBUG(648, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy646;
+               if (yych == 'E') goto yy649;
                if (yych != 'e') goto yy187;
-yy646:
-               YYDEBUG(646, *YYCURSOR);
+yy649:
+               YYDEBUG(649, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '9') {
                                if (yych >= '0') goto yy186;
                        } else {
-                               if (yych <= '@') goto yy647;
+                               if (yych <= '@') goto yy650;
                                if (yych <= 'Z') goto yy186;
                        }
                } else {
                        if (yych <= '`') {
-                               if (yych <= '_') goto yy648;
+                               if (yych <= '_') goto yy651;
                        } else {
                                if (yych <= 'z') goto yy186;
                                if (yych >= 0x7F) goto yy186;
                        }
                }
-yy647:
-               YYDEBUG(647, *YYCURSOR);
+yy650:
+               YYDEBUG(650, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1259 "Zend/zend_language_scanner.l"
+#line 1262 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE;
 }
-#line 6180 "Zend/zend_language_scanner.c"
-yy648:
-               YYDEBUG(648, *YYCURSOR);
+#line 6198 "Zend/zend_language_scanner.c"
+yy651:
+               YYDEBUG(651, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy649;
+               if (yych == 'O') goto yy652;
                if (yych != 'o') goto yy187;
-yy649:
-               YYDEBUG(649, *YYCURSOR);
+yy652:
+               YYDEBUG(652, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy650;
+               if (yych == 'N') goto yy653;
                if (yych != 'n') goto yy187;
-yy650:
-               YYDEBUG(650, *YYCURSOR);
+yy653:
+               YYDEBUG(653, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy651;
+               if (yych == 'C') goto yy654;
                if (yych != 'c') goto yy187;
-yy651:
-               YYDEBUG(651, *YYCURSOR);
+yy654:
+               YYDEBUG(654, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy652;
+               if (yych == 'E') goto yy655;
                if (yych != 'e') goto yy187;
-yy652:
-               YYDEBUG(652, *YYCURSOR);
+yy655:
+               YYDEBUG(655, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(653, *YYCURSOR);
+               YYDEBUG(656, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1263 "Zend/zend_language_scanner.l"
+#line 1266 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE_ONCE;
 }
-#line 6213 "Zend/zend_language_scanner.c"
-yy654:
-               YYDEBUG(654, *YYCURSOR);
+#line 6231 "Zend/zend_language_scanner.c"
+yy657:
+               YYDEBUG(657, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy655;
+               if (yych == 'R') goto yy658;
                if (yych != 'r') goto yy187;
-yy655:
-               YYDEBUG(655, *YYCURSOR);
+yy658:
+               YYDEBUG(658, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy656;
+               if (yych == 'N') goto yy659;
                if (yych != 'n') goto yy187;
-yy656:
-               YYDEBUG(656, *YYCURSOR);
+yy659:
+               YYDEBUG(659, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(657, *YYCURSOR);
+               YYDEBUG(660, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1031 "Zend/zend_language_scanner.l"
+#line 1030 "Zend/zend_language_scanner.l"
                {
        return T_RETURN;
 }
-#line 6236 "Zend/zend_language_scanner.c"
-yy658:
-               YYDEBUG(658, *YYCURSOR);
+#line 6254 "Zend/zend_language_scanner.c"
+yy661:
+               YYDEBUG(661, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'T') {
                        if (yych <= 'L') {
                                if (yych <= 'K') goto yy187;
-                               goto yy681;
+                               goto yy684;
                        } else {
                                if (yych <= 'R') goto yy187;
-                               if (yych <= 'S') goto yy680;
-                               goto yy679;
+                               if (yych <= 'S') goto yy683;
+                               goto yy682;
                        }
                } else {
                        if (yych <= 'r') {
-                               if (yych == 'l') goto yy681;
+                               if (yych == 'l') goto yy684;
                                goto yy187;
                        } else {
-                               if (yych <= 's') goto yy680;
-                               if (yych <= 't') goto yy679;
+                               if (yych <= 's') goto yy683;
+                               if (yych <= 't') goto yy682;
                                goto yy187;
                        }
                }
-yy659:
-               YYDEBUG(659, *YYCURSOR);
+yy662:
+               YYDEBUG(662, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'O') {
-                       if (yych == 'A') goto yy671;
+                       if (yych == 'A') goto yy674;
                        if (yych <= 'N') goto yy187;
-                       goto yy672;
+                       goto yy675;
                } else {
                        if (yych <= 'a') {
                                if (yych <= '`') goto yy187;
-                               goto yy671;
+                               goto yy674;
                        } else {
-                               if (yych == 'o') goto yy672;
+                               if (yych == 'o') goto yy675;
                                goto yy187;
                        }
                }
-yy660:
-               YYDEBUG(660, *YYCURSOR);
+yy663:
+               YYDEBUG(663, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy661;
+               if (yych == 'N') goto yy664;
                if (yych != 'n') goto yy187;
-yy661:
-               YYDEBUG(661, *YYCURSOR);
+yy664:
+               YYDEBUG(664, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'T') {
                        if (yych <= 'R') goto yy187;
-                       if (yych >= 'T') goto yy663;
+                       if (yych >= 'T') goto yy666;
                } else {
                        if (yych <= 'r') goto yy187;
-                       if (yych <= 's') goto yy662;
-                       if (yych <= 't') goto yy663;
+                       if (yych <= 's') goto yy665;
+                       if (yych <= 't') goto yy666;
                        goto yy187;
                }
-yy662:
-               YYDEBUG(662, *YYCURSOR);
+yy665:
+               YYDEBUG(665, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy669;
-               if (yych == 't') goto yy669;
+               if (yych == 'T') goto yy672;
+               if (yych == 't') goto yy672;
                goto yy187;
-yy663:
-               YYDEBUG(663, *YYCURSOR);
+yy666:
+               YYDEBUG(666, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy664;
+               if (yych == 'I') goto yy667;
                if (yych != 'i') goto yy187;
-yy664:
-               YYDEBUG(664, *YYCURSOR);
+yy667:
+               YYDEBUG(667, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy665;
+               if (yych == 'N') goto yy668;
                if (yych != 'n') goto yy187;
-yy665:
-               YYDEBUG(665, *YYCURSOR);
+yy668:
+               YYDEBUG(668, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy666;
+               if (yych == 'U') goto yy669;
                if (yych != 'u') goto yy187;
-yy666:
-               YYDEBUG(666, *YYCURSOR);
+yy669:
+               YYDEBUG(669, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy667;
+               if (yych == 'E') goto yy670;
                if (yych != 'e') goto yy187;
-yy667:
-               YYDEBUG(667, *YYCURSOR);
+yy670:
+               YYDEBUG(670, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(668, *YYCURSOR);
+               YYDEBUG(671, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1135 "Zend/zend_language_scanner.l"
+#line 1134 "Zend/zend_language_scanner.l"
                {
        return T_CONTINUE;
 }
-#line 6330 "Zend/zend_language_scanner.c"
-yy669:
-               YYDEBUG(669, *YYCURSOR);
+#line 6348 "Zend/zend_language_scanner.c"
+yy672:
+               YYDEBUG(672, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(670, *YYCURSOR);
+               YYDEBUG(673, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1027 "Zend/zend_language_scanner.l"
+#line 1026 "Zend/zend_language_scanner.l"
                {
        return T_CONST;
 }
-#line 6343 "Zend/zend_language_scanner.c"
-yy671:
-               YYDEBUG(671, *YYCURSOR);
+#line 6361 "Zend/zend_language_scanner.c"
+yy674:
+               YYDEBUG(674, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy676;
-               if (yych == 's') goto yy676;
+               if (yych == 'S') goto yy679;
+               if (yych == 's') goto yy679;
                goto yy187;
-yy672:
-               YYDEBUG(672, *YYCURSOR);
+yy675:
+               YYDEBUG(675, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy673;
+               if (yych == 'N') goto yy676;
                if (yych != 'n') goto yy187;
-yy673:
-               YYDEBUG(673, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy674;
-               if (yych != 'e') goto yy187;
-yy674:
-               YYDEBUG(674, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 4) {
-                       goto yy186;
-               }
-               YYDEBUG(675, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1211 "Zend/zend_language_scanner.l"
-               {
-       return T_CLONE;
-}
-#line 6372 "Zend/zend_language_scanner.c"
 yy676:
                YYDEBUG(676, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy677;
-               if (yych != 's') goto yy187;
+               if (yych == 'E') goto yy677;
+               if (yych != 'e') goto yy187;
 yy677:
                YYDEBUG(677, *YYCURSOR);
                ++YYCURSOR;
@@ -6382,38 +6382,41 @@ yy677:
                }
                YYDEBUG(678, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1151 "Zend/zend_language_scanner.l"
+#line 1214 "Zend/zend_language_scanner.l"
                {
-       return T_CLASS;
+       return T_CLONE;
 }
 #line 6390 "Zend/zend_language_scanner.c"
 yy679:
                YYDEBUG(679, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy690;
-               if (yych == 'c') goto yy690;
-               goto yy187;
+               if (yych == 'S') goto yy680;
+               if (yych != 's') goto yy187;
 yy680:
                YYDEBUG(680, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy688;
-               if (yych == 'e') goto yy688;
-               goto yy187;
-yy681:
+               ++YYCURSOR;
+               if (yybm[0+(yych = *YYCURSOR)] & 4) {
+                       goto yy186;
+               }
                YYDEBUG(681, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy682;
-               if (yych != 'l') goto yy187;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1150 "Zend/zend_language_scanner.l"
+               {
+       return T_CLASS;
+}
+#line 6408 "Zend/zend_language_scanner.c"
 yy682:
                YYDEBUG(682, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy683;
-               if (yych != 'a') goto yy187;
+               if (yych == 'C') goto yy693;
+               if (yych == 'c') goto yy693;
+               goto yy187;
 yy683:
                YYDEBUG(683, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'B') goto yy684;
-               if (yych != 'b') goto yy187;
+               if (yych == 'E') goto yy691;
+               if (yych == 'e') goto yy691;
+               goto yy187;
 yy684:
                YYDEBUG(684, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6422,760 +6425,775 @@ yy684:
 yy685:
                YYDEBUG(685, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy686;
-               if (yych != 'e') goto yy187;
+               if (yych == 'A') goto yy686;
+               if (yych != 'a') goto yy187;
 yy686:
                YYDEBUG(686, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'B') goto yy687;
+               if (yych != 'b') goto yy187;
+yy687:
+               YYDEBUG(687, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy688;
+               if (yych != 'l') goto yy187;
+yy688:
+               YYDEBUG(688, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy689;
+               if (yych != 'e') goto yy187;
+yy689:
+               YYDEBUG(689, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(687, *YYCURSOR);
+               YYDEBUG(690, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1335 "Zend/zend_language_scanner.l"
+#line 1338 "Zend/zend_language_scanner.l"
                {
  return T_CALLABLE;
 }
-#line 6440 "Zend/zend_language_scanner.c"
-yy688:
-               YYDEBUG(688, *YYCURSOR);
+#line 6458 "Zend/zend_language_scanner.c"
+yy691:
+               YYDEBUG(691, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(689, *YYCURSOR);
+               YYDEBUG(692, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1123 "Zend/zend_language_scanner.l"
+#line 1122 "Zend/zend_language_scanner.l"
                {
        return T_CASE;
 }
-#line 6453 "Zend/zend_language_scanner.c"
-yy690:
-               YYDEBUG(690, *YYCURSOR);
+#line 6471 "Zend/zend_language_scanner.c"
+yy693:
+               YYDEBUG(693, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy691;
+               if (yych == 'H') goto yy694;
                if (yych != 'h') goto yy187;
-yy691:
-               YYDEBUG(691, *YYCURSOR);
+yy694:
+               YYDEBUG(694, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(692, *YYCURSOR);
+               YYDEBUG(695, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1043 "Zend/zend_language_scanner.l"
+#line 1042 "Zend/zend_language_scanner.l"
                {
        return T_CATCH;
 }
-#line 6471 "Zend/zend_language_scanner.c"
-yy693:
-               YYDEBUG(693, *YYCURSOR);
+#line 6489 "Zend/zend_language_scanner.c"
+yy696:
+               YYDEBUG(696, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy710;
-               if (yych == 'n') goto yy710;
+               if (yych == 'N') goto yy713;
+               if (yych == 'n') goto yy713;
                goto yy187;
-yy694:
-               YYDEBUG(694, *YYCURSOR);
+yy697:
+               YYDEBUG(697, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy703;
-               if (yych == 'r') goto yy703;
+               if (yych == 'R') goto yy706;
+               if (yych == 'r') goto yy706;
                goto yy187;
-yy695:
-               YYDEBUG(695, *YYCURSOR);
+yy698:
+               YYDEBUG(698, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy696;
+               if (yych == 'N') goto yy699;
                if (yych != 'n') goto yy187;
-yy696:
-               YYDEBUG(696, *YYCURSOR);
+yy699:
+               YYDEBUG(699, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy697;
+               if (yych == 'C') goto yy700;
                if (yych != 'c') goto yy187;
-yy697:
-               YYDEBUG(697, *YYCURSOR);
+yy700:
+               YYDEBUG(700, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy698;
+               if (yych == 'T') goto yy701;
                if (yych != 't') goto yy187;
-yy698:
-               YYDEBUG(698, *YYCURSOR);
+yy701:
+               YYDEBUG(701, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy699;
+               if (yych == 'I') goto yy702;
                if (yych != 'i') goto yy187;
-yy699:
-               YYDEBUG(699, *YYCURSOR);
+yy702:
+               YYDEBUG(702, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy700;
+               if (yych == 'O') goto yy703;
                if (yych != 'o') goto yy187;
-yy700:
-               YYDEBUG(700, *YYCURSOR);
+yy703:
+               YYDEBUG(703, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy701;
+               if (yych == 'N') goto yy704;
                if (yych != 'n') goto yy187;
-yy701:
-               YYDEBUG(701, *YYCURSOR);
+yy704:
+               YYDEBUG(704, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(702, *YYCURSOR);
+               YYDEBUG(705, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1023 "Zend/zend_language_scanner.l"
+#line 1022 "Zend/zend_language_scanner.l"
                {
        return T_FUNCTION;
 }
-#line 6526 "Zend/zend_language_scanner.c"
-yy703:
-               YYDEBUG(703, *YYCURSOR);
+#line 6544 "Zend/zend_language_scanner.c"
+yy706:
+               YYDEBUG(706, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy704;
+                               if (yych <= '/') goto yy707;
                                if (yych <= '9') goto yy186;
                        } else {
-                               if (yych == 'E') goto yy705;
+                               if (yych == 'E') goto yy708;
                                if (yych <= 'Z') goto yy186;
                        }
                } else {
                        if (yych <= 'd') {
                                if (yych != '`') goto yy186;
                        } else {
-                               if (yych <= 'e') goto yy705;
+                               if (yych <= 'e') goto yy708;
                                if (yych <= 'z') goto yy186;
                                if (yych >= 0x7F) goto yy186;
                        }
                }
-yy704:
-               YYDEBUG(704, *YYCURSOR);
+yy707:
+               YYDEBUG(707, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1083 "Zend/zend_language_scanner.l"
+#line 1082 "Zend/zend_language_scanner.l"
                {
        return T_FOR;
 }
-#line 6554 "Zend/zend_language_scanner.c"
-yy705:
-               YYDEBUG(705, *YYCURSOR);
+#line 6572 "Zend/zend_language_scanner.c"
+yy708:
+               YYDEBUG(708, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy706;
+               if (yych == 'A') goto yy709;
                if (yych != 'a') goto yy187;
-yy706:
-               YYDEBUG(706, *YYCURSOR);
+yy709:
+               YYDEBUG(709, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy707;
+               if (yych == 'C') goto yy710;
                if (yych != 'c') goto yy187;
-yy707:
-               YYDEBUG(707, *YYCURSOR);
+yy710:
+               YYDEBUG(710, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy708;
+               if (yych == 'H') goto yy711;
                if (yych != 'h') goto yy187;
-yy708:
-               YYDEBUG(708, *YYCURSOR);
+yy711:
+               YYDEBUG(711, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(709, *YYCURSOR);
+               YYDEBUG(712, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1091 "Zend/zend_language_scanner.l"
+#line 1090 "Zend/zend_language_scanner.l"
                {
        return T_FOREACH;
 }
-#line 6582 "Zend/zend_language_scanner.c"
-yy710:
-               YYDEBUG(710, *YYCURSOR);
+#line 6600 "Zend/zend_language_scanner.c"
+yy713:
+               YYDEBUG(713, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy711;
+               if (yych == 'A') goto yy714;
                if (yych != 'a') goto yy187;
-yy711:
-               YYDEBUG(711, *YYCURSOR);
+yy714:
+               YYDEBUG(714, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy712;
+               if (yych == 'L') goto yy715;
                if (yych != 'l') goto yy187;
-yy712:
-               YYDEBUG(712, *YYCURSOR);
+yy715:
+               YYDEBUG(715, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy713;
+                               if (yych <= '/') goto yy716;
                                if (yych <= '9') goto yy186;
                        } else {
-                               if (yych == 'L') goto yy714;
+                               if (yych == 'L') goto yy717;
                                if (yych <= 'Z') goto yy186;
                        }
                } else {
                        if (yych <= 'k') {
                                if (yych != '`') goto yy186;
                        } else {
-                               if (yych <= 'l') goto yy714;
+                               if (yych <= 'l') goto yy717;
                                if (yych <= 'z') goto yy186;
                                if (yych >= 0x7F) goto yy186;
                        }
                }
-yy713:
-               YYDEBUG(713, *YYCURSOR);
+yy716:
+               YYDEBUG(716, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1303 "Zend/zend_language_scanner.l"
+#line 1306 "Zend/zend_language_scanner.l"
                {
        return T_FINAL;
 }
-#line 6620 "Zend/zend_language_scanner.c"
-yy714:
-               YYDEBUG(714, *YYCURSOR);
+#line 6638 "Zend/zend_language_scanner.c"
+yy717:
+               YYDEBUG(717, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy715;
+               if (yych == 'Y') goto yy718;
                if (yych != 'y') goto yy187;
-yy715:
-               YYDEBUG(715, *YYCURSOR);
+yy718:
+               YYDEBUG(718, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(716, *YYCURSOR);
+               YYDEBUG(719, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1047 "Zend/zend_language_scanner.l"
+#line 1046 "Zend/zend_language_scanner.l"
                {
        return T_FINALLY;
 }
-#line 6638 "Zend/zend_language_scanner.c"
-yy717:
-               YYDEBUG(717, *YYCURSOR);
+#line 6656 "Zend/zend_language_scanner.c"
+yy720:
+               YYDEBUG(720, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'F') {
-                       if (yych == 'C') goto yy723;
+                       if (yych == 'C') goto yy726;
                        if (yych <= 'E') goto yy187;
-                       goto yy724;
+                       goto yy727;
                } else {
                        if (yych <= 'c') {
                                if (yych <= 'b') goto yy187;
-                               goto yy723;
+                               goto yy726;
                        } else {
-                               if (yych == 'f') goto yy724;
+                               if (yych == 'f') goto yy727;
                                goto yy187;
                        }
                }
-yy718:
-               YYDEBUG(718, *YYCURSOR);
+yy721:
+               YYDEBUG(721, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy721;
-               if (yych == 'e') goto yy721;
+               if (yych == 'E') goto yy724;
+               if (yych == 'e') goto yy724;
                goto yy187;
-yy719:
-               YYDEBUG(719, *YYCURSOR);
+yy722:
+               YYDEBUG(722, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(720, *YYCURSOR);
+               YYDEBUG(723, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1079 "Zend/zend_language_scanner.l"
+#line 1078 "Zend/zend_language_scanner.l"
                {
        return T_DO;
 }
-#line 6673 "Zend/zend_language_scanner.c"
-yy721:
-               YYDEBUG(721, *YYCURSOR);
+#line 6691 "Zend/zend_language_scanner.c"
+yy724:
+               YYDEBUG(724, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(722, *YYCURSOR);
+               YYDEBUG(725, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1019 "Zend/zend_language_scanner.l"
+#line 1018 "Zend/zend_language_scanner.l"
                {
        return T_EXIT;
 }
-#line 6686 "Zend/zend_language_scanner.c"
-yy723:
-               YYDEBUG(723, *YYCURSOR);
+#line 6704 "Zend/zend_language_scanner.c"
+yy726:
+               YYDEBUG(726, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy730;
-               if (yych == 'l') goto yy730;
+               if (yych == 'L') goto yy733;
+               if (yych == 'l') goto yy733;
                goto yy187;
-yy724:
-               YYDEBUG(724, *YYCURSOR);
+yy727:
+               YYDEBUG(727, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy725;
+               if (yych == 'A') goto yy728;
                if (yych != 'a') goto yy187;
-yy725:
-               YYDEBUG(725, *YYCURSOR);
+yy728:
+               YYDEBUG(728, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy726;
+               if (yych == 'U') goto yy729;
                if (yych != 'u') goto yy187;
-yy726:
-               YYDEBUG(726, *YYCURSOR);
+yy729:
+               YYDEBUG(729, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy727;
+               if (yych == 'L') goto yy730;
                if (yych != 'l') goto yy187;
-yy727:
-               YYDEBUG(727, *YYCURSOR);
+yy730:
+               YYDEBUG(730, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy728;
+               if (yych == 'T') goto yy731;
                if (yych != 't') goto yy187;
-yy728:
-               YYDEBUG(728, *YYCURSOR);
+yy731:
+               YYDEBUG(731, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(729, *YYCURSOR);
+               YYDEBUG(732, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1127 "Zend/zend_language_scanner.l"
+#line 1126 "Zend/zend_language_scanner.l"
                {
        return T_DEFAULT;
 }
-#line 6725 "Zend/zend_language_scanner.c"
-yy730:
-               YYDEBUG(730, *YYCURSOR);
+#line 6743 "Zend/zend_language_scanner.c"
+yy733:
+               YYDEBUG(733, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy731;
+               if (yych == 'A') goto yy734;
                if (yych != 'a') goto yy187;
-yy731:
-               YYDEBUG(731, *YYCURSOR);
+yy734:
+               YYDEBUG(734, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy732;
+               if (yych == 'R') goto yy735;
                if (yych != 'r') goto yy187;
-yy732:
-               YYDEBUG(732, *YYCURSOR);
+yy735:
+               YYDEBUG(735, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy733;
+               if (yych == 'E') goto yy736;
                if (yych != 'e') goto yy187;
-yy733:
-               YYDEBUG(733, *YYCURSOR);
+yy736:
+               YYDEBUG(736, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(734, *YYCURSOR);
+               YYDEBUG(737, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1099 "Zend/zend_language_scanner.l"
+#line 1098 "Zend/zend_language_scanner.l"
                {
        return T_DECLARE;
 }
-#line 6753 "Zend/zend_language_scanner.c"
-yy735:
-               YYDEBUG(735, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'H') goto yy797;
-               if (yych == 'h') goto yy797;
-               goto yy187;
-yy736:
-               YYDEBUG(736, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'S') goto yy791;
-               if (yych == 's') goto yy791;
-               goto yy187;
-yy737:
-               YYDEBUG(737, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'P') goto yy787;
-               if (yych == 'p') goto yy787;
-               goto yy187;
+#line 6771 "Zend/zend_language_scanner.c"
 yy738:
                YYDEBUG(738, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy753;
-               if (yych == 'd') goto yy753;
+               if (yych == 'H') goto yy800;
+               if (yych == 'h') goto yy800;
                goto yy187;
 yy739:
                YYDEBUG(739, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy750;
-               if (yych == 'a') goto yy750;
+               if (yych == 'S') goto yy794;
+               if (yych == 's') goto yy794;
                goto yy187;
 yy740:
                YYDEBUG(740, *YYCURSOR);
                yych = *++YYCURSOR;
+               if (yych == 'P') goto yy790;
+               if (yych == 'p') goto yy790;
+               goto yy187;
+yy741:
+               YYDEBUG(741, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'D') goto yy756;
+               if (yych == 'd') goto yy756;
+               goto yy187;
+yy742:
+               YYDEBUG(742, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy753;
+               if (yych == 'a') goto yy753;
+               goto yy187;
+yy743:
+               YYDEBUG(743, *YYCURSOR);
+               yych = *++YYCURSOR;
                if (yych <= 'T') {
-                       if (yych == 'I') goto yy741;
+                       if (yych == 'I') goto yy744;
                        if (yych <= 'S') goto yy187;
-                       goto yy742;
+                       goto yy745;
                } else {
                        if (yych <= 'i') {
                                if (yych <= 'h') goto yy187;
                        } else {
-                               if (yych == 't') goto yy742;
+                               if (yych == 't') goto yy745;
                                goto yy187;
                        }
                }
-yy741:
-               YYDEBUG(741, *YYCURSOR);
+yy744:
+               YYDEBUG(744, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy748;
-               if (yych == 't') goto yy748;
+               if (yych == 'T') goto yy751;
+               if (yych == 't') goto yy751;
                goto yy187;
-yy742:
-               YYDEBUG(742, *YYCURSOR);
+yy745:
+               YYDEBUG(745, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy743;
+               if (yych == 'E') goto yy746;
                if (yych != 'e') goto yy187;
-yy743:
-               YYDEBUG(743, *YYCURSOR);
+yy746:
+               YYDEBUG(746, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy744;
+               if (yych == 'N') goto yy747;
                if (yych != 'n') goto yy187;
-yy744:
-               YYDEBUG(744, *YYCURSOR);
+yy747:
+               YYDEBUG(747, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy745;
+               if (yych == 'D') goto yy748;
                if (yych != 'd') goto yy187;
-yy745:
-               YYDEBUG(745, *YYCURSOR);
+yy748:
+               YYDEBUG(748, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy746;
+               if (yych == 'S') goto yy749;
                if (yych != 's') goto yy187;
-yy746:
-               YYDEBUG(746, *YYCURSOR);
+yy749:
+               YYDEBUG(749, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(747, *YYCURSOR);
+               YYDEBUG(750, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1163 "Zend/zend_language_scanner.l"
+#line 1162 "Zend/zend_language_scanner.l"
                {
        return T_EXTENDS;
 }
-#line 6837 "Zend/zend_language_scanner.c"
-yy748:
-               YYDEBUG(748, *YYCURSOR);
+#line 6855 "Zend/zend_language_scanner.c"
+yy751:
+               YYDEBUG(751, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(749, *YYCURSOR);
+               YYDEBUG(752, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1015 "Zend/zend_language_scanner.l"
+#line 1014 "Zend/zend_language_scanner.l"
                {
        return T_EXIT;
 }
-#line 6850 "Zend/zend_language_scanner.c"
-yy750:
-               YYDEBUG(750, *YYCURSOR);
+#line 6868 "Zend/zend_language_scanner.c"
+yy753:
+               YYDEBUG(753, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy751;
+               if (yych == 'L') goto yy754;
                if (yych != 'l') goto yy187;
-yy751:
-               YYDEBUG(751, *YYCURSOR);
+yy754:
+               YYDEBUG(754, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(752, *YYCURSOR);
+               YYDEBUG(755, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1247 "Zend/zend_language_scanner.l"
+#line 1250 "Zend/zend_language_scanner.l"
                {
        return T_EVAL;
 }
-#line 6868 "Zend/zend_language_scanner.c"
-yy753:
-               YYDEBUG(753, *YYCURSOR);
+#line 6886 "Zend/zend_language_scanner.c"
+yy756:
+               YYDEBUG(756, *YYCURSOR);
                yych = *++YYCURSOR;
                YYDEBUG(-1, yych);
                switch (yych) {
                case 'D':
-               case 'd':       goto yy754;
+               case 'd':       goto yy757;
                case 'F':
-               case 'f':       goto yy755;
+               case 'f':       goto yy758;
                case 'I':
-               case 'i':       goto yy756;
+               case 'i':       goto yy759;
                case 'S':
-               case 's':       goto yy757;
+               case 's':       goto yy760;
                case 'W':
-               case 'w':       goto yy758;
+               case 'w':       goto yy761;
                default:        goto yy187;
                }
-yy754:
-               YYDEBUG(754, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy780;
-               if (yych == 'e') goto yy780;
-               goto yy187;
-yy755:
-               YYDEBUG(755, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'O') goto yy772;
-               if (yych == 'o') goto yy772;
-               goto yy187;
-yy756:
-               YYDEBUG(756, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'F') goto yy770;
-               if (yych == 'f') goto yy770;
-               goto yy187;
 yy757:
                YYDEBUG(757, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'W') goto yy764;
-               if (yych == 'w') goto yy764;
+               if (yych == 'E') goto yy783;
+               if (yych == 'e') goto yy783;
                goto yy187;
 yy758:
                YYDEBUG(758, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy759;
-               if (yych != 'h') goto yy187;
+               if (yych == 'O') goto yy775;
+               if (yych == 'o') goto yy775;
+               goto yy187;
 yy759:
                YYDEBUG(759, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy760;
-               if (yych != 'i') goto yy187;
+               if (yych == 'F') goto yy773;
+               if (yych == 'f') goto yy773;
+               goto yy187;
 yy760:
                YYDEBUG(760, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy761;
-               if (yych != 'l') goto yy187;
+               if (yych == 'W') goto yy767;
+               if (yych == 'w') goto yy767;
+               goto yy187;
 yy761:
                YYDEBUG(761, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy762;
-               if (yych != 'e') goto yy187;
+               if (yych == 'H') goto yy762;
+               if (yych != 'h') goto yy187;
 yy762:
                YYDEBUG(762, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy763;
+               if (yych != 'i') goto yy187;
+yy763:
+               YYDEBUG(763, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy764;
+               if (yych != 'l') goto yy187;
+yy764:
+               YYDEBUG(764, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy765;
+               if (yych != 'e') goto yy187;
+yy765:
+               YYDEBUG(765, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(763, *YYCURSOR);
+               YYDEBUG(766, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1075 "Zend/zend_language_scanner.l"
+#line 1074 "Zend/zend_language_scanner.l"
                {
        return T_ENDWHILE;
 }
-#line 6942 "Zend/zend_language_scanner.c"
-yy764:
-               YYDEBUG(764, *YYCURSOR);
+#line 6960 "Zend/zend_language_scanner.c"
+yy767:
+               YYDEBUG(767, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy765;
+               if (yych == 'I') goto yy768;
                if (yych != 'i') goto yy187;
-yy765:
-               YYDEBUG(765, *YYCURSOR);
+yy768:
+               YYDEBUG(768, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy766;
+               if (yych == 'T') goto yy769;
                if (yych != 't') goto yy187;
-yy766:
-               YYDEBUG(766, *YYCURSOR);
+yy769:
+               YYDEBUG(769, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy767;
+               if (yych == 'C') goto yy770;
                if (yych != 'c') goto yy187;
-yy767:
-               YYDEBUG(767, *YYCURSOR);
+yy770:
+               YYDEBUG(770, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy768;
+               if (yych == 'H') goto yy771;
                if (yych != 'h') goto yy187;
-yy768:
-               YYDEBUG(768, *YYCURSOR);
+yy771:
+               YYDEBUG(771, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(769, *YYCURSOR);
+               YYDEBUG(772, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1119 "Zend/zend_language_scanner.l"
+#line 1118 "Zend/zend_language_scanner.l"
                {
        return T_ENDSWITCH;
 }
-#line 6975 "Zend/zend_language_scanner.c"
-yy770:
-               YYDEBUG(770, *YYCURSOR);
+#line 6993 "Zend/zend_language_scanner.c"
+yy773:
+               YYDEBUG(773, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(771, *YYCURSOR);
+               YYDEBUG(774, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1063 "Zend/zend_language_scanner.l"
+#line 1062 "Zend/zend_language_scanner.l"
                {
        return T_ENDIF;
 }
-#line 6988 "Zend/zend_language_scanner.c"
-yy772:
-               YYDEBUG(772, *YYCURSOR);
+#line 7006 "Zend/zend_language_scanner.c"
+yy775:
+               YYDEBUG(775, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy773;
+               if (yych == 'R') goto yy776;
                if (yych != 'r') goto yy187;
-yy773:
-               YYDEBUG(773, *YYCURSOR);
+yy776:
+               YYDEBUG(776, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy774;
+                               if (yych <= '/') goto yy777;
                                if (yych <= '9') goto yy186;
                        } else {
-                               if (yych == 'E') goto yy775;
+                               if (yych == 'E') goto yy778;
                                if (yych <= 'Z') goto yy186;
                        }
                } else {
                        if (yych <= 'd') {
                                if (yych != '`') goto yy186;
                        } else {
-                               if (yych <= 'e') goto yy775;
+                               if (yych <= 'e') goto yy778;
                                if (yych <= 'z') goto yy186;
                                if (yych >= 0x7F) goto yy186;
                        }
                }
-yy774:
-               YYDEBUG(774, *YYCURSOR);
+yy777:
+               YYDEBUG(777, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1087 "Zend/zend_language_scanner.l"
+#line 1086 "Zend/zend_language_scanner.l"
                {
        return T_ENDFOR;
 }
-#line 7021 "Zend/zend_language_scanner.c"
-yy775:
-               YYDEBUG(775, *YYCURSOR);
+#line 7039 "Zend/zend_language_scanner.c"
+yy778:
+               YYDEBUG(778, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy776;
+               if (yych == 'A') goto yy779;
                if (yych != 'a') goto yy187;
-yy776:
-               YYDEBUG(776, *YYCURSOR);
+yy779:
+               YYDEBUG(779, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy777;
+               if (yych == 'C') goto yy780;
                if (yych != 'c') goto yy187;
-yy777:
-               YYDEBUG(777, *YYCURSOR);
+yy780:
+               YYDEBUG(780, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy778;
+               if (yych == 'H') goto yy781;
                if (yych != 'h') goto yy187;
-yy778:
-               YYDEBUG(778, *YYCURSOR);
+yy781:
+               YYDEBUG(781, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(779, *YYCURSOR);
+               YYDEBUG(782, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1095 "Zend/zend_language_scanner.l"
+#line 1094 "Zend/zend_language_scanner.l"
                {
        return T_ENDFOREACH;
 }
-#line 7049 "Zend/zend_language_scanner.c"
-yy780:
-               YYDEBUG(780, *YYCURSOR);
+#line 7067 "Zend/zend_language_scanner.c"
+yy783:
+               YYDEBUG(783, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy781;
+               if (yych == 'C') goto yy784;
                if (yych != 'c') goto yy187;
-yy781:
-               YYDEBUG(781, *YYCURSOR);
+yy784:
+               YYDEBUG(784, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy782;
+               if (yych == 'L') goto yy785;
                if (yych != 'l') goto yy187;
-yy782:
-               YYDEBUG(782, *YYCURSOR);
+yy785:
+               YYDEBUG(785, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy783;
+               if (yych == 'A') goto yy786;
                if (yych != 'a') goto yy187;
-yy783:
-               YYDEBUG(783, *YYCURSOR);
+yy786:
+               YYDEBUG(786, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy784;
+               if (yych == 'R') goto yy787;
                if (yych != 'r') goto yy187;
-yy784:
-               YYDEBUG(784, *YYCURSOR);
+yy787:
+               YYDEBUG(787, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy785;
+               if (yych == 'E') goto yy788;
                if (yych != 'e') goto yy187;
-yy785:
-               YYDEBUG(785, *YYCURSOR);
+yy788:
+               YYDEBUG(788, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(786, *YYCURSOR);
+               YYDEBUG(789, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1103 "Zend/zend_language_scanner.l"
+#line 1102 "Zend/zend_language_scanner.l"
                {
        return T_ENDDECLARE;
 }
-#line 7087 "Zend/zend_language_scanner.c"
-yy787:
-               YYDEBUG(787, *YYCURSOR);
+#line 7105 "Zend/zend_language_scanner.c"
+yy790:
+               YYDEBUG(790, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy788;
+               if (yych == 'T') goto yy791;
                if (yych != 't') goto yy187;
-yy788:
-               YYDEBUG(788, *YYCURSOR);
+yy791:
+               YYDEBUG(791, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy789;
+               if (yych == 'Y') goto yy792;
                if (yych != 'y') goto yy187;
-yy789:
-               YYDEBUG(789, *YYCURSOR);
+yy792:
+               YYDEBUG(792, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(790, *YYCURSOR);
+               YYDEBUG(793, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1287 "Zend/zend_language_scanner.l"
+#line 1290 "Zend/zend_language_scanner.l"
                {
        return T_EMPTY;
 }
-#line 7110 "Zend/zend_language_scanner.c"
-yy791:
-               YYDEBUG(791, *YYCURSOR);
+#line 7128 "Zend/zend_language_scanner.c"
+yy794:
+               YYDEBUG(794, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy792;
+               if (yych == 'E') goto yy795;
                if (yych != 'e') goto yy187;
-yy792:
-               YYDEBUG(792, *YYCURSOR);
+yy795:
+               YYDEBUG(795, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy793;
+                               if (yych <= '/') goto yy796;
                                if (yych <= '9') goto yy186;
                        } else {
-                               if (yych == 'I') goto yy794;
+                               if (yych == 'I') goto yy797;
                                if (yych <= 'Z') goto yy186;
                        }
                } else {
                        if (yych <= 'h') {
                                if (yych != '`') goto yy186;
                        } else {
-                               if (yych <= 'i') goto yy794;
+                               if (yych <= 'i') goto yy797;
                                if (yych <= 'z') goto yy186;
                                if (yych >= 0x7F) goto yy186;
                        }
                }
-yy793:
-               YYDEBUG(793, *YYCURSOR);
+yy796:
+               YYDEBUG(796, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1067 "Zend/zend_language_scanner.l"
+#line 1066 "Zend/zend_language_scanner.l"
                {
        return T_ELSE;
 }
-#line 7143 "Zend/zend_language_scanner.c"
-yy794:
-               YYDEBUG(794, *YYCURSOR);
+#line 7161 "Zend/zend_language_scanner.c"
+yy797:
+               YYDEBUG(797, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'F') goto yy795;
+               if (yych == 'F') goto yy798;
                if (yych != 'f') goto yy187;
-yy795:
-               YYDEBUG(795, *YYCURSOR);
+yy798:
+               YYDEBUG(798, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(796, *YYCURSOR);
+               YYDEBUG(799, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1059 "Zend/zend_language_scanner.l"
+#line 1058 "Zend/zend_language_scanner.l"
                {
        return T_ELSEIF;
 }
-#line 7161 "Zend/zend_language_scanner.c"
-yy797:
-               YYDEBUG(797, *YYCURSOR);
+#line 7179 "Zend/zend_language_scanner.c"
+yy800:
+               YYDEBUG(800, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy798;
+               if (yych == 'O') goto yy801;
                if (yych != 'o') goto yy187;
-yy798:
-               YYDEBUG(798, *YYCURSOR);
+yy801:
+               YYDEBUG(801, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy186;
                }
-               YYDEBUG(799, *YYCURSOR);
+               YYDEBUG(802, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1143 "Zend/zend_language_scanner.l"
+#line 1142 "Zend/zend_language_scanner.l"
                {
        return T_ECHO;
 }
-#line 7179 "Zend/zend_language_scanner.c"
+#line 7197 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_LOOKING_FOR_PROPERTY:
@@ -7214,113 +7232,113 @@ yyc_ST_LOOKING_FOR_PROPERTY:
                         64,  64,  64,  64,  64,  64,  64,  64, 
                         64,  64,  64,  64,  64,  64,  64,  64, 
                };
-               YYDEBUG(800, *YYCURSOR);
+               YYDEBUG(803, *YYCURSOR);
                YYFILL(2);
                yych = *YYCURSOR;
                if (yych <= '-') {
                        if (yych <= '\r') {
-                               if (yych <= 0x08) goto yy808;
-                               if (yych <= '\n') goto yy802;
-                               if (yych <= '\f') goto yy808;
+                               if (yych <= 0x08) goto yy811;
+                               if (yych <= '\n') goto yy805;
+                               if (yych <= '\f') goto yy811;
                        } else {
-                               if (yych == ' ') goto yy802;
-                               if (yych <= ',') goto yy808;
-                               goto yy804;
+                               if (yych == ' ') goto yy805;
+                               if (yych <= ',') goto yy811;
+                               goto yy807;
                        }
                } else {
                        if (yych <= '_') {
-                               if (yych <= '@') goto yy808;
-                               if (yych <= 'Z') goto yy806;
-                               if (yych <= '^') goto yy808;
-                               goto yy806;
+                               if (yych <= '@') goto yy811;
+                               if (yych <= 'Z') goto yy809;
+                               if (yych <= '^') goto yy811;
+                               goto yy809;
                        } else {
-                               if (yych <= '`') goto yy808;
-                               if (yych <= 'z') goto yy806;
-                               if (yych <= '~') goto yy808;
-                               goto yy806;
+                               if (yych <= '`') goto yy811;
+                               if (yych <= 'z') goto yy809;
+                               if (yych <= '~') goto yy811;
+                               goto yy809;
                        }
                }
-yy802:
-               YYDEBUG(802, *YYCURSOR);
+yy805:
+               YYDEBUG(805, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy814;
-yy803:
-               YYDEBUG(803, *YYCURSOR);
+               goto yy817;
+yy806:
+               YYDEBUG(806, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1176 "Zend/zend_language_scanner.l"
+#line 1175 "Zend/zend_language_scanner.l"
                {
        ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
-#line 7258 "Zend/zend_language_scanner.c"
-yy804:
-               YYDEBUG(804, *YYCURSOR);
+#line 7276 "Zend/zend_language_scanner.c"
+yy807:
+               YYDEBUG(807, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '>') goto yy811;
-yy805:
-               YYDEBUG(805, *YYCURSOR);
+               if ((yych = *YYCURSOR) == '>') goto yy814;
+yy808:
+               YYDEBUG(808, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1193 "Zend/zend_language_scanner.l"
+#line 1192 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state(TSRMLS_C);
        goto restart;
 }
-#line 7272 "Zend/zend_language_scanner.c"
-yy806:
-               YYDEBUG(806, *YYCURSOR);
+#line 7290 "Zend/zend_language_scanner.c"
+yy809:
+               YYDEBUG(809, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy810;
-yy807:
-               YYDEBUG(807, *YYCURSOR);
+               goto yy813;
+yy810:
+               YYDEBUG(810, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1186 "Zend/zend_language_scanner.l"
+#line 1185 "Zend/zend_language_scanner.l"
                {
        yy_pop_state(TSRMLS_C);
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 7288 "Zend/zend_language_scanner.c"
-yy808:
-               YYDEBUG(808, *YYCURSOR);
+#line 7306 "Zend/zend_language_scanner.c"
+yy811:
+               YYDEBUG(811, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy805;
-yy809:
-               YYDEBUG(809, *YYCURSOR);
+               goto yy808;
+yy812:
+               YYDEBUG(812, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy810:
-               YYDEBUG(810, *YYCURSOR);
+yy813:
+               YYDEBUG(813, *YYCURSOR);
                if (yybm[0+yych] & 64) {
-                       goto yy809;
+                       goto yy812;
                }
-               goto yy807;
-yy811:
-               YYDEBUG(811, *YYCURSOR);
+               goto yy810;
+yy814:
+               YYDEBUG(814, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(812, *YYCURSOR);
+               YYDEBUG(815, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1182 "Zend/zend_language_scanner.l"
+#line 1181 "Zend/zend_language_scanner.l"
                {
        return T_OBJECT_OPERATOR;
 }
-#line 7313 "Zend/zend_language_scanner.c"
-yy813:
-               YYDEBUG(813, *YYCURSOR);
+#line 7331 "Zend/zend_language_scanner.c"
+yy816:
+               YYDEBUG(816, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy814:
-               YYDEBUG(814, *YYCURSOR);
+yy817:
+               YYDEBUG(817, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy813;
+                       goto yy816;
                }
-               goto yy803;
+               goto yy806;
        }
 /* *********************************** */
 yyc_ST_LOOKING_FOR_VARNAME:
@@ -7359,74 +7377,74 @@ yyc_ST_LOOKING_FOR_VARNAME:
                        128, 128, 128, 128, 128, 128, 128, 128, 
                        128, 128, 128, 128, 128, 128, 128, 128, 
                };
-               YYDEBUG(815, *YYCURSOR);
+               YYDEBUG(818, *YYCURSOR);
                YYFILL(2);
                yych = *YYCURSOR;
                if (yych <= '_') {
-                       if (yych <= '@') goto yy819;
-                       if (yych <= 'Z') goto yy817;
-                       if (yych <= '^') goto yy819;
+                       if (yych <= '@') goto yy822;
+                       if (yych <= 'Z') goto yy820;
+                       if (yych <= '^') goto yy822;
                } else {
-                       if (yych <= '`') goto yy819;
-                       if (yych <= 'z') goto yy817;
-                       if (yych <= '~') goto yy819;
+                       if (yych <= '`') goto yy822;
+                       if (yych <= 'z') goto yy820;
+                       if (yych <= '~') goto yy822;
                }
-yy817:
-               YYDEBUG(817, *YYCURSOR);
+yy820:
+               YYDEBUG(820, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= '_') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy818;
-                               if (yych <= '9') goto yy821;
+                               if (yych <= '/') goto yy821;
+                               if (yych <= '9') goto yy824;
                        } else {
-                               if (yych <= '[') goto yy821;
-                               if (yych >= '_') goto yy821;
+                               if (yych <= '[') goto yy824;
+                               if (yych >= '_') goto yy824;
                        }
                } else {
                        if (yych <= '|') {
-                               if (yych <= '`') goto yy818;
-                               if (yych <= 'z') goto yy821;
+                               if (yych <= '`') goto yy821;
+                               if (yych <= 'z') goto yy824;
                        } else {
-                               if (yych != '~') goto yy821;
+                               if (yych != '~') goto yy824;
                        }
                }
-yy818:
-               YYDEBUG(818, *YYCURSOR);
+yy821:
+               YYDEBUG(821, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1479 "Zend/zend_language_scanner.l"
+#line 1482 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state(TSRMLS_C);
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        goto restart;
 }
-#line 7405 "Zend/zend_language_scanner.c"
-yy819:
-               YYDEBUG(819, *YYCURSOR);
+#line 7423 "Zend/zend_language_scanner.c"
+yy822:
+               YYDEBUG(822, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy818;
-yy820:
-               YYDEBUG(820, *YYCURSOR);
+               goto yy821;
+yy823:
+               YYDEBUG(823, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy821:
-               YYDEBUG(821, *YYCURSOR);
+yy824:
+               YYDEBUG(824, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy820;
+                       goto yy823;
                }
-               if (yych == '[') goto yy823;
-               if (yych == '}') goto yy823;
-               YYDEBUG(822, *YYCURSOR);
+               if (yych == '[') goto yy826;
+               if (yych == '}') goto yy826;
+               YYDEBUG(825, *YYCURSOR);
                YYCURSOR = YYMARKER;
-               goto yy818;
-yy823:
-               YYDEBUG(823, *YYCURSOR);
+               goto yy821;
+yy826:
+               YYDEBUG(826, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(824, *YYCURSOR);
+               YYDEBUG(827, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1469 "Zend/zend_language_scanner.l"
+#line 1472 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        zend_copy_value(zendlval, yytext, yyleng);
@@ -7435,18 +7453,18 @@ yy823:
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_STRING_VARNAME;
 }
-#line 7439 "Zend/zend_language_scanner.c"
+#line 7457 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_NOWDOC:
-       YYDEBUG(825, *YYCURSOR);
+       YYDEBUG(828, *YYCURSOR);
        YYFILL(1);
        yych = *YYCURSOR;
-       YYDEBUG(827, *YYCURSOR);
+       YYDEBUG(830, *YYCURSOR);
        ++YYCURSOR;
-       YYDEBUG(828, *YYCURSOR);
+       YYDEBUG(831, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2299 "Zend/zend_language_scanner.l"
+#line 2302 "Zend/zend_language_scanner.l"
        {
        int newline = 0;
 
@@ -7503,7 +7521,7 @@ nowdoc_scan_done:
        HANDLE_NEWLINES(yytext, yyleng - newline);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 7507 "Zend/zend_language_scanner.c"
+#line 7525 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_VAR_OFFSET:
        {
@@ -7541,76 +7559,76 @@ yyc_ST_VAR_OFFSET:
                         16,  16,  16,  16,  16,  16,  16,  16, 
                         16,  16,  16,  16,  16,  16,  16,  16, 
                };
-               YYDEBUG(829, *YYCURSOR);
+               YYDEBUG(832, *YYCURSOR);
                YYFILL(3);
                yych = *YYCURSOR;
                if (yych <= '/') {
                        if (yych <= ' ') {
                                if (yych <= '\f') {
-                                       if (yych <= 0x08) goto yy843;
-                                       if (yych <= '\n') goto yy839;
-                                       goto yy843;
+                                       if (yych <= 0x08) goto yy846;
+                                       if (yych <= '\n') goto yy842;
+                                       goto yy846;
                                } else {
-                                       if (yych <= '\r') goto yy839;
-                                       if (yych <= 0x1F) goto yy843;
-                                       goto yy839;
+                                       if (yych <= '\r') goto yy842;
+                                       if (yych <= 0x1F) goto yy846;
+                                       goto yy842;
                                }
                        } else {
                                if (yych <= '$') {
-                                       if (yych <= '"') goto yy838;
-                                       if (yych <= '#') goto yy839;
-                                       goto yy834;
+                                       if (yych <= '"') goto yy841;
+                                       if (yych <= '#') goto yy842;
+                                       goto yy837;
                                } else {
-                                       if (yych == '\'') goto yy839;
-                                       goto yy838;
+                                       if (yych == '\'') goto yy842;
+                                       goto yy841;
                                }
                        }
                } else {
                        if (yych <= '\\') {
                                if (yych <= '@') {
-                                       if (yych <= '0') goto yy831;
-                                       if (yych <= '9') goto yy833;
-                                       goto yy838;
+                                       if (yych <= '0') goto yy834;
+                                       if (yych <= '9') goto yy836;
+                                       goto yy841;
                                } else {
-                                       if (yych <= 'Z') goto yy841;
-                                       if (yych <= '[') goto yy838;
-                                       goto yy839;
+                                       if (yych <= 'Z') goto yy844;
+                                       if (yych <= '[') goto yy841;
+                                       goto yy842;
                                }
                        } else {
                                if (yych <= '_') {
-                                       if (yych <= ']') goto yy836;
-                                       if (yych <= '^') goto yy838;
-                                       goto yy841;
+                                       if (yych <= ']') goto yy839;
+                                       if (yych <= '^') goto yy841;
+                                       goto yy844;
                                } else {
-                                       if (yych <= '`') goto yy838;
-                                       if (yych <= 'z') goto yy841;
-                                       if (yych <= '~') goto yy838;
-                                       goto yy841;
+                                       if (yych <= '`') goto yy841;
+                                       if (yych <= 'z') goto yy844;
+                                       if (yych <= '~') goto yy841;
+                                       goto yy844;
                                }
                        }
                }
-yy831:
-               YYDEBUG(831, *YYCURSOR);
+yy834:
+               YYDEBUG(834, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= 'W') {
                        if (yych <= '9') {
-                               if (yych >= '0') goto yy855;
+                               if (yych >= '0') goto yy858;
                        } else {
-                               if (yych == 'B') goto yy852;
+                               if (yych == 'B') goto yy855;
                        }
                } else {
                        if (yych <= 'b') {
-                               if (yych <= 'X') goto yy854;
-                               if (yych >= 'b') goto yy852;
+                               if (yych <= 'X') goto yy857;
+                               if (yych >= 'b') goto yy855;
                        } else {
-                               if (yych == 'x') goto yy854;
+                               if (yych == 'x') goto yy857;
                        }
                }
-yy832:
-               YYDEBUG(832, *YYCURSOR);
+yy835:
+               YYDEBUG(835, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1555 "Zend/zend_language_scanner.l"
+#line 1558 "Zend/zend_language_scanner.l"
                { /* Offset could be treated as a long */
        if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) {
                ZVAL_LONG(zendlval, strtol(yytext, NULL, 10));
@@ -7619,81 +7637,81 @@ yy832:
        }
        return T_NUM_STRING;
 }
-#line 7623 "Zend/zend_language_scanner.c"
-yy833:
-               YYDEBUG(833, *YYCURSOR);
+#line 7641 "Zend/zend_language_scanner.c"
+yy836:
+               YYDEBUG(836, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy851;
-yy834:
-               YYDEBUG(834, *YYCURSOR);
+               goto yy854;
+yy837:
+               YYDEBUG(837, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '_') {
-                       if (yych <= '@') goto yy835;
-                       if (yych <= 'Z') goto yy847;
-                       if (yych >= '_') goto yy847;
+                       if (yych <= '@') goto yy838;
+                       if (yych <= 'Z') goto yy850;
+                       if (yych >= '_') goto yy850;
                } else {
-                       if (yych <= '`') goto yy835;
-                       if (yych <= 'z') goto yy847;
-                       if (yych >= 0x7F) goto yy847;
+                       if (yych <= '`') goto yy838;
+                       if (yych <= 'z') goto yy850;
+                       if (yych >= 0x7F) goto yy850;
                }
-yy835:
-               YYDEBUG(835, *YYCURSOR);
+yy838:
+               YYDEBUG(838, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1831 "Zend/zend_language_scanner.l"
+#line 1834 "Zend/zend_language_scanner.l"
                {
        /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
        return yytext[0];
 }
-#line 7648 "Zend/zend_language_scanner.c"
-yy836:
-               YYDEBUG(836, *YYCURSOR);
+#line 7666 "Zend/zend_language_scanner.c"
+yy839:
+               YYDEBUG(839, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(837, *YYCURSOR);
+               YYDEBUG(840, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1826 "Zend/zend_language_scanner.l"
+#line 1829 "Zend/zend_language_scanner.l"
                {
        yy_pop_state(TSRMLS_C);
        return ']';
 }
-#line 7659 "Zend/zend_language_scanner.c"
-yy838:
-               YYDEBUG(838, *YYCURSOR);
+#line 7677 "Zend/zend_language_scanner.c"
+yy841:
+               YYDEBUG(841, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy835;
-yy839:
-               YYDEBUG(839, *YYCURSOR);
+               goto yy838;
+yy842:
+               YYDEBUG(842, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(840, *YYCURSOR);
+               YYDEBUG(843, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1836 "Zend/zend_language_scanner.l"
+#line 1839 "Zend/zend_language_scanner.l"
                {
        /* Invalid rule to return a more explicit parse error with proper line number */
        yyless(0);
        yy_pop_state(TSRMLS_C);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 7676 "Zend/zend_language_scanner.c"
-yy841:
-               YYDEBUG(841, *YYCURSOR);
+#line 7694 "Zend/zend_language_scanner.c"
+yy844:
+               YYDEBUG(844, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy846;
-yy842:
-               YYDEBUG(842, *YYCURSOR);
+               goto yy849;
+yy845:
+               YYDEBUG(845, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1843 "Zend/zend_language_scanner.l"
+#line 1846 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 7691 "Zend/zend_language_scanner.c"
-yy843:
-               YYDEBUG(843, *YYCURSOR);
+#line 7709 "Zend/zend_language_scanner.c"
+yy846:
+               YYDEBUG(846, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(844, *YYCURSOR);
+               YYDEBUG(847, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2357 "Zend/zend_language_scanner.l"
+#line 2360 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -7702,116 +7720,116 @@ yy843:
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
        goto restart;
 }
-#line 7706 "Zend/zend_language_scanner.c"
-yy845:
-               YYDEBUG(845, *YYCURSOR);
+#line 7724 "Zend/zend_language_scanner.c"
+yy848:
+               YYDEBUG(848, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy846:
-               YYDEBUG(846, *YYCURSOR);
+yy849:
+               YYDEBUG(849, *YYCURSOR);
                if (yybm[0+yych] & 16) {
-                       goto yy845;
+                       goto yy848;
                }
-               goto yy842;
-yy847:
-               YYDEBUG(847, *YYCURSOR);
+               goto yy845;
+yy850:
+               YYDEBUG(850, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(848, *YYCURSOR);
+               YYDEBUG(851, *YYCURSOR);
                if (yych <= '^') {
                        if (yych <= '9') {
-                               if (yych >= '0') goto yy847;
+                               if (yych >= '0') goto yy850;
                        } else {
-                               if (yych <= '@') goto yy849;
-                               if (yych <= 'Z') goto yy847;
+                               if (yych <= '@') goto yy852;
+                               if (yych <= 'Z') goto yy850;
                        }
                } else {
                        if (yych <= '`') {
-                               if (yych <= '_') goto yy847;
+                               if (yych <= '_') goto yy850;
                        } else {
-                               if (yych <= 'z') goto yy847;
-                               if (yych >= 0x7F) goto yy847;
+                               if (yych <= 'z') goto yy850;
+                               if (yych >= 0x7F) goto yy850;
                        }
                }
-yy849:
-               YYDEBUG(849, *YYCURSOR);
+yy852:
+               YYDEBUG(852, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1820 "Zend/zend_language_scanner.l"
+#line 1823 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 7748 "Zend/zend_language_scanner.c"
-yy850:
-               YYDEBUG(850, *YYCURSOR);
+#line 7766 "Zend/zend_language_scanner.c"
+yy853:
+               YYDEBUG(853, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy851:
-               YYDEBUG(851, *YYCURSOR);
+yy854:
+               YYDEBUG(854, *YYCURSOR);
                if (yybm[0+yych] & 32) {
-                       goto yy850;
+                       goto yy853;
                }
-               goto yy832;
-yy852:
-               YYDEBUG(852, *YYCURSOR);
+               goto yy835;
+yy855:
+               YYDEBUG(855, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yybm[0+yych] & 128) {
-                       goto yy860;
+                       goto yy863;
                }
-yy853:
-               YYDEBUG(853, *YYCURSOR);
+yy856:
+               YYDEBUG(856, *YYCURSOR);
                YYCURSOR = YYMARKER;
-               goto yy832;
-yy854:
-               YYDEBUG(854, *YYCURSOR);
+               goto yy835;
+yy857:
+               YYDEBUG(857, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yybm[0+yych] & 64) {
-                       goto yy858;
+                       goto yy861;
                }
-               goto yy853;
-yy855:
-               YYDEBUG(855, *YYCURSOR);
+               goto yy856;
+yy858:
+               YYDEBUG(858, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(856, *YYCURSOR);
-               if (yych <= '/') goto yy857;
-               if (yych <= '9') goto yy855;
-yy857:
-               YYDEBUG(857, *YYCURSOR);
+               YYDEBUG(859, *YYCURSOR);
+               if (yych <= '/') goto yy860;
+               if (yych <= '9') goto yy858;
+yy860:
+               YYDEBUG(860, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1564 "Zend/zend_language_scanner.l"
+#line 1567 "Zend/zend_language_scanner.l"
                { /* Offset must be treated as a string */
        ZVAL_STRINGL(zendlval, yytext, yyleng, 1);
        return T_NUM_STRING;
 }
-#line 7793 "Zend/zend_language_scanner.c"
-yy858:
-               YYDEBUG(858, *YYCURSOR);
+#line 7811 "Zend/zend_language_scanner.c"
+yy861:
+               YYDEBUG(861, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(859, *YYCURSOR);
+               YYDEBUG(862, *YYCURSOR);
                if (yybm[0+yych] & 64) {
-                       goto yy858;
+                       goto yy861;
                }
-               goto yy857;
-yy860:
-               YYDEBUG(860, *YYCURSOR);
+               goto yy860;
+yy863:
+               YYDEBUG(863, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(861, *YYCURSOR);
+               YYDEBUG(864, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy860;
+                       goto yy863;
                }
-               goto yy857;
+               goto yy860;
        }
 }
-#line 2366 "Zend/zend_language_scanner.l"
+#line 2369 "Zend/zend_language_scanner.l"
 
 }
index f9c421fe8805a84f437fff9564919b517e084b85..f620cb8b4695bcadc8c8310f1f6b12bedf60ea54 100644 (file)
@@ -1011,7 +1011,6 @@ NEWLINE ("\r"|"\n"|"\r\n")
 /* compute yyleng before each rule */
 <!*> := yyleng = YYCURSOR - SCNG(yy_text);
 
-
 <ST_IN_SCRIPTING>"exit" {
        return T_EXIT;
 }
@@ -1204,6 +1203,10 @@ NEWLINE ("\r"|"\n"|"\r\n")
        return T_NS_SEPARATOR;
 }
 
+<ST_IN_SCRIPTING>"..." {
+       return T_ELLIPSIS;
+}
+
 <ST_IN_SCRIPTING>"new" {
        return T_NEW;
 }
index 4621b47e0e69eb47dc47053f57030f020aa14547..3a513215b280852f9a9e7d7439802116a8323f97 100644 (file)
@@ -3279,6 +3279,37 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST)
        ZEND_VM_NEXT_OPCODE();
 }
 
+ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, ANY, ANY)
+{
+       USE_OPLINE
+       zend_uint arg_num = opline->op1.num;
+       zend_uint arg_count = zend_vm_stack_get_args_count(TSRMLS_C);
+       zval **var_ptr, *params;
+
+       SAVE_OPLINE();
+
+       var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->result.var TSRMLS_CC);
+       Z_DELREF_PP(var_ptr);
+       MAKE_STD_ZVAL(params);
+       *var_ptr = params;
+
+       if (arg_num <= arg_count) {
+               array_init_size(params, arg_count - arg_num + 1);
+       } else {
+               array_init(params);
+       }
+
+       for (; arg_num <= arg_count; ++arg_num) {
+               zval **param = zend_vm_stack_get_arg(arg_num TSRMLS_CC);
+               zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, *param, opline->extended_value TSRMLS_CC);
+               zend_hash_next_index_insert(Z_ARRVAL_P(params), param, sizeof(zval *), NULL);
+               Z_ADDREF_PP(param);
+       }
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+}
+
 ZEND_VM_HANDLER(52, ZEND_BOOL, CONST|TMP|VAR|CV, ANY)
 {
        USE_OPLINE
index 677cabe2a947fd695bb95465d223fe796f7e601f..7774e9654f147f38ca22a3f0c4f25257dc2fedf9 100644 (file)
@@ -742,6 +742,37 @@ static int ZEND_FASTCALL  ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        ZEND_VM_NEXT_OPCODE();
 }
 
+static int ZEND_FASTCALL  ZEND_RECV_VARIADIC_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+       USE_OPLINE
+       zend_uint arg_num = opline->op1.num;
+       zend_uint arg_count = zend_vm_stack_get_args_count(TSRMLS_C);
+       zval **var_ptr, *params;
+
+       SAVE_OPLINE();
+
+       var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(execute_data, opline->result.var TSRMLS_CC);
+       Z_DELREF_PP(var_ptr);
+       MAKE_STD_ZVAL(params);
+       *var_ptr = params;
+
+       if (arg_num <= arg_count) {
+               array_init_size(params, arg_count - arg_num + 1);
+       } else {
+               array_init(params);
+       }
+
+       for (; arg_num <= arg_count; ++arg_num) {
+               zval **param = zend_vm_stack_get_arg(arg_num TSRMLS_CC);
+               zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, *param, opline->extended_value TSRMLS_CC);
+               zend_hash_next_index_insert(Z_ARRVAL_P(params), param, sizeof(zval *), NULL);
+               Z_ADDREF_PP(param);
+       }
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
+}
+
 static int ZEND_FASTCALL  ZEND_NEW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
@@ -44895,6 +44926,31 @@ void zend_init_opcodes_handlers(void)
        ZEND_FAST_RET_SPEC_HANDLER,
        ZEND_FAST_RET_SPEC_HANDLER,
        ZEND_FAST_RET_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
+       ZEND_RECV_VARIADIC_SPEC_HANDLER,
        ZEND_NULL_HANDLER
   };
   zend_opcode_handlers = (opcode_handler_t*)labels;
index 859258a440bef225fc3db730994c99698834dc4c..7624ec192d7e6e08052c4c912b62f538fec8e115 100644 (file)
 #define ZEND_GENERATOR_RETURN                161
 #define ZEND_FAST_CALL                       162
 #define ZEND_FAST_RET                        163
+#define ZEND_RECV_VARIADIC                   164
index 4e430b6ea2364d02238cbf75916eaf16607e26aa..168b133c6429ff21039310ae84e32b69d0783156 100644 (file)
@@ -402,10 +402,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_convert_kana, 0, 0, 1)
        ZEND_ARG_INFO(0, encoding)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_convert_variables, 1, 0, 3)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_convert_variables, 0, 0, 3)
        ZEND_ARG_INFO(0, to)
        ZEND_ARG_INFO(0, from)
-       ZEND_ARG_INFO(1, ...)
+       ZEND_ARG_VARIADIC_INFO(1, vars)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_encode_numericentity, 0, 0, 2)
index 6f2e40408784309dd0802abf71dd2723d16536b0..eb94ff65bbebffba675b3730603e47b1c367ad71 100644 (file)
 #define MYSQLI_ZEND_ARG_OBJ_INFO_STMT() ZEND_ARG_INFO(0, stmt)
 #endif
 
-ZEND_BEGIN_ARG_INFO(arginfo_mysqli_stmt_bind_result, 1)
+ZEND_BEGIN_ARG_INFO(arginfo_mysqli_stmt_bind_result, 0)
        MYSQLI_ZEND_ARG_OBJ_INFO_STMT()
+       ZEND_ARG_VARIADIC_INFO(1, vars)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO(arginfo_mysqli_stmt_bind_param, 1)
+ZEND_BEGIN_ARG_INFO(arginfo_mysqli_stmt_bind_param, 0)
        MYSQLI_ZEND_ARG_OBJ_INFO_STMT()
        ZEND_ARG_INFO(0, types)
+       ZEND_ARG_VARIADIC_INFO(1, vars)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO(arginfo_class_mysqli_stmt_bind_result, 1)
+ZEND_BEGIN_ARG_INFO(arginfo_class_mysqli_stmt_bind_result, 0)
+       ZEND_ARG_VARIADIC_INFO(1, vars)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO(arginfo_class_mysqli_stmt_bind_param, 1)
+ZEND_BEGIN_ARG_INFO(arginfo_class_mysqli_stmt_bind_param, 0)
        ZEND_ARG_INFO(0, types)
+       ZEND_ARG_VARIADIC_INFO(1, vars)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO(all_args_force_by_ref, 1)
+ZEND_BEGIN_ARG_INFO(all_args_force_by_ref, 0)
+       ZEND_ARG_VARIADIC_INFO(1, vars)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_mysqli_poll, 0, 0, 4)
index 1c34cffbf76e7a7d553153c8291fe4b85d2a5c7a..a4e661e3f897ad07052ac303d84f2d4d00468d43 100644 (file)
@@ -1899,7 +1899,7 @@ next_target_znz:
 #endif
 
 /* Find a set of variables which are used outside of the block where they are
- * defined. We won't apply some optimization patterns for sush variables. */
+ * defined. We won't apply some optimization patterns for such variables. */
 static void zend_t_usage(zend_code_block *block, zend_op_array *op_array, char *used_ext)
 {
        zend_code_block *next_block = block->next;
@@ -1931,6 +1931,7 @@ static void zend_t_usage(zend_code_block *block, zend_op_array *op_array, char *
                        if (RESULT_USED(opline)) {
                                if (!defined_here[VAR_NUM(ZEND_RESULT(opline).var)] && !used_ext[VAR_NUM(ZEND_RESULT(opline).var)] &&
                                    (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT ||
+                                    opline->opcode == ZEND_RECV_VARIADIC ||
                                        (opline->opcode == ZEND_OP_DATA && ZEND_RESULT_TYPE(opline) == IS_TMP_VAR) ||
                                        opline->opcode == ZEND_ADD_ARRAY_ELEMENT)) {
                                        /* these opcodes use the result as argument */
@@ -2015,6 +2016,7 @@ static void zend_t_usage(zend_code_block *block, zend_op_array *op_array, char *
 
                        if (opline->opcode == ZEND_RECV ||
                 opline->opcode == ZEND_RECV_INIT ||
+                opline->opcode == ZEND_RECV_VARIADIC ||
                 opline->opcode == ZEND_ADD_ARRAY_ELEMENT) {
                                if (ZEND_OP1_TYPE(opline) == IS_VAR || ZEND_OP1_TYPE(opline) == IS_TMP_VAR) {
                                        usage[VAR_NUM(ZEND_RESULT(opline).var)] = 1;
index aec388c03f5d9b04285c8bbf7d113242656bcdfb..ee74e8592837e6a6c8fe96a51397e5bd73d9b7da 100644 (file)
@@ -1328,16 +1328,12 @@ int pdo_hash_methods(pdo_dbh_t *dbh, int kind TSRMLS_DC)
                        } else {
                                ifunc->required_num_args = info->required_num_args;
                        }
-                       if (info->pass_rest_by_reference) {
-                               if (info->pass_rest_by_reference == ZEND_SEND_PREFER_REF) {
-                                       ifunc->fn_flags |= ZEND_ACC_PASS_REST_PREFER_REF;
-                               } else {
-                                       ifunc->fn_flags |= ZEND_ACC_PASS_REST_BY_REFERENCE;
-                               }
-                       }
                        if (info->return_reference) {
                                ifunc->fn_flags |= ZEND_ACC_RETURN_REFERENCE;
                        }
+                       if (funcs->arg_info[funcs->num_args].is_variadic) {
+                               ifunc->fn_flags |= ZEND_ACC_VARIADIC;
+                       }
                } else {
                        ifunc->arg_info = NULL;
                        ifunc->num_args = 0;
index b1f7484f243ca1baeb64560b43b1927e7279dc80..cc148b39c56630135b209838ffe1e8224811cd9a 100644 (file)
@@ -681,8 +681,8 @@ static zend_op* _get_recv_op(zend_op_array *op_array, zend_uint offset)
 
        ++offset;
        while (op < end) {
-               if ((op->opcode == ZEND_RECV || op->opcode == ZEND_RECV_INIT)
-                       && op->op1.num == (long)offset)
+               if ((op->opcode == ZEND_RECV || op->opcode == ZEND_RECV_INIT 
+                   || op->opcode == ZEND_RECV_VARIADIC) && op->op1.num == (long)offset)
                {
                        return op;
                }
@@ -715,6 +715,9 @@ static void _parameter_string(string *str, zend_function *fptr, struct _zend_arg
        if (arg_info->pass_by_reference) {
                string_write(str, "&", sizeof("&")-1);
        }
+       if (arg_info->is_variadic) {
+               string_write(str, "...", sizeof("...")-1);
+       }
        if (arg_info->name) {
                string_printf(str, "$%s", arg_info->name);
        } else {
@@ -2652,6 +2655,22 @@ ZEND_METHOD(reflection_parameter, getDefaultValueConstantName)
 }
 /* }}} */
 
+/* {{{ proto public bool ReflectionParameter::isVariadic()
+   Returns whether this parameter is a variadic parameter */
+ZEND_METHOD(reflection_parameter, isVariadic)
+{
+       reflection_object *intern;
+       parameter_reference *param;
+
+       if (zend_parse_parameters_none() == FAILURE) {
+               return;
+       }
+       GET_REFLECTION_OBJECT_PTR(param);
+
+       RETVAL_BOOL(param->arg_info->is_variadic);
+}
+/* }}} */
+
 /* {{{ proto public static mixed ReflectionMethod::export(mixed class, string name [, bool return]) throws ReflectionException
    Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */
 ZEND_METHOD(reflection_method, export)
@@ -3095,6 +3114,14 @@ ZEND_METHOD(reflection_function, isGenerator)
 }
 /* }}} */
 
+/* {{{ proto public bool ReflectionFunction::isVariadic()
+   Returns whether this function is variadic */
+ZEND_METHOD(reflection_function, isVariadic)
+{
+       _function_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_VARIADIC);
+}
+/* }}} */
+
 /* {{{ proto public bool ReflectionFunction::inNamespace()
    Returns whether this function is defined in namespace */
 ZEND_METHOD(reflection_function, inNamespace)
@@ -5720,6 +5747,7 @@ static const zend_function_entry reflection_function_abstract_functions[] = {
        ZEND_ME(reflection_function, isInternal, arginfo_reflection__void, 0)
        ZEND_ME(reflection_function, isUserDefined, arginfo_reflection__void, 0)
        ZEND_ME(reflection_function, isGenerator, arginfo_reflection__void, 0)
+       ZEND_ME(reflection_function, isVariadic, arginfo_reflection__void, 0)
        ZEND_ME(reflection_function, getClosureThis, arginfo_reflection__void, 0)
        ZEND_ME(reflection_function, getClosureScopeClass, arginfo_reflection__void, 0)
        ZEND_ME(reflection_function, getDocComment, arginfo_reflection__void, 0)
@@ -6022,6 +6050,7 @@ static const zend_function_entry reflection_parameter_functions[] = {
        ZEND_ME(reflection_parameter, getDefaultValue, arginfo_reflection__void, 0)
        ZEND_ME(reflection_parameter, isDefaultValueConstant, arginfo_reflection__void, 0)
        ZEND_ME(reflection_parameter, getDefaultValueConstantName, arginfo_reflection__void, 0)
+       ZEND_ME(reflection_parameter, isVariadic, arginfo_reflection__void, 0)
        PHP_FE_END
 };
 
diff --git a/ext/reflection/tests/ReflectionFunction_isVariadic_basic.phpt b/ext/reflection/tests/ReflectionFunction_isVariadic_basic.phpt
new file mode 100644 (file)
index 0000000..50b6bb4
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+ReflectionFunction::isVariadic()
+--FILE--
+<?php
+
+function test1($args) {}
+function test2(...$args) {}
+function test3($arg, ...$args) {}
+
+var_dump((new ReflectionFunction('test1'))->isVariadic());
+var_dump((new ReflectionFunction('test2'))->isVariadic());
+var_dump((new ReflectionFunction('test3'))->isVariadic());
+
+?>
+--EXPECT--
+bool(false)
+bool(true)
+bool(true)
index 82c62001226b21aaa5a072763a74be5f155da79c..4772f6548dcaefd7172381fd8a4ba10dbe7242a4 100644 (file)
@@ -61,6 +61,10 @@ Name: SORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING
 Is passed by reference: yes\r
 Can be passed by value: yes\r
 \r
+Name: more_array_and_sort_options\r
+Is passed by reference: yes\r
+Can be passed by value: yes\r
+\r
 => sort:\r
 \r
 Name: arg\r
diff --git a/ext/reflection/tests/ReflectionParameter_isVariadic_basic.phpt b/ext/reflection/tests/ReflectionParameter_isVariadic_basic.phpt
new file mode 100644 (file)
index 0000000..370edc3
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+ReflectionParameter::isVariadic()
+--FILE--
+<?php
+
+function test1($args) {}
+function test2(...$args) {}
+function test3($arg, ...$args) {}
+
+$r1 = new ReflectionFunction('test1');
+$r2 = new ReflectionFunction('test2');
+$r3 = new ReflectionFunction('test3');
+
+var_dump($r1->getParameters()[0]->isVariadic());
+var_dump($r2->getParameters()[0]->isVariadic());
+var_dump($r3->getParameters()[0]->isVariadic());
+var_dump($r3->getParameters()[1]->isVariadic());
+
+?>
+--EXPECT--
+bool(false)
+bool(true)
+bool(false)
+bool(true)
index 268ced15eca3221543b107717200f0375579ddcd..d1a23c758d3a32b710ac43fbfd1347318e735b93 100644 (file)
@@ -4,7 +4,7 @@ ReflectionParameter::__toString()
 Stefan Koopmanschap <stefan@stefankoopmanschap.nl>
 --FILE--
 <?php
-function ReflectionParameterTest($test, $test2 = null) {
+function ReflectionParameterTest($test, $test2 = null, ...$test3) {
        echo $test;
 }
 $reflect = new ReflectionFunction('ReflectionParameterTest');
@@ -17,4 +17,5 @@ foreach($params as $key => $value) {
 --EXPECT--
 Parameter #0 [ <required> $test ]
 Parameter #1 [ <optional> $test2 = NULL ]
+Parameter #2 [ <optional> ...$test3 ]
 ==DONE==
index 3dc7b7925c949441e30d232b8501dfcda44753cd..f73e8ee9f0db4c7130d7e88b497188790143be4a 100644 (file)
@@ -2938,8 +2938,9 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fgetss, 0, 0, 0)
        ZEND_ARG_INFO(0, allowable_tags)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fscanf, 1, 0, 1) 
+ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fscanf, 0, 0, 1) 
        ZEND_ARG_INFO(0, format)
+       ZEND_ARG_VARIADIC_INFO(1, vars)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fwrite, 0, 0, 1) 
index 3a0722b2af68dcb7fd1584ea5832411440b3d289..26eaa8f82f87dd88a68ad00d18362d8b2e2045fb 100644 (file)
@@ -4,7 +4,7 @@ SPL: Allow valid extension of SplFileObject::fscanf
 <?php
 
 class A extends SplFileObject {
-    public function fscanf($format) {
+    public function fscanf($format, &...$vars) {
 
     }
 }
index 2aef0414aab69728a123a0e833bbc03bf6db0b1a..19bf58deb8f194aec8d9d5031a340384f9f4ac2f 100644 (file)
@@ -1890,7 +1890,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3stmt_bindvalue, 0, 0, 2)
        ZEND_ARG_INFO(0, type)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO(arginfo_sqlite3stmt_construct, 1)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3stmt_construct, 0, 0, 1)
        ZEND_ARG_INFO(0, sqlite3)
 ZEND_END_ARG_INFO()
 
index 3e5084e83764218e11c2e0a88a4ee7be2543978e..7db20d1a62e853d8585384ddbaf2d4592af5825c 100644 (file)
@@ -288,11 +288,11 @@ ZEND_BEGIN_ARG_INFO(arginfo_reset, 0)
        ZEND_ARG_INFO(1, arg)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO(arginfo_current, ZEND_SEND_PREFER_REF)
+ZEND_BEGIN_ARG_INFO(arginfo_current, 0)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arg)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO(arginfo_key, ZEND_SEND_PREFER_REF)
+ZEND_BEGIN_ARG_INFO(arginfo_key, 0)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arg)
 ZEND_END_ARG_INFO()
 
@@ -564,13 +564,14 @@ ZEND_BEGIN_ARG_INFO(arginfo_array_udiff_uassoc, 0)
        ZEND_ARG_INFO(0, callback_key_comp_func)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_array_multisort, ZEND_SEND_PREFER_REF, 0, 1)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_array_multisort, 0, 0, 1)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arr1) /* ARRAY_INFO(0, arg1, 0) */
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, SORT_ASC_or_SORT_DESC)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, SORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arr2)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, SORT_ASC_or_SORT_DESC)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, SORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING)
+       ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, more_array_and_sort_options)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_rand, 0, 0, 1)
@@ -1139,10 +1140,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_fgetss, 0, 0, 1)
        ZEND_ARG_INFO(0, allowable_tags)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_fscanf, 1, 0, 2)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_fscanf, 0, 0, 2)
        ZEND_ARG_INFO(0, stream)
        ZEND_ARG_INFO(0, format)
-       ZEND_ARG_INFO(1, ...)
+       ZEND_ARG_VARIADIC_INFO(1, vars)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_fwrite, 0, 0, 2)
@@ -2450,10 +2451,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_str_pad, 0, 0, 2)
        ZEND_ARG_INFO(0, pad_type)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sscanf, 1, 0, 2)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_sscanf, 0, 0, 2)
        ZEND_ARG_INFO(0, str)
        ZEND_ARG_INFO(0, format)
-       ZEND_ARG_INFO(1, ...)
+       ZEND_ARG_VARIADIC_INFO(1, vars)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO(arginfo_str_rot13, 0)
index 57b29e1dd7006dde895c284f787929dbfdb2fd94..8c4786575effcf3c9d4837b9007d347034eec664 100644 (file)
@@ -38,6 +38,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) {
        REGISTER_LONG_CONSTANT("T_LOGICAL_XOR", T_LOGICAL_XOR, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_LOGICAL_AND", T_LOGICAL_AND, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_PRINT", T_PRINT, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("T_YIELD", T_YIELD, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_SR_EQUAL", T_SR_EQUAL, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_SL_EQUAL", T_SL_EQUAL, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_XOR_EQUAL", T_XOR_EQUAL, CONST_CS | CONST_PERSISTENT);
@@ -108,7 +109,6 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) {
        REGISTER_LONG_CONSTANT("T_FUNCTION", T_FUNCTION, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_CONST", T_CONST, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_RETURN", T_RETURN, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("T_YIELD", T_YIELD, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_TRY", T_TRY, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_CATCH", T_CATCH, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_FINALLY", T_FINALLY, CONST_CS | CONST_PERSISTENT);
@@ -158,6 +158,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) {
        REGISTER_LONG_CONSTANT("T_NS_C", T_NS_C, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_DIR", T_DIR, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_NS_SEPARATOR", T_NS_SEPARATOR, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("T_ELLIPSIS", T_ELLIPSIS, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT);
 }
 
@@ -174,6 +175,7 @@ char *get_token_type_name(int token_type)
                case T_LOGICAL_XOR: return "T_LOGICAL_XOR";
                case T_LOGICAL_AND: return "T_LOGICAL_AND";
                case T_PRINT: return "T_PRINT";
+               case T_YIELD: return "T_YIELD";
                case T_SR_EQUAL: return "T_SR_EQUAL";
                case T_SL_EQUAL: return "T_SL_EQUAL";
                case T_XOR_EQUAL: return "T_XOR_EQUAL";
@@ -244,7 +246,6 @@ char *get_token_type_name(int token_type)
                case T_FUNCTION: return "T_FUNCTION";
                case T_CONST: return "T_CONST";
                case T_RETURN: return "T_RETURN";
-               case T_YIELD: return "T_YIELD";
                case T_TRY: return "T_TRY";
                case T_CATCH: return "T_CATCH";
                case T_FINALLY: return "T_FINALLY";
@@ -294,6 +295,7 @@ char *get_token_type_name(int token_type)
                case T_NS_C: return "T_NS_C";
                case T_DIR: return "T_DIR";
                case T_NS_SEPARATOR: return "T_NS_SEPARATOR";
+               case T_ELLIPSIS: return "T_ELLIPSIS";
 
        }
        return "UNKNOWN";