diff options
author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:37:27 -0400 |
---|---|---|
committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:37:27 -0400 |
commit | 2d4e5b09576bb4f0ba716cc82cdf29ea04d9184b (patch) | |
tree | 41ccc042009cba53e4ce43e727fcba4c1cfbf7f3 /Zend | |
parent | d29a4fd2dd3b5d4cf6e80b602544d7b71d794e76 (diff) | |
download | php-2d4e5b09576bb4f0ba716cc82cdf29ea04d9184b.tar.gz |
Imported Upstream version 5.2.2upstream/5.2.2
Diffstat (limited to 'Zend')
224 files changed, 15377 insertions, 11043 deletions
diff --git a/Zend/Makefile.am b/Zend/Makefile.am index bd55716b3..3ad54a9d1 100644 --- a/Zend/Makefile.am +++ b/Zend/Makefile.am @@ -14,7 +14,7 @@ libZend_la_SOURCES=\ zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \ zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \ zend_ini.c zend_qsort.c zend_objects.c zend_object_handlers.c \ - zend_objects_API.c zend_ts_hash.c zend_stream.c zend_mm.c \ + zend_objects_API.c zend_ts_hash.c zend_stream.c \ zend_default_classes.c \ zend_iterators.c zend_interfaces.c zend_exceptions.c \ zend_strtod.c zend_multibyte.c diff --git a/Zend/Zend.dsp b/Zend/Zend.dsp index 93ecdf90b..a92125d89 100644 --- a/Zend/Zend.dsp +++ b/Zend/Zend.dsp @@ -195,10 +195,6 @@ SOURCE=.\zend_llist.c # End Source File
# Begin Source File
-SOURCE=.\zend_mm.c
-# End Source File
-# Begin Source File
-
SOURCE=.\zend_object_handlers.c
# End Source File
# Begin Source File
@@ -371,10 +367,6 @@ SOURCE=.\zend_llist.h # End Source File
# Begin Source File
-SOURCE=.\zend_mm.h
-# End Source File
-# Begin Source File
-
SOURCE=.\zend_modules.h
# End Source File
# Begin Source File
diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index 2e442135b..3802ef075 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -1,5 +1,5 @@ dnl -dnl $Id: Zend.m4,v 1.58.4.2 2006/09/14 09:58:27 dmitry Exp $ +dnl $Id: Zend.m4,v 1.58.4.4 2006/12/20 10:49:32 dmitry Exp $ dnl dnl This file contains Zend specific autoconf functions. dnl @@ -129,13 +129,6 @@ AC_ARG_WITH(zend-vm, PHP_ZEND_VM=CALL ]) -AC_ARG_ENABLE(malloc-mm, -[ --enable-malloc-mm Use environment variable for run-time malloc/emalloc - selection - FOR DEVELOPERS ONLY!!], -[ - ZEND_USE_MALLOC_MM=$enableval -]) - AC_ARG_ENABLE(maintainer-zts, [ --enable-maintainer-zts Enable thread safety - for code maintainers only!!],[ ZEND_MAINTAINER_ZTS=$enableval @@ -151,13 +144,6 @@ AC_ARG_ENABLE(inline-optimization, ZEND_INLINE_OPTIMIZATION=yes ]) -AC_ARG_ENABLE(memory-limit, -[ --enable-memory-limit Compile with memory limit support], [ - ZEND_MEMORY_LIMIT=$enableval -],[ - ZEND_MEMORY_LIMIT=no -]) - AC_ARG_ENABLE(zend-multibyte, [ --enable-zend-multibyte Compile with zend multibyte support], [ ZEND_MULTIBYTE=$enableval @@ -174,9 +160,6 @@ AC_MSG_RESULT($ZEND_MAINTAINER_ZTS) AC_MSG_CHECKING(whether to enable inline optimization for GCC) AC_MSG_RESULT($ZEND_INLINE_OPTIMIZATION) -AC_MSG_CHECKING(whether to enable a memory limit) -AC_MSG_RESULT($ZEND_MEMORY_LIMIT) - AC_MSG_CHECKING(whether to enable Zend debugging) AC_MSG_RESULT($ZEND_DEBUG) @@ -217,12 +200,6 @@ if test "$ZEND_MAINTAINER_ZTS" = "yes"; then LIBZEND_CPLUSPLUS_CHECKS fi -if test "$ZEND_MEMORY_LIMIT" = "yes"; then - AC_DEFINE(MEMORY_LIMIT, 1, [Memory limit]) -else - AC_DEFINE(MEMORY_LIMIT, 0, [Memory limit]) -fi - if test "$ZEND_MULTIBYTE" = "yes"; then AC_DEFINE(ZEND_MULTIBYTE, 1, [ ]) fi @@ -404,3 +381,10 @@ AC_DEFUN([LIBZEND_CPLUSPLUS_CHECKS],[ ]) +AC_MSG_CHECKING(whether /dev/urandom exists) +if test -r "/dev/urandom" && test -c "/dev/urandom"; then + AC_DEFINE([HAVE_DEV_URANDOM], 1, [Define if the target system has /dev/urandom device]) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi diff --git a/Zend/ZendTS.dsp b/Zend/ZendTS.dsp index a3591c6db..e70f123a0 100644 --- a/Zend/ZendTS.dsp +++ b/Zend/ZendTS.dsp @@ -229,10 +229,6 @@ SOURCE=.\zend_llist.c # End Source File
# Begin Source File
-SOURCE=.\zend_mm.c
-# End Source File
-# Begin Source File
-
SOURCE=.\zend_object_handlers.c
# End Source File
# Begin Source File
@@ -409,10 +405,6 @@ SOURCE=.\zend_llist.h # End Source File
# Begin Source File
-SOURCE=.\zend_mm.h
-# End Source File
-# Begin Source File
-
SOURCE=.\zend_modules.h
# End Source File
# Begin Source File
diff --git a/Zend/acconfig.h b/Zend/acconfig.h index 991153073..b423f1025 100644 --- a/Zend/acconfig.h +++ b/Zend/acconfig.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: acconfig.h,v 1.40.2.1 2006/01/04 23:53:03 andi Exp $ */ +/* $Id: acconfig.h,v 1.40.2.1.2.1 2007/01/01 09:35:45 sebastian Exp $ */ #define ZEND_API #define ZEND_DLEXPORT diff --git a/Zend/bench.php b/Zend/bench.php index f22704a7a..44000d991 100644 --- a/Zend/bench.php +++ b/Zend/bench.php @@ -1,4 +1,5 @@ <?php +date_default_timezone_set("UTC"); function simple() { $a = 0; diff --git a/Zend/tests/017.phpt b/Zend/tests/017.phpt new file mode 100644 index 000000000..e8a5cfe85 --- /dev/null +++ b/Zend/tests/017.phpt @@ -0,0 +1,82 @@ +--TEST-- +builtin functions tests +--FILE-- +<?php + +var_dump(get_resource_type()); +var_dump(get_resource_type("")); +$fp = fopen(__FILE__, "r"); +var_dump(get_resource_type($fp)); +fclose($fp); +var_dump(get_resource_type($fp)); + +var_dump(get_loaded_extensions(true)); +var_dump(gettype(get_loaded_extensions())); +var_dump(count(get_loaded_extensions())); + +define("USER_CONSTANT", "test"); + +var_dump(get_defined_constants(true, true)); +var_dump(gettype(get_defined_constants(true))); +var_dump(gettype(get_defined_constants())); +var_dump(count(get_defined_constants())); + +function test () { +} + +var_dump(get_defined_functions(true)); +var_dump(gettype(get_defined_functions())); +var_dump(count(get_defined_functions())); + +var_dump(get_declared_interfaces(true)); +var_dump(gettype(get_declared_interfaces())); +var_dump(count(get_declared_interfaces())); + +var_dump(get_extension_funcs()); +var_dump(get_extension_funcs(true)); +var_dump(gettype(get_extension_funcs("standard"))); +var_dump(count(get_extension_funcs("standard"))); +var_dump(gettype(get_extension_funcs("zend"))); +var_dump(count(get_extension_funcs("zend"))); + + +echo "Done\n"; +?> +--EXPECTF-- +Warning: Wrong parameter count for get_resource_type() in %s on line %d +NULL + +Warning: Supplied argument is not a valid resource handle in %s on line %d +bool(false) +string(6) "stream" +string(7) "Unknown" + +Warning: Wrong parameter count for get_loaded_extensions() in %s on line %d +NULL +string(5) "array" +int(%d) + +Warning: Wrong parameter count for get_defined_constants() in %s on line %d +NULL +string(5) "array" +string(5) "array" +int(%d) + +Warning: Wrong parameter count for get_defined_functions() in %s on line %d +NULL +string(5) "array" +int(%d) + +Warning: Wrong parameter count for get_declared_interfaces() in %s on line %d +NULL +string(5) "array" +int(%d) + +Warning: Wrong parameter count for get_extension_funcs() in %s on line %d +NULL +bool(false) +string(5) "array" +int(%d) +string(5) "array" +int(%d) +Done diff --git a/Zend/tests/018.phpt b/Zend/tests/018.phpt new file mode 100644 index 000000000..ea875c678 --- /dev/null +++ b/Zend/tests/018.phpt @@ -0,0 +1,36 @@ +--TEST-- +constant() tests +--FILE-- +<?php + +var_dump(constant()); +var_dump(constant("", "")); +var_dump(constant("")); + +var_dump(constant(array())); + +define("TEST_CONST", 1); +var_dump(constant("TEST_CONST")); + +define("TEST_CONST2", "test"); +var_dump(constant("TEST_CONST2")); + +echo "Done\n"; +?> +--EXPECTF-- +Warning: Wrong parameter count for constant() in %s on line %d +NULL + +Warning: Wrong parameter count for constant() in %s on line %d +NULL + +Warning: constant(): Couldn't find constant in %s on line %d +NULL + +Notice: Array to string conversion in %s on line %d + +Warning: constant(): Couldn't find constant Array in %s on line %d +NULL +int(1) +string(4) "test" +Done diff --git a/Zend/tests/add_001.phpt b/Zend/tests/add_001.phpt new file mode 100644 index 000000000..8d12aea11 --- /dev/null +++ b/Zend/tests/add_001.phpt @@ -0,0 +1,73 @@ +--TEST-- +adding arrays +--FILE-- +<?php + +$a = array(1,2,3); +$b = array("str", "here"); + +$c = $a + $b; +var_dump($c); + +$a = array(1,2,3); +$b = array(1,2,4); + +$c = $a + $b; +var_dump($c); + +$a = array("a"=>"aaa",2,3); +$b = array(1,2,"a"=>"bbbbbb"); + +$c = $a + $b; +var_dump($c); + +$a += $b; +var_dump($c); + +$a += $a; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) +} +array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) +} +array(3) { + ["a"]=> + string(3) "aaa" + [0]=> + int(2) + [1]=> + int(3) +} +array(3) { + ["a"]=> + string(3) "aaa" + [0]=> + int(2) + [1]=> + int(3) +} +array(3) { + ["a"]=> + string(3) "aaa" + [0]=> + int(2) + [1]=> + int(3) +} +Done diff --git a/Zend/tests/add_002.phpt b/Zend/tests/add_002.phpt new file mode 100644 index 000000000..437ac9113 --- /dev/null +++ b/Zend/tests/add_002.phpt @@ -0,0 +1,19 @@ +--TEST-- +adding objects to arrays +--FILE-- +<?php + +$a = array(1,2,3); + +$o = new stdclass; +$o->prop = "value"; + +$c = $a + $o; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +Notice: Object of class stdClass could not be converted to int in %s on line %d + +Fatal error: Unsupported operand types in %s on line %d diff --git a/Zend/tests/add_003.phpt b/Zend/tests/add_003.phpt new file mode 100644 index 000000000..4223af3f1 --- /dev/null +++ b/Zend/tests/add_003.phpt @@ -0,0 +1,19 @@ +--TEST-- +adding arrays to objects +--FILE-- +<?php + +$a = array(1,2,3); + +$o = new stdclass; +$o->prop = "value"; + +$c = $o + $a; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +Notice: Object of class stdClass could not be converted to int in %s on line %d + +Fatal error: Unsupported operand types in %s on line %d diff --git a/Zend/tests/add_004.phpt b/Zend/tests/add_004.phpt new file mode 100644 index 000000000..492ff31ba --- /dev/null +++ b/Zend/tests/add_004.phpt @@ -0,0 +1,14 @@ +--TEST-- +adding numbers to arrays +--FILE-- +<?php + +$a = array(1,2,3); + +$c = $a + 5; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Unsupported operand types in %s on line %d diff --git a/Zend/tests/add_005.phpt b/Zend/tests/add_005.phpt new file mode 100644 index 000000000..7e9bc25d8 --- /dev/null +++ b/Zend/tests/add_005.phpt @@ -0,0 +1,22 @@ +--TEST-- +adding integers to doubles +--INI-- +precision=14 +--FILE-- +<?php + +$i = 75636; +$d = 2834681123.123123; + +$c = $i + $d; +var_dump($c); + +$c = $d + $i; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +float(2834756759.1231) +float(2834756759.1231) +Done diff --git a/Zend/tests/add_006.phpt b/Zend/tests/add_006.phpt new file mode 100644 index 000000000..c3f127e9c --- /dev/null +++ b/Zend/tests/add_006.phpt @@ -0,0 +1,47 @@ +--TEST-- +adding numbers to strings +--FILE-- +<?php + +$i = 75636; +$s1 = "this is a string"; +$s2 = "876222numeric"; +$s3 = "48474874"; +$s4 = "25.68"; + +$c = $i + $s1; +var_dump($c); + +$c = $i + $s2; +var_dump($c); + +$c = $i + $s3; +var_dump($c); + +$c = $i + $s4; +var_dump($c); + +$c = $s1 + $i; +var_dump($c); + +$c = $s2 + $i; +var_dump($c); + +$c = $s3 + $i; +var_dump($c); + +$c = $s4 + $i; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +int(75636) +int(951858) +int(48550510) +float(75661.68) +int(75636) +int(951858) +int(48550510) +float(75661.68) +Done diff --git a/Zend/tests/add_007.phpt b/Zend/tests/add_007.phpt new file mode 100644 index 000000000..b2f1559b7 --- /dev/null +++ b/Zend/tests/add_007.phpt @@ -0,0 +1,16 @@ +--TEST-- +adding strings to arrays +--FILE-- +<?php + +$a = array(1,2,3); + +$s1 = "some string"; + +$c = $a + $s1; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Unsupported operand types in %s on line %d diff --git a/Zend/tests/and_001.phpt b/Zend/tests/and_001.phpt new file mode 100644 index 000000000..109b2ce99 --- /dev/null +++ b/Zend/tests/and_001.phpt @@ -0,0 +1,39 @@ +--TEST-- +bitwise AND and strings +--FILE-- +<?php + +$s = "123"; +$s1 = "234"; + +var_dump($s & $s1); + +$s = "test"; +$s1 = "some"; + +var_dump($s & $s1); + +$s = "test long"; +$s1 = "some"; + +var_dump($s & $s1); + +$s = "test"; +$s1 = "some long"; + +var_dump($s & $s1); + +$s = "test"; +$s &= "some long"; + +var_dump($s); + +echo "Done\n"; +?> +--EXPECTF-- +string(3) "020" +string(4) "pead" +string(4) "pead" +string(4) "pead" +string(4) "pead" +Done diff --git a/Zend/tests/bug33282.phpt b/Zend/tests/bug33282.phpt new file mode 100644 index 000000000..65e3c16cf --- /dev/null +++ b/Zend/tests/bug33282.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #33282 (Re-assignment by reference does not clear the is_ref flag) +--FILE-- +<?php + $a = array(1, 2, 3); + $r = &$a[0]; + $r = &$a[1]; + $r = &$a[2]; + var_dump($a); +?> +--EXPECT-- +array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + &int(3) +} diff --git a/Zend/tests/bug34617.phpt b/Zend/tests/bug34617.phpt index 60a07ea6d..826ff1000 100755 --- a/Zend/tests/bug34617.phpt +++ b/Zend/tests/bug34617.phpt @@ -1,7 +1,7 @@ --TEST--
Bug #34617 (zend_deactivate: objects_store used after zend_objects_store_destroy is called)
--SKIPIF--
-<?php if (!extension_loaded("xml")) print "skip"; ?>
+<?php if (!extension_loaded("xml")) print "skip the xml extension not available"; ?>
--FILE--
<?php
class Thing {}
@@ -15,4 +15,4 @@ function boom() boom();
?>
--EXPECT--
-ok
\ No newline at end of file +ok
diff --git a/Zend/tests/bug35106.phpt b/Zend/tests/bug35106.phpt new file mode 100755 index 000000000..a3f166cd5 --- /dev/null +++ b/Zend/tests/bug35106.phpt @@ -0,0 +1,14 @@ +--TEST--
+Bug #35106 (nested foreach fails when array variable has a reference)
+--FILE--
+<?php
+$a=array("1","2");
+$b=&$a;
+foreach($a as $i){
+ echo $i;
+ foreach($a as $p);
+}
+echo "\n";
+?>
+--EXPECT--
+12
diff --git a/Zend/tests/bug35634.phpt b/Zend/tests/bug35634.phpt new file mode 100755 index 000000000..9681b6ad4 --- /dev/null +++ b/Zend/tests/bug35634.phpt @@ -0,0 +1,36 @@ +--TEST-- +Bug #35634 (Erroneous "Class declarations may not be nested" error raised) +--INI-- +error_reporting=0 +--FILE-- +<?php +if (defined("pass3")) { + + class ErrorClass { + } + +} else if (defined("pass2")) { + + class TestClass { + function __construct() { + } + function TestClass() { + $this->__construct(); + } + } + +} else { + + function errorHandler($errorNumber, $errorMessage, $fileName, $lineNumber) { + define("pass3", 1); + include(__FILE__); + die("Error: $errorMessage ($fileName:$lineNumber)\n"); + } + + set_error_handler('errorHandler'); + define("pass2", 1); + include(__FILE__); +} +?> +--EXPECTF-- +Error: Redefining already defined constructor for class TestClass (%sbug35634.php:12) diff --git a/Zend/tests/bug36214.phpt b/Zend/tests/bug36214.phpt new file mode 100755 index 000000000..dae25452c --- /dev/null +++ b/Zend/tests/bug36214.phpt @@ -0,0 +1,54 @@ +--TEST--
+Bug #36214 (__get method works properly only when conditional operator is used)
+--SKIPIF--
+<?php if (!extension_loaded("spl")) die("skip SPL is no available"); ?>
+--FILE--
+<?php
+class context {
+ public $stack = array();
+
+ public function __set($name,$var) {
+ $this->stack[$name] = $var;return;
+ }
+
+ public function &__get($name) {
+ return $this->stack[$name];
+ }
+}
+
+$ctx = new context;
+$ctx->comment_preview = array();
+$ctx->comment_preview[0] = 1;
+$ctx->comment_preview[1] = 2;
+var_dump($ctx->comment_preview);
+
+$comment_preview = array();
+$comment_preview[0] = 1;
+$comment_preview[1] = 2;
+$ctx->comment_preview = $comment_preview;
+var_dump($ctx->comment_preview);
+
+$ctx->comment_preview = new ArrayObject();
+$ctx->comment_preview[0] = 1;
+$ctx->comment_preview[1] = 2;
+var_dump($ctx->comment_preview);
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
+object(ArrayObject)#2 (2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
diff --git a/Zend/tests/bug37212.phpt b/Zend/tests/bug37212.phpt index 5320a6173..81cc34fdb 100755 --- a/Zend/tests/bug37212.phpt +++ b/Zend/tests/bug37212.phpt @@ -1,5 +1,5 @@ --TEST-- -Bug #3721 (Access to protected property of common base class) +Bug #37212 (Access to protected property of common base class) --FILE-- <?php diff --git a/Zend/tests/bug39297.phpt b/Zend/tests/bug39297.phpt new file mode 100755 index 000000000..01e3f9172 --- /dev/null +++ b/Zend/tests/bug39297.phpt @@ -0,0 +1,45 @@ +--TEST--
+Bug #39297 (Memory corryption because of indirect modification of overloaded array)
+--FILE--
+<?php
+function compareByRef(&$first, &$second) {
+ return $first === $second;
+}
+
+class MyTree implements ArrayAccess {
+ public $parent;
+ public $children = array();
+
+ public function offsetExists($offset) {
+ }
+
+ public function offsetUnset($offset) {
+ }
+
+ public function offsetSet($offset, $value) {
+ echo "offsetSet()\n";
+ $cannonicalName = strtolower($offset);
+ $this->children[$cannonicalName] = $value;
+ $value->parent = $this;
+ }
+
+ public function offsetGet($offset) {
+ echo "offsetGet()\n";
+ $cannonicalName = strtolower($offset);
+ return $this->children[$cannonicalName];
+ }
+
+}
+
+$id = 'Test';
+
+$root = new MyTree();
+$child = new MyTree();
+$root[$id] = $child;
+
+var_dump(compareByRef($root[$id], $child));
+?>
+--EXPECT--
+offsetSet()
+offsetGet()
+bool(true)
diff --git a/Zend/tests/bug39438.phpt b/Zend/tests/bug39438.phpt new file mode 100755 index 000000000..2dac58ac6 --- /dev/null +++ b/Zend/tests/bug39438.phpt @@ -0,0 +1,45 @@ +--TEST--
+Bug #39438 (Fatal error: Out of memory)
+--INI--
+memory_limit=16M
+--FILE--
+<?php
+$i=0;
+$test2=array(
+ 'a1_teasermenu' => array(
+ 'downloadcounter' => 2777,
+ 'versions' => array(
+ '0.1.0' => array (
+ 'title' => 'A1 Teasermenu',
+ 'description' => 'Displays a teaser for advanced subpages or a selection of advanced pages',
+ 'state' => 'stable',
+ 'reviewstate' => 0,
+ 'category' => 'plugin',
+ 'downloadcounter' => 2787,
+ 'lastuploaddate' => 1088427240,
+ 'dependencies' => array (
+ 'depends' => array(
+ 'typo3' =>'',
+ 'php' =>'',
+ 'cms' => ''
+ ),
+ 'conflicts' => array('' =>'')
+ ),
+ 'authorname' => 'Mirko Balluff',
+ 'authoremail' => 'balluff@amt1.de',
+ 'ownerusername' => 'amt1',
+ 't3xfilemd5' => '3a4ec198b6ea8d0bc2d69d9b7400398f',
+ )
+ )
+ )
+);
+$test=array();
+while($i<1200) {
+ $test[]=$test2;
+ $i++;
+}
+$out=serialize($test);
+echo "ok\n";
+?>
+--EXPECT--
+ok
diff --git a/Zend/tests/bug39445.phpt b/Zend/tests/bug39445.phpt new file mode 100755 index 000000000..87f5f03ff --- /dev/null +++ b/Zend/tests/bug39445.phpt @@ -0,0 +1,16 @@ +--TEST--
+Bug #39445 (Calling debug_backtrace() in the __toString() function produces a crash)
+--FILE--
+<?php
+class test {
+ public function __toString() {
+ debug_backtrace();
+ return 'lowercase';
+ }
+}
+
+ $test = new test();
+ echo strtoupper($test);
+?>
+--EXPECT--
+LOWERCASE
diff --git a/Zend/tests/bug39449.phpt b/Zend/tests/bug39449.phpt new file mode 100755 index 000000000..725c0d47b --- /dev/null +++ b/Zend/tests/bug39449.phpt @@ -0,0 +1,40 @@ +--TEST--
+Bug #39449 (Overloaded array properties do not work correctly)
+--FILE--
+<?php
+class A {
+ private $keys = array();
+ public function & __get($val) {
+ return $this->keys[$val];
+ }
+ public function __set($k, $v) {
+ $this->keys[$k] = $v;
+ }
+}
+
+$a =new A();
+$a->arr = array('a','b','c');
+
+$b = &$a->arr;
+$b[]= 'd';
+
+foreach ($a->arr as $k => $v) {
+ echo "$k => $v\n";
+}
+
+$a->arr[]='d';
+
+foreach ($a->arr as $k => $v) {
+ echo "$k => $v\n";
+}
+?>
+--EXPECT--
+0 => a
+1 => b
+2 => c
+3 => d
+0 => a
+1 => b
+2 => c
+3 => d
+4 => d
diff --git a/Zend/tests/bug39602.phpt b/Zend/tests/bug39602.phpt new file mode 100755 index 000000000..daa10e4fd --- /dev/null +++ b/Zend/tests/bug39602.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #39602 (Invalid session.save_handler crashes PHP) +--SKIPIF-- +<?php if (!extension_loaded("session")) die("skip"); ?> +--INI-- +session.save_handler=qwerty +error_reporting=0 +--FILE-- +<?php +ini_set("session.save_handler","files"); +$x = new stdClass(); +echo "ok"; +?> +--EXPECT-- +ok diff --git a/Zend/tests/bug39721.phpt b/Zend/tests/bug39721.phpt new file mode 100755 index 000000000..63edfc23e --- /dev/null +++ b/Zend/tests/bug39721.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #39721 (Runtime inheritance causes data corruption) +--FILE-- +<?php +class test2 { + private static $instances = 0; + public $instance; + + public function __construct() { + $this->instance = ++self::$instances; + } + +} + +$foo = new test2(); + +if (is_object($foo)) { + class test2_child extends test2 { + + } +} + +$child = new test2_child(); + +echo $foo->instance . "\n"; +echo $child->instance . "\n"; +?> +--EXPECT-- +1 +2 diff --git a/Zend/tests/bug39775.phpt b/Zend/tests/bug39775.phpt new file mode 100755 index 000000000..b06797df8 --- /dev/null +++ b/Zend/tests/bug39775.phpt @@ -0,0 +1,20 @@ +--TEST--
+Bug #39775 ("Indirect modification ..." message is not shown)
+--FILE--
+<?php
+class test {
+ var $array = array();
+ function __get($var) {
+ $v =& $this->array;
+ return $this->array;
+ }
+}
+$t = new test;
+$t->anything[] = 'bar';
+print_r($t->anything);
+?>
+--EXPECTF--
+Notice: Indirect modification of overloaded property test::$anything has no effect in %sbug39775.php on line 10
+Array
+(
+)
diff --git a/Zend/tests/bug39825.phpt b/Zend/tests/bug39825.phpt new file mode 100755 index 000000000..294b32d87 --- /dev/null +++ b/Zend/tests/bug39825.phpt @@ -0,0 +1,13 @@ +--TEST--
+Bug #39825 (foreach produces memory error)
+--FILE--
+<?php
+$array = array(1 => 2, "foo" => "bar");
+$obj = (object)$array;
+foreach ($obj as $name => $value) {
+ echo "$name -> $value\n";
+}
+?>
+--EXPECT--
+1 -> 2
+foo -> bar
diff --git a/Zend/tests/bug39944.phpt b/Zend/tests/bug39944.phpt new file mode 100755 index 000000000..4249988ff --- /dev/null +++ b/Zend/tests/bug39944.phpt @@ -0,0 +1,88 @@ +--TEST-- +Bug #39944 (References broken) +--FILE-- +<?php +$intTheValue = 0; + +function &getValue() { + global $intTheValue; + return $intTheValue; +} + +function setValue(&$int, $iNewValue) { + $int = $iNewValue; +} + +setValue(getValue(), 10); +echo "intTheValue = {$intTheValue}\n"; + +$b = &$intTheValue; + +setValue(getValue(), 10); +echo "intTheValue = {$intTheValue}\n"; + +/****/ + +$arrTheArray = array(); + +function &getArray() { + global $arrTheArray; + return $arrTheArray; +} + +function addToArray(&$arr, $strToAdd) { + $arr[] = $strToAdd; +} + +addToArray(getArray(), "xx1"); +$a = getArray(); +addToArray($a, "xx2"); +$b = &$arrTheArray; +addToArray($b, "xx3"); +addToArray(getArray(), "xx4"); +$a = getArray(); +addToArray($a, "xx5"); +echo "arrTheArray = " . print_r($arrTheArray, 1); + +/****/ + +class RefTest { + protected $arr; + + function Add($strToAdd) { + $this->addToArray($this->getArray(), $strToAdd); + } + + function &getArray() { + if (!$this->arr) + $this->arr = array(); + return $this->arr; + } + + private function addToArray(&$arr, $strToAdd) { + $arr[] = $strToAdd; + } +} + +$objRefTest = new RefTest(); +$objRefTest->Add("xx1"); +$objRefTest->Add("xx2"); +$objRefTest->Add("xx3"); + +echo "objRefTest->getArray() = " . print_r($objRefTest->getArray(), 1); +?> +--EXPECT-- +intTheValue = 10 +intTheValue = 10 +arrTheArray = Array +( + [0] => xx1 + [1] => xx3 + [2] => xx4 +) +objRefTest->getArray() = Array +( + [0] => xx1 + [1] => xx2 + [2] => xx3 +) diff --git a/Zend/tests/bug39990.phpt b/Zend/tests/bug39990.phpt new file mode 100755 index 000000000..b2df0b540 --- /dev/null +++ b/Zend/tests/bug39990.phpt @@ -0,0 +1,17 @@ +--TEST--
+Bug #39990 (Cannot "foreach" over overloaded properties)
+--FILE--
+<?php
+ class Foo {
+ public function __get($name) {
+ return array('Hello', 'World');
+ }
+ }
+
+ $obj=new Foo();
+ foreach($obj->arr as $value)
+ echo "$value\n";
+?>
+--EXPECT--
+Hello
+World
diff --git a/Zend/tests/bug40236.inc b/Zend/tests/bug40236.inc new file mode 100755 index 000000000..0fbbfc9ff --- /dev/null +++ b/Zend/tests/bug40236.inc @@ -0,0 +1,10 @@ +<?php
+function func1() { }
+function func2() { }
+function func3() { }
+function func4() { }
+function func5() { }
+function func6() { }
+function func7() { }
+print ("ok\n");
+?>
\ No newline at end of file diff --git a/Zend/tests/bug40236.phpt b/Zend/tests/bug40236.phpt new file mode 100755 index 000000000..9d8f48639 --- /dev/null +++ b/Zend/tests/bug40236.phpt @@ -0,0 +1,14 @@ +--TEST--
+Bug #40236 (php -a function allocation eats memory)
+--SKIPIF--
+if (php_sapi_name() != "cli") die("skip CLI only");
+--FILE--
+<?php
+$php = getenv('TEST_PHP_EXECUTABLE');
+$cmd = "$php -d memory_limit=4M -a ".dirname(__FILE__)."/bug40236.inc";
+echo `$cmd`;
+?>
+--EXPECTF--
+Interactive %s
+
+ok
diff --git a/Zend/tests/bug40261.phpt b/Zend/tests/bug40261.phpt new file mode 100755 index 000000000..93a555708 --- /dev/null +++ b/Zend/tests/bug40261.phpt @@ -0,0 +1,25 @@ +--TEST--
+Bug #40261 (Extremely slow data handling due to memory fragmentation)
+--INI--
+memory_limit=128M
+--FILE--
+<?php
+$num = 100000;
+
+$a = Array();
+for ($i=0; $i<$num; $i++) {
+ $a[$i] = Array(1);
+}
+
+for ($i=0; $i<$num; $i++) {
+ $b[$i] = $a[$i][0];
+}
+
+unset($a);
+for ($i=0; $i<$num; $i++) {
+ $b[$i] = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
+}
+echo "ok\n";
+?>
+--EXPECT--
+ok
diff --git a/Zend/tests/bug40621.phpt b/Zend/tests/bug40621.phpt new file mode 100644 index 000000000..564ba55be --- /dev/null +++ b/Zend/tests/bug40621.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #40621 (Crash when constructor called inappropriately (statically)) +--FILE-- +<?php + +class Foo { + private function __construct() { } + function get() { + self::__construct(); + } +} + +Foo::get(); + +echo "Done\n"; +?> +--EXPECTF-- +Strict Standards: Non-static method Foo::get() should not be called statically in %s on line %d + +Fatal error: Non-static method Foo::__construct() cannot be called statically in %s on line %d diff --git a/Zend/tests/bug40770.phpt b/Zend/tests/bug40770.phpt new file mode 100755 index 000000000..a73338501 --- /dev/null +++ b/Zend/tests/bug40770.phpt @@ -0,0 +1,22 @@ +--TEST--
+Bug #40770 Apache child exits when PHP memory limit reached
+--INI--
+memory_limit=8M
+--SKIPIF--
+<?php
+$zend_mm_enabled = getenv("USE_ZEND_ALLOC");
+if ($zend_mm_enabled === "0") {
+ die("skip Zend MM disabled");
+}
+?>
+--FILE--
+<?php
+ini_set('display_errors',true);
+$mb=148;
+$var = '';
+for ($i=0; $i<=$mb; $i++) {
+ $var.= str_repeat('a',1*1024*1024);
+}
+?>
+--EXPECTF--
+Fatal error: Allowed memory size of 8388608 bytes exhausted%s(tried to allocate %d bytes) in %s on line %d
diff --git a/Zend/tests/bug40784.phpt b/Zend/tests/bug40784.phpt new file mode 100644 index 000000000..6da8f2a16 --- /dev/null +++ b/Zend/tests/bug40784.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #40784 (Case sensivity in constructor's fallback) +--FILE-- +<?php + +class A { + function A () { echo "I'm A\n"; } +} + +class B extends A { + function __construct() { + parent::__construct(); + parent::__constrUct(); + } +} + +$b = new B; + +echo "Done\n"; +?> +--EXPECTF-- +I'm A +I'm A +Done diff --git a/Zend/tests/bug40809.phpt b/Zend/tests/bug40809.phpt new file mode 100755 index 000000000..be27dbd67 --- /dev/null +++ b/Zend/tests/bug40809.phpt @@ -0,0 +1,33 @@ +--TEST--
+Bug #40809 Poor perfomance of ".="
+--FILE--
+<?php
+error_reporting(E_ALL|E_STRICT);
+
+$num_increments = 100;
+$num_repeats = 1000;
+$increment = 50;
+
+/* Create some more holes to give the memory allocator something to
+ * work with. */
+$num = 5000;
+$a = Array();
+for ($i=0; $i<$num; $i++) {
+ $a[$i] = Array(1);
+}
+for ($i=0; $i<$num; $i++) {
+ $b[$i] = $a[$i][0];
+}
+unset($a);
+
+for ($i=0;$i<$num_repeats;$i++) {
+ $evil = "";
+ for ($j=0;$j<$num_increments;$j++) {
+ $evil .= str_repeat("a", $increment);
+ }
+ unset($evil);
+}
+echo "ok\n";
+?>
+--EXPECT--
+ok
diff --git a/Zend/tests/bug40815.phpt b/Zend/tests/bug40815.phpt new file mode 100644 index 000000000..6f7477a9e --- /dev/null +++ b/Zend/tests/bug40815.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #40815 (using strings like "class::func" and static methods in set_exception_handler() might result in crash). +--FILE-- +<?php + +class ehandle{ + static public function exh ($ex) { + echo 'foo'; + } +} + +set_exception_handler("ehandle::exh"); + +throw new Exception ("Whiii"); +echo "Done\n"; +?> +--EXPECTF-- +foo diff --git a/Zend/tests/bug40833.phpt b/Zend/tests/bug40833.phpt new file mode 100755 index 000000000..c56ca4c3b --- /dev/null +++ b/Zend/tests/bug40833.phpt @@ -0,0 +1,72 @@ +--TEST-- +Bug #40833 (Crash when using unset() on an ArrayAccess object retrieved via __get) +--FILE-- +<?php + class entity + { + private $data; + private $modified; + + function __get($name) + { + if ( isset($this->data[$name]) ) + return $this->data[$name]; + else + return $this->data[$name] = new set($this); + } + + function __set($name, $value) + { + $this->modified[$name] = $value; + } + } + + class set implements ArrayAccess + { + private $entity; + + function __construct($entity) + { + $this->entity = $entity; + $this->entity->whatever = $this; + } + + function clear() { + $this->entity->whatever = null; + } + + function offsetUnset($offset) + { + $this->clear(); +// $this->entity->{$this->name} = null; + } + + function offsetSet($offset, $value) + { + } + + function offsetGet($offset) + { + return 'Bogus '; + } + + function offsetExists($offset) + { + } + } + + $entity = new entity(); + echo($entity->whatever[0]); + + //This will crash +// $entity->whatever->clear(); + unset($entity->whatever[0]); + + //This will not crash (comment previous & uncomment this to test +// $test = $entity->whatever; unset($test[0]); + + echo($entity->whatever[0]); + echo "ok\n"; +?> +--EXPECT-- +Bogus Bogus ok diff --git a/Zend/tests/bug40899.phpt b/Zend/tests/bug40899.phpt new file mode 100644 index 000000000..7be0f6b8e --- /dev/null +++ b/Zend/tests/bug40899.phpt @@ -0,0 +1,9 @@ +--TEST-- +Bug #40899 (memory leak when nesting list()) +--FILE-- +<?php +list(list($a,$b),$c)=array(array('a','b'),'c'); +echo "$a$b$c\n"; +?> +--EXPECT-- +abc diff --git a/Zend/tests/bug41026.phpt b/Zend/tests/bug41026.phpt new file mode 100644 index 000000000..7caac215e --- /dev/null +++ b/Zend/tests/bug41026.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #41026 (segfault when calling "self::method()" in shutdown functions) +--FILE-- +<?php + +class try_class +{ + static public function main () + { + register_shutdown_function (array ("self", "on_shutdown")); + } + + static public function on_shutdown () + { + printf ("CHECKPOINT\n"); /* never reached */ + } +} + +try_class::main (); + +echo "Done\n"; +?> +--EXPECTF-- +Done + +Warning: (Registered shutdown functions) Unable to call self::on_shutdown() - function does not exist in Unknown on line 0 diff --git a/Zend/tests/bug41075.phpt b/Zend/tests/bug41075.phpt new file mode 100644 index 000000000..ddeb7cc0c --- /dev/null +++ b/Zend/tests/bug41075.phpt @@ -0,0 +1,31 @@ +--TEST-- +Bug #41075(memleak when creating default object caused exception) +--FILE-- +<?php + +function err($errno, $errstr, $errfile, $errline) +{ + throw new Exception($errstr); +} + +set_error_handler("err"); + +class test { + function foo() { + $var = $this->blah->prop = "string"; + var_dump($this->blah); + } +} + +$t = new test; +try { + $t->foo(); +} catch (Exception $e) { + var_dump($e->getMessage()); +} + +echo "Done\n"; +?> +--EXPECTF-- +string(40) "Creating default object from empty value" +Done diff --git a/Zend/tests/bug41117_1.phpt b/Zend/tests/bug41117_1.phpt new file mode 100755 index 000000000..f555b637a --- /dev/null +++ b/Zend/tests/bug41117_1.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #41117 (Altering $this via argument) +--FILE-- +<?php +class foo { + function __construct($this) { + echo $this."\n"; + } +} +$obj = new foo("Hello world"); +?> +--EXPECTF-- +Fatal error: Cannot re-assign $this in %sbug41117_1.php on line 3 + diff --git a/Zend/tests/bug41209.phpt b/Zend/tests/bug41209.phpt new file mode 100644 index 000000000..0834b376b --- /dev/null +++ b/Zend/tests/bug41209.phpt @@ -0,0 +1,46 @@ +--TEST-- +Bug #41209 (Segmentation fault with ArrayAccess, set_error_handler and undefined var) +--FILE-- +<?php + +class env +{ + public function __construct() + { + set_error_handler(array(__CLASS__, 'errorHandler')); + } + + public static function errorHandler($errno, $errstr, $errfile, $errline) + { + throw new ErrorException($errstr, 0, $errno, $errfile, $errline); + } +} + +class cache implements ArrayAccess +{ + private $container = array(); + + public function offsetGet($id) {} + + public function offsetSet($id, $value) {} + + public function offsetUnset($id) {} + + public function offsetExists($id) + { + return isset($this->containers[(string) $id]); + } +} + +$env = new env(); +$cache = new cache(); +var_dump(isset($cache[$id])); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Uncaught exception 'ErrorException' with message 'Undefined variable: id' in %s:%d +Stack trace: +#0 %s(%d): env::errorHandler() +#1 {main} + thrown in %s on line %d diff --git a/Zend/tests/cast_to_array.phpt b/Zend/tests/cast_to_array.phpt Binary files differnew file mode 100644 index 000000000..5e351052b --- /dev/null +++ b/Zend/tests/cast_to_array.phpt diff --git a/Zend/tests/cast_to_bool.phpt b/Zend/tests/cast_to_bool.phpt new file mode 100644 index 000000000..75ab09d1b --- /dev/null +++ b/Zend/tests/cast_to_bool.phpt @@ -0,0 +1,53 @@ +--TEST-- +casting different variables to boolean +--FILE-- +<?php + +$r = fopen(__FILE__, "r"); + +class test { + function __toString() { + return "10"; + } +} + +$o = new test; + +$vars = array( + "string", + "8754456", + "", + "\0", + 9876545, + 0.10, + array(), + array(1,2,3), + false, + true, + NULL, + $r, + $o +); + +foreach ($vars as $var) { + $tmp = (bool)$var; + var_dump($tmp); +} + +echo "Done\n"; +?> +--EXPECTF-- +bool(true) +bool(true) +bool(false) +bool(true) +bool(true) +bool(true) +bool(false) +bool(true) +bool(false) +bool(true) +bool(false) +bool(true) +bool(true) +Done diff --git a/Zend/tests/cast_to_double.phpt b/Zend/tests/cast_to_double.phpt new file mode 100644 index 000000000..7afc2708b --- /dev/null +++ b/Zend/tests/cast_to_double.phpt @@ -0,0 +1,55 @@ +--TEST-- +casting different variables to double +--FILE-- +<?php + +$r = fopen(__FILE__, "r"); + +class test { + function __toString() { + return "10"; + } +} + +$o = new test; + +$vars = array( + "string", + "8754456", + "", + "\0", + 9876545, + 0.10, + array(), + array(1,2,3), + false, + true, + NULL, + $r, + $o +); + +foreach ($vars as $var) { + $tmp = (double)$var; + var_dump($tmp); +} + +echo "Done\n"; +?> +--EXPECTF-- +float(0) +float(8754456) +float(0) +float(0) +float(9876545) +float(0.1) +float(0) +float(1) +float(0) +float(1) +float(0) +float(%d) + +Notice: Object of class test could not be converted to double in %s on line %d +float(1) +Done diff --git a/Zend/tests/cast_to_int.phpt b/Zend/tests/cast_to_int.phpt new file mode 100644 index 000000000..28c57ddf6 --- /dev/null +++ b/Zend/tests/cast_to_int.phpt @@ -0,0 +1,55 @@ +--TEST-- +casting different variables to integer +--FILE-- +<?php + +$r = fopen(__FILE__, "r"); + +class test { + function __toString() { + return "10"; + } +} + +$o = new test; + +$vars = array( + "string", + "8754456", + "", + "\0", + 9876545, + 0.10, + array(), + array(1,2,3), + false, + true, + NULL, + $r, + $o +); + +foreach ($vars as $var) { + $tmp = (int)$var; + var_dump($tmp); +} + +echo "Done\n"; +?> +--EXPECTF-- +int(0) +int(8754456) +int(0) +int(0) +int(9876545) +int(0) +int(0) +int(1) +int(0) +int(1) +int(0) +int(%d) + +Notice: Object of class test could not be converted to int in %s on line %d +int(1) +Done diff --git a/Zend/tests/cast_to_object.phpt b/Zend/tests/cast_to_object.phpt Binary files differnew file mode 100644 index 000000000..f8d487847 --- /dev/null +++ b/Zend/tests/cast_to_object.phpt diff --git a/Zend/tests/cast_to_string.phpt b/Zend/tests/cast_to_string.phpt Binary files differnew file mode 100644 index 000000000..d06daa2e7 --- /dev/null +++ b/Zend/tests/cast_to_string.phpt diff --git a/Zend/tests/concat_001.phpt b/Zend/tests/concat_001.phpt new file mode 100644 index 000000000..be1297655 --- /dev/null +++ b/Zend/tests/concat_001.phpt @@ -0,0 +1,78 @@ +--TEST-- +concat difffent types +--INI-- +precision=14 +--FILE-- +<?php + +class test { + function __toString() { + return "this is test object"; + } +} + +$a = array(1,2,3); +$o = new test; +$s = "some string"; +$i = 222; +$d = 2323.444; + +var_dump($a.$o); +var_dump($a.$s); +var_dump($a.$i); +var_dump($a.$d); +var_dump($a.$a); + +var_dump($o.$a); +var_dump($o.$s); +var_dump($o.$i); +var_dump($o.$d); +var_dump($o.$o); + +var_dump($s.$o); +var_dump($s.$a); +var_dump($s.$i); +var_dump($s.$d); +var_dump($s.$s); + +var_dump($i.$a); +var_dump($i.$o); +var_dump($i.$s); +var_dump($i.$d); +var_dump($i.$i); + +var_dump($d.$a); +var_dump($d.$o); +var_dump($d.$s); +var_dump($d.$i); +var_dump($d.$d); + +echo "Done\n"; +?> +--EXPECTF-- +string(24) "Arraythis is test object" +string(16) "Arraysome string" +string(8) "Array222" +string(13) "Array2323.444" +string(10) "ArrayArray" +string(24) "this is test objectArray" +string(30) "this is test objectsome string" +string(22) "this is test object222" +string(27) "this is test object2323.444" +string(38) "this is test objectthis is test object" +string(30) "some stringthis is test object" +string(16) "some stringArray" +string(14) "some string222" +string(19) "some string2323.444" +string(22) "some stringsome string" +string(8) "222Array" +string(22) "222this is test object" +string(14) "222some string" +string(11) "2222323.444" +string(6) "222222" +string(13) "2323.444Array" +string(27) "2323.444this is test object" +string(19) "2323.444some string" +string(11) "2323.444222" +string(16) "2323.4442323.444" +Done diff --git a/Zend/tests/div_001.phpt b/Zend/tests/div_001.phpt new file mode 100644 index 000000000..5fa264a11 --- /dev/null +++ b/Zend/tests/div_001.phpt @@ -0,0 +1,32 @@ +--TEST-- +dividing doubles +--INI-- +precision=14 +--FILE-- +<?php + +$d1 = 1.1; +$d2 = 434234.234; + +$c = $d2 / $d1; +var_dump($c); + +$d1 = 1.1; +$d2 = "434234.234"; + +$c = $d2 / $d1; +var_dump($c); + +$d1 = "1.1"; +$d2 = "434234.234"; + +$c = $d2 / $d1; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +float(394758.39454545) +float(394758.39454545) +float(394758.39454545) +Done diff --git a/Zend/tests/div_002.phpt b/Zend/tests/div_002.phpt new file mode 100644 index 000000000..6ade1d9f5 --- /dev/null +++ b/Zend/tests/div_002.phpt @@ -0,0 +1,15 @@ +--TEST-- +dividing arrays +--FILE-- +<?php + +$a = array(1,2,3); +$b = array(1); + +$c = $a / $b; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Unsupported operand types in %s on line %d diff --git a/Zend/tests/double_to_string.phpt b/Zend/tests/double_to_string.phpt new file mode 100644 index 000000000..d1098e719 --- /dev/null +++ b/Zend/tests/double_to_string.phpt @@ -0,0 +1,52 @@ +--TEST-- +double to string conversion tests +--INI-- +precision=14 +--SKIPIF-- +<?php if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); ?> +--FILE-- +<?php + +$doubles = array( + 290000000000000000, + 290000000000000, + 29000000000000, + 29000000000000.123123, + 29000000000000.7123123, + 29000.7123123, + 239234242.7123123, + 0.12345678901234567890, + 10000000000000, + 100000000000000, + 1000000000000000001, + 100000000000001, + 10000000000, + 999999999999999, + 9999999999999999, + (float)0 + ); + +foreach ($doubles as $d) { + var_dump((string)$d); +} + +echo "Done\n"; +?> +--EXPECTF-- +string(7) "2.9E+17" +string(7) "2.9E+14" +string(14) "29000000000000" +string(14) "29000000000000" +string(14) "29000000000001" +string(13) "29000.7123123" +string(15) "239234242.71231" +string(16) "0.12345678901235" +string(14) "10000000000000" +string(7) "1.0E+14" +string(7) "1.0E+18" +string(7) "1.0E+14" +string(11) "10000000000" +string(7) "1.0E+15" +string(7) "1.0E+16" +string(1) "0" +Done diff --git a/Zend/tests/double_to_string_64bit.phpt b/Zend/tests/double_to_string_64bit.phpt new file mode 100644 index 000000000..c52c38c57 --- /dev/null +++ b/Zend/tests/double_to_string_64bit.phpt @@ -0,0 +1,56 @@ +--TEST-- +double to string conversion tests (64bit) +--SKIPIF-- +<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); ?> +--FILE-- +<?php + +$doubles = array( + 29000000000000000000000000000000000000, + 290000000000000000, + 290000000000000, + 29000000000000, + 29000000000000.123123, + 29000000000000.7123123, + 29000.7123123, + 239234242.7123123, + 0.12345678901234567890, + 10000000000000000000000000000000000000000000000, + 1000000000000000000000000000000000, + 100000000000000001, + 1000006000000000011, + 100000000000001, + 10000000000, + 999999999999999999, + 9999999999999999999, + 9999999999999999999999999999999999999, + (float)0 + ); + +foreach ($doubles as $d) { + var_dump((string)$d); +} + +echo "Done\n"; +?> +--EXPECTF-- +string(7) "2.9E+37" +string(18) "290000000000000000" +string(15) "290000000000000" +string(14) "29000000000000" +string(14) "29000000000000" +string(14) "29000000000001" +string(13) "29000.7123123" +string(15) "239234242.71231" +string(16) "0.12345678901235" +string(7) "1.0E+46" +string(7) "1.0E+33" +string(18) "100000000000000001" +string(19) "1000006000000000011" +string(15) "100000000000001" +string(11) "10000000000" +string(18) "999999999999999999" +string(7) "1.0E+19" +string(7) "1.0E+37" +string(1) "0" +Done diff --git a/Zend/tests/errmsg_001.phpt b/Zend/tests/errmsg_001.phpt new file mode 100644 index 000000000..b85e032b9 --- /dev/null +++ b/Zend/tests/errmsg_001.phpt @@ -0,0 +1,16 @@ +--TEST-- +errmsg: Non-abstract method must contain body +--FILE-- +<?php + +abstract class test { +} + +class Impl extends Test { + function Foo(); +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Non-abstract method Impl::Foo() must contain body in %s on line %d diff --git a/Zend/tests/errmsg_002.phpt b/Zend/tests/errmsg_002.phpt new file mode 100644 index 000000000..b7330c9f1 --- /dev/null +++ b/Zend/tests/errmsg_002.phpt @@ -0,0 +1,14 @@ +--TEST-- +errmsg: function cannot be declared private +--FILE-- +<?php + +abstract class test { + abstract private function foo() { + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Abstract function test::foo() cannot be declared private in %s on line %d diff --git a/Zend/tests/errmsg_003.phpt b/Zend/tests/errmsg_003.phpt new file mode 100644 index 000000000..64e458781 --- /dev/null +++ b/Zend/tests/errmsg_003.phpt @@ -0,0 +1,19 @@ +--TEST-- +errmsg: cannot reassign $this (by ref) +--FILE-- +<?php + +class test { + function foo() { + $a = new test; + $this = &$a; + } +} + +$t = new test; +$t->foo(); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot re-assign $this in %s on line %d diff --git a/Zend/tests/errmsg_004.phpt b/Zend/tests/errmsg_004.phpt new file mode 100644 index 000000000..e6d22d6ab --- /dev/null +++ b/Zend/tests/errmsg_004.phpt @@ -0,0 +1,15 @@ +--TEST-- +errmsg: can't use function return value in write context +--FILE-- +<?php + +function foo() { + return "blah"; +} + +foo() = 1; + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Can't use function return value in write context in %s on line %d diff --git a/Zend/tests/errmsg_005.phpt b/Zend/tests/errmsg_005.phpt new file mode 100644 index 000000000..31c924cbb --- /dev/null +++ b/Zend/tests/errmsg_005.phpt @@ -0,0 +1,18 @@ +--TEST-- +errmsg: can't use method return value in write context +--FILE-- +<?php + +class test { + function foo() { + return "blah"; + } +} + +$t = new test; +$t->foo() = 1; + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Can't use method return value in write context in %s on line %d diff --git a/Zend/tests/errmsg_006.phpt b/Zend/tests/errmsg_006.phpt new file mode 100644 index 000000000..976093d85 --- /dev/null +++ b/Zend/tests/errmsg_006.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: can't use [] for reading +--FILE-- +<?php + +$a = array(); +$b = $a[]; + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use [] for reading in %s on line %d diff --git a/Zend/tests/errmsg_007.phpt b/Zend/tests/errmsg_007.phpt new file mode 100644 index 000000000..1ac296695 --- /dev/null +++ b/Zend/tests/errmsg_007.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: can't use [] for reading - 2 +--FILE-- +<?php + +$a = array(); +isset($a[]); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use [] for reading in %s on line %d diff --git a/Zend/tests/errmsg_008.phpt b/Zend/tests/errmsg_008.phpt new file mode 100644 index 000000000..e900603a8 --- /dev/null +++ b/Zend/tests/errmsg_008.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: can't use [] for unsetting +--FILE-- +<?php + +$a = array(); +unset($a[]); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use [] for unsetting in %s on line %d diff --git a/Zend/tests/errmsg_009.phpt b/Zend/tests/errmsg_009.phpt new file mode 100644 index 000000000..4834fa3e7 --- /dev/null +++ b/Zend/tests/errmsg_009.phpt @@ -0,0 +1,13 @@ +--TEST-- +errmsg: multiple access type modifiers are not allowed (properties) +--FILE-- +<?php + +class test { + public private $var; +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Multiple access type modifiers are not allowed in %s on line %d diff --git a/Zend/tests/errmsg_010.phpt b/Zend/tests/errmsg_010.phpt new file mode 100644 index 000000000..ae2572f7b --- /dev/null +++ b/Zend/tests/errmsg_010.phpt @@ -0,0 +1,13 @@ +--TEST-- +errmsg: multiple access type modifiers are not allowed (methods) +--FILE-- +<?php + +class test { + private protected function foo() {} +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Multiple access type modifiers are not allowed in %s on line %d diff --git a/Zend/tests/errmsg_011.phpt b/Zend/tests/errmsg_011.phpt new file mode 100644 index 000000000..9cfde0f8b --- /dev/null +++ b/Zend/tests/errmsg_011.phpt @@ -0,0 +1,16 @@ +--TEST-- +errmsg: cannot redeclare (method) +--FILE-- +<?php + +class test { + + function foo() {} + function foo() {} + +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot redeclare test::foo() in %s on line %d diff --git a/Zend/tests/errmsg_012.phpt b/Zend/tests/errmsg_012.phpt new file mode 100644 index 000000000..183785be0 --- /dev/null +++ b/Zend/tests/errmsg_012.phpt @@ -0,0 +1,11 @@ +--TEST-- +errmsg: __autoload() must take exactly 1 argument +--FILE-- +<?php + +function __autoload($a, $b) {} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: __autoload() must take exactly 1 argument in %s on line %d diff --git a/Zend/tests/errmsg_013.phpt b/Zend/tests/errmsg_013.phpt new file mode 100644 index 000000000..d1f248ec2 --- /dev/null +++ b/Zend/tests/errmsg_013.phpt @@ -0,0 +1,14 @@ +--TEST-- +errmsg: default value for parameters with array type hint can only be an array or NULL +--FILE-- +<?php + +class test { + function foo(array $a = "s") { + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Default value for parameters with array type hint can only be an array or NULL in %s on line %d diff --git a/Zend/tests/errmsg_014.phpt b/Zend/tests/errmsg_014.phpt new file mode 100644 index 000000000..77e12b05e --- /dev/null +++ b/Zend/tests/errmsg_014.phpt @@ -0,0 +1,17 @@ +--TEST-- +errmsg: cannot call __clone() method on objects +--FILE-- +<?php + +class test { + function __clone() { + } +} + +$t = new test; +$t->__clone(); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot call __clone() method on objects - use 'clone $obj' instead in %s on line %d diff --git a/Zend/tests/errmsg_015.phpt b/Zend/tests/errmsg_015.phpt new file mode 100644 index 000000000..8e626e509 --- /dev/null +++ b/Zend/tests/errmsg_015.phpt @@ -0,0 +1,14 @@ +--TEST-- +errmsg: __clone() cannot accept any arguments +--FILE-- +<?php + +class test { + function __clone($var) { + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Method test::__clone() cannot accept any arguments in %s on line %d diff --git a/Zend/tests/errmsg_016.phpt b/Zend/tests/errmsg_016.phpt new file mode 100644 index 000000000..ccda07b9a --- /dev/null +++ b/Zend/tests/errmsg_016.phpt @@ -0,0 +1,14 @@ +--TEST-- +errmsg: __isset() must take exactly 1 argument +--FILE-- +<?php + +class test { + function __isset() { + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Method test::__isset() must take exactly 1 argument in %s on line %d diff --git a/Zend/tests/errmsg_017.phpt b/Zend/tests/errmsg_017.phpt new file mode 100644 index 000000000..df2b66568 --- /dev/null +++ b/Zend/tests/errmsg_017.phpt @@ -0,0 +1,14 @@ +--TEST-- +errmsg: __unset() must take exactly 1 argument +--FILE-- +<?php + +class test { + function __unset() { + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Method test::__unset() must take exactly 1 argument in %s on line %d diff --git a/Zend/tests/errmsg_018.phpt b/Zend/tests/errmsg_018.phpt new file mode 100644 index 000000000..fb05cb1a5 --- /dev/null +++ b/Zend/tests/errmsg_018.phpt @@ -0,0 +1,15 @@ +--TEST-- +errmsg: static abstract function +--FILE-- +<?php + +class test { + static abstract function foo (); +} + +echo "Done\n"; +?> +--EXPECTF-- +Strict Standards: Static function test::foo() should not be abstract in %s on line %d + +Fatal error: Class test contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (test::foo) in %s on line %d diff --git a/Zend/tests/errmsg_019.phpt b/Zend/tests/errmsg_019.phpt new file mode 100644 index 000000000..2b45650cf --- /dev/null +++ b/Zend/tests/errmsg_019.phpt @@ -0,0 +1,14 @@ +--TEST-- +errmsg: __destruct() cannot take arguments +--FILE-- +<?php + +class test { + function __destruct($var) { + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Destructor test::__destruct() cannot take arguments in %s on line %d diff --git a/Zend/tests/errmsg_020.phpt b/Zend/tests/errmsg_020.phpt new file mode 100644 index 000000000..8199d5d06 --- /dev/null +++ b/Zend/tests/errmsg_020.phpt @@ -0,0 +1,14 @@ +--TEST-- +errmsg: disabled function +--INI-- +disable_functions=phpinfo +--FILE-- +<?php + +phpinfo(); + +echo "Done\n"; +?> +--EXPECTF-- +Warning: phpinfo() has been disabled for security reasons in %s on line %d +Done diff --git a/Zend/tests/errmsg_021.phpt b/Zend/tests/errmsg_021.phpt new file mode 100644 index 000000000..4e62f8511 --- /dev/null +++ b/Zend/tests/errmsg_021.phpt @@ -0,0 +1,17 @@ +--TEST-- +errmsg: disabled class +--INI-- +disable_classes=stdclass +--FILE-- +<?php + +class test extends stdclass { +} + +$t = new test; + +echo "Done\n"; +?> +--EXPECTF-- +Warning: test() has been disabled for security reasons in %s on line %d +Done diff --git a/Zend/tests/errmsg_022.phpt b/Zend/tests/errmsg_022.phpt new file mode 100644 index 000000000..ea7b082f9 --- /dev/null +++ b/Zend/tests/errmsg_022.phpt @@ -0,0 +1,14 @@ +--TEST-- +errmsg: only variables can be passed by reference +--FILE-- +<?php + +function foo (&$var) { +} + +foo(1); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Only variables can be passed by reference in %s on line %d diff --git a/Zend/tests/errmsg_023.phpt b/Zend/tests/errmsg_023.phpt new file mode 100644 index 000000000..9fd7804ea --- /dev/null +++ b/Zend/tests/errmsg_023.phpt @@ -0,0 +1,17 @@ +--TEST-- +errmsg: access level must be the same or weaker +--FILE-- +<?php + +class test1 { + protected $var; +} + +class test extends test1 { + private $var; +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Access level to test::$var must be protected (as in class test1) or weaker in %s on line %d diff --git a/Zend/tests/errmsg_024.phpt b/Zend/tests/errmsg_024.phpt new file mode 100644 index 000000000..d8d06cbce --- /dev/null +++ b/Zend/tests/errmsg_024.phpt @@ -0,0 +1,17 @@ +--TEST-- +errmsg: cannot change initial value of property +--FILE-- +<?php + +class test1 { + static protected $var = 1; +} + +class test extends test1 { + static $var = 10; +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot change initial value of property static protected test1::$var in class test in %s on line %d diff --git a/Zend/tests/errmsg_025.phpt b/Zend/tests/errmsg_025.phpt new file mode 100644 index 000000000..d853f7342 --- /dev/null +++ b/Zend/tests/errmsg_025.phpt @@ -0,0 +1,20 @@ +--TEST-- +errmsg: cannot inherit previously inherited constant +--FILE-- +<?php + +interface test1 { + const FOO = 10; +} + +interface test2 { + const FOO = 10; +} + +class test implements test1, test2 { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot inherit previously-inherited constant FOO from interface test2 in %s on line %d diff --git a/Zend/tests/errmsg_026.phpt b/Zend/tests/errmsg_026.phpt new file mode 100644 index 000000000..195412290 --- /dev/null +++ b/Zend/tests/errmsg_026.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: cannot redeclare class +--FILE-- +<?php + +class stdclass { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot redeclare class stdclass in %s on line %d diff --git a/Zend/tests/errmsg_027.phpt b/Zend/tests/errmsg_027.phpt new file mode 100644 index 000000000..f4fec6155 --- /dev/null +++ b/Zend/tests/errmsg_027.phpt @@ -0,0 +1,16 @@ +--TEST-- +errmsg: class declarations may not be nested +--FILE-- +<?php + +class test { + function foo() { + class test2 { + } + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Class declarations may not be nested in %s on line %d diff --git a/Zend/tests/errmsg_028.phpt b/Zend/tests/errmsg_028.phpt new file mode 100644 index 000000000..3331cb35b --- /dev/null +++ b/Zend/tests/errmsg_028.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: cannot use 'self' as class name +--FILE-- +<?php + +class self { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use 'self' as class name as it is reserved in %s on line %d diff --git a/Zend/tests/errmsg_029.phpt b/Zend/tests/errmsg_029.phpt new file mode 100644 index 000000000..73b85ce6a --- /dev/null +++ b/Zend/tests/errmsg_029.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: cannot use 'parent' as class name +--FILE-- +<?php + +class parent { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use 'parent' as class name as it is reserved in %s on line %d diff --git a/Zend/tests/errmsg_030.phpt b/Zend/tests/errmsg_030.phpt new file mode 100644 index 000000000..ab6ccbd41 --- /dev/null +++ b/Zend/tests/errmsg_030.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: cannot use 'self' as parent class name +--FILE-- +<?php + +class test extends self { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use 'self' as class name as it is reserved in %s on line %d diff --git a/Zend/tests/errmsg_031.phpt b/Zend/tests/errmsg_031.phpt new file mode 100644 index 000000000..6e3564854 --- /dev/null +++ b/Zend/tests/errmsg_031.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: cannot use 'parent' as parent class name +--FILE-- +<?php + +class test extends parent { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use 'parent' as class name as it is reserved in %s on line %d diff --git a/Zend/tests/errmsg_032.phpt b/Zend/tests/errmsg_032.phpt new file mode 100644 index 000000000..6e34604cd --- /dev/null +++ b/Zend/tests/errmsg_032.phpt @@ -0,0 +1,15 @@ +--TEST-- +errmsg: __construct() cannot be static +--FILE-- +<?php + +class test { + + static function __construct() { + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Constructor test::__construct() cannot be static in %s on line %d diff --git a/Zend/tests/errmsg_033.phpt b/Zend/tests/errmsg_033.phpt new file mode 100644 index 000000000..96938900e --- /dev/null +++ b/Zend/tests/errmsg_033.phpt @@ -0,0 +1,15 @@ +--TEST-- +errmsg: __destruct() cannot be static +--FILE-- +<?php + +class test { + + static function __destruct() { + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Destructor test::__destruct() cannot be static in %s on line %d diff --git a/Zend/tests/errmsg_034.phpt b/Zend/tests/errmsg_034.phpt new file mode 100644 index 000000000..1494fe532 --- /dev/null +++ b/Zend/tests/errmsg_034.phpt @@ -0,0 +1,15 @@ +--TEST-- +errmsg: __clone() cannot be static +--FILE-- +<?php + +class test { + + static function __clone() { + } +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Clone method test::__clone() cannot be static in %s on line %d diff --git a/Zend/tests/errmsg_035.phpt b/Zend/tests/errmsg_035.phpt new file mode 100644 index 000000000..76cbe3d48 --- /dev/null +++ b/Zend/tests/errmsg_035.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: cannot use 'self' as interface name +--FILE-- +<?php + +class test implements self { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use 'self' as interface name as it is reserved in %s on line %d diff --git a/Zend/tests/errmsg_036.phpt b/Zend/tests/errmsg_036.phpt new file mode 100644 index 000000000..d1f4274bd --- /dev/null +++ b/Zend/tests/errmsg_036.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: cannot use 'parent' as interface name +--FILE-- +<?php + +class test implements parent { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use 'parent' as interface name as it is reserved in %s on line %d diff --git a/Zend/tests/errmsg_037.phpt b/Zend/tests/errmsg_037.phpt new file mode 100644 index 000000000..6b98bb333 --- /dev/null +++ b/Zend/tests/errmsg_037.phpt @@ -0,0 +1,13 @@ +--TEST-- +errmsg: properties cannot be abstract +--FILE-- +<?php + +class test { + abstract $var = 1; +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Properties cannot be declared abstract in %s on line %d diff --git a/Zend/tests/errmsg_038.phpt b/Zend/tests/errmsg_038.phpt new file mode 100644 index 000000000..fdab803ba --- /dev/null +++ b/Zend/tests/errmsg_038.phpt @@ -0,0 +1,13 @@ +--TEST-- +errmsg: properties cannot be final +--FILE-- +<?php + +class test { + final $var = 1; +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot declare property test::$var final, the final modifier is allowed only for methods in %s on line %d diff --git a/Zend/tests/errmsg_039.phpt b/Zend/tests/errmsg_039.phpt new file mode 100644 index 000000000..000081187 --- /dev/null +++ b/Zend/tests/errmsg_039.phpt @@ -0,0 +1,14 @@ +--TEST-- +errmsg: cannot redeclare property +--FILE-- +<?php + +class test { + var $var; + var $var; +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot redeclare test::$var in %s on line %d diff --git a/Zend/tests/errmsg_040.phpt b/Zend/tests/errmsg_040.phpt new file mode 100644 index 000000000..f3d0afcf0 --- /dev/null +++ b/Zend/tests/errmsg_040.phpt @@ -0,0 +1,13 @@ +--TEST-- +errmsg: arrays are not allowed in class constants +--FILE-- +<?php + +class test { + const TEST = array(1,2,3); +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Arrays are not allowed in class constants in %s on line %d diff --git a/Zend/tests/errmsg_041.phpt b/Zend/tests/errmsg_041.phpt new file mode 100644 index 000000000..bfcafd261 --- /dev/null +++ b/Zend/tests/errmsg_041.phpt @@ -0,0 +1,11 @@ +--TEST-- +errmsg: instanceof expects an object instance, constant given +--FILE-- +<?php + +var_dump("abc" instanceof stdclass); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: instanceof expects an object instance, constant given in %s on line %d diff --git a/Zend/tests/errmsg_042.phpt b/Zend/tests/errmsg_042.phpt new file mode 100644 index 000000000..3b4ea7c26 --- /dev/null +++ b/Zend/tests/errmsg_042.phpt @@ -0,0 +1,13 @@ +--TEST-- +errmsg: key element cannot be a reference +--FILE-- +<?php + +$a = array(1,2,3); +foreach ($a as &$k=>$v) { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Key element cannot be a reference in %s on line %d diff --git a/Zend/tests/errmsg_043.phpt b/Zend/tests/errmsg_043.phpt new file mode 100644 index 000000000..3de8bc206 --- /dev/null +++ b/Zend/tests/errmsg_043.phpt @@ -0,0 +1,12 @@ +--TEST-- +errmsg: cannot create references to temp array +--FILE-- +<?php + +foreach (array(1,2,3) as $k=>&$v) { +} + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot create references to elements of a temporary array expression in %s on line %d diff --git a/Zend/tests/foreach.phpt b/Zend/tests/foreach.phpt new file mode 100644 index 000000000..041a7636e --- /dev/null +++ b/Zend/tests/foreach.phpt @@ -0,0 +1,25 @@ +--TEST-- +foreach() by-ref bug +--FILE-- +<?php +$foo = array(1,2,3,4); +foreach($foo as $key => &$val) { + if($val == 3) { + $foo[$key] = 0; + } else { + $val++; + } +} +var_dump($foo); +?> +--EXPECT-- +array(4) { + [0]=> + int(2) + [1]=> + int(3) + [2]=> + int(0) + [3]=> + &int(5) +} diff --git a/Zend/tests/globals.inc b/Zend/tests/globals.inc new file mode 100644 index 000000000..976237cf1 --- /dev/null +++ b/Zend/tests/globals.inc @@ -0,0 +1,15 @@ +<?php + +var_dump(isset($_SERVER)); +var_dump(empty($_SERVER)); +var_dump(gettype($_SERVER)); +var_dump(count($_SERVER)); + +var_dump($_SERVER['PHP_SELF']); +unset($_SERVER['PHP_SELF']); +var_dump($_SERVER['PHP_SELF']); + +unset($_SERVER); +var_dump($_SERVER); + +?> diff --git a/Zend/tests/globals_001.phpt b/Zend/tests/globals_001.phpt new file mode 100644 index 000000000..b678c5310 --- /dev/null +++ b/Zend/tests/globals_001.phpt @@ -0,0 +1,34 @@ +--TEST-- +globals in global scope +--INIT-- +variables_order="egpcs" +--FILE-- +<?php + +var_dump(isset($_SERVER)); +var_dump(empty($_SERVER)); +var_dump(gettype($_SERVER)); +var_dump(count($_SERVER)); + +var_dump($_SERVER['PHP_SELF']); +unset($_SERVER['PHP_SELF']); +var_dump($_SERVER['PHP_SELF']); + +unset($_SERVER); +var_dump($_SERVER); + +echo "Done\n"; +?> +--EXPECTF-- +bool(true) +bool(false) +string(5) "array" +int(%d) +string(%d) "%s" + +Notice: Undefined index: PHP_SELF in %s on line %d +NULL + +Notice: Undefined variable: _SERVER in %s on line %d +NULL +Done diff --git a/Zend/tests/globals_002.phpt b/Zend/tests/globals_002.phpt new file mode 100644 index 000000000..3bc3dae2d --- /dev/null +++ b/Zend/tests/globals_002.phpt @@ -0,0 +1,37 @@ +--TEST-- +globals in local scope +--INIT-- +variables_order="egpcs" +--FILE-- +<?php +function test() { + var_dump(isset($_SERVER)); + var_dump(empty($_SERVER)); + var_dump(gettype($_SERVER)); + var_dump(count($_SERVER)); + + var_dump($_SERVER['PHP_SELF']); + unset($_SERVER['PHP_SELF']); + var_dump($_SERVER['PHP_SELF']); + + unset($_SERVER); + var_dump($_SERVER); +} + +test(); + +echo "Done\n"; +?> +--EXPECTF-- +bool(true) +bool(false) +string(5) "array" +int(%d) +string(%d) "%s" + +Notice: Undefined index: PHP_SELF in %s on line %d +NULL + +Notice: Undefined variable: _SERVER in %s on line %d +NULL +Done diff --git a/Zend/tests/globals_003.phpt b/Zend/tests/globals_003.phpt new file mode 100644 index 000000000..dcc7935a9 --- /dev/null +++ b/Zend/tests/globals_003.phpt @@ -0,0 +1,43 @@ +--TEST-- +globals in local scope - 2 +--INIT-- +variables_order="egpcs" +--FILE-- +<?php + +class test { + + static function bar() { + + var_dump(isset($_SERVER)); + var_dump(empty($_SERVER)); + var_dump(gettype($_SERVER)); + var_dump(count($_SERVER)); + + var_dump($_SERVER['PHP_SELF']); + unset($_SERVER['PHP_SELF']); + var_dump($_SERVER['PHP_SELF']); + + unset($_SERVER); + var_dump($_SERVER); + + } +} + +test::bar(); + +echo "Done\n"; +?> +--EXPECTF-- +bool(true) +bool(false) +string(5) "array" +int(%d) +string(%d) "%s" + +Notice: Undefined index: PHP_SELF in %s on line %d +NULL + +Notice: Undefined variable: _SERVER in %s on line %d +NULL +Done diff --git a/Zend/tests/globals_004.phpt b/Zend/tests/globals_004.phpt new file mode 100644 index 000000000..e06791e61 --- /dev/null +++ b/Zend/tests/globals_004.phpt @@ -0,0 +1,28 @@ +--TEST-- +globals in local scope - 3 +--INIT-- +variables_order="egpcs" +--FILE-- +<?php + +function test() { + include dirname(__FILE__)."/globals.inc"; +} + +test(); + +echo "Done\n"; +?> +--EXPECTF-- +bool(true) +bool(false) +string(5) "array" +int(%d) +string(%d) "%s" + +Notice: Undefined index: PHP_SELF in %s on line %d +NULL + +Notice: Undefined variable: _SERVER in %s on line %d +NULL +Done diff --git a/Zend/tests/halt_compiler1.phpt b/Zend/tests/halt_compiler1.phpt new file mode 100644 index 000000000..4987b29b2 --- /dev/null +++ b/Zend/tests/halt_compiler1.phpt @@ -0,0 +1,8 @@ +--TEST-- +__HALT_COMPILER(); +--FILE-- +<?php echo 'test'; var_dump(__COMPILER_HALT_OFFSET__); __HALT_COMPILER(); +?> +===DONE=== +--EXPECT-- +testint(73)
\ No newline at end of file diff --git a/Zend/tests/halt_compiler2.phpt b/Zend/tests/halt_compiler2.phpt new file mode 100644 index 000000000..0ced2142c --- /dev/null +++ b/Zend/tests/halt_compiler2.phpt @@ -0,0 +1,23 @@ +--TEST-- +__HALT_COMPILER(); 2 files +--FILE-- +<?php +$text = "<?php echo 'test'; var_dump(__COMPILER_HALT_OFFSET__); __HALT_COMPILER(); ?> +hi there"; +file_put_contents(dirname(__FILE__) . '/test1.php', $text); +$text = "<?php echo 'test2'; var_dump(__COMPILER_HALT_OFFSET__); __HALT_COMPILER(); ?> +hi there 2"; +file_put_contents(dirname(__FILE__) . '/test2.php', $text); +include dirname(__FILE__) . '/test1.php'; +include dirname(__FILE__) . '/test2.php'; +?> +==DONE== +--CLEAN-- +<?php +unlink(dirname(__FILE__) . '/test1.php'); +unlink(dirname(__FILE__) . '/test2.php'); +?> +--EXPECT-- +testint(73) +test2int(74) +==DONE==
\ No newline at end of file diff --git a/Zend/tests/halt_compiler3.phpt b/Zend/tests/halt_compiler3.phpt new file mode 100644 index 000000000..6ee16f79b --- /dev/null +++ b/Zend/tests/halt_compiler3.phpt @@ -0,0 +1,10 @@ +--TEST-- +__HALT_COMPILER(); bad define() of __COMPILER_HALT_OFFSET__ 1 +--FILE-- +<?php +define ('__COMPILER_HALT_OFFSET__', 1); +?> +==DONE== +--EXPECTF-- +Notice: Constant __COMPILER_HALT_OFFSET__ already defined in %s on line %d +==DONE==
\ No newline at end of file diff --git a/Zend/tests/halt_compiler4.phpt b/Zend/tests/halt_compiler4.phpt new file mode 100644 index 000000000..43e532ce7 --- /dev/null +++ b/Zend/tests/halt_compiler4.phpt @@ -0,0 +1,10 @@ +--TEST-- +__HALT_COMPILER(); bad define() of __COMPILER_HALT_OFFSET__ 2 +--FILE-- +<?php +define ('__COMPILER_HALT_OFFSET__', 1); +__HALT_COMPILER(); +?> +==DONE== +--EXPECTF-- +Notice: Constant __COMPILER_HALT_OFFSET__ already defined in %s on line %d
\ No newline at end of file diff --git a/Zend/tests/hex_overflow_32bit.phpt b/Zend/tests/hex_overflow_32bit.phpt new file mode 100644 index 000000000..36e9a7e9d --- /dev/null +++ b/Zend/tests/hex_overflow_32bit.phpt @@ -0,0 +1,29 @@ +--TEST-- +testing integer overflow (32bit) +--INI-- +precision=14 +--SKIPIF-- +<?php if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); ?> +--FILE-- +<?php + +$doubles = array( + 0x1736123FFFAAA, + 0XFFFFFFFFFFFFFFFFFF, + 0xAAAAAAAAAAAAAAEEEEEEEEEBBB, + 0x66666666666666666777777, + ); + +foreach ($doubles as $d) { + $l = $d; + var_dump($l); +} + +echo "Done\n"; +?> +--EXPECTF-- +float(4083360297110%d) +float(4.7223664828%dE+21) +float(1.3521606402%dE+31) +float(1.9807040628%dE+27) +Done diff --git a/Zend/tests/mod_001.phpt b/Zend/tests/mod_001.phpt new file mode 100644 index 000000000..88596f3d5 --- /dev/null +++ b/Zend/tests/mod_001.phpt @@ -0,0 +1,17 @@ +--TEST-- +modulus by zero +--FILE-- +<?php + +$a = array(1,2,3); +$b = array(); + +$c = $a % $b; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +Warning: Division by zero in %s on line %d +bool(false) +Done diff --git a/Zend/tests/mul_001.phpt b/Zend/tests/mul_001.phpt new file mode 100644 index 000000000..4c5a75e7d --- /dev/null +++ b/Zend/tests/mul_001.phpt @@ -0,0 +1,15 @@ +--TEST-- +multiplying arrays +--FILE-- +<?php + +$a = array(1,2,3); +$b = array(1); + +$c = $a * $b; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Unsupported operand types in %s on line %d diff --git a/Zend/tests/not_001.phpt b/Zend/tests/not_001.phpt new file mode 100644 index 000000000..6eb0f000c --- /dev/null +++ b/Zend/tests/not_001.phpt @@ -0,0 +1,22 @@ +--TEST-- +bitwise NOT, doubles and strings +--FILE-- +<?php + +$d = 23.67; +$s = "48484.22"; +$s1 = "test"; +$s2 = "some"; + +$s = ~$d; +var_dump($s); + +$s1 = ~$s2; +var_dump(bin2hex($s1)); + +echo "Done\n"; +?> +--EXPECTF-- +int(-24) +string(8) "8c90929a" +Done diff --git a/Zend/tests/not_002.phpt b/Zend/tests/not_002.phpt new file mode 100644 index 000000000..df27772a7 --- /dev/null +++ b/Zend/tests/not_002.phpt @@ -0,0 +1,15 @@ +--TEST-- +bitwise NOT and arrays +--FILE-- +<?php + +$a = array(1,2,3); +$b = array(1,2); + +$a = ~$b; +var_dump($a); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Unsupported operand types in %s on line %d diff --git a/Zend/tests/oct_overflow_32bit.phpt b/Zend/tests/oct_overflow_32bit.phpt new file mode 100644 index 000000000..d27c1f547 --- /dev/null +++ b/Zend/tests/oct_overflow_32bit.phpt @@ -0,0 +1,31 @@ +--TEST-- +testing integer overflow (32bit) +--INI-- +precision=14 +--SKIPIF-- +<?php if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); ?> +--FILE-- +<?php + +$doubles = array( + 076545676543223, + 032325463734, + 077777797777777, + 07777777777777977777777777, + 03333333333333382222222222222, + ); + +foreach ($doubles as $d) { + $l = (double)$d; + var_dump($l); +} + +echo "Done\n"; +?> +--EXPECTF-- +float(4308640384%d) +float(3545655%d) +float(262143) +float(549755813%d) +float(1884877076%d) +Done diff --git a/Zend/tests/offset_assign.phpt b/Zend/tests/offset_assign.phpt new file mode 100644 index 000000000..eebf63c4f --- /dev/null +++ b/Zend/tests/offset_assign.phpt @@ -0,0 +1,11 @@ +--TEST-- +Crash on $x['x']['y'] += 1 when $x is string +--FILE-- +<?php +$x = "a"; +$x['x']['y'] += 1; + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Cannot use string offset as an array in %s on line %d diff --git a/Zend/tests/or_001.phpt b/Zend/tests/or_001.phpt new file mode 100644 index 000000000..1e4e5131a --- /dev/null +++ b/Zend/tests/or_001.phpt @@ -0,0 +1,29 @@ +--TEST-- +bitwise OR and strings +--FILE-- +<?php + +$s = "323423"; +$s1 = "2323.555"; + +var_dump($s | $s1); +var_dump($s1 | $s); + +$s = "some"; +$s1 = "test"; + +var_dump($s | $s1); + +$s = "some"; +$s |= "test"; + +var_dump($s); + +echo "Done\n"; +?> +--EXPECTF-- +string(8) "3337>755" +string(8) "3337>755" +string(4) "wou" +string(4) "wou" +Done diff --git a/Zend/tests/settype_array.phpt b/Zend/tests/settype_array.phpt Binary files differnew file mode 100644 index 000000000..5da023205 --- /dev/null +++ b/Zend/tests/settype_array.phpt diff --git a/Zend/tests/settype_bool.phpt b/Zend/tests/settype_bool.phpt new file mode 100644 index 000000000..cf59200b8 --- /dev/null +++ b/Zend/tests/settype_bool.phpt @@ -0,0 +1,53 @@ +--TEST-- +casting different variables to boolean using settype() +--FILE-- +<?php + +$r = fopen(__FILE__, "r"); + +class test { + function __toString() { + return "10"; + } +} + +$o = new test; + +$vars = array( + "string", + "8754456", + "", + "\0", + 9876545, + 0.10, + array(), + array(1,2,3), + false, + true, + NULL, + $r, + $o +); + +foreach ($vars as $var) { + settype($var, "bool"); + var_dump($var); +} + +echo "Done\n"; +?> +--EXPECTF-- +bool(true) +bool(true) +bool(false) +bool(true) +bool(true) +bool(true) +bool(false) +bool(true) +bool(false) +bool(true) +bool(false) +bool(true) +bool(true) +Done diff --git a/Zend/tests/settype_double.phpt b/Zend/tests/settype_double.phpt new file mode 100644 index 000000000..931a3d9df --- /dev/null +++ b/Zend/tests/settype_double.phpt @@ -0,0 +1,55 @@ +--TEST-- +casting different variables to double using settype() +--FILE-- +<?php + +$r = fopen(__FILE__, "r"); + +class test { + function __toString() { + return "10"; + } +} + +$o = new test; + +$vars = array( + "string", + "8754456", + "", + "\0", + 9876545, + 0.10, + array(), + array(1,2,3), + false, + true, + NULL, + $r, + $o +); + +foreach ($vars as $var) { + settype($var, "double"); + var_dump($var); +} + +echo "Done\n"; +?> +--EXPECTF-- +float(0) +float(8754456) +float(0) +float(0) +float(9876545) +float(0.1) +float(0) +float(1) +float(0) +float(1) +float(0) +float(%d) + +Notice: Object of class test could not be converted to double in %s on line %d +float(1) +Done diff --git a/Zend/tests/settype_int.phpt b/Zend/tests/settype_int.phpt new file mode 100644 index 000000000..7b96cd594 --- /dev/null +++ b/Zend/tests/settype_int.phpt @@ -0,0 +1,55 @@ +--TEST-- +casting different variables to integer using settype() +--FILE-- +<?php + +$r = fopen(__FILE__, "r"); + +class test { + function __toString() { + return "10"; + } +} + +$o = new test; + +$vars = array( + "string", + "8754456", + "", + "\0", + 9876545, + 0.10, + array(), + array(1,2,3), + false, + true, + NULL, + $r, + $o +); + +foreach ($vars as $var) { + settype($var, "int"); + var_dump($var); +} + +echo "Done\n"; +?> +--EXPECTF-- +int(0) +int(8754456) +int(0) +int(0) +int(9876545) +int(0) +int(0) +int(1) +int(0) +int(1) +int(0) +int(%d) + +Notice: Object of class test could not be converted to int in %s on line %d +int(1) +Done diff --git a/Zend/tests/settype_null.phpt b/Zend/tests/settype_null.phpt new file mode 100644 index 000000000..0abf2f981 --- /dev/null +++ b/Zend/tests/settype_null.phpt @@ -0,0 +1,53 @@ +--TEST-- +casting different variables to null using settype() +--FILE-- +<?php + +$r = fopen(__FILE__, "r"); + +class test { + function __toString() { + return "10"; + } +} + +$o = new test; + +$vars = array( + "string", + "8754456", + "", + "\0", + 9876545, + 0.10, + array(), + array(1,2,3), + false, + true, + NULL, + $r, + $o +); + +foreach ($vars as $var) { + settype($var, "null"); + var_dump($var); +} + +echo "Done\n"; +?> +--EXPECTF-- +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +Done diff --git a/Zend/tests/settype_object.phpt b/Zend/tests/settype_object.phpt Binary files differnew file mode 100644 index 000000000..d619dce7e --- /dev/null +++ b/Zend/tests/settype_object.phpt diff --git a/Zend/tests/settype_resource.phpt b/Zend/tests/settype_resource.phpt Binary files differnew file mode 100644 index 000000000..cc8cde34f --- /dev/null +++ b/Zend/tests/settype_resource.phpt diff --git a/Zend/tests/settype_string.phpt b/Zend/tests/settype_string.phpt Binary files differnew file mode 100644 index 000000000..d3beb54cb --- /dev/null +++ b/Zend/tests/settype_string.phpt diff --git a/Zend/tests/shift_001.phpt b/Zend/tests/shift_001.phpt new file mode 100644 index 000000000..aeb399452 --- /dev/null +++ b/Zend/tests/shift_001.phpt @@ -0,0 +1,25 @@ +--TEST-- +shifting strings left +--FILE-- +<?php + +$s = "123"; +$s1 = "test"; +$s2 = "45345some"; + +$s <<= 2; +var_dump($s); + +$s1 <<= 1; +var_dump($s1); + +$s2 <<= 3; +var_dump($s2); + +echo "Done\n"; +?> +--EXPECTF-- +int(492) +int(0) +int(362760) +Done diff --git a/Zend/tests/shift_002.phpt b/Zend/tests/shift_002.phpt new file mode 100644 index 000000000..4d8421a56 --- /dev/null +++ b/Zend/tests/shift_002.phpt @@ -0,0 +1,25 @@ +--TEST-- +shifting strings right +--FILE-- +<?php + +$s = "123"; +$s1 = "test"; +$s2 = "45345some"; + +$s >>= 2; +var_dump($s); + +$s1 >>= 1; +var_dump($s1); + +$s2 >>= 3; +var_dump($s2); + +echo "Done\n"; +?> +--EXPECTF-- +int(30) +int(0) +int(5668) +Done diff --git a/Zend/tests/sub_001.phpt b/Zend/tests/sub_001.phpt new file mode 100644 index 000000000..2a8b3cdff --- /dev/null +++ b/Zend/tests/sub_001.phpt @@ -0,0 +1,15 @@ +--TEST-- +subtracting arrays +--FILE-- +<?php + +$a = array(1,2,3); +$b = array(1); + +$c = $a - $b; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Unsupported operand types in %s on line %d diff --git a/Zend/tests/unset_cv08.phpt b/Zend/tests/unset_cv08.phpt index 04fff3d40..d5d52efdb 100644 --- a/Zend/tests/unset_cv08.phpt +++ b/Zend/tests/unset_cv08.phpt @@ -11,6 +11,5 @@ echo "ok\n"; ?>
--EXPECTF--
ok
-
-Notice: Undefined variable: b in %sunset_cv08.php on line %d
+ok
ok
diff --git a/Zend/tests/xor_001.phpt b/Zend/tests/xor_001.phpt new file mode 100644 index 000000000..e1a521dff --- /dev/null +++ b/Zend/tests/xor_001.phpt @@ -0,0 +1,16 @@ +--TEST-- +XORing arrays +--FILE-- +<?php + +$a = array(1,2,3); +$b = array(); + +$c = $a ^ $b; +var_dump($c); + +echo "Done\n"; +?> +--EXPECTF-- +int(1) +Done diff --git a/Zend/tests/xor_002.phpt b/Zend/tests/xor_002.phpt new file mode 100644 index 000000000..0cf4054fa --- /dev/null +++ b/Zend/tests/xor_002.phpt @@ -0,0 +1,39 @@ +--TEST-- +XORing strings +--FILE-- +<?php + +$s = "123"; +$s1 = "234"; +var_dump(bin2hex($s ^ $s1)); + +$s = "1235"; +$s1 = "234"; +var_dump(bin2hex($s ^ $s1)); + +$s = "some"; +$s1 = "test"; +var_dump(bin2hex($s ^ $s1)); + +$s = "some long"; +$s1 = "test"; +var_dump(bin2hex($s ^ $s1)); + +$s = "some"; +$s1 = "test long"; +var_dump(bin2hex($s ^ $s1)); + +$s = "some"; +$s ^= "test long"; +var_dump(bin2hex($s)); + +echo "Done\n"; +?> +--EXPECTF-- +string(6) "030107" +string(6) "030107" +string(8) "070a1e11" +string(8) "070a1e11" +string(8) "070a1e11" +string(8) "070a1e11" +Done diff --git a/Zend/tests/xor_003.phpt b/Zend/tests/xor_003.phpt new file mode 100644 index 000000000..8aa1c636b --- /dev/null +++ b/Zend/tests/xor_003.phpt @@ -0,0 +1,19 @@ +--TEST-- +XORing booleans +--FILE-- +<?php + +$t = true; +$f = false; + +var_dump($t ^ $f); +var_dump($t ^ $t); +var_dump($f ^ $f); + +echo "Done\n"; +?> +--EXPECTF-- +int(1) +int(0) +int(0) +Done diff --git a/Zend/zend.c b/Zend/zend.c index 985017594..a2cd84c37 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.c,v 1.308.2.12.2.22 2006/10/16 11:13:08 dmitry Exp $ */ +/* $Id: zend.c,v 1.308.2.12.2.34 2007/04/26 19:08:58 tony2001 Exp $ */ #include "zend.h" #include "zend_extensions.h" @@ -101,7 +101,7 @@ ZEND_API zval zval_used_for_init; /* True global variable */ /* version information */ static char *zend_version_info; static uint zend_version_info_length; -#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2006 Zend Technologies\n" +#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2007 Zend Technologies\n" #define PRINT_ZVAL_INDENT 4 @@ -131,9 +131,9 @@ static void print_hash(zend_write_func_t write_func, HashTable *ht, int indent, if (is_object) { char *prop_name, *class_name; - zend_unmangle_property_name(string_key, str_len-1, &class_name, &prop_name); + int mangled = zend_unmangle_property_name(string_key, str_len-1, &class_name, &prop_name); ZEND_PUTS_EX(prop_name); - if (class_name) { + if (class_name && mangled == SUCCESS) { if (class_name[0]=='*') { ZEND_PUTS_EX(":protected"); } else { @@ -147,7 +147,7 @@ static void print_hash(zend_write_func_t write_func, HashTable *ht, int indent, case HASH_KEY_IS_LONG: { char key[25]; - sprintf(key, "%ld", num_key); + snprintf(key, sizeof(key), "%ld", num_key); ZEND_PUTS_EX(key); } break; @@ -214,8 +214,7 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop } break; case IS_RESOURCE: - expr_copy->value.str.val = (char *) emalloc(sizeof("Resource id #")-1 + MAX_LENGTH_OF_LONG); - expr_copy->value.str.len = sprintf(expr_copy->value.str.val, "Resource id #%ld", expr->value.lval); + expr_copy->value.str.len = zend_spprintf(&expr_copy->value.str.val, 0, "Resource id #%ld", expr->value.lval); break; case IS_ARRAY: expr_copy->value.str.len = sizeof("Array")-1; @@ -426,13 +425,25 @@ static void register_standard_class(TSRMLS_D) zend_hash_add(CG(class_table), "stdclass", sizeof("stdclass"), &zend_standard_class_def, sizeof(zend_class_entry *), NULL); } +#ifdef ZTS +static zend_bool asp_tags_default = 0; +static zend_bool short_tags_default = 1; +static zend_bool ct_pass_ref_default = 1; +static zend_bool extended_info_default = 0; +#else +# define asp_tags_default 0 +# define short_tags_default 1 +# define ct_pass_ref_default 1 +# define extended_info_default 0 +#endif + static void zend_set_default_compile_time_values(TSRMLS_D) { /* default compile-time values */ - CG(asp_tags) = 0; - CG(short_tags) = 1; - CG(allow_call_time_pass_reference) = 1; - CG(extended_info) = 0; + CG(asp_tags) = asp_tags_default; + CG(short_tags) = short_tags_default; + CG(allow_call_time_pass_reference) = ct_pass_ref_default; + CG(extended_info) = extended_info_default; } @@ -522,8 +533,9 @@ static void executor_globals_dtor(zend_executor_globals *executor_globals TSRMLS static void zend_new_thread_end_handler(THREAD_T thread_id TSRMLS_DC) { - zend_copy_ini_directives(TSRMLS_C); - zend_ini_refresh_caches(ZEND_INI_STAGE_STARTUP TSRMLS_CC); + if (zend_copy_ini_directives(TSRMLS_C) == SUCCESS) { + zend_ini_refresh_caches(ZEND_INI_STAGE_STARTUP TSRMLS_CC); + } } #endif @@ -570,6 +582,7 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i fpsetmask(0); #endif + zend_startup_strtod(); zend_startup_extensions_mechanism(); /* Set up utility functions and values */ @@ -693,6 +706,12 @@ void zend_post_startup(TSRMLS_D) *GLOBAL_FUNCTION_TABLE = *compiler_globals->function_table; *GLOBAL_CLASS_TABLE = *compiler_globals->class_table; *GLOBAL_CONSTANTS_TABLE = *executor_globals->zend_constants; + + asp_tags_default = CG(asp_tags); + short_tags_default = CG(short_tags); + ct_pass_ref_default = CG(allow_call_time_pass_reference); + extended_info_default = CG(extended_info); + zend_destroy_rsrc_list(&EG(persistent_list) TSRMLS_CC); free(compiler_globals->function_table); free(compiler_globals->class_table); @@ -700,7 +719,7 @@ void zend_post_startup(TSRMLS_D) free(EG(zend_constants)); executor_globals_ctor(executor_globals, tsrm_ls); global_persistent_list = &EG(persistent_list); - zend_new_thread_end_handler(tsrm_thread_id() TSRMLS_CC); + zend_copy_ini_directives(TSRMLS_C); } #endif @@ -728,6 +747,7 @@ void zend_shutdown(TSRMLS_D) zend_hash_destroy(GLOBAL_CONSTANTS_TABLE); free(GLOBAL_CONSTANTS_TABLE); + zend_shutdown_strtod(); #ifdef ZTS GLOBAL_FUNCTION_TABLE = NULL; GLOBAL_CLASS_TABLE = NULL; @@ -897,6 +917,8 @@ ZEND_API void zend_error(int type, const char *format, ...) char *error_filename; uint error_lineno; zval *orig_user_error_handler; + zend_bool in_compilation; + zend_class_entry *saved_class_entry; TSRMLS_FETCH(); /* Obtain relevant filename and lineno */ @@ -1004,7 +1026,18 @@ ZEND_API void zend_error(int type, const char *format, ...) orig_user_error_handler = EG(user_error_handler); EG(user_error_handler) = NULL; - + + /* User error handler may include() additinal PHP files. + * If an error was generated during comilation PHP will compile + * such scripts recursivly, but some CG() variables may be + * inconsistent. */ + + in_compilation = zend_is_compiling(TSRMLS_C); + if (in_compilation) { + saved_class_entry = CG(active_class_entry); + CG(active_class_entry) = NULL; + } + if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC)==SUCCESS) { if (retval) { if (Z_TYPE_P(retval) == IS_BOOL && Z_LVAL_P(retval) == 0) { @@ -1017,6 +1050,10 @@ ZEND_API void zend_error(int type, const char *format, ...) zend_error_cb(type, error_filename, error_lineno, format, args); } + if (in_compilation) { + CG(active_class_entry) = saved_class_entry; + } + if (!EG(user_error_handler)) { EG(user_error_handler) = orig_user_error_handler; } @@ -1041,7 +1078,7 @@ ZEND_API void zend_error(int type, const char *format, ...) } } -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__) void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((alias("zend_error"),noreturn)); #endif @@ -1096,15 +1133,6 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co EG(return_value_ptr_ptr) = retval ? retval : &local_retval; zend_execute(EG(active_op_array) TSRMLS_CC); if (EG(exception)) { - char ex_class_name[128]; - - EG(opline_ptr) = NULL; - if (Z_TYPE_P(EG(exception)) == IS_OBJECT) { - strncpy(ex_class_name, Z_OBJ_CLASS_NAME_P(EG(exception)), 127); - ex_class_name[127] = '\0'; - } else { - strcpy(ex_class_name, "Unknown Exception"); - } if (EG(user_exception_handler)) { zval *orig_user_exception_handler; zval ***params, *retval2, *old_exception; @@ -1118,6 +1146,9 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co zval_ptr_dtor(&retval2); } } else { + if (!EG(exception)) { + EG(exception) = old_exception; + } zend_exception_error(EG(exception) TSRMLS_CC); } efree(params); @@ -1172,8 +1203,7 @@ ZEND_API char *zend_make_compiled_string_description(char *name TSRMLS_DC) cur_lineno = 0; } - compiled_string_description = emalloc(sizeof(COMPILED_STRING_DESCRIPTION_FORMAT)+strlen(name)+strlen(cur_filename)+MAX_LENGTH_OF_LONG); - sprintf(compiled_string_description, COMPILED_STRING_DESCRIPTION_FORMAT, cur_filename, cur_lineno, name); + zend_spprintf(&compiled_string_description, 0, COMPILED_STRING_DESCRIPTION_FORMAT, cur_filename, cur_lineno, name); return compiled_string_description; } diff --git a/Zend/zend.h b/Zend/zend.h index 5ca0845f9..15ebabd05 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.h,v 1.293.2.11.2.6 2006/09/14 10:32:45 dmitry Exp $ */ +/* $Id: zend.h,v 1.293.2.11.2.8 2007/04/26 19:08:58 tony2001 Exp $ */ #ifndef ZEND_H #define ZEND_H @@ -250,7 +250,7 @@ char *alloca (); #define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC #define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, return_value_ptr, this_ptr, return_value_used TSRMLS_CC -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__) # define ZEND_VM_ALWAYS_INLINE __attribute__ ((always_inline)) void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((noreturn)); #else diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 8381f1187..7d63ff37e 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_API.c,v 1.296.2.27.2.23 2006/10/03 11:10:32 dmitry Exp $ */ +/* $Id: zend_API.c,v 1.296.2.27.2.29 2007/04/30 19:54:41 johannes Exp $ */ #include "zend.h" #include "zend_execute.h" @@ -44,7 +44,7 @@ ZEND_API int zend_get_parameters(int ht, int param_count, ...) TSRMLS_FETCH(); p = EG(argument_stack).top_element-2; - arg_count = (ulong) *p; + arg_count = (int)(zend_uintptr_t) *p; if (param_count>arg_count) { return FAILURE; @@ -82,7 +82,7 @@ ZEND_API int _zend_get_parameters_array(int ht, int param_count, zval **argument zval *param_ptr; p = EG(argument_stack).top_element-2; - arg_count = (ulong) *p; + arg_count = (int)(zend_uintptr_t) *p; if (param_count>arg_count) { return FAILURE; @@ -122,7 +122,7 @@ ZEND_API int zend_get_parameters_ex(int param_count, ...) TSRMLS_FETCH(); p = EG(argument_stack).top_element-2; - arg_count = (ulong) *p; + arg_count = (int)(zend_uintptr_t) *p; if (param_count>arg_count) { return FAILURE; @@ -145,7 +145,7 @@ ZEND_API int _zend_get_parameters_array_ex(int param_count, zval ***argument_arr int arg_count; p = EG(argument_stack).top_element-2; - arg_count = (ulong) *p; + arg_count = (int)(zend_uintptr_t) *p; if (param_count>arg_count) { return FAILURE; @@ -187,7 +187,7 @@ ZEND_API int zend_copy_parameters_array(int param_count, zval *argument_array TS int arg_count; p = EG(argument_stack).top_element-2; - arg_count = (ulong) *p; + arg_count = (int)(zend_uintptr_t) *p; if (param_count>arg_count) { return FAILURE; @@ -698,7 +698,7 @@ static int zend_parse_va_args(int num_args, char *type_spec, va_list *va, int fl } p = EG(argument_stack).top_element-2; - arg_count = (ulong) *p; + arg_count = (int)(zend_uintptr_t) *p; if (num_args > arg_count) { zend_error(E_WARNING, "%s(): could not obtain parameters for parsing", @@ -878,7 +878,7 @@ ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC zend_update_class_constants(class_type->parent TSRMLS_CC); } #if ZTS - ALLOC_HASHTABLE(CG(static_members)[(long)(class_type->static_members)]); + ALLOC_HASHTABLE(CG(static_members)[(zend_intptr_t)(class_type->static_members)]); #else ALLOC_HASHTABLE(class_type->static_members); #endif @@ -2095,18 +2095,17 @@ static zend_function_entry disabled_class_new[] = { ZEND_API int zend_disable_class(char *class_name, uint class_name_length TSRMLS_DC) { - zend_class_entry *disabled_class; - disabled_class = (zend_class_entry *) emalloc(sizeof(zend_class_entry)); + zend_class_entry disabled_class; zend_str_tolower(class_name, class_name_length); if (zend_hash_del(CG(class_table), class_name, class_name_length+1)==FAILURE) { return FAILURE; } - INIT_CLASS_ENTRY((*disabled_class), class_name, disabled_class_new); - disabled_class->create_object = display_disabled_class; - disabled_class->name_length = class_name_length; - zend_register_internal_class(disabled_class TSRMLS_CC); - return 1; + INIT_CLASS_ENTRY(disabled_class, class_name, disabled_class_new); + disabled_class.create_object = display_disabled_class; + disabled_class.name_length = class_name_length; + zend_register_internal_class(&disabled_class TSRMLS_CC); + return SUCCESS; } static int zend_is_callable_check_func(int check_flags, zval ***zobj_ptr_ptr, zend_class_entry *ce_org, zval *callable, zend_class_entry **ce_ptr, zend_function **fptr_ptr TSRMLS_DC) @@ -2263,9 +2262,9 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, uint check_flags, char ** } lcname = zend_str_tolower_dup(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj)); - if (Z_STRLEN_PP(obj) == sizeof("self") - 1 && memcmp(lcname, "self", sizeof("self")) == 0) { + if (Z_STRLEN_PP(obj) == sizeof("self") - 1 && memcmp(lcname, "self", sizeof("self")) == 0 && EG(active_op_array)) { ce = EG(active_op_array)->scope; - } else if (Z_STRLEN_PP(obj) == sizeof("parent") - 1 && memcmp(lcname, "parent", sizeof("parent")) == 0 && EG(active_op_array)->scope) { + } else if (Z_STRLEN_PP(obj) == sizeof("parent") - 1 && memcmp(lcname, "parent", sizeof("parent")) == 0 && EG(active_op_array) && EG(active_op_array)->scope) { ce = EG(active_op_array)->scope->parent; } else if (zend_lookup_class(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj), &pce TSRMLS_CC) == SUCCESS) { ce = *pce; @@ -2362,35 +2361,64 @@ ZEND_API int zend_fcall_info_init(zval *callable, zend_fcall_info *fci, zend_fca fci->size = sizeof(*fci); fci->function_table = ce ? &ce->function_table : EG(function_table); fci->object_pp = obj; - fci->function_name = NULL; + fci->function_name = callable; fci->retval_ptr_ptr = NULL; fci->param_count = 0; fci->params = NULL; fci->no_separation = 1; fci->symbol_table = NULL; - fcc->initialized = 1; - fcc->function_handler = func; - fcc->calling_scope = ce; - fcc->object_pp = obj; + if (strlen(func->common.function_name) == sizeof(ZEND_CALL_FUNC_NAME) - 1 && !memcmp(func->common.function_name, ZEND_CALL_FUNC_NAME, sizeof(ZEND_CALL_FUNC_NAME))) { + fcc->initialized = 0; + fcc->function_handler = NULL; + fcc->calling_scope = NULL; + fcc->object_pp = NULL; + } else { + fcc->initialized = 1; + fcc->function_handler = func; + fcc->calling_scope = ce; + fcc->object_pp = obj; + } return SUCCESS; } -ZEND_API int zend_fcall_info_args(zend_fcall_info *fci, zval *args TSRMLS_DC) +ZEND_API void zend_fcall_info_args_clear(zend_fcall_info *fci, int free_mem) { - HashPosition pos; - zval **arg, ***params; - if (fci->params) { while (fci->param_count) { zval_ptr_dtor(fci->params[--fci->param_count]); } - efree(fci->params); + if (free_mem) { + efree(fci->params); + fci->params = NULL; + } } - fci->params = NULL; fci->param_count = 0; +} + +ZEND_API void zend_fcall_info_args_save(zend_fcall_info *fci, int *param_count, zval ****params) +{ + *param_count = fci->param_count; + *params = fci->params; + fci->param_count = 0; + fci->params = NULL; +} + +ZEND_API void zend_fcall_info_args_restore(zend_fcall_info *fci, int param_count, zval ***params) +{ + zend_fcall_info_args_clear(fci, 1); + fci->param_count = param_count; + fci->params = params; +} + +ZEND_API int zend_fcall_info_args(zend_fcall_info *fci, zval *args TSRMLS_DC) +{ + HashPosition pos; + zval **arg, ***params; + + zend_fcall_info_args_clear(fci, !args); if (!args) { return SUCCESS; @@ -2404,7 +2432,6 @@ ZEND_API int zend_fcall_info_args(zend_fcall_info *fci, zval *args TSRMLS_DC) fci->params = params = (zval***)safe_emalloc(sizeof(zval**), fci->param_count, 0); zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(args), &pos); - while (zend_hash_get_current_data_ex(Z_ARRVAL_P(args), (void **) &arg, &pos) == SUCCESS) { *params++ = arg; (*arg)->refcount++; @@ -2421,8 +2448,7 @@ ZEND_API int zend_fcall_info_call(zend_fcall_info *fci, zend_fcall_info_cache *f fci->retval_ptr_ptr = retval_ptr_ptr ? retval_ptr_ptr : &retval; if (args) { - org_params = fci->params; - org_count = fci->param_count; + zend_fcall_info_args_save(fci, &org_count, &org_params); zend_fcall_info_args(fci, args TSRMLS_CC); } result = zend_call_function(fci, fcc TSRMLS_CC); @@ -2431,9 +2457,7 @@ ZEND_API int zend_fcall_info_call(zend_fcall_info *fci, zend_fcall_info_cache *f zval_ptr_dtor(&retval); } if (args) { - zend_fcall_info_args(fci, NULL TSRMLS_CC); - fci->params = org_params; - fci->param_count = org_count; + zend_fcall_info_args_restore(fci, org_count, org_params); } return result; } diff --git a/Zend/zend_API.h b/Zend/zend_API.h index ac8692e9d..713889ead 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_API.h,v 1.207.2.8.2.5 2006/07/18 09:06:32 dmitry Exp $ */ +/* $Id: zend_API.h,v 1.207.2.8.2.8 2007/04/16 08:09:54 dmitry Exp $ */ #ifndef ZEND_API_H #define ZEND_API_H @@ -48,6 +48,9 @@ typedef struct _zend_function_entry { #define ZEND_FENTRY(zend_name, name, arg_info, flags) { #zend_name, name, arg_info, (zend_uint) (sizeof(arg_info)/sizeof(struct _zend_arg_info)-1), flags }, +#define ZEND_RAW_FENTRY(zend_name, name, arg_info, flags) { zend_name, name, arg_info, (zend_uint) (sizeof(arg_info)/sizeof(struct _zend_arg_info)-1), flags }, +#define ZEND_RAW_NAMED_FE(zend_name, name, arg_info) ZEND_RAW_FENTRY(#zend_name, name, arg_info, 0) + #define ZEND_NAMED_FE(zend_name, name, arg_info) ZEND_FENTRY(zend_name, name, arg_info, 0) #define ZEND_FE(name, arg_info) ZEND_FENTRY(name, ZEND_FN(name), arg_info, 0) #define ZEND_DEP_FE(name, arg_info) ZEND_FENTRY(name, ZEND_FN(name), arg_info, ZEND_ACC_DEPRECATED) @@ -157,7 +160,7 @@ typedef struct _zend_function_entry { INIT_OVERLOADED_CLASS_ENTRY_EX(class_container, class_name, functions, handle_fcall, handle_propget, handle_propset, NULL, NULL) #ifdef ZTS -# define CE_STATIC_MEMBERS(ce) (((ce)->type==ZEND_USER_CLASS)?(ce)->static_members:CG(static_members)[(long)(ce)->static_members]) +# define CE_STATIC_MEMBERS(ce) (((ce)->type==ZEND_USER_CLASS)?(ce)->static_members:CG(static_members)[(zend_intptr_t)(ce)->static_members]) #else # define CE_STATIC_MEMBERS(ce) ((ce)->static_members) #endif diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 8873daeb1..ce6b06bdc 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -14,11 +14,11 @@ +----------------------------------------------------------------------+ | Authors: Andi Gutmans <andi@zend.com> | | Zeev Suraski <zeev@zend.com> | - | Dmitry Sogov <dmitry@zend.com> | + | Dmitry Stogov <dmitry@zend.com> | +----------------------------------------------------------------------+ */ -/* $Id: zend_alloc.c,v 1.144.2.3.2.12 2006/10/12 06:46:51 dmitry Exp $ */ +/* $Id: zend_alloc.c,v 1.144.2.3.2.41 2007/04/16 08:09:54 dmitry Exp $ */ #include "zend.h" #include "zend_alloc.h" @@ -32,8 +32,32 @@ # include <unistd.h> #endif -#ifndef ZEND_USE_MALLOC_MM -# define ZEND_USE_MALLOC_MM ZEND_DEBUG +#ifdef ZEND_WIN32 +# define _WIN32_WINNT 0x0400 +# include <wincrypt.h> +# include <process.h> +#endif + +#ifndef ZEND_MM_HEAP_PROTECTION +# define ZEND_MM_HEAP_PROTECTION ZEND_DEBUG +#endif + +#ifndef ZEND_MM_SAFE_UNLINKING +# define ZEND_MM_SAFE_UNLINKING 1 +#endif + +#ifndef ZEND_MM_COOKIES +# define ZEND_MM_COOKIES ZEND_DEBUG +#endif + +#ifdef _WIN64 +# define PTR_FMT "0x%0.16I64x" +/* +#elif sizeof(long) == 8 +# define PTR_FMT "0x%0.16lx" +*/ +#else +# define PTR_FMT "0x%0.8lx" #endif #if ZEND_DEBUG @@ -54,14 +78,22 @@ void zend_debug_alloc_output(char *format, ...) } #endif +#if (defined (__GNUC__) && __GNUC__ > 2 ) && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) +# define EXPECTED(condition) __builtin_expect(condition, 1) +# define UNEXPECTED(condition) __builtin_expect(condition, 0) +static void zend_mm_panic(const char *message) __attribute__ ((noreturn)); +#else +# define EXPECTED(condition) (condition) +# define UNEXPECTED(condition) (condition) +#endif + static void zend_mm_panic(const char *message) { fprintf(stderr, "%s\n", message); #if ZEND_DEBUG && defined(HAVE_KILL) && defined(HAVE_GETPID) kill(getpid(), SIGSEGV); -#else - exit(1); #endif + exit(1); } /*******************/ @@ -82,6 +114,10 @@ static void zend_mm_panic(const char *message) #include <errno.h> #if defined(HAVE_MEM_MMAP_ANON) || defined(HAVE_MEM_MMAP_ZERO) +# ifdef HAVE_MREMAP +# define _GNU_SOURCE +# define __USE_GNU +# endif # include <sys/mman.h> # ifndef MAP_ANON # ifdef MAP_ANONYMOUS @@ -185,35 +221,41 @@ static zend_mm_segment* zend_mm_mem_mmap_zero_alloc(zend_mm_storage *storage, si #ifdef HAVE_MEM_WIN32 +static zend_mm_storage* zend_mm_mem_win32_init(void *params) +{ + HANDLE heap = HeapCreate(HEAP_NO_SERIALIZE, 0, 0); + zend_mm_storage* storage; + + if (heap == NULL) { + return NULL; + } + storage = (zend_mm_storage*)malloc(sizeof(zend_mm_storage)); + storage->data = (void*) heap; + return storage; +} + +static void zend_mm_mem_win32_dtor(zend_mm_storage *storage) +{ + HeapDestroy((HANDLE)storage->data); + free(storage); +} + static zend_mm_segment* zend_mm_mem_win32_alloc(zend_mm_storage *storage, size_t size) { - return (zend_mm_segment*) VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); + return (zend_mm_segment*) HeapAlloc((HANDLE)storage->data, HEAP_NO_SERIALIZE, size); } static void zend_mm_mem_win32_free(zend_mm_storage *storage, zend_mm_segment* segment) { - VirtualFree(segment, segment->size, MEM_RELEASE); + HeapFree((HANDLE)storage->data, HEAP_NO_SERIALIZE, segment); } static zend_mm_segment* zend_mm_mem_win32_realloc(zend_mm_storage *storage, zend_mm_segment* segment, size_t size) { - if (size < segment->size) { - VirtualFree((char*)segment + size, segment->size - size, MEM_RELEASE); - } else if (size > segment->size) { - if (!VirtualAlloc((char*)segment + segment->size, size - segment->size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE)) { - zend_mm_segment *ret = zend_mm_mem_win32_alloc(storage, size); - - if (ret) { - memcpy(ret, segment, size > segment->size ? segment->size : size); - zend_mm_mem_win32_free(storage, segment); - } - segment = ret; - } - } - return segment; + return (zend_mm_segment*) HeapReAlloc((HANDLE)storage->data, HEAP_NO_SERIALIZE, segment, size); } -# define ZEND_MM_MEM_WIN32_DSC {"win32", zend_mm_mem_dummy_init, zend_mm_mem_dummy_dtor, zend_mm_mem_win32_alloc, zend_mm_mem_win32_realloc, zend_mm_mem_win32_free} +# define ZEND_MM_MEM_WIN32_DSC {"win32", zend_mm_mem_win32_init, zend_mm_mem_win32_dtor, zend_mm_mem_win32_alloc, zend_mm_mem_win32_realloc, zend_mm_mem_win32_free} #endif @@ -239,6 +281,9 @@ static void zend_mm_mem_malloc_free(zend_mm_storage *storage, zend_mm_segment *p #endif static const zend_mm_mem_handlers mem_handlers[] = { +#ifdef HAVE_MEM_WIN32 + ZEND_MM_MEM_WIN32_DSC, +#endif #ifdef HAVE_MEM_MALLOC ZEND_MM_MEM_MALLOC_DSC, #endif @@ -248,9 +293,6 @@ static const zend_mm_mem_handlers mem_handlers[] = { #ifdef HAVE_MEM_MMAP_ZERO ZEND_MM_MEM_MMAP_ZERO_DSC, #endif -#ifdef HAVE_MEM_WIN32 - ZEND_MM_MEM_WIN32_DSC, -#endif {NULL, NULL, NULL, NULL, NULL, NULL} }; @@ -263,86 +305,175 @@ static const zend_mm_mem_handlers mem_handlers[] = { /* Heap Manager */ /****************/ -typedef enum _mem_magic { - MEM_BLOCK_VALID = 0x7312F8DC, - MEM_BLOCK_FREED = 0x99954317, - MEM_BLOCK_CACHED = 0xFB8277DC, - MEM_BLOCK_GUARD = 0x2A8FCC84, - MEM_BLOCK_LEAK = 0x6C5E8F2D -} mem_magic; +#define MEM_BLOCK_VALID 0x7312F8DC +#define MEM_BLOCK_FREED 0x99954317 +#define MEM_BLOCK_CACHED 0xFB8277DC +#define MEM_BLOCK_GUARD 0x2A8FCC84 +#define MEM_BLOCK_LEAK 0x6C5E8F2D /* mm block type */ typedef struct _zend_mm_block_info { +#if ZEND_MM_COOKIES + size_t _cookie; +#endif size_t _size; size_t _prev; } zend_mm_block_info; +#if ZEND_DEBUG + typedef struct _zend_mm_debug_info { char *filename; uint lineno; char *orig_filename; uint orig_lineno; size_t size; +#if ZEND_MM_HEAP_PROTECTION + unsigned int start_magic; +#endif +} zend_mm_debug_info; + +#elif ZEND_MM_HEAP_PROTECTION + +typedef struct _zend_mm_debug_info { + size_t size; + unsigned int start_magic; } zend_mm_debug_info; +#endif + typedef struct _zend_mm_block { zend_mm_block_info info; #if ZEND_DEBUG - mem_magic magic; - zend_mm_debug_info debug; + unsigned int magic; # ifdef ZTS THREAD_T thread_id; # endif + zend_mm_debug_info debug; +#elif ZEND_MM_HEAP_PROTECTION + zend_mm_debug_info debug; #endif } zend_mm_block; +typedef struct _zend_mm_small_free_block { + zend_mm_block_info info; +#if ZEND_DEBUG + unsigned int magic; +# ifdef ZTS + THREAD_T thread_id; +# endif +#endif + struct _zend_mm_free_block *prev_free_block; + struct _zend_mm_free_block *next_free_block; +} zend_mm_small_free_block; + typedef struct _zend_mm_free_block { zend_mm_block_info info; #if ZEND_DEBUG - mem_magic magic; + unsigned int magic; +# ifdef ZTS + THREAD_T thread_id; +# endif #endif struct _zend_mm_free_block *prev_free_block; struct _zend_mm_free_block *next_free_block; + + struct _zend_mm_free_block **parent; + struct _zend_mm_free_block *child[2]; } zend_mm_free_block; -#define ZEND_MM_NUM_BUCKETS 32 +#define ZEND_MM_NUM_BUCKETS (sizeof(size_t) << 3) #define ZEND_MM_CACHE 1 -#define ZEND_MM_CACHE_SIZE (32*1024) +#define ZEND_MM_CACHE_SIZE (ZEND_MM_NUM_BUCKETS * 2 * 1024) + +#ifndef ZEND_MM_CACHE_STAT +# define ZEND_MM_CACHE_STAT 0 +#endif struct _zend_mm_heap { - unsigned int free_bitmap; + int use_zend_alloc; + size_t free_bitmap; + size_t large_free_bitmap; size_t block_size; zend_mm_segment *segments_list; zend_mm_storage *storage; size_t real_size; -#if MEMORY_LIMIT size_t real_peak; size_t limit; size_t size; size_t peak; -#endif -#if ZEND_USE_MALLOC_MM - int use_zend_alloc; -#endif - int overflow; + size_t reserve_size; + void *reserve; + int overflow; + int internal; #if ZEND_MM_CACHE unsigned int cached; zend_mm_free_block *cache[ZEND_MM_NUM_BUCKETS]; #endif - zend_mm_free_block free_buckets[ZEND_MM_NUM_BUCKETS]; + zend_mm_free_block *free_buckets[ZEND_MM_NUM_BUCKETS*2]; + zend_mm_free_block *large_free_buckets[ZEND_MM_NUM_BUCKETS]; + zend_mm_free_block *rest_buckets[2]; +#if ZEND_MM_CACHE_STAT + struct { + int count; + int max_count; + int hit; + int miss; + } cache_stat[ZEND_MM_NUM_BUCKETS+1]; +#endif }; -#define ZEND_MM_TYPE_MASK 0x3L +#define ZEND_MM_SMALL_FREE_BUCKET(heap, index) \ + (zend_mm_free_block*) ((char*)&heap->free_buckets[index * 2] + \ + sizeof(zend_mm_free_block*) * 2 - \ + sizeof(zend_mm_small_free_block)) + +#define ZEND_MM_REST_BUCKET(heap) \ + (zend_mm_free_block*)((char*)&heap->rest_buckets[0] + \ + sizeof(zend_mm_free_block*) * 2 - \ + sizeof(zend_mm_small_free_block)) + +#if ZEND_MM_COOKIES + +static unsigned int _zend_mm_cookie = 0; + +# define ZEND_MM_COOKIE(block) \ + (((size_t)(block)) ^ _zend_mm_cookie) +# define ZEND_MM_SET_COOKIE(block) \ + (block)->info._cookie = ZEND_MM_COOKIE(block) +# define ZEND_MM_CHECK_COOKIE(block) \ + if (UNEXPECTED((block)->info._cookie != ZEND_MM_COOKIE(block))) { \ + zend_mm_panic("zend_mm_heap corrupted"); \ + } +#else +# define ZEND_MM_SET_COOKIE(block) +# define ZEND_MM_CHECK_COOKIE(block) +#endif + +/* Default memory segment size */ +#define ZEND_MM_SEG_SIZE (256 * 1024) + +/* Reserved space for error reporting in case of memory overflow */ +#define ZEND_MM_RESERVE_SIZE (8*1024) + +#ifdef _WIN64 +# define ZEND_MM_LONG_CONST(x) (x##i64) +#else +# define ZEND_MM_LONG_CONST(x) (x##L) +#endif + +#define ZEND_MM_TYPE_MASK ZEND_MM_LONG_CONST(0x3) -#define ZEND_MM_FREE_BLOCK 0x0L -#define ZEND_MM_USED_BLOCK 0x1L -#define ZEND_MM_GUARD_BLOCK 0x3L +#define ZEND_MM_FREE_BLOCK ZEND_MM_LONG_CONST(0x0) +#define ZEND_MM_USED_BLOCK ZEND_MM_LONG_CONST(0x1) +#define ZEND_MM_GUARD_BLOCK ZEND_MM_LONG_CONST(0x3) #define ZEND_MM_BLOCK(b, type, size) do { \ size_t _size = (size); \ (b)->info._size = (type) | _size; \ ZEND_MM_BLOCK_AT(b, _size)->info._prev = (type) | _size; \ + ZEND_MM_SET_COOKIE(b); \ } while (0); #define ZEND_MM_LAST_BLOCK(b) do { \ (b)->info._size = ZEND_MM_GUARD_BLOCK | ZEND_MM_ALIGNED_HEADER_SIZE; \ @@ -367,6 +498,11 @@ struct _zend_mm_heap { #ifndef ZEND_MM_ALIGNMENT # define ZEND_MM_ALIGNMENT 8 # define ZEND_MM_ALIGNMENT_LOG2 3 +#elif ZEND_MM_ALIGNMENT < 4 +# undef ZEND_MM_ALIGNMENT +# undef ZEND_MM_ALIGNMENT_LOG2 +# define ZEND_MM_ALIGNMENT 4 +# define ZEND_MM_ALIGNMENT_LOG2 2 #endif #define ZEND_MM_ALIGNMENT_MASK ~(ZEND_MM_ALIGNMENT-1) @@ -374,17 +510,18 @@ struct _zend_mm_heap { /* Aligned header size */ #define ZEND_MM_ALIGNED_SIZE(size) ((size + ZEND_MM_ALIGNMENT - 1) & ZEND_MM_ALIGNMENT_MASK) #define ZEND_MM_ALIGNED_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_block)) -#define ZEND_MM_ALIGNED_FREE_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_free_block)) -#define ZEND_MM_ALIGNED_MIN_HEADER_SIZE (sizeof(zend_mm_block)+END_MAGIC_SIZE>sizeof(zend_mm_free_block)?ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_block)+END_MAGIC_SIZE):ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_free_block))) +#define ZEND_MM_ALIGNED_FREE_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_small_free_block)) +#define ZEND_MM_MIN_ALLOC_BLOCK_SIZE ZEND_MM_ALIGNED_SIZE(ZEND_MM_ALIGNED_HEADER_SIZE + END_MAGIC_SIZE) +#define ZEND_MM_ALIGNED_MIN_HEADER_SIZE (ZEND_MM_MIN_ALLOC_BLOCK_SIZE>ZEND_MM_ALIGNED_FREE_HEADER_SIZE?ZEND_MM_MIN_ALLOC_BLOCK_SIZE:ZEND_MM_ALIGNED_FREE_HEADER_SIZE) #define ZEND_MM_ALIGNED_SEGMENT_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_segment)) -#define ZEND_MM_MIN_SIZE (ZEND_MM_ALIGNED_MIN_HEADER_SIZE-(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE)) +#define ZEND_MM_MIN_SIZE ((ZEND_MM_ALIGNED_MIN_HEADER_SIZE>(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE))?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE-(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE)):0) -#define ZEND_MM_MAX_SMALL_SIZE (((ZEND_MM_NUM_BUCKETS-1)<<ZEND_MM_ALIGNMENT_LOG2)+ZEND_MM_ALIGNED_MIN_HEADER_SIZE) +#define ZEND_MM_MAX_SMALL_SIZE ((ZEND_MM_NUM_BUCKETS<<ZEND_MM_ALIGNMENT_LOG2)+ZEND_MM_ALIGNED_MIN_HEADER_SIZE) -#define ZEND_MM_TRUE_SIZE(size) (((long)size<(long)ZEND_MM_MIN_SIZE)?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE):(ZEND_MM_ALIGNED_SIZE(size+ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE))) +#define ZEND_MM_TRUE_SIZE(size) ((size<ZEND_MM_MIN_SIZE)?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE):(ZEND_MM_ALIGNED_SIZE(size+ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE))) -#define ZEND_MM_BUCKET_INDEX(true_size) ((true_size>>ZEND_MM_ALIGNMENT_LOG2)-(ZEND_MM_ALIGNED_MIN_HEADER_SIZE>>ZEND_MM_ALIGNMENT_LOG2)+1) +#define ZEND_MM_BUCKET_INDEX(true_size) ((true_size>>ZEND_MM_ALIGNMENT_LOG2)-(ZEND_MM_ALIGNED_MIN_HEADER_SIZE>>ZEND_MM_ALIGNMENT_LOG2)) #define ZEND_MM_SMALL_SIZE(true_size) (true_size < ZEND_MM_MAX_SMALL_SIZE) @@ -397,8 +534,11 @@ struct _zend_mm_heap { #if ZEND_DEBUG # ifdef ZTS +# define ZEND_MM_SET_THREAD_ID(block) \ + ((zend_mm_block*)(block))->thread_id = tsrm_thread_id() # define ZEND_MM_BAD_THREAD_ID(block) ((block)->thread_id != tsrm_thread_id()) # else +# define ZEND_MM_SET_THREAD_ID(block) # define ZEND_MM_BAD_THREAD_ID(block) 0 # endif @@ -411,116 +551,329 @@ struct _zend_mm_heap { # define ZEND_MM_CHECK_MAGIC(block, val) do { \ if ((block)->magic != (val)) { \ - zend_mm_panic("Heap corrupted"); \ + zend_mm_panic("zend_mm_heap corrupted"); \ + } \ + } while (0) + +# define ZEND_MM_SET_DEBUG_INFO(block, __size, set_valid, set_thread) do { \ + ((zend_mm_block*)(block))->debug.filename = __zend_filename; \ + ((zend_mm_block*)(block))->debug.lineno = __zend_lineno; \ + ((zend_mm_block*)(block))->debug.orig_filename = __zend_orig_filename; \ + ((zend_mm_block*)(block))->debug.orig_lineno = __zend_orig_lineno; \ + ZEND_MM_SET_BLOCK_SIZE(block, __size); \ + if (set_valid) { \ + ZEND_MM_SET_MAGIC(block, MEM_BLOCK_VALID); \ + } \ + if (set_thread) { \ + ZEND_MM_SET_THREAD_ID(block); \ + } \ + } while (0) + +#else + +# define ZEND_MM_VALID_PTR(ptr) EXPECTED(ptr != NULL) + +# define ZEND_MM_SET_MAGIC(block, val) + +# define ZEND_MM_CHECK_MAGIC(block, val) + +# define ZEND_MM_SET_DEBUG_INFO(block, __size, set_valid, set_thread) ZEND_MM_SET_BLOCK_SIZE(block, __size) + +#endif + + +#if ZEND_MM_HEAP_PROTECTION + +# define ZEND_MM_CHECK_PROTECTION(block) \ + do { \ + if ((block)->debug.start_magic != _mem_block_start_magic || \ + memcmp(ZEND_MM_END_MAGIC_PTR(block), &_mem_block_end_magic, END_MAGIC_SIZE) != 0) { \ + zend_mm_panic("zend_mm_heap corrupted"); \ } \ } while (0) # define ZEND_MM_END_MAGIC_PTR(block) \ - (long*)(((char*)(ZEND_MM_DATA_OF(block))) + ((zend_mm_block*)(block))->debug.size) + (((char*)(ZEND_MM_DATA_OF(block))) + ((zend_mm_block*)(block))->debug.size) -# define ZEND_MM_SET_END_MAGIC(block) do { \ - long *p = ZEND_MM_END_MAGIC_PTR(block); \ +# define END_MAGIC_SIZE sizeof(unsigned int) + +# define ZEND_MM_SET_BLOCK_SIZE(block, __size) do { \ + char *p; \ + ((zend_mm_block*)(block))->debug.size = (__size); \ + p = ZEND_MM_END_MAGIC_PTR(block); \ + ((zend_mm_block*)(block))->debug.start_magic = _mem_block_start_magic; \ memcpy(p, &_mem_block_end_magic, END_MAGIC_SIZE); \ } while (0) -# define MEM_BLOCK_END_MAGIC 0x2A8FCC84L +static unsigned int _mem_block_start_magic = 0; +static unsigned int _mem_block_end_magic = 0; -# define END_MAGIC_SIZE sizeof(long) +#else -static long _mem_block_end_magic = MEM_BLOCK_END_MAGIC; +# if ZEND_DEBUG +# define ZEND_MM_SET_BLOCK_SIZE(block, _size) \ + ((zend_mm_block*)(block))->debug.size = (_size) +# else +# define ZEND_MM_SET_BLOCK_SIZE(block, _size) +# endif +# define ZEND_MM_CHECK_PROTECTION(block) + +# define END_MAGIC_SIZE 0 + +#endif + +#if ZEND_MM_SAFE_UNLINKING +# define ZEND_MM_CHECK_BLOCK_LINKAGE(block) \ + if (UNEXPECTED((block)->info._size != ZEND_MM_BLOCK_AT(block, ZEND_MM_FREE_BLOCK_SIZE(block))->info._prev) || \ + UNEXPECTED(!UNEXPECTED(ZEND_MM_IS_FIRST_BLOCK(block)) && \ + UNEXPECTED(ZEND_MM_PREV_BLOCK(block)->info._size != (block)->info._prev))) { \ + zend_mm_panic("zend_mm_heap corrupted"); \ + } +#define ZEND_MM_CHECK_TREE(block) \ + if (UNEXPECTED(*((block)->parent) != (block))) { \ + zend_mm_panic("zend_mm_heap corrupted"); \ + } #else +# define ZEND_MM_CHECK_BLOCK_LINKAGE(block) +# define ZEND_MM_CHECK_TREE(block) +#endif -# define ZEND_MM_VALID_PTR(ptr) 1 +#define ZEND_MM_LARGE_BUCKET_INDEX(S) zend_mm_high_bit(S) -# define ZEND_MM_SET_MAGIC(block, val) +static void *_zend_mm_alloc_int(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC; +static void _zend_mm_free_int(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +static void *_zend_mm_realloc_int(zend_mm_heap *heap, void *p, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); -# define ZEND_MM_SET_END_MAGIC(block) +static inline unsigned int zend_mm_high_bit(size_t _size) +{ +#if defined(__GNUC__) && defined(i386) + unsigned int n; -# define ZEND_MM_CHECK_MAGIC(block, val) + __asm__("bsrl %1,%0\n\t" : "=r" (n) : "rm" (_size)); + return n; +#elif defined(_MSC_VER) && defined(_M_IX86) + __asm { + bsr eax, _size + } +#else + unsigned int n = 0; + while (_size != 0) { + _size = _size >> 1; + n++; + } + return n-1; +#endif +} -# define END_MAGIC_SIZE 0 +static inline unsigned int zend_mm_low_bit(size_t _size) +{ +#if defined(__GNUC__) && defined(i386) + unsigned int n; + + __asm__("bsfl %1,%0\n\t" : "=r" (n) : "rm" (_size)); + return n; +#elif defined(_MSC_VER) && defined(_M_IX86) + __asm { + bsf eax, _size + } +#else + static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}; + unsigned int n; + unsigned int index = 0; + do { + n = offset[_size & 15]; + _size >>= 4; + index += n; + } while (n == 4); + return index; #endif +} -static inline void zend_mm_add_to_free_list(zend_mm_heap *heap, zend_mm_free_block *mm_block) +static inline void zend_mm_add_to_rest_list(zend_mm_heap *heap, zend_mm_free_block *mm_block) { zend_mm_free_block *prev, *next; + + ZEND_MM_SET_MAGIC(mm_block, MEM_BLOCK_FREED); + + if (!ZEND_MM_SMALL_SIZE(ZEND_MM_FREE_BLOCK_SIZE(mm_block))) { + mm_block->parent = NULL; + } + + prev = heap->rest_buckets[0]; + next = prev->next_free_block; + mm_block->prev_free_block = prev; + mm_block->next_free_block = next; + prev->next_free_block = next->prev_free_block = mm_block; +} + +static inline void zend_mm_add_to_free_list(zend_mm_heap *heap, zend_mm_free_block *mm_block) +{ size_t size; + size_t index; ZEND_MM_SET_MAGIC(mm_block, MEM_BLOCK_FREED); size = ZEND_MM_FREE_BLOCK_SIZE(mm_block); - if (ZEND_MM_SMALL_SIZE(size)) { - size_t index = ZEND_MM_BUCKET_INDEX(size); - prev = &heap->free_buckets[index]; + if (EXPECTED(!ZEND_MM_SMALL_SIZE(size))) { + zend_mm_free_block **p; + + index = ZEND_MM_LARGE_BUCKET_INDEX(size); + p = &heap->large_free_buckets[index]; + mm_block->child[0] = mm_block->child[1] = NULL; + if (!*p) { + *p = mm_block; + mm_block->parent = p; + mm_block->prev_free_block = mm_block->next_free_block = mm_block; + heap->large_free_bitmap |= (ZEND_MM_LONG_CONST(1) << index); + } else { + size_t m; - if (prev->prev_free_block == prev) { - heap->free_bitmap |= (1U << index); + for (m = size << (ZEND_MM_NUM_BUCKETS - index); ; m <<= 1) { + zend_mm_free_block *prev = *p; + + if (ZEND_MM_FREE_BLOCK_SIZE(prev) != size) { + p = &prev->child[(m >> (ZEND_MM_NUM_BUCKETS-1)) & 1]; + if (!*p) { + *p = mm_block; + mm_block->parent = p; + mm_block->prev_free_block = mm_block->next_free_block = mm_block; + break; + } + } else { + zend_mm_free_block *next = prev->next_free_block; + + prev->next_free_block = next->prev_free_block = mm_block; + mm_block->next_free_block = next; + mm_block->prev_free_block = prev; + mm_block->parent = NULL; + break; + } + } } } else { - prev = &heap->free_buckets[0]; + zend_mm_free_block *prev, *next; + + index = ZEND_MM_BUCKET_INDEX(size); + + prev = ZEND_MM_SMALL_FREE_BUCKET(heap, index); + if (prev->prev_free_block == prev) { + heap->free_bitmap |= (ZEND_MM_LONG_CONST(1) << index); + } + next = prev->next_free_block; + + mm_block->prev_free_block = prev; + mm_block->next_free_block = next; + prev->next_free_block = next->prev_free_block = mm_block; } - next = prev->next_free_block; - mm_block->prev_free_block = prev; - mm_block->next_free_block = next; - prev->next_free_block = mm_block; - next->prev_free_block = mm_block; } - static inline void zend_mm_remove_from_free_list(zend_mm_heap *heap, zend_mm_free_block *mm_block) { - zend_mm_free_block *prev, *next; + zend_mm_free_block *prev = mm_block->prev_free_block; + zend_mm_free_block *next = mm_block->next_free_block; ZEND_MM_CHECK_MAGIC(mm_block, MEM_BLOCK_FREED); - prev = mm_block->prev_free_block; - next = mm_block->next_free_block; - prev->next_free_block = next; - next->prev_free_block = prev; + if (EXPECTED(prev == mm_block)) { + zend_mm_free_block **rp, **cp; - if (prev == next) { - size_t size = ZEND_MM_FREE_BLOCK_SIZE(mm_block); +#if ZEND_MM_SAFE_UNLINKING + if (UNEXPECTED(next != mm_block)) { + zend_mm_panic("zend_mm_heap corrupted"); + } +#endif - if (ZEND_MM_SMALL_SIZE(size)) { - size_t index = ZEND_MM_BUCKET_INDEX(size); + rp = &mm_block->child[mm_block->child[1] != NULL]; + prev = *rp; + if (EXPECTED(prev == NULL)) { + size_t index = ZEND_MM_LARGE_BUCKET_INDEX(ZEND_MM_FREE_BLOCK_SIZE(mm_block)); - heap->free_bitmap &= ~(1U << index); + ZEND_MM_CHECK_TREE(mm_block); + *mm_block->parent = NULL; + if (mm_block->parent == &heap->large_free_buckets[index]) { + heap->large_free_bitmap &= ~(ZEND_MM_LONG_CONST(1) << index); + } + } else { + while (*(cp = &(prev->child[prev->child[1] != NULL])) != NULL) { + prev = *cp; + rp = cp; + } + *rp = NULL; + +subst_block: + ZEND_MM_CHECK_TREE(mm_block); + *mm_block->parent = prev; + prev->parent = mm_block->parent; + if ((prev->child[0] = mm_block->child[0])) { + ZEND_MM_CHECK_TREE(prev->child[0]); + prev->child[0]->parent = &prev->child[0]; + } + if ((prev->child[1] = mm_block->child[1])) { + ZEND_MM_CHECK_TREE(prev->child[1]); + prev->child[1]->parent = &prev->child[1]; + } + } + } else { + +#if ZEND_MM_SAFE_UNLINKING + if (UNEXPECTED(prev->next_free_block != mm_block) || UNEXPECTED(next->prev_free_block != mm_block)) { + zend_mm_panic("zend_mm_heap corrupted"); + } +#endif + + prev->next_free_block = next; + next->prev_free_block = prev; + + if (EXPECTED(ZEND_MM_SMALL_SIZE(ZEND_MM_FREE_BLOCK_SIZE(mm_block)))) { + if (EXPECTED(prev == next)) { + size_t index = ZEND_MM_BUCKET_INDEX(ZEND_MM_FREE_BLOCK_SIZE(mm_block)); + + if (EXPECTED(heap->free_buckets[index*2] == heap->free_buckets[index*2+1])) { + heap->free_bitmap &= ~(ZEND_MM_LONG_CONST(1) << index); + } + } + } else if (UNEXPECTED(mm_block->parent != NULL)) { + goto subst_block; } } } static inline void zend_mm_init(zend_mm_heap *heap) { + zend_mm_free_block* p; int i; heap->free_bitmap = 0; + heap->large_free_bitmap = 0; #if ZEND_MM_CACHE heap->cached = 0; memset(heap->cache, 0, sizeof(heap->cache)); #endif +#if ZEND_MM_CACHE_STAT + for (i = 0; i < ZEND_MM_NUM_BUCKETS; i++) { + heap->cache_stat[i].count = 0; + } +#endif + p = ZEND_MM_SMALL_FREE_BUCKET(heap, 0); for (i = 0; i < ZEND_MM_NUM_BUCKETS; i++) { - heap->free_buckets[i].next_free_block = - heap->free_buckets[i].prev_free_block = &heap->free_buckets[i]; + p->next_free_block = p; + p->prev_free_block = p; + p = (zend_mm_free_block*)((char*)p + sizeof(zend_mm_free_block*) * 2); + heap->large_free_buckets[i] = NULL; } + heap->rest_buckets[0] = heap->rest_buckets[1] = ZEND_MM_REST_BUCKET(heap); } static void zend_mm_del_segment(zend_mm_heap *heap, zend_mm_segment *segment) { - if (heap->segments_list == segment) { - heap->segments_list = segment->next_segment; - } else { - zend_mm_segment *p = heap->segments_list; + zend_mm_segment **p = &heap->segments_list; - while (p) { - if (p->next_segment == segment) { - p->next_segment = segment->next_segment; - break; - } - p = p->next_segment; - } + while (*p != segment) { + p = &(*p)->next_segment; } + *p = segment->next_segment; heap->real_size -= segment->size; ZEND_MM_STORAGE_FREE(segment); } @@ -537,15 +890,14 @@ static void zend_mm_free_cache(zend_mm_heap *heap) while (mm_block) { size_t size = ZEND_MM_BLOCK_SIZE(mm_block); zend_mm_free_block *q = mm_block->prev_free_block; - zend_mm_block *prev_block = ZEND_MM_PREV_BLOCK(mm_block); zend_mm_block *next_block = ZEND_MM_NEXT_BLOCK(mm_block); heap->cached -= size; - if (ZEND_MM_IS_FREE_BLOCK(prev_block)) { - size += ZEND_MM_FREE_BLOCK_SIZE(prev_block); - mm_block = (zend_mm_free_block*)prev_block; - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) prev_block); + if (ZEND_MM_PREV_BLOCK_IS_FREE(mm_block)) { + mm_block = (zend_mm_free_block*)ZEND_MM_PREV_BLOCK(mm_block); + size += ZEND_MM_FREE_BLOCK_SIZE(mm_block); + zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) mm_block); } if (ZEND_MM_IS_FREE_BLOCK(next_block)) { size += ZEND_MM_FREE_BLOCK_SIZE(next_block); @@ -563,27 +915,108 @@ static void zend_mm_free_cache(zend_mm_heap *heap) mm_block = q; } heap->cache[i] = NULL; +#if ZEND_MM_CACHE_STAT + heap->cache_stat[i].count = 0; +#endif } } } #endif +#if ZEND_MM_HEAP_PROTECTION || ZEND_MM_COOKIES +static void zend_mm_random(unsigned char *buf, size_t size) +{ + size_t i = 0; + unsigned char t; + +#ifdef ZEND_WIN32 + HCRYPTPROV hCryptProv; + + if (CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0)) { + do { + BOOL ret = CryptGenRandom(hCryptProv, size, buf); + CryptReleaseContext(hCryptProv, 0); + if (ret) { + while (i < size && buf[i] != 0) { + i++; + } + if (i == size) { + return; + } + } + } while (0); + } +#elif defined(HAVE_DEV_URANDOM) + int fd = open("/dev/urandom", 0); + + if (fd >= 0) { + if (read(fd, buf, size) == size) { + while (i < size && buf[i] != 0) { + i++; + } + if (i == size) { + close(fd); + return; + } + } + close(fd); + } +#endif + t = (unsigned char)getpid(); + while (i < size) { + do { + buf[i] = ((unsigned char)rand()) ^ t; + } while (buf[i] == 0); + t = buf[i++] << 1; + } +} +#endif + /* Notes: * - This function may alter the block_sizes values to match platform alignment * - This function does *not* perform sanity checks on the arguments */ -ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_mem_handlers *handlers, size_t block_size, void *params) +ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_mem_handlers *handlers, size_t block_size, size_t reserve_size, int internal, void *params) { zend_mm_storage *storage; zend_mm_heap *heap; #if 0 + int i; + + printf("ZEND_MM_ALIGNMENT=%d\n", ZEND_MM_ALIGNMENT); + printf("ZEND_MM_ALIGNMENT_LOG2=%d\n", ZEND_MM_ALIGNMENT_LOG2); + printf("ZEND_MM_MIN_SIZE=%d\n", ZEND_MM_MIN_SIZE); + printf("ZEND_MM_MAX_SMALL_SIZE=%d\n", ZEND_MM_MAX_SMALL_SIZE); + printf("ZEND_MM_ALIGNED_HEADER_SIZE=%d\n", ZEND_MM_ALIGNED_HEADER_SIZE); + printf("ZEND_MM_ALIGNED_FREE_HEADER_SIZE=%d\n", ZEND_MM_ALIGNED_FREE_HEADER_SIZE); + printf("ZEND_MM_MIN_ALLOC_BLOCK_SIZE=%d\n", ZEND_MM_MIN_ALLOC_BLOCK_SIZE); + printf("ZEND_MM_ALIGNED_MIN_HEADER_SIZE=%d\n", ZEND_MM_ALIGNED_MIN_HEADER_SIZE); + printf("ZEND_MM_ALIGNED_SEGMENT_SIZE=%d\n", ZEND_MM_ALIGNED_SEGMENT_SIZE); for (i = 0; i < ZEND_MM_MAX_SMALL_SIZE; i++) { printf("%3d%c: %3ld %d %2ld\n", i, (i == ZEND_MM_MIN_SIZE?'*':' '), (long)ZEND_MM_TRUE_SIZE(i), ZEND_MM_SMALL_SIZE(ZEND_MM_TRUE_SIZE(i)), (long)ZEND_MM_BUCKET_INDEX(ZEND_MM_TRUE_SIZE(i))); } exit(0); #endif +#if ZEND_MM_HEAP_PROTECTION + if (_mem_block_start_magic == 0) { + zend_mm_random((unsigned char*)&_mem_block_start_magic, sizeof(_mem_block_start_magic)); + } + if (_mem_block_end_magic == 0) { + zend_mm_random((unsigned char*)&_mem_block_end_magic, sizeof(_mem_block_end_magic)); + } +#endif +#if ZEND_MM_COOKIES + if (_zend_mm_cookie == 0) { + zend_mm_random((unsigned char*)&_zend_mm_cookie, sizeof(_zend_mm_cookie)); + } +#endif + + if (zend_mm_low_bit(block_size) != zend_mm_high_bit(block_size)) { + fprintf(stderr, "'block_size' must be a power of two\n"); + exit(255); + } storage = handlers->init(params); if (!storage) { fprintf(stderr, "Cannot initialize zend_mm storage [%s]\n", handlers->name); @@ -594,24 +1027,47 @@ ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_mem_handlers *handlers, heap = malloc(sizeof(struct _zend_mm_heap)); heap->storage = storage; - heap->block_size = block_size = ZEND_MM_ALIGNED_SIZE(block_size); + heap->block_size = block_size; heap->segments_list = NULL; zend_mm_init(heap); +# if ZEND_MM_CACHE_STAT + memset(heap->cache_stat, 0, sizeof(heap->cache_stat)); +# endif -#if ZEND_USE_MALLOC_MM heap->use_zend_alloc = 1; -#endif - heap->real_size = 0; -#if MEMORY_LIMIT + heap->overflow = 0; heap->real_peak = 0; - heap->limit = 1<<30; + heap->limit = ZEND_MM_LONG_CONST(1)<<(ZEND_MM_NUM_BUCKETS-2); heap->size = 0; heap->peak = 0; -#endif - - heap->overflow = 0; + heap->internal = internal; + heap->reserve = NULL; + heap->reserve_size = reserve_size; + if (reserve_size > 0) { + heap->reserve = _zend_mm_alloc_int(heap, reserve_size ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC); + } + if (internal) { + int i; + zend_mm_free_block *p; + zend_mm_heap *mm_heap = _zend_mm_alloc_int(heap, sizeof(zend_mm_heap) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC); + + *mm_heap = *heap; + + p = ZEND_MM_SMALL_FREE_BUCKET(mm_heap, 0); + for (i = 0; i < ZEND_MM_NUM_BUCKETS; i++) { + p->prev_free_block->next_free_block = p; + p->next_free_block->prev_free_block = p; + p = (zend_mm_free_block*)((char*)p + sizeof(zend_mm_free_block*) * 2); + if (mm_heap->large_free_buckets[i]) { + mm_heap->large_free_buckets[i]->parent = &mm_heap->large_free_buckets[i]; + } + } + mm_heap->rest_buckets[0]->next_free_block = mm_heap->rest_buckets[1]->prev_free_block = ZEND_MM_REST_BUCKET(mm_heap); + free(heap); + heap = mm_heap; + } return heap; } @@ -645,11 +1101,15 @@ ZEND_API zend_mm_heap *zend_mm_startup(void) tmp = getenv("ZEND_MM_SEG_SIZE"); if (tmp) { seg_size = zend_atoi(tmp, 0); + if (zend_mm_low_bit(seg_size) != zend_mm_high_bit(seg_size)) { + fprintf(stderr, "ZEND_MM_SEG_SIZE must be a power ow two.\n"); + exit(255); + } } else { - seg_size = 256 * 1024; + seg_size = ZEND_MM_SEG_SIZE; } - return zend_mm_startup_ex(handlers, seg_size, NULL); + return zend_mm_startup_ex(handlers, seg_size, ZEND_MM_RESERVE_SIZE, 0, NULL); } #if ZEND_DEBUG @@ -660,6 +1120,15 @@ static long zend_mm_find_leaks(zend_mm_segment *segment, zend_mm_block *b) p = ZEND_MM_NEXT_BLOCK(b); while (1) { + if (ZEND_MM_IS_GUARD_BLOCK(p)) { + ZEND_MM_CHECK_MAGIC(p, MEM_BLOCK_GUARD); + segment = segment->next_segment; + if (!segment) { + break; + } + p = (zend_mm_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE); + continue; + } q = ZEND_MM_NEXT_BLOCK(p); if (q <= p || (char*)q > (char*)segment + segment->size || @@ -680,14 +1149,6 @@ static long zend_mm_find_leaks(zend_mm_segment *segment, zend_mm_block *b) zend_mm_panic("zend_mm_heap corrupted"); } } - if (ZEND_MM_IS_GUARD_BLOCK(q)) { - ZEND_MM_CHECK_MAGIC(q, MEM_BLOCK_GUARD); - segment = segment->next_segment; - if (!segment) { - break; - } - q = (zend_mm_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE); - } p = q; } return leaks; @@ -729,7 +1190,7 @@ static void zend_mm_check_leaks(zend_mm_heap *heap) repeated = zend_mm_find_leaks(segment, p); total += 1 + repeated; if (repeated) { - zend_message_dispatcher(ZMSG_MEMORY_LEAK_REPEATED, (void *)repeated); + zend_message_dispatcher(ZMSG_MEMORY_LEAK_REPEATED, (void *)(zend_uintptr_t)repeated); } #if ZEND_MM_CACHE } else if (p->magic == MEM_BLOCK_CACHED) { @@ -759,7 +1220,6 @@ static int zend_mm_check_ptr(zend_mm_heap *heap, void *ptr, int silent ZEND_FILE int no_cache_notice = 0; int had_problems = 0; int valid_beginning = 1; - long *end_magic; if (silent==2) { silent = 1; @@ -771,7 +1231,7 @@ static int zend_mm_check_ptr(zend_mm_heap *heap, void *ptr, int silent ZEND_FILE if (!silent) { zend_message_dispatcher(ZMSG_LOG_SCRIPT_NAME, NULL); zend_debug_alloc_output("---------------------------------------\n"); - zend_debug_alloc_output("%s(%d) : Block 0x%0.8lX status:\n" ZEND_FILE_LINE_RELAY_CC, (long) ptr); + zend_debug_alloc_output("%s(%d) : Block "PTR_FMT" status:\n" ZEND_FILE_LINE_RELAY_CC, ptr); if (__zend_orig_filename) { zend_debug_alloc_output("%s(%d) : Actual location (location was relayed)\n" ZEND_FILE_LINE_ORIG_RELAY_CC); } @@ -803,7 +1263,7 @@ static int zend_mm_check_ptr(zend_mm_heap *heap, void *ptr, int silent ZEND_FILE if (p->info._size != ZEND_MM_NEXT_BLOCK(p)->info._prev) { if (!silent) { - zend_debug_alloc_output("Invalid pointer: ((size=0x%0.8X) != (next.prev=0x%0.8X))\n", p->info._size, ZEND_MM_NEXT_BLOCK(p)->info._prev); + zend_debug_alloc_output("Invalid pointer: ((size="PTR_FMT") != (next.prev="PTR_FMT"))\n", p->info._size, ZEND_MM_NEXT_BLOCK(p)->info._prev); had_problems = 1; } else { return zend_mm_check_ptr(heap, ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); @@ -812,7 +1272,7 @@ static int zend_mm_check_ptr(zend_mm_heap *heap, void *ptr, int silent ZEND_FILE if (p->info._prev != ZEND_MM_GUARD_BLOCK && ZEND_MM_PREV_BLOCK(p)->info._size != p->info._prev) { if (!silent) { - zend_debug_alloc_output("Invalid pointer: ((prev=0x%0.8X) != (prev.size=0x%0.8X))\n", p->info._prev, ZEND_MM_PREV_BLOCK(p)->info._size); + zend_debug_alloc_output("Invalid pointer: ((prev="PTR_FMT") != (prev.size="PTR_FMT"))\n", p->info._prev, ZEND_MM_PREV_BLOCK(p)->info._size); had_problems = 1; } else { return zend_mm_check_ptr(heap, ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); @@ -895,43 +1355,80 @@ static int zend_mm_check_ptr(zend_mm_heap *heap, void *ptr, int silent ZEND_FILE } } - end_magic = ZEND_MM_END_MAGIC_PTR(p); +#if ZEND_MM_HEAP_PROTECTION if (!valid_beginning) { if (!silent) { - zend_debug_alloc_output("%10s\t", "End:"); + zend_debug_alloc_output("%10s\t", "Start:"); zend_debug_alloc_output("Unknown\n"); - } - } else if (memcmp(end_magic, &_mem_block_end_magic, END_MAGIC_SIZE)==0) { - if (!silent) { zend_debug_alloc_output("%10s\t", "End:"); - zend_debug_alloc_output("OK\n"); + zend_debug_alloc_output("Unknown\n"); } } else { - char *overflow_ptr, *magic_ptr=(char *) &_mem_block_end_magic; - int overflows=0; - long i; + char *end_magic = ZEND_MM_END_MAGIC_PTR(p); - if (silent) { - return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); - } - had_problems = 1; - overflow_ptr = (char *) end_magic; + if (p->debug.start_magic == _mem_block_start_magic) { + if (!silent) { + zend_debug_alloc_output("%10s\t", "Start:"); + zend_debug_alloc_output("OK\n"); + } + } else { + char *overflow_ptr, *magic_ptr=(char *) &_mem_block_start_magic; + int overflows=0; + int i; - for (i=0; i<(int)sizeof(long); i++) { - if (overflow_ptr[i]!=magic_ptr[i]) { - overflows++; + if (silent) { + return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); + } + had_problems = 1; + overflow_ptr = (char *) &p->debug.start_magic; + i = END_MAGIC_SIZE; + while (--i >= 0) { + if (overflow_ptr[i]!=magic_ptr[i]) { + overflows++; + } + } + zend_debug_alloc_output("%10s\t", "Start:"); + zend_debug_alloc_output("Overflown (magic=0x%0.8X instead of 0x%0.8X)\n", p->debug.start_magic, _mem_block_start_magic); + zend_debug_alloc_output("%10s\t",""); + if (overflows >= END_MAGIC_SIZE) { + zend_debug_alloc_output("At least %d bytes overflown\n", END_MAGIC_SIZE); + } else { + zend_debug_alloc_output("%d byte(s) overflown\n", overflows); } } - - zend_debug_alloc_output("%10s\t", "End:"); - zend_debug_alloc_output("Overflown (magic=0x%0.8lX instead of 0x%0.8lX)\n", *end_magic, MEM_BLOCK_END_MAGIC); - zend_debug_alloc_output("%10s\t",""); - if (overflows>=(int)sizeof(long)) { - zend_debug_alloc_output("At least %d bytes overflown\n", sizeof(long)); + if (memcmp(end_magic, &_mem_block_end_magic, END_MAGIC_SIZE)==0) { + if (!silent) { + zend_debug_alloc_output("%10s\t", "End:"); + zend_debug_alloc_output("OK\n"); + } } else { - zend_debug_alloc_output("%d byte(s) overflown\n", overflows); + char *overflow_ptr, *magic_ptr=(char *) &_mem_block_end_magic; + int overflows=0; + int i; + + if (silent) { + return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); + } + had_problems = 1; + overflow_ptr = (char *) end_magic; + + for (i=0; i < END_MAGIC_SIZE; i++) { + if (overflow_ptr[i]!=magic_ptr[i]) { + overflows++; + } + } + + zend_debug_alloc_output("%10s\t", "End:"); + zend_debug_alloc_output("Overflown (magic=0x%0.8X instead of 0x%0.8X)\n", *end_magic, _mem_block_end_magic); + zend_debug_alloc_output("%10s\t",""); + if (overflows >= END_MAGIC_SIZE) { + zend_debug_alloc_output("At least %d bytes overflown\n", END_MAGIC_SIZE); + } else { + zend_debug_alloc_output("%d byte(s) overflown\n", overflows); + } } } +#endif if (!silent) { zend_debug_alloc_output("---------------------------------------\n"); @@ -983,8 +1480,65 @@ static int zend_mm_check_heap(zend_mm_heap *heap, int silent ZEND_FILE_LINE_DC Z ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, int full_shutdown, int silent) { + zend_mm_storage *storage; zend_mm_segment *segment; zend_mm_segment *prev; + int internal; + + if (heap->reserve) { +#if ZEND_DEBUG + if (!silent) { + _zend_mm_free_int(heap, heap->reserve ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC); + } +#endif + heap->reserve = NULL; + } + +#if ZEND_MM_CACHE_STAT + if (full_shutdown) { + FILE *f; + + f = fopen("zend_mm.log", "w"); + if (f) { + int i,j; + size_t size, true_size, min_size, max_size; + int hit = 0, miss = 0; + + fprintf(f, "\nidx min_size max_size true_size max_len hits misses\n"); + size = 0; + while (1) { + true_size = ZEND_MM_TRUE_SIZE(size); + if (ZEND_MM_SMALL_SIZE(true_size)) { + min_size = size; + i = ZEND_MM_BUCKET_INDEX(true_size); + size++; + while (1) { + true_size = ZEND_MM_TRUE_SIZE(size); + if (ZEND_MM_SMALL_SIZE(true_size)) { + j = ZEND_MM_BUCKET_INDEX(true_size); + if (j > i) { + max_size = size-1; + break; + } + } else { + max_size = size-1; + break; + } + size++; + } + hit += heap->cache_stat[i].hit; + miss += heap->cache_stat[i].miss; + fprintf(f, "%2d %8d %8d %9d %8d %8d %8d\n", i, (int)min_size, (int)max_size, ZEND_MM_TRUE_SIZE(max_size), heap->cache_stat[i].max_count, heap->cache_stat[i].hit, heap->cache_stat[i].miss); + } else { + break; + } + } + fprintf(f, " %8d %8d\n", hit, miss); + fprintf(f, " %8d %8d\n", heap->cache_stat[ZEND_MM_NUM_BUCKETS].hit, heap->cache_stat[ZEND_MM_NUM_BUCKETS].miss); + fclose(f); + } + } +#endif #if ZEND_DEBUG if (!silent) { @@ -992,6 +1546,8 @@ ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, int full_shutdown, int silent } #endif + internal = heap->internal; + storage = heap->storage; segment = heap->segments_list; while (segment) { prev = segment; @@ -999,17 +1555,20 @@ ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, int full_shutdown, int silent ZEND_MM_STORAGE_FREE(prev); } if (full_shutdown) { - ZEND_MM_STORAGE_DTOR(); - free(heap); + storage->handlers->dtor(storage); + if (!internal) { + free(heap); + } } else { heap->segments_list = NULL; zend_mm_init(heap); heap->real_size = 0; -#if MEMORY_LIMIT heap->real_peak = 0; heap->size = 0; heap->peak = 0; -#endif + if (heap->reserve_size) { + heap->reserve = _zend_mm_alloc_int(heap, heap->reserve_size ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC); + } heap->overflow = 0; } } @@ -1023,6 +1582,10 @@ static void zend_mm_safe_error(zend_mm_heap *heap, #endif size_t size) { + if (heap->reserve) { + _zend_mm_free_int(heap, heap->reserve ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC); + heap->reserve = NULL; + } if (heap->overflow == 0) { char *error_filename; uint error_lineno; @@ -1042,7 +1605,7 @@ static void zend_mm_safe_error(zend_mm_heap *heap, } heap->overflow = 1; zend_try { - zend_error(E_ERROR, + zend_error_noreturn(E_ERROR, format, limit, #if ZEND_DEBUG @@ -1070,134 +1633,174 @@ static void zend_mm_safe_error(zend_mm_heap *heap, zend_bailout(); } -static void *_zend_mm_alloc_int(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC; +static zend_mm_free_block *zend_mm_search_large_block(zend_mm_heap *heap, size_t true_size) +{ + zend_mm_free_block *best_fit; + size_t index = ZEND_MM_LARGE_BUCKET_INDEX(true_size); + size_t bitmap = heap->large_free_bitmap >> index; + zend_mm_free_block *p; + + if (bitmap == 0) { + return NULL; + } + + if (UNEXPECTED((bitmap & 1) != 0)) { + /* Search for best "large" free block */ + zend_mm_free_block *rst = NULL; + size_t m; + size_t best_size = -1; + + best_fit = NULL; + p = heap->large_free_buckets[index]; + for (m = true_size << (ZEND_MM_NUM_BUCKETS - index); ; m <<= 1) { + if (UNEXPECTED(ZEND_MM_FREE_BLOCK_SIZE(p) == true_size)) { + return p->next_free_block; + } else if (ZEND_MM_FREE_BLOCK_SIZE(p) >= true_size && + ZEND_MM_FREE_BLOCK_SIZE(p) < best_size) { + best_size = ZEND_MM_FREE_BLOCK_SIZE(p); + best_fit = p; + } + if ((m & (ZEND_MM_LONG_CONST(1) << (ZEND_MM_NUM_BUCKETS-1))) == 0) { + if (p->child[1]) { + rst = p->child[1]; + } + if (p->child[0]) { + p = p->child[0]; + } else { + break; + } + } else if (p->child[1]) { + p = p->child[1]; + } else { + break; + } + } + + for (p = rst; p; p = p->child[p->child[0] != NULL]) { + if (UNEXPECTED(ZEND_MM_FREE_BLOCK_SIZE(p) == true_size)) { + return p->next_free_block; + } else if (ZEND_MM_FREE_BLOCK_SIZE(p) > true_size && + ZEND_MM_FREE_BLOCK_SIZE(p) < best_size) { + best_size = ZEND_MM_FREE_BLOCK_SIZE(p); + best_fit = p; + } + } + + if (best_fit) { + return best_fit->next_free_block; + } + bitmap = bitmap >> 1; + if (!bitmap) { + return NULL; + } + index++; + } + + /* Search for smallest "large" free block */ + best_fit = p = heap->large_free_buckets[index + zend_mm_low_bit(bitmap)]; + while ((p = p->child[p->child[0] != NULL])) { + if (ZEND_MM_FREE_BLOCK_SIZE(p) < ZEND_MM_FREE_BLOCK_SIZE(best_fit)) { + best_fit = p; + } + } + return best_fit->next_free_block; +} static void *_zend_mm_alloc_int(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { - size_t true_size, best_size = 0x7fffffff; - zend_mm_free_block *p, *end, *best_fit = NULL; - - true_size = ZEND_MM_TRUE_SIZE(size); + zend_mm_free_block *best_fit; + size_t true_size = ZEND_MM_TRUE_SIZE(size); + size_t block_size; + size_t remaining_size; + size_t segment_size; + zend_mm_segment *segment; - if (ZEND_MM_SMALL_SIZE(true_size)) { + if (EXPECTED(ZEND_MM_SMALL_SIZE(true_size))) { size_t index = ZEND_MM_BUCKET_INDEX(true_size); - unsigned int bitmap; + size_t bitmap; + if (UNEXPECTED(true_size < size)) { + goto out_of_memory; + } #if ZEND_MM_CACHE - if (heap->cache[index]) { + if (EXPECTED(heap->cache[index] != NULL)) { /* Get block from cache */ +#if ZEND_MM_CACHE_STAT + heap->cache_stat[index].count--; + heap->cache_stat[index].hit++; +#endif best_fit = heap->cache[index]; heap->cache[index] = best_fit->prev_free_block; heap->cached -= true_size; -#if ZEND_DEBUG ZEND_MM_CHECK_MAGIC(best_fit, MEM_BLOCK_CACHED); - ZEND_MM_SET_MAGIC(best_fit, MEM_BLOCK_VALID); - ((zend_mm_block*)best_fit)->debug.size = size; - ((zend_mm_block*)best_fit)->debug.filename = __zend_filename; - ((zend_mm_block*)best_fit)->debug.lineno = __zend_lineno; - ((zend_mm_block*)best_fit)->debug.orig_filename = __zend_orig_filename; - ((zend_mm_block*)best_fit)->debug.orig_lineno = __zend_orig_lineno; - ZEND_MM_SET_END_MAGIC(best_fit); -#endif + ZEND_MM_SET_DEBUG_INFO(best_fit, size, 1, 0); return ZEND_MM_DATA_OF(best_fit); - } + } +#if ZEND_MM_CACHE_STAT + heap->cache_stat[index].miss++; +#endif #endif bitmap = heap->free_bitmap >> index; if (bitmap) { /* Found some "small" free block that can be used */ - if (bitmap & 1) { - /* Found "small" free block of exactly the same size */ - best_fit = heap->free_buckets[index].next_free_block; - goto zend_mm_finished_searching_for_block; - } else { - /* Search for bigger "small" block */ - static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}; - int n; - - /* Unrolled loop that search for best "small" block */ - do { - n = offset[bitmap & 15]; - bitmap >>= 4; - index += n; - } while (n == 4); - - best_fit = heap->free_buckets[index].next_free_block; - goto zend_mm_finished_searching_for_block; - } - } - } - - end = &heap->free_buckets[0]; - for (p = end->next_free_block; p != end; p = p->next_free_block) { - size_t s = ZEND_MM_FREE_BLOCK_SIZE(p); - if (s > true_size) { - if (s < best_size) { /* better fit */ - best_fit = p; - best_size = s; - } - } else if (s == true_size) { - /* Found "big" free block of exactly the same size */ - best_fit = p; + index += zend_mm_low_bit(bitmap); + best_fit = heap->free_buckets[index*2]; +#if ZEND_MM_CACHE_STAT + heap->cache_stat[ZEND_MM_NUM_BUCKETS].hit++; +#endif goto zend_mm_finished_searching_for_block; } } - if (best_fit) { -zend_mm_finished_searching_for_block: - /* remove from free list */ - HANDLE_BLOCK_INTERRUPTIONS(); -#if ZEND_DEBUG - ZEND_MM_CHECK_MAGIC(best_fit, MEM_BLOCK_FREED); +#if ZEND_MM_CACHE_STAT + heap->cache_stat[ZEND_MM_NUM_BUCKETS].miss++; #endif - zend_mm_remove_from_free_list(heap, best_fit); - - { - size_t block_size = ZEND_MM_FREE_BLOCK_SIZE(best_fit); - size_t remaining_size = block_size - true_size; - if (remaining_size < ZEND_MM_ALIGNED_MIN_HEADER_SIZE) { - ZEND_MM_BLOCK(best_fit, ZEND_MM_USED_BLOCK, block_size); - } else { - zend_mm_free_block *new_free_block; + best_fit = zend_mm_search_large_block(heap, true_size); - /* prepare new free block */ - ZEND_MM_BLOCK(best_fit, ZEND_MM_USED_BLOCK, true_size); - new_free_block = (zend_mm_free_block *) ZEND_MM_BLOCK_AT(best_fit, true_size); - ZEND_MM_BLOCK(new_free_block, ZEND_MM_FREE_BLOCK, remaining_size); + if (!best_fit && heap->real_size >= heap->limit - heap->block_size) { + zend_mm_free_block *p = heap->rest_buckets[0]; + size_t best_size = -1; - /* add the new free block to the free list */ - zend_mm_add_to_free_list(heap, new_free_block); + while (p != ZEND_MM_REST_BUCKET(heap)) { + if (UNEXPECTED(ZEND_MM_FREE_BLOCK_SIZE(p) == true_size)) { + best_fit = p; + goto zend_mm_finished_searching_for_block; + } else if (ZEND_MM_FREE_BLOCK_SIZE(p) > true_size && + ZEND_MM_FREE_BLOCK_SIZE(p) < best_size) { + best_size = ZEND_MM_FREE_BLOCK_SIZE(p); + best_fit = p; } + p = p->prev_free_block; } - } else { - size_t segment_size; - size_t block_size; - size_t remaining_size; - zend_mm_segment *segment; + } - if (true_size + ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE > heap->block_size) { + if (!best_fit) { + if (true_size > heap->block_size - (ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE)) { /* Make sure we add a memory block which is big enough, segment must have header "size" and trailer "guard" block */ segment_size = true_size + ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE; - segment_size = ((segment_size + (heap->block_size-1)) / heap->block_size) * heap->block_size; + segment_size = (segment_size + (heap->block_size-1)) & ~(heap->block_size-1); } else { segment_size = heap->block_size; } + HANDLE_BLOCK_INTERRUPTIONS(); -#if MEMORY_LIMIT - if (heap->real_size + segment_size > heap->limit) { + if (segment_size < true_size || + heap->real_size + segment_size > heap->limit) { /* Memory limit overflow */ +#if ZEND_MM_CACHE + zend_mm_free_cache(heap); +#endif + HANDLE_UNBLOCK_INTERRUPTIONS(); #if ZEND_DEBUG - zend_mm_safe_error(heap, "Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes)", heap->limit, __zend_filename, __zend_lineno, size); + zend_mm_safe_error(heap, "Allowed memory size of %ld bytes exhausted at %s:%d (tried to allocate %ld bytes)", heap->limit, __zend_filename, __zend_lineno, size); #else - zend_mm_safe_error(heap, "Allowed memory size of %d bytes exhausted (tried to allocate %d bytes)", heap->limit, size); + zend_mm_safe_error(heap, "Allowed memory size of %ld bytes exhausted (tried to allocate %ld bytes)", heap->limit, size); #endif } -#endif - - HANDLE_BLOCK_INTERRUPTIONS(); segment = (zend_mm_segment *) ZEND_MM_STORAGE_ALLOC(segment_size); @@ -1207,20 +1810,19 @@ zend_mm_finished_searching_for_block: zend_mm_free_cache(heap); #endif HANDLE_UNBLOCK_INTERRUPTIONS(); +out_of_memory: #if ZEND_DEBUG - zend_mm_safe_error(heap, "Out of memory (allocated %d) at %s:%d (tried to allocate %d bytes)", heap->real_size, __zend_filename, __zend_lineno, size); + zend_mm_safe_error(heap, "Out of memory (allocated %ld) at %s:%d (tried to allocate %ld bytes)", heap->real_size, __zend_filename, __zend_lineno, size); #else - zend_mm_safe_error(heap, "Out of memory (allocated %d) (tried to allocate %d bytes)", heap->real_size, size); + zend_mm_safe_error(heap, "Out of memory (allocated %ld) (tried to allocate %ld bytes)", heap->real_size, size); #endif return NULL; } heap->real_size += segment_size; -#if MEMORY_LIMIT if (heap->real_size > heap->real_peak) { heap->real_peak = heap->real_size; } -#endif segment->size = segment_size; segment->next_segment = heap->segments_list; @@ -1230,44 +1832,44 @@ zend_mm_finished_searching_for_block: ZEND_MM_MARK_FIRST_BLOCK(best_fit); block_size = segment_size - ZEND_MM_ALIGNED_SEGMENT_SIZE - ZEND_MM_ALIGNED_HEADER_SIZE; - remaining_size = block_size - true_size; ZEND_MM_LAST_BLOCK(ZEND_MM_BLOCK_AT(best_fit, block_size)); - if (remaining_size < ZEND_MM_ALIGNED_MIN_HEADER_SIZE) { - ZEND_MM_BLOCK(best_fit, ZEND_MM_USED_BLOCK, block_size); - } else { - zend_mm_free_block *new_free_block; + } else { +zend_mm_finished_searching_for_block: + /* remove from free list */ + HANDLE_BLOCK_INTERRUPTIONS(); + ZEND_MM_CHECK_MAGIC(best_fit, MEM_BLOCK_FREED); + ZEND_MM_CHECK_COOKIE(best_fit); + ZEND_MM_CHECK_BLOCK_LINKAGE(best_fit); + zend_mm_remove_from_free_list(heap, best_fit); - /* prepare new free block */ - ZEND_MM_BLOCK(best_fit, ZEND_MM_USED_BLOCK, true_size); - new_free_block = (zend_mm_free_block *) ZEND_MM_BLOCK_AT(best_fit, true_size); - ZEND_MM_BLOCK(new_free_block, ZEND_MM_FREE_BLOCK, remaining_size); + block_size = ZEND_MM_FREE_BLOCK_SIZE(best_fit); + } - /* add the new free block to the free list */ - zend_mm_add_to_free_list(heap, new_free_block); - } + remaining_size = block_size - true_size; + + if (remaining_size < ZEND_MM_ALIGNED_MIN_HEADER_SIZE) { + true_size = block_size; + ZEND_MM_BLOCK(best_fit, ZEND_MM_USED_BLOCK, true_size); + } else { + zend_mm_free_block *new_free_block; + + /* prepare new free block */ + ZEND_MM_BLOCK(best_fit, ZEND_MM_USED_BLOCK, true_size); + new_free_block = (zend_mm_free_block *) ZEND_MM_BLOCK_AT(best_fit, true_size); + ZEND_MM_BLOCK(new_free_block, ZEND_MM_FREE_BLOCK, remaining_size); + + /* add the new free block to the free list */ + zend_mm_add_to_free_list(heap, new_free_block); } -#if ZEND_DEBUG - ZEND_MM_SET_MAGIC(best_fit, MEM_BLOCK_VALID); - ((zend_mm_block*)best_fit)->debug.size = size; - ((zend_mm_block*)best_fit)->debug.filename = __zend_filename; - ((zend_mm_block*)best_fit)->debug.lineno = __zend_lineno; - ((zend_mm_block*)best_fit)->debug.orig_filename = __zend_orig_filename; - ((zend_mm_block*)best_fit)->debug.orig_lineno = __zend_orig_lineno; -# ifdef ZTS - ((zend_mm_block*)best_fit)->thread_id = tsrm_thread_id(); -# endif - ZEND_MM_SET_END_MAGIC(best_fit); -#endif + ZEND_MM_SET_DEBUG_INFO(best_fit, size, 1, 1); -#if MEMORY_LIMIT heap->size += true_size; if (heap->peak < heap->size) { heap->peak = heap->size; } -#endif HANDLE_UNBLOCK_INTERRUPTIONS(); @@ -1278,21 +1880,23 @@ zend_mm_finished_searching_for_block: static void _zend_mm_free_int(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { zend_mm_block *mm_block; - zend_mm_block *prev_block, *next_block; + zend_mm_block *next_block; size_t size; if (!ZEND_MM_VALID_PTR(p)) { return; } + mm_block = ZEND_MM_HEADER_OF(p); size = ZEND_MM_BLOCK_SIZE(mm_block); + ZEND_MM_CHECK_PROTECTION(mm_block); -#if ZEND_DEBUG +#if ZEND_DEBUG || ZEND_MM_HEAP_PROTECTION memset(ZEND_MM_DATA_OF(mm_block), 0x5a, mm_block->debug.size); #endif #if ZEND_MM_CACHE - if (ZEND_MM_SMALL_SIZE(size) && heap->cached < ZEND_MM_CACHE_SIZE) { + if (EXPECTED(ZEND_MM_SMALL_SIZE(size)) && EXPECTED(heap->cached < ZEND_MM_CACHE_SIZE)) { size_t index = ZEND_MM_BUCKET_INDEX(size); zend_mm_free_block **cache = &heap->cache[index]; @@ -1300,70 +1904,34 @@ static void _zend_mm_free_int(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND *cache = (zend_mm_free_block*)mm_block; heap->cached += size; ZEND_MM_SET_MAGIC(mm_block, MEM_BLOCK_CACHED); +#if ZEND_MM_CACHE_STAT + if (++heap->cache_stat[index].count > heap->cache_stat[index].max_count) { + heap->cache_stat[index].max_count = heap->cache_stat[index].count; + } +#endif return; } #endif HANDLE_BLOCK_INTERRUPTIONS(); -#if MEMORY_LIMIT heap->size -= size; -#endif + next_block = ZEND_MM_BLOCK_AT(mm_block, size); + if (ZEND_MM_IS_FREE_BLOCK(next_block)) { + zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); + size += ZEND_MM_FREE_BLOCK_SIZE(next_block); + } if (ZEND_MM_PREV_BLOCK_IS_FREE(mm_block)) { - next_block = ZEND_MM_NEXT_BLOCK(mm_block); - if (ZEND_MM_IS_FREE_BLOCK(next_block)) { - /* merge with previous and next block */ - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); - prev_block=ZEND_MM_PREV_BLOCK(mm_block); - if (ZEND_MM_SMALL_SIZE(ZEND_MM_FREE_BLOCK_SIZE(prev_block))) { - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) prev_block); - size += ZEND_MM_FREE_BLOCK_SIZE(prev_block) + ZEND_MM_FREE_BLOCK_SIZE(next_block); - mm_block = prev_block; - } else { - ZEND_MM_BLOCK(prev_block, ZEND_MM_FREE_BLOCK, size + ZEND_MM_FREE_BLOCK_SIZE(prev_block) + ZEND_MM_FREE_BLOCK_SIZE(next_block)); - if (ZEND_MM_IS_FIRST_BLOCK(prev_block) && - ZEND_MM_IS_GUARD_BLOCK(ZEND_MM_NEXT_BLOCK(prev_block))) { - mm_block = prev_block; - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) mm_block); - goto free_segment; - } - HANDLE_UNBLOCK_INTERRUPTIONS(); - return; - } - } else { - /* merge with previous block */ - prev_block=ZEND_MM_PREV_BLOCK(mm_block); - if (ZEND_MM_SMALL_SIZE(ZEND_MM_FREE_BLOCK_SIZE(prev_block))) { - size += ZEND_MM_FREE_BLOCK_SIZE(prev_block); - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) prev_block); - mm_block = prev_block; - } else { - ZEND_MM_BLOCK(prev_block, ZEND_MM_FREE_BLOCK, size + ZEND_MM_FREE_BLOCK_SIZE(prev_block)); - if (ZEND_MM_IS_FIRST_BLOCK(prev_block) && - ZEND_MM_IS_GUARD_BLOCK(ZEND_MM_NEXT_BLOCK(prev_block))) { - mm_block = prev_block; - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) mm_block); - goto free_segment; - } - HANDLE_UNBLOCK_INTERRUPTIONS(); - return; - } - } - } else { - next_block = ZEND_MM_NEXT_BLOCK(mm_block); - if (ZEND_MM_IS_FREE_BLOCK(next_block)) { - /* merge with the next block */ - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); - size += ZEND_MM_FREE_BLOCK_SIZE(next_block); - } + mm_block = ZEND_MM_PREV_BLOCK(mm_block); + zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) mm_block); + size += ZEND_MM_FREE_BLOCK_SIZE(mm_block); } - ZEND_MM_BLOCK(mm_block, ZEND_MM_FREE_BLOCK, size); if (ZEND_MM_IS_FIRST_BLOCK(mm_block) && - ZEND_MM_IS_GUARD_BLOCK(ZEND_MM_NEXT_BLOCK(mm_block))) { -free_segment: + ZEND_MM_IS_GUARD_BLOCK(ZEND_MM_BLOCK_AT(mm_block, size))) { zend_mm_del_segment(heap, (zend_mm_segment *) ((char *)mm_block - ZEND_MM_ALIGNED_SEGMENT_SIZE)); } else { + ZEND_MM_BLOCK(mm_block, ZEND_MM_FREE_BLOCK, size); zend_mm_add_to_free_list(heap, (zend_mm_free_block *) mm_block); } HANDLE_UNBLOCK_INTERRUPTIONS(); @@ -1374,29 +1942,29 @@ static void *_zend_mm_realloc_int(zend_mm_heap *heap, void *p, size_t size ZEND_ zend_mm_block *mm_block = ZEND_MM_HEADER_OF(p); zend_mm_block *next_block; size_t true_size; + size_t orig_size; void *ptr; - if (!p || !ZEND_MM_VALID_PTR(p)) { + if (UNEXPECTED(!p) || !ZEND_MM_VALID_PTR(p)) { return _zend_mm_alloc_int(heap, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } mm_block = ZEND_MM_HEADER_OF(p); true_size = ZEND_MM_TRUE_SIZE(size); + orig_size = ZEND_MM_BLOCK_SIZE(mm_block); + ZEND_MM_CHECK_PROTECTION(mm_block); -#if MEMORY_LIMIT - heap->size = heap->size + true_size - ZEND_MM_BLOCK_SIZE(mm_block); - if (heap->peak < heap->size) { - heap->peak = heap->size; + if (UNEXPECTED(true_size < size)) { + goto out_of_memory; } -#endif - - if (true_size <= ZEND_MM_BLOCK_SIZE(mm_block)) { - size_t remaining_size = ZEND_MM_BLOCK_SIZE(mm_block) - true_size; + + if (true_size <= orig_size) { + size_t remaining_size = orig_size - true_size; if (remaining_size >= ZEND_MM_ALIGNED_MIN_HEADER_SIZE) { zend_mm_free_block *new_free_block; HANDLE_BLOCK_INTERRUPTIONS(); - next_block = ZEND_MM_NEXT_BLOCK(mm_block); + next_block = ZEND_MM_BLOCK_AT(mm_block, orig_size); if (ZEND_MM_IS_FREE_BLOCK(next_block)) { remaining_size += ZEND_MM_FREE_BLOCK_SIZE(next_block); zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); @@ -1410,31 +1978,72 @@ static void *_zend_mm_realloc_int(zend_mm_heap *heap, void *p, size_t size ZEND_ /* add the new free block to the free list */ zend_mm_add_to_free_list(heap, new_free_block); + heap->size += (true_size - orig_size); HANDLE_UNBLOCK_INTERRUPTIONS(); } -#if ZEND_DEBUG - mm_block->debug.size = size; - mm_block->debug.filename = __zend_filename; - mm_block->debug.lineno = __zend_lineno; - mm_block->debug.orig_filename = __zend_orig_filename; - mm_block->debug.orig_lineno = __zend_orig_lineno; - ZEND_MM_SET_END_MAGIC(mm_block); -#endif + ZEND_MM_SET_DEBUG_INFO(mm_block, size, 0, 0); return p; } - next_block = ZEND_MM_NEXT_BLOCK(mm_block); +#if ZEND_MM_CACHE + if (ZEND_MM_SMALL_SIZE(true_size)) { + size_t index = ZEND_MM_BUCKET_INDEX(true_size); + + if (heap->cache[index] != NULL) { + zend_mm_free_block *best_fit; + zend_mm_free_block **cache; + +#if ZEND_MM_CACHE_STAT + heap->cache_stat[index].count--; + heap->cache_stat[index].hit++; +#endif + best_fit = heap->cache[index]; + heap->cache[index] = best_fit->prev_free_block; + ZEND_MM_CHECK_MAGIC(best_fit, MEM_BLOCK_CACHED); + ZEND_MM_SET_DEBUG_INFO(best_fit, size, 1, 0); + + ptr = ZEND_MM_DATA_OF(best_fit); + +#if ZEND_DEBUG || ZEND_MM_HEAP_PROTECTION + memcpy(ptr, p, mm_block->debug.size); +#else + memcpy(ptr, p, orig_size - ZEND_MM_ALIGNED_HEADER_SIZE); +#endif + + heap->cached -= true_size - orig_size; + + index = ZEND_MM_BUCKET_INDEX(orig_size); + cache = &heap->cache[index]; + + ((zend_mm_free_block*)mm_block)->prev_free_block = *cache; + *cache = (zend_mm_free_block*)mm_block; + ZEND_MM_SET_MAGIC(mm_block, MEM_BLOCK_CACHED); +#if ZEND_MM_CACHE_STAT + if (++heap->cache_stat[index].count > heap->cache_stat[index].max_count) { + heap->cache_stat[index].max_count = heap->cache_stat[index].count; + } +#endif + + return ptr; + } + } +#endif + + next_block = ZEND_MM_BLOCK_AT(mm_block, orig_size); if (ZEND_MM_IS_FREE_BLOCK(next_block)) { - if (ZEND_MM_BLOCK_SIZE(mm_block) + ZEND_MM_FREE_BLOCK_SIZE(next_block) >= true_size) { - size_t block_size = ZEND_MM_BLOCK_SIZE(mm_block) + ZEND_MM_FREE_BLOCK_SIZE(next_block); + ZEND_MM_CHECK_COOKIE(next_block); + ZEND_MM_CHECK_BLOCK_LINKAGE(next_block); + if (orig_size + ZEND_MM_FREE_BLOCK_SIZE(next_block) >= true_size) { + size_t block_size = orig_size + ZEND_MM_FREE_BLOCK_SIZE(next_block); size_t remaining_size = block_size - true_size; HANDLE_BLOCK_INTERRUPTIONS(); zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); if (remaining_size < ZEND_MM_ALIGNED_MIN_HEADER_SIZE) { - ZEND_MM_BLOCK(mm_block, ZEND_MM_USED_BLOCK, block_size); + true_size = block_size; + ZEND_MM_BLOCK(mm_block, ZEND_MM_USED_BLOCK, true_size); } else { zend_mm_free_block *new_free_block; @@ -1444,20 +2053,22 @@ static void *_zend_mm_realloc_int(zend_mm_heap *heap, void *p, size_t size ZEND_ ZEND_MM_BLOCK(new_free_block, ZEND_MM_FREE_BLOCK, remaining_size); /* add the new free block to the free list */ - zend_mm_add_to_free_list(heap, new_free_block); + if (ZEND_MM_IS_FIRST_BLOCK(mm_block) && + ZEND_MM_IS_GUARD_BLOCK(ZEND_MM_BLOCK_AT(new_free_block, remaining_size))) { + zend_mm_add_to_rest_list(heap, new_free_block); + } else { + zend_mm_add_to_free_list(heap, new_free_block); + } + } + ZEND_MM_SET_DEBUG_INFO(mm_block, size, 0, 0); + heap->size = heap->size + true_size - orig_size; + if (heap->peak < heap->size) { + heap->peak = heap->size; } -#if ZEND_DEBUG - mm_block->debug.size = size; - mm_block->debug.filename = __zend_filename; - mm_block->debug.lineno = __zend_lineno; - mm_block->debug.orig_filename = __zend_orig_filename; - mm_block->debug.orig_lineno = __zend_orig_lineno; - ZEND_MM_SET_END_MAGIC(mm_block); -#endif HANDLE_UNBLOCK_INTERRUPTIONS(); return p; } else if (ZEND_MM_IS_FIRST_BLOCK(mm_block) && - ZEND_MM_IS_GUARD_BLOCK(ZEND_MM_NEXT_BLOCK(next_block))) { + ZEND_MM_IS_GUARD_BLOCK(ZEND_MM_BLOCK_AT(next_block, ZEND_MM_FREE_BLOCK_SIZE(next_block)))) { HANDLE_BLOCK_INTERRUPTIONS(); zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); goto realloc_segment; @@ -1472,57 +2083,58 @@ static void *_zend_mm_realloc_int(zend_mm_heap *heap, void *p, size_t size ZEND_ HANDLE_BLOCK_INTERRUPTIONS(); realloc_segment: /* segment size, size of block and size of guard block */ - if (true_size+ZEND_MM_ALIGNED_SEGMENT_SIZE+ZEND_MM_ALIGNED_HEADER_SIZE > heap->block_size) { + if (true_size > heap->block_size - (ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE)) { segment_size = true_size+ZEND_MM_ALIGNED_SEGMENT_SIZE+ZEND_MM_ALIGNED_HEADER_SIZE; - segment_size = ((segment_size + (heap->block_size-1)) / heap->block_size) * heap->block_size; + segment_size = (segment_size + (heap->block_size-1)) & ~(heap->block_size-1); } else { segment_size = heap->block_size; } segment_copy = (zend_mm_segment *) ((char *)mm_block - ZEND_MM_ALIGNED_SEGMENT_SIZE); -#if MEMORY_LIMIT - if (heap->real_size + segment_size - segment_copy->size > heap->limit) { + if (segment_size < true_size || + heap->real_size + segment_size - segment_copy->size > heap->limit) { + if (ZEND_MM_IS_FREE_BLOCK(next_block)) { + zend_mm_add_to_free_list(heap, (zend_mm_free_block *) next_block); + } +#if ZEND_MM_CACHE + zend_mm_free_cache(heap); +#endif HANDLE_UNBLOCK_INTERRUPTIONS(); #if ZEND_DEBUG - zend_mm_safe_error(heap, "Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes)", heap->limit, __zend_filename, __zend_lineno, size); + zend_mm_safe_error(heap, "Allowed memory size of %ld bytes exhausted at %s:%d (tried to allocate %ld bytes)", heap->limit, __zend_filename, __zend_lineno, size); #else - zend_mm_safe_error(heap, "Allowed memory size of %d bytes exhausted (tried to allocate %d bytes)", heap->limit, size); + zend_mm_safe_error(heap, "Allowed memory size of %ld bytes exhausted (tried to allocate %ld bytes)", heap->limit, size); #endif return NULL; } -#endif + segment = ZEND_MM_STORAGE_REALLOC(segment_copy, segment_size); if (!segment) { +#if ZEND_MM_CACHE + zend_mm_free_cache(heap); +#endif HANDLE_UNBLOCK_INTERRUPTIONS(); +out_of_memory: #if ZEND_DEBUG - zend_mm_safe_error(heap, "Out of memory (allocated %d) at %s:%d (tried to allocate %d bytes)", heap->real_size, __zend_filename, __zend_lineno, size); + zend_mm_safe_error(heap, "Out of memory (allocated %ld) at %s:%d (tried to allocate %ld bytes)", heap->real_size, __zend_filename, __zend_lineno, size); #else - zend_mm_safe_error(heap, "Out of memory (allocated %d) (tried to allocate %d bytes)", heap->real_size, size); + zend_mm_safe_error(heap, "Out of memory (allocated %ld) (tried to allocate %ld bytes)", heap->real_size, size); #endif return NULL; } heap->real_size += segment_size - segment->size; -#if MEMORY_LIMIT if (heap->real_size > heap->real_peak) { heap->real_peak = heap->real_size; } -#endif + segment->size = segment_size; if (segment != segment_copy) { - if (heap->segments_list == segment_copy) { - heap->segments_list = segment; - } else { - zend_mm_segment *seg = heap->segments_list; - - while (seg) { - if (seg->next_segment == segment_copy) { - seg->next_segment = segment; - break; - } - seg = seg->next_segment; - } + zend_mm_segment **seg = &heap->segments_list; + while (*seg != segment_copy) { + seg = &(*seg)->next_segment; } + *seg = segment; mm_block = (zend_mm_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE); ZEND_MM_MARK_FIRST_BLOCK(mm_block); } @@ -1534,7 +2146,8 @@ realloc_segment: ZEND_MM_LAST_BLOCK(ZEND_MM_BLOCK_AT(mm_block, block_size)); if (remaining_size < ZEND_MM_ALIGNED_MIN_HEADER_SIZE) { - ZEND_MM_BLOCK(mm_block, ZEND_MM_USED_BLOCK, block_size); + true_size = block_size; + ZEND_MM_BLOCK(mm_block, ZEND_MM_USED_BLOCK, true_size); } else { zend_mm_free_block *new_free_block; @@ -1544,30 +2157,25 @@ realloc_segment: ZEND_MM_BLOCK(new_free_block, ZEND_MM_FREE_BLOCK, remaining_size); /* add the new free block to the free list */ - zend_mm_add_to_free_list(heap, new_free_block); + zend_mm_add_to_rest_list(heap, new_free_block); + } + + ZEND_MM_SET_DEBUG_INFO(mm_block, size, 1, 1); + + heap->size = heap->size + true_size - orig_size; + if (heap->peak < heap->size) { + heap->peak = heap->size; } -#if ZEND_DEBUG - ZEND_MM_SET_MAGIC(mm_block, MEM_BLOCK_VALID); - mm_block->debug.size = size; - mm_block->debug.filename = __zend_filename; - mm_block->debug.lineno = __zend_lineno; - mm_block->debug.orig_filename = __zend_orig_filename; - mm_block->debug.orig_lineno = __zend_orig_lineno; -# ifdef ZTS - mm_block->thread_id = tsrm_thread_id(); -# endif - ZEND_MM_SET_END_MAGIC(mm_block); -#endif HANDLE_UNBLOCK_INTERRUPTIONS(); return ZEND_MM_DATA_OF(mm_block); } ptr = _zend_mm_alloc_int(heap, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); -#if ZEND_DEBUG +#if ZEND_DEBUG || ZEND_MM_HEAP_PROTECTION memcpy(ptr, p, mm_block->debug.size); #else - memcpy(ptr, p, ZEND_MM_BLOCK_SIZE(mm_block) - ZEND_MM_ALIGNED_HEADER_SIZE); + memcpy(ptr, p, orig_size - ZEND_MM_ALIGNED_HEADER_SIZE); #endif _zend_mm_free_int(heap, p ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); return ptr; @@ -1596,7 +2204,8 @@ ZEND_API size_t _zend_mm_block_size(zend_mm_heap *heap, void *p ZEND_FILE_LINE_D return 0; } mm_block = ZEND_MM_HEADER_OF(p); -#if ZEND_DEBUG + ZEND_MM_CHECK_PROTECTION(mm_block); +#if ZEND_DEBUG || ZEND_MM_HEAP_PROTECTION return mm_block->debug.size; #else return ZEND_MM_BLOCK_SIZE(mm_block); @@ -1621,22 +2230,16 @@ static zend_alloc_globals alloc_globals; ZEND_API int is_zend_mm(TSRMLS_D) { -#if ZEND_USE_MALLOC_MM return AG(mm_heap)->use_zend_alloc; -#else - return 1; -#endif } ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { TSRMLS_FETCH(); -#if ZEND_USE_MALLOC_MM - if (!AG(mm_heap)->use_zend_alloc) { + if (UNEXPECTED(!AG(mm_heap)->use_zend_alloc)) { return malloc(size); } -#endif return _zend_mm_alloc_int(AG(mm_heap), size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } @@ -1644,12 +2247,10 @@ ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { TSRMLS_FETCH(); -#if ZEND_USE_MALLOC_MM - if (!AG(mm_heap)->use_zend_alloc) { + if (UNEXPECTED(!AG(mm_heap)->use_zend_alloc)) { free(ptr); return; } -#endif _zend_mm_free_int(AG(mm_heap), ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } @@ -1657,83 +2258,85 @@ ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LIN { TSRMLS_FETCH(); -#if ZEND_USE_MALLOC_MM - if (!AG(mm_heap)->use_zend_alloc) { + if (UNEXPECTED(!AG(mm_heap)->use_zend_alloc)) { return realloc(ptr, size); } -#endif return _zend_mm_realloc_int(AG(mm_heap), ptr, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } ZEND_API size_t _zend_mem_block_size(void *ptr TSRMLS_DC ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { -#if ZEND_USE_MALLOC_MM - if (!AG(mm_heap)->use_zend_alloc) { + if (UNEXPECTED(!AG(mm_heap)->use_zend_alloc)) { return 0; } -#endif return _zend_mm_block_size(AG(mm_heap), ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } -#include "zend_multiply.h" +#if defined(__GNUC__) && defined(i386) -ZEND_API void *_safe_emalloc(size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) +static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) { + size_t res = nmemb; + unsigned long overflow ; + + __asm__ ("mull %3\n\taddl %4,%0\n\tadcl $0,%1" + : "=a"(res), "=d" (overflow) + : "%0"(res), + "rm"(size), + "rm"(offset)); + + if (UNEXPECTED(overflow)) { + zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zd * %zd + %zd)", nmemb, size, offset); + return 0; + } + return res; +} - if (nmemb < LONG_MAX - && size < LONG_MAX - && offset < LONG_MAX - && nmemb >= 0 - && size >= 0 - && offset >= 0) { - long lval; - double dval; - int use_dval; +#else - ZEND_SIGNED_MULTIPLY_LONG(nmemb, size, lval, dval, use_dval); +static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) +{ + size_t res = nmemb * size + offset; + double _d = (double)nmemb * (double)size + (double)offset; + double _delta = (double)res - _d; - if (!use_dval - && lval < (long) (LONG_MAX - offset)) { - return emalloc_rel(lval + offset); - } + if (UNEXPECTED((_d + _delta ) != _d)) { + zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zd * %zd + %zd)", nmemb, size, offset); + return 0; } + return res; +} +#endif - zend_error(E_ERROR, "Possible integer overflow in memory allocation (%zd * %zd + %zd)", nmemb, size, offset); - return 0; + +ZEND_API void *_safe_emalloc(size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) +{ + return emalloc_rel(safe_address(nmemb, size, offset)); } ZEND_API void *_safe_malloc(size_t nmemb, size_t size, size_t offset) { + return pemalloc(safe_address(nmemb, size, offset), 1); +} - if (nmemb < LONG_MAX - && size < LONG_MAX - && offset < LONG_MAX - && nmemb >= 0 - && size >= 0 - && offset >= 0) { - long lval; - double dval; - int use_dval; - - ZEND_SIGNED_MULTIPLY_LONG(nmemb, size, lval, dval, use_dval); - - if (!use_dval - && lval < (long) (LONG_MAX - offset)) { - return pemalloc(lval + offset, 1); - } - } +ZEND_API void *_safe_erealloc(void *ptr, size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) +{ + return erealloc_rel(ptr, safe_address(nmemb, size, offset)); +} - zend_error(E_ERROR, "Possible integer overflow in memory allocation (%zd * %zd + %zd)", nmemb, size, offset); - return 0; +ZEND_API void *_safe_realloc(void *ptr, size_t nmemb, size_t size, size_t offset) +{ + return perealloc(ptr, safe_address(nmemb, size, offset), 1); } + ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { void *p; p = _safe_emalloc(nmemb, size, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); - if (!p) { - return (void *) p; + if (UNEXPECTED(p == NULL)) { + return p; } memset(p, 0, size * nmemb); return p; @@ -1746,8 +2349,8 @@ ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) length = strlen(s)+1; p = (char *) _emalloc(length ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); - if (!p) { - return (char *)NULL; + if (UNEXPECTED(p == NULL)) { + return p; } memcpy(p, s, length); return p; @@ -1758,8 +2361,8 @@ ZEND_API char *_estrndup(const char *s, uint length ZEND_FILE_LINE_DC ZEND_FILE_ char *p; p = (char *) _emalloc(length+1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); - if (!p) { - return (char *)NULL; + if (UNEXPECTED(p == NULL)) { + return p; } memcpy(p, s, length); p[length] = 0; @@ -1772,8 +2375,8 @@ ZEND_API char *zend_strndup(const char *s, uint length) char *p; p = (char *) malloc(length+1); - if (!p) { - return (char *)NULL; + if (UNEXPECTED(p == NULL)) { + return p; } if (length) { memcpy(p, s, length); @@ -1783,16 +2386,13 @@ ZEND_API char *zend_strndup(const char *s, uint length) } -ZEND_API int zend_set_memory_limit(unsigned int memory_limit) +ZEND_API int zend_set_memory_limit(size_t memory_limit) { -#if MEMORY_LIMIT TSRMLS_FETCH(); - AG(mm_heap)->limit = memory_limit; + AG(mm_heap)->limit = (memory_limit >= AG(mm_heap)->block_size) ? memory_limit : AG(mm_heap)->block_size; + return SUCCESS; -#else - return FAILURE; -#endif } ZEND_API size_t zend_memory_usage(int real_usage TSRMLS_DC) @@ -1800,25 +2400,17 @@ ZEND_API size_t zend_memory_usage(int real_usage TSRMLS_DC) if (real_usage) { return AG(mm_heap)->real_size; } else { -#if MEMORY_LIMIT return AG(mm_heap)->size; -#else - return AG(mm_heap)->real_size; -#endif } } ZEND_API size_t zend_memory_peak_usage(int real_usage TSRMLS_DC) { -#if MEMORY_LIMIT if (real_usage) { return AG(mm_heap)->real_peak; } else { return AG(mm_heap)->peak; } -#else - return 0; -#endif } ZEND_API void shutdown_memory_manager(int silent, int full_shutdown TSRMLS_DC) @@ -1828,15 +2420,13 @@ ZEND_API void shutdown_memory_manager(int silent, int full_shutdown TSRMLS_DC) static void alloc_globals_ctor(zend_alloc_globals *alloc_globals TSRMLS_DC) { + char *tmp; alloc_globals->mm_heap = zend_mm_startup(); -#if ZEND_USE_MALLOC_MM - { - char *tmp = getenv("USE_ZEND_ALLOC"); - if (tmp) { - alloc_globals->mm_heap->use_zend_alloc = zend_atoi(tmp, 0); - } + + tmp = getenv("USE_ZEND_ALLOC"); + if (tmp) { + alloc_globals->mm_heap->use_zend_alloc = zend_atoi(tmp, 0); } -#endif } #ifdef ZTS @@ -1864,17 +2454,19 @@ ZEND_API zend_mm_heap *zend_mm_set_heap(zend_mm_heap *new_heap TSRMLS_DC) return old_heap; } +ZEND_API zend_mm_storage *zend_mm_get_storage(zend_mm_heap *heap) +{ + return heap->storage; +} #if ZEND_DEBUG ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { TSRMLS_FETCH(); -#if ZEND_USE_MALLOC_MM if (!AG(mm_heap)->use_zend_alloc) { return 1; } -#endif return zend_mm_check_ptr(AG(mm_heap), ptr, silent ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } @@ -1884,11 +2476,9 @@ ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_D int errors; TSRMLS_FETCH(); -#if ZEND_USE_MALLOC_MM if (!AG(mm_heap)->use_zend_alloc) { return; } -#endif zend_debug_alloc_output("------------------------------------------------\n"); zend_debug_alloc_output("Full Memory Check at %s:%d\n" ZEND_FILE_LINE_RELAY_CC); diff --git a/Zend/zend_alloc.h b/Zend/zend_alloc.h index 7bf25d38a..6225f7f6c 100644 --- a/Zend/zend_alloc.h +++ b/Zend/zend_alloc.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_alloc.h,v 1.63.2.2.2.5 2006/10/12 06:46:51 dmitry Exp $ */ +/* $Id: zend_alloc.h,v 1.63.2.2.2.12 2007/03/20 06:46:48 dmitry Exp $ */ #ifndef ZEND_ALLOC_H #define ZEND_ALLOC_H @@ -46,6 +46,8 @@ ZEND_API void *_safe_malloc(size_t nmemb, size_t size, size_t offset) ZEND_ATTRI ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC; ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +ZEND_API void *_safe_erealloc(void *ptr, size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +ZEND_API void *_safe_realloc(void *ptr, size_t nmemb, size_t size, size_t offset); ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC; ZEND_API char *_estrndup(const char *s, unsigned int length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC; ZEND_API size_t _zend_mem_block_size(void *ptr TSRMLS_DC ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); @@ -56,6 +58,7 @@ ZEND_API size_t _zend_mem_block_size(void *ptr TSRMLS_DC ZEND_FILE_LINE_DC ZEND_ #define efree(ptr) _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define ecalloc(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define erealloc(ptr, size) _erealloc((ptr), (size), 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) +#define safe_erealloc(ptr, nmemb, size, offset) _safe_erealloc((ptr), (nmemb), (size), (offset) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define erealloc_recoverable(ptr, size) _erealloc((ptr), (size), 1 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define estrdup(s) _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define estrndup(s, length) _estrndup((s), (length) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) @@ -68,30 +71,60 @@ ZEND_API size_t _zend_mem_block_size(void *ptr TSRMLS_DC ZEND_FILE_LINE_DC ZEND_ #define ecalloc_rel(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define erealloc_rel(ptr, size) _erealloc((ptr), (size), 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define erealloc_recoverable_rel(ptr, size) _erealloc((ptr), (size), 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) +#define safe_erealloc_rel(ptr, nmemb, size, offset) _safe_erealloc((ptr), (nmemb), (size), (offset) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define estrdup_rel(s) _estrdup((s) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define estrndup_rel(s, length) _estrndup((s), (length) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define zend_mem_block_size_rel(ptr) _zend_mem_block_size((ptr) TSRMLS_CC ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) +inline static void * __zend_malloc(size_t len) +{ + void *tmp = malloc(len); + if (tmp) { + return tmp; + } + fprintf(stderr, "Out of memory\n"); + exit(1); +} + +inline static void * __zend_calloc(size_t nmemb, size_t len) +{ + void *tmp = _safe_malloc(nmemb, len, 0); + memset(tmp, 0, len); + return tmp; +} + +inline static void * __zend_realloc(void *p, size_t len) +{ + p = realloc(p, len); + if (p) { + return p; + } + fprintf(stderr, "Out of memory\n"); + exit(1); +} + + /* Selective persistent/non persistent allocation macros */ -#define pemalloc(size, persistent) ((persistent)?malloc(size):emalloc(size)) +#define pemalloc(size, persistent) ((persistent)?__zend_malloc(size):emalloc(size)) #define safe_pemalloc(nmemb, size, offset, persistent) ((persistent)?_safe_malloc(nmemb, size, offset):safe_emalloc(nmemb, size, offset)) #define pefree(ptr, persistent) ((persistent)?free(ptr):efree(ptr)) -#define pecalloc(nmemb, size, persistent) ((persistent)?calloc((nmemb), (size)):ecalloc((nmemb), (size))) -#define perealloc(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc((ptr), (size))) -#define perealloc_recoverable(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_recoverable((ptr), (size))) +#define pecalloc(nmemb, size, persistent) ((persistent)?__zend_calloc((nmemb), (size)):ecalloc((nmemb), (size))) +#define perealloc(ptr, size, persistent) ((persistent)?__zend_realloc((ptr), (size)):erealloc((ptr), (size))) +#define safe_perealloc(ptr, nmemb, size, offset, persistent) ((persistent)?_safe_realloc((ptr), (nmemb), (size), (offset)):safe_erealloc((ptr), (nmemb), (size), (offset))) +#define perealloc_recoverable(ptr, size, persistent) ((persistent)?__zend_realloc((ptr), (size)):erealloc_recoverable((ptr), (size))) #define pestrdup(s, persistent) ((persistent)?strdup(s):estrdup(s)) -#define pemalloc_rel(size, persistent) ((persistent)?malloc(size):emalloc_rel(size)) +#define pemalloc_rel(size, persistent) ((persistent)?__zend_malloc(size):emalloc_rel(size)) #define pefree_rel(ptr, persistent) ((persistent)?free(ptr):efree_rel(ptr)) -#define pecalloc_rel(nmemb, size, persistent) ((persistent)?calloc((nmemb), (size)):ecalloc_rel((nmemb), (size))) -#define perealloc_rel(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_rel((ptr), (size))) -#define perealloc_recoverable_rel(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_recoverable_rel((ptr), (size))) +#define pecalloc_rel(nmemb, size, persistent) ((persistent)?__zend_calloc((nmemb), (size)):ecalloc_rel((nmemb), (size))) +#define perealloc_rel(ptr, size, persistent) ((persistent)?__zend_realloc((ptr), (size)):erealloc_rel((ptr), (size))) +#define perealloc_recoverable_rel(ptr, size, persistent) ((persistent)?__zend_realloc((ptr), (size)):erealloc_recoverable_rel((ptr), (size))) #define pestrdup_rel(s, persistent) ((persistent)?strdup(s):estrdup_rel(s)) #define safe_estrdup(ptr) ((ptr)?(estrdup(ptr)):STR_EMPTY_ALLOC()) #define safe_estrndup(ptr, len) ((ptr)?(estrndup((ptr), (len))):STR_EMPTY_ALLOC()) -ZEND_API int zend_set_memory_limit(unsigned int memory_limit); +ZEND_API int zend_set_memory_limit(size_t memory_limit); ZEND_API void start_memory_manager(TSRMLS_D); ZEND_API void shutdown_memory_manager(int silent, int full_shutdown TSRMLS_DC); @@ -195,8 +228,9 @@ struct _zend_mm_storage { void *data; }; -ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_mem_handlers *handlers, size_t block_size, void *params); +ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_mem_handlers *handlers, size_t block_size, size_t reserve_size, int internal, void *params); ZEND_API zend_mm_heap *zend_mm_set_heap(zend_mm_heap *new_heap TSRMLS_DC); +ZEND_API zend_mm_storage *zend_mm_get_storage(zend_mm_heap *heap); #endif diff --git a/Zend/zend_arg_defs.c b/Zend/zend_arg_defs.c index bec328ad8..090490f9b 100644 --- a/Zend/zend_arg_defs.c +++ b/Zend/zend_arg_defs.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_arg_defs.c,v 1.2.2.2.2.1 2006/05/09 23:53:23 helly Exp $ */ +/* $Id: zend_arg_defs.c,v 1.2.2.2.2.2 2007/01/01 09:35:46 sebastian Exp $ */ ZEND_BEGIN_ARG_INFO(first_arg_force_ref, 0) ZEND_ARG_PASS_INFO(1) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index dc744221c..869a4d59e 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,13 +17,14 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_builtin_functions.c,v 1.277.2.12.2.8 2006/09/26 07:55:09 dmitry Exp $ */ +/* $Id: zend_builtin_functions.c,v 1.277.2.12.2.17 2007/04/16 08:09:54 dmitry Exp $ */ #include "zend.h" #include "zend_API.h" #include "zend_builtin_functions.h" #include "zend_constants.h" #include "zend_ini.h" +#include "zend_exceptions.h" #undef ZEND_TEST_EXCEPTIONS @@ -171,14 +172,14 @@ ZEND_FUNCTION(func_num_args) int arg_count; p = EG(argument_stack).top_element-1-1; - arg_count = (ulong) *p; /* this is the amount of arguments passed to func_num_args(); */ + arg_count = (int)(zend_uintptr_t) *p; /* this is the amount of arguments passed to func_num_args(); */ p -= 1+arg_count; if (*p) { zend_error(E_ERROR, "func_num_args(): Can't be used as a function parameter"); } --p; if (p>=EG(argument_stack).elements) { - RETURN_LONG((ulong) *p); + RETURN_LONG((long)(zend_uintptr_t) *p); } else { zend_error(E_WARNING, "func_num_args(): Called from the global scope - no function context"); RETURN_LONG(-1); @@ -201,7 +202,7 @@ ZEND_FUNCTION(func_get_arg) RETURN_FALSE; } convert_to_long_ex(z_requested_offset); - requested_offset = (*z_requested_offset)->value.lval; + requested_offset = Z_LVAL_PP(z_requested_offset); if (requested_offset < 0) { zend_error(E_WARNING, "func_get_arg(): The argument number should be >= 0"); @@ -209,7 +210,7 @@ ZEND_FUNCTION(func_get_arg) } p = EG(argument_stack).top_element-1-1; - arg_count = (ulong) *p; /* this is the amount of arguments passed to func_get_arg(); */ + arg_count = (int)(zend_uintptr_t) *p; /* this is the amount of arguments passed to func_get_arg(); */ p -= 1+arg_count; if (*p) { zend_error(E_ERROR, "func_get_arg(): Can't be used as a function parameter"); @@ -219,7 +220,7 @@ ZEND_FUNCTION(func_get_arg) zend_error(E_WARNING, "func_get_arg(): Called from the global scope - no function context"); RETURN_FALSE; } - arg_count = (ulong) *p; + arg_count = (int)(zend_uintptr_t) *p; if (requested_offset>=arg_count) { zend_error(E_WARNING, "func_get_arg(): Argument %ld not passed to function", requested_offset); @@ -243,7 +244,7 @@ ZEND_FUNCTION(func_get_args) int i; p = EG(argument_stack).top_element-1-1; - arg_count = (ulong) *p; /* this is the amount of arguments passed to func_get_args(); */ + arg_count = (int)(zend_uintptr_t) *p; /* this is the amount of arguments passed to func_get_args(); */ p -= 1+arg_count; if (*p) { zend_error(E_ERROR, "func_get_args(): Can't be used as a function parameter"); @@ -254,7 +255,7 @@ ZEND_FUNCTION(func_get_args) zend_error(E_WARNING, "func_get_args(): Called from the global scope - no function context"); RETURN_FALSE; } - arg_count = (ulong) *p; + arg_count = (int)(zend_uintptr_t) *p; array_init(return_value); @@ -281,7 +282,7 @@ ZEND_NAMED_FUNCTION(zend_if_strlen) ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(str); - RETVAL_LONG((*str)->value.str.len); + RETVAL_LONG(Z_STRLEN_PP(str)); } /* }}} */ @@ -517,8 +518,8 @@ repeat: zval_ptr_dtor(&val_free); } c.flags = case_sensitive; /* non persistent */ - c.name = zend_strndup((*var)->value.str.val, (*var)->value.str.len); - c.name_len = (*var)->value.str.len+1; + c.name = zend_strndup(Z_STRVAL_PP(var), Z_STRLEN_PP(var)); + c.name_len = Z_STRLEN_PP(var)+1; c.module_number = PHP_USER_CONSTANT; if (zend_register_constant(&c TSRMLS_CC) == SUCCESS) { RETURN_TRUE; @@ -541,7 +542,7 @@ ZEND_FUNCTION(defined) } convert_to_string_ex(var); - if (zend_get_constant((*var)->value.str.val, (*var)->value.str.len, &c TSRMLS_CC)) { + if (zend_get_constant(Z_STRVAL_PP(var), Z_STRLEN_PP(var), &c TSRMLS_CC)) { zval_dtor(&c); RETURN_TRUE; } else { @@ -1085,9 +1086,9 @@ ZEND_FUNCTION(function_exists) ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(function_name); - lcname = zend_str_tolower_dup((*function_name)->value.str.val, (*function_name)->value.str.len); + lcname = zend_str_tolower_dup(Z_STRVAL_PP(function_name), Z_STRLEN_PP(function_name)); - retval = (zend_hash_find(EG(function_table), lcname, (*function_name)->value.str.len+1, (void **)&func) == SUCCESS); + retval = (zend_hash_find(EG(function_table), lcname, Z_STRLEN_PP(function_name)+1, (void **)&func) == SUCCESS); efree(lcname); @@ -1115,7 +1116,7 @@ ZEND_FUNCTION(leak) if (ZEND_NUM_ARGS()>=1) { if (zend_get_parameters_ex(1, &leak)==SUCCESS) { convert_to_long_ex(leak); - leakbytes = (*leak)->value.lval; + leakbytes = Z_LVAL_PP(leak); } } @@ -1172,7 +1173,7 @@ ZEND_FUNCTION(trigger_error) ZEND_WRONG_PARAM_COUNT(); } convert_to_long_ex(z_error_type); - error_type = (*z_error_type)->value.lval; + error_type = Z_LVAL_PP(z_error_type); switch (error_type) { case E_USER_ERROR: case E_USER_WARNING: @@ -1188,7 +1189,7 @@ ZEND_FUNCTION(trigger_error) ZEND_WRONG_PARAM_COUNT(); } convert_to_string_ex(z_error_message); - zend_error(error_type, "%s", (*z_error_message)->value.str.val); + zend_error(error_type, "%s", Z_STRVAL_PP(z_error_message)); RETURN_TRUE; } /* }}} */ @@ -1416,11 +1417,16 @@ ZEND_FUNCTION(get_defined_functions) zend_hash_apply_with_arguments(EG(function_table), (apply_func_args_t) copy_function_name, 2, internal, user); if (zend_hash_add(Z_ARRVAL_P(return_value), "internal", sizeof("internal"), (void **)&internal, sizeof(zval *), NULL) == FAILURE) { + zval_ptr_dtor(&internal); + zval_ptr_dtor(&user); + zval_dtor(return_value); zend_error(E_WARNING, "Cannot add internal functions to return value from get_defined_functions()"); RETURN_FALSE; } if (zend_hash_add(Z_ARRVAL_P(return_value), "user", sizeof("user"), (void **)&user, sizeof(zval *), NULL) == FAILURE) { + zval_ptr_dtor(&user); + zval_dtor(return_value); zend_error(E_WARNING, "Cannot add user functions to return value from get_defined_functions()"); RETURN_FALSE; } @@ -1466,8 +1472,7 @@ ZEND_FUNCTION(create_function) +2 /* for the curly braces */ +Z_STRLEN_PP(z_function_code); - eval_code = (char *) emalloc(eval_code_length); - sprintf(eval_code, "function " LAMBDA_TEMP_FUNCNAME "(%s){%s}", Z_STRVAL_PP(z_function_args), Z_STRVAL_PP(z_function_code)); + zend_spprintf(&eval_code, 0, "function " LAMBDA_TEMP_FUNCNAME "(%s){%s}", Z_STRVAL_PP(z_function_args), Z_STRVAL_PP(z_function_code)); eval_name = zend_make_compiled_string_description("runtime-created function" TSRMLS_CC); retval = zend_eval_string(eval_code, NULL, eval_name TSRMLS_CC); @@ -1577,7 +1582,7 @@ ZEND_FUNCTION(get_loaded_extensions) /* }}} */ -/* {{{ proto array get_defined_constants(void) +/* {{{ proto array get_defined_constants([mixed categorize]) Return an array containing the names and values of all defined constants */ ZEND_FUNCTION(get_defined_constants) { @@ -1650,7 +1655,7 @@ static zval *debug_backtrace_get_args(void ***curpos TSRMLS_DC) { void **p = *curpos - 2; zval *arg_array, **arg; - int arg_count = (ulong) *p; + int arg_count = (int)(zend_uintptr_t) *p; *curpos -= (arg_count+2); @@ -1661,7 +1666,9 @@ static zval *debug_backtrace_get_args(void ***curpos TSRMLS_DC) while (--arg_count >= 0) { arg = (zval **) p++; if (*arg) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(arg); + if (Z_TYPE_PP(arg) != IS_OBJECT) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(arg); + } (*arg)->refcount++; add_next_index_zval(arg_array, *arg); } else { @@ -1924,7 +1931,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int } /* skip debug_backtrace() */ - if (skip_last--) { + if (skip_last-- && ptr) { int arg_count = *((ulong*)(cur_arg_pos - 2)); cur_arg_pos -= (arg_count + 2); frames_on_stack--; diff --git a/Zend/zend_builtin_functions.h b/Zend/zend_builtin_functions.h index 073ed3e06..0a2222ab8 100644 --- a/Zend/zend_builtin_functions.h +++ b/Zend/zend_builtin_functions.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_builtin_functions.h,v 1.17.2.2 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_builtin_functions.h,v 1.17.2.2.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_BUILTIN_FUNCTIONS_H #define ZEND_BUILTIN_FUNCTIONS_H diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d7eb537e9..b928e2799 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.c,v 1.647.2.27.2.20 2006/10/20 02:44:02 iliaa Exp $ */ +/* $Id: zend_compile.c,v 1.647.2.27.2.37 2007/05/02 17:24:15 dmitry Exp $ */ #include <zend_language_parser.h> #include "zend.h" @@ -25,6 +25,7 @@ #include "zend_constants.h" #include "zend_llist.h" #include "zend_API.h" +#include "zend_exceptions.h" #ifdef ZEND_MULTIBYTE #include "zend_multibyte.h" @@ -83,14 +84,13 @@ static void build_runtime_defined_function_key(zval *result, char *name, int nam /* NULL, name length, filename length, last accepting char position length */ result->value.str.len = 1+name_length+strlen(filename)+char_pos_len; - result->value.str.val = (char *) emalloc(result->value.str.len+1); #ifdef ZEND_MULTIBYTE /* must be binary safe */ + result->value.str.val = (char *) safe_emalloc(result->value.str.len, 1, 1); result->value.str.val[0] = '\0'; - memcpy(result->value.str.val+1, name, name_length); - sprintf(result->value.str.val+1+name_length, "%s%s", filename, char_pos_buf); + sprintf(result->value.str.val+1, "%s%s%s", name, filename, char_pos_buf); #else - sprintf(result->value.str.val, "%c%s%s%s", '\0', name, filename, char_pos_buf); + zend_spprintf(&result->value.str.val, 0, "%c%s%s%s", '\0', name, filename, char_pos_buf); #endif /* ZEND_MULTIBYTE */ result->type = IS_STRING; result->refcount = 1; @@ -1067,6 +1067,7 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n int function_begin_line = function_token->u.opline_num; zend_uint fn_flags; char *lcname; + zend_bool orig_interactive; if (is_method) { if (CG(active_class_entry)->ce_flags & ZEND_ACC_INTERFACE) { @@ -1086,11 +1087,14 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n function_token->u.op_array = CG(active_op_array); lcname = zend_str_tolower_dup(name, name_len); + orig_interactive = CG(interactive); + CG(interactive) = 0; init_op_array(&op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE TSRMLS_CC); + CG(interactive) = orig_interactive; op_array.function_name = name; op_array.return_reference = return_reference; - op_array.fn_flags = fn_flags; + op_array.fn_flags |= fn_flags; op_array.pass_rest_by_reference = 0; op_array.scope = is_method?CG(active_class_entry):NULL; @@ -1476,12 +1480,15 @@ void zend_do_begin_class_member_function_call(znode *class_name, znode *method_n opline->op2 = *method_name; if (opline->op2.op_type == IS_CONST) { + char *lcname = zend_str_tolower_dup(Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)); if ((sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == Z_STRLEN(opline->op2.u.constant) && - memcmp(Z_STRVAL(opline->op2.u.constant), ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 0) { + memcmp(lcname, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 0) { zval_dtor(&opline->op2.u.constant); SET_UNUSED(opline->op2); + efree(lcname); } else { - zend_str_tolower(opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len); + efree(opline->op2.u.constant.value.str.val); + opline->op2.u.constant.value.str.val = lcname; } } @@ -1535,11 +1542,10 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) if (original_op==ZEND_SEND_REF && !CG(allow_call_time_pass_reference)) { zend_error(E_COMPILE_WARNING, - "Call-time pass-by-reference has been deprecated - argument passed by value; " + "Call-time pass-by-reference has been deprecated; " "If you would like to pass it by reference, modify the declaration of %s(). " "If you would like to enable call-time pass-by-reference, you can set " - "allow_call_time_pass_reference to true in your INI file. " - "However, future versions may not support this any longer. ", + "allow_call_time_pass_reference to true in your INI file. ", (function_ptr?function_ptr->common.function_name:"[runtime function name]")); } @@ -1686,17 +1692,13 @@ void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC) if (expr) { opline->op1 = *expr; - } else { - opline->op1.op_type = IS_CONST; - INIT_ZVAL(opline->op1.u.constant); - } - if (do_end_vparse) { - if (zend_is_function_or_method_call(expr)) { + if (do_end_vparse && zend_is_function_or_method_call(expr)) { opline->extended_value = ZEND_RETURNS_FUNCTION; - } else { - opline->extended_value = 0; } + } else { + opline->op1.op_type = IS_CONST; + INIT_ZVAL(opline->op1.u.constant); } SET_UNUSED(opline->op2); @@ -1726,16 +1728,35 @@ void zend_do_first_catch(znode *open_parentheses TSRMLS_DC) void zend_initialize_try_catch_element(znode *try_token TSRMLS_DC) { + int jmp_op_number = get_next_op_number(CG(active_op_array)); + zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); + zend_llist jmp_list; + zend_llist *jmp_list_ptr; + + opline->opcode = ZEND_JMP; + SET_UNUSED(opline->op1); + SET_UNUSED(opline->op2); + /* save for backpatching */ + + zend_llist_init(&jmp_list, sizeof(int), NULL, 0); + zend_stack_push(&CG(bp_stack), (void *) &jmp_list, sizeof(zend_llist)); + zend_stack_top(&CG(bp_stack), (void **) &jmp_list_ptr); + zend_llist_add_element(jmp_list_ptr, &jmp_op_number); + zend_add_catch_element(try_token->u.opline_num, get_next_op_number(CG(active_op_array)) TSRMLS_CC); } void zend_do_mark_last_catch(znode *first_catch, znode *last_additional_catch TSRMLS_DC) { + CG(active_op_array)->last--; + zend_do_if_end(TSRMLS_C); if (last_additional_catch->u.opline_num == -1) { CG(active_op_array)->opcodes[first_catch->u.opline_num].op1.u.EA.type = 1; + CG(active_op_array)->opcodes[first_catch->u.opline_num].extended_value = get_next_op_number(CG(active_op_array)); } else { CG(active_op_array)->opcodes[last_additional_catch->u.opline_num].op1.u.EA.type = 1; + CG(active_op_array)->opcodes[last_additional_catch->u.opline_num].extended_value = get_next_op_number(CG(active_op_array)); } DEC_BPC(CG(active_op_array)); } @@ -1772,6 +1793,18 @@ void zend_do_begin_catch(znode *try_token, znode *catch_class, znode *catch_var, void zend_do_end_catch(znode *try_token TSRMLS_DC) { + int jmp_op_number = get_next_op_number(CG(active_op_array)); + zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); + zend_llist *jmp_list_ptr; + + opline->opcode = ZEND_JMP; + SET_UNUSED(opline->op1); + SET_UNUSED(opline->op2); + /* save for backpatching */ + + zend_stack_top(&CG(bp_stack), (void **) &jmp_list_ptr); + zend_llist_add_element(jmp_list_ptr, &jmp_op_number); + CG(active_op_array)->opcodes[try_token->u.opline_num].extended_value = get_next_op_number(CG(active_op_array)); } @@ -2189,13 +2222,18 @@ ZEND_API void zend_do_inherit_interfaces(zend_class_entry *ce, zend_class_entry } } - -static void inherit_static_prop(zval **p) +static int inherit_static_prop(zval **p, int num_args, va_list args, zend_hash_key *key) { - (*p)->refcount++; - (*p)->is_ref = 1; -} + HashTable *target = va_arg(args, HashTable*); + if (!zend_hash_quick_exists(target, key->arKey, key->nKeyLength, key->h)) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(p); + if (zend_hash_quick_add(target, key->arKey, key->nKeyLength, key->h, p, sizeof(zval*), NULL) == SUCCESS) { + (*p)->refcount++; + } + } + return ZEND_HASH_APPLY_KEEP; +} ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce TSRMLS_DC) { @@ -2216,9 +2254,9 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent if (parent_ce->type != ce->type) { /* User class extends internal class */ zend_update_class_constants(parent_ce TSRMLS_CC); - zend_hash_merge(&ce->default_static_members, CE_STATIC_MEMBERS(parent_ce), (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0); + zend_hash_apply_with_arguments(CE_STATIC_MEMBERS(parent_ce), (apply_func_args_t)inherit_static_prop, 1, &ce->default_static_members); } else { - zend_hash_merge(&ce->default_static_members, &parent_ce->default_static_members, (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0); + zend_hash_apply_with_arguments(&parent_ce->default_static_members, (apply_func_args_t)inherit_static_prop, 1, &ce->default_static_members TSRMLS_CC); } zend_hash_merge_ex(&ce->properties_info, &parent_ce->properties_info, (copy_ctor_func_t) (ce->type & ZEND_INTERNAL_CLASS ? zend_duplicate_property_info_internal : zend_duplicate_property_info), sizeof(zend_property_info), (merge_checker_func_t) do_inherit_property_access_check, ce); @@ -2735,19 +2773,22 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod { zend_op *opline; int doing_inheritance = 0; - zend_class_entry *new_class_entry = emalloc(sizeof(zend_class_entry)); - char *lcname = zend_str_tolower_dup(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len); + zend_class_entry *new_class_entry; + char *lcname; if (CG(active_class_entry)) { zend_error(E_COMPILE_ERROR, "Class declarations may not be nested"); return; } + lcname = zend_str_tolower_dup(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len); + if (!(strcmp(lcname, "self") && strcmp(lcname, "parent"))) { efree(lcname); zend_error(E_COMPILE_ERROR, "Cannot use '%s' as class name as it is reserved", class_name->u.constant.value.str.val); } + new_class_entry = emalloc(sizeof(zend_class_entry)); new_class_entry->type = ZEND_USER_CLASS; new_class_entry->name = class_name->u.constant.value.str.val; new_class_entry->name_length = class_name->u.constant.value.str.len; @@ -3060,7 +3101,18 @@ void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS zend_llist_add_element(fetch_list_ptr, &opline); } - +void zend_do_halt_compiler_register(TSRMLS_D) +{ + char *name, *cfilename; + char haltoff[] = "__COMPILER_HALT_OFFSET__"; + int len, clen; + cfilename = zend_get_compiled_filename(TSRMLS_C); + clen = strlen(cfilename); + zend_mangle_property_name(&name, &len, haltoff, + sizeof("__COMPILER_HALT_OFFSET__") - 1, cfilename, clen, 0); + zend_register_long_constant(name, len+1, zend_get_scanned_file_offset(TSRMLS_C), CONST_CS, 0 TSRMLS_CC); + pefree(name, 0); +} void zend_do_declare_implicit_property(TSRMLS_D) { @@ -3382,6 +3434,7 @@ void zend_do_list_end(znode *result, znode *expr TSRMLS_DC) opline->opcode = ZEND_FETCH_DIM_TMP_VAR; break; } + opline->extended_value = ZEND_FETCH_ADD_LOCK; } else { opline->opcode = ZEND_FETCH_DIM_R; } @@ -3393,7 +3446,6 @@ void zend_do_list_end(znode *result, znode *expr TSRMLS_DC) Z_TYPE(opline->op2.u.constant) = IS_LONG; Z_LVAL(opline->op2.u.constant) = *((int *) dimension->data); INIT_PZVAL(&opline->op2.u.constant); - opline->extended_value = ZEND_FETCH_ADD_LOCK; last_container = opline->result; dimension = dimension->next; } @@ -3622,6 +3674,10 @@ void zend_do_instanceof(znode *result, znode *expr, znode *class_znode, int type } } + if (expr->op_type == IS_CONST) { + zend_error(E_COMPILE_ERROR, "instanceof expects an object instance, constant given"); + } + opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->opcode = ZEND_INSTANCEOF; opline->result.op_type = IS_TMP_VAR; @@ -3634,11 +3690,12 @@ void zend_do_instanceof(znode *result, znode *expr, znode *class_znode, int type } -void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, znode *array, int variable TSRMLS_DC) +void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, znode *array, znode *as_token, int variable TSRMLS_DC) { zend_op *opline; zend_bool is_variable; zend_bool push_container = 0; + zend_op dummy_opline; if (variable) { if (zend_is_function_or_method_call(array)) { @@ -3646,6 +3703,8 @@ void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, zno } else { is_variable = 1; } + /* save the location of FETCH_W instruction(s) */ + open_brackets_token->u.opline_num = get_next_op_number(CG(active_op_array)); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); if (CG(active_op_array)->last > 0 && CG(active_op_array)->opcodes[CG(active_op_array)->last-1].opcode == ZEND_FETCH_OBJ_W) { @@ -3657,6 +3716,7 @@ void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, zno } } else { is_variable = 0; + open_brackets_token->u.opline_num = get_next_op_number(CG(active_op_array)); } /* save the location of FE_RESET */ @@ -3671,28 +3731,17 @@ void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, zno opline->op1 = *array; SET_UNUSED(opline->op2); opline->extended_value = is_variable ? ZEND_FE_RESET_VARIABLE : 0; - *open_brackets_token = opline->result; - - { - zend_op dummy_opline; - dummy_opline.result = opline->result; - if (push_container) { - dummy_opline.op1 = CG(active_op_array)->opcodes[CG(active_op_array)->last-2].op1; - } else { - znode tmp; + dummy_opline.result = opline->result; + if (push_container) { + dummy_opline.op1 = CG(active_op_array)->opcodes[CG(active_op_array)->last-2].op1; + } else { + znode tmp; - tmp.op_type = IS_UNUSED; - dummy_opline.op1 = tmp; - } - zend_stack_push(&CG(foreach_copy_stack), (void *) &dummy_opline, sizeof(zend_op)); + tmp.op_type = IS_UNUSED; + dummy_opline.op1 = tmp; } -} - - -void zend_do_foreach_fetch(znode *foreach_token, znode *open_brackets_token, znode *as_token TSRMLS_DC) -{ - zend_op *opline; + zend_stack_push(&CG(foreach_copy_stack), (void *) &dummy_opline, sizeof(zend_op)); /* save the location of FE_FETCH */ as_token->u.opline_num = get_next_op_number(CG(active_op_array)); @@ -3701,7 +3750,7 @@ void zend_do_foreach_fetch(znode *foreach_token, znode *open_brackets_token, zno opline->opcode = ZEND_FE_FETCH; opline->result.op_type = IS_VAR; opline->result.u.var = get_temporary_variable(CG(active_op_array)); - opline->op1 = *open_brackets_token; + opline->op1 = dummy_opline.result; opline->extended_value = 0; SET_UNUSED(opline->op2); @@ -3713,7 +3762,7 @@ void zend_do_foreach_fetch(znode *foreach_token, znode *open_brackets_token, zno } -void zend_do_foreach_cont(znode *foreach_token, znode *as_token, znode *value, znode *key TSRMLS_DC) +void zend_do_foreach_cont(znode *foreach_token, znode *open_brackets_token, znode *as_token, znode *value, znode *key TSRMLS_DC) { zend_op *opline; znode dummy, value_node; @@ -3744,6 +3793,19 @@ void zend_do_foreach_cont(znode *foreach_token, znode *as_token, znode *value, z /* Mark extended_value for assign-by-reference */ opline->extended_value |= ZEND_FE_FETCH_BYREF; CG(active_op_array)->opcodes[foreach_token->u.opline_num].extended_value |= ZEND_FE_RESET_REFERENCE; + } else { + zend_op *foreach_copy; + zend_op *fetch = &CG(active_op_array)->opcodes[foreach_token->u.opline_num]; + zend_op *end = &CG(active_op_array)->opcodes[open_brackets_token->u.opline_num]; + + /* Change "write context" into "read context" */ + fetch->extended_value = 0; /* reset ZEND_FE_RESET_VARIABLE */ + while (fetch != end) { + (--fetch)->opcode -= 3; /* FETCH_W -> FETCH_R */ + } + /* prevent double SWITCH_FREE */ + zend_stack_top(&CG(foreach_copy_stack), (void **) &foreach_copy); + foreach_copy->op1.op_type = IS_UNUSED; } value_node = opline->result; @@ -4127,7 +4189,7 @@ ZEND_API void zend_initialize_class_data(zend_class_entry *ce, zend_bool nullify CG(static_members) = realloc(CG(static_members), (n+1)*sizeof(HashTable*)); CG(static_members)[n] = NULL; } - ce->static_members = (HashTable*)n; + ce->static_members = (HashTable*)(zend_intptr_t)n; #else ce->static_members = NULL; #endif diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index a2f90e288..ee20491c7 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.h,v 1.316.2.8.2.7 2006/09/26 10:30:50 dmitry Exp $ */ +/* $Id: zend_compile.h,v 1.316.2.8.2.11 2007/04/04 00:42:42 iliaa Exp $ */ #ifndef ZEND_COMPILE_H #define ZEND_COMPILE_H @@ -36,9 +36,9 @@ #define SET_UNUSED(op) (op).op_type = IS_UNUSED -#define INC_BPC(op_array) if (CG(interactive)) { ((op_array)->backpatch_count++); } -#define DEC_BPC(op_array) if (CG(interactive)) { ((op_array)->backpatch_count--); } -#define HANDLE_INTERACTIVE() if (CG(interactive)) { execute_new_code(TSRMLS_C); } +#define INC_BPC(op_array) if (op_array->fn_flags & ZEND_ACC_INTERACTIVE) { ((op_array)->backpatch_count++); } +#define DEC_BPC(op_array) if (op_array->fn_flags & ZEND_ACC_INTERACTIVE) { ((op_array)->backpatch_count--); } +#define HANDLE_INTERACTIVE() if (CG(active_op_array)->fn_flags & ZEND_ACC_INTERACTIVE) { execute_new_code(TSRMLS_C); } #define RESET_DOC_COMMENT() \ { \ @@ -116,6 +116,9 @@ typedef struct _zend_try_catch_element { #define ZEND_ACC_FINAL_CLASS 0x40 #define ZEND_ACC_INTERFACE 0x80 +/* op_array flags */ +#define ZEND_ACC_INTERACTIVE 0x10 + /* method flags (visibility) */ /* The order of those must be kept - public < protected < private */ #define ZEND_ACC_PUBLIC 0x100 @@ -447,6 +450,7 @@ void zend_do_declare_class_constant(znode *var_name, znode *value TSRMLS_DC); void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS_DC); +void zend_do_halt_compiler_register(TSRMLS_D); void zend_do_push_object(znode *object TSRMLS_DC); void zend_do_pop_object(znode *object TSRMLS_DC); @@ -476,9 +480,8 @@ void zend_do_isset_or_isempty(int type, znode *result, znode *variable TSRMLS_DC void zend_do_instanceof(znode *result, znode *expr, znode *class_znode, int type TSRMLS_DC); -void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, znode *array, int variable TSRMLS_DC); -void zend_do_foreach_fetch(znode *foreach_token, znode *open_brackets_token, znode *as_token TSRMLS_DC); -void zend_do_foreach_cont(znode *foreach_token, znode *as_token, znode *value, znode *key TSRMLS_DC); +void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, znode *array, znode *as_token, int variable TSRMLS_DC); +void zend_do_foreach_cont(znode *foreach_token, znode *open_brackets_token, znode *as_token, znode *value, znode *key TSRMLS_DC); void zend_do_foreach_end(znode *foreach_token, znode *as_token TSRMLS_DC); void zend_do_declare_begin(TSRMLS_D); diff --git a/Zend/zend_config.nw.h b/Zend/zend_config.nw.h index 47a0df8c2..2f6cab90f 100644 --- a/Zend/zend_config.nw.h +++ b/Zend/zend_config.nw.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_config.nw.h,v 1.8.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_config.nw.h,v 1.8.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_CONFIG_NW_H #define ZEND_CONFIG_NW_H diff --git a/Zend/zend_config.w32.h b/Zend/zend_config.w32.h index 8c9d9e563..13edf5a45 100644 --- a/Zend/zend_config.w32.h +++ b/Zend/zend_config.w32.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_config.w32.h,v 1.39.2.2.2.1 2006/07/18 09:06:32 dmitry Exp $ */ +/* $Id: zend_config.w32.h,v 1.39.2.2.2.2 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_CONFIG_W32_H #define ZEND_CONFIG_W32_H diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 8e8affb56..ac1bdc770 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_constants.c,v 1.71.2.5.2.3 2006/10/18 17:17:18 johannes Exp $ */ +/* $Id: zend_constants.c,v 1.71.2.5.2.5 2007/04/04 00:42:42 iliaa Exp $ */ #include "zend.h" #include "zend_constants.h" @@ -274,10 +274,10 @@ ZEND_API int zend_get_constant_ex(char *name, uint name_len, zval *result, zend_ *result = **ret_constant; zval_copy_ctor(result); } - + return retval; } - + if (zend_hash_find(EG(zend_constants), name, name_len+1, (void **) &c) == FAILURE) { lookup_name = estrndup(name, name_len); zend_str_tolower(lookup_name, name_len); @@ -287,7 +287,26 @@ ZEND_API int zend_get_constant_ex(char *name, uint name_len, zval *result, zend_ retval=0; } } else { - retval=0; + char haltoff[] = "__COMPILER_HALT_OFFSET__"; + if (!EG(in_execution)) { + retval = 0; + } else if (name_len == sizeof("__COMPILER_HALT_OFFSET__") - 1 && memcmp(haltoff, name, name_len) == 0) { + char *cfilename, *haltname; + int len, clen; + cfilename = zend_get_executed_filename(TSRMLS_C); + clen = strlen(cfilename); + /* check for __COMPILER_HALT_OFFSET__ */ + zend_mangle_property_name(&haltname, &len, haltoff, + sizeof("__COMPILER_HALT_OFFSET__") - 1, cfilename, clen, 0); + if (zend_hash_find(EG(zend_constants), haltname, len+1, (void **) &c) == SUCCESS) { + retval = 1; + } else { + retval=0; + } + pefree(haltname, 0); + } else { + retval = 0; + } } efree(lookup_name); } @@ -326,7 +345,8 @@ ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC) name = c->name; } - if (zend_hash_add(EG(zend_constants), name, c->name_len, (void *) c, sizeof(zend_constant), NULL)==FAILURE) { + if ((strncmp(name, "__COMPILER_HALT_OFFSET__", sizeof("__COMPILER_HALT_OFFSET__") - 1) == 0) || + zend_hash_add(EG(zend_constants), name, c->name_len, (void *) c, sizeof(zend_constant), NULL)==FAILURE) { zend_error(E_NOTICE,"Constant %s already defined", name); free(c->name); if (!(c->flags & CONST_PERSISTENT)) { diff --git a/Zend/zend_constants.h b/Zend/zend_constants.h index 1716a8347..295121c85 100644 --- a/Zend/zend_constants.h +++ b/Zend/zend_constants.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_constants.h,v 1.31.2.2.2.1 2006/10/18 16:35:15 johannes Exp $ */ +/* $Id: zend_constants.h,v 1.31.2.2.2.2 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_CONSTANTS_H #define ZEND_CONSTANTS_H diff --git a/Zend/zend_default_classes.c b/Zend/zend_default_classes.c index 50f67cc4d..3139e035d 100644 --- a/Zend/zend_default_classes.c +++ b/Zend/zend_default_classes.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_default_classes.c,v 1.59.2.2 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_default_classes.c,v 1.59.2.2.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #include "zend.h" #include "zend_API.h" diff --git a/Zend/zend_dynamic_array.c b/Zend/zend_dynamic_array.c index 871c1c5bb..402e0724f 100644 --- a/Zend/zend_dynamic_array.c +++ b/Zend/zend_dynamic_array.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_dynamic_array.c,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_dynamic_array.c,v 1.13.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #include "zend.h" diff --git a/Zend/zend_dynamic_array.h b/Zend/zend_dynamic_array.h index 02008c2e1..17ecfe3f2 100644 --- a/Zend/zend_dynamic_array.h +++ b/Zend/zend_dynamic_array.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_dynamic_array.h,v 1.14.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_dynamic_array.h,v 1.14.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_DYNAMIC_ARRAY_H #define ZEND_DYNAMIC_ARRAY_H diff --git a/Zend/zend_errors.h b/Zend/zend_errors.h index 9768c7442..224b0a29d 100644 --- a/Zend/zend_errors.h +++ b/Zend/zend_errors.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_errors.h,v 1.18.2.1.2.4 2006/05/17 19:07:45 helly Exp $ */ +/* $Id: zend_errors.h,v 1.18.2.1.2.5 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_ERRORS_H #define ZEND_ERRORS_H diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index 06eb5dfc1..fe0bf4117 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_exceptions.c,v 1.79.2.6.2.5 2006/07/21 08:39:30 dmitry Exp $ */ +/* $Id: zend_exceptions.c,v 1.79.2.6.2.8 2007/01/18 12:20:15 tony2001 Exp $ */ #include "zend.h" #include "zend_API.h" @@ -32,8 +32,7 @@ zend_class_entry *error_exception_ce; static zend_object_handlers default_exception_handlers; ZEND_API void (*zend_throw_exception_hook)(zval *ex TSRMLS_DC); - -void zend_throw_exception_internal(zval *exception TSRMLS_DC) +void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */ { if (exception != NULL) { if (EG(exception)) { @@ -58,11 +57,9 @@ void zend_throw_exception_internal(zval *exception TSRMLS_DC) EG(opline_before_exception) = EG(current_execute_data)->opline; EG(current_execute_data)->opline = &EG(active_op_array)->opcodes[EG(active_op_array)->last-1-1]; } +/* }}} */ - - - -ZEND_API void zend_clear_exception(TSRMLS_D) +ZEND_API void zend_clear_exception(TSRMLS_D) /* {{{ */ { if (!EG(exception)) { return; @@ -74,8 +71,9 @@ ZEND_API void zend_clear_exception(TSRMLS_D) EG(opline_before_exception) = NULL; #endif } +/* }}} */ -static zend_object_value zend_default_exception_new_ex(zend_class_entry *class_type, int skip_top_traces TSRMLS_DC) +static zend_object_value zend_default_exception_new_ex(zend_class_entry *class_type, int skip_top_traces TSRMLS_DC) /* {{{ */ { zval tmp, obj; zend_object *object; @@ -99,17 +97,19 @@ static zend_object_value zend_default_exception_new_ex(zend_class_entry *class_t return Z_OBJVAL(obj); } +/* }}} */ -static zend_object_value zend_default_exception_new(zend_class_entry *class_type TSRMLS_DC) +static zend_object_value zend_default_exception_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { return zend_default_exception_new_ex(class_type, 0 TSRMLS_CC); } +/* }}} */ -static zend_object_value zend_error_exception_new(zend_class_entry *class_type TSRMLS_DC) +static zend_object_value zend_error_exception_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { return zend_default_exception_new_ex(class_type, 2 TSRMLS_CC); } - +/* }}} */ /* {{{ proto Exception Exception::__clone() Clone the exception object */ @@ -120,7 +120,6 @@ ZEND_METHOD(exception, __clone) } /* }}} */ - /* {{{ proto Exception::__construct(string message, int code) Exception constructor */ ZEND_METHOD(exception, __construct) @@ -146,7 +145,6 @@ ZEND_METHOD(exception, __construct) } /* }}} */ - /* {{{ proto ErrorException::__construct(string message, int code, int severity [, string filename [, int lineno]]) ErrorException constructor */ ZEND_METHOD(error_exception, __construct) @@ -187,7 +185,7 @@ ZEND_METHOD(error_exception, __construct) ZEND_WRONG_PARAM_COUNT(); \ } -static void _default_exception_get_entry(zval *object, char *name, int name_len, zval *return_value TSRMLS_DC) +static void _default_exception_get_entry(zval *object, char *name, int name_len, zval *return_value TSRMLS_DC) /* {{{ */ { zval *value; @@ -197,7 +195,7 @@ static void _default_exception_get_entry(zval *object, char *name, int name_len, zval_copy_ctor(return_value); INIT_PZVAL(return_value); } - +/* }}} */ /* {{{ proto string Exception::getFile() Get the file in which the exception occurred */ @@ -209,7 +207,6 @@ ZEND_METHOD(exception, getFile) } /* }}} */ - /* {{{ proto int Exception::getLine() Get the line in which the exception occurred */ ZEND_METHOD(exception, getLine) @@ -220,7 +217,6 @@ ZEND_METHOD(exception, getLine) } /* }}} */ - /* {{{ proto string Exception::getMessage() Get the exception message */ ZEND_METHOD(exception, getMessage) @@ -231,7 +227,6 @@ ZEND_METHOD(exception, getMessage) } /* }}} */ - /* {{{ proto int Exception::getCode() Get the exception code */ ZEND_METHOD(exception, getCode) @@ -242,7 +237,6 @@ ZEND_METHOD(exception, getCode) } /* }}} */ - /* {{{ proto array Exception::getTrace() Get the stack trace for the location in which the exception occurred */ ZEND_METHOD(exception, getTrace) @@ -253,7 +247,6 @@ ZEND_METHOD(exception, getTrace) } /* }}} */ - /* {{{ proto int ErrorException::getSeverity() Get the exception severity */ ZEND_METHOD(error_exception, getSeverity) @@ -264,7 +257,7 @@ ZEND_METHOD(error_exception, getSeverity) } /* }}} */ -/* {{{ ZEND_METHOD(exception, gettraceasstring) */ +/* {{{ gettraceasstring() macros */ #define TRACE_APPEND_CHR(chr) \ *str = (char*)erealloc(*str, *len + 1 + 1); \ (*str)[(*len)++] = chr @@ -285,7 +278,9 @@ ZEND_METHOD(error_exception, getSeverity) TRACE_APPEND_STRL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)); \ } -static int _build_trace_args(zval **arg, int num_args, va_list args, zend_hash_key *hash_key) +/* }}} */ + +static int _build_trace_args(zval **arg, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */ { char **str; int *len; @@ -381,8 +376,9 @@ static int _build_trace_args(zval **arg, int num_args, va_list args, zend_hash_k } return ZEND_HASH_APPLY_KEEP; } +/* }}} */ -static int _build_trace_string(zval **frame, int num_args, va_list args, zend_hash_key *hash_key) +static int _build_trace_string(zval **frame, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */ { char *s_tmp, **str; int *len, *num; @@ -404,7 +400,7 @@ static int _build_trace_string(zval **frame, int num_args, va_list args, zend_ha } else { line = 0; } - s_tmp = emalloc(Z_STRLEN_PP(file) + MAX_LENGTH_OF_LONG + 2 + 1); + s_tmp = emalloc(Z_STRLEN_PP(file) + MAX_LENGTH_OF_LONG + 4 + 1); sprintf(s_tmp, "%s(%ld): ", Z_STRVAL_PP(file), line); TRACE_APPEND_STRL(s_tmp, strlen(s_tmp)); efree(s_tmp); @@ -425,7 +421,7 @@ static int _build_trace_string(zval **frame, int num_args, va_list args, zend_ha TRACE_APPEND_STR(")\n"); return ZEND_HASH_APPLY_KEEP; } - +/* }}} */ /* {{{ proto string Exception::getTraceAsString() Obtain the backtrace for the exception as a string (instead of an array) */ @@ -448,7 +444,7 @@ ZEND_METHOD(exception, getTraceAsString) } /* }}} */ -int zend_spprintf(char **message, int max_len, char *format, ...) +int zend_spprintf(char **message, int max_len, char *format, ...) /* {{{ */ { va_list arg; int len; @@ -458,7 +454,7 @@ int zend_spprintf(char **message, int max_len, char *format, ...) va_end(arg); return len; } - +/* }}} */ /* {{{ proto string Exception::__toString() Obtain the string representation of the Exception object */ @@ -522,6 +518,7 @@ ZEND_METHOD(exception, __toString) } /* }}} */ +/* {{{ internal structs */ /* All functions that may be used in uncaught exception handlers must be final * and must not throw exceptions. Otherwise we would need a facility to handle * such exceptions in that handler. @@ -564,8 +561,9 @@ static zend_function_entry error_exception_functions[] = { ZEND_ME(error_exception, getSeverity, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) {NULL, NULL, NULL} }; +/* }}} */ -void zend_register_default_exception(TSRMLS_D) +void zend_register_default_exception(TSRMLS_D) /* {{{ */ { zend_class_entry ce; @@ -587,19 +585,21 @@ void zend_register_default_exception(TSRMLS_D) error_exception_ce->create_object = zend_error_exception_new; zend_declare_property_long(error_exception_ce, "severity", sizeof("severity")-1, E_ERROR, ZEND_ACC_PROTECTED TSRMLS_CC); } +/* }}} */ -ZEND_API zend_class_entry *zend_exception_get_default(TSRMLS_D) +ZEND_API zend_class_entry *zend_exception_get_default(TSRMLS_D) /* {{{ */ { return default_exception_ce; } +/* }}} */ -ZEND_API zend_class_entry *zend_get_error_exception(TSRMLS_D) +ZEND_API zend_class_entry *zend_get_error_exception(TSRMLS_D) /* {{{ */ { return error_exception_ce; } +/* }}} */ - -ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, char *message, long code TSRMLS_DC) +ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, char *message, long code TSRMLS_DC) /* {{{ */ { zval *ex; @@ -625,9 +625,9 @@ ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, char *messa zend_throw_exception_internal(ex TSRMLS_CC); return ex; } +/* }}} */ - -ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long code TSRMLS_DC, char *format, ...) +ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long code TSRMLS_DC, char *format, ...) /* {{{ */ { va_list arg; char *message; @@ -640,16 +640,17 @@ ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long cod efree(message); return zexception; } +/* }}} */ - -ZEND_API zval * zend_throw_error_exception(zend_class_entry *exception_ce, char *message, long code, int severity TSRMLS_DC) +ZEND_API zval * zend_throw_error_exception(zend_class_entry *exception_ce, char *message, long code, int severity TSRMLS_DC) /* {{{ */ { zval *ex = zend_throw_exception(exception_ce, message, code TSRMLS_CC); zend_update_property_long(default_exception_ce, ex, "severity", sizeof("severity")-1, severity TSRMLS_CC); return ex; } +/* }}} */ -static void zend_error_va(int type, const char *file, uint lineno, const char *format, ...) +static void zend_error_va(int type, const char *file, uint lineno, const char *format, ...) /* {{{ */ { va_list args; @@ -657,9 +658,10 @@ static void zend_error_va(int type, const char *file, uint lineno, const char *f zend_error_cb(type, file, lineno, format, args); va_end(args); } +/* }}} */ /* This function doesn't return as it calls E_ERROR */ -ZEND_API void zend_exception_error(zval *exception TSRMLS_DC) +ZEND_API void zend_exception_error(zval *exception TSRMLS_DC) /* {{{ */ { zend_class_entry *ce_exception = Z_OBJCE_P(exception); if (instanceof_function(ce_exception, default_exception_ce TSRMLS_CC)) { @@ -698,9 +700,9 @@ ZEND_API void zend_exception_error(zval *exception TSRMLS_DC) zend_error(E_ERROR, "Uncaught exception '%s'", ce_exception->name); } } +/* }}} */ - -ZEND_API void zend_throw_exception_object(zval *exception TSRMLS_DC) +ZEND_API void zend_throw_exception_object(zval *exception TSRMLS_DC) /* {{{ */ { zend_class_entry *exception_ce; @@ -715,6 +717,7 @@ ZEND_API void zend_throw_exception_object(zval *exception TSRMLS_DC) } zend_throw_exception_internal(exception TSRMLS_CC); } +/* }}} */ /* * Local variables: diff --git a/Zend/zend_exceptions.h b/Zend/zend_exceptions.h index 2b08d94ba..683bd502a 100644 --- a/Zend/zend_exceptions.h +++ b/Zend/zend_exceptions.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_exceptions.h,v 1.21.2.1.2.1 2006/05/09 23:53:23 helly Exp $ */ +/* $Id: zend_exceptions.h,v 1.21.2.1.2.2 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_EXCEPTIONS_H #define ZEND_EXCEPTIONS_H diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 3b27bcefb..4b3631cd7 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.c,v 1.716.2.12.2.12 2006/10/02 11:09:52 tony2001 Exp $ */ +/* $Id: zend_execute.c,v 1.716.2.12.2.19 2007/04/16 08:09:54 dmitry Exp $ */ #define ZEND_INTENSIVE_DEBUGGING 0 @@ -64,7 +64,7 @@ static void zend_extension_fcall_end_handler(zend_extension *extension, zend_op_ #define TEMP_VAR_STACK_LIMIT 2000 -static inline void zend_pzval_unlock_func(zval *z, zend_free_op *should_free) +static inline void zend_pzval_unlock_func(zval *z, zend_free_op *should_free, int unref) { if (!--z->refcount) { z->refcount = 1; @@ -73,7 +73,7 @@ static inline void zend_pzval_unlock_func(zval *z, zend_free_op *should_free) /* should_free->is_var = 1; */ } else { should_free->var = 0; - if (z->is_ref && z->refcount == 1) { + if (unref && z->is_ref && z->refcount == 1) { z->is_ref = 0; } } @@ -87,7 +87,8 @@ static inline void zend_pzval_unlock_free_func(zval *z) } } -#define PZVAL_UNLOCK(z, f) zend_pzval_unlock_func(z, f) +#define PZVAL_UNLOCK(z, f) zend_pzval_unlock_func(z, f, 1) +#define PZVAL_UNLOCK_EX(z, f, u) zend_pzval_unlock_func(z, f, u) #define PZVAL_UNLOCK_FREE(z) zend_pzval_unlock_free_func(z) #define PZVAL_LOCK(z) (z)->refcount++ #define RETURN_VALUE_UNUSED(pzn) (((pzn)->u.EA.type & EXT_TYPE_UNUSED)) @@ -103,15 +104,15 @@ static inline void zend_pzval_unlock_free_func(zval *z) #define FREE_OP(should_free) \ if (should_free.var) { \ - if ((long)should_free.var & 1L) { \ - zval_dtor((zval*)((long)should_free.var & ~1L)); \ + if ((zend_uintptr_t)should_free.var & 1L) { \ + zval_dtor((zval*)((zend_uintptr_t)should_free.var & ~1L)); \ } else { \ zval_ptr_dtor(&should_free.var); \ } \ } #define FREE_OP_IF_VAR(should_free) \ - if (should_free.var != NULL && (((long)should_free.var & 1L) == 0)) { \ + if (should_free.var != NULL && (((zend_uintptr_t)should_free.var & 1L) == 0)) { \ zval_ptr_dtor(&should_free.var); \ } @@ -120,9 +121,9 @@ static inline void zend_pzval_unlock_free_func(zval *z) zval_ptr_dtor(&should_free.var); \ } -#define TMP_FREE(z) (zval*)(((long)(z)) | 1L) +#define TMP_FREE(z) (zval*)(((zend_uintptr_t)(z)) | 1L) -#define IS_TMP_FREE(should_free) ((long)should_free.var & 1L) +#define IS_TMP_FREE(should_free) ((zend_uintptr_t)should_free.var & 1L) #define INIT_PZVAL_COPY(z,v) \ (z)->value = (v)->value; \ @@ -411,11 +412,7 @@ static void zend_assign_to_variable_reference(zval **variable_ptr_ptr, zval **va *variable_ptr_ptr = value_ptr; value_ptr->refcount++; - variable_ptr->refcount--; - if (variable_ptr->refcount==0) { - zendi_zval_dtor(*variable_ptr); - FREE_ZVAL(variable_ptr); - } + zval_ptr_dtor(&variable_ptr); } else if (!variable_ptr->is_ref) { if (variable_ptr_ptr == value_ptr_ptr) { SEPARATE_ZVAL(variable_ptr_ptr); @@ -614,7 +611,7 @@ static inline void zend_assign_to_object(znode *result, zval **object_ptr, znode Z_OBJ_HT_P(object)->write_dimension(object, property_name, value TSRMLS_CC); } - if (result && !RETURN_VALUE_UNUSED(result)) { + if (result && !RETURN_VALUE_UNUSED(result) && !EG(exception)) { T(result->u.var).var.ptr = value; T(result->u.var).var.ptr_ptr = &T(result->u.var).var.ptr; /* this is so that we could use it in FETCH_DIM_R, etc. - see bug #27876 */ PZVAL_LOCK(value); @@ -1166,16 +1163,22 @@ static void zend_fetch_dimension_address(temp_variable *result, zval **container overloaded_result = Z_OBJ_HT_P(container)->read_dimension(container, dim, type TSRMLS_CC); if (overloaded_result) { - switch (type) { - case BP_VAR_RW: - case BP_VAR_W: - if (Z_TYPE_P(overloaded_result) != IS_OBJECT - && !overloaded_result->is_ref) { - zend_error_noreturn(E_ERROR, "Objects used as arrays in post/pre increment/decrement must return values by reference"); - } - break; + if (!overloaded_result->is_ref && + (type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET)) { + if (overloaded_result->refcount > 0) { + zval *tmp = overloaded_result; + + ALLOC_ZVAL(overloaded_result); + *overloaded_result = *tmp; + zval_copy_ctor(overloaded_result); + overloaded_result->is_ref = 0; + overloaded_result->refcount = 0; + } + if (Z_TYPE_P(overloaded_result) != IS_OBJECT) { + zend_class_entry *ce = Z_OBJCE_P(container); + zend_error(E_NOTICE, "Indirect modification of overloaded element of %s has no effect", ce->name); + } } - retval = &overloaded_result; } else { retval = &EG(error_zval_ptr); diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 6abe48b08..38dd15204 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.h,v 1.84.2.4.2.4 2006/10/18 16:35:15 johannes Exp $ */ +/* $Id: zend_execute.h,v 1.84.2.4.2.7 2007/04/16 08:09:54 dmitry Exp $ */ #ifndef ZEND_EXECUTE_H #define ZEND_EXECUTE_H @@ -41,6 +41,12 @@ typedef union _temp_variable { zval *str; zend_uint offset; } str_offset; + struct { + zval **ptr_ptr; + zval *ptr; + zend_bool fcall_returned_reference; + HashPointer fe_pos; + } fe; zend_class_entry *class_entry; } temp_variable; @@ -140,7 +146,7 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *sco static inline void zend_ptr_stack_clear_multiple(TSRMLS_D) { void **p = EG(argument_stack).top_element-2; - int delete_count = (ulong) *p; + int delete_count = (int)(zend_uintptr_t) *p; EG(argument_stack).top -= (delete_count+2); while (--delete_count>=0) { @@ -154,7 +160,7 @@ static inline void zend_ptr_stack_clear_multiple(TSRMLS_D) static inline int zend_ptr_stack_get_arg(int requested_arg, void **data TSRMLS_DC) { void **p = EG(argument_stack).top_element-2; - int arg_count = (ulong) *p; + int arg_count = (int)(zend_uintptr_t) *p; if (requested_arg>arg_count) { return FAILURE; diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index cf14a2b98..b7b9cef7f 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute_API.c,v 1.331.2.20.2.10 2006/10/18 17:04:49 johannes Exp $ */ +/* $Id: zend_execute_API.c,v 1.331.2.20.2.19 2007/04/27 08:12:24 tony2001 Exp $ */ #include <stdio.h> #include <signal.h> @@ -451,7 +451,7 @@ ZEND_API int zend_is_true(zval *op) ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *scope TSRMLS_DC) { zval *p = *pp; - zend_bool inline_change = (zend_bool) (unsigned long) arg; + zend_bool inline_change = (zend_bool) (zend_uintptr_t) arg; zval const_value; if (Z_TYPE_P(p) == IS_CONSTANT) { @@ -622,6 +622,8 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS char *fname, *colon; int fname_len; + *fci->retval_ptr_ptr = NULL; + if (!EG(active)) { return FAILURE; /* executor is already inactive */ } @@ -652,11 +654,6 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS memset(&execute_data, 0, sizeof(zend_execute_data)); } - /* we may return SUCCESS, and yet retval may be uninitialized, - * if there was an exception... - */ - *fci->retval_ptr_ptr = NULL; - if (!fci_cache || !fci_cache->initialized) { if (Z_TYPE_P(fci->function_name)==IS_ARRAY) { /* assume array($obj, $name) couple */ zval **tmp_object_ptr, **tmp_real_function_name; @@ -750,7 +747,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS fname = Z_STRVAL_P(fci->function_name); fname_len = Z_STRLEN_P(fci->function_name); - if (calling_scope && (colon = strstr(fname, "::")) != NULL) { + if ((colon = strstr(fname, "::")) != NULL) { int clen = colon - fname; int mlen = fname_len - clen - 2; zend_class_entry **pce, *ce_child = NULL; @@ -867,9 +864,14 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS if (fci->no_separation) { if(i) { /* hack to clean up the stack */ - zend_ptr_stack_n_push(&EG(argument_stack), 2, (void *) (long) i, NULL); + zend_ptr_stack_n_push(&EG(argument_stack), 2, (void *) (zend_uintptr_t) i, NULL); zend_ptr_stack_clear_multiple(TSRMLS_C); } + + if (call_via_handler) { + zval_ptr_dtor(&method_name); + zval_ptr_dtor(¶ms_array); + } return FAILURE; } ALLOC_ZVAL(new_zval); @@ -903,7 +905,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS fci->param_count = 2; } - zend_ptr_stack_2_push(&EG(argument_stack), (void *) (long) fci->param_count, NULL); + zend_ptr_stack_2_push(&EG(argument_stack), (void *) (zend_uintptr_t) fci->param_count, NULL); original_function_state_ptr = EG(function_state_ptr); EG(function_state_ptr) = &EX(function_state); @@ -1013,7 +1015,7 @@ ZEND_API int zend_lookup_class_ex(char *name, int name_length, int use_autoload, zend_fcall_info fcall_info; zend_fcall_info_cache fcall_cache; - if (name == NULL) { + if (name == NULL || !name_length) { return FAILURE; } @@ -1113,11 +1115,14 @@ ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSR int retval; if (retval_ptr) { - pv.value.str.len = strlen(str)+sizeof("return ;")-1; - pv.value.str.val = emalloc(pv.value.str.len+1); - strcpy(pv.value.str.val, "return "); - strcat(pv.value.str.val, str); - strcat(pv.value.str.val, " ;"); + int l = strlen(str); + Z_STRLEN(pv) = l+sizeof("return ;")-1; + Z_STRVAL(pv) = emalloc(Z_STRLEN(pv) + 1); + memcpy(Z_STRVAL(pv), "return ", sizeof("return ")-1); + memcpy(Z_STRVAL(pv) + sizeof("return ")-1, str, l); + Z_STRVAL(pv)[Z_STRLEN(pv)-2] = ' '; + Z_STRVAL(pv)[Z_STRLEN(pv)-1] = ';'; + Z_STRVAL(pv)[Z_STRLEN(pv)] = '\0'; } else { pv.value.str.len = strlen(str); pv.value.str.val = estrndup(str, pv.value.str.len); @@ -1189,7 +1194,7 @@ void execute_new_code(TSRMLS_D) zend_op *ret_opline; zval *local_retval=NULL; - if (!CG(interactive) + if (!(CG(active_op_array)->fn_flags & ZEND_ACC_INTERACTIVE) || CG(active_op_array)->backpatch_count>0 || CG(active_op_array)->function_name || CG(active_op_array)->type!=ZEND_USER_FUNCTION) { @@ -1381,6 +1386,9 @@ void zend_set_timeout(long seconds) TSRMLS_FETCH(); EG(timeout_seconds) = seconds; + if(!seconds) { + return; + } #ifdef ZEND_WIN32 if (timeout_thread_initialized==0 && InterlockedIncrement(&timeout_thread_initialized)==1) { /* We start up this process-wide thread here and not in zend_startup(), because if Zend @@ -1419,7 +1427,9 @@ void zend_set_timeout(long seconds) void zend_unset_timeout(TSRMLS_D) { #ifdef ZEND_WIN32 - PostThreadMessage(timeout_thread_id, WM_UNREGISTER_ZEND_TIMEOUT, (WPARAM) GetCurrentThreadId(), (LPARAM) 0); + if(timeout_thread_initialized) { + PostThreadMessage(timeout_thread_id, WM_UNREGISTER_ZEND_TIMEOUT, (WPARAM) GetCurrentThreadId(), (LPARAM) 0); + } #else # ifdef HAVE_SETITIMER { diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c index 11fa6881e..22322f5a6 100644 --- a/Zend/zend_extensions.c +++ b/Zend/zend_extensions.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_extensions.c,v 1.48.2.1.2.1 2006/05/09 23:53:23 helly Exp $ */ +/* $Id: zend_extensions.c,v 1.48.2.1.2.2 2007/01/01 09:35:46 sebastian Exp $ */ #include "zend_extensions.h" diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h index 4006035d5..84a8c0ef7 100644 --- a/Zend/zend_extensions.h +++ b/Zend/zend_extensions.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_extensions.h,v 1.67.2.3.2.2 2006/05/19 06:09:14 dmitry Exp $ */ +/* $Id: zend_extensions.h,v 1.67.2.3.2.3 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_EXTENSIONS_H #define ZEND_EXTENSIONS_H diff --git a/Zend/zend_fast_cache.h b/Zend/zend_fast_cache.h index 1fb5bca07..885d17432 100644 --- a/Zend/zend_fast_cache.h +++ b/Zend/zend_fast_cache.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_fast_cache.h,v 1.21.2.1.2.1 2006/07/18 09:06:33 dmitry Exp $ */ +/* $Id: zend_fast_cache.h,v 1.21.2.1.2.2 2007/01/01 09:35:46 sebastian Exp $ */ #if 0 #ifndef ZEND_FAST_CACHE_H #define ZEND_FAST_CACHE_H diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index 4bc99cfee..1371ac763 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_globals.h,v 1.141.2.3.2.6 2006/09/11 14:30:03 tony2001 Exp $ */ +/* $Id: zend_globals.h,v 1.141.2.3.2.7 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_GLOBALS_H #define ZEND_GLOBALS_H diff --git a/Zend/zend_globals_macros.h b/Zend/zend_globals_macros.h index f18296647..129400863 100644 --- a/Zend/zend_globals_macros.h +++ b/Zend/zend_globals_macros.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_globals_macros.h,v 1.22.2.1.2.2 2006/07/18 09:06:33 dmitry Exp $ */ +/* $Id: zend_globals_macros.h,v 1.22.2.1.2.4 2007/02/16 08:54:17 dmitry Exp $ */ #ifndef ZEND_GLOBALS_MACROS_H #define ZEND_GLOBALS_MACROS_H @@ -26,12 +26,12 @@ typedef struct _zend_compiler_globals zend_compiler_globals; typedef struct _zend_executor_globals zend_executor_globals; typedef struct _zend_scanner_globals zend_scanner_globals; +BEGIN_EXTERN_C() + /* Compiler */ #ifdef ZTS # define CG(v) TSRMG(compiler_globals_id, zend_compiler_globals *, v) -BEGIN_EXTERN_C() int zendparse(void *compiler_globals); -END_EXTERN_C() #else # define CG(v) (compiler_globals.v) extern ZEND_API struct _zend_compiler_globals compiler_globals; @@ -66,6 +66,7 @@ extern ZEND_API ts_rsrc_id ini_scanner_globals_id; extern ZEND_API zend_scanner_globals ini_scanner_globals; #endif +END_EXTERN_C() /* For limited downwards source compatibility */ #define CLS_FETCH() diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index f637ecef2..f2099fe21 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_hash.c,v 1.121.2.4.2.1 2006/08/24 09:42:35 dmitry Exp $ */ +/* $Id: zend_hash.c,v 1.121.2.4.2.7 2007/02/21 14:11:00 dmitry Exp $ */ #include "zend.h" @@ -141,11 +141,16 @@ ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunctio SET_INCONSISTENT(HT_OK); - while ((1U << i) < nSize) { - i++; + if (nSize >= 0x80000000) { + /* prevent overflow */ + ht->nTableSize = 0x80000000; + } else { + while ((1U << i) < nSize) { + i++; + } + ht->nTableSize = 1 << i; } - ht->nTableSize = 1 << i; ht->nTableMask = ht->nTableSize - 1; ht->pDestructor = pDestructor; ht->arBuckets = NULL; @@ -647,12 +652,15 @@ ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht) SET_INCONSISTENT(HT_DESTROYED); } -/* This is used to selectively delete certain entries from a hashtable. - * destruct() receives the data and decides if the entry should be deleted - * or not +/* This is used to recurse elements and selectively delete certain entries + * from a hashtable. apply_func() receives the data and decides if the entry + * should be deleted or recursion should be stopped. The following three + * return codes are possible: + * ZEND_HASH_APPLY_KEEP - continue + * ZEND_HASH_APPLY_STOP - stop iteration + * ZEND_HASH_APPLY_REMOVE - delete the element, combineable with the former */ - ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC) { Bucket *p; @@ -662,11 +670,16 @@ ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC) HASH_PROTECT_RECURSION(ht); p = ht->pListHead; while (p != NULL) { - if (apply_func(p->pData TSRMLS_CC)) { + int result = apply_func(p->pData TSRMLS_CC); + + if (result & ZEND_HASH_APPLY_REMOVE) { p = zend_hash_apply_deleter(ht, p); } else { p = p->pListNext; } + if (result & ZEND_HASH_APPLY_STOP) { + break; + } } HASH_UNPROTECT_RECURSION(ht); } @@ -681,17 +694,22 @@ ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t appl HASH_PROTECT_RECURSION(ht); p = ht->pListHead; while (p != NULL) { - if (apply_func(p->pData, argument TSRMLS_CC)) { + int result = apply_func(p->pData, argument TSRMLS_CC); + + if (result & ZEND_HASH_APPLY_REMOVE) { p = zend_hash_apply_deleter(ht, p); } else { p = p->pListNext; } + if (result & ZEND_HASH_APPLY_STOP) { + break; + } } HASH_UNPROTECT_RECURSION(ht); } -ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t destruct, int num_args, ...) +ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t apply_func, int num_args, ...) { Bucket *p; va_list args; @@ -703,15 +721,21 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t de p = ht->pListHead; while (p != NULL) { + int result; va_start(args, num_args); hash_key.arKey = p->arKey; hash_key.nKeyLength = p->nKeyLength; hash_key.h = p->h; - if (destruct(p->pData, num_args, args, &hash_key)) { + result = apply_func(p->pData, num_args, args, &hash_key); + + if (result & ZEND_HASH_APPLY_REMOVE) { p = zend_hash_apply_deleter(ht, p); } else { p = p->pListNext; } + if (result & ZEND_HASH_APPLY_STOP) { + break; + } va_end(args); } @@ -754,7 +778,7 @@ ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_fun p = source->pListHead; while (p) { if (p->nKeyLength) { - zend_hash_update(target, p->arKey, p->nKeyLength, p->pData, size, &new_entry); + zend_hash_quick_update(target, p->arKey, p->nKeyLength, p->h, p->pData, size, &new_entry); } else { zend_hash_index_update(target, p->h, p->pData, size, &new_entry); } @@ -779,7 +803,7 @@ ZEND_API void _zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_f p = source->pListHead; while (p) { if (p->nKeyLength>0) { - if (_zend_hash_add_or_update(target, p->arKey, p->nKeyLength, p->pData, size, &t, mode ZEND_FILE_LINE_RELAY_CC)==SUCCESS && pCopyConstructor) { + if (_zend_hash_quick_add_or_update(target, p->arKey, p->nKeyLength, p->h, p->pData, size, &t, mode ZEND_FILE_LINE_RELAY_CC)==SUCCESS && pCopyConstructor) { pCopyConstructor(t); } } else { @@ -987,6 +1011,39 @@ ZEND_API int zend_hash_num_elements(HashTable *ht) } +ZEND_API int zend_hash_get_pointer(HashTable *ht, HashPointer *ptr) +{ + ptr->pos = ht->pInternalPointer; + if (ht->pInternalPointer) { + ptr->h = ht->pInternalPointer->h; + return 1; + } else { + ptr->h = 0; + return 0; + } +} + +ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr) +{ + if (ptr->pos == NULL) { + ht->pInternalPointer = NULL; + } else if (ht->pInternalPointer != ptr->pos) { + Bucket *p; + + IS_CONSISTENT(ht); + p = ht->arBuckets[ptr->h & ht->nTableMask]; + while (p != NULL) { + if (p == ptr->pos) { + ht->pInternalPointer = p; + return 1; + } + p = p->pNext; + } + return 0; + } + return 1; +} + ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos) { IS_CONSISTENT(ht); diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index 3fab17b45..f110663bd 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_hash.h,v 1.78.2.2 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_hash.h,v 1.78.2.2.2.2 2007/01/10 15:58:07 dmitry Exp $ */ #ifndef ZEND_HASH_H #define ZEND_HASH_H @@ -176,6 +176,14 @@ ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *p ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos); ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, char *str_index, uint str_length, ulong num_index, HashPosition *pos); +typedef struct _HashPointer { + HashPosition pos; + ulong h; +} HashPointer; + +ZEND_API int zend_hash_get_pointer(HashTable *ht, HashPointer *ptr); +ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr); + #define zend_hash_has_more_elements(ht) \ zend_hash_has_more_elements_ex(ht, NULL) #define zend_hash_move_forward(ht) \ diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c index 86f111868..aae51e218 100644 --- a/Zend/zend_highlight.c +++ b/Zend/zend_highlight.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_highlight.c,v 1.49.2.3 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_highlight.c,v 1.49.2.3.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #include "zend.h" #include <zend_language_parser.h> diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h index e90d1dd56..805220b6a 100644 --- a/Zend/zend_highlight.h +++ b/Zend/zend_highlight.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_highlight.h,v 1.25.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_highlight.h,v 1.25.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_HIGHLIGHT_H #define ZEND_HIGHLIGHT_H diff --git a/Zend/zend_indent.c b/Zend/zend_indent.c index 7d6fb4abf..5b2340fd5 100644 --- a/Zend/zend_indent.c +++ b/Zend/zend_indent.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_indent.c,v 1.24.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_indent.c,v 1.24.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ /* This indenter doesn't really work, it's here for no particular reason. */ diff --git a/Zend/zend_indent.h b/Zend/zend_indent.h index f4fdfc7c1..9c720e4c9 100644 --- a/Zend/zend_indent.h +++ b/Zend/zend_indent.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_indent.h,v 1.17.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_indent.h,v 1.17.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_INDENT_H #define ZEND_INDENT_H diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c index d17abf22a..d3311c10c 100644 --- a/Zend/zend_ini.c +++ b/Zend/zend_ini.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini.c,v 1.39.2.2.2.3 2006/09/06 08:54:44 dmitry Exp $ */ +/* $Id: zend_ini.c,v 1.39.2.2.2.8 2007/04/16 08:09:54 dmitry Exp $ */ #include "zend.h" #include "zend_qsort.h" @@ -126,7 +126,6 @@ ZEND_API int zend_copy_ini_directives(TSRMLS_D) return FAILURE; } zend_hash_copy(EG(ini_directives), registered_zend_ini_directives, NULL, &ini_entry, sizeof(zend_ini_entry)); - zend_ini_refresh_caches(ZEND_INI_STAGE_STARTUP TSRMLS_CC); return SUCCESS; } #endif @@ -214,6 +213,7 @@ ZEND_API void zend_unregister_ini_entries(int module_number TSRMLS_DC) } +#ifdef ZTS static int zend_ini_refresh_cache(zend_ini_entry *p, int stage TSRMLS_DC) { if (p->on_modify) { @@ -225,8 +225,9 @@ static int zend_ini_refresh_cache(zend_ini_entry *p, int stage TSRMLS_DC) ZEND_API void zend_ini_refresh_caches(int stage TSRMLS_DC) { - zend_hash_apply_with_argument(EG(ini_directives), (apply_func_arg_t) zend_ini_refresh_cache, (void *)(long) stage TSRMLS_CC); + zend_hash_apply_with_argument(EG(ini_directives), (apply_func_arg_t) zend_ini_refresh_cache, (void *)(zend_intptr_t) stage TSRMLS_CC); } +#endif ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage) @@ -356,7 +357,7 @@ ZEND_API char *zend_ini_string(char *name, uint name_length, int orig) return ""; } - +#if TONY_20070307 static void zend_ini_displayer_cb(zend_ini_entry *ini_entry, int type) { if (ini_entry->displayer) { @@ -393,7 +394,7 @@ static void zend_ini_displayer_cb(zend_ini_entry *ini_entry, int type) ZEND_WRITE(display_string, display_string_length); } } - +#endif ZEND_INI_DISP(zend_ini_boolean_displayer_cb) { @@ -529,6 +530,28 @@ ZEND_API ZEND_INI_MH(OnUpdateLong) return SUCCESS; } +ZEND_API ZEND_INI_MH(OnUpdateLongGEZero) +{ + long *p, tmp; +#ifndef ZTS + char *base = (char *) mh_arg2; +#else + char *base; + + base = (char *) ts_resource(*((int *) mh_arg2)); +#endif + + tmp = zend_atoi(new_value, new_value_length); + if (tmp < 0) { + return FAILURE; + } + + p = (long *) (base+(size_t) mh_arg1); + *p = tmp; + + return SUCCESS; +} + ZEND_API ZEND_INI_MH(OnUpdateReal) { diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h index 0880b9537..b23cca359 100644 --- a/Zend/zend_ini.h +++ b/Zend/zend_ini.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini.h,v 1.34.2.1.2.1 2006/09/19 20:33:12 dmitry Exp $ */ +/* $Id: zend_ini.h,v 1.34.2.1.2.3 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_INI_H #define ZEND_INI_H @@ -175,6 +175,7 @@ END_EXTERN_C() BEGIN_EXTERN_C() ZEND_API ZEND_INI_MH(OnUpdateBool); ZEND_API ZEND_INI_MH(OnUpdateLong); +ZEND_API ZEND_INI_MH(OnUpdateLongGEZero); ZEND_API ZEND_INI_MH(OnUpdateReal); ZEND_API ZEND_INI_MH(OnUpdateString); ZEND_API ZEND_INI_MH(OnUpdateStringUnempty); diff --git a/Zend/zend_ini_scanner.h b/Zend/zend_ini_scanner.h index 9be3a1530..ed849c70b 100644 --- a/Zend/zend_ini_scanner.h +++ b/Zend/zend_ini_scanner.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_scanner.h,v 1.14.2.1.2.1 2006/09/19 20:33:12 dmitry Exp $ */ +/* $Id: zend_ini_scanner.h,v 1.14.2.1.2.2 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef _ZEND_INI_SCANNER_H #define _ZEND_INI_SCANNER_H diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index 3be8a56c5..0b386092d 100755 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_interfaces.c,v 1.33.2.4.2.4 2006/08/28 10:27:58 tony2001 Exp $ */ +/* $Id: zend_interfaces.c,v 1.33.2.4.2.5 2007/01/01 09:35:46 sebastian Exp $ */ #include "zend.h" #include "zend_API.h" diff --git a/Zend/zend_interfaces.h b/Zend/zend_interfaces.h index 1b69c43d2..94464c50f 100755 --- a/Zend/zend_interfaces.h +++ b/Zend/zend_interfaces.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_interfaces.h,v 1.11.2.1.2.1 2006/05/11 08:11:45 helly Exp $ */ +/* $Id: zend_interfaces.h,v 1.11.2.1.2.2 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_INTERFACES_H #define ZEND_INTERFACES_H diff --git a/Zend/zend_istdiostream.h b/Zend/zend_istdiostream.h index 27f57081d..a06fa97be 100644 --- a/Zend/zend_istdiostream.h +++ b/Zend/zend_istdiostream.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_istdiostream.h,v 1.6.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_istdiostream.h,v 1.6.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef _ZEND_STDIOSTREAM #define _ZEND_STDIOSTREAM diff --git a/Zend/zend_iterators.c b/Zend/zend_iterators.c index eef5e6b05..8ea7ca8ca 100755 --- a/Zend/zend_iterators.c +++ b/Zend/zend_iterators.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_iterators.c,v 1.12.2.1.2.1 2006/05/09 23:53:23 helly Exp $ */ +/* $Id: zend_iterators.c,v 1.12.2.1.2.2 2007/01/01 09:35:46 sebastian Exp $ */ #include "zend.h" #include "zend_API.h" diff --git a/Zend/zend_iterators.h b/Zend/zend_iterators.h index 264130eb9..adb3fcc19 100755 --- a/Zend/zend_iterators.h +++ b/Zend/zend_iterators.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_iterators.h,v 1.10.2.1.2.1 2006/05/09 23:53:23 helly Exp $ */ +/* $Id: zend_iterators.h,v 1.10.2.1.2.2 2007/01/01 09:35:46 sebastian Exp $ */ /* These iterators were designed to operate within the foreach() * structures provided by the engine, but could be extended for use diff --git a/Zend/zend_language_parser.c b/Zend/zend_language_parser.c index 154f71c47..28af7793d 100644 --- a/Zend/zend_language_parser.c +++ b/Zend/zend_language_parser.c @@ -339,7 +339,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_parser.y,v 1.160.2.4.2.1 2006/05/11 21:07:39 helly Exp $ */ +/* $Id: zend_language_parser.y,v 1.160.2.4.2.4 2007/04/04 00:42:42 iliaa Exp $ */ /* * LALR shift/reduce conflicts and how they are resolved: @@ -615,16 +615,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 4041 +#define YYLAST 4077 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 150 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 170 +#define YYNNTS 168 /* YYNRULES -- Number of rules. */ -#define YYNRULES 424 +#define YYNRULES 422 /* YYNRULES -- Number of states. */ -#define YYNSTATES 787 +#define YYNSTATES 785 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -686,186 +686,185 @@ static const yytype_uint16 yyprhs[] = 46, 47, 57, 58, 59, 72, 73, 74, 82, 83, 84, 94, 95, 96, 97, 110, 111, 118, 121, 125, 128, 132, 135, 139, 143, 147, 151, 155, 157, 160, - 164, 170, 171, 172, 173, 185, 186, 187, 188, 200, - 201, 208, 210, 211, 212, 213, 214, 215, 234, 238, - 240, 241, 243, 246, 247, 248, 259, 261, 265, 267, - 269, 273, 275, 277, 278, 280, 281, 282, 294, 295, - 304, 305, 313, 315, 318, 321, 322, 325, 327, 328, - 331, 332, 335, 337, 341, 342, 345, 347, 350, 352, - 357, 359, 364, 366, 371, 375, 381, 385, 390, 395, - 401, 402, 403, 410, 411, 417, 419, 421, 423, 428, - 429, 430, 438, 439, 440, 449, 450, 453, 454, 458, - 460, 461, 464, 468, 474, 479, 484, 490, 498, 505, - 506, 508, 510, 512, 513, 515, 517, 520, 524, 528, - 533, 537, 539, 541, 544, 549, 553, 559, 561, 565, - 568, 569, 570, 575, 578, 579, 580, 591, 593, 597, - 599, 601, 602, 604, 606, 609, 611, 613, 615, 617, - 619, 621, 625, 631, 633, 637, 643, 648, 652, 654, - 655, 657, 658, 663, 665, 666, 674, 678, 683, 684, - 692, 693, 698, 701, 705, 709, 713, 717, 721, 725, - 729, 733, 737, 741, 745, 748, 751, 754, 757, 758, - 763, 764, 769, 770, 775, 776, 781, 785, 789, 793, - 797, 801, 805, 809, 813, 817, 821, 825, 829, 832, - 835, 838, 841, 845, 849, 853, 857, 861, 865, 869, - 873, 877, 881, 882, 883, 891, 893, 896, 899, 902, - 905, 908, 911, 914, 917, 918, 922, 924, 929, 933, - 936, 937, 943, 944, 952, 953, 961, 962, 968, 970, - 972, 974, 975, 976, 983, 985, 988, 989, 992, 993, - 996, 1000, 1001, 1005, 1007, 1009, 1011, 1013, 1015, 1017, - 1019, 1021, 1023, 1025, 1028, 1031, 1036, 1038, 1042, 1044, - 1046, 1048, 1050, 1054, 1058, 1062, 1063, 1066, 1067, 1069, - 1075, 1079, 1083, 1085, 1087, 1089, 1091, 1092, 1095, 1096, - 1099, 1100, 1101, 1109, 1111, 1114, 1115, 1116, 1121, 1122, - 1127, 1128, 1130, 1133, 1137, 1139, 1141, 1143, 1146, 1148, - 1153, 1158, 1160, 1162, 1167, 1168, 1170, 1172, 1173, 1176, - 1181, 1186, 1188, 1190, 1194, 1196, 1199, 1203, 1205, 1207, - 1208, 1214, 1215, 1216, 1219, 1225, 1229, 1233, 1235, 1242, - 1247, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, - 1279, 1282, 1285, 1288, 1289, 1291, 1292, 1298, 1302, 1306, - 1313, 1317, 1319, 1321, 1323, 1328, 1333, 1336, 1339, 1344, - 1347, 1350, 1352, 1353, 1358 + 164, 170, 171, 172, 183, 184, 185, 196, 197, 204, + 206, 207, 208, 209, 210, 211, 230, 234, 236, 237, + 239, 242, 243, 244, 255, 257, 261, 263, 265, 269, + 271, 273, 274, 276, 277, 278, 290, 291, 300, 301, + 309, 311, 314, 317, 318, 321, 323, 324, 327, 328, + 331, 333, 337, 338, 341, 343, 346, 348, 353, 355, + 360, 362, 367, 371, 377, 381, 386, 391, 397, 398, + 399, 406, 407, 413, 415, 417, 419, 424, 425, 426, + 434, 435, 436, 445, 446, 449, 450, 454, 456, 457, + 460, 464, 470, 475, 480, 486, 494, 501, 502, 504, + 506, 508, 509, 511, 513, 516, 520, 524, 529, 533, + 535, 537, 540, 545, 549, 555, 557, 561, 564, 565, + 566, 571, 574, 575, 576, 587, 589, 593, 595, 597, + 598, 600, 602, 605, 607, 609, 611, 613, 615, 617, + 621, 627, 629, 633, 639, 644, 648, 650, 651, 653, + 654, 659, 661, 662, 670, 674, 679, 680, 688, 689, + 694, 697, 701, 705, 709, 713, 717, 721, 725, 729, + 733, 737, 741, 744, 747, 750, 753, 754, 759, 760, + 765, 766, 771, 772, 777, 781, 785, 789, 793, 797, + 801, 805, 809, 813, 817, 821, 825, 828, 831, 834, + 837, 841, 845, 849, 853, 857, 861, 865, 869, 873, + 877, 878, 879, 887, 889, 892, 895, 898, 901, 904, + 907, 910, 913, 914, 918, 920, 925, 929, 932, 933, + 939, 940, 948, 949, 957, 958, 964, 966, 968, 970, + 971, 972, 979, 981, 984, 985, 988, 989, 992, 996, + 997, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, + 1019, 1021, 1024, 1027, 1032, 1034, 1038, 1040, 1042, 1044, + 1046, 1050, 1054, 1058, 1059, 1062, 1063, 1065, 1071, 1075, + 1079, 1081, 1083, 1085, 1087, 1088, 1091, 1092, 1095, 1096, + 1097, 1105, 1107, 1110, 1111, 1112, 1117, 1118, 1123, 1124, + 1126, 1129, 1133, 1135, 1137, 1139, 1142, 1144, 1149, 1154, + 1156, 1158, 1163, 1164, 1166, 1168, 1169, 1172, 1177, 1182, + 1184, 1186, 1190, 1192, 1195, 1199, 1201, 1203, 1204, 1210, + 1211, 1212, 1215, 1221, 1225, 1229, 1231, 1238, 1243, 1248, + 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, + 1281, 1284, 1285, 1287, 1288, 1294, 1298, 1302, 1309, 1313, + 1315, 1317, 1319, 1324, 1329, 1332, 1335, 1340, 1343, 1346, + 1348, 1349, 1354 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { 151, 0, -1, 152, -1, -1, 152, 153, 154, -1, - -1, 158, -1, 192, -1, 193, -1, 115, 140, 141, + -1, 158, -1, 190, -1, 191, -1, 115, 140, 141, 142, -1, -1, 155, 156, 157, -1, -1, 158, -1, - 192, -1, 193, -1, 115, 140, 141, 142, -1, 159, - -1, 143, 155, 144, -1, -1, -1, 65, 140, 281, - 141, 160, 158, 161, 219, 223, -1, -1, -1, 65, - 140, 281, 141, 26, 162, 155, 163, 221, 224, 68, - 142, -1, -1, -1, 82, 140, 164, 281, 141, 165, - 218, -1, -1, -1, 81, 166, 158, 82, 140, 167, - 281, 141, 142, -1, -1, -1, -1, 84, 140, 246, - 142, 168, 246, 142, 169, 246, 141, 170, 209, -1, - -1, 91, 140, 281, 141, 171, 213, -1, 95, 142, - -1, 95, 281, 142, -1, 96, 142, -1, 96, 281, - 142, -1, 99, 142, -1, 99, 249, 142, -1, 99, - 287, 142, -1, 104, 230, 142, -1, 110, 232, 142, - -1, 80, 245, 142, -1, 75, -1, 281, 142, -1, - 103, 191, 142, -1, 112, 140, 189, 141, 142, -1, - -1, -1, -1, 86, 140, 287, 172, 90, 173, 208, - 207, 141, 174, 210, -1, -1, -1, -1, 86, 140, - 249, 175, 90, 176, 287, 207, 141, 177, 210, -1, - -1, 88, 178, 140, 212, 141, 211, -1, 142, -1, - -1, -1, -1, -1, -1, 100, 179, 143, 155, 144, - 101, 140, 180, 265, 181, 73, 141, 182, 143, 155, - 144, 183, 184, -1, 102, 281, 142, -1, 185, -1, - -1, 186, -1, 185, 186, -1, -1, -1, 101, 140, - 265, 187, 73, 141, 188, 143, 155, 144, -1, 190, - -1, 189, 8, 190, -1, 287, -1, 79, -1, 140, - 79, 141, -1, 195, -1, 198, -1, -1, 31, -1, - -1, -1, 97, 196, 194, 71, 197, 140, 225, 141, - 143, 155, 144, -1, -1, 201, 71, 202, 199, 205, - 143, 233, 144, -1, -1, 203, 71, 200, 204, 143, - 233, 144, -1, 116, -1, 109, 116, -1, 108, 116, - -1, -1, 118, 265, -1, 117, -1, -1, 118, 206, - -1, -1, 119, 206, -1, 265, -1, 206, 8, 265, - -1, -1, 121, 208, -1, 287, -1, 31, 287, -1, - 158, -1, 26, 155, 85, 142, -1, 158, -1, 26, - 155, 87, 142, -1, 158, -1, 26, 155, 89, 142, - -1, 71, 13, 275, -1, 212, 8, 71, 13, 275, - -1, 143, 214, 144, -1, 143, 142, 214, 144, -1, - 26, 214, 92, 142, -1, 26, 142, 214, 92, 142, - -1, -1, -1, 214, 93, 281, 217, 215, 155, -1, - -1, 214, 94, 217, 216, 155, -1, 26, -1, 142, - -1, 158, -1, 26, 155, 83, 142, -1, -1, -1, - 219, 66, 140, 281, 141, 220, 158, -1, -1, -1, - 221, 66, 140, 281, 141, 26, 222, 155, -1, -1, - 67, 158, -1, -1, 67, 26, 155, -1, 226, -1, - -1, 227, 73, -1, 227, 31, 73, -1, 227, 31, - 73, 13, 275, -1, 227, 73, 13, 275, -1, 226, - 8, 227, 73, -1, 226, 8, 227, 31, 73, -1, - 226, 8, 227, 31, 73, 13, 275, -1, 226, 8, - 227, 73, 13, 275, -1, -1, 71, -1, 123, -1, - 229, -1, -1, 249, -1, 287, -1, 31, 283, -1, - 229, 8, 249, -1, 229, 8, 287, -1, 229, 8, - 31, 283, -1, 230, 8, 231, -1, 231, -1, 73, - -1, 145, 282, -1, 145, 143, 281, 144, -1, 232, - 8, 73, -1, 232, 8, 73, 13, 275, -1, 73, - -1, 73, 13, 275, -1, 233, 234, -1, -1, -1, - 239, 235, 243, 142, -1, 244, 142, -1, -1, -1, - 240, 97, 236, 194, 71, 237, 140, 225, 141, 238, - -1, 142, -1, 143, 155, 144, -1, 241, -1, 111, - -1, -1, 241, -1, 242, -1, 241, 242, -1, 105, - -1, 106, -1, 107, -1, 110, -1, 109, -1, 108, - -1, 243, 8, 73, -1, 243, 8, 73, 13, 275, - -1, 73, -1, 73, 13, 275, -1, 244, 8, 71, - 13, 275, -1, 98, 71, 13, 275, -1, 245, 8, - 281, -1, 281, -1, -1, 247, -1, -1, 247, 8, - 248, 281, -1, 281, -1, -1, 122, 140, 250, 307, - 141, 13, 281, -1, 287, 13, 281, -1, 287, 13, - 31, 287, -1, -1, 287, 13, 31, 63, 266, 251, - 273, -1, -1, 63, 266, 252, 273, -1, 62, 281, - -1, 287, 24, 281, -1, 287, 23, 281, -1, 287, - 22, 281, -1, 287, 21, 281, -1, 287, 20, 281, - -1, 287, 19, 281, -1, 287, 18, 281, -1, 287, - 17, 281, -1, 287, 16, 281, -1, 287, 15, 281, - -1, 287, 14, 281, -1, 285, 60, -1, 60, 285, - -1, 285, 59, -1, 59, 285, -1, -1, 281, 27, - 253, 281, -1, -1, 281, 28, 254, 281, -1, -1, - 281, 9, 255, 281, -1, -1, 281, 11, 256, 281, - -1, 281, 10, 281, -1, 281, 29, 281, -1, 281, - 31, 281, -1, 281, 30, 281, -1, 281, 44, 281, - -1, 281, 42, 281, -1, 281, 43, 281, -1, 281, - 45, 281, -1, 281, 46, 281, -1, 281, 47, 281, - -1, 281, 41, 281, -1, 281, 40, 281, -1, 42, - 281, -1, 43, 281, -1, 48, 281, -1, 50, 281, - -1, 281, 33, 281, -1, 281, 32, 281, -1, 281, - 35, 281, -1, 281, 34, 281, -1, 281, 36, 281, - -1, 281, 39, 281, -1, 281, 37, 281, -1, 281, - 38, 281, -1, 281, 49, 266, -1, 140, 281, 141, - -1, -1, -1, 281, 25, 257, 281, 26, 258, 281, - -1, 316, -1, 58, 281, -1, 57, 281, -1, 56, - 281, -1, 55, 281, -1, 54, 281, -1, 53, 281, - -1, 52, 281, -1, 64, 272, -1, -1, 51, 259, - 281, -1, 277, -1, 123, 140, 310, 141, -1, 146, - 312, 146, -1, 12, 281, -1, -1, 71, 140, 261, - 228, 141, -1, -1, 265, 139, 71, 140, 262, 228, - 141, -1, -1, 265, 139, 295, 140, 263, 228, 141, - -1, -1, 295, 140, 264, 228, 141, -1, 71, -1, - 71, -1, 267, -1, -1, -1, 298, 120, 268, 302, - 269, 270, -1, 298, -1, 270, 271, -1, -1, 120, - 302, -1, -1, 140, 141, -1, 140, 281, 141, -1, - -1, 140, 228, 141, -1, 69, -1, 70, -1, 79, - -1, 127, -1, 128, -1, 124, -1, 125, -1, 126, - -1, 274, -1, 71, -1, 42, 275, -1, 43, 275, - -1, 123, 140, 278, 141, -1, 276, -1, 71, 139, - 71, -1, 71, -1, 72, -1, 319, -1, 274, -1, - 147, 312, 147, -1, 148, 312, 148, -1, 135, 312, - 136, -1, -1, 280, 279, -1, -1, 8, -1, 280, - 8, 275, 121, 275, -1, 280, 8, 275, -1, 275, - 121, 275, -1, 275, -1, 282, -1, 249, -1, 287, - -1, -1, 287, 284, -1, -1, 287, 286, -1, -1, - -1, 297, 120, 288, 302, 289, 293, 290, -1, 297, - -1, 290, 291, -1, -1, -1, 120, 302, 292, 293, - -1, -1, 140, 294, 228, 141, -1, -1, 299, -1, - 306, 299, -1, 265, 139, 295, -1, 298, -1, 260, - -1, 299, -1, 306, 299, -1, 296, -1, 299, 61, - 301, 149, -1, 299, 143, 281, 144, -1, 300, -1, - 73, -1, 145, 143, 281, 144, -1, -1, 281, -1, - 304, -1, -1, 295, 303, -1, 304, 61, 301, 149, - -1, 304, 143, 281, 144, -1, 305, -1, 71, -1, - 143, 281, 144, -1, 145, -1, 306, 145, -1, 307, - 8, 308, -1, 308, -1, 287, -1, -1, 122, 140, - 309, 307, 141, -1, -1, -1, 311, 279, -1, 311, - 8, 281, 121, 281, -1, 311, 8, 281, -1, 281, - 121, 281, -1, 281, -1, 311, 8, 281, 121, 31, - 283, -1, 311, 8, 31, 283, -1, 281, 121, 31, - 283, -1, 31, 283, -1, 312, 313, -1, 312, 71, - -1, 312, 74, -1, 312, 78, -1, 312, 76, -1, - 312, 77, -1, 312, 61, -1, 312, 149, -1, 312, - 143, -1, 312, 144, -1, 312, 120, -1, -1, 73, - -1, -1, 73, 61, 314, 315, 149, -1, 73, 120, - 71, -1, 137, 281, 144, -1, 137, 72, 61, 281, - 149, 144, -1, 138, 287, 144, -1, 71, -1, 74, - -1, 73, -1, 113, 140, 317, 141, -1, 114, 140, - 287, 141, -1, 7, 281, -1, 6, 281, -1, 5, - 140, 281, 141, -1, 4, 281, -1, 3, 281, -1, - 287, -1, -1, 317, 8, 318, 287, -1, 265, 139, - 71, -1 + 190, -1, 191, -1, 115, 140, 141, 142, -1, 159, + -1, 143, 155, 144, -1, -1, -1, 65, 140, 279, + 141, 160, 158, 161, 217, 221, -1, -1, -1, 65, + 140, 279, 141, 26, 162, 155, 163, 219, 222, 68, + 142, -1, -1, -1, 82, 140, 164, 279, 141, 165, + 216, -1, -1, -1, 81, 166, 158, 82, 140, 167, + 279, 141, 142, -1, -1, -1, -1, 84, 140, 244, + 142, 168, 244, 142, 169, 244, 141, 170, 207, -1, + -1, 91, 140, 279, 141, 171, 211, -1, 95, 142, + -1, 95, 279, 142, -1, 96, 142, -1, 96, 279, + 142, -1, 99, 142, -1, 99, 247, 142, -1, 99, + 285, 142, -1, 104, 228, 142, -1, 110, 230, 142, + -1, 80, 243, 142, -1, 75, -1, 279, 142, -1, + 103, 189, 142, -1, 112, 140, 187, 141, 142, -1, + -1, -1, 86, 140, 285, 90, 172, 206, 205, 141, + 173, 208, -1, -1, -1, 86, 140, 247, 90, 174, + 285, 205, 141, 175, 208, -1, -1, 88, 176, 140, + 210, 141, 209, -1, 142, -1, -1, -1, -1, -1, + -1, 100, 177, 143, 155, 144, 101, 140, 178, 263, + 179, 73, 141, 180, 143, 155, 144, 181, 182, -1, + 102, 279, 142, -1, 183, -1, -1, 184, -1, 183, + 184, -1, -1, -1, 101, 140, 263, 185, 73, 141, + 186, 143, 155, 144, -1, 188, -1, 187, 8, 188, + -1, 285, -1, 79, -1, 140, 79, 141, -1, 193, + -1, 196, -1, -1, 31, -1, -1, -1, 97, 194, + 192, 71, 195, 140, 223, 141, 143, 155, 144, -1, + -1, 199, 71, 200, 197, 203, 143, 231, 144, -1, + -1, 201, 71, 198, 202, 143, 231, 144, -1, 116, + -1, 109, 116, -1, 108, 116, -1, -1, 118, 263, + -1, 117, -1, -1, 118, 204, -1, -1, 119, 204, + -1, 263, -1, 204, 8, 263, -1, -1, 121, 206, + -1, 285, -1, 31, 285, -1, 158, -1, 26, 155, + 85, 142, -1, 158, -1, 26, 155, 87, 142, -1, + 158, -1, 26, 155, 89, 142, -1, 71, 13, 273, + -1, 210, 8, 71, 13, 273, -1, 143, 212, 144, + -1, 143, 142, 212, 144, -1, 26, 212, 92, 142, + -1, 26, 142, 212, 92, 142, -1, -1, -1, 212, + 93, 279, 215, 213, 155, -1, -1, 212, 94, 215, + 214, 155, -1, 26, -1, 142, -1, 158, -1, 26, + 155, 83, 142, -1, -1, -1, 217, 66, 140, 279, + 141, 218, 158, -1, -1, -1, 219, 66, 140, 279, + 141, 26, 220, 155, -1, -1, 67, 158, -1, -1, + 67, 26, 155, -1, 224, -1, -1, 225, 73, -1, + 225, 31, 73, -1, 225, 31, 73, 13, 273, -1, + 225, 73, 13, 273, -1, 224, 8, 225, 73, -1, + 224, 8, 225, 31, 73, -1, 224, 8, 225, 31, + 73, 13, 273, -1, 224, 8, 225, 73, 13, 273, + -1, -1, 71, -1, 123, -1, 227, -1, -1, 247, + -1, 285, -1, 31, 281, -1, 227, 8, 247, -1, + 227, 8, 285, -1, 227, 8, 31, 281, -1, 228, + 8, 229, -1, 229, -1, 73, -1, 145, 280, -1, + 145, 143, 279, 144, -1, 230, 8, 73, -1, 230, + 8, 73, 13, 273, -1, 73, -1, 73, 13, 273, + -1, 231, 232, -1, -1, -1, 237, 233, 241, 142, + -1, 242, 142, -1, -1, -1, 238, 97, 234, 192, + 71, 235, 140, 223, 141, 236, -1, 142, -1, 143, + 155, 144, -1, 239, -1, 111, -1, -1, 239, -1, + 240, -1, 239, 240, -1, 105, -1, 106, -1, 107, + -1, 110, -1, 109, -1, 108, -1, 241, 8, 73, + -1, 241, 8, 73, 13, 273, -1, 73, -1, 73, + 13, 273, -1, 242, 8, 71, 13, 273, -1, 98, + 71, 13, 273, -1, 243, 8, 279, -1, 279, -1, + -1, 245, -1, -1, 245, 8, 246, 279, -1, 279, + -1, -1, 122, 140, 248, 305, 141, 13, 279, -1, + 285, 13, 279, -1, 285, 13, 31, 285, -1, -1, + 285, 13, 31, 63, 264, 249, 271, -1, -1, 63, + 264, 250, 271, -1, 62, 279, -1, 285, 24, 279, + -1, 285, 23, 279, -1, 285, 22, 279, -1, 285, + 21, 279, -1, 285, 20, 279, -1, 285, 19, 279, + -1, 285, 18, 279, -1, 285, 17, 279, -1, 285, + 16, 279, -1, 285, 15, 279, -1, 285, 14, 279, + -1, 283, 60, -1, 60, 283, -1, 283, 59, -1, + 59, 283, -1, -1, 279, 27, 251, 279, -1, -1, + 279, 28, 252, 279, -1, -1, 279, 9, 253, 279, + -1, -1, 279, 11, 254, 279, -1, 279, 10, 279, + -1, 279, 29, 279, -1, 279, 31, 279, -1, 279, + 30, 279, -1, 279, 44, 279, -1, 279, 42, 279, + -1, 279, 43, 279, -1, 279, 45, 279, -1, 279, + 46, 279, -1, 279, 47, 279, -1, 279, 41, 279, + -1, 279, 40, 279, -1, 42, 279, -1, 43, 279, + -1, 48, 279, -1, 50, 279, -1, 279, 33, 279, + -1, 279, 32, 279, -1, 279, 35, 279, -1, 279, + 34, 279, -1, 279, 36, 279, -1, 279, 39, 279, + -1, 279, 37, 279, -1, 279, 38, 279, -1, 279, + 49, 264, -1, 140, 279, 141, -1, -1, -1, 279, + 25, 255, 279, 26, 256, 279, -1, 314, -1, 58, + 279, -1, 57, 279, -1, 56, 279, -1, 55, 279, + -1, 54, 279, -1, 53, 279, -1, 52, 279, -1, + 64, 270, -1, -1, 51, 257, 279, -1, 275, -1, + 123, 140, 308, 141, -1, 146, 310, 146, -1, 12, + 279, -1, -1, 71, 140, 259, 226, 141, -1, -1, + 263, 139, 71, 140, 260, 226, 141, -1, -1, 263, + 139, 293, 140, 261, 226, 141, -1, -1, 293, 140, + 262, 226, 141, -1, 71, -1, 71, -1, 265, -1, + -1, -1, 296, 120, 266, 300, 267, 268, -1, 296, + -1, 268, 269, -1, -1, 120, 300, -1, -1, 140, + 141, -1, 140, 279, 141, -1, -1, 140, 226, 141, + -1, 69, -1, 70, -1, 79, -1, 127, -1, 128, + -1, 124, -1, 125, -1, 126, -1, 272, -1, 71, + -1, 42, 273, -1, 43, 273, -1, 123, 140, 276, + 141, -1, 274, -1, 71, 139, 71, -1, 71, -1, + 72, -1, 317, -1, 272, -1, 147, 310, 147, -1, + 148, 310, 148, -1, 135, 310, 136, -1, -1, 278, + 277, -1, -1, 8, -1, 278, 8, 273, 121, 273, + -1, 278, 8, 273, -1, 273, 121, 273, -1, 273, + -1, 280, -1, 247, -1, 285, -1, -1, 285, 282, + -1, -1, 285, 284, -1, -1, -1, 295, 120, 286, + 300, 287, 291, 288, -1, 295, -1, 288, 289, -1, + -1, -1, 120, 300, 290, 291, -1, -1, 140, 292, + 226, 141, -1, -1, 297, -1, 304, 297, -1, 263, + 139, 293, -1, 296, -1, 258, -1, 297, -1, 304, + 297, -1, 294, -1, 297, 61, 299, 149, -1, 297, + 143, 279, 144, -1, 298, -1, 73, -1, 145, 143, + 279, 144, -1, -1, 279, -1, 302, -1, -1, 293, + 301, -1, 302, 61, 299, 149, -1, 302, 143, 279, + 144, -1, 303, -1, 71, -1, 143, 279, 144, -1, + 145, -1, 304, 145, -1, 305, 8, 306, -1, 306, + -1, 285, -1, -1, 122, 140, 307, 305, 141, -1, + -1, -1, 309, 277, -1, 309, 8, 279, 121, 279, + -1, 309, 8, 279, -1, 279, 121, 279, -1, 279, + -1, 309, 8, 279, 121, 31, 281, -1, 309, 8, + 31, 281, -1, 279, 121, 31, 281, -1, 31, 281, + -1, 310, 311, -1, 310, 71, -1, 310, 74, -1, + 310, 78, -1, 310, 76, -1, 310, 77, -1, 310, + 61, -1, 310, 149, -1, 310, 143, -1, 310, 144, + -1, 310, 120, -1, -1, 73, -1, -1, 73, 61, + 312, 313, 149, -1, 73, 120, 71, -1, 137, 279, + 144, -1, 137, 72, 61, 279, 149, 144, -1, 138, + 285, 144, -1, 71, -1, 74, -1, 73, -1, 113, + 140, 315, 141, -1, 114, 140, 285, 141, -1, 7, + 279, -1, 6, 279, -1, 5, 140, 279, 141, -1, + 4, 279, -1, 3, 279, -1, 285, -1, -1, 315, + 8, 316, 285, -1, 263, 139, 71, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -876,44 +875,44 @@ static const yytype_uint16 yyrline[] = 189, 189, 190, 190, 190, 191, 191, 191, 192, 192, 192, 196, 198, 200, 193, 202, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 217, 221, 222, 223, 221, 225, - 225, 226, 227, 228, 229, 230, 231, 227, 233, 238, - 239, 243, 244, 249, 249, 249, 254, 255, 259, 263, - 264, 269, 273, 278, 279, 284, 284, 284, 290, 289, - 296, 295, 305, 306, 307, 311, 312, 316, 319, 321, - 324, 326, 330, 331, 335, 336, 341, 342, 346, 347, - 352, 353, 358, 359, 364, 365, 370, 371, 372, 373, - 378, 379, 379, 380, 380, 385, 386, 391, 392, 397, - 399, 399, 403, 405, 405, 409, 411, 415, 417, 422, - 423, 428, 429, 430, 431, 432, 433, 434, 435, 440, - 441, 442, 447, 448, 453, 454, 455, 456, 457, 458, - 462, 463, 468, 469, 470, 475, 476, 477, 478, 484, - 485, 490, 490, 491, 492, 492, 492, 498, 499, 503, - 504, 508, 509, 513, 514, 518, 519, 520, 521, 522, - 523, 527, 528, 529, 530, 534, 535, 539, 540, 545, - 546, 550, 550, 551, 555, 555, 556, 557, 558, 558, - 559, 559, 560, 561, 562, 563, 564, 565, 566, 567, - 568, 569, 570, 571, 572, 573, 574, 575, 576, 576, - 577, 577, 578, 578, 579, 579, 580, 581, 582, 583, - 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 606, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 618, 618, 619, 620, 621, 622, - 626, 626, 629, 629, 632, 632, 635, 635, 641, 645, - 646, 651, 652, 651, 654, 659, 660, 665, 669, 670, - 671, 676, 677, 682, 683, 684, 685, 686, 687, 688, - 689, 694, 695, 696, 697, 698, 699, 703, 707, 708, - 709, 710, 711, 712, 713, 718, 719, 722, 724, 728, - 729, 730, 731, 735, 736, 741, 746, 746, 751, 751, - 756, 757, 756, 759, 763, 764, 769, 769, 773, 773, - 777, 781, 782, 786, 791, 792, 797, 798, 799, 803, - 804, 805, 810, 811, 815, 816, 821, 822, 822, 826, - 827, 828, 832, 833, 837, 838, 842, 843, 848, 849, - 849, 850, 855, 856, 860, 861, 862, 863, 864, 865, - 866, 867, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 889, 890, 890, 891, 892, 893, - 894, 899, 900, 901, 906, 907, 908, 909, 910, 911, - 912, 916, 917, 917, 921 + 216, 218, 219, 217, 222, 223, 221, 225, 225, 226, + 227, 228, 229, 230, 231, 227, 233, 238, 239, 243, + 244, 249, 249, 249, 254, 255, 259, 263, 264, 269, + 273, 278, 279, 284, 284, 284, 290, 289, 296, 295, + 305, 306, 307, 311, 312, 316, 319, 321, 324, 326, + 330, 331, 335, 336, 341, 342, 346, 347, 352, 353, + 358, 359, 364, 365, 370, 371, 372, 373, 378, 379, + 379, 380, 380, 385, 386, 391, 392, 397, 399, 399, + 403, 405, 405, 409, 411, 415, 417, 422, 423, 428, + 429, 430, 431, 432, 433, 434, 435, 440, 441, 442, + 447, 448, 453, 454, 455, 456, 457, 458, 462, 463, + 468, 469, 470, 475, 476, 477, 478, 484, 485, 490, + 490, 491, 492, 492, 492, 498, 499, 503, 504, 508, + 509, 513, 514, 518, 519, 520, 521, 522, 523, 527, + 528, 529, 530, 534, 535, 539, 540, 545, 546, 550, + 550, 551, 555, 555, 556, 557, 558, 558, 559, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 576, 577, 577, + 578, 578, 579, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 606, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 618, 619, 620, 621, 622, 626, 626, + 629, 629, 632, 632, 635, 635, 641, 645, 646, 651, + 652, 651, 654, 659, 660, 665, 669, 670, 671, 676, + 677, 682, 683, 684, 685, 686, 687, 688, 689, 694, + 695, 696, 697, 698, 699, 703, 707, 708, 709, 710, + 711, 712, 713, 718, 719, 722, 724, 728, 729, 730, + 731, 735, 736, 741, 746, 746, 751, 751, 756, 757, + 756, 759, 763, 764, 769, 769, 773, 773, 777, 781, + 782, 786, 791, 792, 797, 798, 799, 803, 804, 805, + 810, 811, 815, 816, 821, 822, 822, 826, 827, 828, + 832, 833, 837, 838, 842, 843, 848, 849, 849, 850, + 855, 856, 860, 861, 862, 863, 864, 865, 866, 867, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 889, 890, 890, 891, 892, 893, 894, 899, + 900, 901, 906, 907, 908, 909, 910, 911, 912, 916, + 917, 917, 921 }; #endif @@ -955,46 +954,46 @@ static const char *const yytname[] = "inner_statement_list", "@2", "inner_statement", "statement", "unticked_statement", "@3", "@4", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", - "@21", "@22", "@23", "@24", "@25", "@26", "additional_catches", - "non_empty_additional_catches", "additional_catch", "@27", "@28", + "@21", "@22", "@23", "@24", "additional_catches", + "non_empty_additional_catches", "additional_catch", "@25", "@26", "unset_variables", "unset_variable", "use_filename", "function_declaration_statement", "class_declaration_statement", - "is_reference", "unticked_function_declaration_statement", "@29", "@30", - "unticked_class_declaration_statement", "@31", "@32", "class_entry_type", + "is_reference", "unticked_function_declaration_statement", "@27", "@28", + "unticked_class_declaration_statement", "@29", "@30", "class_entry_type", "extends_from", "interface_entry", "interface_extends_list", "implements_list", "interface_list", "foreach_optional_arg", "foreach_variable", "for_statement", "foreach_statement", "declare_statement", "declare_list", "switch_case_list", "case_list", - "@33", "@34", "case_separator", "while_statement", "elseif_list", "@35", - "new_elseif_list", "@36", "else_single", "new_else_single", + "@31", "@32", "case_separator", "while_statement", "elseif_list", "@33", + "new_elseif_list", "@34", "else_single", "new_else_single", "parameter_list", "non_empty_parameter_list", "optional_class_type", "function_call_parameter_list", "non_empty_function_call_parameter_list", "global_var_list", "global_var", "static_var_list", - "class_statement_list", "class_statement", "@37", "@38", "@39", + "class_statement_list", "class_statement", "@35", "@36", "@37", "method_body", "variable_modifiers", "method_modifiers", "non_empty_member_modifiers", "member_modifier", "class_variable_declaration", "class_constant_declaration", - "echo_expr_list", "for_expr", "non_empty_for_expr", "@40", - "expr_without_variable", "@41", "@42", "@43", "@44", "@45", "@46", "@47", - "@48", "@49", "@50", "function_call", "@51", "@52", "@53", "@54", + "echo_expr_list", "for_expr", "non_empty_for_expr", "@38", + "expr_without_variable", "@39", "@40", "@41", "@42", "@43", "@44", "@45", + "@46", "@47", "@48", "function_call", "@49", "@50", "@51", "@52", "fully_qualified_class_name", "class_name_reference", - "dynamic_class_name_reference", "@55", "@56", + "dynamic_class_name_reference", "@53", "@54", "dynamic_class_name_variable_properties", "dynamic_class_name_variable_property", "exit_expr", "ctor_arguments", "common_scalar", "static_scalar", "static_class_constant", "scalar", "static_array_pair_list", "possible_comma", "non_empty_static_array_pair_list", "expr", "r_variable", "w_variable", - "@57", "rw_variable", "@58", "variable", "@59", "@60", - "variable_properties", "variable_property", "@61", "method_or_not", - "@62", "variable_without_objects", "static_member", + "@55", "rw_variable", "@56", "variable", "@57", "@58", + "variable_properties", "variable_property", "@59", "method_or_not", + "@60", "variable_without_objects", "static_member", "base_variable_with_function_calls", "base_variable", "reference_variable", "compound_variable", "dim_offset", - "object_property", "@63", "object_dim_list", "variable_name", + "object_property", "@61", "object_dim_list", "variable_name", "simple_indirect_reference", "assignment_list", - "assignment_list_element", "@64", "array_pair_list", - "non_empty_array_pair_list", "encaps_list", "encaps_var", "@65", + "assignment_list_element", "@62", "array_pair_list", + "non_empty_array_pair_list", "encaps_list", "encaps_var", "@63", "encaps_var_offset", "internal_functions_in_yacc", "isset_variables", - "@66", "class_constant", 0 + "@64", "class_constant", 0 }; #endif @@ -1029,44 +1028,44 @@ static const yytype_uint16 yyr1[] = 161, 159, 162, 163, 159, 164, 165, 159, 166, 167, 159, 168, 169, 170, 159, 171, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, - 159, 172, 173, 174, 159, 175, 176, 177, 159, 178, - 159, 159, 179, 180, 181, 182, 183, 159, 159, 184, - 184, 185, 185, 187, 188, 186, 189, 189, 190, 191, - 191, 192, 193, 194, 194, 196, 197, 195, 199, 198, - 200, 198, 201, 201, 201, 202, 202, 203, 204, 204, - 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, - 210, 210, 211, 211, 212, 212, 213, 213, 213, 213, - 214, 215, 214, 216, 214, 217, 217, 218, 218, 219, - 220, 219, 221, 222, 221, 223, 223, 224, 224, 225, - 225, 226, 226, 226, 226, 226, 226, 226, 226, 227, - 227, 227, 228, 228, 229, 229, 229, 229, 229, 229, - 230, 230, 231, 231, 231, 232, 232, 232, 232, 233, - 233, 235, 234, 234, 236, 237, 234, 238, 238, 239, - 239, 240, 240, 241, 241, 242, 242, 242, 242, 242, - 242, 243, 243, 243, 243, 244, 244, 245, 245, 246, - 246, 248, 247, 247, 250, 249, 249, 249, 251, 249, - 252, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 253, 249, - 254, 249, 255, 249, 256, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 257, 258, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 259, 249, 249, 249, 249, 249, - 261, 260, 262, 260, 263, 260, 264, 260, 265, 266, - 266, 268, 269, 267, 267, 270, 270, 271, 272, 272, - 272, 273, 273, 274, 274, 274, 274, 274, 274, 274, - 274, 275, 275, 275, 275, 275, 275, 276, 277, 277, - 277, 277, 277, 277, 277, 278, 278, 279, 279, 280, - 280, 280, 280, 281, 281, 282, 284, 283, 286, 285, - 288, 289, 287, 287, 290, 290, 292, 291, 294, 293, - 293, 295, 295, 296, 297, 297, 298, 298, 298, 299, - 299, 299, 300, 300, 301, 301, 302, 303, 302, 304, - 304, 304, 305, 305, 306, 306, 307, 307, 308, 309, - 308, 308, 310, 310, 311, 311, 311, 311, 311, 311, - 311, 311, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 313, 314, 313, 313, 313, 313, - 313, 315, 315, 315, 316, 316, 316, 316, 316, 316, - 316, 317, 318, 317, 319 + 159, 172, 173, 159, 174, 175, 159, 176, 159, 159, + 177, 178, 179, 180, 181, 159, 159, 182, 182, 183, + 183, 185, 186, 184, 187, 187, 188, 189, 189, 190, + 191, 192, 192, 194, 195, 193, 197, 196, 198, 196, + 199, 199, 199, 200, 200, 201, 202, 202, 203, 203, + 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, + 209, 209, 210, 210, 211, 211, 211, 211, 212, 213, + 212, 214, 212, 215, 215, 216, 216, 217, 218, 217, + 219, 220, 219, 221, 221, 222, 222, 223, 223, 224, + 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, + 226, 226, 227, 227, 227, 227, 227, 227, 228, 228, + 229, 229, 229, 230, 230, 230, 230, 231, 231, 233, + 232, 232, 234, 235, 232, 236, 236, 237, 237, 238, + 238, 239, 239, 240, 240, 240, 240, 240, 240, 241, + 241, 241, 241, 242, 242, 243, 243, 244, 244, 246, + 245, 245, 248, 247, 247, 247, 249, 247, 250, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 251, 247, 252, 247, + 253, 247, 254, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 255, 256, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 257, 247, 247, 247, 247, 247, 259, 258, + 260, 258, 261, 258, 262, 258, 263, 264, 264, 266, + 267, 265, 265, 268, 268, 269, 270, 270, 270, 271, + 271, 272, 272, 272, 272, 272, 272, 272, 272, 273, + 273, 273, 273, 273, 273, 274, 275, 275, 275, 275, + 275, 275, 275, 276, 276, 277, 277, 278, 278, 278, + 278, 279, 279, 280, 282, 281, 284, 283, 286, 287, + 285, 285, 288, 288, 290, 289, 292, 291, 291, 293, + 293, 294, 295, 295, 296, 296, 296, 297, 297, 297, + 298, 298, 299, 299, 300, 301, 300, 302, 302, 302, + 303, 303, 304, 304, 305, 305, 306, 307, 306, 306, + 308, 308, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 311, 312, 311, 311, 311, 311, 311, 313, + 313, 313, 314, 314, 314, 314, 314, 314, 314, 315, + 316, 315, 317 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -1077,44 +1076,44 @@ static const yytype_uint8 yyr2[] = 0, 9, 0, 0, 12, 0, 0, 7, 0, 0, 9, 0, 0, 0, 12, 0, 6, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 1, 2, 3, - 5, 0, 0, 0, 11, 0, 0, 0, 11, 0, - 6, 1, 0, 0, 0, 0, 0, 18, 3, 1, - 0, 1, 2, 0, 0, 10, 1, 3, 1, 1, - 3, 1, 1, 0, 1, 0, 0, 11, 0, 8, - 0, 7, 1, 2, 2, 0, 2, 1, 0, 2, - 0, 2, 1, 3, 0, 2, 1, 2, 1, 4, - 1, 4, 1, 4, 3, 5, 3, 4, 4, 5, - 0, 0, 6, 0, 5, 1, 1, 1, 4, 0, - 0, 7, 0, 0, 8, 0, 2, 0, 3, 1, - 0, 2, 3, 5, 4, 4, 5, 7, 6, 0, - 1, 1, 1, 0, 1, 1, 2, 3, 3, 4, - 3, 1, 1, 2, 4, 3, 5, 1, 3, 2, - 0, 0, 4, 2, 0, 0, 10, 1, 3, 1, - 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 3, 5, 1, 3, 5, 4, 3, 1, 0, - 1, 0, 4, 1, 0, 7, 3, 4, 0, 7, - 0, 4, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 2, 2, 2, 2, 0, 4, - 0, 4, 0, 4, 0, 4, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, - 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 0, 0, 7, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 3, 1, 4, 3, 2, - 0, 5, 0, 7, 0, 7, 0, 5, 1, 1, - 1, 0, 0, 6, 1, 2, 0, 2, 0, 2, - 3, 0, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 4, 1, 3, 1, 1, - 1, 1, 3, 3, 3, 0, 2, 0, 1, 5, - 3, 3, 1, 1, 1, 1, 0, 2, 0, 2, - 0, 0, 7, 1, 2, 0, 0, 4, 0, 4, - 0, 1, 2, 3, 1, 1, 1, 2, 1, 4, - 4, 1, 1, 4, 0, 1, 1, 0, 2, 4, - 4, 1, 1, 3, 1, 2, 3, 1, 1, 0, - 5, 0, 0, 2, 5, 3, 3, 1, 6, 4, - 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 1, 0, 5, 3, 3, 6, - 3, 1, 1, 1, 4, 4, 2, 2, 4, 2, - 2, 1, 0, 4, 3 + 5, 0, 0, 10, 0, 0, 10, 0, 6, 1, + 0, 0, 0, 0, 0, 18, 3, 1, 0, 1, + 2, 0, 0, 10, 1, 3, 1, 1, 3, 1, + 1, 0, 1, 0, 0, 11, 0, 8, 0, 7, + 1, 2, 2, 0, 2, 1, 0, 2, 0, 2, + 1, 3, 0, 2, 1, 2, 1, 4, 1, 4, + 1, 4, 3, 5, 3, 4, 4, 5, 0, 0, + 6, 0, 5, 1, 1, 1, 4, 0, 0, 7, + 0, 0, 8, 0, 2, 0, 3, 1, 0, 2, + 3, 5, 4, 4, 5, 7, 6, 0, 1, 1, + 1, 0, 1, 1, 2, 3, 3, 4, 3, 1, + 1, 2, 4, 3, 5, 1, 3, 2, 0, 0, + 4, 2, 0, 0, 10, 1, 3, 1, 1, 0, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, + 5, 1, 3, 5, 4, 3, 1, 0, 1, 0, + 4, 1, 0, 7, 3, 4, 0, 7, 0, 4, + 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 2, 2, 2, 2, 0, 4, 0, 4, + 0, 4, 0, 4, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 0, 0, 7, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 0, 3, 1, 4, 3, 2, 0, 5, + 0, 7, 0, 7, 0, 5, 1, 1, 1, 0, + 0, 6, 1, 2, 0, 2, 0, 2, 3, 0, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 4, 1, 3, 1, 1, 1, 1, + 3, 3, 3, 0, 2, 0, 1, 5, 3, 3, + 1, 1, 1, 1, 0, 2, 0, 2, 0, 0, + 7, 1, 2, 0, 0, 4, 0, 4, 0, 1, + 2, 3, 1, 1, 1, 2, 1, 4, 4, 1, + 1, 4, 0, 1, 1, 0, 2, 4, 4, 1, + 1, 3, 1, 2, 3, 1, 1, 0, 5, 0, + 0, 2, 5, 3, 3, 1, 6, 4, 4, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 0, 1, 0, 5, 3, 3, 6, 3, 1, + 1, 1, 4, 4, 2, 2, 4, 2, 2, 1, + 0, 4, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -1123,347 +1122,359 @@ static const yytype_uint8 yyr2[] = static const yytype_uint16 yydefact[] = { 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 298, 0, 303, - 304, 318, 319, 362, 47, 305, 0, 28, 0, 0, - 0, 59, 0, 0, 0, 85, 0, 62, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 92, 97, - 0, 0, 308, 309, 310, 306, 307, 403, 0, 61, - 12, 374, 403, 403, 403, 4, 6, 17, 7, 8, - 81, 82, 0, 0, 334, 355, 0, 321, 276, 0, - 333, 0, 335, 0, 358, 343, 354, 356, 361, 0, - 265, 320, 420, 419, 0, 417, 416, 279, 248, 249, - 250, 251, 0, 272, 271, 270, 269, 268, 267, 266, - 288, 0, 227, 338, 225, 212, 289, 0, 210, 290, - 294, 356, 0, 0, 273, 0, 280, 0, 198, 0, - 25, 199, 0, 0, 0, 37, 0, 39, 0, 83, - 41, 334, 0, 335, 0, 0, 79, 0, 0, 162, - 0, 0, 161, 94, 93, 167, 0, 0, 0, 0, - 0, 204, 382, 0, 0, 10, 0, 0, 0, 0, - 95, 90, 0, 232, 0, 234, 262, 228, 230, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 301, + 302, 316, 317, 360, 47, 303, 0, 28, 0, 0, + 0, 57, 0, 0, 0, 83, 0, 60, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 95, + 0, 0, 306, 307, 308, 304, 305, 401, 0, 59, + 12, 372, 401, 401, 401, 4, 6, 17, 7, 8, + 79, 80, 0, 0, 332, 353, 0, 319, 274, 0, + 331, 0, 333, 0, 356, 341, 352, 354, 359, 0, + 263, 318, 418, 417, 0, 415, 414, 277, 246, 247, + 248, 249, 0, 270, 269, 268, 267, 266, 265, 264, + 286, 0, 225, 336, 223, 210, 287, 0, 208, 288, + 292, 354, 0, 0, 271, 0, 278, 0, 196, 0, + 25, 197, 0, 0, 0, 37, 0, 39, 0, 81, + 41, 332, 0, 333, 0, 0, 77, 0, 0, 160, + 0, 0, 159, 92, 91, 165, 0, 0, 0, 0, + 0, 202, 380, 0, 0, 10, 0, 0, 0, 0, + 93, 88, 0, 230, 0, 232, 260, 226, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, - 226, 224, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 339, 286, 340, 364, 0, 375, - 357, 0, 275, 0, 0, 301, 291, 357, 299, 0, - 0, 153, 0, 46, 0, 0, 0, 200, 203, 334, - 335, 0, 0, 38, 40, 84, 0, 42, 43, 12, - 68, 0, 49, 0, 163, 335, 0, 44, 0, 0, - 45, 0, 76, 78, 421, 0, 0, 0, 381, 0, - 387, 0, 327, 398, 393, 404, 394, 396, 397, 395, - 402, 324, 0, 0, 400, 401, 399, 392, 261, 18, - 0, 0, 278, 322, 323, 0, 88, 98, 424, 353, - 351, 0, 0, 236, 0, 0, 0, 0, 237, 239, - 238, 253, 252, 255, 254, 256, 258, 259, 257, 247, - 246, 241, 242, 240, 243, 244, 245, 260, 0, 206, - 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, - 213, 153, 0, 365, 0, 0, 418, 0, 353, 153, - 211, 0, 300, 19, 0, 0, 152, 334, 335, 197, - 0, 0, 31, 201, 0, 0, 0, 0, 35, 86, - 10, 80, 0, 160, 0, 0, 312, 0, 311, 168, - 316, 165, 0, 0, 422, 414, 415, 9, 0, 378, - 0, 377, 391, 336, 0, 277, 328, 383, 405, 0, - 319, 0, 0, 0, 11, 13, 14, 15, 363, 288, - 96, 100, 0, 0, 282, 284, 352, 233, 235, 0, - 229, 231, 0, 207, 0, 372, 0, 367, 341, 366, - 371, 359, 360, 0, 292, 22, 0, 156, 281, 0, - 29, 26, 199, 0, 56, 52, 0, 0, 0, 0, - 0, 0, 164, 313, 314, 0, 325, 0, 77, 50, - 0, 379, 381, 0, 337, 0, 386, 0, 385, 0, - 407, 0, 408, 410, 0, 0, 0, 99, 102, 170, - 153, 153, 263, 208, 287, 0, 368, 350, 364, 0, - 302, 296, 12, 20, 0, 334, 335, 0, 0, 0, - 202, 0, 0, 114, 0, 12, 112, 60, 120, 120, - 36, 149, 0, 317, 332, 0, 327, 166, 423, 381, - 376, 0, 390, 389, 0, 411, 413, 412, 0, 0, - 0, 101, 170, 0, 181, 0, 0, 0, 301, 373, - 348, 345, 0, 0, 293, 10, 129, 159, 0, 12, - 127, 27, 32, 104, 0, 104, 106, 0, 10, 120, - 0, 120, 0, 150, 151, 0, 139, 0, 63, 0, - 315, 328, 326, 0, 205, 0, 384, 406, 0, 16, - 181, 103, 0, 185, 186, 187, 190, 189, 188, 180, - 91, 169, 171, 0, 179, 183, 0, 283, 285, 264, - 209, 153, 342, 369, 370, 0, 295, 132, 135, 0, - 10, 199, 0, 0, 107, 0, 115, 0, 0, 0, - 0, 0, 0, 116, 0, 149, 0, 141, 0, 331, - 330, 380, 388, 409, 89, 0, 0, 174, 184, 0, - 173, 0, 0, 344, 297, 137, 0, 0, 21, 30, - 0, 0, 105, 57, 53, 113, 0, 118, 0, 125, - 126, 123, 117, 12, 0, 142, 0, 64, 0, 0, - 193, 0, 83, 0, 349, 346, 0, 0, 0, 0, - 136, 128, 33, 0, 0, 119, 121, 12, 10, 0, - 145, 0, 144, 0, 329, 196, 0, 0, 172, 0, - 0, 350, 0, 12, 0, 0, 0, 12, 110, 58, - 54, 12, 10, 87, 146, 0, 143, 0, 194, 191, - 175, 195, 347, 0, 10, 24, 130, 12, 108, 34, - 10, 10, 0, 148, 65, 0, 0, 0, 0, 10, - 0, 147, 0, 192, 149, 133, 131, 0, 111, 12, - 0, 12, 109, 10, 0, 10, 66, 177, 12, 176, - 70, 10, 0, 67, 69, 71, 178, 0, 72, 73, - 0, 0, 74, 0, 12, 10, 75 + 224, 222, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 337, 284, 338, 362, 0, 373, + 355, 0, 273, 0, 0, 299, 289, 355, 297, 0, + 0, 151, 0, 46, 0, 0, 0, 198, 201, 332, + 333, 0, 0, 38, 40, 82, 0, 42, 43, 12, + 66, 0, 49, 0, 161, 333, 0, 44, 0, 0, + 45, 0, 74, 76, 419, 0, 0, 0, 379, 0, + 385, 0, 325, 396, 391, 402, 392, 394, 395, 393, + 400, 322, 0, 0, 398, 399, 397, 390, 259, 18, + 0, 0, 276, 320, 321, 0, 86, 96, 422, 351, + 349, 0, 0, 234, 0, 0, 0, 0, 235, 237, + 236, 251, 250, 253, 252, 254, 256, 257, 255, 245, + 244, 239, 240, 238, 241, 242, 243, 258, 0, 204, + 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, + 211, 151, 0, 363, 0, 0, 416, 0, 351, 151, + 209, 0, 298, 19, 0, 0, 150, 332, 333, 195, + 0, 0, 31, 199, 54, 51, 0, 0, 35, 84, + 10, 78, 0, 158, 0, 0, 310, 0, 309, 166, + 314, 163, 0, 0, 420, 412, 413, 9, 0, 376, + 0, 375, 389, 334, 0, 275, 326, 381, 403, 0, + 317, 0, 0, 0, 11, 13, 14, 15, 361, 286, + 94, 98, 0, 0, 280, 282, 350, 231, 233, 0, + 227, 229, 0, 205, 0, 370, 0, 365, 339, 364, + 369, 357, 358, 0, 290, 22, 0, 154, 279, 0, + 29, 26, 197, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 162, 311, 312, 0, 323, 0, 75, 50, + 0, 377, 379, 0, 335, 0, 384, 0, 383, 0, + 405, 0, 406, 408, 0, 0, 0, 97, 100, 168, + 151, 151, 261, 206, 285, 0, 366, 348, 362, 0, + 300, 294, 12, 20, 0, 332, 333, 0, 0, 0, + 200, 102, 0, 102, 104, 112, 0, 12, 110, 58, + 118, 118, 36, 147, 0, 315, 330, 0, 325, 164, + 421, 379, 374, 0, 388, 387, 0, 409, 411, 410, + 0, 0, 0, 99, 168, 0, 179, 0, 0, 0, + 299, 371, 346, 343, 0, 0, 291, 10, 127, 157, + 0, 12, 125, 27, 32, 0, 0, 105, 0, 0, + 10, 118, 0, 118, 0, 148, 149, 0, 137, 0, + 61, 0, 313, 326, 324, 0, 203, 0, 382, 404, + 0, 16, 179, 101, 0, 183, 184, 185, 188, 187, + 186, 178, 89, 167, 169, 0, 177, 181, 0, 281, + 283, 262, 207, 151, 340, 367, 368, 0, 293, 130, + 133, 0, 10, 197, 103, 55, 52, 113, 0, 0, + 0, 0, 0, 0, 114, 0, 147, 0, 139, 0, + 329, 328, 378, 386, 407, 87, 0, 0, 172, 182, + 0, 171, 0, 0, 342, 295, 135, 0, 0, 21, + 30, 0, 0, 0, 0, 111, 0, 116, 0, 123, + 124, 121, 115, 12, 0, 140, 0, 62, 0, 0, + 191, 0, 81, 0, 347, 344, 0, 0, 0, 0, + 134, 126, 33, 12, 108, 56, 53, 117, 119, 12, + 10, 0, 143, 0, 142, 0, 327, 194, 0, 0, + 170, 0, 0, 348, 0, 12, 0, 0, 0, 10, + 12, 10, 85, 144, 0, 141, 0, 192, 189, 173, + 193, 345, 0, 10, 24, 128, 12, 106, 34, 0, + 10, 0, 146, 63, 0, 0, 0, 0, 10, 109, + 145, 0, 190, 147, 131, 129, 0, 12, 0, 12, + 107, 10, 0, 10, 64, 175, 12, 174, 68, 10, + 0, 65, 67, 69, 176, 0, 70, 71, 0, 0, + 72, 0, 12, 10, 73 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 2, 4, 75, 175, 300, 414, 718, 77, - 446, 556, 502, 617, 245, 508, 139, 507, 452, 621, - 716, 459, 375, 512, 694, 374, 511, 693, 143, 154, - 638, 703, 752, 770, 773, 774, 775, 780, 783, 271, - 272, 158, 78, 79, 256, 80, 149, 460, 81, 421, - 307, 82, 306, 83, 423, 486, 487, 623, 565, 739, - 719, 517, 377, 520, 570, 721, 697, 671, 561, 618, - 748, 655, 761, 658, 688, 575, 576, 577, 365, 366, - 161, 162, 166, 544, 601, 646, 682, 746, 769, 602, - 603, 604, 605, 681, 606, 137, 246, 247, 453, 84, - 278, 548, 235, 316, 317, 312, 314, 315, 547, 112, - 85, 241, 490, 491, 351, 86, 128, 129, 361, 501, - 554, 616, 134, 360, 87, 389, 390, 88, 525, 407, - 526, 89, 90, 402, 474, 91, 224, 92, 352, 497, - 612, 653, 711, 551, 611, 93, 94, 95, 96, 97, - 98, 354, 438, 496, 439, 440, 99, 400, 401, 529, - 281, 282, 173, 297, 479, 538, 100, 275, 470, 101 + -1, 1, 2, 4, 75, 175, 300, 414, 694, 77, + 446, 558, 502, 619, 245, 508, 139, 507, 452, 623, + 718, 459, 455, 664, 454, 663, 143, 154, 639, 705, + 751, 768, 771, 772, 773, 778, 781, 271, 272, 158, + 78, 79, 256, 80, 149, 460, 81, 421, 307, 82, + 306, 83, 423, 486, 487, 566, 513, 738, 695, 519, + 377, 522, 572, 720, 699, 671, 563, 620, 747, 656, + 759, 659, 688, 577, 578, 579, 365, 366, 161, 162, + 166, 546, 603, 647, 682, 745, 767, 604, 605, 606, + 607, 681, 608, 137, 246, 247, 453, 84, 278, 550, + 235, 316, 317, 312, 314, 315, 549, 112, 85, 241, + 490, 491, 351, 86, 128, 129, 361, 501, 556, 618, + 134, 360, 87, 389, 390, 88, 527, 407, 528, 89, + 90, 402, 474, 91, 224, 92, 352, 497, 614, 654, + 713, 553, 613, 93, 94, 95, 96, 97, 98, 354, + 438, 496, 439, 440, 99, 400, 401, 531, 281, 282, + 173, 297, 479, 540, 100, 275, 470, 101 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -447 +#define YYPACT_NINF -445 static const yytype_int16 yypact[] = { - -447, 55, 78, -447, 820, 3088, 3088, -78, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, -447, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 49, 49, 3088, 99, -75, -58, -447, - -447, -89, -447, -447, -447, -447, 3088, -447, -44, 2, - 23, -447, 34, 1702, 1828, -447, 1954, -447, 3088, 110, - -27, 43, 60, 127, 114, 141, 155, 170, -447, -447, - 171, 174, -447, -447, -447, -447, -447, -447, 3088, -447, - -447, 156, -447, -447, -447, -447, -447, -447, -447, -447, - -447, -447, 69, 247, -447, -447, 182, -447, -447, 3341, - -447, -2, 762, 184, -447, 207, -447, -9, -447, 56, - -447, -447, 2766, 2766, 3088, 2766, 2766, 3141, 239, 239, - 293, -447, 3088, -447, -447, -447, -447, -447, -447, -447, - 191, 211, -447, -447, -447, -447, 213, 214, -447, -447, - 223, 22, 56, 2080, -447, 3088, -447, -1, 2766, 1576, - -447, 3088, 3088, 215, 3088, -447, 3386, -447, 3427, 326, - -447, 218, 2766, 963, 227, 3468, -447, 309, 236, -447, - -54, 1, -447, -447, -447, 381, 5, 49, 49, 49, - 256, -447, 2206, 202, 3509, 262, 3088, 252, 669, 1088, - 289, -447, 100, -447, 3088, -447, -447, -447, -447, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 99, -447, - -447, -447, 2332, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, -447, -447, -447, 3088, 3088, 156, - 26, 3550, -447, 126, 57, 260, -447, 22, -447, 3591, - 3632, 2458, 3088, -447, 328, 3088, 269, 410, 2766, 330, - 1341, 350, 3673, -447, -447, -447, 351, -447, -447, -447, - -447, 284, -447, 3088, -447, -447, -27, -447, 501, 355, - -447, 16, -447, -447, -447, 19, 290, 288, -55, 49, - 70, 291, 415, -447, -447, 137, -447, -447, -447, -447, - -447, -447, 3214, 49, -447, -447, -447, -447, -447, -447, - 946, 1884, -447, -447, -447, 362, -447, 316, 295, 296, - 22, 56, 3088, 3017, 3088, 3088, 3088, 3088, 3992, 1568, - 1693, 1819, 1819, 1819, 1819, 1441, 1441, 1441, 1441, 319, - 319, 239, 239, 239, 293, 293, 293, -447, 62, 3141, - 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141, - 3141, 2458, 50, 2766, 294, 2010, -447, 295, -447, 2458, - -447, 50, -447, 411, 49, 297, 431, 27, 664, 2766, - 300, 3714, -447, -447, 352, 354, 432, 39, -447, -447, - 304, -447, 2136, -447, 501, 501, 311, 313, -447, -447, - -447, 438, 49, 317, -447, -447, -447, -447, 315, -447, - 40, -447, -447, -447, 2584, -447, 2710, -447, -447, 389, - 400, 2262, 320, 323, -447, -447, -447, -447, -447, -447, - -447, 346, 362, 324, -447, -447, 22, 2891, 3141, 2640, - 3951, 3972, 99, -447, 325, -447, 3088, -447, -447, 24, - -447, -447, -447, 327, -447, -447, 1576, -447, -447, 2836, - -447, -447, 3088, 3088, -447, -447, 501, 403, 1072, -15, - 335, 378, -447, -447, -447, 409, 501, 501, -447, -447, - 49, -447, -55, 469, -447, 49, 2766, 49, 3878, 216, - -447, 3088, -447, -447, 342, 362, 341, 477, -447, -447, - 2458, 2458, -447, -447, -447, 2388, -447, 347, 3088, 3088, - -447, -447, -447, -447, 49, 41, 828, 3088, 1198, 348, - 2766, 49, 13, -447, 479, -447, -447, -447, 353, 358, - -447, 65, 356, -447, 372, 361, 486, -447, -447, -55, - -447, 3088, -447, -447, 2962, -447, -447, -447, 360, 1759, - 363, 477, -447, 362, 275, 366, 371, 3088, 260, -447, - -447, -447, 364, 2514, 377, 241, -447, -447, 3755, -447, - -447, -447, -447, 382, 49, 382, -447, 501, 425, -447, - 282, -447, 173, -447, -447, 375, 496, 243, -447, 501, - -447, 501, -447, 45, 3141, 49, 2766, -447, 373, -447, - 593, -447, 450, -447, -447, -447, -447, -447, -447, -447, - -447, -447, -447, 428, -36, -447, 6, -447, -447, 3911, - -447, 2458, 402, -447, -447, 50, -447, -447, 9, 384, - 445, 3088, 13, 388, -447, 391, -447, 392, 299, 394, - 3088, -16, 204, -447, 387, 67, 460, 524, 362, -447, - 419, -447, -447, -447, -447, 532, 473, -447, -447, 476, - -447, 408, 50, -447, -447, 235, 416, 1576, -447, -447, - 418, 420, -447, -447, -447, -447, 421, -447, 3270, -447, - -447, -447, -447, -447, 246, 537, 501, -447, 501, 501, - 544, 7, 326, 551, -447, -447, 426, 539, 500, 3088, - -447, -447, -447, 1324, 1324, -447, -447, -447, 429, 502, - 556, 501, -447, 503, -447, -447, 501, 505, -447, 510, - 501, 347, 3088, -447, 440, 3796, 1450, -447, -447, -447, - -447, -447, 159, -447, 561, 501, -447, 443, -447, 572, - -447, -447, -447, 3837, 519, -447, -447, -447, -447, -447, - 504, 200, 501, -447, -447, 501, 448, 563, 1576, 507, - 451, -447, 447, -447, 65, -447, -447, 452, -447, -447, - 454, -447, -447, 453, -50, 336, -447, -447, -447, -447, - 497, 456, 461, -447, 497, -447, -447, 362, -447, -447, - 530, 464, -447, 463, -447, 467, -447 + -445, 51, 83, -445, 814, 3082, 3082, -115, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, -445, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 15, 15, 3082, 28, -40, -20, -445, + -445, 159, -445, -445, -445, -445, 3082, -445, -11, -8, + 3, -445, 26, 1696, 1822, -445, 1948, -445, 3082, 24, + -37, 22, 56, 53, 52, 54, 63, 120, -445, -445, + 124, 127, -445, -445, -445, -445, -445, -445, 3082, -445, + -445, -7, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, 119, 125, -445, -445, 130, -445, -445, 3335, + -445, 246, 1209, 139, -445, 163, -445, -50, -445, -26, + -445, -445, 2760, 2760, 3082, 2760, 2760, 3135, 64, 64, + 254, -445, 3082, -445, -445, -445, -445, -445, -445, -445, + 168, 171, -445, -445, -445, -445, 173, 175, -445, -445, + 206, -46, -26, 2074, -445, 3082, -445, 5, 2760, 1570, + -445, 3082, 3082, 194, 3082, -445, 3380, -445, 3421, 318, + -445, 212, 2760, 579, 213, 3462, -445, 279, 226, -445, + -21, 8, -445, -445, -445, 360, 10, 15, 15, 15, + 233, -445, 2200, 547, 3503, 232, 3082, 830, 654, 956, + 259, -445, 43, -445, 3082, -445, -445, -445, -445, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 28, -445, + -445, -445, 2326, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, -445, -445, -445, 3082, 3082, -7, + -49, 3544, -445, 50, -14, 238, -445, -46, -445, 3585, + 3626, 2452, 3082, -445, 297, 3082, 239, 375, 2760, 295, + 723, 316, 3667, -445, -445, -445, 317, -445, -445, -445, + -445, 265, -445, 3082, -445, -445, -37, -445, 1734, 325, + -445, -1, -445, -445, -445, 20, 269, 270, -10, 15, + 3872, 274, 403, -445, -445, 31, -445, -445, -445, -445, + -445, -445, 3208, 15, -445, -445, -445, -445, -445, -445, + 940, 1878, -445, -445, -445, 343, -445, 298, 277, 278, + -46, -26, 3082, 3011, 3082, 3082, 3082, 3082, 3943, 1562, + 1687, 1939, 1939, 1939, 1939, 718, 718, 718, 718, 358, + 358, 64, 64, 64, 254, 254, 254, -445, -3, 3135, + 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, + 3135, 2452, 25, 2760, 271, 2004, -445, 277, -445, 2452, + -445, 25, -445, 393, 15, 281, 413, 36, 58, 2760, + 283, 3708, -445, -445, -445, -445, 411, 40, -445, -445, + 282, -445, 2130, -445, 1734, 1734, 290, 293, -445, -445, + -445, 421, 15, 294, -445, -445, -445, -445, 300, -445, + 41, -445, -445, -445, 2578, -445, 2704, -445, -445, 364, + 376, 2256, 299, 301, -445, -445, -445, -445, -445, -445, + -445, 319, 343, 302, -445, -445, -46, 2885, 3135, 2634, + 4007, 4028, 28, -445, 303, -445, 3082, -445, -445, -41, + -445, -445, -445, 305, -445, -445, 1570, -445, -445, 2830, + -445, -445, 3082, 3082, 15, 14, 1734, 371, 1066, -16, + 310, 350, -445, -445, -445, 382, 1734, 1734, -445, -445, + 15, -445, -10, 442, -445, 15, 2760, 15, 3913, 33, + -445, 3082, -445, -445, 315, 343, 321, 450, -445, -445, + 2452, 2452, -445, -445, -445, 2382, -445, 326, 3082, 3082, + -445, -445, -445, -445, 15, 45, 272, 3082, 1192, 327, + 2760, 338, 15, 338, -445, -445, 448, -445, -445, -445, + 329, 330, -445, 34, 328, -445, 346, 337, 471, -445, + -445, -10, -445, 3082, -445, -445, 2956, -445, -445, -445, + 331, 1753, 340, 450, -445, 343, 167, 344, 345, 3082, + 238, -445, -445, -445, 339, 2508, 367, 257, -445, -445, + 3749, -445, -445, -445, -445, 14, 349, -445, 351, 1734, + 402, -445, 236, -445, 157, -445, -445, 352, 486, 103, + -445, 1734, -445, 1734, -445, 46, 3135, 15, 2760, -445, + 353, -445, 211, -445, 424, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, 399, 287, -445, 11, -445, + -445, 3967, -445, 2452, 379, -445, -445, 25, -445, -445, + 273, 361, 422, 3082, -445, -445, -445, -445, 362, 251, + 372, 3082, -12, 160, -445, 366, 44, 440, 503, 343, + -445, 396, -445, -445, -445, -445, 508, 452, -445, -445, + 455, -445, 386, 25, -445, -445, 280, 383, 1570, -445, + -445, 387, 389, 1318, 1318, -445, 390, -445, 3264, -445, + -445, -445, -445, -445, 227, 518, 1734, -445, 1734, 1734, + 520, 13, 318, 521, -445, -445, 395, 510, 469, 3082, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + 394, 466, 528, 1734, -445, 470, -445, -445, 1734, 473, + -445, 476, 1734, 326, 3082, -445, 407, 3790, 1444, 457, + -445, 108, -445, 537, 1734, -445, 410, -445, 539, -445, + -445, -445, 3831, 485, -445, -445, -445, -445, -445, 414, + 115, 1734, -445, -445, 1734, 423, 536, 1570, 482, -445, + -445, 425, -445, 34, -445, -445, 427, -445, 430, -445, + -445, 428, 223, 285, -445, -445, -445, -445, 474, 432, + 434, -445, 474, -445, -445, 343, -445, -445, 504, 437, + -445, 436, -445, 439, -445 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -447, -447, -447, -447, -447, -182, -447, -447, 0, -447, - -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, - -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, - -447, -447, -447, -447, -447, -447, -167, -447, -447, -447, - 221, -447, 308, 314, -66, -447, -447, -447, -447, -447, - -447, -447, -447, -447, -447, -447, 132, 53, 10, -447, - -74, -447, -447, -447, -311, -447, -447, -47, -447, -447, - -447, -447, -447, -447, -447, -132, -447, -12, -339, -447, - -447, 367, -447, 88, -447, -447, -447, -447, -447, -447, - -447, -447, 30, -447, -447, -447, -446, -447, -447, 8, - -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, - -447, -447, -447, -447, -447, -23, -186, -447, -447, -447, - -447, -447, -447, 87, 86, 92, -447, -447, -447, 112, - -447, 20, 480, -321, -447, 281, -447, 245, -447, -447, - -447, -447, -447, -72, -447, -174, -447, -447, -24, -5, - -447, 138, -356, -447, -447, -447, -3, 113, 172, -447, - -447, -447, 343, -447, -447, -447, -447, -447, -447, -447 + -445, -445, -445, -445, -445, -175, -445, -445, 2, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -192, -445, -445, -445, 193, -445, + 288, 304, -95, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, 104, 77, 47, -445, -59, -445, + -445, -445, -382, -445, -445, -62, -445, -445, -445, -445, + -445, -445, -445, -144, -445, -25, -342, -445, -445, 356, + -445, 66, -445, -445, -445, -445, -445, -445, -445, -445, + 27, -445, -445, -445, -444, -445, -445, 16, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -23, -185, -445, -445, -445, -445, -445, + -445, 67, 92, 99, -445, -445, -445, 91, -445, 21, + 467, -306, -445, 347, -445, 222, -445, -445, -445, -445, + -445, -87, -445, -178, -445, -445, -24, -4, -445, 132, + -356, -445, -445, -445, -2, 97, 164, -445, -445, -445, + 289, -445, -445, -445, -445, -445, -445, -445 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -353 +#define YYTABLE_NINF -351 static const yytype_int16 yytable[] = { - 121, 121, 130, 127, 76, 444, 509, 242, 309, 266, - 669, 518, 434, 269, 649, 707, 120, 120, 33, 33, - 443, 131, 337, 132, 392, 102, 103, 394, 105, 106, - 107, 108, 109, 110, 111, -154, 113, 114, 115, 116, - 117, 118, 119, 447, 564, 125, 159, 457, 472, -157, - -288, 136, 227, 472, 151, 3, 138, 210, 211, 309, - 358, -182, 104, 146, 148, 133, 152, 398, 155, 593, - 594, 595, 596, 597, 598, 656, 657, 380, -2, 183, - 184, 185, 135, 227, 120, 498, 33, 227, 174, 263, - 71, 71, 767, 768, 230, 186, 140, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 160, 208, - 120, 435, 33, 33, 231, 432, 670, 237, 519, 33, - 33, -351, 232, 120, 228, 33, 573, 121, 573, 244, - 180, 243, 141, 267, 121, 121, 121, 270, 650, 708, - 249, 545, 546, 239, 532, 240, 533, 393, 71, 163, - 395, 248, 152, 142, 252, 228, -352, 499, -154, 228, - 126, 308, 33, 33, 144, 661, 164, 310, 437, 311, - 458, 473, -157, 557, 130, 127, 641, 437, 574, 156, - 574, 404, 280, 436, 71, 71, 301, 357, 408, 33, - 165, 229, 71, 131, 313, 132, -140, 71, 572, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 310, 310, - 311, 311, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, 71, 71, 493, 353, 355, 367, - 157, -124, -124, -124, 167, 121, 121, 409, 628, 654, - 632, 152, 369, 283, 642, 371, 630, 631, 123, 123, - 121, 71, 651, 284, 636, 285, 286, 699, 287, 288, - 289, 168, 420, 382, 205, 206, 207, 535, 208, 536, - 537, 153, -122, -122, -122, 169, 685, 630, 631, 176, - 415, 686, 687, -124, 122, 124, 426, -23, -23, -23, - 170, 171, 411, 283, 172, 121, 637, 633, 181, 700, - 555, 182, 290, 284, 225, 285, 286, 226, 287, 288, - 289, 136, 427, 568, 428, 429, 430, 431, 291, 292, - 293, 121, 208, 236, -122, 294, 295, 310, 672, 311, - 233, 296, -288, 234, 388, 251, 310, 255, 311, 367, - 257, 202, 203, 204, 205, 206, 207, 367, 208, 121, - 259, 152, 290, 592, 629, 630, 631, 620, 262, 152, - 593, 594, 595, 596, 597, 598, 599, 250, 261, 292, - 293, 666, 630, 631, 268, 294, 295, 277, 302, 488, - 359, 296, -134, -134, -134, 265, 299, 305, 130, 127, - 370, 372, 273, 274, 276, 177, 178, 179, 373, 600, - -55, 376, 379, 406, 476, 381, 478, 131, 391, 132, - 397, 396, 405, 419, 422, 424, 425, 445, 448, 449, - 450, 437, 454, 441, 455, 456, 503, 121, 461, 121, - 465, 467, 121, 466, 121, 471, 495, 505, 516, 469, - 480, 481, 488, 484, 483, 485, 494, 489, 500, 152, - 388, 388, 248, 510, 514, 521, 463, 464, 437, 522, - 523, 121, 531, 540, 542, 543, 368, 550, 121, 121, - 562, 698, 567, 579, 581, 569, 578, 615, 367, 367, - 571, 539, 580, 622, 635, 589, 121, 607, 560, 587, - 152, 152, 608, 613, 627, 722, 634, 643, 353, 553, - 591, 645, 652, 399, 403, 647, 659, 558, 660, 663, - 673, 734, 664, 675, 665, 740, 667, 676, 412, 741, - 678, 121, 388, 384, 385, 679, 680, 683, 513, 684, - 701, 584, 388, 388, 586, 749, 689, 706, 524, 527, - 691, 692, 121, 695, 710, 713, 712, 609, 714, 725, - 29, 30, 386, 723, 742, 724, 727, 763, 729, 765, - 35, 730, 735, 433, 744, 745, 771, -138, 754, 755, - 759, 750, 757, 758, 762, 764, 368, 766, 772, 121, - 776, 777, 785, 781, 368, 782, 784, 778, 416, 403, - 310, 786, 311, 468, 417, 677, 709, 541, 625, 367, - 720, 696, 760, 674, 387, 62, 63, 64, 65, 66, - 590, 152, 662, 383, 648, 610, 552, 273, 582, 732, - 264, 248, 583, 0, 530, 0, 0, 310, 0, 311, - 668, 0, 0, 388, 0, 0, 0, 690, 0, 626, - 0, 0, 0, 0, 0, 388, 0, 388, 0, 0, - 0, 639, -155, 640, 0, 0, 0, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 0, - 0, 592, 0, 0, 506, 0, 0, 0, 593, 594, - 595, 596, 597, 598, 599, 0, 0, 0, 0, 715, - 0, 0, 0, 0, 0, 528, 738, 399, 0, 0, - 403, 0, 403, -338, -338, 0, 0, 0, 0, 0, - 283, 0, 733, 0, 0, 368, 368, 644, 0, 0, - 284, 0, 285, 286, 0, 287, 288, 289, 756, 403, - 0, 0, 0, 0, 779, 0, 563, 566, 0, 0, - 0, 0, 388, 0, 388, 388, 0, 0, 702, 0, - 704, 705, 0, 0, 399, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 388, 0, 290, - 0, 0, 388, 726, 0, 0, 388, 0, 728, 0, - 0, 0, 731, 0, 0, -155, 292, 293, 0, 624, - 0, 388, 294, 295, 0, 0, 303, 743, 296, 0, - 0, -338, -338, 5, 6, 7, 8, 9, 388, 0, - 403, 388, 10, 0, 751, 0, -158, 753, 0, 0, - 0, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 0, 0, 0, 368, 0, 0, 0, - 0, 0, 11, 12, 0, 0, 0, 566, 13, 0, + 121, 121, 130, 127, 309, 444, 76, 392, 509, 434, + 520, 227, 227, 242, 669, 227, 266, 443, 269, 650, + 498, 709, 131, 337, 132, 104, 102, 103, 394, 105, + 106, 107, 108, 109, 110, 111, 159, 113, 114, 115, + 116, 117, 118, 119, -152, 512, 125, 33, 457, 472, + 120, 3, 33, -155, 472, 309, 358, 138, 447, 33, + 432, 120, 151, 33, 146, 148, -153, 152, 120, 155, + 33, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, -2, 380, 120, 120, 33, 33, 174, + -349, -350, 408, 228, 228, 230, 435, 228, 33, 126, + 133, 33, 499, 156, 537, 575, 538, 539, 160, 205, + 206, 207, 398, 208, 308, 575, 33, -336, -336, 229, + 135, 357, 263, 33, 71, 231, 165, 521, 237, 140, + 670, 71, 141, 232, 637, 71, 176, 121, 163, 574, + 393, 244, 71, 142, 121, 121, 121, 243, 547, 548, + 267, 409, 270, 651, 239, 710, 240, 576, 249, 71, + 71, 395, 248, 152, 157, 252, 144, 576, 436, 534, + 71, 535, 164, 71, 437, -138, 638, -152, 310, 662, + 311, 458, 473, 437, 130, 127, -155, 642, 71, 629, + 180, 633, 167, 280, 168, 71, 181, 301, 559, -153, + -122, -122, -122, 169, 131, 313, 132, -120, -120, -120, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 310, + 310, 311, 311, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 123, 123, 493, 353, 355, + 631, 632, -122, 631, 632, 121, 121, 367, 701, -120, + 170, 655, 152, 369, 171, 594, 371, 172, 153, 182, + 121, 652, 595, 596, 597, 598, 599, 600, 601, 225, + -156, 643, 420, 226, 382, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 685, -286, 136, + 702, 634, 415, 208, 672, 210, 211, 426, 136, 594, + 233, 602, -286, 411, 234, 121, 595, 596, 597, 598, + 599, 600, 601, -23, -23, -23, 236, 557, 630, 631, + 632, -336, -336, 427, 251, 428, 429, 430, 431, 657, + 658, 121, 570, 666, 631, 632, 686, 687, 310, 255, + 311, -132, -132, -132, 257, 645, 259, 310, 261, 311, + 388, 177, 178, 179, 250, 765, 766, 367, 262, 121, + 122, 124, 152, 268, 277, 367, 299, 305, 359, 370, + 152, 372, 265, 373, -180, 374, 622, 376, 379, 273, + 274, 276, 595, 596, 597, 598, 599, 600, 391, 488, + 202, 203, 204, 205, 206, 207, 381, 208, 130, 127, + 396, 406, 397, -156, 419, 405, 422, 424, 425, 445, + 441, 449, 448, 450, 456, 476, 461, 478, 131, 465, + 132, 121, 121, 466, 467, 480, 469, 481, 485, 437, + 471, 484, 516, 483, 494, 489, 500, 121, 503, 121, + 523, 524, 121, 525, 121, 533, 542, 495, 545, 565, + 518, 569, 488, 368, 544, 505, 552, 581, 580, 564, + 152, 571, 573, 248, 510, 437, 388, 388, 582, 583, + 589, 121, 591, 463, 464, 609, 610, 617, 615, 121, + 625, 628, 626, 635, 636, 646, 648, 644, 700, 653, + 399, 403, 541, 660, 665, 661, 367, 367, 121, 673, + 562, 152, 152, 675, 667, 412, 676, 678, 719, 353, + 555, 679, 593, 689, 721, 680, 683, 684, 560, 691, + 692, 703, 697, 708, 712, 714, 715, 716, 722, 723, + 733, 724, 121, 726, 739, 740, 728, 729, 388, 734, + 741, 743, 744, -136, 586, 515, 749, 588, 388, 388, + 433, 748, 754, 753, 121, 526, 529, 756, 757, 760, + 611, 762, 764, 368, 775, 770, 774, 779, 780, 782, + 776, 368, 761, 784, 763, 468, 403, 711, 416, 543, + 568, 769, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 417, 696, 698, 783, 283, 758, + 592, 674, 624, 310, 273, 311, 677, 612, 284, 584, + 285, 286, 383, 287, 288, 289, 731, 264, 585, 367, + 554, 0, 0, 649, 152, 0, 532, 0, -336, -336, + 0, 0, 0, 0, 248, 0, 0, 0, 0, 310, + 0, 311, 668, 0, 0, 0, 0, 0, 0, 0, + 690, 388, 0, 0, 0, 0, 0, 290, 627, 0, + 0, 506, 0, 388, 0, 388, 511, 514, 0, 0, + 640, 0, 641, 291, 292, 293, 0, 0, 0, 0, + 294, 295, 530, 0, 399, 0, 296, 403, 0, 403, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 717, 0, 368, 368, 0, 283, 0, 0, 0, 0, + 737, 258, 0, 0, 0, 284, 403, 285, 286, 0, + 287, 288, 289, 0, 567, 732, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 0, 755, + 0, 0, 777, 399, -351, -351, -351, -351, 200, 201, + 202, 203, 204, 205, 206, 207, 0, 208, 388, 0, + 388, 388, 0, 0, 290, 704, 0, 706, 707, 0, + 0, 0, -336, -336, 0, 0, 0, 514, 0, 0, + 0, 292, 293, 0, 0, 388, 0, 294, 295, 0, + 388, 303, 725, 296, 388, 0, 0, 727, 0, 403, + 0, 730, 0, 375, 0, 0, 388, 5, 6, 7, + 8, 9, 0, 742, 0, 0, 10, 0, 0, 0, + 0, 0, 0, 388, 0, 368, 388, 0, 0, 0, + 750, 0, 0, 752, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, + 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 0, 25, 26, 27, 28, + 0, 0, 0, 29, 30, 31, 32, 33, 0, 34, + 0, 283, 0, 35, 36, 37, 38, 0, 39, 0, + 40, 284, 41, 285, 286, 42, 287, 288, 289, 43, + 44, 45, 0, 46, 47, 0, 48, 49, 50, 0, + 0, 0, 51, 52, 53, 0, 54, 55, 56, 57, + 58, 59, 0, 0, 0, 0, 60, 61, 62, 63, + 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, + 290, 0, 10, 0, 68, 0, 69, 70, 0, 71, + 72, 73, 74, 0, 0, 0, 0, 292, 293, 0, + 0, 0, 0, 294, 295, 0, 302, 0, 0, 296, + 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 0, 25, 26, 27, 28, 0, -338, -338, 29, - 30, 31, 32, 33, 0, 34, 0, 0, 0, 35, - 36, 37, 38, 0, 39, 0, 40, 0, 41, 0, - 0, 42, 0, 0, 0, 43, 44, 45, 0, 46, + 24, 0, 25, 26, 27, 28, 0, 0, 0, 29, + 30, 31, 32, 33, 0, 34, 0, 283, 0, 35, + 36, 37, 38, 0, 39, 0, 40, 284, 41, 285, + 286, 42, 287, 288, 289, 43, 44, 45, 0, 46, 47, 0, 48, 49, 50, 0, 0, 0, 51, 52, - 53, 0, 54, 55, 56, 57, 58, 59, 0, 0, + 53, 0, 54, 55, 56, 413, 58, 59, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, - 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, - 68, 0, 69, 70, 0, 71, 72, 73, 74, -158, - 0, 0, 0, 0, 0, 0, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 11, 12, + 6, 7, 8, 9, 0, 67, 290, 0, 10, 0, + 68, 0, 69, 70, 0, 71, 72, 73, 74, 0, + 0, 0, 517, 292, 293, 0, 0, 0, 0, 294, + 295, 0, 0, 0, 304, 296, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, 33, - 0, 34, -338, -338, 0, 35, 36, 37, 38, 0, + 0, 34, 0, 0, 0, 35, 36, 37, 38, 0, 39, 0, 40, 0, 41, 0, 0, 42, 0, 0, - 0, 43, 44, 45, 0, 46, 47, 0, 48, 49, - 50, 0, 0, 0, 51, 52, 53, 0, 54, 55, - 56, 413, 58, 59, 0, 0, 0, 0, 60, 61, + 0, 43, 44, 0, 0, 46, 47, 0, 48, 49, + 50, 0, 0, 0, 0, 0, 53, 0, 54, 55, + 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 69, 70, - 0, 71, 72, 73, 74, 0, 0, 0, 515, 0, - 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, + 0, 71, 72, 73, 74, 0, 0, 0, 561, 0, + 0, 0, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 28, 0, 0, - 0, 29, 30, 31, 32, 33, 0, 34, 0, 283, - 0, 35, 36, 37, 38, 0, 39, 0, 40, 284, - 41, 285, 286, 42, 287, 288, 289, 43, 44, 0, + 0, 29, 30, 31, 32, 33, 0, 34, -336, -336, + 0, 35, 36, 37, 38, 0, 39, 0, 40, 0, + 41, 0, 0, 42, 0, 0, 0, 43, 44, 0, 0, 46, 47, 0, 48, 49, 50, 0, 0, 0, 0, 0, 53, 0, 54, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, - 66, 5, 6, 7, 8, 9, 0, 67, 290, 0, + 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 69, 70, 0, 71, 72, 73, - 74, 0, 0, 0, 559, 292, 293, 0, 0, 0, - 0, 294, 295, 0, 0, 0, 304, 296, 0, 0, + 74, 0, 0, 0, 693, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, @@ -1475,21 +1486,21 @@ static const yytype_int16 yytable[] = 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 69, 70, 0, 71, 72, 73, 74, 0, 0, 0, - 717, 0, 0, 0, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 11, 12, 0, 0, + 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, 34, - -338, -338, 0, 35, 36, 37, 38, 0, 39, 0, + 0, 0, 0, 35, 36, 37, 38, 0, 39, 0, 40, 0, 41, 0, 0, 42, 0, 0, 0, 43, 44, 0, 0, 46, 47, 0, 48, 49, 50, 0, - 0, -51, 0, 0, 53, 0, 54, 55, 56, 0, + 0, 0, 0, 0, 53, 0, 54, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 69, 70, 0, 71, - 72, 73, 74, 0, 0, 0, 737, -353, -353, -353, - -353, 200, 201, 202, 203, 204, 205, 206, 207, 0, - 208, 0, 11, 12, 0, 0, 0, 0, 13, 0, + 72, 73, 74, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 0, 208, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, 0, 0, 35, @@ -1499,76 +1510,76 @@ static const yytype_int16 yytable[] = 53, 0, 54, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, - 68, 0, 69, 70, 0, 71, 72, 73, 74, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 0, 208, 11, 12, + 68, 0, 69, 70, 0, 71, 72, 73, 74, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 0, 208, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, - 27, 28, 0, 0, 0, 29, 30, 31, 32, 33, - 0, 34, 0, 0, 0, 35, 36, 37, 38, 0, - 39, 0, 40, 0, 41, 0, 0, 42, 0, 0, - 0, 43, 44, 0, 0, 46, 47, 0, 48, 49, - 50, 0, 0, 0, 0, 0, 53, 0, 54, 55, - 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, - 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, - 0, 67, 0, 0, 10, 0, 68, 0, 69, 70, - 0, 71, 72, 73, 74, 192, 193, 194, 195, 196, + 27, 0, 183, 184, 185, 29, 30, 31, 32, 33, + 0, 0, 0, 0, 0, 35, 384, 385, 186, 0, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 0, 208, 0, 11, 12, 0, 0, 0, 0, + 207, 0, 208, 29, 30, 386, 0, 0, 0, 55, + 56, 0, 0, 35, 0, 0, 0, 0, 60, 61, + 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, + 0, 67, 0, 0, 10, 0, 68, 0, 145, 0, + 0, 71, 72, 73, 74, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 387, 62, 63, + 64, 65, 66, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 0, 25, 26, 27, 0, 183, 184, - 185, 29, 30, 31, 32, 33, 0, 0, 0, 0, - 0, 35, 0, 0, 186, 0, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 0, 208, 0, + 22, 23, 24, 0, 25, 26, 27, 183, 184, 185, + 0, 29, 30, 31, 32, 33, 0, 0, 0, 0, + 0, 35, 590, 186, 0, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, - 10, 0, 68, 0, 145, 0, 0, 71, 72, 73, - 74, -353, -353, -353, -353, 196, 197, 198, 199, 200, + 10, 0, 68, 0, 147, 0, 0, 71, 72, 73, + 74, -351, -351, -351, -351, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 183, 184, 185, 0, 29, 30, 31, - 32, 33, 0, 0, 0, 0, 0, 35, 588, 186, + 32, 33, 418, 0, 0, 0, 0, 35, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, - 147, 0, 0, 71, 72, 73, 74, 0, 0, 0, + 150, 0, 0, 71, 72, 73, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 183, - 184, 185, 0, 29, 30, 31, 32, 33, 418, 0, + 184, 185, 0, 29, 30, 31, 32, 33, 442, 0, 0, 0, 0, 35, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, - 0, 0, 10, 0, 68, 0, 150, 0, 0, 71, + 0, 0, 10, 0, 68, 238, 0, 0, 0, 71, 72, 73, 74, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 183, 184, 185, 0, 29, - 30, 31, 32, 33, 442, 0, 0, 0, 0, 35, + 30, 31, 32, 33, 462, 0, 0, 0, 0, 35, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, - 68, 238, 0, 0, 0, 71, 72, 73, 74, 0, - 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, + 68, 0, 0, 0, 0, 71, 72, 73, 74, 0, + 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 183, 184, 185, 0, 29, 30, 31, 32, 33, - 462, 0, 0, 0, 0, 35, 0, 186, 0, 187, + 482, 0, 0, 0, 0, 35, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 55, @@ -1576,11 +1587,11 @@ static const yytype_int16 yytable[] = 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 0, 0, 0, 71, 72, 73, 74, 0, 0, 0, 0, 0, - 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 183, 184, 185, - 0, 29, 30, 31, 32, 33, 482, 0, 0, 0, + 0, 29, 30, 31, 32, 33, 551, 0, 0, 0, 0, 35, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 0, 0, @@ -1588,25 +1599,25 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 0, 0, 0, 71, 72, 73, - 74, 0, 0, 0, 0, 0, 0, 0, 0, 364, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 183, 184, 185, 0, 29, 30, 31, - 32, 33, 549, 0, 0, 0, 0, 35, 0, 186, - 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 32, 33, 616, 0, 0, 0, 0, 35, 0, 186, + 492, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 0, 0, 0, 71, 72, 73, 74, 0, 0, 0, - 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 183, - 184, 185, 0, 29, 30, 31, 32, 33, 614, 0, - 0, 0, 0, 35, 0, 186, 492, 187, 188, 189, + 184, 185, 0, 29, 30, 31, 32, 33, 0, 0, + 0, 0, 0, 35, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, @@ -1614,23 +1625,23 @@ static const yytype_int16 yytable[] = 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 0, 0, 0, 71, 72, 73, 74, 0, 0, 0, 0, 0, 0, 0, - 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 0, 25, 26, 27, 183, 184, 185, 0, 29, + 24, 0, 25, 26, 27, 184, 185, 0, 0, 29, 30, 31, 32, 33, 0, 0, 0, 0, 0, 35, - 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 0, 208, 0, 0, 0, 0, + 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 0, 0, 0, 71, 72, 73, 74, 0, - 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, 26, - 27, 184, 185, 0, 0, 29, 30, 31, 32, 33, + 27, 0, 185, 0, 0, 29, 30, 31, 32, 33, 0, 0, 0, 0, 0, 35, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, @@ -1639,14 +1650,14 @@ static const yytype_int16 yytable[] = 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, 0, 0, 0, 71, 72, 73, 74, 0, 0, 0, 0, 0, - 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 0, 25, 26, 27, 0, 185, 0, + 22, 23, 24, 0, 25, 26, 27, 0, 0, 0, 0, 29, 30, 31, 32, 33, 0, 0, 0, 0, - 0, 35, 186, 0, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 0, 208, 0, 0, 0, + 186, 35, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, 8, 9, 0, 67, 0, 0, @@ -1655,224 +1666,227 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, - 25, 26, 27, 0, 0, 0, 0, 29, 30, 31, - 32, 33, 0, 0, 0, 0, 186, 35, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, - 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 26, 27, 183, 184, 185, 0, 29, 30, 31, + 410, 33, 0, 0, 0, 0, 0, 35, 0, 186, + 669, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 0, - 60, 61, 62, 63, 64, 65, 66, 5, 6, 7, - 8, 9, 0, 67, 0, 0, 10, 0, 68, 0, + 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, + 0, 0, 0, 67, 183, 184, 185, 0, 68, 0, 0, 0, 0, 71, 72, 73, 74, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, - 0, 0, 13, 0, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 0, 25, 26, 27, 183, - 184, 185, 0, 29, 30, 31, 410, 33, 0, 0, - 0, 0, 0, 35, 0, 186, 669, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, - 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, - 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, - 64, 65, 66, 0, 0, 0, 0, 0, 0, 67, - 183, 184, 185, 0, 68, 0, 0, 0, 0, 71, - 72, 73, 74, 0, 0, 0, 186, 0, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, - 208, 0, 0, 0, 0, 183, 184, 185, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 186, 670, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 0, 208, 183, 184, 185, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 0, 208, 183, 184, 185, - 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 0, 208, 183, 184, - 185, 0, 0, 0, 0, 0, 0, 0, 253, 0, - 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 0, 208, 183, - 184, 185, 0, 0, 0, 0, 0, 0, 0, 254, - 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, + 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 0, 208, 0, 0, 0, 0, 183, + 184, 185, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 186, 670, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 183, 184, 185, 0, 0, 0, 0, 0, 0, 0, - 260, 0, 0, 0, 0, 0, 186, 0, 187, 188, + 0, 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, - 208, 183, 184, 185, 0, 0, 0, 0, 0, 0, - 298, 0, 0, 0, 0, 0, 0, 186, 0, 187, + 208, 183, 184, 185, 0, 0, 0, 209, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 183, 184, 185, 0, 0, 0, 0, 0, - 0, 356, 0, 0, 0, 0, 0, 0, 186, 0, + 0, 0, 253, 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 183, 184, 185, 0, 0, 0, 0, - 0, 0, 362, 0, 0, 0, 0, 0, 0, 186, + 0, 0, 0, 254, 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 183, 184, 185, 0, 0, 0, - 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 183, 184, 185, 0, 0, - 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 183, 184, 185, 0, - 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, 183, 184, 185, - 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 0, 208, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 736, 187, 188, + 202, 203, 204, 205, 206, 207, 0, 208, 183, 184, + 185, 0, 0, 0, 0, 0, 0, 363, 0, 0, + 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 0, 208, 183, + 184, 185, 0, 0, 0, 0, 0, 0, 378, 0, + 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 0, 208, + 183, 184, 185, 0, 0, 0, 0, 0, 0, 451, + 0, 0, 0, 0, 0, 0, 186, 0, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, - 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 747, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 534, - 208, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 0, 208, 190, 191, 192, 193, 194, 195, 196, 197, + 208, 183, 184, 185, 0, 0, 0, 0, 0, 0, + 621, 0, 0, 0, 0, 0, 0, 186, 0, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 0, 208 + 0, 208, 183, 184, 185, 0, 0, 0, 0, 0, + 0, 735, 0, 0, 0, 0, 0, 0, 186, 0, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 746, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 0, 208, 404, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 0, 208, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 536, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 0, 208, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 0, 208 }; static const yytype_int16 yycheck[] = { - 23, 24, 26, 26, 4, 361, 452, 8, 182, 8, - 26, 26, 351, 8, 8, 8, 71, 71, 73, 73, - 359, 26, 208, 26, 8, 5, 6, 8, 8, 9, - 10, 11, 12, 13, 14, 8, 16, 17, 18, 19, - 20, 21, 22, 364, 31, 25, 73, 8, 8, 8, - 139, 140, 61, 8, 46, 0, 36, 59, 60, 233, - 234, 97, 140, 43, 44, 140, 46, 122, 48, 105, - 106, 107, 108, 109, 110, 66, 67, 259, 0, 9, - 10, 11, 140, 61, 71, 61, 73, 61, 68, 143, - 145, 145, 142, 143, 99, 25, 140, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 145, 49, - 71, 71, 73, 73, 104, 63, 142, 132, 143, 73, - 73, 140, 112, 71, 143, 73, 71, 160, 71, 139, - 71, 142, 140, 142, 167, 168, 169, 142, 142, 142, - 142, 490, 491, 133, 475, 135, 477, 141, 145, 116, - 141, 141, 142, 140, 144, 143, 140, 143, 141, 143, - 71, 71, 73, 73, 140, 621, 116, 182, 352, 182, - 141, 141, 141, 504, 208, 208, 141, 361, 123, 79, - 123, 121, 172, 143, 145, 145, 176, 71, 61, 73, - 73, 145, 145, 208, 184, 208, 141, 145, 519, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 233, 234, - 233, 234, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 145, 145, 432, 227, 228, 241, - 140, 92, 93, 94, 140, 278, 279, 120, 569, 615, - 571, 241, 242, 61, 585, 245, 93, 94, 23, 24, - 293, 145, 611, 71, 31, 73, 74, 31, 76, 77, - 78, 140, 305, 263, 45, 46, 47, 71, 49, 73, - 74, 46, 92, 93, 94, 140, 652, 93, 94, 143, - 300, 66, 67, 144, 23, 24, 311, 66, 67, 68, - 140, 140, 292, 61, 140, 338, 73, 144, 71, 73, - 502, 139, 120, 71, 140, 73, 74, 120, 76, 77, - 78, 140, 312, 515, 314, 315, 316, 317, 136, 137, - 138, 364, 49, 120, 144, 143, 144, 352, 144, 352, - 139, 149, 139, 139, 268, 140, 361, 31, 361, 351, - 142, 42, 43, 44, 45, 46, 47, 359, 49, 392, - 143, 351, 120, 98, 92, 93, 94, 559, 142, 359, - 105, 106, 107, 108, 109, 110, 111, 142, 79, 137, - 138, 92, 93, 94, 13, 143, 144, 141, 146, 422, - 140, 149, 66, 67, 68, 160, 144, 118, 432, 432, - 82, 142, 167, 168, 169, 72, 73, 74, 8, 144, - 90, 71, 71, 8, 404, 141, 406, 432, 73, 432, - 142, 141, 141, 71, 118, 140, 140, 26, 141, 8, - 140, 615, 90, 149, 90, 13, 446, 470, 144, 472, - 139, 13, 475, 140, 477, 140, 436, 449, 458, 142, - 71, 61, 485, 140, 144, 119, 141, 143, 141, 449, - 384, 385, 452, 453, 71, 140, 384, 385, 652, 101, - 71, 504, 13, 141, 143, 8, 241, 140, 511, 512, - 142, 673, 13, 121, 8, 142, 140, 120, 490, 491, - 142, 481, 141, 121, 8, 142, 529, 141, 508, 149, - 490, 491, 141, 149, 89, 697, 141, 144, 498, 499, - 543, 71, 120, 278, 279, 97, 142, 507, 83, 141, - 143, 713, 141, 73, 142, 717, 142, 13, 293, 721, - 121, 564, 456, 42, 43, 13, 73, 71, 456, 141, - 13, 531, 466, 467, 534, 737, 140, 13, 466, 467, - 142, 141, 585, 142, 13, 26, 140, 547, 68, 13, - 69, 70, 71, 144, 13, 73, 73, 759, 73, 761, - 79, 71, 142, 338, 141, 13, 768, 68, 140, 26, - 143, 87, 85, 142, 142, 141, 351, 144, 101, 622, - 144, 140, 784, 73, 359, 141, 143, 774, 300, 364, - 615, 144, 615, 392, 300, 638, 682, 485, 565, 611, - 694, 668, 754, 635, 123, 124, 125, 126, 127, 128, - 542, 611, 622, 266, 604, 548, 498, 392, 526, 711, - 160, 621, 529, -1, 472, -1, -1, 652, -1, 652, - 630, -1, -1, 567, -1, -1, -1, 657, -1, 567, - -1, -1, -1, -1, -1, 579, -1, 581, -1, -1, - -1, 579, 8, 581, -1, -1, -1, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, -1, - -1, 98, -1, -1, 449, -1, -1, -1, 105, 106, - 107, 108, 109, 110, 111, -1, -1, -1, -1, 689, - -1, -1, -1, -1, -1, 470, 716, 472, -1, -1, - 475, -1, 477, 59, 60, -1, -1, -1, -1, -1, - 61, -1, 712, -1, -1, 490, 491, 144, -1, -1, - 71, -1, 73, 74, -1, 76, 77, 78, 748, 504, - -1, -1, -1, -1, 777, -1, 511, 512, -1, -1, - -1, -1, 676, -1, 678, 679, -1, -1, 676, -1, - 678, 679, -1, -1, 529, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 701, -1, 120, - -1, -1, 706, 701, -1, -1, 710, -1, 706, -1, - -1, -1, 710, -1, -1, 141, 137, 138, -1, 564, - -1, 725, 143, 144, -1, -1, 147, 725, 149, -1, - -1, 59, 60, 3, 4, 5, 6, 7, 742, -1, - 585, 745, 12, -1, 742, -1, 8, 745, -1, -1, - -1, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, -1, -1, -1, 611, -1, -1, -1, - -1, -1, 42, 43, -1, -1, -1, 622, 48, -1, + 23, 24, 26, 26, 182, 361, 4, 8, 452, 351, + 26, 61, 61, 8, 26, 61, 8, 359, 8, 8, + 61, 8, 26, 208, 26, 140, 5, 6, 8, 8, + 9, 10, 11, 12, 13, 14, 73, 16, 17, 18, + 19, 20, 21, 22, 8, 31, 25, 73, 8, 8, + 71, 0, 73, 8, 8, 233, 234, 36, 364, 73, + 63, 71, 46, 73, 43, 44, 8, 46, 71, 48, + 73, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 0, 259, 71, 71, 73, 73, 68, + 140, 140, 61, 143, 143, 99, 71, 143, 73, 71, + 140, 73, 143, 79, 71, 71, 73, 74, 145, 45, + 46, 47, 122, 49, 71, 71, 73, 59, 60, 145, + 140, 71, 143, 73, 145, 104, 73, 143, 132, 140, + 142, 145, 140, 112, 31, 145, 143, 160, 116, 521, + 141, 139, 145, 140, 167, 168, 169, 142, 490, 491, + 142, 120, 142, 142, 133, 142, 135, 123, 142, 145, + 145, 141, 141, 142, 140, 144, 140, 123, 143, 475, + 145, 477, 116, 145, 352, 141, 73, 141, 182, 623, + 182, 141, 141, 361, 208, 208, 141, 141, 145, 571, + 71, 573, 140, 172, 140, 145, 71, 176, 504, 141, + 92, 93, 94, 140, 208, 184, 208, 92, 93, 94, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 233, + 234, 233, 234, 212, 213, 214, 215, 216, 217, 218, + 219, 220, 221, 222, 223, 23, 24, 432, 227, 228, + 93, 94, 144, 93, 94, 278, 279, 241, 31, 144, + 140, 617, 241, 242, 140, 98, 245, 140, 46, 139, + 293, 613, 105, 106, 107, 108, 109, 110, 111, 140, + 8, 587, 305, 120, 263, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 653, 139, 140, + 73, 144, 300, 49, 144, 59, 60, 311, 140, 98, + 139, 144, 139, 292, 139, 338, 105, 106, 107, 108, + 109, 110, 111, 66, 67, 68, 120, 502, 92, 93, + 94, 59, 60, 312, 140, 314, 315, 316, 317, 66, + 67, 364, 517, 92, 93, 94, 66, 67, 352, 31, + 352, 66, 67, 68, 142, 144, 143, 361, 79, 361, + 268, 72, 73, 74, 142, 142, 143, 351, 142, 392, + 23, 24, 351, 13, 141, 359, 144, 118, 140, 82, + 359, 142, 160, 8, 97, 90, 561, 71, 71, 167, + 168, 169, 105, 106, 107, 108, 109, 110, 73, 422, + 42, 43, 44, 45, 46, 47, 141, 49, 432, 432, + 141, 8, 142, 141, 71, 141, 118, 140, 140, 26, + 149, 8, 141, 140, 13, 404, 144, 406, 432, 139, + 432, 454, 455, 140, 13, 71, 142, 61, 119, 617, + 140, 140, 71, 144, 141, 143, 141, 470, 446, 472, + 140, 101, 475, 71, 477, 13, 141, 436, 8, 121, + 458, 13, 485, 241, 143, 449, 140, 121, 140, 142, + 449, 142, 142, 452, 453, 653, 384, 385, 141, 8, + 149, 504, 142, 384, 385, 141, 141, 120, 149, 512, + 141, 89, 141, 141, 8, 71, 97, 144, 673, 120, + 278, 279, 481, 142, 142, 83, 490, 491, 531, 143, + 508, 490, 491, 73, 142, 293, 13, 121, 693, 498, + 499, 13, 545, 140, 699, 73, 71, 141, 507, 142, + 141, 13, 142, 13, 13, 140, 26, 68, 144, 73, + 715, 13, 565, 73, 87, 720, 73, 71, 456, 142, + 13, 141, 13, 68, 533, 456, 142, 536, 466, 467, + 338, 736, 26, 140, 587, 466, 467, 85, 143, 142, + 549, 141, 144, 351, 140, 101, 144, 73, 141, 143, + 772, 359, 757, 144, 759, 392, 364, 682, 300, 485, + 513, 766, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 300, 664, 668, 782, 61, 753, + 544, 636, 565, 617, 392, 617, 639, 550, 71, 528, + 73, 74, 266, 76, 77, 78, 713, 160, 531, 613, + 498, -1, -1, 606, 613, -1, 472, -1, 59, 60, + -1, -1, -1, -1, 623, -1, -1, -1, -1, 653, + -1, 653, 631, -1, -1, -1, -1, -1, -1, -1, + 658, 569, -1, -1, -1, -1, -1, 120, 569, -1, + -1, 449, -1, 581, -1, 583, 454, 455, -1, -1, + 581, -1, 583, 136, 137, 138, -1, -1, -1, -1, + 143, 144, 470, -1, 472, -1, 149, 475, -1, 477, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 689, -1, 490, 491, -1, 61, -1, -1, -1, -1, + 718, 142, -1, -1, -1, 71, 504, 73, 74, -1, + 76, 77, 78, -1, 512, 714, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, -1, 747, + -1, -1, 775, 531, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, -1, 49, 676, -1, + 678, 679, -1, -1, 120, 676, -1, 678, 679, -1, + -1, -1, 59, 60, -1, -1, -1, 565, -1, -1, + -1, 137, 138, -1, -1, 703, -1, 143, 144, -1, + 708, 147, 703, 149, 712, -1, -1, 708, -1, 587, + -1, 712, -1, 90, -1, -1, 724, 3, 4, 5, + 6, 7, -1, 724, -1, -1, 12, -1, -1, -1, + -1, -1, -1, 741, -1, 613, 744, -1, -1, -1, + 741, -1, -1, 744, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, + -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, + -1, -1, -1, 69, 70, 71, 72, 73, -1, 75, + -1, 61, -1, 79, 80, 81, 82, -1, 84, -1, + 86, 71, 88, 73, 74, 91, 76, 77, 78, 95, + 96, 97, -1, 99, 100, -1, 102, 103, 104, -1, + -1, -1, 108, 109, 110, -1, 112, 113, 114, 115, + 116, 117, -1, -1, -1, -1, 122, 123, 124, 125, + 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, + 120, -1, 12, -1, 140, -1, 142, 143, -1, 145, + 146, 147, 148, -1, -1, -1, -1, 137, 138, -1, + -1, -1, -1, 143, 144, -1, 146, -1, -1, 149, + -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, -1, 62, 63, 64, 65, -1, 59, 60, 69, - 70, 71, 72, 73, -1, 75, -1, -1, -1, 79, - 80, 81, 82, -1, 84, -1, 86, -1, 88, -1, - -1, 91, -1, -1, -1, 95, 96, 97, -1, 99, + 60, -1, 62, 63, 64, 65, -1, -1, -1, 69, + 70, 71, 72, 73, -1, 75, -1, 61, -1, 79, + 80, 81, 82, -1, 84, -1, 86, 71, 88, 73, + 74, 91, 76, 77, 78, 95, 96, 97, -1, 99, 100, -1, 102, 103, 104, -1, -1, -1, 108, 109, 110, -1, 112, 113, 114, 115, 116, 117, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 3, - 4, 5, 6, 7, -1, 135, -1, -1, 12, -1, - 140, -1, 142, 143, -1, 145, 146, 147, 148, 141, - -1, -1, -1, -1, -1, -1, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 42, 43, + 4, 5, 6, 7, -1, 135, 120, -1, 12, -1, + 140, -1, 142, 143, -1, 145, 146, 147, 148, -1, + -1, -1, 26, 137, 138, -1, -1, -1, -1, 143, + 144, -1, -1, -1, 148, 149, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, -1, -1, -1, 69, 70, 71, 72, 73, - -1, 75, 59, 60, -1, 79, 80, 81, 82, -1, + -1, 75, -1, -1, -1, 79, 80, 81, 82, -1, 84, -1, 86, -1, 88, -1, -1, 91, -1, -1, - -1, 95, 96, 97, -1, 99, 100, -1, 102, 103, - 104, -1, -1, -1, 108, 109, 110, -1, 112, 113, - 114, 115, 116, 117, -1, -1, -1, -1, 122, 123, + -1, 95, 96, -1, -1, 99, 100, -1, 102, 103, + 104, -1, -1, -1, -1, -1, 110, -1, 112, 113, + 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, 12, -1, 140, -1, 142, 143, -1, 145, 146, 147, 148, -1, -1, -1, 26, -1, - -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, - -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, + -1, -1, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, -1, -1, - -1, 69, 70, 71, 72, 73, -1, 75, -1, 61, - -1, 79, 80, 81, 82, -1, 84, -1, 86, 71, - 88, 73, 74, 91, 76, 77, 78, 95, 96, -1, + -1, 69, 70, 71, 72, 73, -1, 75, 59, 60, + -1, 79, 80, 81, 82, -1, 84, -1, 86, -1, + 88, -1, -1, 91, -1, -1, -1, 95, 96, -1, -1, 99, 100, -1, 102, 103, 104, -1, -1, -1, -1, -1, 110, -1, 112, 113, 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, - 128, 3, 4, 5, 6, 7, -1, 135, 120, -1, + 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, 12, -1, 140, -1, 142, 143, -1, 145, 146, 147, - 148, -1, -1, -1, 26, 137, 138, -1, -1, -1, - -1, 143, 144, -1, -1, -1, 148, 149, -1, -1, + 148, -1, -1, -1, 26, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, -1, -1, -1, 69, 70, 71, @@ -1884,21 +1898,21 @@ static const yytype_int16 yycheck[] = 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, 12, -1, 140, -1, 142, 143, -1, 145, 146, 147, 148, -1, -1, -1, - 26, -1, -1, -1, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 42, 43, -1, -1, + 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, -1, -1, -1, 69, 70, 71, 72, 73, -1, 75, - 59, 60, -1, 79, 80, 81, 82, -1, 84, -1, + -1, -1, -1, 79, 80, 81, 82, -1, 84, -1, 86, -1, 88, -1, -1, 91, -1, -1, -1, 95, 96, -1, -1, 99, 100, -1, 102, 103, 104, -1, - -1, 90, -1, -1, 110, -1, 112, 113, 114, -1, + -1, -1, -1, -1, 110, -1, 112, 113, 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, 12, -1, 140, -1, 142, 143, -1, 145, - 146, 147, 148, -1, -1, -1, 26, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, - 49, -1, 42, 43, -1, -1, -1, -1, 48, -1, + 146, 147, 148, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + -1, 49, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, -1, -1, -1, 69, 70, 71, 72, 73, -1, 75, -1, -1, -1, 79, @@ -1908,28 +1922,28 @@ static const yytype_int16 yycheck[] = 110, -1, 112, 113, 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, 12, -1, - 140, -1, 142, 143, -1, 145, 146, 147, 148, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, -1, 49, 42, 43, + 140, -1, 142, 143, -1, 145, 146, 147, 148, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, -1, 49, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, - 64, 65, -1, -1, -1, 69, 70, 71, 72, 73, - -1, 75, -1, -1, -1, 79, 80, 81, 82, -1, - 84, -1, 86, -1, 88, -1, -1, 91, -1, -1, - -1, 95, 96, -1, -1, 99, 100, -1, 102, 103, - 104, -1, -1, -1, -1, -1, 110, -1, 112, 113, - 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, - 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, - -1, 135, -1, -1, 12, -1, 140, -1, 142, 143, - -1, 145, 146, 147, 148, 32, 33, 34, 35, 36, + 64, -1, 9, 10, 11, 69, 70, 71, 72, 73, + -1, -1, -1, -1, -1, 79, 42, 43, 25, -1, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, -1, 49, -1, 42, 43, -1, -1, -1, -1, + 47, -1, 49, 69, 70, 71, -1, -1, -1, 113, + 114, -1, -1, 79, -1, -1, -1, -1, 122, 123, + 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, + -1, 135, -1, -1, 12, -1, 140, -1, 142, -1, + -1, 145, 146, 147, 148, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 123, 124, 125, + 126, 127, 128, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, -1, 62, 63, 64, -1, 9, 10, - 11, 69, 70, 71, 72, 73, -1, -1, -1, -1, - -1, 79, -1, -1, 25, -1, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, -1, 49, -1, + 58, 59, 60, -1, 62, 63, 64, 9, 10, 11, + -1, 69, 70, 71, 72, 73, -1, -1, -1, -1, + -1, 79, 149, 25, -1, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, @@ -1939,7 +1953,7 @@ static const yytype_int16 yycheck[] = 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 9, 10, 11, -1, 69, 70, 71, - 72, 73, -1, -1, -1, -1, -1, 79, 149, 25, + 72, 73, 144, -1, -1, -1, -1, 79, -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, @@ -1958,9 +1972,9 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, - -1, -1, 12, -1, 140, -1, 142, -1, -1, 145, + -1, -1, 12, -1, 140, 141, -1, -1, -1, 145, 146, 147, 148, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 9, 10, 11, -1, 69, @@ -1971,7 +1985,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, 12, -1, - 140, 141, -1, -1, -1, 145, 146, 147, 148, -1, + 140, -1, -1, -1, -1, 145, 146, 147, 148, -1, -1, -1, -1, -1, -1, -1, -1, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, @@ -2003,7 +2017,7 @@ static const yytype_int16 yycheck[] = 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 9, 10, 11, -1, 69, 70, 71, 72, 73, 144, -1, -1, -1, -1, 79, -1, 25, - -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, @@ -2014,8 +2028,8 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 9, - 10, 11, -1, 69, 70, 71, 72, 73, 144, -1, - -1, -1, -1, 79, -1, 25, 26, 27, 28, 29, + 10, 11, -1, 69, 70, 71, 72, 73, -1, -1, + -1, -1, -1, 79, -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 113, 114, -1, @@ -2026,11 +2040,11 @@ static const yytype_int16 yycheck[] = -1, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, -1, 62, 63, 64, 9, 10, 11, -1, 69, + 60, -1, 62, 63, 64, 10, 11, -1, -1, 69, 70, 71, 72, 73, -1, -1, -1, -1, -1, 79, - -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, -1, 49, -1, -1, -1, -1, + 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, 12, -1, @@ -2039,7 +2053,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, - 64, 10, 11, -1, -1, 69, 70, 71, 72, 73, + 64, -1, 11, -1, -1, 69, 70, 71, 72, 73, -1, -1, -1, -1, -1, 79, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, @@ -2048,14 +2062,14 @@ static const yytype_int16 yycheck[] = 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, 12, -1, 140, -1, -1, -1, -1, 145, 146, 147, 148, -1, -1, -1, -1, -1, - -1, -1, -1, 31, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, -1, 62, 63, 64, -1, 11, -1, + 58, 59, 60, -1, 62, 63, 64, -1, -1, -1, -1, 69, 70, 71, 72, 73, -1, -1, -1, -1, - -1, 79, 25, -1, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, -1, 49, -1, -1, -1, + 25, 79, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, 6, 7, -1, 135, -1, -1, @@ -2064,69 +2078,40 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, - 62, 63, 64, -1, -1, -1, -1, 69, 70, 71, - 72, 73, -1, -1, -1, -1, 25, 79, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, - 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 62, 63, 64, 9, 10, 11, -1, 69, 70, 71, + 72, 73, -1, -1, -1, -1, -1, 79, -1, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, - 122, 123, 124, 125, 126, 127, 128, 3, 4, 5, - 6, 7, -1, 135, -1, -1, 12, -1, 140, -1, + 122, 123, 124, 125, 126, 127, 128, -1, -1, -1, + -1, -1, -1, 135, 9, 10, 11, -1, 140, -1, -1, -1, -1, 145, 146, 147, 148, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, - -1, -1, 48, -1, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, -1, 62, 63, 64, 9, - 10, 11, -1, 69, 70, 71, 72, 73, -1, -1, - -1, -1, -1, 79, -1, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, - -1, -1, -1, -1, -1, -1, -1, 113, 114, -1, - -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, - 126, 127, 128, -1, -1, -1, -1, -1, -1, 135, - 9, 10, 11, -1, 140, -1, -1, -1, -1, 145, - 146, 147, 148, -1, -1, -1, 25, -1, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, - 49, -1, -1, -1, -1, 9, 10, 11, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 25, 142, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, -1, 49, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 25, -1, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, -1, 49, 9, 10, 11, - -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, -1, 49, 9, 10, - 11, -1, -1, -1, -1, -1, -1, -1, 142, -1, - -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, -1, 49, 9, - 10, 11, -1, -1, -1, -1, -1, -1, -1, 142, - -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, + 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, -1, 49, -1, -1, -1, -1, 9, + 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 25, 142, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - 142, -1, -1, -1, -1, -1, 25, -1, 27, 28, + -1, -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, - 49, 9, 10, 11, -1, -1, -1, -1, -1, -1, - 141, -1, -1, -1, -1, -1, -1, 25, -1, 27, + 49, 9, 10, 11, -1, -1, -1, 142, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, 9, 10, 11, -1, -1, -1, -1, -1, - -1, 141, -1, -1, -1, -1, -1, -1, 25, -1, + -1, -1, 142, -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, 9, 10, 11, -1, -1, -1, -1, - -1, -1, 141, -1, -1, -1, -1, -1, -1, 25, + -1, -1, -1, 142, -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, 9, 10, 11, -1, -1, -1, - -1, -1, -1, 141, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, 9, 10, 11, -1, -1, @@ -2141,19 +2126,39 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, 141, -1, -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, -1, 49, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 141, 27, 28, + 42, 43, 44, 45, 46, 47, -1, 49, 9, 10, + 11, -1, -1, -1, -1, -1, -1, 141, -1, -1, + -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, -1, 49, 9, + 10, 11, -1, -1, -1, -1, -1, -1, 141, -1, + -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, -1, 49, + 9, 10, 11, -1, -1, -1, -1, -1, -1, 141, + -1, -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, - 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 141, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 121, - 49, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - -1, 49, 30, 31, 32, 33, 34, 35, 36, 37, + 49, 9, 10, 11, -1, -1, -1, -1, -1, -1, + 141, -1, -1, -1, -1, -1, -1, 25, -1, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - -1, 49 + -1, 49, 9, 10, 11, -1, -1, -1, -1, -1, + -1, 141, -1, -1, -1, -1, -1, -1, 25, -1, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 141, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, -1, 49, 121, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, -1, 49, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 121, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, -1, 49, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, -1, 49 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -2167,78 +2172,78 @@ static const yytype_uint16 yystos[] = 86, 88, 91, 95, 96, 97, 99, 100, 102, 103, 104, 108, 109, 110, 112, 113, 114, 115, 116, 117, 122, 123, 124, 125, 126, 127, 128, 135, 140, 142, - 143, 145, 146, 147, 148, 154, 158, 159, 192, 193, - 195, 198, 201, 203, 249, 260, 265, 274, 277, 281, - 282, 285, 287, 295, 296, 297, 298, 299, 300, 306, - 316, 319, 281, 281, 140, 281, 281, 281, 281, 281, - 281, 281, 259, 281, 281, 281, 281, 281, 281, 281, - 71, 265, 285, 287, 285, 281, 71, 265, 266, 267, - 298, 299, 306, 140, 272, 140, 140, 245, 281, 166, - 140, 140, 140, 178, 140, 142, 281, 142, 281, 196, - 142, 249, 281, 287, 179, 281, 79, 140, 191, 73, - 145, 230, 231, 116, 116, 73, 232, 140, 140, 140, - 140, 140, 140, 312, 281, 155, 143, 312, 312, 312, + 143, 145, 146, 147, 148, 154, 158, 159, 190, 191, + 193, 196, 199, 201, 247, 258, 263, 272, 275, 279, + 280, 283, 285, 293, 294, 295, 296, 297, 298, 304, + 314, 317, 279, 279, 140, 279, 279, 279, 279, 279, + 279, 279, 257, 279, 279, 279, 279, 279, 279, 279, + 71, 263, 283, 285, 283, 279, 71, 263, 264, 265, + 296, 297, 304, 140, 270, 140, 140, 243, 279, 166, + 140, 140, 140, 176, 140, 142, 279, 142, 279, 194, + 142, 247, 279, 285, 177, 279, 79, 140, 189, 73, + 145, 228, 229, 116, 116, 73, 230, 140, 140, 140, + 140, 140, 140, 310, 279, 155, 143, 310, 310, 310, 71, 71, 139, 9, 10, 11, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 142, 59, 60, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 286, 140, 120, 61, 143, 145, - 299, 281, 281, 139, 139, 252, 120, 299, 141, 281, - 281, 261, 8, 142, 158, 164, 246, 247, 281, 249, - 287, 140, 281, 142, 142, 31, 194, 142, 142, 143, - 142, 79, 142, 143, 282, 287, 8, 142, 13, 8, - 142, 189, 190, 287, 287, 317, 287, 141, 250, 31, - 281, 310, 311, 61, 71, 73, 74, 76, 77, 78, - 120, 136, 137, 138, 143, 144, 149, 313, 141, 144, - 156, 281, 146, 147, 148, 118, 202, 200, 71, 295, - 299, 306, 255, 281, 256, 257, 253, 254, 281, 281, - 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, - 281, 281, 281, 281, 281, 281, 281, 266, 31, 281, - 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, - 281, 264, 288, 281, 301, 281, 141, 71, 295, 140, - 273, 268, 141, 141, 31, 228, 229, 249, 287, 281, - 82, 281, 142, 8, 175, 172, 71, 212, 141, 71, - 155, 141, 281, 231, 42, 43, 71, 123, 274, 275, - 276, 73, 8, 141, 8, 141, 141, 142, 122, 287, - 307, 308, 283, 287, 121, 141, 8, 279, 61, 120, - 72, 281, 287, 115, 157, 158, 192, 193, 144, 71, - 265, 199, 118, 204, 140, 140, 299, 281, 281, 281, - 281, 281, 63, 287, 228, 71, 143, 295, 302, 304, - 305, 149, 144, 228, 302, 26, 160, 283, 141, 8, - 140, 141, 168, 248, 90, 90, 13, 8, 141, 171, - 197, 144, 144, 275, 275, 139, 140, 13, 190, 142, - 318, 140, 8, 141, 284, 31, 281, 31, 281, 314, - 71, 61, 144, 144, 140, 119, 205, 206, 265, 143, - 262, 263, 26, 266, 141, 281, 303, 289, 61, 143, - 141, 269, 162, 158, 31, 249, 287, 167, 165, 246, - 281, 176, 173, 275, 71, 26, 158, 211, 26, 143, - 213, 140, 101, 71, 275, 278, 280, 275, 287, 309, - 308, 13, 283, 283, 121, 71, 73, 74, 315, 281, - 141, 206, 143, 8, 233, 228, 228, 258, 251, 144, - 140, 293, 301, 281, 270, 155, 161, 283, 281, 26, - 158, 218, 142, 287, 31, 208, 287, 13, 155, 142, - 214, 142, 214, 71, 123, 225, 226, 227, 140, 121, - 141, 8, 279, 307, 281, 31, 281, 149, 149, 142, - 233, 265, 98, 105, 106, 107, 108, 109, 110, 111, - 144, 234, 239, 240, 241, 242, 244, 141, 141, 281, - 273, 294, 290, 149, 144, 120, 271, 163, 219, 141, - 155, 169, 121, 207, 287, 207, 275, 89, 214, 92, - 93, 94, 214, 144, 141, 8, 31, 73, 180, 275, - 275, 141, 283, 144, 144, 71, 235, 97, 242, 8, - 142, 228, 120, 291, 302, 221, 66, 67, 223, 142, - 83, 246, 208, 141, 141, 142, 92, 142, 281, 26, - 142, 217, 144, 143, 227, 73, 13, 265, 121, 13, - 73, 243, 236, 71, 141, 302, 66, 67, 224, 140, - 158, 142, 141, 177, 174, 142, 217, 216, 155, 31, - 73, 13, 275, 181, 275, 275, 13, 8, 142, 194, - 13, 292, 140, 26, 68, 281, 170, 26, 158, 210, - 210, 215, 155, 144, 73, 13, 275, 73, 275, 73, - 71, 275, 293, 281, 155, 142, 141, 26, 158, 209, - 155, 155, 13, 275, 141, 13, 237, 141, 220, 155, - 87, 275, 182, 275, 140, 26, 158, 85, 142, 143, - 225, 222, 142, 155, 141, 155, 144, 142, 143, 238, - 183, 155, 101, 184, 185, 186, 144, 140, 186, 265, - 187, 73, 141, 188, 143, 155, 144 + 21, 22, 23, 24, 284, 140, 120, 61, 143, 145, + 297, 279, 279, 139, 139, 250, 120, 297, 141, 279, + 279, 259, 8, 142, 158, 164, 244, 245, 279, 247, + 285, 140, 279, 142, 142, 31, 192, 142, 142, 143, + 142, 79, 142, 143, 280, 285, 8, 142, 13, 8, + 142, 187, 188, 285, 285, 315, 285, 141, 248, 31, + 279, 308, 309, 61, 71, 73, 74, 76, 77, 78, + 120, 136, 137, 138, 143, 144, 149, 311, 141, 144, + 156, 279, 146, 147, 148, 118, 200, 198, 71, 293, + 297, 304, 253, 279, 254, 255, 251, 252, 279, 279, + 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, + 279, 279, 279, 279, 279, 279, 279, 264, 31, 279, + 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, + 279, 262, 286, 279, 299, 279, 141, 71, 293, 140, + 271, 266, 141, 141, 31, 226, 227, 247, 285, 279, + 82, 279, 142, 8, 90, 90, 71, 210, 141, 71, + 155, 141, 279, 229, 42, 43, 71, 123, 272, 273, + 274, 73, 8, 141, 8, 141, 141, 142, 122, 285, + 305, 306, 281, 285, 121, 141, 8, 277, 61, 120, + 72, 279, 285, 115, 157, 158, 190, 191, 144, 71, + 263, 197, 118, 202, 140, 140, 297, 279, 279, 279, + 279, 279, 63, 285, 226, 71, 143, 293, 300, 302, + 303, 149, 144, 226, 300, 26, 160, 281, 141, 8, + 140, 141, 168, 246, 174, 172, 13, 8, 141, 171, + 195, 144, 144, 273, 273, 139, 140, 13, 188, 142, + 316, 140, 8, 141, 282, 31, 279, 31, 279, 312, + 71, 61, 144, 144, 140, 119, 203, 204, 263, 143, + 260, 261, 26, 264, 141, 279, 301, 287, 61, 143, + 141, 267, 162, 158, 31, 247, 285, 167, 165, 244, + 279, 285, 31, 206, 285, 273, 71, 26, 158, 209, + 26, 143, 211, 140, 101, 71, 273, 276, 278, 273, + 285, 307, 306, 13, 281, 281, 121, 71, 73, 74, + 313, 279, 141, 204, 143, 8, 231, 226, 226, 256, + 249, 144, 140, 291, 299, 279, 268, 155, 161, 281, + 279, 26, 158, 216, 142, 121, 205, 285, 205, 13, + 155, 142, 212, 142, 212, 71, 123, 223, 224, 225, + 140, 121, 141, 8, 277, 305, 279, 31, 279, 149, + 149, 142, 231, 263, 98, 105, 106, 107, 108, 109, + 110, 111, 144, 232, 237, 238, 239, 240, 242, 141, + 141, 279, 271, 292, 288, 149, 144, 120, 269, 163, + 217, 141, 155, 169, 206, 141, 141, 273, 89, 212, + 92, 93, 94, 212, 144, 141, 8, 31, 73, 178, + 273, 273, 141, 281, 144, 144, 71, 233, 97, 240, + 8, 142, 226, 120, 289, 300, 219, 66, 67, 221, + 142, 83, 244, 175, 173, 142, 92, 142, 279, 26, + 142, 215, 144, 143, 225, 73, 13, 263, 121, 13, + 73, 241, 234, 71, 141, 300, 66, 67, 222, 140, + 158, 142, 141, 26, 158, 208, 208, 142, 215, 214, + 155, 31, 73, 13, 273, 179, 273, 273, 13, 8, + 142, 192, 13, 290, 140, 26, 68, 279, 170, 155, + 213, 155, 144, 73, 13, 273, 73, 273, 73, 71, + 273, 291, 279, 155, 142, 141, 26, 158, 207, 87, + 155, 13, 273, 141, 13, 235, 141, 218, 155, 142, + 273, 180, 273, 140, 26, 158, 85, 143, 223, 220, + 142, 155, 141, 155, 144, 142, 143, 236, 181, 155, + 101, 182, 183, 184, 144, 140, 184, 263, 185, 73, + 141, 186, 143, 155, 144 }; #define yyerrok (yyerrstatus = 0) @@ -3074,7 +3079,7 @@ yyreduce: case 9: - { REGISTER_MAIN_LONG_CONSTANT("__COMPILER_HALT_OFFSET__", zend_get_scanned_file_offset(TSRMLS_C), CONST_CS); YYACCEPT; } + { zend_do_halt_compiler_register(TSRMLS_C); YYACCEPT; } break; case 10: @@ -3239,1094 +3244,1094 @@ yyreduce: case 51: - { zend_do_foreach_begin(&(yyvsp[(1) - (3)]), &(yyvsp[(2) - (3)]), &(yyvsp[(3) - (3)]), 1 TSRMLS_CC); } + { zend_do_foreach_begin(&(yyvsp[(1) - (4)]), &(yyvsp[(2) - (4)]), &(yyvsp[(3) - (4)]), &(yyvsp[(4) - (4)]), 1 TSRMLS_CC); } break; case 52: - { zend_do_foreach_fetch(&(yyvsp[(1) - (5)]), &(yyvsp[(2) - (5)]), &(yyvsp[(5) - (5)]) TSRMLS_CC); } + { zend_do_foreach_cont(&(yyvsp[(1) - (8)]), &(yyvsp[(2) - (8)]), &(yyvsp[(4) - (8)]), &(yyvsp[(6) - (8)]), &(yyvsp[(7) - (8)]) TSRMLS_CC); } break; case 53: - { zend_do_foreach_cont(&(yyvsp[(1) - (9)]), &(yyvsp[(5) - (9)]), &(yyvsp[(7) - (9)]), &(yyvsp[(8) - (9)]) TSRMLS_CC); } + { zend_do_foreach_end(&(yyvsp[(1) - (10)]), &(yyvsp[(4) - (10)]) TSRMLS_CC); } break; case 54: - { zend_do_foreach_end(&(yyvsp[(1) - (11)]), &(yyvsp[(5) - (11)]) TSRMLS_CC); } + { zend_do_foreach_begin(&(yyvsp[(1) - (4)]), &(yyvsp[(2) - (4)]), &(yyvsp[(3) - (4)]), &(yyvsp[(4) - (4)]), 0 TSRMLS_CC); } break; case 55: - { zend_do_foreach_begin(&(yyvsp[(1) - (3)]), &(yyvsp[(2) - (3)]), &(yyvsp[(3) - (3)]), 0 TSRMLS_CC); } + { zend_check_writable_variable(&(yyvsp[(6) - (8)])); zend_do_foreach_cont(&(yyvsp[(1) - (8)]), &(yyvsp[(2) - (8)]), &(yyvsp[(4) - (8)]), &(yyvsp[(6) - (8)]), &(yyvsp[(7) - (8)]) TSRMLS_CC); } break; case 56: - { zend_do_foreach_fetch(&(yyvsp[(1) - (5)]), &(yyvsp[(2) - (5)]), &(yyvsp[(5) - (5)]) TSRMLS_CC); } + { zend_do_foreach_end(&(yyvsp[(1) - (10)]), &(yyvsp[(4) - (10)]) TSRMLS_CC); } break; case 57: - { zend_check_writable_variable(&(yyvsp[(7) - (9)])); zend_do_foreach_cont(&(yyvsp[(1) - (9)]), &(yyvsp[(5) - (9)]), &(yyvsp[(7) - (9)]), &(yyvsp[(8) - (9)]) TSRMLS_CC); } - break; - - case 58: - - { zend_do_foreach_end(&(yyvsp[(1) - (11)]), &(yyvsp[(5) - (11)]) TSRMLS_CC); } - break; - - case 59: - { (yyvsp[(1) - (1)]).u.opline_num = get_next_op_number(CG(active_op_array)); zend_do_declare_begin(TSRMLS_C); } break; - case 60: + case 58: { zend_do_declare_end(&(yyvsp[(1) - (6)]) TSRMLS_CC); } break; - case 62: + case 60: { zend_do_try(&(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 63: + case 61: { zend_initialize_try_catch_element(&(yyvsp[(1) - (7)]) TSRMLS_CC); } break; - case 64: + case 62: { zend_do_first_catch(&(yyvsp[(7) - (9)]) TSRMLS_CC); } break; - case 65: + case 63: { zend_do_begin_catch(&(yyvsp[(1) - (12)]), &(yyvsp[(9) - (12)]), &(yyvsp[(11) - (12)]), 1 TSRMLS_CC); } break; - case 66: + case 64: { zend_do_end_catch(&(yyvsp[(1) - (16)]) TSRMLS_CC); } break; - case 67: + case 65: { zend_do_mark_last_catch(&(yyvsp[(7) - (18)]), &(yyvsp[(18) - (18)]) TSRMLS_CC); } break; - case 68: + case 66: { zend_do_throw(&(yyvsp[(2) - (3)]) TSRMLS_CC); } break; - case 69: + case 67: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 70: + case 68: { (yyval).u.opline_num = -1; } break; - case 71: + case 69: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 72: + case 70: { (yyval) = (yyvsp[(2) - (2)]); } break; - case 73: + case 71: { (yyval).u.opline_num = get_next_op_number(CG(active_op_array)); } break; - case 74: + case 72: { zend_do_begin_catch(&(yyvsp[(1) - (6)]), &(yyvsp[(3) - (6)]), &(yyvsp[(5) - (6)]), 0 TSRMLS_CC); } break; - case 75: + case 73: { zend_do_end_catch(&(yyvsp[(1) - (10)]) TSRMLS_CC); } break; - case 78: + case 76: { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 79: + case 77: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 80: + case 78: { (yyval) = (yyvsp[(2) - (3)]); } break; - case 81: + case 79: { zend_do_ticks(TSRMLS_C); } break; - case 82: + case 80: { zend_do_ticks(TSRMLS_C); } break; - case 83: + case 81: { (yyval).op_type = ZEND_RETURN_VAL; } break; - case 84: + case 82: { (yyval).op_type = ZEND_RETURN_REF; } break; - case 85: + case 83: { (yyvsp[(1) - (1)]).u.opline_num = CG(zend_lineno); } break; - case 86: + case 84: { zend_do_begin_function_declaration(&(yyvsp[(1) - (4)]), &(yyvsp[(4) - (4)]), 0, (yyvsp[(3) - (4)]).op_type, NULL TSRMLS_CC); } break; - case 87: + case 85: { zend_do_end_function_declaration(&(yyvsp[(1) - (11)]) TSRMLS_CC); } break; - case 88: + case 86: { zend_do_begin_class_declaration(&(yyvsp[(1) - (3)]), &(yyvsp[(2) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 89: + case 87: { zend_do_end_class_declaration(&(yyvsp[(1) - (8)]), &(yyvsp[(2) - (8)]) TSRMLS_CC); } break; - case 90: + case 88: { zend_do_begin_class_declaration(&(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]), NULL TSRMLS_CC); } break; - case 91: + case 89: { zend_do_end_class_declaration(&(yyvsp[(1) - (7)]), &(yyvsp[(2) - (7)]) TSRMLS_CC); } break; - case 92: + case 90: { (yyval).u.opline_num = CG(zend_lineno); (yyval).u.EA.type = 0; } break; - case 93: + case 91: { (yyval).u.opline_num = CG(zend_lineno); (yyval).u.EA.type = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; } break; - case 94: + case 92: { (yyval).u.opline_num = CG(zend_lineno); (yyval).u.EA.type = ZEND_ACC_FINAL_CLASS; } break; - case 95: + case 93: { (yyval).op_type = IS_UNUSED; } break; - case 96: + case 94: { (yyval) = (yyvsp[(2) - (2)]); } break; - case 97: + case 95: { (yyval).u.opline_num = CG(zend_lineno); (yyval).u.EA.type = ZEND_ACC_INTERFACE; } break; - case 102: + case 100: { zend_do_implements_interface(&(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 103: + case 101: { zend_do_implements_interface(&(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 104: + case 102: { (yyval).op_type = IS_UNUSED; } break; - case 105: + case 103: { (yyval) = (yyvsp[(2) - (2)]); } break; - case 106: + case 104: { zend_check_writable_variable(&(yyvsp[(1) - (1)])); (yyval) = (yyvsp[(1) - (1)]); } break; - case 107: + case 105: { zend_check_writable_variable(&(yyvsp[(2) - (2)])); (yyval) = (yyvsp[(2) - (2)]); (yyval).u.EA.type |= ZEND_PARSED_REFERENCE_VARIABLE; } break; - case 114: + case 112: { zend_do_declare_stmt(&(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 115: + case 113: { zend_do_declare_stmt(&(yyvsp[(3) - (5)]), &(yyvsp[(5) - (5)]) TSRMLS_CC); } break; - case 116: + case 114: { (yyval) = (yyvsp[(2) - (3)]); } break; - case 117: + case 115: { (yyval) = (yyvsp[(3) - (4)]); } break; - case 118: + case 116: { (yyval) = (yyvsp[(2) - (4)]); } break; - case 119: + case 117: { (yyval) = (yyvsp[(3) - (5)]); } break; - case 120: + case 118: { (yyval).op_type = IS_UNUSED; } break; - case 121: + case 119: { zend_do_extended_info(TSRMLS_C); zend_do_case_before_statement(&(yyvsp[(1) - (4)]), &(yyvsp[(2) - (4)]), &(yyvsp[(3) - (4)]) TSRMLS_CC); } break; - case 122: + case 120: { zend_do_case_after_statement(&(yyval), &(yyvsp[(2) - (6)]) TSRMLS_CC); (yyval).op_type = IS_CONST; } break; - case 123: + case 121: { zend_do_extended_info(TSRMLS_C); zend_do_default_before_statement(&(yyvsp[(1) - (3)]), &(yyvsp[(2) - (3)]) TSRMLS_CC); } break; - case 124: + case 122: { zend_do_case_after_statement(&(yyval), &(yyvsp[(2) - (5)]) TSRMLS_CC); (yyval).op_type = IS_CONST; } break; - case 130: + case 128: { zend_do_if_cond(&(yyvsp[(4) - (5)]), &(yyvsp[(5) - (5)]) TSRMLS_CC); } break; - case 131: + case 129: { zend_do_if_after_statement(&(yyvsp[(5) - (7)]), 0 TSRMLS_CC); } break; - case 133: + case 131: { zend_do_if_cond(&(yyvsp[(4) - (6)]), &(yyvsp[(5) - (6)]) TSRMLS_CC); } break; - case 134: + case 132: { zend_do_if_after_statement(&(yyvsp[(5) - (8)]), 0 TSRMLS_CC); } break; - case 141: + case 139: { znode tmp; fetch_simple_variable(&tmp, &(yyvsp[(2) - (2)]), 0 TSRMLS_CC); (yyval).op_type = IS_CONST; Z_LVAL((yyval).u.constant)=1; Z_TYPE((yyval).u.constant)=IS_LONG; INIT_PZVAL(&(yyval).u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &(yyval), NULL, &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]), 0 TSRMLS_CC); } break; - case 142: + case 140: { znode tmp; fetch_simple_variable(&tmp, &(yyvsp[(3) - (3)]), 0 TSRMLS_CC); (yyval).op_type = IS_CONST; Z_LVAL((yyval).u.constant)=1; Z_TYPE((yyval).u.constant)=IS_LONG; INIT_PZVAL(&(yyval).u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &(yyval), NULL, &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]), 1 TSRMLS_CC); } break; - case 143: + case 141: { znode tmp; fetch_simple_variable(&tmp, &(yyvsp[(3) - (5)]), 0 TSRMLS_CC); (yyval).op_type = IS_CONST; Z_LVAL((yyval).u.constant)=1; Z_TYPE((yyval).u.constant)=IS_LONG; INIT_PZVAL(&(yyval).u.constant); zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &(yyval), &(yyvsp[(5) - (5)]), &(yyvsp[(1) - (5)]), &(yyvsp[(3) - (5)]), 1 TSRMLS_CC); } break; - case 144: + case 142: { znode tmp; fetch_simple_variable(&tmp, &(yyvsp[(2) - (4)]), 0 TSRMLS_CC); (yyval).op_type = IS_CONST; Z_LVAL((yyval).u.constant)=1; Z_TYPE((yyval).u.constant)=IS_LONG; INIT_PZVAL(&(yyval).u.constant); zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &(yyval), &(yyvsp[(4) - (4)]), &(yyvsp[(1) - (4)]), &(yyvsp[(2) - (4)]), 0 TSRMLS_CC); } break; - case 145: + case 143: { znode tmp; fetch_simple_variable(&tmp, &(yyvsp[(4) - (4)]), 0 TSRMLS_CC); (yyval)=(yyvsp[(1) - (4)]); Z_LVAL((yyval).u.constant)++; zend_do_receive_arg(ZEND_RECV, &tmp, &(yyval), NULL, &(yyvsp[(3) - (4)]), &(yyvsp[(4) - (4)]), 0 TSRMLS_CC); } break; - case 146: + case 144: { znode tmp; fetch_simple_variable(&tmp, &(yyvsp[(5) - (5)]), 0 TSRMLS_CC); (yyval)=(yyvsp[(1) - (5)]); Z_LVAL((yyval).u.constant)++; zend_do_receive_arg(ZEND_RECV, &tmp, &(yyval), NULL, &(yyvsp[(3) - (5)]), &(yyvsp[(5) - (5)]), 1 TSRMLS_CC); } break; - case 147: + case 145: { znode tmp; fetch_simple_variable(&tmp, &(yyvsp[(5) - (7)]), 0 TSRMLS_CC); (yyval)=(yyvsp[(1) - (7)]); Z_LVAL((yyval).u.constant)++; zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &(yyval), &(yyvsp[(7) - (7)]), &(yyvsp[(3) - (7)]), &(yyvsp[(5) - (7)]), 1 TSRMLS_CC); } break; - case 148: + case 146: { znode tmp; fetch_simple_variable(&tmp, &(yyvsp[(4) - (6)]), 0 TSRMLS_CC); (yyval)=(yyvsp[(1) - (6)]); Z_LVAL((yyval).u.constant)++; zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &(yyval), &(yyvsp[(6) - (6)]), &(yyvsp[(3) - (6)]), &(yyvsp[(4) - (6)]), 0 TSRMLS_CC); } break; - case 149: + case 147: { (yyval).op_type = IS_UNUSED; } break; - case 150: + case 148: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 151: + case 149: { (yyval).op_type = IS_CONST; Z_TYPE((yyval).u.constant)=IS_NULL;} break; - case 152: + case 150: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 153: + case 151: { Z_LVAL((yyval).u.constant) = 0; } break; - case 154: + case 152: { Z_LVAL((yyval).u.constant) = 1; zend_do_pass_param(&(yyvsp[(1) - (1)]), ZEND_SEND_VAL, Z_LVAL((yyval).u.constant) TSRMLS_CC); } break; - case 155: + case 153: { Z_LVAL((yyval).u.constant) = 1; zend_do_pass_param(&(yyvsp[(1) - (1)]), ZEND_SEND_VAR, Z_LVAL((yyval).u.constant) TSRMLS_CC); } break; - case 156: + case 154: { Z_LVAL((yyval).u.constant) = 1; zend_do_pass_param(&(yyvsp[(2) - (2)]), ZEND_SEND_REF, Z_LVAL((yyval).u.constant) TSRMLS_CC); } break; - case 157: + case 155: { Z_LVAL((yyval).u.constant)=Z_LVAL((yyvsp[(1) - (3)]).u.constant)+1; zend_do_pass_param(&(yyvsp[(3) - (3)]), ZEND_SEND_VAL, Z_LVAL((yyval).u.constant) TSRMLS_CC); } break; - case 158: + case 156: { Z_LVAL((yyval).u.constant)=Z_LVAL((yyvsp[(1) - (3)]).u.constant)+1; zend_do_pass_param(&(yyvsp[(3) - (3)]), ZEND_SEND_VAR, Z_LVAL((yyval).u.constant) TSRMLS_CC); } break; - case 159: + case 157: { Z_LVAL((yyval).u.constant)=Z_LVAL((yyvsp[(1) - (4)]).u.constant)+1; zend_do_pass_param(&(yyvsp[(4) - (4)]), ZEND_SEND_REF, Z_LVAL((yyval).u.constant) TSRMLS_CC); } break; - case 160: + case 158: { zend_do_fetch_global_variable(&(yyvsp[(3) - (3)]), NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); } break; - case 161: + case 159: { zend_do_fetch_global_variable(&(yyvsp[(1) - (1)]), NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); } break; - case 162: + case 160: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 163: + case 161: { (yyval) = (yyvsp[(2) - (2)]); } break; - case 164: + case 162: { (yyval) = (yyvsp[(3) - (4)]); } break; - case 165: + case 163: { zend_do_fetch_static_variable(&(yyvsp[(3) - (3)]), NULL, ZEND_FETCH_STATIC TSRMLS_CC); } break; - case 166: + case 164: { zend_do_fetch_static_variable(&(yyvsp[(3) - (5)]), &(yyvsp[(5) - (5)]), ZEND_FETCH_STATIC TSRMLS_CC); } break; - case 167: + case 165: { zend_do_fetch_static_variable(&(yyvsp[(1) - (1)]), NULL, ZEND_FETCH_STATIC TSRMLS_CC); } break; - case 168: + case 166: { zend_do_fetch_static_variable(&(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]), ZEND_FETCH_STATIC TSRMLS_CC); } break; - case 171: + case 169: { CG(access_type) = Z_LVAL((yyvsp[(1) - (1)]).u.constant); } break; - case 174: + case 172: { (yyvsp[(2) - (2)]).u.opline_num = CG(zend_lineno); } break; - case 175: + case 173: { zend_do_begin_function_declaration(&(yyvsp[(2) - (5)]), &(yyvsp[(5) - (5)]), 1, (yyvsp[(4) - (5)]).op_type, &(yyvsp[(1) - (5)]) TSRMLS_CC); } break; - case 176: + case 174: { zend_do_abstract_method(&(yyvsp[(5) - (10)]), &(yyvsp[(1) - (10)]), &(yyvsp[(10) - (10)]) TSRMLS_CC); zend_do_end_function_declaration(&(yyvsp[(2) - (10)]) TSRMLS_CC); } break; - case 177: + case 175: { Z_LVAL((yyval).u.constant) = ZEND_ACC_ABSTRACT; } break; - case 178: + case 176: { Z_LVAL((yyval).u.constant) = 0; } break; - case 179: + case 177: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 180: + case 178: { Z_LVAL((yyval).u.constant) = ZEND_ACC_PUBLIC; } break; - case 181: + case 179: { Z_LVAL((yyval).u.constant) = ZEND_ACC_PUBLIC; } break; - case 182: + case 180: { (yyval) = (yyvsp[(1) - (1)]); if (!(Z_LVAL((yyval).u.constant) & ZEND_ACC_PPP_MASK)) { Z_LVAL((yyval).u.constant) |= ZEND_ACC_PUBLIC; } } break; - case 183: + case 181: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 184: + case 182: { Z_LVAL((yyval).u.constant) = zend_do_verify_access_types(&(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)])); } break; - case 185: + case 183: { Z_LVAL((yyval).u.constant) = ZEND_ACC_PUBLIC; } break; - case 186: + case 184: { Z_LVAL((yyval).u.constant) = ZEND_ACC_PROTECTED; } break; - case 187: + case 185: { Z_LVAL((yyval).u.constant) = ZEND_ACC_PRIVATE; } break; - case 188: + case 186: { Z_LVAL((yyval).u.constant) = ZEND_ACC_STATIC; } break; - case 189: + case 187: { Z_LVAL((yyval).u.constant) = ZEND_ACC_ABSTRACT; } break; - case 190: + case 188: { Z_LVAL((yyval).u.constant) = ZEND_ACC_FINAL; } break; - case 191: + case 189: { zend_do_declare_property(&(yyvsp[(3) - (3)]), NULL, CG(access_type) TSRMLS_CC); } break; - case 192: + case 190: { zend_do_declare_property(&(yyvsp[(3) - (5)]), &(yyvsp[(5) - (5)]), CG(access_type) TSRMLS_CC); } break; - case 193: + case 191: { zend_do_declare_property(&(yyvsp[(1) - (1)]), NULL, CG(access_type) TSRMLS_CC); } break; - case 194: + case 192: { zend_do_declare_property(&(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]), CG(access_type) TSRMLS_CC); } break; - case 195: + case 193: { zend_do_declare_class_constant(&(yyvsp[(3) - (5)]), &(yyvsp[(5) - (5)]) TSRMLS_CC); } break; - case 196: + case 194: { zend_do_declare_class_constant(&(yyvsp[(2) - (4)]), &(yyvsp[(4) - (4)]) TSRMLS_CC); } break; - case 197: + case 195: { zend_do_echo(&(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 198: + case 196: { zend_do_echo(&(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 199: + case 197: { (yyval).op_type = IS_CONST; Z_TYPE((yyval).u.constant) = IS_BOOL; Z_LVAL((yyval).u.constant) = 1; } break; - case 200: + case 198: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 201: + case 199: { zend_do_free(&(yyvsp[(1) - (2)]) TSRMLS_CC); } break; - case 202: + case 200: { (yyval) = (yyvsp[(4) - (4)]); } break; - case 203: + case 201: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 204: + case 202: { zend_do_list_init(TSRMLS_C); } break; - case 205: + case 203: { zend_do_list_end(&(yyval), &(yyvsp[(7) - (7)]) TSRMLS_CC); } break; - case 206: + case 204: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign(&(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 207: + case 205: { zend_check_writable_variable(&(yyvsp[(1) - (4)])); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(4) - (4)]) TSRMLS_CC); } break; - case 208: + case 206: { zend_error(E_STRICT, "Assigning the return value of new by reference is deprecated"); zend_check_writable_variable(&(yyvsp[(1) - (5)])); zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&(yyvsp[(4) - (5)]), &(yyvsp[(5) - (5)]) TSRMLS_CC); } break; - case 209: + case 207: { zend_do_end_new_object(&(yyvsp[(3) - (7)]), &(yyvsp[(4) - (7)]), &(yyvsp[(7) - (7)]) TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&(yyval), &(yyvsp[(1) - (7)]), &(yyvsp[(3) - (7)]) TSRMLS_CC); } break; - case 210: + case 208: { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 211: + case 209: { zend_do_end_new_object(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(4) - (4)]) TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} break; - case 212: + case 210: { zend_do_clone(&(yyval), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 213: + case 211: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 214: + case 212: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 215: + case 213: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 216: + case 214: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 217: + case 215: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 218: + case 216: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 219: + case 217: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_AND, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 220: + case 218: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_OR, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 221: + case 219: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 222: + case 220: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SL, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 223: + case 221: { zend_check_writable_variable(&(yyvsp[(1) - (3)])); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SR, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 224: + case 222: { zend_do_post_incdec(&(yyval), &(yyvsp[(1) - (2)]), ZEND_POST_INC TSRMLS_CC); } break; - case 225: + case 223: { zend_do_pre_incdec(&(yyval), &(yyvsp[(2) - (2)]), ZEND_PRE_INC TSRMLS_CC); } break; - case 226: + case 224: { zend_do_post_incdec(&(yyval), &(yyvsp[(1) - (2)]), ZEND_POST_DEC TSRMLS_CC); } break; - case 227: + case 225: { zend_do_pre_incdec(&(yyval), &(yyvsp[(2) - (2)]), ZEND_PRE_DEC TSRMLS_CC); } break; - case 228: + case 226: { zend_do_boolean_or_begin(&(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 229: + case 227: { zend_do_boolean_or_end(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(4) - (4)]), &(yyvsp[(2) - (4)]) TSRMLS_CC); } break; - case 230: + case 228: { zend_do_boolean_and_begin(&(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 231: + case 229: { zend_do_boolean_and_end(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(4) - (4)]), &(yyvsp[(2) - (4)]) TSRMLS_CC); } break; - case 232: + case 230: { zend_do_boolean_or_begin(&(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 233: + case 231: { zend_do_boolean_or_end(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(4) - (4)]), &(yyvsp[(2) - (4)]) TSRMLS_CC); } break; - case 234: + case 232: { zend_do_boolean_and_begin(&(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 235: + case 233: { zend_do_boolean_and_end(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(4) - (4)]), &(yyvsp[(2) - (4)]) TSRMLS_CC); } break; - case 236: + case 234: { zend_do_binary_op(ZEND_BOOL_XOR, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 237: + case 235: { zend_do_binary_op(ZEND_BW_OR, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 238: + case 236: { zend_do_binary_op(ZEND_BW_AND, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 239: + case 237: { zend_do_binary_op(ZEND_BW_XOR, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 240: + case 238: { zend_do_binary_op(ZEND_CONCAT, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 241: + case 239: { zend_do_binary_op(ZEND_ADD, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 242: + case 240: { zend_do_binary_op(ZEND_SUB, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 243: + case 241: { zend_do_binary_op(ZEND_MUL, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 244: + case 242: { zend_do_binary_op(ZEND_DIV, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 245: + case 243: { zend_do_binary_op(ZEND_MOD, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 246: + case 244: { zend_do_binary_op(ZEND_SL, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 247: + case 245: { zend_do_binary_op(ZEND_SR, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 248: + case 246: { Z_LVAL((yyvsp[(1) - (2)]).u.constant)=0; Z_TYPE((yyvsp[(1) - (2)]).u.constant)=IS_LONG; (yyvsp[(1) - (2)]).op_type = IS_CONST; INIT_PZVAL(&(yyvsp[(1) - (2)]).u.constant); zend_do_binary_op(ZEND_ADD, &(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 249: + case 247: { Z_LVAL((yyvsp[(1) - (2)]).u.constant)=0; Z_TYPE((yyvsp[(1) - (2)]).u.constant)=IS_LONG; (yyvsp[(1) - (2)]).op_type = IS_CONST; INIT_PZVAL(&(yyvsp[(1) - (2)]).u.constant); zend_do_binary_op(ZEND_SUB, &(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 250: + case 248: { zend_do_unary_op(ZEND_BOOL_NOT, &(yyval), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 251: + case 249: { zend_do_unary_op(ZEND_BW_NOT, &(yyval), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 252: + case 250: { zend_do_binary_op(ZEND_IS_IDENTICAL, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 253: + case 251: { zend_do_binary_op(ZEND_IS_NOT_IDENTICAL, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 254: + case 252: { zend_do_binary_op(ZEND_IS_EQUAL, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 255: + case 253: { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 256: + case 254: { zend_do_binary_op(ZEND_IS_SMALLER, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 257: + case 255: { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 258: + case 256: { zend_do_binary_op(ZEND_IS_SMALLER, &(yyval), &(yyvsp[(3) - (3)]), &(yyvsp[(1) - (3)]) TSRMLS_CC); } break; - case 259: + case 257: { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &(yyval), &(yyvsp[(3) - (3)]), &(yyvsp[(1) - (3)]) TSRMLS_CC); } break; - case 260: + case 258: { zend_do_instanceof(&(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]), 0 TSRMLS_CC); } break; - case 261: + case 259: { (yyval) = (yyvsp[(2) - (3)]); } break; - case 262: + case 260: { zend_do_begin_qm_op(&(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 263: + case 261: { zend_do_qm_true(&(yyvsp[(4) - (5)]), &(yyvsp[(2) - (5)]), &(yyvsp[(5) - (5)]) TSRMLS_CC); } break; - case 264: + case 262: { zend_do_qm_false(&(yyval), &(yyvsp[(7) - (7)]), &(yyvsp[(2) - (7)]), &(yyvsp[(5) - (7)]) TSRMLS_CC); } break; - case 265: + case 263: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 266: + case 264: { zend_do_cast(&(yyval), &(yyvsp[(2) - (2)]), IS_LONG TSRMLS_CC); } break; - case 267: + case 265: { zend_do_cast(&(yyval), &(yyvsp[(2) - (2)]), IS_DOUBLE TSRMLS_CC); } break; - case 268: + case 266: { zend_do_cast(&(yyval), &(yyvsp[(2) - (2)]), IS_STRING TSRMLS_CC); } break; - case 269: + case 267: { zend_do_cast(&(yyval), &(yyvsp[(2) - (2)]), IS_ARRAY TSRMLS_CC); } break; - case 270: + case 268: { zend_do_cast(&(yyval), &(yyvsp[(2) - (2)]), IS_OBJECT TSRMLS_CC); } break; - case 271: + case 269: { zend_do_cast(&(yyval), &(yyvsp[(2) - (2)]), IS_BOOL TSRMLS_CC); } break; - case 272: + case 270: { zend_do_cast(&(yyval), &(yyvsp[(2) - (2)]), IS_NULL TSRMLS_CC); } break; - case 273: + case 271: { zend_do_exit(&(yyval), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 274: + case 272: { zend_do_begin_silence(&(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 275: + case 273: { zend_do_end_silence(&(yyvsp[(1) - (3)]) TSRMLS_CC); (yyval) = (yyvsp[(3) - (3)]); } break; - case 276: + case 274: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 277: + case 275: { (yyval) = (yyvsp[(3) - (4)]); } break; - case 278: + case 276: { zend_do_shell_exec(&(yyval), &(yyvsp[(2) - (3)]) TSRMLS_CC); } break; - case 279: + case 277: { zend_do_print(&(yyval), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 280: + case 278: { (yyvsp[(2) - (2)]).u.opline_num = zend_do_begin_function_call(&(yyvsp[(1) - (2)]) TSRMLS_CC); } break; - case 281: + case 279: { zend_do_end_function_call(&(yyvsp[(1) - (5)]), &(yyval), &(yyvsp[(4) - (5)]), 0, (yyvsp[(2) - (5)]).u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } break; - case 282: + case 280: { zend_do_begin_class_member_function_call(&(yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)]) TSRMLS_CC); } break; - case 283: + case 281: { zend_do_end_function_call(NULL, &(yyval), &(yyvsp[(6) - (7)]), 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} break; - case 284: + case 282: { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&(yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)]) TSRMLS_CC); } break; - case 285: + case 283: { zend_do_end_function_call(NULL, &(yyval), &(yyvsp[(6) - (7)]), 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} break; - case 286: + case 284: { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_dynamic_function_call(&(yyvsp[(1) - (2)]) TSRMLS_CC); } break; - case 287: + case 285: { zend_do_end_function_call(&(yyvsp[(1) - (5)]), &(yyval), &(yyvsp[(4) - (5)]), 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} break; - case 288: + case 286: { zend_do_fetch_class(&(yyval), &(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 289: + case 287: { zend_do_fetch_class(&(yyval), &(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 290: + case 288: { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_fetch_class(&(yyval), &(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 291: + case 289: { zend_do_push_object(&(yyvsp[(1) - (2)]) TSRMLS_CC); } break; - case 292: + case 290: { zend_do_push_object(&(yyvsp[(4) - (4)]) TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); } break; - case 293: + case 291: { zend_do_pop_object(&(yyval) TSRMLS_CC); (yyval).u.EA.type = ZEND_PARSED_MEMBER; } break; - case 294: + case 292: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 297: + case 295: { zend_do_push_object(&(yyvsp[(2) - (2)]) TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); } break; - case 298: + case 296: { memset(&(yyval), 0, sizeof(znode)); (yyval).op_type = IS_UNUSED; } break; - case 299: + case 297: { memset(&(yyval), 0, sizeof(znode)); (yyval).op_type = IS_UNUSED; } break; + case 298: + + { (yyval) = (yyvsp[(2) - (3)]); } + break; + + case 299: + + { Z_LVAL((yyval).u.constant)=0; } + break; + case 300: { (yyval) = (yyvsp[(2) - (3)]); } @@ -4334,12 +4339,12 @@ yyreduce: case 301: - { Z_LVAL((yyval).u.constant)=0; } + { (yyval) = (yyvsp[(1) - (1)]); } break; case 302: - { (yyval) = (yyvsp[(2) - (3)]); } + { (yyval) = (yyvsp[(1) - (1)]); } break; case 303: @@ -4379,47 +4384,47 @@ yyreduce: case 310: - { (yyval) = (yyvsp[(1) - (1)]); } + { zend_do_fetch_constant(&(yyval), NULL, &(yyvsp[(1) - (1)]), ZEND_CT TSRMLS_CC); } break; case 311: - { (yyval) = (yyvsp[(1) - (1)]); } + { (yyval) = (yyvsp[(2) - (2)]); } break; case 312: - { zend_do_fetch_constant(&(yyval), NULL, &(yyvsp[(1) - (1)]), ZEND_CT TSRMLS_CC); } + { zval minus_one; Z_TYPE(minus_one) = IS_LONG; Z_LVAL(minus_one) = -1; mul_function(&(yyvsp[(2) - (2)]).u.constant, &(yyvsp[(2) - (2)]).u.constant, &minus_one TSRMLS_CC); (yyval) = (yyvsp[(2) - (2)]); } break; case 313: - { (yyval) = (yyvsp[(2) - (2)]); } + { (yyval) = (yyvsp[(3) - (4)]); Z_TYPE((yyval).u.constant) = IS_CONSTANT_ARRAY; } break; case 314: - { zval minus_one; Z_TYPE(minus_one) = IS_LONG; Z_LVAL(minus_one) = -1; mul_function(&(yyvsp[(2) - (2)]).u.constant, &(yyvsp[(2) - (2)]).u.constant, &minus_one TSRMLS_CC); (yyval) = (yyvsp[(2) - (2)]); } + { (yyval) = (yyvsp[(1) - (1)]); } break; case 315: - { (yyval) = (yyvsp[(3) - (4)]); Z_TYPE((yyval).u.constant) = IS_CONSTANT_ARRAY; } + { zend_do_fetch_constant(&(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]), ZEND_CT TSRMLS_CC); } break; case 316: - { (yyval) = (yyvsp[(1) - (1)]); } + { zend_do_fetch_constant(&(yyval), NULL, &(yyvsp[(1) - (1)]), ZEND_RT TSRMLS_CC); } break; case 317: - { zend_do_fetch_constant(&(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]), ZEND_CT TSRMLS_CC); } + { (yyval) = (yyvsp[(1) - (1)]); } break; case 318: - { zend_do_fetch_constant(&(yyval), NULL, &(yyvsp[(1) - (1)]), ZEND_RT TSRMLS_CC); } + { (yyval) = (yyvsp[(1) - (1)]); } break; case 319: @@ -4429,506 +4434,496 @@ yyreduce: case 320: - { (yyval) = (yyvsp[(1) - (1)]); } - break; - - case 321: - - { (yyval) = (yyvsp[(1) - (1)]); } - break; - - case 322: - { (yyval) = (yyvsp[(2) - (3)]); } break; - case 323: + case 321: { (yyval) = (yyvsp[(2) - (3)]); } break; - case 324: + case 322: { (yyval) = (yyvsp[(2) - (3)]); zend_do_end_heredoc(TSRMLS_C); } break; - case 325: + case 323: { (yyval).op_type = IS_CONST; INIT_PZVAL(&(yyval).u.constant); array_init(&(yyval).u.constant); } break; - case 326: + case 324: { (yyval) = (yyvsp[(1) - (2)]); } break; - case 329: + case 327: { zend_do_add_static_array_element(&(yyval), &(yyvsp[(3) - (5)]), &(yyvsp[(5) - (5)])); } break; - case 330: + case 328: { zend_do_add_static_array_element(&(yyval), NULL, &(yyvsp[(3) - (3)])); } break; - case 331: + case 329: { (yyval).op_type = IS_CONST; INIT_PZVAL(&(yyval).u.constant); array_init(&(yyval).u.constant); zend_do_add_static_array_element(&(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)])); } break; - case 332: + case 330: { (yyval).op_type = IS_CONST; INIT_PZVAL(&(yyval).u.constant); array_init(&(yyval).u.constant); zend_do_add_static_array_element(&(yyval), NULL, &(yyvsp[(1) - (1)])); } break; - case 333: + case 331: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 334: + case 332: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 335: + case 333: { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); (yyval) = (yyvsp[(1) - (1)]); } break; - case 336: + case 334: { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); (yyval) = (yyvsp[(1) - (1)]); } break; - case 337: + case 335: { zend_check_writable_variable(&(yyvsp[(1) - (2)])); } break; - case 338: + case 336: { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); (yyval) = (yyvsp[(1) - (1)]); } break; - case 339: + case 337: { zend_check_writable_variable(&(yyvsp[(1) - (2)])); } break; - case 340: + case 338: { zend_do_push_object(&(yyvsp[(1) - (2)]) TSRMLS_CC); } break; - case 341: + case 339: { zend_do_push_object(&(yyvsp[(4) - (4)]) TSRMLS_CC); } break; - case 342: + case 340: { zend_do_pop_object(&(yyval) TSRMLS_CC); (yyval).u.EA.type = (yyvsp[(1) - (7)]).u.EA.type | ((yyvsp[(7) - (7)]).u.EA.type ? (yyvsp[(7) - (7)]).u.EA.type : (yyvsp[(6) - (7)]).u.EA.type); } break; - case 343: + case 341: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 344: + case 342: { (yyval).u.EA.type = (yyvsp[(2) - (2)]).u.EA.type; } break; - case 345: + case 343: { (yyval).u.EA.type = 0; } break; - case 346: + case 344: { zend_do_push_object(&(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 347: + case 345: { (yyval).u.EA.type = (yyvsp[(4) - (4)]).u.EA.type; } break; - case 348: + case 346: { zend_do_pop_object(&(yyvsp[(1) - (1)]) TSRMLS_CC); zend_do_begin_method_call(&(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 349: + case 347: { zend_do_end_function_call(&(yyvsp[(1) - (4)]), &(yyval), &(yyvsp[(3) - (4)]), 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_push_object(&(yyval) TSRMLS_CC); (yyval).u.EA.type = ZEND_PARSED_METHOD_CALL; } break; - case 350: + case 348: { zend_do_declare_implicit_property(TSRMLS_C); (yyval).u.EA.type = ZEND_PARSED_MEMBER; } break; - case 351: + case 349: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 352: + case 350: { zend_do_indirect_references(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 353: + case 351: { (yyval) = (yyvsp[(3) - (3)]); zend_do_fetch_static_member(&(yyval), &(yyvsp[(1) - (3)]) TSRMLS_CC); } break; - case 354: + case 352: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 355: + case 353: { zend_do_begin_variable_parse(TSRMLS_C); (yyval) = (yyvsp[(1) - (1)]); (yyval).u.EA.type = ZEND_PARSED_FUNCTION_CALL; } break; - case 356: + case 354: { (yyval) = (yyvsp[(1) - (1)]); (yyval).u.EA.type = ZEND_PARSED_VARIABLE; } break; - case 357: + case 355: { zend_do_indirect_references(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); (yyval).u.EA.type = ZEND_PARSED_VARIABLE; } break; - case 358: + case 356: { (yyval) = (yyvsp[(1) - (1)]); (yyval).u.EA.type = ZEND_PARSED_STATIC_MEMBER; } break; - case 359: + case 357: { fetch_array_dim(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)]) TSRMLS_CC); } break; - case 360: + case 358: { fetch_string_offset(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)]) TSRMLS_CC); } break; - case 361: + case 359: { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&(yyval), &(yyvsp[(1) - (1)]), 1 TSRMLS_CC); } break; - case 362: + case 360: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 363: + case 361: { (yyval) = (yyvsp[(3) - (4)]); } break; - case 364: + case 362: { (yyval).op_type = IS_UNUSED; } break; - case 365: + case 363: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 366: + case 364: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 367: + case 365: { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); } break; - case 368: + case 366: { znode tmp_znode; zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_fetch_property(&(yyval), &tmp_znode, &(yyvsp[(1) - (2)]) TSRMLS_CC);} break; - case 369: + case 367: { fetch_array_dim(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)]) TSRMLS_CC); } break; - case 370: + case 368: { fetch_string_offset(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)]) TSRMLS_CC); } break; - case 371: + case 369: { znode tmp_znode; zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_fetch_property(&(yyval), &tmp_znode, &(yyvsp[(1) - (1)]) TSRMLS_CC);} break; - case 372: + case 370: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 373: + case 371: { (yyval) = (yyvsp[(2) - (3)]); } break; - case 374: + case 372: { Z_LVAL((yyval).u.constant) = 1; } break; - case 375: + case 373: { Z_LVAL((yyval).u.constant)++; } break; - case 378: + case 376: { zend_do_add_list_element(&(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 379: + case 377: { zend_do_new_list_begin(TSRMLS_C); } break; - case 380: + case 378: { zend_do_new_list_end(TSRMLS_C); } break; - case 381: + case 379: { zend_do_add_list_element(NULL TSRMLS_CC); } break; - case 382: + case 380: { zend_do_init_array(&(yyval), NULL, NULL, 0 TSRMLS_CC); } break; - case 383: + case 381: { (yyval) = (yyvsp[(1) - (2)]); } break; - case 384: + case 382: { zend_do_add_array_element(&(yyval), &(yyvsp[(5) - (5)]), &(yyvsp[(3) - (5)]), 0 TSRMLS_CC); } break; - case 385: + case 383: { zend_do_add_array_element(&(yyval), &(yyvsp[(3) - (3)]), NULL, 0 TSRMLS_CC); } break; - case 386: + case 384: { zend_do_init_array(&(yyval), &(yyvsp[(3) - (3)]), &(yyvsp[(1) - (3)]), 0 TSRMLS_CC); } break; - case 387: + case 385: { zend_do_init_array(&(yyval), &(yyvsp[(1) - (1)]), NULL, 0 TSRMLS_CC); } break; - case 388: + case 386: { zend_do_add_array_element(&(yyval), &(yyvsp[(6) - (6)]), &(yyvsp[(3) - (6)]), 1 TSRMLS_CC); } break; - case 389: + case 387: { zend_do_add_array_element(&(yyval), &(yyvsp[(4) - (4)]), NULL, 1 TSRMLS_CC); } break; - case 390: + case 388: { zend_do_init_array(&(yyval), &(yyvsp[(4) - (4)]), &(yyvsp[(1) - (4)]), 1 TSRMLS_CC); } break; - case 391: + case 389: { zend_do_init_array(&(yyval), &(yyvsp[(2) - (2)]), NULL, 1 TSRMLS_CC); } break; - case 392: + case 390: { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_add_variable(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 393: + case 391: { zend_do_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 394: + case 392: { zend_do_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 395: + case 393: { zend_do_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 396: + case 394: { zend_do_add_char(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 397: + case 395: { zend_do_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 398: + case 396: { Z_LVAL((yyvsp[(2) - (2)]).u.constant) = (long) '['; zend_do_add_char(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 399: + case 397: { Z_LVAL((yyvsp[(2) - (2)]).u.constant) = (long) ']'; zend_do_add_char(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 400: + case 398: { Z_LVAL((yyvsp[(2) - (2)]).u.constant) = (long) '{'; zend_do_add_char(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 401: + case 399: { Z_LVAL((yyvsp[(2) - (2)]).u.constant) = (long) '}'; zend_do_add_char(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 402: + case 400: { znode tmp; Z_LVAL((yyvsp[(2) - (2)]).u.constant) = (long) '-'; zend_do_add_char(&tmp, &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); Z_LVAL((yyvsp[(2) - (2)]).u.constant) = (long) '>'; zend_do_add_char(&(yyval), &tmp, &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 403: + case 401: { zend_do_init_string(&(yyval) TSRMLS_CC); } break; - case 404: + case 402: { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&(yyval), &(yyvsp[(1) - (1)]), 1 TSRMLS_CC); } break; - case 405: + case 403: { zend_do_begin_variable_parse(TSRMLS_C); } break; - case 406: + case 404: { fetch_array_begin(&(yyval), &(yyvsp[(1) - (5)]), &(yyvsp[(4) - (5)]) TSRMLS_CC); } break; - case 407: + case 405: { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&(yyvsp[(2) - (3)]), &(yyvsp[(1) - (3)]), 1 TSRMLS_CC); zend_do_fetch_property(&(yyval), &(yyvsp[(2) - (3)]), &(yyvsp[(3) - (3)]) TSRMLS_CC); } break; - case 408: + case 406: { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&(yyval), &(yyvsp[(2) - (3)]), 1 TSRMLS_CC); } break; - case 409: + case 407: { zend_do_begin_variable_parse(TSRMLS_C); fetch_array_begin(&(yyval), &(yyvsp[(2) - (6)]), &(yyvsp[(4) - (6)]) TSRMLS_CC); } break; - case 410: + case 408: { (yyval) = (yyvsp[(2) - (3)]); } break; - case 411: + case 409: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 412: + case 410: { (yyval) = (yyvsp[(1) - (1)]); } break; - case 413: + case 411: { fetch_simple_variable(&(yyval), &(yyvsp[(1) - (1)]), 1 TSRMLS_CC); } break; - case 414: + case 412: { (yyval) = (yyvsp[(3) - (4)]); } break; - case 415: + case 413: { zend_do_isset_or_isempty(ZEND_ISEMPTY, &(yyval), &(yyvsp[(3) - (4)]) TSRMLS_CC); } break; - case 416: + case 414: { zend_do_include_or_eval(ZEND_INCLUDE, &(yyval), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 417: + case 415: { zend_do_include_or_eval(ZEND_INCLUDE_ONCE, &(yyval), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 418: + case 416: { zend_do_include_or_eval(ZEND_EVAL, &(yyval), &(yyvsp[(3) - (4)]) TSRMLS_CC); } break; - case 419: + case 417: { zend_do_include_or_eval(ZEND_REQUIRE, &(yyval), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 420: + case 418: { zend_do_include_or_eval(ZEND_REQUIRE_ONCE, &(yyval), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 421: + case 419: { zend_do_isset_or_isempty(ZEND_ISSET, &(yyval), &(yyvsp[(1) - (1)]) TSRMLS_CC); } break; - case 422: + case 420: { zend_do_boolean_and_begin(&(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)]) TSRMLS_CC); } break; - case 423: + case 421: { znode tmp; zend_do_isset_or_isempty(ZEND_ISSET, &tmp, &(yyvsp[(4) - (4)]) TSRMLS_CC); zend_do_boolean_and_end(&(yyval), &(yyvsp[(1) - (4)]), &tmp, &(yyvsp[(2) - (4)]) TSRMLS_CC); } break; - case 424: + case 422: { zend_do_fetch_constant(&(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]), ZEND_RT TSRMLS_CC); } break; diff --git a/Zend/zend_language_parser.output b/Zend/zend_language_parser.output index 7cb7e8754..6c306aac6 100644 --- a/Zend/zend_language_parser.output +++ b/Zend/zend_language_parser.output @@ -9,7 +9,7 @@ Terminals which are not used State 285 conflicts: 2 shift/reduce -State 618 conflicts: 2 shift/reduce +State 620 conflicts: 2 shift/reduce Grammar @@ -96,22 +96,22 @@ Grammar 51 @16: /* empty */ - 52 @17: /* empty */ + 52 unticked_statement: T_FOREACH '(' variable T_AS @15 foreach_variable foreach_optional_arg ')' @16 foreach_statement - 53 unticked_statement: T_FOREACH '(' variable @15 T_AS @16 foreach_variable foreach_optional_arg ')' @17 foreach_statement + 53 @17: /* empty */ 54 @18: /* empty */ - 55 @19: /* empty */ + 55 unticked_statement: T_FOREACH '(' expr_without_variable T_AS @17 variable foreach_optional_arg ')' @18 foreach_statement - 56 @20: /* empty */ + 56 @19: /* empty */ - 57 unticked_statement: T_FOREACH '(' expr_without_variable @18 T_AS @19 variable foreach_optional_arg ')' @20 foreach_statement + 57 unticked_statement: T_DECLARE @19 '(' declare_list ')' declare_statement + 58 | ';' - 58 @21: /* empty */ + 59 @20: /* empty */ - 59 unticked_statement: T_DECLARE @21 '(' declare_list ')' declare_statement - 60 | ';' + 60 @21: /* empty */ 61 @22: /* empty */ @@ -119,686 +119,682 @@ Grammar 63 @24: /* empty */ - 64 @25: /* empty */ + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches + 65 | T_THROW expr ';' - 65 @26: /* empty */ + 66 additional_catches: non_empty_additional_catches + 67 | /* empty */ - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches - 67 | T_THROW expr ';' + 68 non_empty_additional_catches: additional_catch + 69 | non_empty_additional_catches additional_catch - 68 additional_catches: non_empty_additional_catches - 69 | /* empty */ + 70 @25: /* empty */ - 70 non_empty_additional_catches: additional_catch - 71 | non_empty_additional_catches additional_catch + 71 @26: /* empty */ - 72 @27: /* empty */ + 72 additional_catch: T_CATCH '(' fully_qualified_class_name @25 T_VARIABLE ')' @26 '{' inner_statement_list '}' - 73 @28: /* empty */ + 73 unset_variables: unset_variable + 74 | unset_variables ',' unset_variable - 74 additional_catch: T_CATCH '(' fully_qualified_class_name @27 T_VARIABLE ')' @28 '{' inner_statement_list '}' + 75 unset_variable: variable - 75 unset_variables: unset_variable - 76 | unset_variables ',' unset_variable + 76 use_filename: T_CONSTANT_ENCAPSED_STRING + 77 | '(' T_CONSTANT_ENCAPSED_STRING ')' - 77 unset_variable: variable + 78 function_declaration_statement: unticked_function_declaration_statement - 78 use_filename: T_CONSTANT_ENCAPSED_STRING - 79 | '(' T_CONSTANT_ENCAPSED_STRING ')' + 79 class_declaration_statement: unticked_class_declaration_statement - 80 function_declaration_statement: unticked_function_declaration_statement + 80 is_reference: /* empty */ + 81 | '&' - 81 class_declaration_statement: unticked_class_declaration_statement + 82 @27: /* empty */ - 82 is_reference: /* empty */ - 83 | '&' + 83 @28: /* empty */ - 84 @29: /* empty */ + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference T_STRING @28 '(' parameter_list ')' '{' inner_statement_list '}' - 85 @30: /* empty */ + 85 @29: /* empty */ - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference T_STRING @30 '(' parameter_list ')' '{' inner_statement_list '}' + 86 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @29 implements_list '{' class_statement_list '}' - 87 @31: /* empty */ + 87 @30: /* empty */ - 88 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @31 implements_list '{' class_statement_list '}' + 88 unticked_class_declaration_statement: interface_entry T_STRING @30 interface_extends_list '{' class_statement_list '}' - 89 @32: /* empty */ + 89 class_entry_type: T_CLASS + 90 | T_ABSTRACT T_CLASS + 91 | T_FINAL T_CLASS - 90 unticked_class_declaration_statement: interface_entry T_STRING @32 interface_extends_list '{' class_statement_list '}' + 92 extends_from: /* empty */ + 93 | T_EXTENDS fully_qualified_class_name - 91 class_entry_type: T_CLASS - 92 | T_ABSTRACT T_CLASS - 93 | T_FINAL T_CLASS + 94 interface_entry: T_INTERFACE - 94 extends_from: /* empty */ - 95 | T_EXTENDS fully_qualified_class_name + 95 interface_extends_list: /* empty */ + 96 | T_EXTENDS interface_list - 96 interface_entry: T_INTERFACE + 97 implements_list: /* empty */ + 98 | T_IMPLEMENTS interface_list - 97 interface_extends_list: /* empty */ - 98 | T_EXTENDS interface_list + 99 interface_list: fully_qualified_class_name + 100 | interface_list ',' fully_qualified_class_name - 99 implements_list: /* empty */ - 100 | T_IMPLEMENTS interface_list + 101 foreach_optional_arg: /* empty */ + 102 | T_DOUBLE_ARROW foreach_variable - 101 interface_list: fully_qualified_class_name - 102 | interface_list ',' fully_qualified_class_name + 103 foreach_variable: variable + 104 | '&' variable - 103 foreach_optional_arg: /* empty */ - 104 | T_DOUBLE_ARROW foreach_variable + 105 for_statement: statement + 106 | ':' inner_statement_list T_ENDFOR ';' - 105 foreach_variable: variable - 106 | '&' variable + 107 foreach_statement: statement + 108 | ':' inner_statement_list T_ENDFOREACH ';' - 107 for_statement: statement - 108 | ':' inner_statement_list T_ENDFOR ';' + 109 declare_statement: statement + 110 | ':' inner_statement_list T_ENDDECLARE ';' - 109 foreach_statement: statement - 110 | ':' inner_statement_list T_ENDFOREACH ';' + 111 declare_list: T_STRING '=' static_scalar + 112 | declare_list ',' T_STRING '=' static_scalar - 111 declare_statement: statement - 112 | ':' inner_statement_list T_ENDDECLARE ';' + 113 switch_case_list: '{' case_list '}' + 114 | '{' ';' case_list '}' + 115 | ':' case_list T_ENDSWITCH ';' + 116 | ':' ';' case_list T_ENDSWITCH ';' - 113 declare_list: T_STRING '=' static_scalar - 114 | declare_list ',' T_STRING '=' static_scalar + 117 case_list: /* empty */ - 115 switch_case_list: '{' case_list '}' - 116 | '{' ';' case_list '}' - 117 | ':' case_list T_ENDSWITCH ';' - 118 | ':' ';' case_list T_ENDSWITCH ';' + 118 @31: /* empty */ - 119 case_list: /* empty */ + 119 case_list: case_list T_CASE expr case_separator @31 inner_statement_list - 120 @33: /* empty */ + 120 @32: /* empty */ - 121 case_list: case_list T_CASE expr case_separator @33 inner_statement_list + 121 case_list: case_list T_DEFAULT case_separator @32 inner_statement_list - 122 @34: /* empty */ + 122 case_separator: ':' + 123 | ';' - 123 case_list: case_list T_DEFAULT case_separator @34 inner_statement_list + 124 while_statement: statement + 125 | ':' inner_statement_list T_ENDWHILE ';' - 124 case_separator: ':' - 125 | ';' + 126 elseif_list: /* empty */ - 126 while_statement: statement - 127 | ':' inner_statement_list T_ENDWHILE ';' + 127 @33: /* empty */ - 128 elseif_list: /* empty */ + 128 elseif_list: elseif_list T_ELSEIF '(' expr ')' @33 statement - 129 @35: /* empty */ + 129 new_elseif_list: /* empty */ - 130 elseif_list: elseif_list T_ELSEIF '(' expr ')' @35 statement + 130 @34: /* empty */ - 131 new_elseif_list: /* empty */ + 131 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' ':' @34 inner_statement_list - 132 @36: /* empty */ + 132 else_single: /* empty */ + 133 | T_ELSE statement - 133 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' ':' @36 inner_statement_list + 134 new_else_single: /* empty */ + 135 | T_ELSE ':' inner_statement_list - 134 else_single: /* empty */ - 135 | T_ELSE statement + 136 parameter_list: non_empty_parameter_list + 137 | /* empty */ - 136 new_else_single: /* empty */ - 137 | T_ELSE ':' inner_statement_list + 138 non_empty_parameter_list: optional_class_type T_VARIABLE + 139 | optional_class_type '&' T_VARIABLE + 140 | optional_class_type '&' T_VARIABLE '=' static_scalar + 141 | optional_class_type T_VARIABLE '=' static_scalar + 142 | non_empty_parameter_list ',' optional_class_type T_VARIABLE + 143 | non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE + 144 | non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE '=' static_scalar + 145 | non_empty_parameter_list ',' optional_class_type T_VARIABLE '=' static_scalar - 138 parameter_list: non_empty_parameter_list - 139 | /* empty */ + 146 optional_class_type: /* empty */ + 147 | T_STRING + 148 | T_ARRAY - 140 non_empty_parameter_list: optional_class_type T_VARIABLE - 141 | optional_class_type '&' T_VARIABLE - 142 | optional_class_type '&' T_VARIABLE '=' static_scalar - 143 | optional_class_type T_VARIABLE '=' static_scalar - 144 | non_empty_parameter_list ',' optional_class_type T_VARIABLE - 145 | non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE - 146 | non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE '=' static_scalar - 147 | non_empty_parameter_list ',' optional_class_type T_VARIABLE '=' static_scalar + 149 function_call_parameter_list: non_empty_function_call_parameter_list + 150 | /* empty */ - 148 optional_class_type: /* empty */ - 149 | T_STRING - 150 | T_ARRAY + 151 non_empty_function_call_parameter_list: expr_without_variable + 152 | variable + 153 | '&' w_variable + 154 | non_empty_function_call_parameter_list ',' expr_without_variable + 155 | non_empty_function_call_parameter_list ',' variable + 156 | non_empty_function_call_parameter_list ',' '&' w_variable - 151 function_call_parameter_list: non_empty_function_call_parameter_list - 152 | /* empty */ + 157 global_var_list: global_var_list ',' global_var + 158 | global_var - 153 non_empty_function_call_parameter_list: expr_without_variable - 154 | variable - 155 | '&' w_variable - 156 | non_empty_function_call_parameter_list ',' expr_without_variable - 157 | non_empty_function_call_parameter_list ',' variable - 158 | non_empty_function_call_parameter_list ',' '&' w_variable + 159 global_var: T_VARIABLE + 160 | '$' r_variable + 161 | '$' '{' expr '}' - 159 global_var_list: global_var_list ',' global_var - 160 | global_var + 162 static_var_list: static_var_list ',' T_VARIABLE + 163 | static_var_list ',' T_VARIABLE '=' static_scalar + 164 | T_VARIABLE + 165 | T_VARIABLE '=' static_scalar - 161 global_var: T_VARIABLE - 162 | '$' r_variable - 163 | '$' '{' expr '}' + 166 class_statement_list: class_statement_list class_statement + 167 | /* empty */ - 164 static_var_list: static_var_list ',' T_VARIABLE - 165 | static_var_list ',' T_VARIABLE '=' static_scalar - 166 | T_VARIABLE - 167 | T_VARIABLE '=' static_scalar + 168 @35: /* empty */ - 168 class_statement_list: class_statement_list class_statement - 169 | /* empty */ + 169 class_statement: variable_modifiers @35 class_variable_declaration ';' + 170 | class_constant_declaration ';' - 170 @37: /* empty */ + 171 @36: /* empty */ - 171 class_statement: variable_modifiers @37 class_variable_declaration ';' - 172 | class_constant_declaration ';' + 172 @37: /* empty */ - 173 @38: /* empty */ + 173 class_statement: method_modifiers T_FUNCTION @36 is_reference T_STRING @37 '(' parameter_list ')' method_body - 174 @39: /* empty */ + 174 method_body: ';' + 175 | '{' inner_statement_list '}' - 175 class_statement: method_modifiers T_FUNCTION @38 is_reference T_STRING @39 '(' parameter_list ')' method_body + 176 variable_modifiers: non_empty_member_modifiers + 177 | T_VAR - 176 method_body: ';' - 177 | '{' inner_statement_list '}' + 178 method_modifiers: /* empty */ + 179 | non_empty_member_modifiers - 178 variable_modifiers: non_empty_member_modifiers - 179 | T_VAR + 180 non_empty_member_modifiers: member_modifier + 181 | non_empty_member_modifiers member_modifier - 180 method_modifiers: /* empty */ - 181 | non_empty_member_modifiers + 182 member_modifier: T_PUBLIC + 183 | T_PROTECTED + 184 | T_PRIVATE + 185 | T_STATIC + 186 | T_ABSTRACT + 187 | T_FINAL - 182 non_empty_member_modifiers: member_modifier - 183 | non_empty_member_modifiers member_modifier + 188 class_variable_declaration: class_variable_declaration ',' T_VARIABLE + 189 | class_variable_declaration ',' T_VARIABLE '=' static_scalar + 190 | T_VARIABLE + 191 | T_VARIABLE '=' static_scalar - 184 member_modifier: T_PUBLIC - 185 | T_PROTECTED - 186 | T_PRIVATE - 187 | T_STATIC - 188 | T_ABSTRACT - 189 | T_FINAL + 192 class_constant_declaration: class_constant_declaration ',' T_STRING '=' static_scalar + 193 | T_CONST T_STRING '=' static_scalar - 190 class_variable_declaration: class_variable_declaration ',' T_VARIABLE - 191 | class_variable_declaration ',' T_VARIABLE '=' static_scalar - 192 | T_VARIABLE - 193 | T_VARIABLE '=' static_scalar + 194 echo_expr_list: echo_expr_list ',' expr + 195 | expr - 194 class_constant_declaration: class_constant_declaration ',' T_STRING '=' static_scalar - 195 | T_CONST T_STRING '=' static_scalar + 196 for_expr: /* empty */ + 197 | non_empty_for_expr - 196 echo_expr_list: echo_expr_list ',' expr - 197 | expr + 198 @38: /* empty */ - 198 for_expr: /* empty */ - 199 | non_empty_for_expr + 199 non_empty_for_expr: non_empty_for_expr ',' @38 expr + 200 | expr - 200 @40: /* empty */ + 201 @39: /* empty */ - 201 non_empty_for_expr: non_empty_for_expr ',' @40 expr - 202 | expr + 202 expr_without_variable: T_LIST '(' @39 assignment_list ')' '=' expr + 203 | variable '=' expr + 204 | variable '=' '&' variable - 203 @41: /* empty */ + 205 @40: /* empty */ - 204 expr_without_variable: T_LIST '(' @41 assignment_list ')' '=' expr - 205 | variable '=' expr - 206 | variable '=' '&' variable + 206 expr_without_variable: variable '=' '&' T_NEW class_name_reference @40 ctor_arguments - 207 @42: /* empty */ + 207 @41: /* empty */ - 208 expr_without_variable: variable '=' '&' T_NEW class_name_reference @42 ctor_arguments + 208 expr_without_variable: T_NEW class_name_reference @41 ctor_arguments + 209 | T_CLONE expr + 210 | variable T_PLUS_EQUAL expr + 211 | variable T_MINUS_EQUAL expr + 212 | variable T_MUL_EQUAL expr + 213 | variable T_DIV_EQUAL expr + 214 | variable T_CONCAT_EQUAL expr + 215 | variable T_MOD_EQUAL expr + 216 | variable T_AND_EQUAL expr + 217 | variable T_OR_EQUAL expr + 218 | variable T_XOR_EQUAL expr + 219 | variable T_SL_EQUAL expr + 220 | variable T_SR_EQUAL expr + 221 | rw_variable T_INC + 222 | T_INC rw_variable + 223 | rw_variable T_DEC + 224 | T_DEC rw_variable - 209 @43: /* empty */ + 225 @42: /* empty */ - 210 expr_without_variable: T_NEW class_name_reference @43 ctor_arguments - 211 | T_CLONE expr - 212 | variable T_PLUS_EQUAL expr - 213 | variable T_MINUS_EQUAL expr - 214 | variable T_MUL_EQUAL expr - 215 | variable T_DIV_EQUAL expr - 216 | variable T_CONCAT_EQUAL expr - 217 | variable T_MOD_EQUAL expr - 218 | variable T_AND_EQUAL expr - 219 | variable T_OR_EQUAL expr - 220 | variable T_XOR_EQUAL expr - 221 | variable T_SL_EQUAL expr - 222 | variable T_SR_EQUAL expr - 223 | rw_variable T_INC - 224 | T_INC rw_variable - 225 | rw_variable T_DEC - 226 | T_DEC rw_variable + 226 expr_without_variable: expr T_BOOLEAN_OR @42 expr - 227 @44: /* empty */ + 227 @43: /* empty */ - 228 expr_without_variable: expr T_BOOLEAN_OR @44 expr + 228 expr_without_variable: expr T_BOOLEAN_AND @43 expr - 229 @45: /* empty */ + 229 @44: /* empty */ - 230 expr_without_variable: expr T_BOOLEAN_AND @45 expr + 230 expr_without_variable: expr T_LOGICAL_OR @44 expr - 231 @46: /* empty */ + 231 @45: /* empty */ - 232 expr_without_variable: expr T_LOGICAL_OR @46 expr + 232 expr_without_variable: expr T_LOGICAL_AND @45 expr + 233 | expr T_LOGICAL_XOR expr + 234 | expr '|' expr + 235 | expr '&' expr + 236 | expr '^' expr + 237 | expr '.' expr + 238 | expr '+' expr + 239 | expr '-' expr + 240 | expr '*' expr + 241 | expr '/' expr + 242 | expr '%' expr + 243 | expr T_SL expr + 244 | expr T_SR expr + 245 | '+' expr + 246 | '-' expr + 247 | '!' expr + 248 | '~' expr + 249 | expr T_IS_IDENTICAL expr + 250 | expr T_IS_NOT_IDENTICAL expr + 251 | expr T_IS_EQUAL expr + 252 | expr T_IS_NOT_EQUAL expr + 253 | expr '<' expr + 254 | expr T_IS_SMALLER_OR_EQUAL expr + 255 | expr '>' expr + 256 | expr T_IS_GREATER_OR_EQUAL expr + 257 | expr T_INSTANCEOF class_name_reference + 258 | '(' expr ')' - 233 @47: /* empty */ + 259 @46: /* empty */ - 234 expr_without_variable: expr T_LOGICAL_AND @47 expr - 235 | expr T_LOGICAL_XOR expr - 236 | expr '|' expr - 237 | expr '&' expr - 238 | expr '^' expr - 239 | expr '.' expr - 240 | expr '+' expr - 241 | expr '-' expr - 242 | expr '*' expr - 243 | expr '/' expr - 244 | expr '%' expr - 245 | expr T_SL expr - 246 | expr T_SR expr - 247 | '+' expr - 248 | '-' expr - 249 | '!' expr - 250 | '~' expr - 251 | expr T_IS_IDENTICAL expr - 252 | expr T_IS_NOT_IDENTICAL expr - 253 | expr T_IS_EQUAL expr - 254 | expr T_IS_NOT_EQUAL expr - 255 | expr '<' expr - 256 | expr T_IS_SMALLER_OR_EQUAL expr - 257 | expr '>' expr - 258 | expr T_IS_GREATER_OR_EQUAL expr - 259 | expr T_INSTANCEOF class_name_reference - 260 | '(' expr ')' + 260 @47: /* empty */ - 261 @48: /* empty */ + 261 expr_without_variable: expr '?' @46 expr ':' @47 expr + 262 | internal_functions_in_yacc + 263 | T_INT_CAST expr + 264 | T_DOUBLE_CAST expr + 265 | T_STRING_CAST expr + 266 | T_ARRAY_CAST expr + 267 | T_OBJECT_CAST expr + 268 | T_BOOL_CAST expr + 269 | T_UNSET_CAST expr + 270 | T_EXIT exit_expr - 262 @49: /* empty */ + 271 @48: /* empty */ - 263 expr_without_variable: expr '?' @48 expr ':' @49 expr - 264 | internal_functions_in_yacc - 265 | T_INT_CAST expr - 266 | T_DOUBLE_CAST expr - 267 | T_STRING_CAST expr - 268 | T_ARRAY_CAST expr - 269 | T_OBJECT_CAST expr - 270 | T_BOOL_CAST expr - 271 | T_UNSET_CAST expr - 272 | T_EXIT exit_expr + 272 expr_without_variable: '@' @48 expr + 273 | scalar + 274 | T_ARRAY '(' array_pair_list ')' + 275 | '`' encaps_list '`' + 276 | T_PRINT expr - 273 @50: /* empty */ + 277 @49: /* empty */ - 274 expr_without_variable: '@' @50 expr - 275 | scalar - 276 | T_ARRAY '(' array_pair_list ')' - 277 | '`' encaps_list '`' - 278 | T_PRINT expr + 278 function_call: T_STRING '(' @49 function_call_parameter_list ')' - 279 @51: /* empty */ + 279 @50: /* empty */ - 280 function_call: T_STRING '(' @51 function_call_parameter_list ')' + 280 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @50 function_call_parameter_list ')' - 281 @52: /* empty */ + 281 @51: /* empty */ - 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @52 function_call_parameter_list ')' + 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @51 function_call_parameter_list ')' - 283 @53: /* empty */ + 283 @52: /* empty */ - 284 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @53 function_call_parameter_list ')' + 284 function_call: variable_without_objects '(' @52 function_call_parameter_list ')' - 285 @54: /* empty */ + 285 fully_qualified_class_name: T_STRING - 286 function_call: variable_without_objects '(' @54 function_call_parameter_list ')' + 286 class_name_reference: T_STRING + 287 | dynamic_class_name_reference - 287 fully_qualified_class_name: T_STRING + 288 @53: /* empty */ - 288 class_name_reference: T_STRING - 289 | dynamic_class_name_reference + 289 @54: /* empty */ - 290 @55: /* empty */ + 290 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @53 object_property @54 dynamic_class_name_variable_properties + 291 | base_variable - 291 @56: /* empty */ + 292 dynamic_class_name_variable_properties: dynamic_class_name_variable_properties dynamic_class_name_variable_property + 293 | /* empty */ - 292 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @55 object_property @56 dynamic_class_name_variable_properties - 293 | base_variable + 294 dynamic_class_name_variable_property: T_OBJECT_OPERATOR object_property - 294 dynamic_class_name_variable_properties: dynamic_class_name_variable_properties dynamic_class_name_variable_property - 295 | /* empty */ + 295 exit_expr: /* empty */ + 296 | '(' ')' + 297 | '(' expr ')' - 296 dynamic_class_name_variable_property: T_OBJECT_OPERATOR object_property + 298 ctor_arguments: /* empty */ + 299 | '(' function_call_parameter_list ')' - 297 exit_expr: /* empty */ - 298 | '(' ')' - 299 | '(' expr ')' + 300 common_scalar: T_LNUMBER + 301 | T_DNUMBER + 302 | T_CONSTANT_ENCAPSED_STRING + 303 | T_LINE + 304 | T_FILE + 305 | T_CLASS_C + 306 | T_METHOD_C + 307 | T_FUNC_C - 300 ctor_arguments: /* empty */ - 301 | '(' function_call_parameter_list ')' + 308 static_scalar: common_scalar + 309 | T_STRING + 310 | '+' static_scalar + 311 | '-' static_scalar + 312 | T_ARRAY '(' static_array_pair_list ')' + 313 | static_class_constant - 302 common_scalar: T_LNUMBER - 303 | T_DNUMBER - 304 | T_CONSTANT_ENCAPSED_STRING - 305 | T_LINE - 306 | T_FILE - 307 | T_CLASS_C - 308 | T_METHOD_C - 309 | T_FUNC_C + 314 static_class_constant: T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING - 310 static_scalar: common_scalar - 311 | T_STRING - 312 | '+' static_scalar - 313 | '-' static_scalar - 314 | T_ARRAY '(' static_array_pair_list ')' - 315 | static_class_constant + 315 scalar: T_STRING + 316 | T_STRING_VARNAME + 317 | class_constant + 318 | common_scalar + 319 | '"' encaps_list '"' + 320 | ''' encaps_list ''' + 321 | T_START_HEREDOC encaps_list T_END_HEREDOC - 316 static_class_constant: T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING + 322 static_array_pair_list: /* empty */ + 323 | non_empty_static_array_pair_list possible_comma - 317 scalar: T_STRING - 318 | T_STRING_VARNAME - 319 | class_constant - 320 | common_scalar - 321 | '"' encaps_list '"' - 322 | ''' encaps_list ''' - 323 | T_START_HEREDOC encaps_list T_END_HEREDOC + 324 possible_comma: /* empty */ + 325 | ',' - 324 static_array_pair_list: /* empty */ - 325 | non_empty_static_array_pair_list possible_comma + 326 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar + 327 | non_empty_static_array_pair_list ',' static_scalar + 328 | static_scalar T_DOUBLE_ARROW static_scalar + 329 | static_scalar - 326 possible_comma: /* empty */ - 327 | ',' + 330 expr: r_variable + 331 | expr_without_variable - 328 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar - 329 | non_empty_static_array_pair_list ',' static_scalar - 330 | static_scalar T_DOUBLE_ARROW static_scalar - 331 | static_scalar + 332 r_variable: variable - 332 expr: r_variable - 333 | expr_without_variable + 333 @55: /* empty */ - 334 r_variable: variable + 334 w_variable: variable @55 - 335 @57: /* empty */ + 335 @56: /* empty */ - 336 w_variable: variable @57 + 336 rw_variable: variable @56 - 337 @58: /* empty */ + 337 @57: /* empty */ - 338 rw_variable: variable @58 + 338 @58: /* empty */ - 339 @59: /* empty */ + 339 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @57 object_property @58 method_or_not variable_properties + 340 | base_variable_with_function_calls - 340 @60: /* empty */ + 341 variable_properties: variable_properties variable_property + 342 | /* empty */ - 341 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @59 object_property @60 method_or_not variable_properties - 342 | base_variable_with_function_calls + 343 @59: /* empty */ - 343 variable_properties: variable_properties variable_property - 344 | /* empty */ + 344 variable_property: T_OBJECT_OPERATOR object_property @59 method_or_not - 345 @61: /* empty */ + 345 @60: /* empty */ - 346 variable_property: T_OBJECT_OPERATOR object_property @61 method_or_not + 346 method_or_not: '(' @60 function_call_parameter_list ')' + 347 | /* empty */ - 347 @62: /* empty */ + 348 variable_without_objects: reference_variable + 349 | simple_indirect_reference reference_variable - 348 method_or_not: '(' @62 function_call_parameter_list ')' - 349 | /* empty */ + 350 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects - 350 variable_without_objects: reference_variable - 351 | simple_indirect_reference reference_variable + 351 base_variable_with_function_calls: base_variable + 352 | function_call - 352 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects + 353 base_variable: reference_variable + 354 | simple_indirect_reference reference_variable + 355 | static_member - 353 base_variable_with_function_calls: base_variable - 354 | function_call + 356 reference_variable: reference_variable '[' dim_offset ']' + 357 | reference_variable '{' expr '}' + 358 | compound_variable - 355 base_variable: reference_variable - 356 | simple_indirect_reference reference_variable - 357 | static_member + 359 compound_variable: T_VARIABLE + 360 | '$' '{' expr '}' - 358 reference_variable: reference_variable '[' dim_offset ']' - 359 | reference_variable '{' expr '}' - 360 | compound_variable + 361 dim_offset: /* empty */ + 362 | expr - 361 compound_variable: T_VARIABLE - 362 | '$' '{' expr '}' + 363 object_property: object_dim_list - 363 dim_offset: /* empty */ - 364 | expr + 364 @61: /* empty */ - 365 object_property: object_dim_list + 365 object_property: variable_without_objects @61 - 366 @63: /* empty */ + 366 object_dim_list: object_dim_list '[' dim_offset ']' + 367 | object_dim_list '{' expr '}' + 368 | variable_name - 367 object_property: variable_without_objects @63 + 369 variable_name: T_STRING + 370 | '{' expr '}' - 368 object_dim_list: object_dim_list '[' dim_offset ']' - 369 | object_dim_list '{' expr '}' - 370 | variable_name + 371 simple_indirect_reference: '$' + 372 | simple_indirect_reference '$' - 371 variable_name: T_STRING - 372 | '{' expr '}' + 373 assignment_list: assignment_list ',' assignment_list_element + 374 | assignment_list_element - 373 simple_indirect_reference: '$' - 374 | simple_indirect_reference '$' + 375 assignment_list_element: variable - 375 assignment_list: assignment_list ',' assignment_list_element - 376 | assignment_list_element + 376 @62: /* empty */ - 377 assignment_list_element: variable + 377 assignment_list_element: T_LIST '(' @62 assignment_list ')' + 378 | /* empty */ - 378 @64: /* empty */ + 379 array_pair_list: /* empty */ + 380 | non_empty_array_pair_list possible_comma - 379 assignment_list_element: T_LIST '(' @64 assignment_list ')' - 380 | /* empty */ + 381 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr + 382 | non_empty_array_pair_list ',' expr + 383 | expr T_DOUBLE_ARROW expr + 384 | expr + 385 | non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable + 386 | non_empty_array_pair_list ',' '&' w_variable + 387 | expr T_DOUBLE_ARROW '&' w_variable + 388 | '&' w_variable - 381 array_pair_list: /* empty */ - 382 | non_empty_array_pair_list possible_comma + 389 encaps_list: encaps_list encaps_var + 390 | encaps_list T_STRING + 391 | encaps_list T_NUM_STRING + 392 | encaps_list T_ENCAPSED_AND_WHITESPACE + 393 | encaps_list T_CHARACTER + 394 | encaps_list T_BAD_CHARACTER + 395 | encaps_list '[' + 396 | encaps_list ']' + 397 | encaps_list '{' + 398 | encaps_list '}' + 399 | encaps_list T_OBJECT_OPERATOR + 400 | /* empty */ - 383 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr - 384 | non_empty_array_pair_list ',' expr - 385 | expr T_DOUBLE_ARROW expr - 386 | expr - 387 | non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable - 388 | non_empty_array_pair_list ',' '&' w_variable - 389 | expr T_DOUBLE_ARROW '&' w_variable - 390 | '&' w_variable + 401 encaps_var: T_VARIABLE - 391 encaps_list: encaps_list encaps_var - 392 | encaps_list T_STRING - 393 | encaps_list T_NUM_STRING - 394 | encaps_list T_ENCAPSED_AND_WHITESPACE - 395 | encaps_list T_CHARACTER - 396 | encaps_list T_BAD_CHARACTER - 397 | encaps_list '[' - 398 | encaps_list ']' - 399 | encaps_list '{' - 400 | encaps_list '}' - 401 | encaps_list T_OBJECT_OPERATOR - 402 | /* empty */ + 402 @63: /* empty */ - 403 encaps_var: T_VARIABLE + 403 encaps_var: T_VARIABLE '[' @63 encaps_var_offset ']' + 404 | T_VARIABLE T_OBJECT_OPERATOR T_STRING + 405 | T_DOLLAR_OPEN_CURLY_BRACES expr '}' + 406 | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' + 407 | T_CURLY_OPEN variable '}' - 404 @65: /* empty */ + 408 encaps_var_offset: T_STRING + 409 | T_NUM_STRING + 410 | T_VARIABLE - 405 encaps_var: T_VARIABLE '[' @65 encaps_var_offset ']' - 406 | T_VARIABLE T_OBJECT_OPERATOR T_STRING - 407 | T_DOLLAR_OPEN_CURLY_BRACES expr '}' - 408 | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' - 409 | T_CURLY_OPEN variable '}' + 411 internal_functions_in_yacc: T_ISSET '(' isset_variables ')' + 412 | T_EMPTY '(' variable ')' + 413 | T_INCLUDE expr + 414 | T_INCLUDE_ONCE expr + 415 | T_EVAL '(' expr ')' + 416 | T_REQUIRE expr + 417 | T_REQUIRE_ONCE expr - 410 encaps_var_offset: T_STRING - 411 | T_NUM_STRING - 412 | T_VARIABLE + 418 isset_variables: variable - 413 internal_functions_in_yacc: T_ISSET '(' isset_variables ')' - 414 | T_EMPTY '(' variable ')' - 415 | T_INCLUDE expr - 416 | T_INCLUDE_ONCE expr - 417 | T_EVAL '(' expr ')' - 418 | T_REQUIRE expr - 419 | T_REQUIRE_ONCE expr + 419 @64: /* empty */ - 420 isset_variables: variable + 420 isset_variables: isset_variables ',' @64 variable - 421 @66: /* empty */ - - 422 isset_variables: isset_variables ',' @66 variable - - 423 class_constant: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING + 421 class_constant: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING Terminals, with rules where they appear $end (0) 0 -'!' (33) 249 -'"' (34) 321 -'$' (36) 162 163 362 373 374 -'%' (37) 244 -'&' (38) 83 106 141 142 145 146 155 158 206 208 237 387 388 389 390 -''' (39) 322 -'(' (40) 8 15 20 23 26 29 33 35 49 53 57 59 66 74 79 86 130 133 175 - 204 260 276 280 282 284 286 298 299 301 314 348 379 413 414 417 -')' (41) 8 15 20 23 26 29 33 35 49 53 57 59 66 74 79 86 130 133 175 - 204 260 276 280 282 284 286 298 299 301 314 348 379 413 414 417 -'*' (42) 242 -'+' (43) 240 247 312 -',' (44) 76 102 114 144 145 146 147 156 157 158 159 164 165 190 191 - 194 196 201 327 328 329 375 383 384 387 388 422 -'-' (45) 241 248 313 -'.' (46) 239 -'/' (47) 243 -':' (58) 23 108 110 112 117 118 124 127 133 137 263 -';' (59) 8 15 23 29 33 36 37 38 39 40 41 42 43 44 45 47 48 49 60 67 - 108 110 112 116 117 118 125 127 171 172 176 -'<' (60) 255 -'=' (61) 113 114 142 143 146 147 165 167 191 193 194 195 204 205 206 - 208 -'>' (62) 257 -'?' (63) 263 -'@' (64) 274 -'[' (91) 358 368 397 405 408 -']' (93) 358 368 398 405 408 -'^' (94) 238 -'`' (96) 277 -'{' (123) 17 66 74 86 88 90 115 116 163 177 359 362 369 372 399 -'|' (124) 236 -'}' (125) 17 66 74 86 88 90 115 116 163 177 359 362 369 372 400 407 - 408 409 -'~' (126) 250 +'!' (33) 247 +'"' (34) 319 +'$' (36) 160 161 360 371 372 +'%' (37) 242 +'&' (38) 81 104 139 140 143 144 153 156 204 206 235 385 386 387 388 +''' (39) 320 +'(' (40) 8 15 20 23 26 29 33 35 49 52 55 57 64 72 77 84 128 131 173 + 202 258 274 278 280 282 284 296 297 299 312 346 377 411 412 415 +')' (41) 8 15 20 23 26 29 33 35 49 52 55 57 64 72 77 84 128 131 173 + 202 258 274 278 280 282 284 296 297 299 312 346 377 411 412 415 +'*' (42) 240 +'+' (43) 238 245 310 +',' (44) 74 100 112 142 143 144 145 154 155 156 157 162 163 188 189 + 192 194 199 325 326 327 373 381 382 385 386 420 +'-' (45) 239 246 311 +'.' (46) 237 +'/' (47) 241 +':' (58) 23 106 108 110 115 116 122 125 131 135 261 +';' (59) 8 15 23 29 33 36 37 38 39 40 41 42 43 44 45 47 48 49 58 65 + 106 108 110 114 115 116 123 125 169 170 174 +'<' (60) 253 +'=' (61) 111 112 140 141 144 145 163 165 189 191 192 193 202 203 204 + 206 +'>' (62) 255 +'?' (63) 261 +'@' (64) 272 +'[' (91) 356 366 395 403 406 +']' (93) 356 366 396 403 406 +'^' (94) 236 +'`' (96) 275 +'{' (123) 17 64 72 84 86 88 113 114 161 175 357 360 367 370 397 +'|' (124) 234 +'}' (125) 17 64 72 84 86 88 113 114 161 175 357 360 367 370 398 405 + 406 407 +'~' (126) 248 error (256) -T_REQUIRE_ONCE (258) 419 -T_REQUIRE (259) 418 -T_EVAL (260) 417 -T_INCLUDE_ONCE (261) 416 -T_INCLUDE (262) 415 -T_LOGICAL_OR (263) 232 -T_LOGICAL_XOR (264) 235 -T_LOGICAL_AND (265) 234 -T_PRINT (266) 278 -T_SR_EQUAL (267) 222 -T_SL_EQUAL (268) 221 -T_XOR_EQUAL (269) 220 -T_OR_EQUAL (270) 219 -T_AND_EQUAL (271) 218 -T_MOD_EQUAL (272) 217 -T_CONCAT_EQUAL (273) 216 -T_DIV_EQUAL (274) 215 -T_MUL_EQUAL (275) 214 -T_MINUS_EQUAL (276) 213 -T_PLUS_EQUAL (277) 212 -T_BOOLEAN_OR (278) 228 -T_BOOLEAN_AND (279) 230 -T_IS_NOT_IDENTICAL (280) 252 -T_IS_IDENTICAL (281) 251 -T_IS_NOT_EQUAL (282) 254 -T_IS_EQUAL (283) 253 -T_IS_GREATER_OR_EQUAL (284) 258 -T_IS_SMALLER_OR_EQUAL (285) 256 -T_SR (286) 246 -T_SL (287) 245 -T_INSTANCEOF (288) 259 -T_UNSET_CAST (289) 271 -T_BOOL_CAST (290) 270 -T_OBJECT_CAST (291) 269 -T_ARRAY_CAST (292) 268 -T_STRING_CAST (293) 267 -T_DOUBLE_CAST (294) 266 -T_INT_CAST (295) 265 -T_DEC (296) 225 226 -T_INC (297) 223 224 -T_CLONE (298) 211 -T_NEW (299) 208 210 -T_EXIT (300) 272 +T_REQUIRE_ONCE (258) 417 +T_REQUIRE (259) 416 +T_EVAL (260) 415 +T_INCLUDE_ONCE (261) 414 +T_INCLUDE (262) 413 +T_LOGICAL_OR (263) 230 +T_LOGICAL_XOR (264) 233 +T_LOGICAL_AND (265) 232 +T_PRINT (266) 276 +T_SR_EQUAL (267) 220 +T_SL_EQUAL (268) 219 +T_XOR_EQUAL (269) 218 +T_OR_EQUAL (270) 217 +T_AND_EQUAL (271) 216 +T_MOD_EQUAL (272) 215 +T_CONCAT_EQUAL (273) 214 +T_DIV_EQUAL (274) 213 +T_MUL_EQUAL (275) 212 +T_MINUS_EQUAL (276) 211 +T_PLUS_EQUAL (277) 210 +T_BOOLEAN_OR (278) 226 +T_BOOLEAN_AND (279) 228 +T_IS_NOT_IDENTICAL (280) 250 +T_IS_IDENTICAL (281) 249 +T_IS_NOT_EQUAL (282) 252 +T_IS_EQUAL (283) 251 +T_IS_GREATER_OR_EQUAL (284) 256 +T_IS_SMALLER_OR_EQUAL (285) 254 +T_SR (286) 244 +T_SL (287) 243 +T_INSTANCEOF (288) 257 +T_UNSET_CAST (289) 269 +T_BOOL_CAST (290) 268 +T_OBJECT_CAST (291) 267 +T_ARRAY_CAST (292) 266 +T_STRING_CAST (293) 265 +T_DOUBLE_CAST (294) 264 +T_INT_CAST (295) 263 +T_DEC (296) 223 224 +T_INC (297) 221 222 +T_CLONE (298) 209 +T_NEW (299) 206 208 +T_EXIT (300) 270 T_IF (301) 20 23 -T_ELSEIF (302) 130 133 -T_ELSE (303) 135 137 +T_ELSEIF (302) 128 131 +T_ELSE (303) 133 135 T_ENDIF (304) 23 -T_LNUMBER (305) 302 -T_DNUMBER (306) 303 -T_STRING (307) 86 88 90 113 114 149 175 194 195 280 282 287 288 311 - 316 317 371 392 406 410 423 -T_STRING_VARNAME (308) 318 408 -T_VARIABLE (309) 66 74 140 141 142 143 144 145 146 147 161 164 165 - 166 167 190 191 192 193 361 403 405 406 412 -T_NUM_STRING (310) 393 411 +T_LNUMBER (305) 300 +T_DNUMBER (306) 301 +T_STRING (307) 84 86 88 111 112 147 173 192 193 278 280 285 286 309 + 314 315 369 390 404 408 421 +T_STRING_VARNAME (308) 316 406 +T_VARIABLE (309) 64 72 138 139 140 141 142 143 144 145 159 162 163 + 164 165 188 189 190 191 359 401 403 404 410 +T_NUM_STRING (310) 391 409 T_INLINE_HTML (311) 46 -T_CHARACTER (312) 395 -T_BAD_CHARACTER (313) 396 -T_ENCAPSED_AND_WHITESPACE (314) 394 -T_CONSTANT_ENCAPSED_STRING (315) 78 79 304 +T_CHARACTER (312) 393 +T_BAD_CHARACTER (313) 394 +T_ENCAPSED_AND_WHITESPACE (314) 392 +T_CONSTANT_ENCAPSED_STRING (315) 76 77 302 T_ECHO (316) 45 T_DO (317) 29 T_WHILE (318) 26 29 -T_ENDWHILE (319) 127 +T_ENDWHILE (319) 125 T_FOR (320) 33 -T_ENDFOR (321) 108 -T_FOREACH (322) 53 57 -T_ENDFOREACH (323) 110 -T_DECLARE (324) 59 -T_ENDDECLARE (325) 112 -T_AS (326) 53 57 +T_ENDFOR (321) 106 +T_FOREACH (322) 52 55 +T_ENDFOREACH (323) 108 +T_DECLARE (324) 57 +T_ENDDECLARE (325) 110 +T_AS (326) 52 55 T_SWITCH (327) 35 -T_ENDSWITCH (328) 117 118 -T_CASE (329) 121 -T_DEFAULT (330) 123 +T_ENDSWITCH (328) 115 116 +T_CASE (329) 119 +T_DEFAULT (330) 121 T_BREAK (331) 36 37 T_CONTINUE (332) 38 39 -T_FUNCTION (333) 86 175 -T_CONST (334) 195 +T_FUNCTION (333) 84 173 +T_CONST (334) 193 T_RETURN (335) 40 41 42 -T_TRY (336) 66 -T_CATCH (337) 66 74 -T_THROW (338) 67 +T_TRY (336) 64 +T_CATCH (337) 64 72 +T_THROW (338) 65 T_USE (339) 48 T_GLOBAL (340) 43 -T_PUBLIC (341) 184 -T_PROTECTED (342) 185 -T_PRIVATE (343) 186 -T_FINAL (344) 93 189 -T_ABSTRACT (345) 92 188 -T_STATIC (346) 44 187 -T_VAR (347) 179 +T_PUBLIC (341) 182 +T_PROTECTED (342) 183 +T_PRIVATE (343) 184 +T_FINAL (344) 91 187 +T_ABSTRACT (345) 90 186 +T_STATIC (346) 44 185 +T_VAR (347) 177 T_UNSET (348) 49 -T_ISSET (349) 413 -T_EMPTY (350) 414 +T_ISSET (349) 411 +T_EMPTY (350) 412 T_HALT_COMPILER (351) 8 15 -T_CLASS (352) 91 92 93 -T_INTERFACE (353) 96 -T_EXTENDS (354) 95 98 -T_IMPLEMENTS (355) 100 -T_OBJECT_OPERATOR (356) 292 296 341 346 401 406 -T_DOUBLE_ARROW (357) 104 328 330 383 385 387 389 -T_LIST (358) 204 379 -T_ARRAY (359) 150 276 314 -T_CLASS_C (360) 307 -T_METHOD_C (361) 308 -T_FUNC_C (362) 309 -T_LINE (363) 305 -T_FILE (364) 306 +T_CLASS (352) 89 90 91 +T_INTERFACE (353) 94 +T_EXTENDS (354) 93 96 +T_IMPLEMENTS (355) 98 +T_OBJECT_OPERATOR (356) 290 294 339 344 399 404 +T_DOUBLE_ARROW (357) 102 326 328 381 383 385 387 +T_LIST (358) 202 377 +T_ARRAY (359) 148 274 312 +T_CLASS_C (360) 305 +T_METHOD_C (361) 306 +T_FUNC_C (362) 307 +T_LINE (363) 303 +T_FILE (364) 304 T_COMMENT (365) T_DOC_COMMENT (366) T_OPEN_TAG (367) T_OPEN_TAG_WITH_ECHO (368) T_CLOSE_TAG (369) T_WHITESPACE (370) -T_START_HEREDOC (371) 323 -T_END_HEREDOC (372) 323 -T_DOLLAR_OPEN_CURLY_BRACES (373) 407 408 -T_CURLY_OPEN (374) 409 -T_PAAMAYIM_NEKUDOTAYIM (375) 282 284 316 352 423 +T_START_HEREDOC (371) 321 +T_END_HEREDOC (372) 321 +T_DOLLAR_OPEN_CURLY_BRACES (373) 405 406 +T_CURLY_OPEN (374) 407 +T_PAAMAYIM_NEKUDOTAYIM (375) 280 282 314 350 421 Nonterminals, with rules where they appear @@ -814,17 +810,17 @@ top_statement_list (152) top_statement (154) on left: 5 6 7 8, on right: 3 inner_statement_list (155) - on left: 10 11, on right: 10 17 23 66 74 86 108 110 112 121 123 - 127 133 137 177 + on left: 10 11, on right: 10 17 23 64 72 84 106 108 110 119 121 + 125 131 135 175 @2 (156) on left: 9, on right: 10 inner_statement (157) on left: 12 13 14 15, on right: 10 statement (158) - on left: 16, on right: 5 12 20 29 107 109 111 126 130 135 + on left: 16, on right: 5 12 20 29 105 107 109 124 128 133 unticked_statement (159) on left: 17 20 23 26 29 33 35 36 37 38 39 40 41 42 43 44 45 46 - 47 48 49 53 57 59 60 66 67, on right: 16 + 47 48 49 52 55 57 58 64 65, on right: 16 @3 (160) on left: 18, on right: 20 @4 (161) @@ -850,317 +846,313 @@ unticked_statement (159) @14 (171) on left: 34, on right: 35 @15 (172) - on left: 50, on right: 53 + on left: 50, on right: 52 @16 (173) - on left: 51, on right: 53 + on left: 51, on right: 52 @17 (174) - on left: 52, on right: 53 + on left: 53, on right: 55 @18 (175) - on left: 54, on right: 57 + on left: 54, on right: 55 @19 (176) - on left: 55, on right: 57 -@20 (177) on left: 56, on right: 57 +@20 (177) + on left: 59, on right: 64 @21 (178) - on left: 58, on right: 59 + on left: 60, on right: 64 @22 (179) - on left: 61, on right: 66 + on left: 61, on right: 64 @23 (180) - on left: 62, on right: 66 + on left: 62, on right: 64 @24 (181) - on left: 63, on right: 66 -@25 (182) - on left: 64, on right: 66 -@26 (183) - on left: 65, on right: 66 -additional_catches (184) - on left: 68 69, on right: 66 -non_empty_additional_catches (185) - on left: 70 71, on right: 68 71 -additional_catch (186) - on left: 74, on right: 70 71 -@27 (187) - on left: 72, on right: 74 -@28 (188) - on left: 73, on right: 74 -unset_variables (189) - on left: 75 76, on right: 49 76 -unset_variable (190) - on left: 77, on right: 75 76 -use_filename (191) - on left: 78 79, on right: 48 -function_declaration_statement (192) - on left: 80, on right: 6 13 -class_declaration_statement (193) - on left: 81, on right: 7 14 -is_reference (194) - on left: 82 83, on right: 86 175 -unticked_function_declaration_statement (195) - on left: 86, on right: 80 -@29 (196) - on left: 84, on right: 86 -@30 (197) + on left: 63, on right: 64 +additional_catches (182) + on left: 66 67, on right: 64 +non_empty_additional_catches (183) + on left: 68 69, on right: 66 69 +additional_catch (184) + on left: 72, on right: 68 69 +@25 (185) + on left: 70, on right: 72 +@26 (186) + on left: 71, on right: 72 +unset_variables (187) + on left: 73 74, on right: 49 74 +unset_variable (188) + on left: 75, on right: 73 74 +use_filename (189) + on left: 76 77, on right: 48 +function_declaration_statement (190) + on left: 78, on right: 6 13 +class_declaration_statement (191) + on left: 79, on right: 7 14 +is_reference (192) + on left: 80 81, on right: 84 173 +unticked_function_declaration_statement (193) + on left: 84, on right: 78 +@27 (194) + on left: 82, on right: 84 +@28 (195) + on left: 83, on right: 84 +unticked_class_declaration_statement (196) + on left: 86 88, on right: 79 +@29 (197) on left: 85, on right: 86 -unticked_class_declaration_statement (198) - on left: 88 90, on right: 81 -@31 (199) +@30 (198) on left: 87, on right: 88 -@32 (200) - on left: 89, on right: 90 -class_entry_type (201) - on left: 91 92 93, on right: 88 -extends_from (202) - on left: 94 95, on right: 88 -interface_entry (203) - on left: 96, on right: 90 -interface_extends_list (204) - on left: 97 98, on right: 90 -implements_list (205) - on left: 99 100, on right: 88 -interface_list (206) - on left: 101 102, on right: 98 100 102 -foreach_optional_arg (207) - on left: 103 104, on right: 53 57 -foreach_variable (208) - on left: 105 106, on right: 53 104 -for_statement (209) - on left: 107 108, on right: 33 -foreach_statement (210) - on left: 109 110, on right: 53 57 -declare_statement (211) - on left: 111 112, on right: 59 -declare_list (212) - on left: 113 114, on right: 59 114 -switch_case_list (213) - on left: 115 116 117 118, on right: 35 -case_list (214) - on left: 119 121 123, on right: 115 116 117 118 121 123 -@33 (215) +class_entry_type (199) + on left: 89 90 91, on right: 86 +extends_from (200) + on left: 92 93, on right: 86 +interface_entry (201) + on left: 94, on right: 88 +interface_extends_list (202) + on left: 95 96, on right: 88 +implements_list (203) + on left: 97 98, on right: 86 +interface_list (204) + on left: 99 100, on right: 96 98 100 +foreach_optional_arg (205) + on left: 101 102, on right: 52 55 +foreach_variable (206) + on left: 103 104, on right: 52 102 +for_statement (207) + on left: 105 106, on right: 33 +foreach_statement (208) + on left: 107 108, on right: 52 55 +declare_statement (209) + on left: 109 110, on right: 57 +declare_list (210) + on left: 111 112, on right: 57 112 +switch_case_list (211) + on left: 113 114 115 116, on right: 35 +case_list (212) + on left: 117 119 121, on right: 113 114 115 116 119 121 +@31 (213) + on left: 118, on right: 119 +@32 (214) on left: 120, on right: 121 -@34 (216) - on left: 122, on right: 123 -case_separator (217) - on left: 124 125, on right: 121 123 -while_statement (218) - on left: 126 127, on right: 26 -elseif_list (219) - on left: 128 130, on right: 20 130 -@35 (220) - on left: 129, on right: 130 -new_elseif_list (221) - on left: 131 133, on right: 23 133 -@36 (222) - on left: 132, on right: 133 -else_single (223) - on left: 134 135, on right: 20 -new_else_single (224) - on left: 136 137, on right: 23 -parameter_list (225) - on left: 138 139, on right: 86 175 -non_empty_parameter_list (226) - on left: 140 141 142 143 144 145 146 147, on right: 138 144 145 - 146 147 -optional_class_type (227) - on left: 148 149 150, on right: 140 141 142 143 144 145 146 147 -function_call_parameter_list (228) - on left: 151 152, on right: 280 282 284 286 301 348 -non_empty_function_call_parameter_list (229) - on left: 153 154 155 156 157 158, on right: 151 156 157 158 -global_var_list (230) - on left: 159 160, on right: 43 159 -global_var (231) - on left: 161 162 163, on right: 159 160 -static_var_list (232) - on left: 164 165 166 167, on right: 44 164 165 -class_statement_list (233) - on left: 168 169, on right: 88 90 168 -class_statement (234) - on left: 171 172 175, on right: 168 +case_separator (215) + on left: 122 123, on right: 119 121 +while_statement (216) + on left: 124 125, on right: 26 +elseif_list (217) + on left: 126 128, on right: 20 128 +@33 (218) + on left: 127, on right: 128 +new_elseif_list (219) + on left: 129 131, on right: 23 131 +@34 (220) + on left: 130, on right: 131 +else_single (221) + on left: 132 133, on right: 20 +new_else_single (222) + on left: 134 135, on right: 23 +parameter_list (223) + on left: 136 137, on right: 84 173 +non_empty_parameter_list (224) + on left: 138 139 140 141 142 143 144 145, on right: 136 142 143 + 144 145 +optional_class_type (225) + on left: 146 147 148, on right: 138 139 140 141 142 143 144 145 +function_call_parameter_list (226) + on left: 149 150, on right: 278 280 282 284 299 346 +non_empty_function_call_parameter_list (227) + on left: 151 152 153 154 155 156, on right: 149 154 155 156 +global_var_list (228) + on left: 157 158, on right: 43 157 +global_var (229) + on left: 159 160 161, on right: 157 158 +static_var_list (230) + on left: 162 163 164 165, on right: 44 162 163 +class_statement_list (231) + on left: 166 167, on right: 86 88 166 +class_statement (232) + on left: 169 170 173, on right: 166 +@35 (233) + on left: 168, on right: 169 +@36 (234) + on left: 171, on right: 173 @37 (235) - on left: 170, on right: 171 -@38 (236) - on left: 173, on right: 175 -@39 (237) - on left: 174, on right: 175 -method_body (238) - on left: 176 177, on right: 175 -variable_modifiers (239) - on left: 178 179, on right: 171 -method_modifiers (240) - on left: 180 181, on right: 175 -non_empty_member_modifiers (241) - on left: 182 183, on right: 178 181 183 -member_modifier (242) - on left: 184 185 186 187 188 189, on right: 182 183 -class_variable_declaration (243) - on left: 190 191 192 193, on right: 171 190 191 -class_constant_declaration (244) - on left: 194 195, on right: 172 194 -echo_expr_list (245) - on left: 196 197, on right: 45 196 -for_expr (246) - on left: 198 199, on right: 33 -non_empty_for_expr (247) - on left: 201 202, on right: 199 201 -@40 (248) - on left: 200, on right: 201 -expr_without_variable (249) - on left: 204 205 206 208 210 211 212 213 214 215 216 217 218 219 - 220 221 222 223 224 225 226 228 230 232 234 235 236 237 238 239 - 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 - 256 257 258 259 260 263 264 265 266 267 268 269 270 271 272 274 - 275 276 277 278, on right: 41 57 153 156 333 + on left: 172, on right: 173 +method_body (236) + on left: 174 175, on right: 173 +variable_modifiers (237) + on left: 176 177, on right: 169 +method_modifiers (238) + on left: 178 179, on right: 173 +non_empty_member_modifiers (239) + on left: 180 181, on right: 176 179 181 +member_modifier (240) + on left: 182 183 184 185 186 187, on right: 180 181 +class_variable_declaration (241) + on left: 188 189 190 191, on right: 169 188 189 +class_constant_declaration (242) + on left: 192 193, on right: 170 192 +echo_expr_list (243) + on left: 194 195, on right: 45 194 +for_expr (244) + on left: 196 197, on right: 33 +non_empty_for_expr (245) + on left: 199 200, on right: 197 199 +@38 (246) + on left: 198, on right: 199 +expr_without_variable (247) + on left: 202 203 204 206 208 209 210 211 212 213 214 215 216 217 + 218 219 220 221 222 223 224 226 228 230 232 233 234 235 236 237 + 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 + 254 255 256 257 258 261 262 263 264 265 266 267 268 269 270 272 + 273 274 275 276, on right: 41 55 151 154 331 +@39 (248) + on left: 201, on right: 202 +@40 (249) + on left: 205, on right: 206 @41 (250) - on left: 203, on right: 204 -@42 (251) on left: 207, on right: 208 +@42 (251) + on left: 225, on right: 226 @43 (252) - on left: 209, on right: 210 -@44 (253) on left: 227, on right: 228 -@45 (254) +@44 (253) on left: 229, on right: 230 -@46 (255) +@45 (254) on left: 231, on right: 232 +@46 (255) + on left: 259, on right: 261 @47 (256) - on left: 233, on right: 234 + on left: 260, on right: 261 @48 (257) - on left: 261, on right: 263 -@49 (258) - on left: 262, on right: 263 -@50 (259) - on left: 273, on right: 274 -function_call (260) - on left: 280 282 284 286, on right: 354 -@51 (261) + on left: 271, on right: 272 +function_call (258) + on left: 278 280 282 284, on right: 352 +@49 (259) + on left: 277, on right: 278 +@50 (260) on left: 279, on right: 280 -@52 (262) +@51 (261) on left: 281, on right: 282 -@53 (263) +@52 (262) on left: 283, on right: 284 -@54 (264) - on left: 285, on right: 286 -fully_qualified_class_name (265) - on left: 287, on right: 66 74 95 101 102 282 284 352 423 -class_name_reference (266) - on left: 288 289, on right: 208 210 259 -dynamic_class_name_reference (267) - on left: 292 293, on right: 289 -@55 (268) - on left: 290, on right: 292 -@56 (269) - on left: 291, on right: 292 -dynamic_class_name_variable_properties (270) - on left: 294 295, on right: 292 294 -dynamic_class_name_variable_property (271) - on left: 296, on right: 294 -exit_expr (272) - on left: 297 298 299, on right: 272 -ctor_arguments (273) - on left: 300 301, on right: 208 210 -common_scalar (274) - on left: 302 303 304 305 306 307 308 309, on right: 310 320 -static_scalar (275) - on left: 310 311 312 313 314 315, on right: 113 114 142 143 146 - 147 165 167 191 193 194 195 312 313 328 329 330 331 -static_class_constant (276) - on left: 316, on right: 315 -scalar (277) - on left: 317 318 319 320 321 322 323, on right: 275 -static_array_pair_list (278) - on left: 324 325, on right: 314 -possible_comma (279) - on left: 326 327, on right: 325 382 -non_empty_static_array_pair_list (280) - on left: 328 329 330 331, on right: 325 328 329 -expr (281) - on left: 332 333, on right: 20 23 26 29 35 37 39 47 67 121 130 - 133 163 196 197 201 202 204 205 211 212 213 214 215 216 217 218 - 219 220 221 222 228 230 232 234 235 236 237 238 239 240 241 242 - 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 - 259 260 263 265 266 267 268 269 270 271 274 278 299 359 362 364 - 369 372 383 384 385 386 387 389 407 408 415 416 417 418 419 -r_variable (282) - on left: 334, on right: 162 332 -w_variable (283) - on left: 336, on right: 155 158 387 388 389 390 -@57 (284) +fully_qualified_class_name (263) + on left: 285, on right: 64 72 93 99 100 280 282 350 421 +class_name_reference (264) + on left: 286 287, on right: 206 208 257 +dynamic_class_name_reference (265) + on left: 290 291, on right: 287 +@53 (266) + on left: 288, on right: 290 +@54 (267) + on left: 289, on right: 290 +dynamic_class_name_variable_properties (268) + on left: 292 293, on right: 290 292 +dynamic_class_name_variable_property (269) + on left: 294, on right: 292 +exit_expr (270) + on left: 295 296 297, on right: 270 +ctor_arguments (271) + on left: 298 299, on right: 206 208 +common_scalar (272) + on left: 300 301 302 303 304 305 306 307, on right: 308 318 +static_scalar (273) + on left: 308 309 310 311 312 313, on right: 111 112 140 141 144 + 145 163 165 189 191 192 193 310 311 326 327 328 329 +static_class_constant (274) + on left: 314, on right: 313 +scalar (275) + on left: 315 316 317 318 319 320 321, on right: 273 +static_array_pair_list (276) + on left: 322 323, on right: 312 +possible_comma (277) + on left: 324 325, on right: 323 380 +non_empty_static_array_pair_list (278) + on left: 326 327 328 329, on right: 323 326 327 +expr (279) + on left: 330 331, on right: 20 23 26 29 35 37 39 47 65 119 128 + 131 161 194 195 199 200 202 203 209 210 211 212 213 214 215 216 + 217 218 219 220 226 228 230 232 233 234 235 236 237 238 239 240 + 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 + 257 258 261 263 264 265 266 267 268 269 272 276 297 357 360 362 + 367 370 381 382 383 384 385 387 405 406 413 414 415 416 417 +r_variable (280) + on left: 332, on right: 160 330 +w_variable (281) + on left: 334, on right: 153 156 385 386 387 388 +@55 (282) + on left: 333, on right: 334 +rw_variable (283) + on left: 336, on right: 221 222 223 224 +@56 (284) on left: 335, on right: 336 -rw_variable (285) - on left: 338, on right: 223 224 225 226 -@58 (286) - on left: 337, on right: 338 -variable (287) - on left: 341 342, on right: 42 53 57 77 105 106 154 157 205 206 - 208 212 213 214 215 216 217 218 219 220 221 222 334 336 338 377 - 409 414 420 422 -@59 (288) - on left: 339, on right: 341 -@60 (289) - on left: 340, on right: 341 -variable_properties (290) - on left: 343 344, on right: 341 343 -variable_property (291) - on left: 346, on right: 343 -@61 (292) +variable (285) + on left: 339 340, on right: 42 52 55 75 103 104 152 155 203 204 + 206 210 211 212 213 214 215 216 217 218 219 220 332 334 336 375 + 407 412 418 420 +@57 (286) + on left: 337, on right: 339 +@58 (287) + on left: 338, on right: 339 +variable_properties (288) + on left: 341 342, on right: 339 341 +variable_property (289) + on left: 344, on right: 341 +@59 (290) + on left: 343, on right: 344 +method_or_not (291) + on left: 346 347, on right: 339 344 +@60 (292) on left: 345, on right: 346 -method_or_not (293) - on left: 348 349, on right: 341 346 -@62 (294) - on left: 347, on right: 348 -variable_without_objects (295) - on left: 350 351, on right: 284 286 352 367 -static_member (296) - on left: 352, on right: 357 -base_variable_with_function_calls (297) - on left: 353 354, on right: 341 342 -base_variable (298) - on left: 355 356 357, on right: 292 293 353 -reference_variable (299) - on left: 358 359 360, on right: 350 351 355 356 358 359 -compound_variable (300) - on left: 361 362, on right: 360 -dim_offset (301) - on left: 363 364, on right: 358 368 -object_property (302) - on left: 365 367, on right: 292 296 341 346 -@63 (303) - on left: 366, on right: 367 -object_dim_list (304) - on left: 368 369 370, on right: 365 368 369 -variable_name (305) - on left: 371 372, on right: 370 -simple_indirect_reference (306) - on left: 373 374, on right: 351 356 374 -assignment_list (307) - on left: 375 376, on right: 204 375 379 -assignment_list_element (308) - on left: 377 379 380, on right: 375 376 -@64 (309) - on left: 378, on right: 379 -array_pair_list (310) - on left: 381 382, on right: 276 -non_empty_array_pair_list (311) - on left: 383 384 385 386 387 388 389 390, on right: 382 383 384 - 387 388 -encaps_list (312) - on left: 391 392 393 394 395 396 397 398 399 400 401 402, - on right: 277 321 322 323 391 392 393 394 395 396 397 398 399 400 - 401 -encaps_var (313) - on left: 403 405 406 407 408 409, on right: 391 -@65 (314) - on left: 404, on right: 405 -encaps_var_offset (315) - on left: 410 411 412, on right: 405 -internal_functions_in_yacc (316) - on left: 413 414 415 416 417 418 419, on right: 264 -isset_variables (317) - on left: 420 422, on right: 413 422 -@66 (318) - on left: 421, on right: 422 -class_constant (319) - on left: 423, on right: 319 +variable_without_objects (293) + on left: 348 349, on right: 282 284 350 365 +static_member (294) + on left: 350, on right: 355 +base_variable_with_function_calls (295) + on left: 351 352, on right: 339 340 +base_variable (296) + on left: 353 354 355, on right: 290 291 351 +reference_variable (297) + on left: 356 357 358, on right: 348 349 353 354 356 357 +compound_variable (298) + on left: 359 360, on right: 358 +dim_offset (299) + on left: 361 362, on right: 356 366 +object_property (300) + on left: 363 365, on right: 290 294 339 344 +@61 (301) + on left: 364, on right: 365 +object_dim_list (302) + on left: 366 367 368, on right: 363 366 367 +variable_name (303) + on left: 369 370, on right: 368 +simple_indirect_reference (304) + on left: 371 372, on right: 349 354 372 +assignment_list (305) + on left: 373 374, on right: 202 373 377 +assignment_list_element (306) + on left: 375 377 378, on right: 373 374 +@62 (307) + on left: 376, on right: 377 +array_pair_list (308) + on left: 379 380, on right: 274 +non_empty_array_pair_list (309) + on left: 381 382 383 384 385 386 387 388, on right: 380 381 382 + 385 386 +encaps_list (310) + on left: 389 390 391 392 393 394 395 396 397 398 399 400, + on right: 275 319 320 321 389 390 391 392 393 394 395 396 397 398 + 399 +encaps_var (311) + on left: 401 403 404 405 406 407, on right: 389 +@63 (312) + on left: 402, on right: 403 +encaps_var_offset (313) + on left: 408 409 410, on right: 403 +internal_functions_in_yacc (314) + on left: 411 412 413 414 415 416 417, on right: 262 +isset_variables (315) + on left: 418 420, on right: 411 420 +@64 (316) + on left: 419, on right: 420 +class_constant (317) + on left: 421, on right: 317 state 0 @@ -1304,7 +1296,7 @@ state 4 state 5 - 419 internal_functions_in_yacc: T_REQUIRE_ONCE . expr + 417 internal_functions_in_yacc: T_REQUIRE_ONCE . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -1373,7 +1365,7 @@ state 5 state 6 - 418 internal_functions_in_yacc: T_REQUIRE . expr + 416 internal_functions_in_yacc: T_REQUIRE . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -1442,14 +1434,14 @@ state 6 state 7 - 417 internal_functions_in_yacc: T_EVAL . '(' expr ')' + 415 internal_functions_in_yacc: T_EVAL . '(' expr ')' '(' shift, and go to state 104 state 8 - 416 internal_functions_in_yacc: T_INCLUDE_ONCE . expr + 414 internal_functions_in_yacc: T_INCLUDE_ONCE . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -1518,7 +1510,7 @@ state 8 state 9 - 415 internal_functions_in_yacc: T_INCLUDE . expr + 413 internal_functions_in_yacc: T_INCLUDE . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -1587,7 +1579,7 @@ state 9 state 10 - 278 expr_without_variable: T_PRINT . expr + 276 expr_without_variable: T_PRINT . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -1656,7 +1648,7 @@ state 10 state 11 - 247 expr_without_variable: '+' . expr + 245 expr_without_variable: '+' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -1725,7 +1717,7 @@ state 11 state 12 - 248 expr_without_variable: '-' . expr + 246 expr_without_variable: '-' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -1794,7 +1786,7 @@ state 12 state 13 - 249 expr_without_variable: '!' . expr + 247 expr_without_variable: '!' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -1863,7 +1855,7 @@ state 13 state 14 - 250 expr_without_variable: '~' . expr + 248 expr_without_variable: '~' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -1932,16 +1924,16 @@ state 14 state 15 - 274 expr_without_variable: '@' . @50 expr + 272 expr_without_variable: '@' . @48 expr - $default reduce using rule 273 (@50) + $default reduce using rule 271 (@48) - @50 go to state 112 + @48 go to state 112 state 16 - 271 expr_without_variable: T_UNSET_CAST . expr + 269 expr_without_variable: T_UNSET_CAST . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -2010,7 +2002,7 @@ state 16 state 17 - 270 expr_without_variable: T_BOOL_CAST . expr + 268 expr_without_variable: T_BOOL_CAST . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -2079,7 +2071,7 @@ state 17 state 18 - 269 expr_without_variable: T_OBJECT_CAST . expr + 267 expr_without_variable: T_OBJECT_CAST . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -2148,7 +2140,7 @@ state 18 state 19 - 268 expr_without_variable: T_ARRAY_CAST . expr + 266 expr_without_variable: T_ARRAY_CAST . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -2217,7 +2209,7 @@ state 19 state 20 - 267 expr_without_variable: T_STRING_CAST . expr + 265 expr_without_variable: T_STRING_CAST . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -2286,7 +2278,7 @@ state 20 state 21 - 266 expr_without_variable: T_DOUBLE_CAST . expr + 264 expr_without_variable: T_DOUBLE_CAST . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -2355,7 +2347,7 @@ state 21 state 22 - 265 expr_without_variable: T_INT_CAST . expr + 263 expr_without_variable: T_INT_CAST . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -2424,7 +2416,7 @@ state 22 state 23 - 226 expr_without_variable: T_DEC . rw_variable + 224 expr_without_variable: T_DEC . rw_variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -2445,7 +2437,7 @@ state 23 state 24 - 224 expr_without_variable: T_INC . rw_variable + 222 expr_without_variable: T_INC . rw_variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -2466,7 +2458,7 @@ state 24 state 25 - 211 expr_without_variable: T_CLONE . expr + 209 expr_without_variable: T_CLONE . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -2535,7 +2527,7 @@ state 25 state 26 - 210 expr_without_variable: T_NEW . class_name_reference @43 ctor_arguments + 208 expr_without_variable: T_NEW . class_name_reference @41 ctor_arguments T_STRING shift, and go to state 126 T_VARIABLE shift, and go to state 33 @@ -2553,11 +2545,11 @@ state 26 state 27 - 272 expr_without_variable: T_EXIT . exit_expr + 270 expr_without_variable: T_EXIT . exit_expr '(' shift, and go to state 133 - $default reduce using rule 297 (exit_expr) + $default reduce using rule 295 (exit_expr) exit_expr go to state 134 @@ -2572,42 +2564,42 @@ state 28 state 29 - 302 common_scalar: T_LNUMBER . + 300 common_scalar: T_LNUMBER . - $default reduce using rule 302 (common_scalar) + $default reduce using rule 300 (common_scalar) state 30 - 303 common_scalar: T_DNUMBER . + 301 common_scalar: T_DNUMBER . - $default reduce using rule 303 (common_scalar) + $default reduce using rule 301 (common_scalar) state 31 - 280 function_call: T_STRING . '(' @51 function_call_parameter_list ')' - 287 fully_qualified_class_name: T_STRING . - 317 scalar: T_STRING . + 278 function_call: T_STRING . '(' @49 function_call_parameter_list ')' + 285 fully_qualified_class_name: T_STRING . + 315 scalar: T_STRING . '(' shift, and go to state 136 - T_PAAMAYIM_NEKUDOTAYIM reduce using rule 287 (fully_qualified_class_name) - $default reduce using rule 317 (scalar) + T_PAAMAYIM_NEKUDOTAYIM reduce using rule 285 (fully_qualified_class_name) + $default reduce using rule 315 (scalar) state 32 - 318 scalar: T_STRING_VARNAME . + 316 scalar: T_STRING_VARNAME . - $default reduce using rule 318 (scalar) + $default reduce using rule 316 (scalar) state 33 - 361 compound_variable: T_VARIABLE . + 359 compound_variable: T_VARIABLE . - $default reduce using rule 361 (compound_variable) + $default reduce using rule 359 (compound_variable) state 34 @@ -2619,9 +2611,9 @@ state 34 state 35 - 304 common_scalar: T_CONSTANT_ENCAPSED_STRING . + 302 common_scalar: T_CONSTANT_ENCAPSED_STRING . - $default reduce using rule 304 (common_scalar) + $default reduce using rule 302 (common_scalar) state 36 @@ -2719,19 +2711,19 @@ state 39 state 40 - 53 unticked_statement: T_FOREACH . '(' variable @15 T_AS @16 foreach_variable foreach_optional_arg ')' @17 foreach_statement - 57 | T_FOREACH . '(' expr_without_variable @18 T_AS @19 variable foreach_optional_arg ')' @20 foreach_statement + 52 unticked_statement: T_FOREACH . '(' variable T_AS @15 foreach_variable foreach_optional_arg ')' @16 foreach_statement + 55 | T_FOREACH . '(' expr_without_variable T_AS @17 variable foreach_optional_arg ')' @18 foreach_statement '(' shift, and go to state 142 state 41 - 59 unticked_statement: T_DECLARE . @21 '(' declare_list ')' declare_statement + 57 unticked_statement: T_DECLARE . @19 '(' declare_list ')' declare_statement - $default reduce using rule 58 (@21) + $default reduce using rule 56 (@19) - @21 go to state 143 + @19 go to state 143 state 42 @@ -2885,11 +2877,11 @@ state 44 state 45 - 86 unticked_function_declaration_statement: T_FUNCTION . @29 is_reference T_STRING @30 '(' parameter_list ')' '{' inner_statement_list '}' + 84 unticked_function_declaration_statement: T_FUNCTION . @27 is_reference T_STRING @28 '(' parameter_list ')' '{' inner_statement_list '}' - $default reduce using rule 84 (@29) + $default reduce using rule 82 (@27) - @29 go to state 149 + @27 go to state 149 state 46 @@ -2966,16 +2958,16 @@ state 46 state 47 - 66 unticked_statement: T_TRY . @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY . @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches - $default reduce using rule 61 (@22) + $default reduce using rule 59 (@20) - @22 go to state 154 + @20 go to state 154 state 48 - 67 unticked_statement: T_THROW . expr ';' + 65 unticked_statement: T_THROW . expr ';' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -3065,14 +3057,14 @@ state 50 state 51 - 93 class_entry_type: T_FINAL . T_CLASS + 91 class_entry_type: T_FINAL . T_CLASS T_CLASS shift, and go to state 163 state 52 - 92 class_entry_type: T_ABSTRACT . T_CLASS + 90 class_entry_type: T_ABSTRACT . T_CLASS T_CLASS shift, and go to state 164 @@ -3095,14 +3087,14 @@ state 54 state 55 - 413 internal_functions_in_yacc: T_ISSET . '(' isset_variables ')' + 411 internal_functions_in_yacc: T_ISSET . '(' isset_variables ')' '(' shift, and go to state 168 state 56 - 414 internal_functions_in_yacc: T_EMPTY . '(' variable ')' + 412 internal_functions_in_yacc: T_EMPTY . '(' variable ')' '(' shift, and go to state 169 @@ -3116,79 +3108,79 @@ state 57 state 58 - 91 class_entry_type: T_CLASS . + 89 class_entry_type: T_CLASS . - $default reduce using rule 91 (class_entry_type) + $default reduce using rule 89 (class_entry_type) state 59 - 96 interface_entry: T_INTERFACE . + 94 interface_entry: T_INTERFACE . - $default reduce using rule 96 (interface_entry) + $default reduce using rule 94 (interface_entry) state 60 - 204 expr_without_variable: T_LIST . '(' @41 assignment_list ')' '=' expr + 202 expr_without_variable: T_LIST . '(' @39 assignment_list ')' '=' expr '(' shift, and go to state 171 state 61 - 276 expr_without_variable: T_ARRAY . '(' array_pair_list ')' + 274 expr_without_variable: T_ARRAY . '(' array_pair_list ')' '(' shift, and go to state 172 state 62 - 307 common_scalar: T_CLASS_C . + 305 common_scalar: T_CLASS_C . - $default reduce using rule 307 (common_scalar) + $default reduce using rule 305 (common_scalar) state 63 - 308 common_scalar: T_METHOD_C . + 306 common_scalar: T_METHOD_C . - $default reduce using rule 308 (common_scalar) + $default reduce using rule 306 (common_scalar) state 64 - 309 common_scalar: T_FUNC_C . + 307 common_scalar: T_FUNC_C . - $default reduce using rule 309 (common_scalar) + $default reduce using rule 307 (common_scalar) state 65 - 305 common_scalar: T_LINE . + 303 common_scalar: T_LINE . - $default reduce using rule 305 (common_scalar) + $default reduce using rule 303 (common_scalar) state 66 - 306 common_scalar: T_FILE . + 304 common_scalar: T_FILE . - $default reduce using rule 306 (common_scalar) + $default reduce using rule 304 (common_scalar) state 67 - 323 scalar: T_START_HEREDOC . encaps_list T_END_HEREDOC + 321 scalar: T_START_HEREDOC . encaps_list T_END_HEREDOC - $default reduce using rule 402 (encaps_list) + $default reduce using rule 400 (encaps_list) encaps_list go to state 173 state 68 - 260 expr_without_variable: '(' . expr ')' + 258 expr_without_variable: '(' . expr ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -3257,9 +3249,9 @@ state 68 state 69 - 60 unticked_statement: ';' . + 58 unticked_statement: ';' . - $default reduce using rule 60 (unticked_statement) + $default reduce using rule 58 (unticked_statement) state 70 @@ -3273,37 +3265,37 @@ state 70 state 71 - 362 compound_variable: '$' . '{' expr '}' - 373 simple_indirect_reference: '$' . + 360 compound_variable: '$' . '{' expr '}' + 371 simple_indirect_reference: '$' . '{' shift, and go to state 176 - $default reduce using rule 373 (simple_indirect_reference) + $default reduce using rule 371 (simple_indirect_reference) state 72 - 277 expr_without_variable: '`' . encaps_list '`' + 275 expr_without_variable: '`' . encaps_list '`' - $default reduce using rule 402 (encaps_list) + $default reduce using rule 400 (encaps_list) encaps_list go to state 177 state 73 - 321 scalar: '"' . encaps_list '"' + 319 scalar: '"' . encaps_list '"' - $default reduce using rule 402 (encaps_list) + $default reduce using rule 400 (encaps_list) encaps_list go to state 178 state 74 - 322 scalar: ''' . encaps_list ''' + 320 scalar: ''' . encaps_list ''' - $default reduce using rule 402 (encaps_list) + $default reduce using rule 400 (encaps_list) encaps_list go to state 179 @@ -3345,99 +3337,99 @@ state 79 state 80 - 80 function_declaration_statement: unticked_function_declaration_statement . + 78 function_declaration_statement: unticked_function_declaration_statement . - $default reduce using rule 80 (function_declaration_statement) + $default reduce using rule 78 (function_declaration_statement) state 81 - 81 class_declaration_statement: unticked_class_declaration_statement . + 79 class_declaration_statement: unticked_class_declaration_statement . - $default reduce using rule 81 (class_declaration_statement) + $default reduce using rule 79 (class_declaration_statement) state 82 - 88 unticked_class_declaration_statement: class_entry_type . T_STRING extends_from @31 implements_list '{' class_statement_list '}' + 86 unticked_class_declaration_statement: class_entry_type . T_STRING extends_from @29 implements_list '{' class_statement_list '}' T_STRING shift, and go to state 180 state 83 - 90 unticked_class_declaration_statement: interface_entry . T_STRING @32 interface_extends_list '{' class_statement_list '}' + 88 unticked_class_declaration_statement: interface_entry . T_STRING @30 interface_extends_list '{' class_statement_list '}' T_STRING shift, and go to state 181 state 84 - 333 expr: expr_without_variable . + 331 expr: expr_without_variable . - $default reduce using rule 333 (expr) + $default reduce using rule 331 (expr) state 85 - 354 base_variable_with_function_calls: function_call . + 352 base_variable_with_function_calls: function_call . - $default reduce using rule 354 (base_variable_with_function_calls) + $default reduce using rule 352 (base_variable_with_function_calls) state 86 - 282 function_call: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @52 function_call_parameter_list ')' - 284 | fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @53 function_call_parameter_list ')' - 352 static_member: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects - 423 class_constant: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM T_STRING + 280 function_call: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @50 function_call_parameter_list ')' + 282 | fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @51 function_call_parameter_list ')' + 350 static_member: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects + 421 class_constant: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM shift, and go to state 182 state 87 - 320 scalar: common_scalar . + 318 scalar: common_scalar . - $default reduce using rule 320 (scalar) + $default reduce using rule 318 (scalar) state 88 - 275 expr_without_variable: scalar . + 273 expr_without_variable: scalar . - $default reduce using rule 275 (expr_without_variable) + $default reduce using rule 273 (expr_without_variable) state 89 47 unticked_statement: expr . ';' - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -3470,15 +3462,15 @@ state 89 state 90 - 332 expr: r_variable . + 330 expr: r_variable . - $default reduce using rule 332 (expr) + $default reduce using rule 330 (expr) state 91 - 223 expr_without_variable: rw_variable . T_INC - 225 | rw_variable . T_DEC + 221 expr_without_variable: rw_variable . T_INC + 223 | rw_variable . T_DEC T_DEC shift, and go to state 210 T_INC shift, and go to state 211 @@ -3486,22 +3478,22 @@ state 91 state 92 - 205 expr_without_variable: variable . '=' expr - 206 | variable . '=' '&' variable - 208 | variable . '=' '&' T_NEW class_name_reference @42 ctor_arguments - 212 | variable . T_PLUS_EQUAL expr - 213 | variable . T_MINUS_EQUAL expr - 214 | variable . T_MUL_EQUAL expr - 215 | variable . T_DIV_EQUAL expr - 216 | variable . T_CONCAT_EQUAL expr - 217 | variable . T_MOD_EQUAL expr - 218 | variable . T_AND_EQUAL expr - 219 | variable . T_OR_EQUAL expr - 220 | variable . T_XOR_EQUAL expr - 221 | variable . T_SL_EQUAL expr - 222 | variable . T_SR_EQUAL expr - 334 r_variable: variable . - 338 rw_variable: variable . @58 + 203 expr_without_variable: variable . '=' expr + 204 | variable . '=' '&' variable + 206 | variable . '=' '&' T_NEW class_name_reference @40 ctor_arguments + 210 | variable . T_PLUS_EQUAL expr + 211 | variable . T_MINUS_EQUAL expr + 212 | variable . T_MUL_EQUAL expr + 213 | variable . T_DIV_EQUAL expr + 214 | variable . T_CONCAT_EQUAL expr + 215 | variable . T_MOD_EQUAL expr + 216 | variable . T_AND_EQUAL expr + 217 | variable . T_OR_EQUAL expr + 218 | variable . T_XOR_EQUAL expr + 219 | variable . T_SL_EQUAL expr + 220 | variable . T_SR_EQUAL expr + 332 r_variable: variable . + 336 rw_variable: variable . @56 '=' shift, and go to state 212 T_SR_EQUAL shift, and go to state 213 @@ -3516,70 +3508,70 @@ state 92 T_MINUS_EQUAL shift, and go to state 222 T_PLUS_EQUAL shift, and go to state 223 - T_DEC reduce using rule 337 (@58) - T_INC reduce using rule 337 (@58) - $default reduce using rule 334 (r_variable) + T_DEC reduce using rule 335 (@56) + T_INC reduce using rule 335 (@56) + $default reduce using rule 332 (r_variable) - @58 go to state 224 + @56 go to state 224 state 93 - 286 function_call: variable_without_objects . '(' @54 function_call_parameter_list ')' + 284 function_call: variable_without_objects . '(' @52 function_call_parameter_list ')' '(' shift, and go to state 225 state 94 - 357 base_variable: static_member . + 355 base_variable: static_member . - $default reduce using rule 357 (base_variable) + $default reduce using rule 355 (base_variable) state 95 - 341 variable: base_variable_with_function_calls . T_OBJECT_OPERATOR @59 object_property @60 method_or_not variable_properties - 342 | base_variable_with_function_calls . + 339 variable: base_variable_with_function_calls . T_OBJECT_OPERATOR @57 object_property @58 method_or_not variable_properties + 340 | base_variable_with_function_calls . T_OBJECT_OPERATOR shift, and go to state 226 - $default reduce using rule 342 (variable) + $default reduce using rule 340 (variable) state 96 - 353 base_variable_with_function_calls: base_variable . + 351 base_variable_with_function_calls: base_variable . - $default reduce using rule 353 (base_variable_with_function_calls) + $default reduce using rule 351 (base_variable_with_function_calls) state 97 - 350 variable_without_objects: reference_variable . - 355 base_variable: reference_variable . - 358 reference_variable: reference_variable . '[' dim_offset ']' - 359 | reference_variable . '{' expr '}' + 348 variable_without_objects: reference_variable . + 353 base_variable: reference_variable . + 356 reference_variable: reference_variable . '[' dim_offset ']' + 357 | reference_variable . '{' expr '}' '[' shift, and go to state 227 '{' shift, and go to state 228 - '(' reduce using rule 350 (variable_without_objects) - $default reduce using rule 355 (base_variable) + '(' reduce using rule 348 (variable_without_objects) + $default reduce using rule 353 (base_variable) state 98 - 360 reference_variable: compound_variable . + 358 reference_variable: compound_variable . - $default reduce using rule 360 (reference_variable) + $default reduce using rule 358 (reference_variable) state 99 - 351 variable_without_objects: simple_indirect_reference . reference_variable - 356 base_variable: simple_indirect_reference . reference_variable - 374 simple_indirect_reference: simple_indirect_reference . '$' + 349 variable_without_objects: simple_indirect_reference . reference_variable + 354 base_variable: simple_indirect_reference . reference_variable + 372 simple_indirect_reference: simple_indirect_reference . '$' T_VARIABLE shift, and go to state 33 '$' shift, and go to state 229 @@ -3590,47 +3582,47 @@ state 99 state 100 - 264 expr_without_variable: internal_functions_in_yacc . + 262 expr_without_variable: internal_functions_in_yacc . - $default reduce using rule 264 (expr_without_variable) + $default reduce using rule 262 (expr_without_variable) state 101 - 319 scalar: class_constant . + 317 scalar: class_constant . - $default reduce using rule 319 (scalar) + $default reduce using rule 317 (scalar) state 102 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 419 internal_functions_in_yacc: T_REQUIRE_ONCE expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 417 internal_functions_in_yacc: T_REQUIRE_ONCE expr . T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -3659,38 +3651,38 @@ state 102 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 419 (internal_functions_in_yacc) + $default reduce using rule 417 (internal_functions_in_yacc) state 103 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 418 internal_functions_in_yacc: T_REQUIRE expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 416 internal_functions_in_yacc: T_REQUIRE expr . T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -3719,12 +3711,12 @@ state 103 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 418 (internal_functions_in_yacc) + $default reduce using rule 416 (internal_functions_in_yacc) state 104 - 417 internal_functions_in_yacc: T_EVAL '(' . expr ')' + 415 internal_functions_in_yacc: T_EVAL '(' . expr ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -3793,33 +3785,33 @@ state 104 state 105 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 416 internal_functions_in_yacc: T_INCLUDE_ONCE expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 414 internal_functions_in_yacc: T_INCLUDE_ONCE expr . T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -3848,38 +3840,38 @@ state 105 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 416 (internal_functions_in_yacc) + $default reduce using rule 414 (internal_functions_in_yacc) state 106 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 415 internal_functions_in_yacc: T_INCLUDE expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 413 internal_functions_in_yacc: T_INCLUDE expr . T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -3908,38 +3900,38 @@ state 106 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 415 (internal_functions_in_yacc) + $default reduce using rule 413 (internal_functions_in_yacc) state 107 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 278 | T_PRINT expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 276 | T_PRINT expr . '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -3965,156 +3957,156 @@ state 107 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 278 (expr_without_variable) + $default reduce using rule 276 (expr_without_variable) state 108 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 247 | '+' expr . - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 245 | '+' expr . + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '*' shift, and go to state 205 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 247 (expr_without_variable) + $default reduce using rule 245 (expr_without_variable) state 109 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 248 | '-' expr . - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 246 | '-' expr . + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '*' shift, and go to state 205 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 248 (expr_without_variable) + $default reduce using rule 246 (expr_without_variable) state 110 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 249 | '!' expr . - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 247 | '!' expr . + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 249 (expr_without_variable) + $default reduce using rule 247 (expr_without_variable) state 111 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 250 | '~' expr . - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 248 | '~' expr . + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr - $default reduce using rule 250 (expr_without_variable) + $default reduce using rule 248 (expr_without_variable) state 112 - 274 expr_without_variable: '@' @50 . expr + 272 expr_without_variable: '@' @48 . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -4183,368 +4175,368 @@ state 112 state 113 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 271 | T_UNSET_CAST expr . - - $default reduce using rule 271 (expr_without_variable) + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 269 | T_UNSET_CAST expr . + + $default reduce using rule 269 (expr_without_variable) state 114 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 270 | T_BOOL_CAST expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 268 | T_BOOL_CAST expr . - $default reduce using rule 270 (expr_without_variable) + $default reduce using rule 268 (expr_without_variable) state 115 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 269 | T_OBJECT_CAST expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 267 | T_OBJECT_CAST expr . - $default reduce using rule 269 (expr_without_variable) + $default reduce using rule 267 (expr_without_variable) state 116 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 268 | T_ARRAY_CAST expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 266 | T_ARRAY_CAST expr . - $default reduce using rule 268 (expr_without_variable) + $default reduce using rule 266 (expr_without_variable) state 117 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 267 | T_STRING_CAST expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 265 | T_STRING_CAST expr . - $default reduce using rule 267 (expr_without_variable) + $default reduce using rule 265 (expr_without_variable) state 118 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 266 | T_DOUBLE_CAST expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 264 | T_DOUBLE_CAST expr . - $default reduce using rule 266 (expr_without_variable) + $default reduce using rule 264 (expr_without_variable) state 119 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 265 | T_INT_CAST expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 263 | T_INT_CAST expr . - $default reduce using rule 265 (expr_without_variable) + $default reduce using rule 263 (expr_without_variable) state 120 - 280 function_call: T_STRING . '(' @51 function_call_parameter_list ')' - 287 fully_qualified_class_name: T_STRING . + 278 function_call: T_STRING . '(' @49 function_call_parameter_list ')' + 285 fully_qualified_class_name: T_STRING . '(' shift, and go to state 136 - $default reduce using rule 287 (fully_qualified_class_name) + $default reduce using rule 285 (fully_qualified_class_name) state 121 - 282 function_call: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @52 function_call_parameter_list ')' - 284 | fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @53 function_call_parameter_list ')' - 352 static_member: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects + 280 function_call: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @50 function_call_parameter_list ')' + 282 | fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @51 function_call_parameter_list ')' + 350 static_member: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects T_PAAMAYIM_NEKUDOTAYIM shift, and go to state 233 state 122 - 226 expr_without_variable: T_DEC rw_variable . + 224 expr_without_variable: T_DEC rw_variable . - $default reduce using rule 226 (expr_without_variable) + $default reduce using rule 224 (expr_without_variable) state 123 - 338 rw_variable: variable . @58 + 336 rw_variable: variable . @56 - $default reduce using rule 337 (@58) + $default reduce using rule 335 (@56) - @58 go to state 224 + @56 go to state 224 state 124 - 224 expr_without_variable: T_INC rw_variable . + 222 expr_without_variable: T_INC rw_variable . - $default reduce using rule 224 (expr_without_variable) + $default reduce using rule 222 (expr_without_variable) state 125 - 211 expr_without_variable: T_CLONE expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - - $default reduce using rule 211 (expr_without_variable) + 209 expr_without_variable: T_CLONE expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + + $default reduce using rule 209 (expr_without_variable) state 126 - 287 fully_qualified_class_name: T_STRING . - 288 class_name_reference: T_STRING . + 285 fully_qualified_class_name: T_STRING . + 286 class_name_reference: T_STRING . - T_PAAMAYIM_NEKUDOTAYIM reduce using rule 287 (fully_qualified_class_name) - $default reduce using rule 288 (class_name_reference) + T_PAAMAYIM_NEKUDOTAYIM reduce using rule 285 (fully_qualified_class_name) + $default reduce using rule 286 (class_name_reference) state 127 - 352 static_member: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects + 350 static_member: fully_qualified_class_name . T_PAAMAYIM_NEKUDOTAYIM variable_without_objects T_PAAMAYIM_NEKUDOTAYIM shift, and go to state 234 state 128 - 210 expr_without_variable: T_NEW class_name_reference . @43 ctor_arguments + 208 expr_without_variable: T_NEW class_name_reference . @41 ctor_arguments - $default reduce using rule 209 (@43) + $default reduce using rule 207 (@41) - @43 go to state 235 + @41 go to state 235 state 129 - 289 class_name_reference: dynamic_class_name_reference . + 287 class_name_reference: dynamic_class_name_reference . - $default reduce using rule 289 (class_name_reference) + $default reduce using rule 287 (class_name_reference) state 130 - 292 dynamic_class_name_reference: base_variable . T_OBJECT_OPERATOR @55 object_property @56 dynamic_class_name_variable_properties - 293 | base_variable . + 290 dynamic_class_name_reference: base_variable . T_OBJECT_OPERATOR @53 object_property @54 dynamic_class_name_variable_properties + 291 | base_variable . T_OBJECT_OPERATOR shift, and go to state 236 - $default reduce using rule 293 (dynamic_class_name_reference) + $default reduce using rule 291 (dynamic_class_name_reference) state 131 - 355 base_variable: reference_variable . - 358 reference_variable: reference_variable . '[' dim_offset ']' - 359 | reference_variable . '{' expr '}' + 353 base_variable: reference_variable . + 356 reference_variable: reference_variable . '[' dim_offset ']' + 357 | reference_variable . '{' expr '}' '[' shift, and go to state 227 '{' shift, and go to state 228 - $default reduce using rule 355 (base_variable) + $default reduce using rule 353 (base_variable) state 132 - 356 base_variable: simple_indirect_reference . reference_variable - 374 simple_indirect_reference: simple_indirect_reference . '$' + 354 base_variable: simple_indirect_reference . reference_variable + 372 simple_indirect_reference: simple_indirect_reference . '$' T_VARIABLE shift, and go to state 33 '$' shift, and go to state 229 @@ -4555,8 +4547,8 @@ state 132 state 133 - 298 exit_expr: '(' . ')' - 299 | '(' . expr ')' + 296 exit_expr: '(' . ')' + 297 | '(' . expr ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -4626,9 +4618,9 @@ state 133 state 134 - 272 expr_without_variable: T_EXIT exit_expr . + 270 expr_without_variable: T_EXIT exit_expr . - $default reduce using rule 272 (expr_without_variable) + $default reduce using rule 270 (expr_without_variable) state 135 @@ -4703,17 +4695,17 @@ state 135 state 136 - 280 function_call: T_STRING '(' . @51 function_call_parameter_list ')' + 278 function_call: T_STRING '(' . @49 function_call_parameter_list ')' - $default reduce using rule 279 (@51) + $default reduce using rule 277 (@49) - @51 go to state 241 + @49 go to state 241 state 137 45 unticked_statement: T_ECHO echo_expr_list . ';' - 196 echo_expr_list: echo_expr_list . ',' expr + 194 echo_expr_list: echo_expr_list . ',' expr ',' shift, and go to state 242 ';' shift, and go to state 243 @@ -4721,33 +4713,33 @@ state 137 state 138 - 197 echo_expr_list: expr . - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 195 echo_expr_list: expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -4776,7 +4768,7 @@ state 138 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 197 (echo_expr_list) + $default reduce using rule 195 (echo_expr_list) state 139 @@ -4928,7 +4920,7 @@ state 141 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 198 (for_expr) + $default reduce using rule 196 (for_expr) for_expr go to state 246 non_empty_for_expr go to state 247 @@ -4954,8 +4946,8 @@ state 141 state 142 - 53 unticked_statement: T_FOREACH '(' . variable @15 T_AS @16 foreach_variable foreach_optional_arg ')' @17 foreach_statement - 57 | T_FOREACH '(' . expr_without_variable @18 T_AS @19 variable foreach_optional_arg ')' @20 foreach_statement + 52 unticked_statement: T_FOREACH '(' . variable T_AS @15 foreach_variable foreach_optional_arg ')' @16 foreach_statement + 55 | T_FOREACH '(' . expr_without_variable T_AS @17 variable foreach_optional_arg ')' @18 foreach_statement T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -5024,7 +5016,7 @@ state 142 state 143 - 59 unticked_statement: T_DECLARE @21 . '(' declare_list ')' declare_statement + 57 unticked_statement: T_DECLARE @19 . '(' declare_list ')' declare_statement '(' shift, and go to state 251 @@ -5108,32 +5100,32 @@ state 145 state 146 37 unticked_statement: T_BREAK expr . ';' - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -5174,32 +5166,32 @@ state 147 state 148 39 unticked_statement: T_CONTINUE expr . ';' - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -5232,11 +5224,11 @@ state 148 state 149 - 86 unticked_function_declaration_statement: T_FUNCTION @29 . is_reference T_STRING @30 '(' parameter_list ')' '{' inner_statement_list '}' + 84 unticked_function_declaration_statement: T_FUNCTION @27 . is_reference T_STRING @28 '(' parameter_list ')' '{' inner_statement_list '}' '&' shift, and go to state 255 - $default reduce using rule 82 (is_reference) + $default reduce using rule 80 (is_reference) is_reference go to state 256 @@ -5251,41 +5243,41 @@ state 150 state 151 41 unticked_statement: T_RETURN expr_without_variable . ';' - 333 expr: expr_without_variable . + 331 expr: expr_without_variable . ';' shift, and go to state 257 - $default reduce using rule 333 (expr) + $default reduce using rule 331 (expr) state 152 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -5318,22 +5310,22 @@ state 152 state 153 42 unticked_statement: T_RETURN variable . ';' - 205 expr_without_variable: variable . '=' expr - 206 | variable . '=' '&' variable - 208 | variable . '=' '&' T_NEW class_name_reference @42 ctor_arguments - 212 | variable . T_PLUS_EQUAL expr - 213 | variable . T_MINUS_EQUAL expr - 214 | variable . T_MUL_EQUAL expr - 215 | variable . T_DIV_EQUAL expr - 216 | variable . T_CONCAT_EQUAL expr - 217 | variable . T_MOD_EQUAL expr - 218 | variable . T_AND_EQUAL expr - 219 | variable . T_OR_EQUAL expr - 220 | variable . T_XOR_EQUAL expr - 221 | variable . T_SL_EQUAL expr - 222 | variable . T_SR_EQUAL expr - 334 r_variable: variable . - 338 rw_variable: variable . @58 + 203 expr_without_variable: variable . '=' expr + 204 | variable . '=' '&' variable + 206 | variable . '=' '&' T_NEW class_name_reference @40 ctor_arguments + 210 | variable . T_PLUS_EQUAL expr + 211 | variable . T_MINUS_EQUAL expr + 212 | variable . T_MUL_EQUAL expr + 213 | variable . T_DIV_EQUAL expr + 214 | variable . T_CONCAT_EQUAL expr + 215 | variable . T_MOD_EQUAL expr + 216 | variable . T_AND_EQUAL expr + 217 | variable . T_OR_EQUAL expr + 218 | variable . T_XOR_EQUAL expr + 219 | variable . T_SL_EQUAL expr + 220 | variable . T_SR_EQUAL expr + 332 r_variable: variable . + 336 rw_variable: variable . @56 '=' shift, and go to state 212 T_SR_EQUAL shift, and go to state 213 @@ -5349,49 +5341,49 @@ state 153 T_PLUS_EQUAL shift, and go to state 223 ';' shift, and go to state 258 - T_DEC reduce using rule 337 (@58) - T_INC reduce using rule 337 (@58) - $default reduce using rule 334 (r_variable) + T_DEC reduce using rule 335 (@56) + T_INC reduce using rule 335 (@56) + $default reduce using rule 332 (r_variable) - @58 go to state 224 + @56 go to state 224 state 154 - 66 unticked_statement: T_TRY @22 . '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY @20 . '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches '{' shift, and go to state 259 state 155 - 67 unticked_statement: T_THROW expr . ';' - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 65 unticked_statement: T_THROW expr . ';' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -5424,14 +5416,14 @@ state 155 state 156 - 78 use_filename: T_CONSTANT_ENCAPSED_STRING . + 76 use_filename: T_CONSTANT_ENCAPSED_STRING . - $default reduce using rule 78 (use_filename) + $default reduce using rule 76 (use_filename) state 157 - 79 use_filename: '(' . T_CONSTANT_ENCAPSED_STRING ')' + 77 use_filename: '(' . T_CONSTANT_ENCAPSED_STRING ')' T_CONSTANT_ENCAPSED_STRING shift, and go to state 261 @@ -5445,15 +5437,15 @@ state 158 state 159 - 161 global_var: T_VARIABLE . + 159 global_var: T_VARIABLE . - $default reduce using rule 161 (global_var) + $default reduce using rule 159 (global_var) state 160 - 162 global_var: '$' . r_variable - 163 | '$' . '{' expr '}' + 160 global_var: '$' . r_variable + 161 | '$' . '{' expr '}' T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -5476,7 +5468,7 @@ state 160 state 161 43 unticked_statement: T_GLOBAL global_var_list . ';' - 159 global_var_list: global_var_list . ',' global_var + 157 global_var_list: global_var_list . ',' global_var ',' shift, and go to state 266 ';' shift, and go to state 267 @@ -5484,40 +5476,40 @@ state 161 state 162 - 160 global_var_list: global_var . + 158 global_var_list: global_var . - $default reduce using rule 160 (global_var_list) + $default reduce using rule 158 (global_var_list) state 163 - 93 class_entry_type: T_FINAL T_CLASS . + 91 class_entry_type: T_FINAL T_CLASS . - $default reduce using rule 93 (class_entry_type) + $default reduce using rule 91 (class_entry_type) state 164 - 92 class_entry_type: T_ABSTRACT T_CLASS . + 90 class_entry_type: T_ABSTRACT T_CLASS . - $default reduce using rule 92 (class_entry_type) + $default reduce using rule 90 (class_entry_type) state 165 - 166 static_var_list: T_VARIABLE . - 167 | T_VARIABLE . '=' static_scalar + 164 static_var_list: T_VARIABLE . + 165 | T_VARIABLE . '=' static_scalar '=' shift, and go to state 268 - $default reduce using rule 166 (static_var_list) + $default reduce using rule 164 (static_var_list) state 166 44 unticked_statement: T_STATIC static_var_list . ';' - 164 static_var_list: static_var_list . ',' T_VARIABLE - 165 | static_var_list . ',' T_VARIABLE '=' static_scalar + 162 static_var_list: static_var_list . ',' T_VARIABLE + 163 | static_var_list . ',' T_VARIABLE '=' static_scalar ',' shift, and go to state 269 ';' shift, and go to state 270 @@ -5547,7 +5539,7 @@ state 167 state 168 - 413 internal_functions_in_yacc: T_ISSET '(' . isset_variables ')' + 411 internal_functions_in_yacc: T_ISSET '(' . isset_variables ')' T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -5568,7 +5560,7 @@ state 168 state 169 - 414 internal_functions_in_yacc: T_EMPTY '(' . variable ')' + 412 internal_functions_in_yacc: T_EMPTY '(' . variable ')' T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -5595,16 +5587,16 @@ state 170 state 171 - 204 expr_without_variable: T_LIST '(' . @41 assignment_list ')' '=' expr + 202 expr_without_variable: T_LIST '(' . @39 assignment_list ')' '=' expr - $default reduce using rule 203 (@41) + $default reduce using rule 201 (@39) - @41 go to state 278 + @39 go to state 278 state 172 - 276 expr_without_variable: T_ARRAY '(' . array_pair_list ')' + 274 expr_without_variable: T_ARRAY '(' . array_pair_list ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -5652,7 +5644,7 @@ state 172 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 381 (array_pair_list) + $default reduce using rule 379 (array_pair_list) expr_without_variable go to state 84 function_call go to state 85 @@ -5678,18 +5670,18 @@ state 172 state 173 - 323 scalar: T_START_HEREDOC encaps_list . T_END_HEREDOC - 391 encaps_list: encaps_list . encaps_var - 392 | encaps_list . T_STRING - 393 | encaps_list . T_NUM_STRING - 394 | encaps_list . T_ENCAPSED_AND_WHITESPACE - 395 | encaps_list . T_CHARACTER - 396 | encaps_list . T_BAD_CHARACTER - 397 | encaps_list . '[' - 398 | encaps_list . ']' - 399 | encaps_list . '{' - 400 | encaps_list . '}' - 401 | encaps_list . T_OBJECT_OPERATOR + 321 scalar: T_START_HEREDOC encaps_list . T_END_HEREDOC + 389 encaps_list: encaps_list . encaps_var + 390 | encaps_list . T_STRING + 391 | encaps_list . T_NUM_STRING + 392 | encaps_list . T_ENCAPSED_AND_WHITESPACE + 393 | encaps_list . T_CHARACTER + 394 | encaps_list . T_BAD_CHARACTER + 395 | encaps_list . '[' + 396 | encaps_list . ']' + 397 | encaps_list . '{' + 398 | encaps_list . '}' + 399 | encaps_list . T_OBJECT_OPERATOR '[' shift, and go to state 283 T_STRING shift, and go to state 284 @@ -5711,33 +5703,33 @@ state 173 state 174 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 260 | '(' expr . ')' - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 258 | '(' expr . ')' + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -5782,7 +5774,7 @@ state 175 state 176 - 362 compound_variable: '$' '{' . expr '}' + 360 compound_variable: '$' '{' . expr '}' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -5851,18 +5843,18 @@ state 176 state 177 - 277 expr_without_variable: '`' encaps_list . '`' - 391 encaps_list: encaps_list . encaps_var - 392 | encaps_list . T_STRING - 393 | encaps_list . T_NUM_STRING - 394 | encaps_list . T_ENCAPSED_AND_WHITESPACE - 395 | encaps_list . T_CHARACTER - 396 | encaps_list . T_BAD_CHARACTER - 397 | encaps_list . '[' - 398 | encaps_list . ']' - 399 | encaps_list . '{' - 400 | encaps_list . '}' - 401 | encaps_list . T_OBJECT_OPERATOR + 275 expr_without_variable: '`' encaps_list . '`' + 389 encaps_list: encaps_list . encaps_var + 390 | encaps_list . T_STRING + 391 | encaps_list . T_NUM_STRING + 392 | encaps_list . T_ENCAPSED_AND_WHITESPACE + 393 | encaps_list . T_CHARACTER + 394 | encaps_list . T_BAD_CHARACTER + 395 | encaps_list . '[' + 396 | encaps_list . ']' + 397 | encaps_list . '{' + 398 | encaps_list . '}' + 399 | encaps_list . T_OBJECT_OPERATOR '[' shift, and go to state 283 T_STRING shift, and go to state 284 @@ -5884,18 +5876,18 @@ state 177 state 178 - 321 scalar: '"' encaps_list . '"' - 391 encaps_list: encaps_list . encaps_var - 392 | encaps_list . T_STRING - 393 | encaps_list . T_NUM_STRING - 394 | encaps_list . T_ENCAPSED_AND_WHITESPACE - 395 | encaps_list . T_CHARACTER - 396 | encaps_list . T_BAD_CHARACTER - 397 | encaps_list . '[' - 398 | encaps_list . ']' - 399 | encaps_list . '{' - 400 | encaps_list . '}' - 401 | encaps_list . T_OBJECT_OPERATOR + 319 scalar: '"' encaps_list . '"' + 389 encaps_list: encaps_list . encaps_var + 390 | encaps_list . T_STRING + 391 | encaps_list . T_NUM_STRING + 392 | encaps_list . T_ENCAPSED_AND_WHITESPACE + 393 | encaps_list . T_CHARACTER + 394 | encaps_list . T_BAD_CHARACTER + 395 | encaps_list . '[' + 396 | encaps_list . ']' + 397 | encaps_list . '{' + 398 | encaps_list . '}' + 399 | encaps_list . T_OBJECT_OPERATOR '[' shift, and go to state 283 T_STRING shift, and go to state 284 @@ -5917,18 +5909,18 @@ state 178 state 179 - 322 scalar: ''' encaps_list . ''' - 391 encaps_list: encaps_list . encaps_var - 392 | encaps_list . T_STRING - 393 | encaps_list . T_NUM_STRING - 394 | encaps_list . T_ENCAPSED_AND_WHITESPACE - 395 | encaps_list . T_CHARACTER - 396 | encaps_list . T_BAD_CHARACTER - 397 | encaps_list . '[' - 398 | encaps_list . ']' - 399 | encaps_list . '{' - 400 | encaps_list . '}' - 401 | encaps_list . T_OBJECT_OPERATOR + 320 scalar: ''' encaps_list . ''' + 389 encaps_list: encaps_list . encaps_var + 390 | encaps_list . T_STRING + 391 | encaps_list . T_NUM_STRING + 392 | encaps_list . T_ENCAPSED_AND_WHITESPACE + 393 | encaps_list . T_CHARACTER + 394 | encaps_list . T_BAD_CHARACTER + 395 | encaps_list . '[' + 396 | encaps_list . ']' + 397 | encaps_list . '{' + 398 | encaps_list . '}' + 399 | encaps_list . T_OBJECT_OPERATOR '[' shift, and go to state 283 T_STRING shift, and go to state 284 @@ -5950,30 +5942,30 @@ state 179 state 180 - 88 unticked_class_declaration_statement: class_entry_type T_STRING . extends_from @31 implements_list '{' class_statement_list '}' + 86 unticked_class_declaration_statement: class_entry_type T_STRING . extends_from @29 implements_list '{' class_statement_list '}' T_EXTENDS shift, and go to state 305 - $default reduce using rule 94 (extends_from) + $default reduce using rule 92 (extends_from) extends_from go to state 306 state 181 - 90 unticked_class_declaration_statement: interface_entry T_STRING . @32 interface_extends_list '{' class_statement_list '}' + 88 unticked_class_declaration_statement: interface_entry T_STRING . @30 interface_extends_list '{' class_statement_list '}' - $default reduce using rule 89 (@32) + $default reduce using rule 87 (@30) - @32 go to state 307 + @30 go to state 307 state 182 - 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . T_STRING '(' @52 function_call_parameter_list ')' - 284 | fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects '(' @53 function_call_parameter_list ')' - 352 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects - 423 class_constant: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . T_STRING + 280 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . T_STRING '(' @50 function_call_parameter_list ')' + 282 | fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects '(' @51 function_call_parameter_list ')' + 350 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects + 421 class_constant: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . T_STRING T_STRING shift, and go to state 308 T_VARIABLE shift, and go to state 33 @@ -5987,16 +5979,16 @@ state 182 state 183 - 232 expr_without_variable: expr T_LOGICAL_OR . @46 expr + 230 expr_without_variable: expr T_LOGICAL_OR . @44 expr - $default reduce using rule 231 (@46) + $default reduce using rule 229 (@44) - @46 go to state 312 + @44 go to state 312 state 184 - 235 expr_without_variable: expr T_LOGICAL_XOR . expr + 233 expr_without_variable: expr T_LOGICAL_XOR . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6065,43 +6057,43 @@ state 184 state 185 - 234 expr_without_variable: expr T_LOGICAL_AND . @47 expr + 232 expr_without_variable: expr T_LOGICAL_AND . @45 expr - $default reduce using rule 233 (@47) + $default reduce using rule 231 (@45) - @47 go to state 314 + @45 go to state 314 state 186 - 263 expr_without_variable: expr '?' . @48 expr ':' @49 expr + 261 expr_without_variable: expr '?' . @46 expr ':' @47 expr - $default reduce using rule 261 (@48) + $default reduce using rule 259 (@46) - @48 go to state 315 + @46 go to state 315 state 187 - 228 expr_without_variable: expr T_BOOLEAN_OR . @44 expr + 226 expr_without_variable: expr T_BOOLEAN_OR . @42 expr - $default reduce using rule 227 (@44) + $default reduce using rule 225 (@42) - @44 go to state 316 + @42 go to state 316 state 188 - 230 expr_without_variable: expr T_BOOLEAN_AND . @45 expr + 228 expr_without_variable: expr T_BOOLEAN_AND . @43 expr - $default reduce using rule 229 (@45) + $default reduce using rule 227 (@43) - @45 go to state 317 + @43 go to state 317 state 189 - 236 expr_without_variable: expr '|' . expr + 234 expr_without_variable: expr '|' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6170,7 +6162,7 @@ state 189 state 190 - 238 expr_without_variable: expr '^' . expr + 236 expr_without_variable: expr '^' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6239,7 +6231,7 @@ state 190 state 191 - 237 expr_without_variable: expr '&' . expr + 235 expr_without_variable: expr '&' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6308,7 +6300,7 @@ state 191 state 192 - 252 expr_without_variable: expr T_IS_NOT_IDENTICAL . expr + 250 expr_without_variable: expr T_IS_NOT_IDENTICAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6377,7 +6369,7 @@ state 192 state 193 - 251 expr_without_variable: expr T_IS_IDENTICAL . expr + 249 expr_without_variable: expr T_IS_IDENTICAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6446,7 +6438,7 @@ state 193 state 194 - 254 expr_without_variable: expr T_IS_NOT_EQUAL . expr + 252 expr_without_variable: expr T_IS_NOT_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6515,7 +6507,7 @@ state 194 state 195 - 253 expr_without_variable: expr T_IS_EQUAL . expr + 251 expr_without_variable: expr T_IS_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6584,7 +6576,7 @@ state 195 state 196 - 255 expr_without_variable: expr '<' . expr + 253 expr_without_variable: expr '<' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6653,7 +6645,7 @@ state 196 state 197 - 257 expr_without_variable: expr '>' . expr + 255 expr_without_variable: expr '>' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6722,7 +6714,7 @@ state 197 state 198 - 258 expr_without_variable: expr T_IS_GREATER_OR_EQUAL . expr + 256 expr_without_variable: expr T_IS_GREATER_OR_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6791,7 +6783,7 @@ state 198 state 199 - 256 expr_without_variable: expr T_IS_SMALLER_OR_EQUAL . expr + 254 expr_without_variable: expr T_IS_SMALLER_OR_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6860,7 +6852,7 @@ state 199 state 200 - 246 expr_without_variable: expr T_SR . expr + 244 expr_without_variable: expr T_SR . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6929,7 +6921,7 @@ state 200 state 201 - 245 expr_without_variable: expr T_SL . expr + 243 expr_without_variable: expr T_SL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -6998,7 +6990,7 @@ state 201 state 202 - 240 expr_without_variable: expr '+' . expr + 238 expr_without_variable: expr '+' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7067,7 +7059,7 @@ state 202 state 203 - 241 expr_without_variable: expr '-' . expr + 239 expr_without_variable: expr '-' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7136,7 +7128,7 @@ state 203 state 204 - 239 expr_without_variable: expr '.' . expr + 237 expr_without_variable: expr '.' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7205,7 +7197,7 @@ state 204 state 205 - 242 expr_without_variable: expr '*' . expr + 240 expr_without_variable: expr '*' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7274,7 +7266,7 @@ state 205 state 206 - 243 expr_without_variable: expr '/' . expr + 241 expr_without_variable: expr '/' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7343,7 +7335,7 @@ state 206 state 207 - 244 expr_without_variable: expr '%' . expr + 242 expr_without_variable: expr '%' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7412,7 +7404,7 @@ state 207 state 208 - 259 expr_without_variable: expr T_INSTANCEOF . class_name_reference + 257 expr_without_variable: expr T_INSTANCEOF . class_name_reference T_STRING shift, and go to state 126 T_VARIABLE shift, and go to state 33 @@ -7437,23 +7429,23 @@ state 209 state 210 - 225 expr_without_variable: rw_variable T_DEC . + 223 expr_without_variable: rw_variable T_DEC . - $default reduce using rule 225 (expr_without_variable) + $default reduce using rule 223 (expr_without_variable) state 211 - 223 expr_without_variable: rw_variable T_INC . + 221 expr_without_variable: rw_variable T_INC . - $default reduce using rule 223 (expr_without_variable) + $default reduce using rule 221 (expr_without_variable) state 212 - 205 expr_without_variable: variable '=' . expr - 206 | variable '=' . '&' variable - 208 | variable '=' . '&' T_NEW class_name_reference @42 ctor_arguments + 203 expr_without_variable: variable '=' . expr + 204 | variable '=' . '&' variable + 206 | variable '=' . '&' T_NEW class_name_reference @40 ctor_arguments T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7523,7 +7515,7 @@ state 212 state 213 - 222 expr_without_variable: variable T_SR_EQUAL . expr + 220 expr_without_variable: variable T_SR_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7592,7 +7584,7 @@ state 213 state 214 - 221 expr_without_variable: variable T_SL_EQUAL . expr + 219 expr_without_variable: variable T_SL_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7661,7 +7653,7 @@ state 214 state 215 - 220 expr_without_variable: variable T_XOR_EQUAL . expr + 218 expr_without_variable: variable T_XOR_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7730,7 +7722,7 @@ state 215 state 216 - 219 expr_without_variable: variable T_OR_EQUAL . expr + 217 expr_without_variable: variable T_OR_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7799,7 +7791,7 @@ state 216 state 217 - 218 expr_without_variable: variable T_AND_EQUAL . expr + 216 expr_without_variable: variable T_AND_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7868,7 +7860,7 @@ state 217 state 218 - 217 expr_without_variable: variable T_MOD_EQUAL . expr + 215 expr_without_variable: variable T_MOD_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -7937,7 +7929,7 @@ state 218 state 219 - 216 expr_without_variable: variable T_CONCAT_EQUAL . expr + 214 expr_without_variable: variable T_CONCAT_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -8006,7 +7998,7 @@ state 219 state 220 - 215 expr_without_variable: variable T_DIV_EQUAL . expr + 213 expr_without_variable: variable T_DIV_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -8075,7 +8067,7 @@ state 220 state 221 - 214 expr_without_variable: variable T_MUL_EQUAL . expr + 212 expr_without_variable: variable T_MUL_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -8144,7 +8136,7 @@ state 221 state 222 - 213 expr_without_variable: variable T_MINUS_EQUAL . expr + 211 expr_without_variable: variable T_MINUS_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -8213,7 +8205,7 @@ state 222 state 223 - 212 expr_without_variable: variable T_PLUS_EQUAL . expr + 210 expr_without_variable: variable T_PLUS_EQUAL . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -8282,32 +8274,32 @@ state 223 state 224 - 338 rw_variable: variable @58 . + 336 rw_variable: variable @56 . - $default reduce using rule 338 (rw_variable) + $default reduce using rule 336 (rw_variable) state 225 - 286 function_call: variable_without_objects '(' . @54 function_call_parameter_list ')' + 284 function_call: variable_without_objects '(' . @52 function_call_parameter_list ')' - $default reduce using rule 285 (@54) + $default reduce using rule 283 (@52) - @54 go to state 351 + @52 go to state 351 state 226 - 341 variable: base_variable_with_function_calls T_OBJECT_OPERATOR . @59 object_property @60 method_or_not variable_properties + 339 variable: base_variable_with_function_calls T_OBJECT_OPERATOR . @57 object_property @58 method_or_not variable_properties - $default reduce using rule 339 (@59) + $default reduce using rule 337 (@57) - @59 go to state 352 + @57 go to state 352 state 227 - 358 reference_variable: reference_variable '[' . dim_offset ']' + 356 reference_variable: reference_variable '[' . dim_offset ']' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -8354,7 +8346,7 @@ state 227 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 363 (dim_offset) + $default reduce using rule 361 (dim_offset) expr_without_variable go to state 84 function_call go to state 85 @@ -8379,7 +8371,7 @@ state 227 state 228 - 359 reference_variable: reference_variable '{' . expr '}' + 357 reference_variable: reference_variable '{' . expr '}' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -8448,57 +8440,57 @@ state 228 state 229 - 362 compound_variable: '$' . '{' expr '}' - 374 simple_indirect_reference: simple_indirect_reference '$' . + 360 compound_variable: '$' . '{' expr '}' + 372 simple_indirect_reference: simple_indirect_reference '$' . '{' shift, and go to state 176 - $default reduce using rule 374 (simple_indirect_reference) + $default reduce using rule 372 (simple_indirect_reference) state 230 - 351 variable_without_objects: simple_indirect_reference reference_variable . - 356 base_variable: simple_indirect_reference reference_variable . - 358 reference_variable: reference_variable . '[' dim_offset ']' - 359 | reference_variable . '{' expr '}' + 349 variable_without_objects: simple_indirect_reference reference_variable . + 354 base_variable: simple_indirect_reference reference_variable . + 356 reference_variable: reference_variable . '[' dim_offset ']' + 357 | reference_variable . '{' expr '}' '[' shift, and go to state 227 '{' shift, and go to state 228 - '(' reduce using rule 351 (variable_without_objects) - $default reduce using rule 356 (base_variable) + '(' reduce using rule 349 (variable_without_objects) + $default reduce using rule 354 (base_variable) state 231 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 417 internal_functions_in_yacc: T_EVAL '(' expr . ')' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 415 internal_functions_in_yacc: T_EVAL '(' expr . ')' T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -8531,42 +8523,42 @@ state 231 state 232 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 274 | '@' @50 expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 272 | '@' @48 expr . - $default reduce using rule 274 (expr_without_variable) + $default reduce using rule 272 (expr_without_variable) state 233 - 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . T_STRING '(' @52 function_call_parameter_list ')' - 284 | fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects '(' @53 function_call_parameter_list ')' - 352 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects + 280 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . T_STRING '(' @50 function_call_parameter_list ')' + 282 | fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects '(' @51 function_call_parameter_list ')' + 350 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects T_STRING shift, and go to state 357 T_VARIABLE shift, and go to state 33 @@ -8580,7 +8572,7 @@ state 233 state 234 - 352 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects + 350 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM . variable_without_objects T_VARIABLE shift, and go to state 33 '$' shift, and go to state 71 @@ -8593,72 +8585,72 @@ state 234 state 235 - 210 expr_without_variable: T_NEW class_name_reference @43 . ctor_arguments + 208 expr_without_variable: T_NEW class_name_reference @41 . ctor_arguments '(' shift, and go to state 359 - $default reduce using rule 300 (ctor_arguments) + $default reduce using rule 298 (ctor_arguments) ctor_arguments go to state 360 state 236 - 292 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR . @55 object_property @56 dynamic_class_name_variable_properties + 290 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR . @53 object_property @54 dynamic_class_name_variable_properties - $default reduce using rule 290 (@55) + $default reduce using rule 288 (@53) - @55 go to state 361 + @53 go to state 361 state 237 - 356 base_variable: simple_indirect_reference reference_variable . - 358 reference_variable: reference_variable . '[' dim_offset ']' - 359 | reference_variable . '{' expr '}' + 354 base_variable: simple_indirect_reference reference_variable . + 356 reference_variable: reference_variable . '[' dim_offset ']' + 357 | reference_variable . '{' expr '}' '[' shift, and go to state 227 '{' shift, and go to state 228 - $default reduce using rule 356 (base_variable) + $default reduce using rule 354 (base_variable) state 238 - 298 exit_expr: '(' ')' . + 296 exit_expr: '(' ')' . - $default reduce using rule 298 (exit_expr) + $default reduce using rule 296 (exit_expr) state 239 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 299 exit_expr: '(' expr . ')' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 297 exit_expr: '(' expr . ')' T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -8693,32 +8685,32 @@ state 240 20 unticked_statement: T_IF '(' expr . ')' @3 statement @4 elseif_list else_single 23 | T_IF '(' expr . ')' ':' @5 inner_statement_list @6 new_elseif_list new_else_single T_ENDIF ';' - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -8751,7 +8743,7 @@ state 240 state 241 - 280 function_call: T_STRING '(' @51 . function_call_parameter_list ')' + 278 function_call: T_STRING '(' @49 . function_call_parameter_list ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -8799,7 +8791,7 @@ state 241 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 152 (function_call_parameter_list) + $default reduce using rule 150 (function_call_parameter_list) function_call_parameter_list go to state 365 non_empty_function_call_parameter_list go to state 366 @@ -8825,7 +8817,7 @@ state 241 state 242 - 196 echo_expr_list: echo_expr_list ',' . expr + 194 echo_expr_list: echo_expr_list ',' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -8984,43 +8976,43 @@ state 246 state 247 - 199 for_expr: non_empty_for_expr . - 201 non_empty_for_expr: non_empty_for_expr . ',' @40 expr + 197 for_expr: non_empty_for_expr . + 199 non_empty_for_expr: non_empty_for_expr . ',' @38 expr ',' shift, and go to state 373 - $default reduce using rule 199 (for_expr) + $default reduce using rule 197 (for_expr) state 248 - 202 non_empty_for_expr: expr . - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 200 non_empty_for_expr: expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -9049,39 +9041,38 @@ state 248 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 202 (non_empty_for_expr) + $default reduce using rule 200 (non_empty_for_expr) state 249 - 57 unticked_statement: T_FOREACH '(' expr_without_variable . @18 T_AS @19 variable foreach_optional_arg ')' @20 foreach_statement - 333 expr: expr_without_variable . + 55 unticked_statement: T_FOREACH '(' expr_without_variable . T_AS @17 variable foreach_optional_arg ')' @18 foreach_statement + 331 expr: expr_without_variable . - T_AS reduce using rule 54 (@18) - $default reduce using rule 333 (expr) + T_AS shift, and go to state 374 - @18 go to state 374 + $default reduce using rule 331 (expr) state 250 - 53 unticked_statement: T_FOREACH '(' variable . @15 T_AS @16 foreach_variable foreach_optional_arg ')' @17 foreach_statement - 205 expr_without_variable: variable . '=' expr - 206 | variable . '=' '&' variable - 208 | variable . '=' '&' T_NEW class_name_reference @42 ctor_arguments - 212 | variable . T_PLUS_EQUAL expr - 213 | variable . T_MINUS_EQUAL expr - 214 | variable . T_MUL_EQUAL expr - 215 | variable . T_DIV_EQUAL expr - 216 | variable . T_CONCAT_EQUAL expr - 217 | variable . T_MOD_EQUAL expr - 218 | variable . T_AND_EQUAL expr - 219 | variable . T_OR_EQUAL expr - 220 | variable . T_XOR_EQUAL expr - 221 | variable . T_SL_EQUAL expr - 222 | variable . T_SR_EQUAL expr - 334 r_variable: variable . - 338 rw_variable: variable . @58 + 52 unticked_statement: T_FOREACH '(' variable . T_AS @15 foreach_variable foreach_optional_arg ')' @16 foreach_statement + 203 expr_without_variable: variable . '=' expr + 204 | variable . '=' '&' variable + 206 | variable . '=' '&' T_NEW class_name_reference @40 ctor_arguments + 210 | variable . T_PLUS_EQUAL expr + 211 | variable . T_MINUS_EQUAL expr + 212 | variable . T_MUL_EQUAL expr + 213 | variable . T_DIV_EQUAL expr + 214 | variable . T_CONCAT_EQUAL expr + 215 | variable . T_MOD_EQUAL expr + 216 | variable . T_AND_EQUAL expr + 217 | variable . T_OR_EQUAL expr + 218 | variable . T_XOR_EQUAL expr + 219 | variable . T_SL_EQUAL expr + 220 | variable . T_SR_EQUAL expr + 332 r_variable: variable . + 336 rw_variable: variable . @56 '=' shift, and go to state 212 T_SR_EQUAL shift, and go to state 213 @@ -9095,19 +9086,18 @@ state 250 T_MUL_EQUAL shift, and go to state 221 T_MINUS_EQUAL shift, and go to state 222 T_PLUS_EQUAL shift, and go to state 223 + T_AS shift, and go to state 375 - T_DEC reduce using rule 337 (@58) - T_INC reduce using rule 337 (@58) - T_AS reduce using rule 50 (@15) - $default reduce using rule 334 (r_variable) + T_DEC reduce using rule 335 (@56) + T_INC reduce using rule 335 (@56) + $default reduce using rule 332 (r_variable) - @15 go to state 375 - @58 go to state 224 + @56 go to state 224 state 251 - 59 unticked_statement: T_DECLARE @21 '(' . declare_list ')' declare_statement + 57 unticked_statement: T_DECLARE @19 '(' . declare_list ')' declare_statement T_STRING shift, and go to state 376 @@ -9117,32 +9107,32 @@ state 251 state 252 35 unticked_statement: T_SWITCH '(' expr . ')' @14 switch_case_list - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -9189,14 +9179,14 @@ state 254 state 255 - 83 is_reference: '&' . + 81 is_reference: '&' . - $default reduce using rule 83 (is_reference) + $default reduce using rule 81 (is_reference) state 256 - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference . T_STRING @30 '(' parameter_list ')' '{' inner_statement_list '}' + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference . T_STRING @28 '(' parameter_list ')' '{' inner_statement_list '}' T_STRING shift, and go to state 379 @@ -9217,7 +9207,7 @@ state 258 state 259 - 66 unticked_statement: T_TRY @22 '{' . inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY @20 '{' . inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches $default reduce using rule 11 (inner_statement_list) @@ -9226,14 +9216,14 @@ state 259 state 260 - 67 unticked_statement: T_THROW expr ';' . + 65 unticked_statement: T_THROW expr ';' . - $default reduce using rule 67 (unticked_statement) + $default reduce using rule 65 (unticked_statement) state 261 - 79 use_filename: '(' T_CONSTANT_ENCAPSED_STRING . ')' + 77 use_filename: '(' T_CONSTANT_ENCAPSED_STRING . ')' ')' shift, and go to state 381 @@ -9247,7 +9237,7 @@ state 262 state 263 - 163 global_var: '$' '{' . expr '}' + 161 global_var: '$' '{' . expr '}' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -9316,21 +9306,21 @@ state 263 state 264 - 162 global_var: '$' r_variable . + 160 global_var: '$' r_variable . - $default reduce using rule 162 (global_var) + $default reduce using rule 160 (global_var) state 265 - 334 r_variable: variable . + 332 r_variable: variable . - $default reduce using rule 334 (r_variable) + $default reduce using rule 332 (r_variable) state 266 - 159 global_var_list: global_var_list ',' . global_var + 157 global_var_list: global_var_list ',' . global_var T_VARIABLE shift, and go to state 159 '$' shift, and go to state 160 @@ -9347,7 +9337,7 @@ state 267 state 268 - 167 static_var_list: T_VARIABLE '=' . static_scalar + 165 static_var_list: T_VARIABLE '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -9369,8 +9359,8 @@ state 268 state 269 - 164 static_var_list: static_var_list ',' . T_VARIABLE - 165 | static_var_list ',' . T_VARIABLE '=' static_scalar + 162 static_var_list: static_var_list ',' . T_VARIABLE + 163 | static_var_list ',' . T_VARIABLE '=' static_scalar T_VARIABLE shift, and go to state 391 @@ -9385,7 +9375,7 @@ state 270 state 271 49 unticked_statement: T_UNSET '(' unset_variables . ')' ';' - 76 unset_variables: unset_variables . ',' unset_variable + 74 unset_variables: unset_variables . ',' unset_variable ',' shift, and go to state 392 ')' shift, and go to state 393 @@ -9393,29 +9383,29 @@ state 271 state 272 - 75 unset_variables: unset_variable . + 73 unset_variables: unset_variable . - $default reduce using rule 75 (unset_variables) + $default reduce using rule 73 (unset_variables) state 273 - 77 unset_variable: variable . + 75 unset_variable: variable . - $default reduce using rule 77 (unset_variable) + $default reduce using rule 75 (unset_variable) state 274 - 420 isset_variables: variable . + 418 isset_variables: variable . - $default reduce using rule 420 (isset_variables) + $default reduce using rule 418 (isset_variables) state 275 - 413 internal_functions_in_yacc: T_ISSET '(' isset_variables . ')' - 422 isset_variables: isset_variables . ',' @66 variable + 411 internal_functions_in_yacc: T_ISSET '(' isset_variables . ')' + 420 isset_variables: isset_variables . ',' @64 variable ',' shift, and go to state 394 ')' shift, and go to state 395 @@ -9423,7 +9413,7 @@ state 275 state 276 - 414 internal_functions_in_yacc: T_EMPTY '(' variable . ')' + 412 internal_functions_in_yacc: T_EMPTY '(' variable . ')' ')' shift, and go to state 396 @@ -9437,14 +9427,14 @@ state 277 state 278 - 204 expr_without_variable: T_LIST '(' @41 . assignment_list ')' '=' expr + 202 expr_without_variable: T_LIST '(' @39 . assignment_list ')' '=' expr T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 T_LIST shift, and go to state 398 '$' shift, and go to state 71 - $default reduce using rule 380 (assignment_list_element) + $default reduce using rule 378 (assignment_list_element) function_call go to state 85 fully_qualified_class_name go to state 121 @@ -9462,7 +9452,7 @@ state 278 state 279 - 390 non_empty_array_pair_list: '&' . w_variable + 388 non_empty_array_pair_list: '&' . w_variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -9483,35 +9473,35 @@ state 279 state 280 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 385 non_empty_array_pair_list: expr . T_DOUBLE_ARROW expr - 386 | expr . - 389 | expr . T_DOUBLE_ARROW '&' w_variable + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 383 non_empty_array_pair_list: expr . T_DOUBLE_ARROW expr + 384 | expr . + 387 | expr . T_DOUBLE_ARROW '&' w_variable T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -9541,105 +9531,105 @@ state 280 T_INSTANCEOF shift, and go to state 208 T_DOUBLE_ARROW shift, and go to state 404 - $default reduce using rule 386 (non_empty_array_pair_list) + $default reduce using rule 384 (non_empty_array_pair_list) state 281 - 276 expr_without_variable: T_ARRAY '(' array_pair_list . ')' + 274 expr_without_variable: T_ARRAY '(' array_pair_list . ')' ')' shift, and go to state 405 state 282 - 382 array_pair_list: non_empty_array_pair_list . possible_comma - 383 non_empty_array_pair_list: non_empty_array_pair_list . ',' expr T_DOUBLE_ARROW expr - 384 | non_empty_array_pair_list . ',' expr - 387 | non_empty_array_pair_list . ',' expr T_DOUBLE_ARROW '&' w_variable - 388 | non_empty_array_pair_list . ',' '&' w_variable + 380 array_pair_list: non_empty_array_pair_list . possible_comma + 381 non_empty_array_pair_list: non_empty_array_pair_list . ',' expr T_DOUBLE_ARROW expr + 382 | non_empty_array_pair_list . ',' expr + 385 | non_empty_array_pair_list . ',' expr T_DOUBLE_ARROW '&' w_variable + 386 | non_empty_array_pair_list . ',' '&' w_variable ',' shift, and go to state 406 - $default reduce using rule 326 (possible_comma) + $default reduce using rule 324 (possible_comma) possible_comma go to state 407 state 283 - 397 encaps_list: encaps_list '[' . + 395 encaps_list: encaps_list '[' . - $default reduce using rule 397 (encaps_list) + $default reduce using rule 395 (encaps_list) state 284 - 392 encaps_list: encaps_list T_STRING . + 390 encaps_list: encaps_list T_STRING . - $default reduce using rule 392 (encaps_list) + $default reduce using rule 390 (encaps_list) state 285 - 403 encaps_var: T_VARIABLE . - 405 | T_VARIABLE . '[' @65 encaps_var_offset ']' - 406 | T_VARIABLE . T_OBJECT_OPERATOR T_STRING + 401 encaps_var: T_VARIABLE . + 403 | T_VARIABLE . '[' @63 encaps_var_offset ']' + 404 | T_VARIABLE . T_OBJECT_OPERATOR T_STRING '[' shift, and go to state 408 T_OBJECT_OPERATOR shift, and go to state 409 - '[' [reduce using rule 403 (encaps_var)] - T_OBJECT_OPERATOR [reduce using rule 403 (encaps_var)] - $default reduce using rule 403 (encaps_var) + '[' [reduce using rule 401 (encaps_var)] + T_OBJECT_OPERATOR [reduce using rule 401 (encaps_var)] + $default reduce using rule 401 (encaps_var) state 286 - 393 encaps_list: encaps_list T_NUM_STRING . + 391 encaps_list: encaps_list T_NUM_STRING . - $default reduce using rule 393 (encaps_list) + $default reduce using rule 391 (encaps_list) state 287 - 395 encaps_list: encaps_list T_CHARACTER . + 393 encaps_list: encaps_list T_CHARACTER . - $default reduce using rule 395 (encaps_list) + $default reduce using rule 393 (encaps_list) state 288 - 396 encaps_list: encaps_list T_BAD_CHARACTER . + 394 encaps_list: encaps_list T_BAD_CHARACTER . - $default reduce using rule 396 (encaps_list) + $default reduce using rule 394 (encaps_list) state 289 - 394 encaps_list: encaps_list T_ENCAPSED_AND_WHITESPACE . + 392 encaps_list: encaps_list T_ENCAPSED_AND_WHITESPACE . - $default reduce using rule 394 (encaps_list) + $default reduce using rule 392 (encaps_list) state 290 - 401 encaps_list: encaps_list T_OBJECT_OPERATOR . + 399 encaps_list: encaps_list T_OBJECT_OPERATOR . - $default reduce using rule 401 (encaps_list) + $default reduce using rule 399 (encaps_list) state 291 - 323 scalar: T_START_HEREDOC encaps_list T_END_HEREDOC . + 321 scalar: T_START_HEREDOC encaps_list T_END_HEREDOC . - $default reduce using rule 323 (scalar) + $default reduce using rule 321 (scalar) state 292 - 407 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES . expr '}' - 408 | T_DOLLAR_OPEN_CURLY_BRACES . T_STRING_VARNAME '[' expr ']' '}' + 405 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES . expr '}' + 406 | T_DOLLAR_OPEN_CURLY_BRACES . T_STRING_VARNAME '[' expr ']' '}' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -9708,7 +9698,7 @@ state 292 state 293 - 409 encaps_var: T_CURLY_OPEN . variable '}' + 407 encaps_var: T_CURLY_OPEN . variable '}' T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -9728,37 +9718,37 @@ state 293 state 294 - 399 encaps_list: encaps_list '{' . + 397 encaps_list: encaps_list '{' . - $default reduce using rule 399 (encaps_list) + $default reduce using rule 397 (encaps_list) state 295 - 400 encaps_list: encaps_list '}' . + 398 encaps_list: encaps_list '}' . - $default reduce using rule 400 (encaps_list) + $default reduce using rule 398 (encaps_list) state 296 - 398 encaps_list: encaps_list ']' . + 396 encaps_list: encaps_list ']' . - $default reduce using rule 398 (encaps_list) + $default reduce using rule 396 (encaps_list) state 297 - 391 encaps_list: encaps_list encaps_var . + 389 encaps_list: encaps_list encaps_var . - $default reduce using rule 391 (encaps_list) + $default reduce using rule 389 (encaps_list) state 298 - 260 expr_without_variable: '(' expr ')' . + 258 expr_without_variable: '(' expr ')' . - $default reduce using rule 260 (expr_without_variable) + $default reduce using rule 258 (expr_without_variable) state 299 @@ -9874,33 +9864,33 @@ state 300 state 301 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 362 compound_variable: '$' '{' expr . '}' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 360 compound_variable: '$' '{' expr . '}' T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -9933,28 +9923,28 @@ state 301 state 302 - 277 expr_without_variable: '`' encaps_list '`' . + 275 expr_without_variable: '`' encaps_list '`' . - $default reduce using rule 277 (expr_without_variable) + $default reduce using rule 275 (expr_without_variable) state 303 - 321 scalar: '"' encaps_list '"' . + 319 scalar: '"' encaps_list '"' . - $default reduce using rule 321 (scalar) + $default reduce using rule 319 (scalar) state 304 - 322 scalar: ''' encaps_list ''' . + 320 scalar: ''' encaps_list ''' . - $default reduce using rule 322 (scalar) + $default reduce using rule 320 (scalar) state 305 - 95 extends_from: T_EXTENDS . fully_qualified_class_name + 93 extends_from: T_EXTENDS . fully_qualified_class_name T_STRING shift, and go to state 419 @@ -9963,60 +9953,60 @@ state 305 state 306 - 88 unticked_class_declaration_statement: class_entry_type T_STRING extends_from . @31 implements_list '{' class_statement_list '}' + 86 unticked_class_declaration_statement: class_entry_type T_STRING extends_from . @29 implements_list '{' class_statement_list '}' - $default reduce using rule 87 (@31) + $default reduce using rule 85 (@29) - @31 go to state 421 + @29 go to state 421 state 307 - 90 unticked_class_declaration_statement: interface_entry T_STRING @32 . interface_extends_list '{' class_statement_list '}' + 88 unticked_class_declaration_statement: interface_entry T_STRING @30 . interface_extends_list '{' class_statement_list '}' T_EXTENDS shift, and go to state 422 - $default reduce using rule 97 (interface_extends_list) + $default reduce using rule 95 (interface_extends_list) interface_extends_list go to state 423 state 308 - 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING . '(' @52 function_call_parameter_list ')' - 423 class_constant: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING . + 280 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING . '(' @50 function_call_parameter_list ')' + 421 class_constant: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING . '(' shift, and go to state 424 - $default reduce using rule 423 (class_constant) + $default reduce using rule 421 (class_constant) state 309 - 284 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects . '(' @53 function_call_parameter_list ')' - 352 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects . + 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects . '(' @51 function_call_parameter_list ')' + 350 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects . '(' shift, and go to state 425 - $default reduce using rule 352 (static_member) + $default reduce using rule 350 (static_member) state 310 - 350 variable_without_objects: reference_variable . - 358 reference_variable: reference_variable . '[' dim_offset ']' - 359 | reference_variable . '{' expr '}' + 348 variable_without_objects: reference_variable . + 356 reference_variable: reference_variable . '[' dim_offset ']' + 357 | reference_variable . '{' expr '}' '[' shift, and go to state 227 '{' shift, and go to state 228 - $default reduce using rule 350 (variable_without_objects) + $default reduce using rule 348 (variable_without_objects) state 311 - 351 variable_without_objects: simple_indirect_reference . reference_variable - 374 simple_indirect_reference: simple_indirect_reference . '$' + 349 variable_without_objects: simple_indirect_reference . reference_variable + 372 simple_indirect_reference: simple_indirect_reference . '$' T_VARIABLE shift, and go to state 33 '$' shift, and go to state 229 @@ -10027,7 +10017,7 @@ state 311 state 312 - 232 expr_without_variable: expr T_LOGICAL_OR @46 . expr + 230 expr_without_variable: expr T_LOGICAL_OR @44 . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -10096,33 +10086,33 @@ state 312 state 313 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 235 | expr T_LOGICAL_XOR expr . - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 233 | expr T_LOGICAL_XOR expr . + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_AND shift, and go to state 185 '?' shift, and go to state 186 @@ -10149,12 +10139,12 @@ state 313 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 235 (expr_without_variable) + $default reduce using rule 233 (expr_without_variable) state 314 - 234 expr_without_variable: expr T_LOGICAL_AND @47 . expr + 232 expr_without_variable: expr T_LOGICAL_AND @45 . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -10223,7 +10213,7 @@ state 314 state 315 - 263 expr_without_variable: expr '?' @48 . expr ':' @49 expr + 261 expr_without_variable: expr '?' @46 . expr ':' @47 expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -10292,7 +10282,7 @@ state 315 state 316 - 228 expr_without_variable: expr T_BOOLEAN_OR @44 . expr + 226 expr_without_variable: expr T_BOOLEAN_OR @42 . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -10361,7 +10351,7 @@ state 316 state 317 - 230 expr_without_variable: expr T_BOOLEAN_AND @45 . expr + 228 expr_without_variable: expr T_BOOLEAN_AND @43 . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -10430,33 +10420,33 @@ state 317 state 318 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 236 | expr '|' expr . - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 234 | expr '|' expr . + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '^' shift, and go to state 190 '&' shift, and go to state 191 @@ -10478,38 +10468,38 @@ state 318 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 236 (expr_without_variable) + $default reduce using rule 234 (expr_without_variable) state 319 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 238 | expr '^' expr . - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 236 | expr '^' expr . + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '&' shift, and go to state 191 T_IS_NOT_IDENTICAL shift, and go to state 192 @@ -10530,38 +10520,38 @@ state 319 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 238 (expr_without_variable) + $default reduce using rule 236 (expr_without_variable) state 320 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 237 | expr '&' expr . - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 235 | expr '&' expr . + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_IS_NOT_IDENTICAL shift, and go to state 192 T_IS_IDENTICAL shift, and go to state 193 @@ -10581,38 +10571,38 @@ state 320 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 237 (expr_without_variable) + $default reduce using rule 235 (expr_without_variable) state 321 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 252 | expr T_IS_NOT_IDENTICAL expr . - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 250 | expr T_IS_NOT_IDENTICAL expr . + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '<' shift, and go to state 196 '>' shift, and go to state 197 @@ -10633,38 +10623,38 @@ state 321 T_IS_NOT_EQUAL error (nonassociative) T_IS_EQUAL error (nonassociative) - $default reduce using rule 252 (expr_without_variable) + $default reduce using rule 250 (expr_without_variable) state 322 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 251 | expr T_IS_IDENTICAL expr . - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 249 | expr T_IS_IDENTICAL expr . + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '<' shift, and go to state 196 '>' shift, and go to state 197 @@ -10685,38 +10675,38 @@ state 322 T_IS_NOT_EQUAL error (nonassociative) T_IS_EQUAL error (nonassociative) - $default reduce using rule 251 (expr_without_variable) + $default reduce using rule 249 (expr_without_variable) state 323 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 254 | expr T_IS_NOT_EQUAL expr . - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 252 | expr T_IS_NOT_EQUAL expr . + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '<' shift, and go to state 196 '>' shift, and go to state 197 @@ -10737,38 +10727,38 @@ state 323 T_IS_NOT_EQUAL error (nonassociative) T_IS_EQUAL error (nonassociative) - $default reduce using rule 254 (expr_without_variable) + $default reduce using rule 252 (expr_without_variable) state 324 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 253 | expr T_IS_EQUAL expr . - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 251 | expr T_IS_EQUAL expr . + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '<' shift, and go to state 196 '>' shift, and go to state 197 @@ -10789,38 +10779,38 @@ state 324 T_IS_NOT_EQUAL error (nonassociative) T_IS_EQUAL error (nonassociative) - $default reduce using rule 253 (expr_without_variable) + $default reduce using rule 251 (expr_without_variable) state 325 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 255 | expr '<' expr . - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 253 | expr '<' expr . + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_SR shift, and go to state 200 T_SL shift, and go to state 201 @@ -10837,38 +10827,38 @@ state 325 T_IS_GREATER_OR_EQUAL error (nonassociative) T_IS_SMALLER_OR_EQUAL error (nonassociative) - $default reduce using rule 255 (expr_without_variable) + $default reduce using rule 253 (expr_without_variable) state 326 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 257 | expr '>' expr . - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 255 | expr '>' expr . + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_SR shift, and go to state 200 T_SL shift, and go to state 201 @@ -10885,38 +10875,38 @@ state 326 T_IS_GREATER_OR_EQUAL error (nonassociative) T_IS_SMALLER_OR_EQUAL error (nonassociative) - $default reduce using rule 257 (expr_without_variable) + $default reduce using rule 255 (expr_without_variable) state 327 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 258 | expr T_IS_GREATER_OR_EQUAL expr . - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 256 | expr T_IS_GREATER_OR_EQUAL expr . + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_SR shift, and go to state 200 T_SL shift, and go to state 201 @@ -10933,38 +10923,38 @@ state 327 T_IS_GREATER_OR_EQUAL error (nonassociative) T_IS_SMALLER_OR_EQUAL error (nonassociative) - $default reduce using rule 258 (expr_without_variable) + $default reduce using rule 256 (expr_without_variable) state 328 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 256 | expr T_IS_SMALLER_OR_EQUAL expr . - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 254 | expr T_IS_SMALLER_OR_EQUAL expr . + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_SR shift, and go to state 200 T_SL shift, and go to state 201 @@ -10981,38 +10971,38 @@ state 328 T_IS_GREATER_OR_EQUAL error (nonassociative) T_IS_SMALLER_OR_EQUAL error (nonassociative) - $default reduce using rule 256 (expr_without_variable) + $default reduce using rule 254 (expr_without_variable) state 329 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 246 | expr T_SR expr . - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 244 | expr T_SR expr . + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '+' shift, and go to state 202 '-' shift, and go to state 203 @@ -11022,38 +11012,38 @@ state 329 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 246 (expr_without_variable) + $default reduce using rule 244 (expr_without_variable) state 330 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 245 | expr T_SL expr . - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 243 | expr T_SL expr . + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '+' shift, and go to state 202 '-' shift, and go to state 203 @@ -11063,239 +11053,239 @@ state 330 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 245 (expr_without_variable) + $default reduce using rule 243 (expr_without_variable) state 331 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 240 | expr '+' expr . - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 238 | expr '+' expr . + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '*' shift, and go to state 205 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 240 (expr_without_variable) + $default reduce using rule 238 (expr_without_variable) state 332 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 241 | expr '-' expr . - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 239 | expr '-' expr . + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '*' shift, and go to state 205 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 241 (expr_without_variable) + $default reduce using rule 239 (expr_without_variable) state 333 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 239 | expr '.' expr . - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 237 | expr '.' expr . + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '*' shift, and go to state 205 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 239 (expr_without_variable) + $default reduce using rule 237 (expr_without_variable) state 334 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 242 | expr '*' expr . - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 240 | expr '*' expr . + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 242 (expr_without_variable) + $default reduce using rule 240 (expr_without_variable) state 335 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 243 | expr '/' expr . - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 241 | expr '/' expr . + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 243 (expr_without_variable) + $default reduce using rule 241 (expr_without_variable) state 336 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 244 | expr '%' expr . - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 242 | expr '%' expr . + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 244 (expr_without_variable) + $default reduce using rule 242 (expr_without_variable) state 337 - 259 expr_without_variable: expr T_INSTANCEOF class_name_reference . + 257 expr_without_variable: expr T_INSTANCEOF class_name_reference . - $default reduce using rule 259 (expr_without_variable) + $default reduce using rule 257 (expr_without_variable) state 338 - 206 expr_without_variable: variable '=' '&' . variable - 208 | variable '=' '&' . T_NEW class_name_reference @42 ctor_arguments + 204 expr_without_variable: variable '=' '&' . variable + 206 | variable '=' '&' . T_NEW class_name_reference @40 ctor_arguments T_NEW shift, and go to state 432 T_STRING shift, and go to state 120 @@ -11316,33 +11306,33 @@ state 338 state 339 - 205 expr_without_variable: variable '=' expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 203 expr_without_variable: variable '=' expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11368,38 +11358,38 @@ state 339 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 205 (expr_without_variable) + $default reduce using rule 203 (expr_without_variable) state 340 - 222 expr_without_variable: variable T_SR_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 220 expr_without_variable: variable T_SR_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11425,38 +11415,38 @@ state 340 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 222 (expr_without_variable) + $default reduce using rule 220 (expr_without_variable) state 341 - 221 expr_without_variable: variable T_SL_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 219 expr_without_variable: variable T_SL_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11482,38 +11472,38 @@ state 341 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 221 (expr_without_variable) + $default reduce using rule 219 (expr_without_variable) state 342 - 220 expr_without_variable: variable T_XOR_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 218 expr_without_variable: variable T_XOR_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11539,38 +11529,38 @@ state 342 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 220 (expr_without_variable) + $default reduce using rule 218 (expr_without_variable) state 343 - 219 expr_without_variable: variable T_OR_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 217 expr_without_variable: variable T_OR_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11596,38 +11586,38 @@ state 343 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 219 (expr_without_variable) + $default reduce using rule 217 (expr_without_variable) state 344 - 218 expr_without_variable: variable T_AND_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 216 expr_without_variable: variable T_AND_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11653,38 +11643,38 @@ state 344 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 218 (expr_without_variable) + $default reduce using rule 216 (expr_without_variable) state 345 - 217 expr_without_variable: variable T_MOD_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 215 expr_without_variable: variable T_MOD_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11710,38 +11700,38 @@ state 345 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 217 (expr_without_variable) + $default reduce using rule 215 (expr_without_variable) state 346 - 216 expr_without_variable: variable T_CONCAT_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 214 expr_without_variable: variable T_CONCAT_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11767,38 +11757,38 @@ state 346 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 216 (expr_without_variable) + $default reduce using rule 214 (expr_without_variable) state 347 - 215 expr_without_variable: variable T_DIV_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 213 expr_without_variable: variable T_DIV_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11824,38 +11814,38 @@ state 347 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 215 (expr_without_variable) + $default reduce using rule 213 (expr_without_variable) state 348 - 214 expr_without_variable: variable T_MUL_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 212 expr_without_variable: variable T_MUL_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11881,38 +11871,38 @@ state 348 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 214 (expr_without_variable) + $default reduce using rule 212 (expr_without_variable) state 349 - 213 expr_without_variable: variable T_MINUS_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 211 expr_without_variable: variable T_MINUS_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11938,38 +11928,38 @@ state 349 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 213 (expr_without_variable) + $default reduce using rule 211 (expr_without_variable) state 350 - 212 expr_without_variable: variable T_PLUS_EQUAL expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 210 expr_without_variable: variable T_PLUS_EQUAL expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -11995,12 +11985,12 @@ state 350 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 212 (expr_without_variable) + $default reduce using rule 210 (expr_without_variable) state 351 - 286 function_call: variable_without_objects '(' @54 . function_call_parameter_list ')' + 284 function_call: variable_without_objects '(' @52 . function_call_parameter_list ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -12048,7 +12038,7 @@ state 351 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 152 (function_call_parameter_list) + $default reduce using rule 150 (function_call_parameter_list) function_call_parameter_list go to state 434 non_empty_function_call_parameter_list go to state 366 @@ -12074,7 +12064,7 @@ state 351 state 352 - 341 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @59 . object_property @60 method_or_not variable_properties + 339 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @57 . object_property @58 method_or_not variable_properties T_STRING shift, and go to state 435 T_VARIABLE shift, and go to state 33 @@ -12092,33 +12082,33 @@ state 352 state 353 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 364 dim_offset: expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 362 dim_offset: expr . T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -12147,45 +12137,45 @@ state 353 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 364 (dim_offset) + $default reduce using rule 362 (dim_offset) state 354 - 358 reference_variable: reference_variable '[' dim_offset . ']' + 356 reference_variable: reference_variable '[' dim_offset . ']' ']' shift, and go to state 441 state 355 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 359 reference_variable: reference_variable '{' expr . '}' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 357 reference_variable: reference_variable '{' expr . '}' T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -12218,28 +12208,28 @@ state 355 state 356 - 417 internal_functions_in_yacc: T_EVAL '(' expr ')' . + 415 internal_functions_in_yacc: T_EVAL '(' expr ')' . - $default reduce using rule 417 (internal_functions_in_yacc) + $default reduce using rule 415 (internal_functions_in_yacc) state 357 - 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING . '(' @52 function_call_parameter_list ')' + 280 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING . '(' @50 function_call_parameter_list ')' '(' shift, and go to state 424 state 358 - 352 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects . + 350 static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects . - $default reduce using rule 352 (static_member) + $default reduce using rule 350 (static_member) state 359 - 301 ctor_arguments: '(' . function_call_parameter_list ')' + 299 ctor_arguments: '(' . function_call_parameter_list ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -12287,7 +12277,7 @@ state 359 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 152 (function_call_parameter_list) + $default reduce using rule 150 (function_call_parameter_list) function_call_parameter_list go to state 443 non_empty_function_call_parameter_list go to state 366 @@ -12313,14 +12303,14 @@ state 359 state 360 - 210 expr_without_variable: T_NEW class_name_reference @43 ctor_arguments . + 208 expr_without_variable: T_NEW class_name_reference @41 ctor_arguments . - $default reduce using rule 210 (expr_without_variable) + $default reduce using rule 208 (expr_without_variable) state 361 - 292 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @55 . object_property @56 dynamic_class_name_variable_properties + 290 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @53 . object_property @54 dynamic_class_name_variable_properties T_STRING shift, and go to state 435 T_VARIABLE shift, and go to state 33 @@ -12338,9 +12328,9 @@ state 361 state 362 - 299 exit_expr: '(' expr ')' . + 297 exit_expr: '(' expr ')' . - $default reduce using rule 299 (exit_expr) + $default reduce using rule 297 (exit_expr) state 363 @@ -12357,7 +12347,7 @@ state 363 state 364 - 155 non_empty_function_call_parameter_list: '&' . w_variable + 153 non_empty_function_call_parameter_list: '&' . w_variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -12378,52 +12368,52 @@ state 364 state 365 - 280 function_call: T_STRING '(' @51 function_call_parameter_list . ')' + 278 function_call: T_STRING '(' @49 function_call_parameter_list . ')' ')' shift, and go to state 448 state 366 - 151 function_call_parameter_list: non_empty_function_call_parameter_list . - 156 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list . ',' expr_without_variable - 157 | non_empty_function_call_parameter_list . ',' variable - 158 | non_empty_function_call_parameter_list . ',' '&' w_variable + 149 function_call_parameter_list: non_empty_function_call_parameter_list . + 154 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list . ',' expr_without_variable + 155 | non_empty_function_call_parameter_list . ',' variable + 156 | non_empty_function_call_parameter_list . ',' '&' w_variable ',' shift, and go to state 449 - $default reduce using rule 151 (function_call_parameter_list) + $default reduce using rule 149 (function_call_parameter_list) state 367 - 153 non_empty_function_call_parameter_list: expr_without_variable . - 333 expr: expr_without_variable . + 151 non_empty_function_call_parameter_list: expr_without_variable . + 331 expr: expr_without_variable . - ',' reduce using rule 153 (non_empty_function_call_parameter_list) - ')' reduce using rule 153 (non_empty_function_call_parameter_list) - $default reduce using rule 333 (expr) + ',' reduce using rule 151 (non_empty_function_call_parameter_list) + ')' reduce using rule 151 (non_empty_function_call_parameter_list) + $default reduce using rule 331 (expr) state 368 - 154 non_empty_function_call_parameter_list: variable . - 205 expr_without_variable: variable . '=' expr - 206 | variable . '=' '&' variable - 208 | variable . '=' '&' T_NEW class_name_reference @42 ctor_arguments - 212 | variable . T_PLUS_EQUAL expr - 213 | variable . T_MINUS_EQUAL expr - 214 | variable . T_MUL_EQUAL expr - 215 | variable . T_DIV_EQUAL expr - 216 | variable . T_CONCAT_EQUAL expr - 217 | variable . T_MOD_EQUAL expr - 218 | variable . T_AND_EQUAL expr - 219 | variable . T_OR_EQUAL expr - 220 | variable . T_XOR_EQUAL expr - 221 | variable . T_SL_EQUAL expr - 222 | variable . T_SR_EQUAL expr - 334 r_variable: variable . - 338 rw_variable: variable . @58 + 152 non_empty_function_call_parameter_list: variable . + 203 expr_without_variable: variable . '=' expr + 204 | variable . '=' '&' variable + 206 | variable . '=' '&' T_NEW class_name_reference @40 ctor_arguments + 210 | variable . T_PLUS_EQUAL expr + 211 | variable . T_MINUS_EQUAL expr + 212 | variable . T_MUL_EQUAL expr + 213 | variable . T_DIV_EQUAL expr + 214 | variable . T_CONCAT_EQUAL expr + 215 | variable . T_MOD_EQUAL expr + 216 | variable . T_AND_EQUAL expr + 217 | variable . T_OR_EQUAL expr + 218 | variable . T_XOR_EQUAL expr + 219 | variable . T_SL_EQUAL expr + 220 | variable . T_SR_EQUAL expr + 332 r_variable: variable . + 336 rw_variable: variable . @56 '=' shift, and go to state 212 T_SR_EQUAL shift, and go to state 213 @@ -12438,44 +12428,44 @@ state 368 T_MINUS_EQUAL shift, and go to state 222 T_PLUS_EQUAL shift, and go to state 223 - ',' reduce using rule 154 (non_empty_function_call_parameter_list) - T_DEC reduce using rule 337 (@58) - T_INC reduce using rule 337 (@58) - ')' reduce using rule 154 (non_empty_function_call_parameter_list) - $default reduce using rule 334 (r_variable) + ',' reduce using rule 152 (non_empty_function_call_parameter_list) + T_DEC reduce using rule 335 (@56) + T_INC reduce using rule 335 (@56) + ')' reduce using rule 152 (non_empty_function_call_parameter_list) + $default reduce using rule 332 (r_variable) - @58 go to state 224 + @56 go to state 224 state 369 - 196 echo_expr_list: echo_expr_list ',' expr . - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 194 echo_expr_list: echo_expr_list ',' expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -12504,7 +12494,7 @@ state 369 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 196 (echo_expr_list) + $default reduce using rule 194 (echo_expr_list) state 370 @@ -12517,32 +12507,32 @@ state 370 state 371 26 unticked_statement: T_WHILE '(' @7 expr . ')' @8 while_statement - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -12584,38 +12574,42 @@ state 372 state 373 - 201 non_empty_for_expr: non_empty_for_expr ',' . @40 expr + 199 non_empty_for_expr: non_empty_for_expr ',' . @38 expr - $default reduce using rule 200 (@40) + $default reduce using rule 198 (@38) - @40 go to state 453 + @38 go to state 453 state 374 - 57 unticked_statement: T_FOREACH '(' expr_without_variable @18 . T_AS @19 variable foreach_optional_arg ')' @20 foreach_statement + 55 unticked_statement: T_FOREACH '(' expr_without_variable T_AS . @17 variable foreach_optional_arg ')' @18 foreach_statement + + $default reduce using rule 53 (@17) - T_AS shift, and go to state 454 + @17 go to state 454 state 375 - 53 unticked_statement: T_FOREACH '(' variable @15 . T_AS @16 foreach_variable foreach_optional_arg ')' @17 foreach_statement + 52 unticked_statement: T_FOREACH '(' variable T_AS . @15 foreach_variable foreach_optional_arg ')' @16 foreach_statement - T_AS shift, and go to state 455 + $default reduce using rule 50 (@15) + + @15 go to state 455 state 376 - 113 declare_list: T_STRING . '=' static_scalar + 111 declare_list: T_STRING . '=' static_scalar '=' shift, and go to state 456 state 377 - 59 unticked_statement: T_DECLARE @21 '(' declare_list . ')' declare_statement - 114 declare_list: declare_list . ',' T_STRING '=' static_scalar + 57 unticked_statement: T_DECLARE @19 '(' declare_list . ')' declare_statement + 112 declare_list: declare_list . ',' T_STRING '=' static_scalar ',' shift, and go to state 457 ')' shift, and go to state 458 @@ -12632,17 +12626,17 @@ state 378 state 379 - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference T_STRING . @30 '(' parameter_list ')' '{' inner_statement_list '}' + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference T_STRING . @28 '(' parameter_list ')' '{' inner_statement_list '}' - $default reduce using rule 85 (@30) + $default reduce using rule 83 (@28) - @30 go to state 460 + @28 go to state 460 state 380 10 inner_statement_list: inner_statement_list . @2 inner_statement - 66 unticked_statement: T_TRY @22 '{' inner_statement_list . '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY @20 '{' inner_statement_list . '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches '}' shift, and go to state 461 @@ -12653,40 +12647,40 @@ state 380 state 381 - 79 use_filename: '(' T_CONSTANT_ENCAPSED_STRING ')' . + 77 use_filename: '(' T_CONSTANT_ENCAPSED_STRING ')' . - $default reduce using rule 79 (use_filename) + $default reduce using rule 77 (use_filename) state 382 - 163 global_var: '$' '{' expr . '}' - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 161 global_var: '$' '{' expr . '}' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -12719,14 +12713,14 @@ state 382 state 383 - 159 global_var_list: global_var_list ',' global_var . + 157 global_var_list: global_var_list ',' global_var . - $default reduce using rule 159 (global_var_list) + $default reduce using rule 157 (global_var_list) state 384 - 312 static_scalar: '+' . static_scalar + 310 static_scalar: '+' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -12748,7 +12742,7 @@ state 384 state 385 - 313 static_scalar: '-' . static_scalar + 311 static_scalar: '-' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -12770,55 +12764,55 @@ state 385 state 386 - 311 static_scalar: T_STRING . - 316 static_class_constant: T_STRING . T_PAAMAYIM_NEKUDOTAYIM T_STRING + 309 static_scalar: T_STRING . + 314 static_class_constant: T_STRING . T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM shift, and go to state 465 - $default reduce using rule 311 (static_scalar) + $default reduce using rule 309 (static_scalar) state 387 - 314 static_scalar: T_ARRAY . '(' static_array_pair_list ')' + 312 static_scalar: T_ARRAY . '(' static_array_pair_list ')' '(' shift, and go to state 466 state 388 - 310 static_scalar: common_scalar . + 308 static_scalar: common_scalar . - $default reduce using rule 310 (static_scalar) + $default reduce using rule 308 (static_scalar) state 389 - 167 static_var_list: T_VARIABLE '=' static_scalar . + 165 static_var_list: T_VARIABLE '=' static_scalar . - $default reduce using rule 167 (static_var_list) + $default reduce using rule 165 (static_var_list) state 390 - 315 static_scalar: static_class_constant . + 313 static_scalar: static_class_constant . - $default reduce using rule 315 (static_scalar) + $default reduce using rule 313 (static_scalar) state 391 - 164 static_var_list: static_var_list ',' T_VARIABLE . - 165 | static_var_list ',' T_VARIABLE . '=' static_scalar + 162 static_var_list: static_var_list ',' T_VARIABLE . + 163 | static_var_list ',' T_VARIABLE . '=' static_scalar '=' shift, and go to state 467 - $default reduce using rule 164 (static_var_list) + $default reduce using rule 162 (static_var_list) state 392 - 76 unset_variables: unset_variables ',' . unset_variable + 74 unset_variables: unset_variables ',' . unset_variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -12846,25 +12840,25 @@ state 393 state 394 - 422 isset_variables: isset_variables ',' . @66 variable + 420 isset_variables: isset_variables ',' . @64 variable - $default reduce using rule 421 (@66) + $default reduce using rule 419 (@64) - @66 go to state 470 + @64 go to state 470 state 395 - 413 internal_functions_in_yacc: T_ISSET '(' isset_variables ')' . + 411 internal_functions_in_yacc: T_ISSET '(' isset_variables ')' . - $default reduce using rule 413 (internal_functions_in_yacc) + $default reduce using rule 411 (internal_functions_in_yacc) state 396 - 414 internal_functions_in_yacc: T_EMPTY '(' variable ')' . + 412 internal_functions_in_yacc: T_EMPTY '(' variable ')' . - $default reduce using rule 414 (internal_functions_in_yacc) + $default reduce using rule 412 (internal_functions_in_yacc) state 397 @@ -12876,22 +12870,22 @@ state 397 state 398 - 379 assignment_list_element: T_LIST . '(' @64 assignment_list ')' + 377 assignment_list_element: T_LIST . '(' @62 assignment_list ')' '(' shift, and go to state 471 state 399 - 377 assignment_list_element: variable . + 375 assignment_list_element: variable . - $default reduce using rule 377 (assignment_list_element) + $default reduce using rule 375 (assignment_list_element) state 400 - 204 expr_without_variable: T_LIST '(' @41 assignment_list . ')' '=' expr - 375 assignment_list: assignment_list . ',' assignment_list_element + 202 expr_without_variable: T_LIST '(' @39 assignment_list . ')' '=' expr + 373 assignment_list: assignment_list . ',' assignment_list_element ',' shift, and go to state 472 ')' shift, and go to state 473 @@ -12899,31 +12893,31 @@ state 400 state 401 - 376 assignment_list: assignment_list_element . + 374 assignment_list: assignment_list_element . - $default reduce using rule 376 (assignment_list) + $default reduce using rule 374 (assignment_list) state 402 - 390 non_empty_array_pair_list: '&' w_variable . + 388 non_empty_array_pair_list: '&' w_variable . - $default reduce using rule 390 (non_empty_array_pair_list) + $default reduce using rule 388 (non_empty_array_pair_list) state 403 - 336 w_variable: variable . @57 + 334 w_variable: variable . @55 - $default reduce using rule 335 (@57) + $default reduce using rule 333 (@55) - @57 go to state 474 + @55 go to state 474 state 404 - 385 non_empty_array_pair_list: expr T_DOUBLE_ARROW . expr - 389 | expr T_DOUBLE_ARROW . '&' w_variable + 383 non_empty_array_pair_list: expr T_DOUBLE_ARROW . expr + 387 | expr T_DOUBLE_ARROW . '&' w_variable T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -12993,18 +12987,18 @@ state 404 state 405 - 276 expr_without_variable: T_ARRAY '(' array_pair_list ')' . + 274 expr_without_variable: T_ARRAY '(' array_pair_list ')' . - $default reduce using rule 276 (expr_without_variable) + $default reduce using rule 274 (expr_without_variable) state 406 - 327 possible_comma: ',' . - 383 non_empty_array_pair_list: non_empty_array_pair_list ',' . expr T_DOUBLE_ARROW expr - 384 | non_empty_array_pair_list ',' . expr - 387 | non_empty_array_pair_list ',' . expr T_DOUBLE_ARROW '&' w_variable - 388 | non_empty_array_pair_list ',' . '&' w_variable + 325 possible_comma: ',' . + 381 non_empty_array_pair_list: non_empty_array_pair_list ',' . expr T_DOUBLE_ARROW expr + 382 | non_empty_array_pair_list ',' . expr + 385 | non_empty_array_pair_list ',' . expr T_DOUBLE_ARROW '&' w_variable + 386 | non_empty_array_pair_list ',' . '&' w_variable T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -13052,7 +13046,7 @@ state 406 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 327 (possible_comma) + $default reduce using rule 325 (possible_comma) expr_without_variable go to state 84 function_call go to state 85 @@ -13076,66 +13070,66 @@ state 406 state 407 - 382 array_pair_list: non_empty_array_pair_list possible_comma . + 380 array_pair_list: non_empty_array_pair_list possible_comma . - $default reduce using rule 382 (array_pair_list) + $default reduce using rule 380 (array_pair_list) state 408 - 405 encaps_var: T_VARIABLE '[' . @65 encaps_var_offset ']' + 403 encaps_var: T_VARIABLE '[' . @63 encaps_var_offset ']' - $default reduce using rule 404 (@65) + $default reduce using rule 402 (@63) - @65 go to state 479 + @63 go to state 479 state 409 - 406 encaps_var: T_VARIABLE T_OBJECT_OPERATOR . T_STRING + 404 encaps_var: T_VARIABLE T_OBJECT_OPERATOR . T_STRING T_STRING shift, and go to state 480 state 410 - 318 scalar: T_STRING_VARNAME . - 408 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME . '[' expr ']' '}' + 316 scalar: T_STRING_VARNAME . + 406 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME . '[' expr ']' '}' '[' shift, and go to state 481 - $default reduce using rule 318 (scalar) + $default reduce using rule 316 (scalar) state 411 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 407 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES expr . '}' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 405 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES expr . '}' T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -13168,7 +13162,7 @@ state 411 state 412 - 409 encaps_var: T_CURLY_OPEN variable . '}' + 407 encaps_var: T_CURLY_OPEN variable . '}' '}' shift, and go to state 483 @@ -13210,39 +13204,39 @@ state 417 state 418 - 362 compound_variable: '$' '{' expr '}' . + 360 compound_variable: '$' '{' expr '}' . - $default reduce using rule 362 (compound_variable) + $default reduce using rule 360 (compound_variable) state 419 - 287 fully_qualified_class_name: T_STRING . + 285 fully_qualified_class_name: T_STRING . - $default reduce using rule 287 (fully_qualified_class_name) + $default reduce using rule 285 (fully_qualified_class_name) state 420 - 95 extends_from: T_EXTENDS fully_qualified_class_name . + 93 extends_from: T_EXTENDS fully_qualified_class_name . - $default reduce using rule 95 (extends_from) + $default reduce using rule 93 (extends_from) state 421 - 88 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @31 . implements_list '{' class_statement_list '}' + 86 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @29 . implements_list '{' class_statement_list '}' T_IMPLEMENTS shift, and go to state 485 - $default reduce using rule 99 (implements_list) + $default reduce using rule 97 (implements_list) implements_list go to state 486 state 422 - 98 interface_extends_list: T_EXTENDS . interface_list + 96 interface_extends_list: T_EXTENDS . interface_list T_STRING shift, and go to state 419 @@ -13252,70 +13246,70 @@ state 422 state 423 - 90 unticked_class_declaration_statement: interface_entry T_STRING @32 interface_extends_list . '{' class_statement_list '}' + 88 unticked_class_declaration_statement: interface_entry T_STRING @30 interface_extends_list . '{' class_statement_list '}' '{' shift, and go to state 489 state 424 - 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' . @52 function_call_parameter_list ')' + 280 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' . @50 function_call_parameter_list ')' - $default reduce using rule 281 (@52) + $default reduce using rule 279 (@50) - @52 go to state 490 + @50 go to state 490 state 425 - 284 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' . @53 function_call_parameter_list ')' + 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' . @51 function_call_parameter_list ')' - $default reduce using rule 283 (@53) + $default reduce using rule 281 (@51) - @53 go to state 491 + @51 go to state 491 state 426 - 351 variable_without_objects: simple_indirect_reference reference_variable . - 358 reference_variable: reference_variable . '[' dim_offset ']' - 359 | reference_variable . '{' expr '}' + 349 variable_without_objects: simple_indirect_reference reference_variable . + 356 reference_variable: reference_variable . '[' dim_offset ']' + 357 | reference_variable . '{' expr '}' '[' shift, and go to state 227 '{' shift, and go to state 228 - $default reduce using rule 351 (variable_without_objects) + $default reduce using rule 349 (variable_without_objects) state 427 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 232 | expr T_LOGICAL_OR @46 expr . - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 230 | expr T_LOGICAL_OR @44 expr . + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_XOR shift, and go to state 184 T_LOGICAL_AND shift, and go to state 185 @@ -13343,38 +13337,38 @@ state 427 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 232 (expr_without_variable) + $default reduce using rule 230 (expr_without_variable) state 428 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 234 | expr T_LOGICAL_AND @47 expr . - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 232 | expr T_LOGICAL_AND @45 expr . + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -13400,38 +13394,38 @@ state 428 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 234 (expr_without_variable) + $default reduce using rule 232 (expr_without_variable) state 429 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 263 | expr '?' @48 expr . ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 261 | expr '?' @46 expr . ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -13464,33 +13458,33 @@ state 429 state 430 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 228 | expr T_BOOLEAN_OR @44 expr . - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 226 | expr T_BOOLEAN_OR @42 expr . + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_BOOLEAN_AND shift, and go to state 188 '|' shift, and go to state 189 @@ -13514,38 +13508,38 @@ state 430 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 228 (expr_without_variable) + $default reduce using rule 226 (expr_without_variable) state 431 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 230 | expr T_BOOLEAN_AND @45 expr . - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 228 | expr T_BOOLEAN_AND @43 expr . + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '|' shift, and go to state 189 '^' shift, and go to state 190 @@ -13568,12 +13562,12 @@ state 431 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 230 (expr_without_variable) + $default reduce using rule 228 (expr_without_variable) state 432 - 208 expr_without_variable: variable '=' '&' T_NEW . class_name_reference @42 ctor_arguments + 206 expr_without_variable: variable '=' '&' T_NEW . class_name_reference @40 ctor_arguments T_STRING shift, and go to state 126 T_VARIABLE shift, and go to state 33 @@ -13591,28 +13585,28 @@ state 432 state 433 - 206 expr_without_variable: variable '=' '&' variable . + 204 expr_without_variable: variable '=' '&' variable . - $default reduce using rule 206 (expr_without_variable) + $default reduce using rule 204 (expr_without_variable) state 434 - 286 function_call: variable_without_objects '(' @54 function_call_parameter_list . ')' + 284 function_call: variable_without_objects '(' @52 function_call_parameter_list . ')' ')' shift, and go to state 494 state 435 - 371 variable_name: T_STRING . + 369 variable_name: T_STRING . - $default reduce using rule 371 (variable_name) + $default reduce using rule 369 (variable_name) state 436 - 372 variable_name: '{' . expr '}' + 370 variable_name: '{' . expr '}' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -13681,69 +13675,69 @@ state 436 state 437 - 367 object_property: variable_without_objects . @63 + 365 object_property: variable_without_objects . @61 - $default reduce using rule 366 (@63) + $default reduce using rule 364 (@61) - @63 go to state 496 + @61 go to state 496 state 438 - 341 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @59 object_property . @60 method_or_not variable_properties + 339 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @57 object_property . @58 method_or_not variable_properties - $default reduce using rule 340 (@60) + $default reduce using rule 338 (@58) - @60 go to state 497 + @58 go to state 497 state 439 - 365 object_property: object_dim_list . - 368 object_dim_list: object_dim_list . '[' dim_offset ']' - 369 | object_dim_list . '{' expr '}' + 363 object_property: object_dim_list . + 366 object_dim_list: object_dim_list . '[' dim_offset ']' + 367 | object_dim_list . '{' expr '}' '[' shift, and go to state 498 '{' shift, and go to state 499 - $default reduce using rule 365 (object_property) + $default reduce using rule 363 (object_property) state 440 - 370 object_dim_list: variable_name . + 368 object_dim_list: variable_name . - $default reduce using rule 370 (object_dim_list) + $default reduce using rule 368 (object_dim_list) state 441 - 358 reference_variable: reference_variable '[' dim_offset ']' . + 356 reference_variable: reference_variable '[' dim_offset ']' . - $default reduce using rule 358 (reference_variable) + $default reduce using rule 356 (reference_variable) state 442 - 359 reference_variable: reference_variable '{' expr '}' . + 357 reference_variable: reference_variable '{' expr '}' . - $default reduce using rule 359 (reference_variable) + $default reduce using rule 357 (reference_variable) state 443 - 301 ctor_arguments: '(' function_call_parameter_list . ')' + 299 ctor_arguments: '(' function_call_parameter_list . ')' ')' shift, and go to state 500 state 444 - 292 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @55 object_property . @56 dynamic_class_name_variable_properties + 290 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @53 object_property . @54 dynamic_class_name_variable_properties - $default reduce using rule 291 (@56) + $default reduce using rule 289 (@54) - @56 go to state 501 + @54 go to state 501 state 445 @@ -13848,23 +13842,23 @@ state 446 state 447 - 155 non_empty_function_call_parameter_list: '&' w_variable . + 153 non_empty_function_call_parameter_list: '&' w_variable . - $default reduce using rule 155 (non_empty_function_call_parameter_list) + $default reduce using rule 153 (non_empty_function_call_parameter_list) state 448 - 280 function_call: T_STRING '(' @51 function_call_parameter_list ')' . + 278 function_call: T_STRING '(' @49 function_call_parameter_list ')' . - $default reduce using rule 280 (function_call) + $default reduce using rule 278 (function_call) state 449 - 156 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' . expr_without_variable - 157 | non_empty_function_call_parameter_list ',' . variable - 158 | non_empty_function_call_parameter_list ',' . '&' w_variable + 154 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' . expr_without_variable + 155 | non_empty_function_call_parameter_list ',' . variable + 156 | non_empty_function_call_parameter_list ',' . '&' w_variable T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -13999,7 +13993,7 @@ state 452 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 198 (for_expr) + $default reduce using rule 196 (for_expr) for_expr go to state 509 non_empty_for_expr go to state 247 @@ -14025,7 +14019,7 @@ state 452 state 453 - 201 non_empty_for_expr: non_empty_for_expr ',' @40 . expr + 199 non_empty_for_expr: non_empty_for_expr ',' @38 . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -14094,25 +14088,49 @@ state 453 state 454 - 57 unticked_statement: T_FOREACH '(' expr_without_variable @18 T_AS . @19 variable foreach_optional_arg ')' @20 foreach_statement + 55 unticked_statement: T_FOREACH '(' expr_without_variable T_AS @17 . variable foreach_optional_arg ')' @18 foreach_statement - $default reduce using rule 55 (@19) + T_STRING shift, and go to state 120 + T_VARIABLE shift, and go to state 33 + '$' shift, and go to state 71 - @19 go to state 511 + function_call go to state 85 + fully_qualified_class_name go to state 121 + variable go to state 511 + variable_without_objects go to state 93 + static_member go to state 94 + base_variable_with_function_calls go to state 95 + base_variable go to state 96 + reference_variable go to state 97 + compound_variable go to state 98 + simple_indirect_reference go to state 99 state 455 - 53 unticked_statement: T_FOREACH '(' variable @15 T_AS . @16 foreach_variable foreach_optional_arg ')' @17 foreach_statement + 52 unticked_statement: T_FOREACH '(' variable T_AS @15 . foreach_variable foreach_optional_arg ')' @16 foreach_statement - $default reduce using rule 51 (@16) + '&' shift, and go to state 512 + T_STRING shift, and go to state 120 + T_VARIABLE shift, and go to state 33 + '$' shift, and go to state 71 - @16 go to state 512 + foreach_variable go to state 513 + function_call go to state 85 + fully_qualified_class_name go to state 121 + variable go to state 514 + variable_without_objects go to state 93 + static_member go to state 94 + base_variable_with_function_calls go to state 95 + base_variable go to state 96 + reference_variable go to state 97 + compound_variable go to state 98 + simple_indirect_reference go to state 99 state 456 - 113 declare_list: T_STRING '=' . static_scalar + 111 declare_list: T_STRING '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -14128,20 +14146,20 @@ state 456 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 513 + static_scalar go to state 515 static_class_constant go to state 390 state 457 - 114 declare_list: declare_list ',' . T_STRING '=' static_scalar + 112 declare_list: declare_list ',' . T_STRING '=' static_scalar - T_STRING shift, and go to state 514 + T_STRING shift, and go to state 516 state 458 - 59 unticked_statement: T_DECLARE @21 '(' declare_list ')' . declare_statement + 57 unticked_statement: T_DECLARE @19 '(' declare_list ')' . declare_statement T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -14149,7 +14167,7 @@ state 458 T_INCLUDE_ONCE shift, and go to state 8 T_INCLUDE shift, and go to state 9 T_PRINT shift, and go to state 10 - ':' shift, and go to state 515 + ':' shift, and go to state 517 '+' shift, and go to state 11 '-' shift, and go to state 12 '!' shift, and go to state 13 @@ -14209,9 +14227,9 @@ state 458 '"' shift, and go to state 73 ''' shift, and go to state 74 - statement go to state 516 + statement go to state 518 unticked_statement go to state 77 - declare_statement go to state 517 + declare_statement go to state 519 expr_without_variable go to state 84 function_call go to state 85 fully_qualified_class_name go to state 86 @@ -14236,57 +14254,57 @@ state 459 35 unticked_statement: T_SWITCH '(' expr ')' @14 . switch_case_list - ':' shift, and go to state 518 - '{' shift, and go to state 519 + ':' shift, and go to state 520 + '{' shift, and go to state 521 - switch_case_list go to state 520 + switch_case_list go to state 522 state 460 - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference T_STRING @30 . '(' parameter_list ')' '{' inner_statement_list '}' + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference T_STRING @28 . '(' parameter_list ')' '{' inner_statement_list '}' - '(' shift, and go to state 521 + '(' shift, and go to state 523 state 461 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' . T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' . T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches - T_CATCH shift, and go to state 522 + T_CATCH shift, and go to state 524 state 462 - 163 global_var: '$' '{' expr '}' . + 161 global_var: '$' '{' expr '}' . - $default reduce using rule 163 (global_var) + $default reduce using rule 161 (global_var) state 463 - 312 static_scalar: '+' static_scalar . + 310 static_scalar: '+' static_scalar . - $default reduce using rule 312 (static_scalar) + $default reduce using rule 310 (static_scalar) state 464 - 313 static_scalar: '-' static_scalar . + 311 static_scalar: '-' static_scalar . - $default reduce using rule 313 (static_scalar) + $default reduce using rule 311 (static_scalar) state 465 - 316 static_class_constant: T_STRING T_PAAMAYIM_NEKUDOTAYIM . T_STRING + 314 static_class_constant: T_STRING T_PAAMAYIM_NEKUDOTAYIM . T_STRING - T_STRING shift, and go to state 523 + T_STRING shift, and go to state 525 state 466 - 314 static_scalar: T_ARRAY '(' . static_array_pair_list ')' + 312 static_scalar: T_ARRAY '(' . static_array_pair_list ')' '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -14301,18 +14319,18 @@ state 466 T_LINE shift, and go to state 65 T_FILE shift, and go to state 66 - $default reduce using rule 324 (static_array_pair_list) + $default reduce using rule 322 (static_array_pair_list) common_scalar go to state 388 - static_scalar go to state 524 + static_scalar go to state 526 static_class_constant go to state 390 - static_array_pair_list go to state 525 - non_empty_static_array_pair_list go to state 526 + static_array_pair_list go to state 527 + non_empty_static_array_pair_list go to state 528 state 467 - 165 static_var_list: static_var_list ',' T_VARIABLE '=' . static_scalar + 163 static_var_list: static_var_list ',' T_VARIABLE '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -14328,15 +14346,15 @@ state 467 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 527 + static_scalar go to state 529 static_class_constant go to state 390 state 468 - 76 unset_variables: unset_variables ',' unset_variable . + 74 unset_variables: unset_variables ',' unset_variable . - $default reduce using rule 76 (unset_variables) + $default reduce using rule 74 (unset_variables) state 469 @@ -14348,7 +14366,7 @@ state 469 state 470 - 422 isset_variables: isset_variables ',' @66 . variable + 420 isset_variables: isset_variables ',' @64 . variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -14356,7 +14374,7 @@ state 470 function_call go to state 85 fully_qualified_class_name go to state 121 - variable go to state 528 + variable go to state 530 variable_without_objects go to state 93 static_member go to state 94 base_variable_with_function_calls go to state 95 @@ -14368,23 +14386,23 @@ state 470 state 471 - 379 assignment_list_element: T_LIST '(' . @64 assignment_list ')' + 377 assignment_list_element: T_LIST '(' . @62 assignment_list ')' - $default reduce using rule 378 (@64) + $default reduce using rule 376 (@62) - @64 go to state 529 + @62 go to state 531 state 472 - 375 assignment_list: assignment_list ',' . assignment_list_element + 373 assignment_list: assignment_list ',' . assignment_list_element T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 T_LIST shift, and go to state 398 '$' shift, and go to state 71 - $default reduce using rule 380 (assignment_list_element) + $default reduce using rule 378 (assignment_list_element) function_call go to state 85 fully_qualified_class_name go to state 121 @@ -14396,26 +14414,26 @@ state 472 reference_variable go to state 97 compound_variable go to state 98 simple_indirect_reference go to state 99 - assignment_list_element go to state 530 + assignment_list_element go to state 532 state 473 - 204 expr_without_variable: T_LIST '(' @41 assignment_list ')' . '=' expr + 202 expr_without_variable: T_LIST '(' @39 assignment_list ')' . '=' expr - '=' shift, and go to state 531 + '=' shift, and go to state 533 state 474 - 336 w_variable: variable @57 . + 334 w_variable: variable @55 . - $default reduce using rule 336 (w_variable) + $default reduce using rule 334 (w_variable) state 475 - 389 non_empty_array_pair_list: expr T_DOUBLE_ARROW '&' . w_variable + 387 non_empty_array_pair_list: expr T_DOUBLE_ARROW '&' . w_variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -14423,7 +14441,7 @@ state 475 function_call go to state 85 fully_qualified_class_name go to state 121 - w_variable go to state 532 + w_variable go to state 534 variable go to state 403 variable_without_objects go to state 93 static_member go to state 94 @@ -14436,33 +14454,33 @@ state 475 state 476 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 385 non_empty_array_pair_list: expr T_DOUBLE_ARROW expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 383 non_empty_array_pair_list: expr T_DOUBLE_ARROW expr . T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -14491,12 +14509,12 @@ state 476 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 385 (non_empty_array_pair_list) + $default reduce using rule 383 (non_empty_array_pair_list) state 477 - 388 non_empty_array_pair_list: non_empty_array_pair_list ',' '&' . w_variable + 386 non_empty_array_pair_list: non_empty_array_pair_list ',' '&' . w_variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -14504,7 +14522,7 @@ state 477 function_call go to state 85 fully_qualified_class_name go to state 121 - w_variable go to state 533 + w_variable go to state 535 variable go to state 403 variable_without_objects go to state 93 static_member go to state 94 @@ -14517,35 +14535,35 @@ state 477 state 478 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 383 non_empty_array_pair_list: non_empty_array_pair_list ',' expr . T_DOUBLE_ARROW expr - 384 | non_empty_array_pair_list ',' expr . - 387 | non_empty_array_pair_list ',' expr . T_DOUBLE_ARROW '&' w_variable + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 381 non_empty_array_pair_list: non_empty_array_pair_list ',' expr . T_DOUBLE_ARROW expr + 382 | non_empty_array_pair_list ',' expr . + 385 | non_empty_array_pair_list ',' expr . T_DOUBLE_ARROW '&' w_variable T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -14573,32 +14591,32 @@ state 478 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - T_DOUBLE_ARROW shift, and go to state 534 + T_DOUBLE_ARROW shift, and go to state 536 - $default reduce using rule 384 (non_empty_array_pair_list) + $default reduce using rule 382 (non_empty_array_pair_list) state 479 - 405 encaps_var: T_VARIABLE '[' @65 . encaps_var_offset ']' + 403 encaps_var: T_VARIABLE '[' @63 . encaps_var_offset ']' - T_STRING shift, and go to state 535 - T_VARIABLE shift, and go to state 536 - T_NUM_STRING shift, and go to state 537 + T_STRING shift, and go to state 537 + T_VARIABLE shift, and go to state 538 + T_NUM_STRING shift, and go to state 539 - encaps_var_offset go to state 538 + encaps_var_offset go to state 540 state 480 - 406 encaps_var: T_VARIABLE T_OBJECT_OPERATOR T_STRING . + 404 encaps_var: T_VARIABLE T_OBJECT_OPERATOR T_STRING . - $default reduce using rule 406 (encaps_var) + $default reduce using rule 404 (encaps_var) state 481 - 408 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' . expr ']' '}' + 406 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' . expr ']' '}' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -14650,7 +14668,7 @@ state 481 fully_qualified_class_name go to state 86 common_scalar go to state 87 scalar go to state 88 - expr go to state 539 + expr go to state 541 r_variable go to state 90 rw_variable go to state 91 variable go to state 92 @@ -14667,71 +14685,71 @@ state 481 state 482 - 407 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES expr '}' . + 405 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES expr '}' . - $default reduce using rule 407 (encaps_var) + $default reduce using rule 405 (encaps_var) state 483 - 409 encaps_var: T_CURLY_OPEN variable '}' . + 407 encaps_var: T_CURLY_OPEN variable '}' . - $default reduce using rule 409 (encaps_var) + $default reduce using rule 407 (encaps_var) state 484 15 inner_statement: T_HALT_COMPILER '(' . ')' ';' - ')' shift, and go to state 540 + ')' shift, and go to state 542 state 485 - 100 implements_list: T_IMPLEMENTS . interface_list + 98 implements_list: T_IMPLEMENTS . interface_list T_STRING shift, and go to state 419 - interface_list go to state 541 + interface_list go to state 543 fully_qualified_class_name go to state 488 state 486 - 88 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @31 implements_list . '{' class_statement_list '}' + 86 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @29 implements_list . '{' class_statement_list '}' - '{' shift, and go to state 542 + '{' shift, and go to state 544 state 487 - 98 interface_extends_list: T_EXTENDS interface_list . - 102 interface_list: interface_list . ',' fully_qualified_class_name + 96 interface_extends_list: T_EXTENDS interface_list . + 100 interface_list: interface_list . ',' fully_qualified_class_name - ',' shift, and go to state 543 + ',' shift, and go to state 545 - $default reduce using rule 98 (interface_extends_list) + $default reduce using rule 96 (interface_extends_list) state 488 - 101 interface_list: fully_qualified_class_name . + 99 interface_list: fully_qualified_class_name . - $default reduce using rule 101 (interface_list) + $default reduce using rule 99 (interface_list) state 489 - 90 unticked_class_declaration_statement: interface_entry T_STRING @32 interface_extends_list '{' . class_statement_list '}' + 88 unticked_class_declaration_statement: interface_entry T_STRING @30 interface_extends_list '{' . class_statement_list '}' - $default reduce using rule 169 (class_statement_list) + $default reduce using rule 167 (class_statement_list) - class_statement_list go to state 544 + class_statement_list go to state 546 state 490 - 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @52 . function_call_parameter_list ')' + 280 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @50 . function_call_parameter_list ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -14779,9 +14797,9 @@ state 490 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 152 (function_call_parameter_list) + $default reduce using rule 150 (function_call_parameter_list) - function_call_parameter_list go to state 545 + function_call_parameter_list go to state 547 non_empty_function_call_parameter_list go to state 366 expr_without_variable go to state 367 function_call go to state 85 @@ -14805,7 +14823,7 @@ state 490 state 491 - 284 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @53 . function_call_parameter_list ')' + 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @51 . function_call_parameter_list ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -14853,9 +14871,9 @@ state 491 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 152 (function_call_parameter_list) + $default reduce using rule 150 (function_call_parameter_list) - function_call_parameter_list go to state 546 + function_call_parameter_list go to state 548 non_empty_function_call_parameter_list go to state 366 expr_without_variable go to state 367 function_call go to state 85 @@ -14879,58 +14897,58 @@ state 491 state 492 - 263 expr_without_variable: expr '?' @48 expr ':' . @49 expr + 261 expr_without_variable: expr '?' @46 expr ':' . @47 expr - $default reduce using rule 262 (@49) + $default reduce using rule 260 (@47) - @49 go to state 547 + @47 go to state 549 state 493 - 208 expr_without_variable: variable '=' '&' T_NEW class_name_reference . @42 ctor_arguments + 206 expr_without_variable: variable '=' '&' T_NEW class_name_reference . @40 ctor_arguments - $default reduce using rule 207 (@42) + $default reduce using rule 205 (@40) - @42 go to state 548 + @40 go to state 550 state 494 - 286 function_call: variable_without_objects '(' @54 function_call_parameter_list ')' . + 284 function_call: variable_without_objects '(' @52 function_call_parameter_list ')' . - $default reduce using rule 286 (function_call) + $default reduce using rule 284 (function_call) state 495 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 372 variable_name: '{' expr . '}' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 370 variable_name: '{' expr . '}' T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -14958,30 +14976,30 @@ state 495 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - '}' shift, and go to state 549 + '}' shift, and go to state 551 state 496 - 367 object_property: variable_without_objects @63 . + 365 object_property: variable_without_objects @61 . - $default reduce using rule 367 (object_property) + $default reduce using rule 365 (object_property) state 497 - 341 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @59 object_property @60 . method_or_not variable_properties + 339 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @57 object_property @58 . method_or_not variable_properties - '(' shift, and go to state 550 + '(' shift, and go to state 552 - $default reduce using rule 349 (method_or_not) + $default reduce using rule 347 (method_or_not) - method_or_not go to state 551 + method_or_not go to state 553 state 498 - 368 object_dim_list: object_dim_list '[' . dim_offset ']' + 366 object_dim_list: object_dim_list '[' . dim_offset ']' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -15028,7 +15046,7 @@ state 498 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 363 (dim_offset) + $default reduce using rule 361 (dim_offset) expr_without_variable go to state 84 function_call go to state 85 @@ -15045,7 +15063,7 @@ state 498 base_variable go to state 96 reference_variable go to state 97 compound_variable go to state 98 - dim_offset go to state 552 + dim_offset go to state 554 simple_indirect_reference go to state 99 internal_functions_in_yacc go to state 100 class_constant go to state 101 @@ -15053,7 +15071,7 @@ state 498 state 499 - 369 object_dim_list: object_dim_list '{' . expr '}' + 367 object_dim_list: object_dim_list '{' . expr '}' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -15105,7 +15123,7 @@ state 499 fully_qualified_class_name go to state 86 common_scalar go to state 87 scalar go to state 88 - expr go to state 553 + expr go to state 555 r_variable go to state 90 rw_variable go to state 91 variable go to state 92 @@ -15122,18 +15140,18 @@ state 499 state 500 - 301 ctor_arguments: '(' function_call_parameter_list ')' . + 299 ctor_arguments: '(' function_call_parameter_list ')' . - $default reduce using rule 301 (ctor_arguments) + $default reduce using rule 299 (ctor_arguments) state 501 - 292 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @55 object_property @56 . dynamic_class_name_variable_properties + 290 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @53 object_property @54 . dynamic_class_name_variable_properties - $default reduce using rule 295 (dynamic_class_name_variable_properties) + $default reduce using rule 293 (dynamic_class_name_variable_properties) - dynamic_class_name_variable_properties go to state 554 + dynamic_class_name_variable_properties go to state 556 state 502 @@ -15142,7 +15160,7 @@ state 502 $default reduce using rule 11 (inner_statement_list) - inner_statement_list go to state 555 + inner_statement_list go to state 557 state 503 @@ -15151,12 +15169,12 @@ state 503 $default reduce using rule 19 (@4) - @4 go to state 556 + @4 go to state 558 state 504 - 158 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' '&' . w_variable + 156 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' '&' . w_variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -15164,7 +15182,7 @@ state 504 function_call go to state 85 fully_qualified_class_name go to state 121 - w_variable go to state 557 + w_variable go to state 559 variable go to state 403 variable_without_objects go to state 93 static_member go to state 94 @@ -15177,33 +15195,33 @@ state 504 state 505 - 156 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' expr_without_variable . - 333 expr: expr_without_variable . + 154 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' expr_without_variable . + 331 expr: expr_without_variable . - ',' reduce using rule 156 (non_empty_function_call_parameter_list) - ')' reduce using rule 156 (non_empty_function_call_parameter_list) - $default reduce using rule 333 (expr) + ',' reduce using rule 154 (non_empty_function_call_parameter_list) + ')' reduce using rule 154 (non_empty_function_call_parameter_list) + $default reduce using rule 331 (expr) state 506 - 157 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' variable . - 205 expr_without_variable: variable . '=' expr - 206 | variable . '=' '&' variable - 208 | variable . '=' '&' T_NEW class_name_reference @42 ctor_arguments - 212 | variable . T_PLUS_EQUAL expr - 213 | variable . T_MINUS_EQUAL expr - 214 | variable . T_MUL_EQUAL expr - 215 | variable . T_DIV_EQUAL expr - 216 | variable . T_CONCAT_EQUAL expr - 217 | variable . T_MOD_EQUAL expr - 218 | variable . T_AND_EQUAL expr - 219 | variable . T_OR_EQUAL expr - 220 | variable . T_XOR_EQUAL expr - 221 | variable . T_SL_EQUAL expr - 222 | variable . T_SR_EQUAL expr - 334 r_variable: variable . - 338 rw_variable: variable . @58 + 155 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' variable . + 203 expr_without_variable: variable . '=' expr + 204 | variable . '=' '&' variable + 206 | variable . '=' '&' T_NEW class_name_reference @40 ctor_arguments + 210 | variable . T_PLUS_EQUAL expr + 211 | variable . T_MINUS_EQUAL expr + 212 | variable . T_MUL_EQUAL expr + 213 | variable . T_DIV_EQUAL expr + 214 | variable . T_CONCAT_EQUAL expr + 215 | variable . T_MOD_EQUAL expr + 216 | variable . T_AND_EQUAL expr + 217 | variable . T_OR_EQUAL expr + 218 | variable . T_XOR_EQUAL expr + 219 | variable . T_SL_EQUAL expr + 220 | variable . T_SR_EQUAL expr + 332 r_variable: variable . + 336 rw_variable: variable . @56 '=' shift, and go to state 212 T_SR_EQUAL shift, and go to state 213 @@ -15218,13 +15236,13 @@ state 506 T_MINUS_EQUAL shift, and go to state 222 T_PLUS_EQUAL shift, and go to state 223 - ',' reduce using rule 157 (non_empty_function_call_parameter_list) - T_DEC reduce using rule 337 (@58) - T_INC reduce using rule 337 (@58) - ')' reduce using rule 157 (non_empty_function_call_parameter_list) - $default reduce using rule 334 (r_variable) + ',' reduce using rule 155 (non_empty_function_call_parameter_list) + T_DEC reduce using rule 335 (@56) + T_INC reduce using rule 335 (@56) + ')' reduce using rule 155 (non_empty_function_call_parameter_list) + $default reduce using rule 332 (r_variable) - @58 go to state 224 + @56 go to state 224 state 507 @@ -15281,7 +15299,7 @@ state 507 fully_qualified_class_name go to state 86 common_scalar go to state 87 scalar go to state 88 - expr go to state 558 + expr go to state 560 r_variable go to state 90 rw_variable go to state 91 variable go to state 92 @@ -15306,7 +15324,7 @@ state 508 T_INCLUDE_ONCE shift, and go to state 8 T_INCLUDE shift, and go to state 9 T_PRINT shift, and go to state 10 - ':' shift, and go to state 559 + ':' shift, and go to state 561 '+' shift, and go to state 11 '-' shift, and go to state 12 '!' shift, and go to state 13 @@ -15366,9 +15384,9 @@ state 508 '"' shift, and go to state 73 ''' shift, and go to state 74 - statement go to state 560 + statement go to state 562 unticked_statement go to state 77 - while_statement go to state 561 + while_statement go to state 563 expr_without_variable go to state 84 function_call go to state 85 fully_qualified_class_name go to state 86 @@ -15393,38 +15411,38 @@ state 509 33 unticked_statement: T_FOR '(' for_expr ';' @11 for_expr . ';' @12 for_expr ')' @13 for_statement - ';' shift, and go to state 562 + ';' shift, and go to state 564 state 510 - 201 non_empty_for_expr: non_empty_for_expr ',' @40 expr . - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 199 non_empty_for_expr: non_empty_for_expr ',' @38 expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -15453,42 +15471,31 @@ state 510 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 201 (non_empty_for_expr) + $default reduce using rule 199 (non_empty_for_expr) state 511 - 57 unticked_statement: T_FOREACH '(' expr_without_variable @18 T_AS @19 . variable foreach_optional_arg ')' @20 foreach_statement + 55 unticked_statement: T_FOREACH '(' expr_without_variable T_AS @17 variable . foreach_optional_arg ')' @18 foreach_statement - T_STRING shift, and go to state 120 - T_VARIABLE shift, and go to state 33 - '$' shift, and go to state 71 + T_DOUBLE_ARROW shift, and go to state 565 - function_call go to state 85 - fully_qualified_class_name go to state 121 - variable go to state 563 - variable_without_objects go to state 93 - static_member go to state 94 - base_variable_with_function_calls go to state 95 - base_variable go to state 96 - reference_variable go to state 97 - compound_variable go to state 98 - simple_indirect_reference go to state 99 + $default reduce using rule 101 (foreach_optional_arg) + + foreach_optional_arg go to state 566 state 512 - 53 unticked_statement: T_FOREACH '(' variable @15 T_AS @16 . foreach_variable foreach_optional_arg ')' @17 foreach_statement + 104 foreach_variable: '&' . variable - '&' shift, and go to state 564 T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 '$' shift, and go to state 71 - foreach_variable go to state 565 function_call go to state 85 fully_qualified_class_name go to state 121 - variable go to state 566 + variable go to state 567 variable_without_objects go to state 93 static_member go to state 94 base_variable_with_function_calls go to state 95 @@ -15500,155 +15507,173 @@ state 512 state 513 - 113 declare_list: T_STRING '=' static_scalar . + 52 unticked_statement: T_FOREACH '(' variable T_AS @15 foreach_variable . foreach_optional_arg ')' @16 foreach_statement + + T_DOUBLE_ARROW shift, and go to state 565 + + $default reduce using rule 101 (foreach_optional_arg) - $default reduce using rule 113 (declare_list) + foreach_optional_arg go to state 568 state 514 - 114 declare_list: declare_list ',' T_STRING . '=' static_scalar + 103 foreach_variable: variable . - '=' shift, and go to state 567 + $default reduce using rule 103 (foreach_variable) state 515 - 112 declare_statement: ':' . inner_statement_list T_ENDDECLARE ';' - - $default reduce using rule 11 (inner_statement_list) + 111 declare_list: T_STRING '=' static_scalar . - inner_statement_list go to state 568 + $default reduce using rule 111 (declare_list) state 516 - 111 declare_statement: statement . + 112 declare_list: declare_list ',' T_STRING . '=' static_scalar - $default reduce using rule 111 (declare_statement) + '=' shift, and go to state 569 state 517 - 59 unticked_statement: T_DECLARE @21 '(' declare_list ')' declare_statement . - - $default reduce using rule 59 (unticked_statement) + 110 declare_statement: ':' . inner_statement_list T_ENDDECLARE ';' + $default reduce using rule 11 (inner_statement_list) -state 518 + inner_statement_list go to state 570 - 117 switch_case_list: ':' . case_list T_ENDSWITCH ';' - 118 | ':' . ';' case_list T_ENDSWITCH ';' - ';' shift, and go to state 569 +state 518 - $default reduce using rule 119 (case_list) + 109 declare_statement: statement . - case_list go to state 570 + $default reduce using rule 109 (declare_statement) state 519 - 115 switch_case_list: '{' . case_list '}' - 116 | '{' . ';' case_list '}' + 57 unticked_statement: T_DECLARE @19 '(' declare_list ')' declare_statement . - ';' shift, and go to state 571 + $default reduce using rule 57 (unticked_statement) - $default reduce using rule 119 (case_list) - case_list go to state 572 +state 520 + 115 switch_case_list: ':' . case_list T_ENDSWITCH ';' + 116 | ':' . ';' case_list T_ENDSWITCH ';' -state 520 + ';' shift, and go to state 571 - 35 unticked_statement: T_SWITCH '(' expr ')' @14 switch_case_list . + $default reduce using rule 117 (case_list) - $default reduce using rule 35 (unticked_statement) + case_list go to state 572 state 521 - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference T_STRING @30 '(' . parameter_list ')' '{' inner_statement_list '}' + 113 switch_case_list: '{' . case_list '}' + 114 | '{' . ';' case_list '}' - T_STRING shift, and go to state 573 - T_ARRAY shift, and go to state 574 + ';' shift, and go to state 573 - ')' reduce using rule 139 (parameter_list) - $default reduce using rule 148 (optional_class_type) + $default reduce using rule 117 (case_list) - parameter_list go to state 575 - non_empty_parameter_list go to state 576 - optional_class_type go to state 577 + case_list go to state 574 state 522 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH . '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 35 unticked_statement: T_SWITCH '(' expr ')' @14 switch_case_list . - '(' shift, and go to state 578 + $default reduce using rule 35 (unticked_statement) state 523 - 316 static_class_constant: T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING . + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference T_STRING @28 '(' . parameter_list ')' '{' inner_statement_list '}' - $default reduce using rule 316 (static_class_constant) + T_STRING shift, and go to state 575 + T_ARRAY shift, and go to state 576 + ')' reduce using rule 137 (parameter_list) + $default reduce using rule 146 (optional_class_type) -state 524 + parameter_list go to state 577 + non_empty_parameter_list go to state 578 + optional_class_type go to state 579 - 330 non_empty_static_array_pair_list: static_scalar . T_DOUBLE_ARROW static_scalar - 331 | static_scalar . - T_DOUBLE_ARROW shift, and go to state 579 +state 524 - $default reduce using rule 331 (non_empty_static_array_pair_list) + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH . '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches + + '(' shift, and go to state 580 state 525 - 314 static_scalar: T_ARRAY '(' static_array_pair_list . ')' + 314 static_class_constant: T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING . - ')' shift, and go to state 580 + $default reduce using rule 314 (static_class_constant) state 526 - 325 static_array_pair_list: non_empty_static_array_pair_list . possible_comma - 328 non_empty_static_array_pair_list: non_empty_static_array_pair_list . ',' static_scalar T_DOUBLE_ARROW static_scalar - 329 | non_empty_static_array_pair_list . ',' static_scalar - - ',' shift, and go to state 581 + 328 non_empty_static_array_pair_list: static_scalar . T_DOUBLE_ARROW static_scalar + 329 | static_scalar . - $default reduce using rule 326 (possible_comma) + T_DOUBLE_ARROW shift, and go to state 581 - possible_comma go to state 582 + $default reduce using rule 329 (non_empty_static_array_pair_list) state 527 - 165 static_var_list: static_var_list ',' T_VARIABLE '=' static_scalar . + 312 static_scalar: T_ARRAY '(' static_array_pair_list . ')' - $default reduce using rule 165 (static_var_list) + ')' shift, and go to state 582 state 528 - 422 isset_variables: isset_variables ',' @66 variable . + 323 static_array_pair_list: non_empty_static_array_pair_list . possible_comma + 326 non_empty_static_array_pair_list: non_empty_static_array_pair_list . ',' static_scalar T_DOUBLE_ARROW static_scalar + 327 | non_empty_static_array_pair_list . ',' static_scalar - $default reduce using rule 422 (isset_variables) + ',' shift, and go to state 583 + + $default reduce using rule 324 (possible_comma) + + possible_comma go to state 584 state 529 - 379 assignment_list_element: T_LIST '(' @64 . assignment_list ')' + 163 static_var_list: static_var_list ',' T_VARIABLE '=' static_scalar . + + $default reduce using rule 163 (static_var_list) + + +state 530 + + 420 isset_variables: isset_variables ',' @64 variable . + + $default reduce using rule 420 (isset_variables) + + +state 531 + + 377 assignment_list_element: T_LIST '(' @62 . assignment_list ')' T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 T_LIST shift, and go to state 398 '$' shift, and go to state 71 - $default reduce using rule 380 (assignment_list_element) + $default reduce using rule 378 (assignment_list_element) function_call go to state 85 fully_qualified_class_name go to state 121 @@ -15660,20 +15685,20 @@ state 529 reference_variable go to state 97 compound_variable go to state 98 simple_indirect_reference go to state 99 - assignment_list go to state 583 + assignment_list go to state 585 assignment_list_element go to state 401 -state 530 +state 532 - 375 assignment_list: assignment_list ',' assignment_list_element . + 373 assignment_list: assignment_list ',' assignment_list_element . - $default reduce using rule 375 (assignment_list) + $default reduce using rule 373 (assignment_list) -state 531 +state 533 - 204 expr_without_variable: T_LIST '(' @41 assignment_list ')' '=' . expr + 202 expr_without_variable: T_LIST '(' @39 assignment_list ')' '=' . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -15725,7 +15750,7 @@ state 531 fully_qualified_class_name go to state 86 common_scalar go to state 87 scalar go to state 88 - expr go to state 584 + expr go to state 586 r_variable go to state 90 rw_variable go to state 91 variable go to state 92 @@ -15740,24 +15765,24 @@ state 531 class_constant go to state 101 -state 532 +state 534 - 389 non_empty_array_pair_list: expr T_DOUBLE_ARROW '&' w_variable . + 387 non_empty_array_pair_list: expr T_DOUBLE_ARROW '&' w_variable . - $default reduce using rule 389 (non_empty_array_pair_list) + $default reduce using rule 387 (non_empty_array_pair_list) -state 533 +state 535 - 388 non_empty_array_pair_list: non_empty_array_pair_list ',' '&' w_variable . + 386 non_empty_array_pair_list: non_empty_array_pair_list ',' '&' w_variable . - $default reduce using rule 388 (non_empty_array_pair_list) + $default reduce using rule 386 (non_empty_array_pair_list) -state 534 +state 536 - 383 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW . expr - 387 | non_empty_array_pair_list ',' expr T_DOUBLE_ARROW . '&' w_variable + 381 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW . expr + 385 | non_empty_array_pair_list ',' expr T_DOUBLE_ARROW . '&' w_variable T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -15765,7 +15790,7 @@ state 534 T_INCLUDE_ONCE shift, and go to state 8 T_INCLUDE shift, and go to state 9 T_PRINT shift, and go to state 10 - '&' shift, and go to state 585 + '&' shift, and go to state 587 '+' shift, and go to state 11 '-' shift, and go to state 12 '!' shift, and go to state 13 @@ -15810,7 +15835,7 @@ state 534 fully_qualified_class_name go to state 86 common_scalar go to state 87 scalar go to state 88 - expr go to state 586 + expr go to state 588 r_variable go to state 90 rw_variable go to state 91 variable go to state 92 @@ -15825,63 +15850,63 @@ state 534 class_constant go to state 101 -state 535 +state 537 - 410 encaps_var_offset: T_STRING . + 408 encaps_var_offset: T_STRING . - $default reduce using rule 410 (encaps_var_offset) + $default reduce using rule 408 (encaps_var_offset) -state 536 +state 538 - 412 encaps_var_offset: T_VARIABLE . + 410 encaps_var_offset: T_VARIABLE . - $default reduce using rule 412 (encaps_var_offset) + $default reduce using rule 410 (encaps_var_offset) -state 537 +state 539 - 411 encaps_var_offset: T_NUM_STRING . + 409 encaps_var_offset: T_NUM_STRING . - $default reduce using rule 411 (encaps_var_offset) + $default reduce using rule 409 (encaps_var_offset) -state 538 +state 540 - 405 encaps_var: T_VARIABLE '[' @65 encaps_var_offset . ']' + 403 encaps_var: T_VARIABLE '[' @63 encaps_var_offset . ']' - ']' shift, and go to state 587 + ']' shift, and go to state 589 -state 539 +state 541 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 408 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr . ']' '}' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 406 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr . ']' '}' T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -15909,86 +15934,86 @@ state 539 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - ']' shift, and go to state 588 + ']' shift, and go to state 590 -state 540 +state 542 15 inner_statement: T_HALT_COMPILER '(' ')' . ';' - ';' shift, and go to state 589 + ';' shift, and go to state 591 -state 541 +state 543 - 100 implements_list: T_IMPLEMENTS interface_list . - 102 interface_list: interface_list . ',' fully_qualified_class_name + 98 implements_list: T_IMPLEMENTS interface_list . + 100 interface_list: interface_list . ',' fully_qualified_class_name - ',' shift, and go to state 543 + ',' shift, and go to state 545 - $default reduce using rule 100 (implements_list) + $default reduce using rule 98 (implements_list) -state 542 +state 544 - 88 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @31 implements_list '{' . class_statement_list '}' + 86 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @29 implements_list '{' . class_statement_list '}' - $default reduce using rule 169 (class_statement_list) + $default reduce using rule 167 (class_statement_list) - class_statement_list go to state 590 + class_statement_list go to state 592 -state 543 +state 545 - 102 interface_list: interface_list ',' . fully_qualified_class_name + 100 interface_list: interface_list ',' . fully_qualified_class_name T_STRING shift, and go to state 419 - fully_qualified_class_name go to state 591 + fully_qualified_class_name go to state 593 -state 544 +state 546 - 90 unticked_class_declaration_statement: interface_entry T_STRING @32 interface_extends_list '{' class_statement_list . '}' - 168 class_statement_list: class_statement_list . class_statement + 88 unticked_class_declaration_statement: interface_entry T_STRING @30 interface_extends_list '{' class_statement_list . '}' + 166 class_statement_list: class_statement_list . class_statement - T_CONST shift, and go to state 592 - T_PUBLIC shift, and go to state 593 - T_PROTECTED shift, and go to state 594 - T_PRIVATE shift, and go to state 595 - T_FINAL shift, and go to state 596 - T_ABSTRACT shift, and go to state 597 - T_STATIC shift, and go to state 598 - T_VAR shift, and go to state 599 - '}' shift, and go to state 600 + T_CONST shift, and go to state 594 + T_PUBLIC shift, and go to state 595 + T_PROTECTED shift, and go to state 596 + T_PRIVATE shift, and go to state 597 + T_FINAL shift, and go to state 598 + T_ABSTRACT shift, and go to state 599 + T_STATIC shift, and go to state 600 + T_VAR shift, and go to state 601 + '}' shift, and go to state 602 - $default reduce using rule 180 (method_modifiers) + $default reduce using rule 178 (method_modifiers) - class_statement go to state 601 - variable_modifiers go to state 602 - method_modifiers go to state 603 - non_empty_member_modifiers go to state 604 - member_modifier go to state 605 - class_constant_declaration go to state 606 + class_statement go to state 603 + variable_modifiers go to state 604 + method_modifiers go to state 605 + non_empty_member_modifiers go to state 606 + member_modifier go to state 607 + class_constant_declaration go to state 608 -state 545 +state 547 - 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @52 function_call_parameter_list . ')' + 280 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @50 function_call_parameter_list . ')' - ')' shift, and go to state 607 + ')' shift, and go to state 609 -state 546 +state 548 - 284 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @53 function_call_parameter_list . ')' + 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @51 function_call_parameter_list . ')' - ')' shift, and go to state 608 + ')' shift, and go to state 610 -state 547 +state 549 - 263 expr_without_variable: expr '?' @48 expr ':' @49 . expr + 261 expr_without_variable: expr '?' @46 expr ':' @47 . expr T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -16040,7 +16065,7 @@ state 547 fully_qualified_class_name go to state 86 common_scalar go to state 87 scalar go to state 88 - expr go to state 609 + expr go to state 611 r_variable go to state 90 rw_variable go to state 91 variable go to state 92 @@ -16055,78 +16080,78 @@ state 547 class_constant go to state 101 -state 548 +state 550 - 208 expr_without_variable: variable '=' '&' T_NEW class_name_reference @42 . ctor_arguments + 206 expr_without_variable: variable '=' '&' T_NEW class_name_reference @40 . ctor_arguments '(' shift, and go to state 359 - $default reduce using rule 300 (ctor_arguments) + $default reduce using rule 298 (ctor_arguments) - ctor_arguments go to state 610 + ctor_arguments go to state 612 -state 549 +state 551 - 372 variable_name: '{' expr '}' . + 370 variable_name: '{' expr '}' . - $default reduce using rule 372 (variable_name) + $default reduce using rule 370 (variable_name) -state 550 +state 552 - 348 method_or_not: '(' . @62 function_call_parameter_list ')' + 346 method_or_not: '(' . @60 function_call_parameter_list ')' - $default reduce using rule 347 (@62) + $default reduce using rule 345 (@60) - @62 go to state 611 + @60 go to state 613 -state 551 +state 553 - 341 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @59 object_property @60 method_or_not . variable_properties + 339 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @57 object_property @58 method_or_not . variable_properties - $default reduce using rule 344 (variable_properties) + $default reduce using rule 342 (variable_properties) - variable_properties go to state 612 + variable_properties go to state 614 -state 552 +state 554 - 368 object_dim_list: object_dim_list '[' dim_offset . ']' + 366 object_dim_list: object_dim_list '[' dim_offset . ']' - ']' shift, and go to state 613 + ']' shift, and go to state 615 -state 553 +state 555 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 369 object_dim_list: object_dim_list '{' expr . '}' + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 367 object_dim_list: object_dim_list '{' expr . '}' T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -16154,22 +16179,22 @@ state 553 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - '}' shift, and go to state 614 + '}' shift, and go to state 616 -state 554 +state 556 - 292 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @55 object_property @56 dynamic_class_name_variable_properties . - 294 dynamic_class_name_variable_properties: dynamic_class_name_variable_properties . dynamic_class_name_variable_property + 290 dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR @53 object_property @54 dynamic_class_name_variable_properties . + 292 dynamic_class_name_variable_properties: dynamic_class_name_variable_properties . dynamic_class_name_variable_property - T_OBJECT_OPERATOR shift, and go to state 615 + T_OBJECT_OPERATOR shift, and go to state 617 - $default reduce using rule 292 (dynamic_class_name_reference) + $default reduce using rule 290 (dynamic_class_name_reference) - dynamic_class_name_variable_property go to state 616 + dynamic_class_name_variable_property go to state 618 -state 555 +state 557 10 inner_statement_list: inner_statement_list . @2 inner_statement 23 unticked_statement: T_IF '(' expr ')' ':' @5 inner_statement_list . @6 new_elseif_list new_else_single T_ENDIF ';' @@ -16180,54 +16205,54 @@ state 555 $default reduce using rule 9 (@2) @2 go to state 300 - @6 go to state 617 + @6 go to state 619 -state 556 +state 558 20 unticked_statement: T_IF '(' expr ')' @3 statement @4 . elseif_list else_single - $default reduce using rule 128 (elseif_list) + $default reduce using rule 126 (elseif_list) - elseif_list go to state 618 + elseif_list go to state 620 -state 557 +state 559 - 158 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' '&' w_variable . + 156 non_empty_function_call_parameter_list: non_empty_function_call_parameter_list ',' '&' w_variable . - $default reduce using rule 158 (non_empty_function_call_parameter_list) + $default reduce using rule 156 (non_empty_function_call_parameter_list) -state 558 +state 560 29 unticked_statement: T_DO @9 statement T_WHILE '(' @10 expr . ')' ';' - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -16255,63 +16280,54 @@ state 558 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - ')' shift, and go to state 619 + ')' shift, and go to state 621 -state 559 +state 561 - 127 while_statement: ':' . inner_statement_list T_ENDWHILE ';' + 125 while_statement: ':' . inner_statement_list T_ENDWHILE ';' $default reduce using rule 11 (inner_statement_list) - inner_statement_list go to state 620 + inner_statement_list go to state 622 -state 560 +state 562 - 126 while_statement: statement . + 124 while_statement: statement . - $default reduce using rule 126 (while_statement) + $default reduce using rule 124 (while_statement) -state 561 +state 563 26 unticked_statement: T_WHILE '(' @7 expr ')' @8 while_statement . $default reduce using rule 26 (unticked_statement) -state 562 +state 564 33 unticked_statement: T_FOR '(' for_expr ';' @11 for_expr ';' . @12 for_expr ')' @13 for_statement $default reduce using rule 31 (@12) - @12 go to state 621 - - -state 563 - - 57 unticked_statement: T_FOREACH '(' expr_without_variable @18 T_AS @19 variable . foreach_optional_arg ')' @20 foreach_statement - - T_DOUBLE_ARROW shift, and go to state 622 - - $default reduce using rule 103 (foreach_optional_arg) + @12 go to state 623 - foreach_optional_arg go to state 623 +state 565 -state 564 - - 106 foreach_variable: '&' . variable + 102 foreach_optional_arg: T_DOUBLE_ARROW . foreach_variable + '&' shift, and go to state 512 T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 '$' shift, and go to state 71 + foreach_variable go to state 624 function_call go to state 85 fully_qualified_class_name go to state 121 - variable go to state 624 + variable go to state 514 variable_without_objects go to state 93 static_member go to state 94 base_variable_with_function_calls go to state 95 @@ -16321,27 +16337,30 @@ state 564 simple_indirect_reference go to state 99 -state 565 +state 566 - 53 unticked_statement: T_FOREACH '(' variable @15 T_AS @16 foreach_variable . foreach_optional_arg ')' @17 foreach_statement + 55 unticked_statement: T_FOREACH '(' expr_without_variable T_AS @17 variable foreach_optional_arg . ')' @18 foreach_statement - T_DOUBLE_ARROW shift, and go to state 622 + ')' shift, and go to state 625 - $default reduce using rule 103 (foreach_optional_arg) - foreach_optional_arg go to state 625 +state 567 + 104 foreach_variable: '&' variable . -state 566 + $default reduce using rule 104 (foreach_variable) - 105 foreach_variable: variable . - $default reduce using rule 105 (foreach_variable) +state 568 + 52 unticked_statement: T_FOREACH '(' variable T_AS @15 foreach_variable foreach_optional_arg . ')' @16 foreach_statement -state 567 + ')' shift, and go to state 626 - 114 declare_list: declare_list ',' T_STRING '=' . static_scalar + +state 569 + + 112 declare_list: declare_list ',' T_STRING '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -16357,119 +16376,119 @@ state 567 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 626 + static_scalar go to state 627 static_class_constant go to state 390 -state 568 +state 570 10 inner_statement_list: inner_statement_list . @2 inner_statement - 112 declare_statement: ':' inner_statement_list . T_ENDDECLARE ';' + 110 declare_statement: ':' inner_statement_list . T_ENDDECLARE ';' - T_ENDDECLARE shift, and go to state 627 + T_ENDDECLARE shift, and go to state 628 $default reduce using rule 9 (@2) @2 go to state 300 -state 569 +state 571 - 118 switch_case_list: ':' ';' . case_list T_ENDSWITCH ';' + 116 switch_case_list: ':' ';' . case_list T_ENDSWITCH ';' - $default reduce using rule 119 (case_list) + $default reduce using rule 117 (case_list) - case_list go to state 628 + case_list go to state 629 -state 570 +state 572 - 117 switch_case_list: ':' case_list . T_ENDSWITCH ';' - 121 case_list: case_list . T_CASE expr case_separator @33 inner_statement_list - 123 | case_list . T_DEFAULT case_separator @34 inner_statement_list + 115 switch_case_list: ':' case_list . T_ENDSWITCH ';' + 119 case_list: case_list . T_CASE expr case_separator @31 inner_statement_list + 121 | case_list . T_DEFAULT case_separator @32 inner_statement_list - T_ENDSWITCH shift, and go to state 629 - T_CASE shift, and go to state 630 - T_DEFAULT shift, and go to state 631 + T_ENDSWITCH shift, and go to state 630 + T_CASE shift, and go to state 631 + T_DEFAULT shift, and go to state 632 -state 571 +state 573 - 116 switch_case_list: '{' ';' . case_list '}' + 114 switch_case_list: '{' ';' . case_list '}' - $default reduce using rule 119 (case_list) + $default reduce using rule 117 (case_list) - case_list go to state 632 + case_list go to state 633 -state 572 +state 574 - 115 switch_case_list: '{' case_list . '}' - 121 case_list: case_list . T_CASE expr case_separator @33 inner_statement_list - 123 | case_list . T_DEFAULT case_separator @34 inner_statement_list + 113 switch_case_list: '{' case_list . '}' + 119 case_list: case_list . T_CASE expr case_separator @31 inner_statement_list + 121 | case_list . T_DEFAULT case_separator @32 inner_statement_list - T_CASE shift, and go to state 630 - T_DEFAULT shift, and go to state 631 - '}' shift, and go to state 633 + T_CASE shift, and go to state 631 + T_DEFAULT shift, and go to state 632 + '}' shift, and go to state 634 -state 573 +state 575 - 149 optional_class_type: T_STRING . + 147 optional_class_type: T_STRING . - $default reduce using rule 149 (optional_class_type) + $default reduce using rule 147 (optional_class_type) -state 574 +state 576 - 150 optional_class_type: T_ARRAY . + 148 optional_class_type: T_ARRAY . - $default reduce using rule 150 (optional_class_type) + $default reduce using rule 148 (optional_class_type) -state 575 +state 577 - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference T_STRING @30 '(' parameter_list . ')' '{' inner_statement_list '}' + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference T_STRING @28 '(' parameter_list . ')' '{' inner_statement_list '}' - ')' shift, and go to state 634 + ')' shift, and go to state 635 -state 576 +state 578 - 138 parameter_list: non_empty_parameter_list . - 144 non_empty_parameter_list: non_empty_parameter_list . ',' optional_class_type T_VARIABLE - 145 | non_empty_parameter_list . ',' optional_class_type '&' T_VARIABLE - 146 | non_empty_parameter_list . ',' optional_class_type '&' T_VARIABLE '=' static_scalar - 147 | non_empty_parameter_list . ',' optional_class_type T_VARIABLE '=' static_scalar + 136 parameter_list: non_empty_parameter_list . + 142 non_empty_parameter_list: non_empty_parameter_list . ',' optional_class_type T_VARIABLE + 143 | non_empty_parameter_list . ',' optional_class_type '&' T_VARIABLE + 144 | non_empty_parameter_list . ',' optional_class_type '&' T_VARIABLE '=' static_scalar + 145 | non_empty_parameter_list . ',' optional_class_type T_VARIABLE '=' static_scalar - ',' shift, and go to state 635 + ',' shift, and go to state 636 - $default reduce using rule 138 (parameter_list) + $default reduce using rule 136 (parameter_list) -state 577 +state 579 - 140 non_empty_parameter_list: optional_class_type . T_VARIABLE - 141 | optional_class_type . '&' T_VARIABLE - 142 | optional_class_type . '&' T_VARIABLE '=' static_scalar - 143 | optional_class_type . T_VARIABLE '=' static_scalar + 138 non_empty_parameter_list: optional_class_type . T_VARIABLE + 139 | optional_class_type . '&' T_VARIABLE + 140 | optional_class_type . '&' T_VARIABLE '=' static_scalar + 141 | optional_class_type . T_VARIABLE '=' static_scalar - '&' shift, and go to state 636 - T_VARIABLE shift, and go to state 637 + '&' shift, and go to state 637 + T_VARIABLE shift, and go to state 638 -state 578 +state 580 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' . @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' . @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches - $default reduce using rule 62 (@23) + $default reduce using rule 60 (@21) - @23 go to state 638 + @21 go to state 639 -state 579 +state 581 - 330 non_empty_static_array_pair_list: static_scalar T_DOUBLE_ARROW . static_scalar + 328 non_empty_static_array_pair_list: static_scalar T_DOUBLE_ARROW . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -16485,22 +16504,22 @@ state 579 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 639 + static_scalar go to state 640 static_class_constant go to state 390 -state 580 +state 582 - 314 static_scalar: T_ARRAY '(' static_array_pair_list ')' . + 312 static_scalar: T_ARRAY '(' static_array_pair_list ')' . - $default reduce using rule 314 (static_scalar) + $default reduce using rule 312 (static_scalar) -state 581 +state 583 - 327 possible_comma: ',' . - 328 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' . static_scalar T_DOUBLE_ARROW static_scalar - 329 | non_empty_static_array_pair_list ',' . static_scalar + 325 possible_comma: ',' . + 326 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' . static_scalar T_DOUBLE_ARROW static_scalar + 327 | non_empty_static_array_pair_list ',' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -16515,58 +16534,58 @@ state 581 T_LINE shift, and go to state 65 T_FILE shift, and go to state 66 - $default reduce using rule 327 (possible_comma) + $default reduce using rule 325 (possible_comma) common_scalar go to state 388 - static_scalar go to state 640 + static_scalar go to state 641 static_class_constant go to state 390 -state 582 +state 584 - 325 static_array_pair_list: non_empty_static_array_pair_list possible_comma . + 323 static_array_pair_list: non_empty_static_array_pair_list possible_comma . - $default reduce using rule 325 (static_array_pair_list) + $default reduce using rule 323 (static_array_pair_list) -state 583 +state 585 - 375 assignment_list: assignment_list . ',' assignment_list_element - 379 assignment_list_element: T_LIST '(' @64 assignment_list . ')' + 373 assignment_list: assignment_list . ',' assignment_list_element + 377 assignment_list_element: T_LIST '(' @62 assignment_list . ')' ',' shift, and go to state 472 - ')' shift, and go to state 641 + ')' shift, and go to state 642 -state 584 +state 586 - 204 expr_without_variable: T_LIST '(' @41 assignment_list ')' '=' expr . - 228 | expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 202 expr_without_variable: T_LIST '(' @39 assignment_list ')' '=' expr . + 226 | expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr '?' shift, and go to state 186 T_BOOLEAN_OR shift, and go to state 187 @@ -16592,12 +16611,12 @@ state 584 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 204 (expr_without_variable) + $default reduce using rule 202 (expr_without_variable) -state 585 +state 587 - 387 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' . w_variable + 385 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' . w_variable T_STRING shift, and go to state 120 T_VARIABLE shift, and go to state 33 @@ -16605,7 +16624,7 @@ state 585 function_call go to state 85 fully_qualified_class_name go to state 121 - w_variable go to state 642 + w_variable go to state 643 variable go to state 403 variable_without_objects go to state 93 static_member go to state 94 @@ -16616,35 +16635,35 @@ state 585 simple_indirect_reference go to state 99 -state 586 +state 588 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 383 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr . + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 381 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr . T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -16673,226 +16692,226 @@ state 586 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 383 (non_empty_array_pair_list) - - -state 587 - - 405 encaps_var: T_VARIABLE '[' @65 encaps_var_offset ']' . - - $default reduce using rule 405 (encaps_var) - - -state 588 - - 408 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' . '}' - - '}' shift, and go to state 643 + $default reduce using rule 381 (non_empty_array_pair_list) state 589 - 15 inner_statement: T_HALT_COMPILER '(' ')' ';' . + 403 encaps_var: T_VARIABLE '[' @63 encaps_var_offset ']' . - $default reduce using rule 15 (inner_statement) + $default reduce using rule 403 (encaps_var) state 590 - 88 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @31 implements_list '{' class_statement_list . '}' - 168 class_statement_list: class_statement_list . class_statement + 406 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' . '}' - T_CONST shift, and go to state 592 - T_PUBLIC shift, and go to state 593 - T_PROTECTED shift, and go to state 594 - T_PRIVATE shift, and go to state 595 - T_FINAL shift, and go to state 596 - T_ABSTRACT shift, and go to state 597 - T_STATIC shift, and go to state 598 - T_VAR shift, and go to state 599 - '}' shift, and go to state 644 - - $default reduce using rule 180 (method_modifiers) - - class_statement go to state 601 - variable_modifiers go to state 602 - method_modifiers go to state 603 - non_empty_member_modifiers go to state 604 - member_modifier go to state 605 - class_constant_declaration go to state 606 + '}' shift, and go to state 644 state 591 - 102 interface_list: interface_list ',' fully_qualified_class_name . + 15 inner_statement: T_HALT_COMPILER '(' ')' ';' . - $default reduce using rule 102 (interface_list) + $default reduce using rule 15 (inner_statement) state 592 - 195 class_constant_declaration: T_CONST . T_STRING '=' static_scalar + 86 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @29 implements_list '{' class_statement_list . '}' + 166 class_statement_list: class_statement_list . class_statement - T_STRING shift, and go to state 645 + T_CONST shift, and go to state 594 + T_PUBLIC shift, and go to state 595 + T_PROTECTED shift, and go to state 596 + T_PRIVATE shift, and go to state 597 + T_FINAL shift, and go to state 598 + T_ABSTRACT shift, and go to state 599 + T_STATIC shift, and go to state 600 + T_VAR shift, and go to state 601 + '}' shift, and go to state 645 + + $default reduce using rule 178 (method_modifiers) + + class_statement go to state 603 + variable_modifiers go to state 604 + method_modifiers go to state 605 + non_empty_member_modifiers go to state 606 + member_modifier go to state 607 + class_constant_declaration go to state 608 state 593 - 184 member_modifier: T_PUBLIC . + 100 interface_list: interface_list ',' fully_qualified_class_name . - $default reduce using rule 184 (member_modifier) + $default reduce using rule 100 (interface_list) state 594 - 185 member_modifier: T_PROTECTED . + 193 class_constant_declaration: T_CONST . T_STRING '=' static_scalar - $default reduce using rule 185 (member_modifier) + T_STRING shift, and go to state 646 state 595 - 186 member_modifier: T_PRIVATE . + 182 member_modifier: T_PUBLIC . - $default reduce using rule 186 (member_modifier) + $default reduce using rule 182 (member_modifier) state 596 - 189 member_modifier: T_FINAL . + 183 member_modifier: T_PROTECTED . - $default reduce using rule 189 (member_modifier) + $default reduce using rule 183 (member_modifier) state 597 - 188 member_modifier: T_ABSTRACT . + 184 member_modifier: T_PRIVATE . - $default reduce using rule 188 (member_modifier) + $default reduce using rule 184 (member_modifier) state 598 - 187 member_modifier: T_STATIC . + 187 member_modifier: T_FINAL . $default reduce using rule 187 (member_modifier) state 599 - 179 variable_modifiers: T_VAR . + 186 member_modifier: T_ABSTRACT . - $default reduce using rule 179 (variable_modifiers) + $default reduce using rule 186 (member_modifier) state 600 - 90 unticked_class_declaration_statement: interface_entry T_STRING @32 interface_extends_list '{' class_statement_list '}' . + 185 member_modifier: T_STATIC . - $default reduce using rule 90 (unticked_class_declaration_statement) + $default reduce using rule 185 (member_modifier) state 601 - 168 class_statement_list: class_statement_list class_statement . + 177 variable_modifiers: T_VAR . - $default reduce using rule 168 (class_statement_list) + $default reduce using rule 177 (variable_modifiers) state 602 - 171 class_statement: variable_modifiers . @37 class_variable_declaration ';' - - $default reduce using rule 170 (@37) + 88 unticked_class_declaration_statement: interface_entry T_STRING @30 interface_extends_list '{' class_statement_list '}' . - @37 go to state 646 + $default reduce using rule 88 (unticked_class_declaration_statement) state 603 - 175 class_statement: method_modifiers . T_FUNCTION @38 is_reference T_STRING @39 '(' parameter_list ')' method_body + 166 class_statement_list: class_statement_list class_statement . - T_FUNCTION shift, and go to state 647 + $default reduce using rule 166 (class_statement_list) state 604 - 178 variable_modifiers: non_empty_member_modifiers . - 181 method_modifiers: non_empty_member_modifiers . - 183 non_empty_member_modifiers: non_empty_member_modifiers . member_modifier - - T_PUBLIC shift, and go to state 593 - T_PROTECTED shift, and go to state 594 - T_PRIVATE shift, and go to state 595 - T_FINAL shift, and go to state 596 - T_ABSTRACT shift, and go to state 597 - T_STATIC shift, and go to state 598 + 169 class_statement: variable_modifiers . @35 class_variable_declaration ';' - T_FUNCTION reduce using rule 181 (method_modifiers) - $default reduce using rule 178 (variable_modifiers) + $default reduce using rule 168 (@35) - member_modifier go to state 648 + @35 go to state 647 state 605 - 182 non_empty_member_modifiers: member_modifier . + 173 class_statement: method_modifiers . T_FUNCTION @36 is_reference T_STRING @37 '(' parameter_list ')' method_body - $default reduce using rule 182 (non_empty_member_modifiers) + T_FUNCTION shift, and go to state 648 state 606 - 172 class_statement: class_constant_declaration . ';' - 194 class_constant_declaration: class_constant_declaration . ',' T_STRING '=' static_scalar + 176 variable_modifiers: non_empty_member_modifiers . + 179 method_modifiers: non_empty_member_modifiers . + 181 non_empty_member_modifiers: non_empty_member_modifiers . member_modifier + + T_PUBLIC shift, and go to state 595 + T_PROTECTED shift, and go to state 596 + T_PRIVATE shift, and go to state 597 + T_FINAL shift, and go to state 598 + T_ABSTRACT shift, and go to state 599 + T_STATIC shift, and go to state 600 - ',' shift, and go to state 649 - ';' shift, and go to state 650 + T_FUNCTION reduce using rule 179 (method_modifiers) + $default reduce using rule 176 (variable_modifiers) + + member_modifier go to state 649 state 607 - 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @52 function_call_parameter_list ')' . + 180 non_empty_member_modifiers: member_modifier . - $default reduce using rule 282 (function_call) + $default reduce using rule 180 (non_empty_member_modifiers) state 608 - 284 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @53 function_call_parameter_list ')' . + 170 class_statement: class_constant_declaration . ';' + 192 class_constant_declaration: class_constant_declaration . ',' T_STRING '=' static_scalar - $default reduce using rule 284 (function_call) + ',' shift, and go to state 650 + ';' shift, and go to state 651 state 609 - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr - 263 | expr '?' @48 expr ':' @49 expr . + 280 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' @50 function_call_parameter_list ')' . + + $default reduce using rule 280 (function_call) + + +state 610 + + 282 function_call: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' @51 function_call_parameter_list ')' . + + $default reduce using rule 282 (function_call) + + +state 611 + + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr + 261 | expr '?' @46 expr ':' @47 expr . T_BOOLEAN_OR shift, and go to state 187 T_BOOLEAN_AND shift, and go to state 188 @@ -16917,19 +16936,19 @@ state 609 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - $default reduce using rule 263 (expr_without_variable) + $default reduce using rule 261 (expr_without_variable) -state 610 +state 612 - 208 expr_without_variable: variable '=' '&' T_NEW class_name_reference @42 ctor_arguments . + 206 expr_without_variable: variable '=' '&' T_NEW class_name_reference @40 ctor_arguments . - $default reduce using rule 208 (expr_without_variable) + $default reduce using rule 206 (expr_without_variable) -state 611 +state 613 - 348 method_or_not: '(' @62 . function_call_parameter_list ')' + 346 method_or_not: '(' @60 . function_call_parameter_list ')' T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -16977,9 +16996,9 @@ state 611 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 152 (function_call_parameter_list) + $default reduce using rule 150 (function_call_parameter_list) - function_call_parameter_list go to state 651 + function_call_parameter_list go to state 652 non_empty_function_call_parameter_list go to state 366 expr_without_variable go to state 367 function_call go to state 85 @@ -17001,35 +17020,35 @@ state 611 class_constant go to state 101 -state 612 +state 614 - 341 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @59 object_property @60 method_or_not variable_properties . - 343 variable_properties: variable_properties . variable_property + 339 variable: base_variable_with_function_calls T_OBJECT_OPERATOR @57 object_property @58 method_or_not variable_properties . + 341 variable_properties: variable_properties . variable_property - T_OBJECT_OPERATOR shift, and go to state 652 + T_OBJECT_OPERATOR shift, and go to state 653 - $default reduce using rule 341 (variable) + $default reduce using rule 339 (variable) - variable_property go to state 653 + variable_property go to state 654 -state 613 +state 615 - 368 object_dim_list: object_dim_list '[' dim_offset ']' . + 366 object_dim_list: object_dim_list '[' dim_offset ']' . - $default reduce using rule 368 (object_dim_list) + $default reduce using rule 366 (object_dim_list) -state 614 +state 616 - 369 object_dim_list: object_dim_list '{' expr '}' . + 367 object_dim_list: object_dim_list '{' expr '}' . - $default reduce using rule 369 (object_dim_list) + $default reduce using rule 367 (object_dim_list) -state 615 +state 617 - 296 dynamic_class_name_variable_property: T_OBJECT_OPERATOR . object_property + 294 dynamic_class_name_variable_property: T_OBJECT_OPERATOR . object_property T_STRING shift, and go to state 435 T_VARIABLE shift, and go to state 33 @@ -17039,63 +17058,63 @@ state 615 variable_without_objects go to state 437 reference_variable go to state 310 compound_variable go to state 98 - object_property go to state 654 + object_property go to state 655 object_dim_list go to state 439 variable_name go to state 440 simple_indirect_reference go to state 311 -state 616 +state 618 - 294 dynamic_class_name_variable_properties: dynamic_class_name_variable_properties dynamic_class_name_variable_property . + 292 dynamic_class_name_variable_properties: dynamic_class_name_variable_properties dynamic_class_name_variable_property . - $default reduce using rule 294 (dynamic_class_name_variable_properties) + $default reduce using rule 292 (dynamic_class_name_variable_properties) -state 617 +state 619 23 unticked_statement: T_IF '(' expr ')' ':' @5 inner_statement_list @6 . new_elseif_list new_else_single T_ENDIF ';' - $default reduce using rule 131 (new_elseif_list) + $default reduce using rule 129 (new_elseif_list) - new_elseif_list go to state 655 + new_elseif_list go to state 656 -state 618 +state 620 20 unticked_statement: T_IF '(' expr ')' @3 statement @4 elseif_list . else_single - 130 elseif_list: elseif_list . T_ELSEIF '(' expr ')' @35 statement + 128 elseif_list: elseif_list . T_ELSEIF '(' expr ')' @33 statement - T_ELSEIF shift, and go to state 656 - T_ELSE shift, and go to state 657 + T_ELSEIF shift, and go to state 657 + T_ELSE shift, and go to state 658 - T_ELSEIF [reduce using rule 134 (else_single)] - T_ELSE [reduce using rule 134 (else_single)] - $default reduce using rule 134 (else_single) + T_ELSEIF [reduce using rule 132 (else_single)] + T_ELSE [reduce using rule 132 (else_single)] + $default reduce using rule 132 (else_single) - else_single go to state 658 + else_single go to state 659 -state 619 +state 621 29 unticked_statement: T_DO @9 statement T_WHILE '(' @10 expr ')' . ';' - ';' shift, and go to state 659 + ';' shift, and go to state 660 -state 620 +state 622 10 inner_statement_list: inner_statement_list . @2 inner_statement - 127 while_statement: ':' inner_statement_list . T_ENDWHILE ';' + 125 while_statement: ':' inner_statement_list . T_ENDWHILE ';' - T_ENDWHILE shift, and go to state 660 + T_ENDWHILE shift, and go to state 661 $default reduce using rule 9 (@2) @2 go to state 300 -state 621 +state 623 33 unticked_statement: T_FOR '(' for_expr ';' @11 for_expr ';' @12 . for_expr ')' @13 for_statement @@ -17144,9 +17163,9 @@ state 621 '"' shift, and go to state 73 ''' shift, and go to state 74 - $default reduce using rule 198 (for_expr) + $default reduce using rule 196 (for_expr) - for_expr go to state 661 + for_expr go to state 662 non_empty_for_expr go to state 247 expr_without_variable go to state 84 function_call go to state 85 @@ -17168,84 +17187,66 @@ state 621 class_constant go to state 101 -state 622 +state 624 - 104 foreach_optional_arg: T_DOUBLE_ARROW . foreach_variable + 102 foreach_optional_arg: T_DOUBLE_ARROW foreach_variable . - '&' shift, and go to state 564 - T_STRING shift, and go to state 120 - T_VARIABLE shift, and go to state 33 - '$' shift, and go to state 71 - - foreach_variable go to state 662 - function_call go to state 85 - fully_qualified_class_name go to state 121 - variable go to state 566 - variable_without_objects go to state 93 - static_member go to state 94 - base_variable_with_function_calls go to state 95 - base_variable go to state 96 - reference_variable go to state 97 - compound_variable go to state 98 - simple_indirect_reference go to state 99 + $default reduce using rule 102 (foreach_optional_arg) -state 623 - - 57 unticked_statement: T_FOREACH '(' expr_without_variable @18 T_AS @19 variable foreach_optional_arg . ')' @20 foreach_statement +state 625 - ')' shift, and go to state 663 + 55 unticked_statement: T_FOREACH '(' expr_without_variable T_AS @17 variable foreach_optional_arg ')' . @18 foreach_statement + $default reduce using rule 54 (@18) -state 624 + @18 go to state 663 - 106 foreach_variable: '&' variable . - - $default reduce using rule 106 (foreach_variable) +state 626 -state 625 + 52 unticked_statement: T_FOREACH '(' variable T_AS @15 foreach_variable foreach_optional_arg ')' . @16 foreach_statement - 53 unticked_statement: T_FOREACH '(' variable @15 T_AS @16 foreach_variable foreach_optional_arg . ')' @17 foreach_statement + $default reduce using rule 51 (@16) - ')' shift, and go to state 664 + @16 go to state 664 -state 626 +state 627 - 114 declare_list: declare_list ',' T_STRING '=' static_scalar . + 112 declare_list: declare_list ',' T_STRING '=' static_scalar . - $default reduce using rule 114 (declare_list) + $default reduce using rule 112 (declare_list) -state 627 +state 628 - 112 declare_statement: ':' inner_statement_list T_ENDDECLARE . ';' + 110 declare_statement: ':' inner_statement_list T_ENDDECLARE . ';' ';' shift, and go to state 665 -state 628 +state 629 - 118 switch_case_list: ':' ';' case_list . T_ENDSWITCH ';' - 121 case_list: case_list . T_CASE expr case_separator @33 inner_statement_list - 123 | case_list . T_DEFAULT case_separator @34 inner_statement_list + 116 switch_case_list: ':' ';' case_list . T_ENDSWITCH ';' + 119 case_list: case_list . T_CASE expr case_separator @31 inner_statement_list + 121 | case_list . T_DEFAULT case_separator @32 inner_statement_list T_ENDSWITCH shift, and go to state 666 - T_CASE shift, and go to state 630 - T_DEFAULT shift, and go to state 631 + T_CASE shift, and go to state 631 + T_DEFAULT shift, and go to state 632 -state 629 +state 630 - 117 switch_case_list: ':' case_list T_ENDSWITCH . ';' + 115 switch_case_list: ':' case_list T_ENDSWITCH . ';' ';' shift, and go to state 667 -state 630 +state 631 - 121 case_list: case_list T_CASE . expr case_separator @33 inner_statement_list + 119 case_list: case_list T_CASE . expr case_separator @31 inner_statement_list T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -17312,9 +17313,9 @@ state 630 class_constant go to state 101 -state 631 +state 632 - 123 case_list: case_list T_DEFAULT . case_separator @34 inner_statement_list + 121 case_list: case_list T_DEFAULT . case_separator @32 inner_statement_list ':' shift, and go to state 669 ';' shift, and go to state 670 @@ -17322,174 +17323,174 @@ state 631 case_separator go to state 671 -state 632 +state 633 - 116 switch_case_list: '{' ';' case_list . '}' - 121 case_list: case_list . T_CASE expr case_separator @33 inner_statement_list - 123 | case_list . T_DEFAULT case_separator @34 inner_statement_list + 114 switch_case_list: '{' ';' case_list . '}' + 119 case_list: case_list . T_CASE expr case_separator @31 inner_statement_list + 121 | case_list . T_DEFAULT case_separator @32 inner_statement_list - T_CASE shift, and go to state 630 - T_DEFAULT shift, and go to state 631 + T_CASE shift, and go to state 631 + T_DEFAULT shift, and go to state 632 '}' shift, and go to state 672 -state 633 +state 634 - 115 switch_case_list: '{' case_list '}' . + 113 switch_case_list: '{' case_list '}' . - $default reduce using rule 115 (switch_case_list) + $default reduce using rule 113 (switch_case_list) -state 634 +state 635 - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference T_STRING @30 '(' parameter_list ')' . '{' inner_statement_list '}' + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference T_STRING @28 '(' parameter_list ')' . '{' inner_statement_list '}' '{' shift, and go to state 673 -state 635 +state 636 - 144 non_empty_parameter_list: non_empty_parameter_list ',' . optional_class_type T_VARIABLE - 145 | non_empty_parameter_list ',' . optional_class_type '&' T_VARIABLE - 146 | non_empty_parameter_list ',' . optional_class_type '&' T_VARIABLE '=' static_scalar - 147 | non_empty_parameter_list ',' . optional_class_type T_VARIABLE '=' static_scalar + 142 non_empty_parameter_list: non_empty_parameter_list ',' . optional_class_type T_VARIABLE + 143 | non_empty_parameter_list ',' . optional_class_type '&' T_VARIABLE + 144 | non_empty_parameter_list ',' . optional_class_type '&' T_VARIABLE '=' static_scalar + 145 | non_empty_parameter_list ',' . optional_class_type T_VARIABLE '=' static_scalar - T_STRING shift, and go to state 573 - T_ARRAY shift, and go to state 574 + T_STRING shift, and go to state 575 + T_ARRAY shift, and go to state 576 - $default reduce using rule 148 (optional_class_type) + $default reduce using rule 146 (optional_class_type) optional_class_type go to state 674 -state 636 +state 637 - 141 non_empty_parameter_list: optional_class_type '&' . T_VARIABLE - 142 | optional_class_type '&' . T_VARIABLE '=' static_scalar + 139 non_empty_parameter_list: optional_class_type '&' . T_VARIABLE + 140 | optional_class_type '&' . T_VARIABLE '=' static_scalar T_VARIABLE shift, and go to state 675 -state 637 +state 638 - 140 non_empty_parameter_list: optional_class_type T_VARIABLE . - 143 | optional_class_type T_VARIABLE . '=' static_scalar + 138 non_empty_parameter_list: optional_class_type T_VARIABLE . + 141 | optional_class_type T_VARIABLE . '=' static_scalar '=' shift, and go to state 676 - $default reduce using rule 140 (non_empty_parameter_list) + $default reduce using rule 138 (non_empty_parameter_list) -state 638 +state 639 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 . fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 . fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches T_STRING shift, and go to state 419 fully_qualified_class_name go to state 677 -state 639 - - 330 non_empty_static_array_pair_list: static_scalar T_DOUBLE_ARROW static_scalar . - - $default reduce using rule 330 (non_empty_static_array_pair_list) - - state 640 - 328 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar . T_DOUBLE_ARROW static_scalar - 329 | non_empty_static_array_pair_list ',' static_scalar . + 328 non_empty_static_array_pair_list: static_scalar T_DOUBLE_ARROW static_scalar . - T_DOUBLE_ARROW shift, and go to state 678 - - $default reduce using rule 329 (non_empty_static_array_pair_list) + $default reduce using rule 328 (non_empty_static_array_pair_list) state 641 - 379 assignment_list_element: T_LIST '(' @64 assignment_list ')' . + 326 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar . T_DOUBLE_ARROW static_scalar + 327 | non_empty_static_array_pair_list ',' static_scalar . + + T_DOUBLE_ARROW shift, and go to state 678 - $default reduce using rule 379 (assignment_list_element) + $default reduce using rule 327 (non_empty_static_array_pair_list) state 642 - 387 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable . + 377 assignment_list_element: T_LIST '(' @62 assignment_list ')' . - $default reduce using rule 387 (non_empty_array_pair_list) + $default reduce using rule 377 (assignment_list_element) state 643 - 408 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' . + 385 non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable . - $default reduce using rule 408 (encaps_var) + $default reduce using rule 385 (non_empty_array_pair_list) state 644 - 88 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @31 implements_list '{' class_statement_list '}' . + 406 encaps_var: T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' . - $default reduce using rule 88 (unticked_class_declaration_statement) + $default reduce using rule 406 (encaps_var) state 645 - 195 class_constant_declaration: T_CONST T_STRING . '=' static_scalar + 86 unticked_class_declaration_statement: class_entry_type T_STRING extends_from @29 implements_list '{' class_statement_list '}' . - '=' shift, and go to state 679 + $default reduce using rule 86 (unticked_class_declaration_statement) state 646 - 171 class_statement: variable_modifiers @37 . class_variable_declaration ';' + 193 class_constant_declaration: T_CONST T_STRING . '=' static_scalar - T_VARIABLE shift, and go to state 680 - - class_variable_declaration go to state 681 + '=' shift, and go to state 679 state 647 - 175 class_statement: method_modifiers T_FUNCTION . @38 is_reference T_STRING @39 '(' parameter_list ')' method_body + 169 class_statement: variable_modifiers @35 . class_variable_declaration ';' - $default reduce using rule 173 (@38) + T_VARIABLE shift, and go to state 680 - @38 go to state 682 + class_variable_declaration go to state 681 state 648 - 183 non_empty_member_modifiers: non_empty_member_modifiers member_modifier . + 173 class_statement: method_modifiers T_FUNCTION . @36 is_reference T_STRING @37 '(' parameter_list ')' method_body + + $default reduce using rule 171 (@36) - $default reduce using rule 183 (non_empty_member_modifiers) + @36 go to state 682 state 649 - 194 class_constant_declaration: class_constant_declaration ',' . T_STRING '=' static_scalar + 181 non_empty_member_modifiers: non_empty_member_modifiers member_modifier . - T_STRING shift, and go to state 683 + $default reduce using rule 181 (non_empty_member_modifiers) state 650 - 172 class_statement: class_constant_declaration ';' . + 192 class_constant_declaration: class_constant_declaration ',' . T_STRING '=' static_scalar - $default reduce using rule 172 (class_statement) + T_STRING shift, and go to state 683 state 651 - 348 method_or_not: '(' @62 function_call_parameter_list . ')' + 170 class_statement: class_constant_declaration ';' . - ')' shift, and go to state 684 + $default reduce using rule 170 (class_statement) state 652 - 346 variable_property: T_OBJECT_OPERATOR . object_property @61 method_or_not + 346 method_or_not: '(' @60 function_call_parameter_list . ')' + + ')' shift, and go to state 684 + + +state 653 + + 344 variable_property: T_OBJECT_OPERATOR . object_property @59 method_or_not T_STRING shift, and go to state 435 T_VARIABLE shift, and go to state 33 @@ -17505,43 +17506,43 @@ state 652 simple_indirect_reference go to state 311 -state 653 +state 654 - 343 variable_properties: variable_properties variable_property . + 341 variable_properties: variable_properties variable_property . - $default reduce using rule 343 (variable_properties) + $default reduce using rule 341 (variable_properties) -state 654 +state 655 - 296 dynamic_class_name_variable_property: T_OBJECT_OPERATOR object_property . + 294 dynamic_class_name_variable_property: T_OBJECT_OPERATOR object_property . - $default reduce using rule 296 (dynamic_class_name_variable_property) + $default reduce using rule 294 (dynamic_class_name_variable_property) -state 655 +state 656 23 unticked_statement: T_IF '(' expr ')' ':' @5 inner_statement_list @6 new_elseif_list . new_else_single T_ENDIF ';' - 133 new_elseif_list: new_elseif_list . T_ELSEIF '(' expr ')' ':' @36 inner_statement_list + 131 new_elseif_list: new_elseif_list . T_ELSEIF '(' expr ')' ':' @34 inner_statement_list T_ELSEIF shift, and go to state 686 T_ELSE shift, and go to state 687 - $default reduce using rule 136 (new_else_single) + $default reduce using rule 134 (new_else_single) new_else_single go to state 688 -state 656 +state 657 - 130 elseif_list: elseif_list T_ELSEIF . '(' expr ')' @35 statement + 128 elseif_list: elseif_list T_ELSEIF . '(' expr ')' @33 statement '(' shift, and go to state 689 -state 657 +state 658 - 135 else_single: T_ELSE . statement + 133 else_single: T_ELSE . statement T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -17630,109 +17631,270 @@ state 657 class_constant go to state 101 -state 658 +state 659 20 unticked_statement: T_IF '(' expr ')' @3 statement @4 elseif_list else_single . $default reduce using rule 20 (unticked_statement) -state 659 +state 660 29 unticked_statement: T_DO @9 statement T_WHILE '(' @10 expr ')' ';' . $default reduce using rule 29 (unticked_statement) -state 660 +state 661 - 127 while_statement: ':' inner_statement_list T_ENDWHILE . ';' + 125 while_statement: ':' inner_statement_list T_ENDWHILE . ';' ';' shift, and go to state 691 -state 661 +state 662 33 unticked_statement: T_FOR '(' for_expr ';' @11 for_expr ';' @12 for_expr . ')' @13 for_statement ')' shift, and go to state 692 -state 662 - - 104 foreach_optional_arg: T_DOUBLE_ARROW foreach_variable . - - $default reduce using rule 104 (foreach_optional_arg) - - state 663 - 57 unticked_statement: T_FOREACH '(' expr_without_variable @18 T_AS @19 variable foreach_optional_arg ')' . @20 foreach_statement + 55 unticked_statement: T_FOREACH '(' expr_without_variable T_AS @17 variable foreach_optional_arg ')' @18 . foreach_statement - $default reduce using rule 56 (@20) + T_REQUIRE_ONCE shift, and go to state 5 + T_REQUIRE shift, and go to state 6 + T_EVAL shift, and go to state 7 + T_INCLUDE_ONCE shift, and go to state 8 + T_INCLUDE shift, and go to state 9 + T_PRINT shift, and go to state 10 + ':' shift, and go to state 693 + '+' shift, and go to state 11 + '-' shift, and go to state 12 + '!' shift, and go to state 13 + '~' shift, and go to state 14 + '@' shift, and go to state 15 + T_UNSET_CAST shift, and go to state 16 + T_BOOL_CAST shift, and go to state 17 + T_OBJECT_CAST shift, and go to state 18 + T_ARRAY_CAST shift, and go to state 19 + T_STRING_CAST shift, and go to state 20 + T_DOUBLE_CAST shift, and go to state 21 + T_INT_CAST shift, and go to state 22 + T_DEC shift, and go to state 23 + T_INC shift, and go to state 24 + T_CLONE shift, and go to state 25 + T_NEW shift, and go to state 26 + T_EXIT shift, and go to state 27 + T_IF shift, and go to state 28 + T_LNUMBER shift, and go to state 29 + T_DNUMBER shift, and go to state 30 + T_STRING shift, and go to state 31 + T_STRING_VARNAME shift, and go to state 32 + T_VARIABLE shift, and go to state 33 + T_INLINE_HTML shift, and go to state 34 + T_CONSTANT_ENCAPSED_STRING shift, and go to state 35 + T_ECHO shift, and go to state 36 + T_DO shift, and go to state 37 + T_WHILE shift, and go to state 38 + T_FOR shift, and go to state 39 + T_FOREACH shift, and go to state 40 + T_DECLARE shift, and go to state 41 + T_SWITCH shift, and go to state 42 + T_BREAK shift, and go to state 43 + T_CONTINUE shift, and go to state 44 + T_RETURN shift, and go to state 46 + T_TRY shift, and go to state 47 + T_THROW shift, and go to state 48 + T_USE shift, and go to state 49 + T_GLOBAL shift, and go to state 50 + T_STATIC shift, and go to state 53 + T_UNSET shift, and go to state 54 + T_ISSET shift, and go to state 55 + T_EMPTY shift, and go to state 56 + T_LIST shift, and go to state 60 + T_ARRAY shift, and go to state 61 + T_CLASS_C shift, and go to state 62 + T_METHOD_C shift, and go to state 63 + T_FUNC_C shift, and go to state 64 + T_LINE shift, and go to state 65 + T_FILE shift, and go to state 66 + T_START_HEREDOC shift, and go to state 67 + '(' shift, and go to state 68 + ';' shift, and go to state 69 + '{' shift, and go to state 70 + '$' shift, and go to state 71 + '`' shift, and go to state 72 + '"' shift, and go to state 73 + ''' shift, and go to state 74 - @20 go to state 693 + statement go to state 694 + unticked_statement go to state 77 + foreach_statement go to state 695 + expr_without_variable go to state 84 + function_call go to state 85 + fully_qualified_class_name go to state 86 + common_scalar go to state 87 + scalar go to state 88 + expr go to state 89 + r_variable go to state 90 + rw_variable go to state 91 + variable go to state 92 + variable_without_objects go to state 93 + static_member go to state 94 + base_variable_with_function_calls go to state 95 + base_variable go to state 96 + reference_variable go to state 97 + compound_variable go to state 98 + simple_indirect_reference go to state 99 + internal_functions_in_yacc go to state 100 + class_constant go to state 101 state 664 - 53 unticked_statement: T_FOREACH '(' variable @15 T_AS @16 foreach_variable foreach_optional_arg ')' . @17 foreach_statement + 52 unticked_statement: T_FOREACH '(' variable T_AS @15 foreach_variable foreach_optional_arg ')' @16 . foreach_statement - $default reduce using rule 52 (@17) + T_REQUIRE_ONCE shift, and go to state 5 + T_REQUIRE shift, and go to state 6 + T_EVAL shift, and go to state 7 + T_INCLUDE_ONCE shift, and go to state 8 + T_INCLUDE shift, and go to state 9 + T_PRINT shift, and go to state 10 + ':' shift, and go to state 693 + '+' shift, and go to state 11 + '-' shift, and go to state 12 + '!' shift, and go to state 13 + '~' shift, and go to state 14 + '@' shift, and go to state 15 + T_UNSET_CAST shift, and go to state 16 + T_BOOL_CAST shift, and go to state 17 + T_OBJECT_CAST shift, and go to state 18 + T_ARRAY_CAST shift, and go to state 19 + T_STRING_CAST shift, and go to state 20 + T_DOUBLE_CAST shift, and go to state 21 + T_INT_CAST shift, and go to state 22 + T_DEC shift, and go to state 23 + T_INC shift, and go to state 24 + T_CLONE shift, and go to state 25 + T_NEW shift, and go to state 26 + T_EXIT shift, and go to state 27 + T_IF shift, and go to state 28 + T_LNUMBER shift, and go to state 29 + T_DNUMBER shift, and go to state 30 + T_STRING shift, and go to state 31 + T_STRING_VARNAME shift, and go to state 32 + T_VARIABLE shift, and go to state 33 + T_INLINE_HTML shift, and go to state 34 + T_CONSTANT_ENCAPSED_STRING shift, and go to state 35 + T_ECHO shift, and go to state 36 + T_DO shift, and go to state 37 + T_WHILE shift, and go to state 38 + T_FOR shift, and go to state 39 + T_FOREACH shift, and go to state 40 + T_DECLARE shift, and go to state 41 + T_SWITCH shift, and go to state 42 + T_BREAK shift, and go to state 43 + T_CONTINUE shift, and go to state 44 + T_RETURN shift, and go to state 46 + T_TRY shift, and go to state 47 + T_THROW shift, and go to state 48 + T_USE shift, and go to state 49 + T_GLOBAL shift, and go to state 50 + T_STATIC shift, and go to state 53 + T_UNSET shift, and go to state 54 + T_ISSET shift, and go to state 55 + T_EMPTY shift, and go to state 56 + T_LIST shift, and go to state 60 + T_ARRAY shift, and go to state 61 + T_CLASS_C shift, and go to state 62 + T_METHOD_C shift, and go to state 63 + T_FUNC_C shift, and go to state 64 + T_LINE shift, and go to state 65 + T_FILE shift, and go to state 66 + T_START_HEREDOC shift, and go to state 67 + '(' shift, and go to state 68 + ';' shift, and go to state 69 + '{' shift, and go to state 70 + '$' shift, and go to state 71 + '`' shift, and go to state 72 + '"' shift, and go to state 73 + ''' shift, and go to state 74 - @17 go to state 694 + statement go to state 694 + unticked_statement go to state 77 + foreach_statement go to state 696 + expr_without_variable go to state 84 + function_call go to state 85 + fully_qualified_class_name go to state 86 + common_scalar go to state 87 + scalar go to state 88 + expr go to state 89 + r_variable go to state 90 + rw_variable go to state 91 + variable go to state 92 + variable_without_objects go to state 93 + static_member go to state 94 + base_variable_with_function_calls go to state 95 + base_variable go to state 96 + reference_variable go to state 97 + compound_variable go to state 98 + simple_indirect_reference go to state 99 + internal_functions_in_yacc go to state 100 + class_constant go to state 101 state 665 - 112 declare_statement: ':' inner_statement_list T_ENDDECLARE ';' . + 110 declare_statement: ':' inner_statement_list T_ENDDECLARE ';' . - $default reduce using rule 112 (declare_statement) + $default reduce using rule 110 (declare_statement) state 666 - 118 switch_case_list: ':' ';' case_list T_ENDSWITCH . ';' + 116 switch_case_list: ':' ';' case_list T_ENDSWITCH . ';' - ';' shift, and go to state 695 + ';' shift, and go to state 697 state 667 - 117 switch_case_list: ':' case_list T_ENDSWITCH ';' . + 115 switch_case_list: ':' case_list T_ENDSWITCH ';' . - $default reduce using rule 117 (switch_case_list) + $default reduce using rule 115 (switch_case_list) state 668 - 121 case_list: case_list T_CASE expr . case_separator @33 inner_statement_list - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 119 case_list: case_list T_CASE expr . case_separator @31 inner_statement_list + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -17763,72 +17925,72 @@ state 668 T_INSTANCEOF shift, and go to state 208 ';' shift, and go to state 670 - case_separator go to state 696 + case_separator go to state 698 state 669 - 124 case_separator: ':' . + 122 case_separator: ':' . - $default reduce using rule 124 (case_separator) + $default reduce using rule 122 (case_separator) state 670 - 125 case_separator: ';' . + 123 case_separator: ';' . - $default reduce using rule 125 (case_separator) + $default reduce using rule 123 (case_separator) state 671 - 123 case_list: case_list T_DEFAULT case_separator . @34 inner_statement_list + 121 case_list: case_list T_DEFAULT case_separator . @32 inner_statement_list - $default reduce using rule 122 (@34) + $default reduce using rule 120 (@32) - @34 go to state 697 + @32 go to state 699 state 672 - 116 switch_case_list: '{' ';' case_list '}' . + 114 switch_case_list: '{' ';' case_list '}' . - $default reduce using rule 116 (switch_case_list) + $default reduce using rule 114 (switch_case_list) state 673 - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference T_STRING @30 '(' parameter_list ')' '{' . inner_statement_list '}' + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference T_STRING @28 '(' parameter_list ')' '{' . inner_statement_list '}' $default reduce using rule 11 (inner_statement_list) - inner_statement_list go to state 698 + inner_statement_list go to state 700 state 674 - 144 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type . T_VARIABLE - 145 | non_empty_parameter_list ',' optional_class_type . '&' T_VARIABLE - 146 | non_empty_parameter_list ',' optional_class_type . '&' T_VARIABLE '=' static_scalar - 147 | non_empty_parameter_list ',' optional_class_type . T_VARIABLE '=' static_scalar + 142 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type . T_VARIABLE + 143 | non_empty_parameter_list ',' optional_class_type . '&' T_VARIABLE + 144 | non_empty_parameter_list ',' optional_class_type . '&' T_VARIABLE '=' static_scalar + 145 | non_empty_parameter_list ',' optional_class_type . T_VARIABLE '=' static_scalar - '&' shift, and go to state 699 - T_VARIABLE shift, and go to state 700 + '&' shift, and go to state 701 + T_VARIABLE shift, and go to state 702 state 675 - 141 non_empty_parameter_list: optional_class_type '&' T_VARIABLE . - 142 | optional_class_type '&' T_VARIABLE . '=' static_scalar + 139 non_empty_parameter_list: optional_class_type '&' T_VARIABLE . + 140 | optional_class_type '&' T_VARIABLE . '=' static_scalar - '=' shift, and go to state 701 + '=' shift, and go to state 703 - $default reduce using rule 141 (non_empty_parameter_list) + $default reduce using rule 139 (non_empty_parameter_list) state 676 - 143 non_empty_parameter_list: optional_class_type T_VARIABLE '=' . static_scalar + 141 non_empty_parameter_list: optional_class_type T_VARIABLE '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -17844,22 +18006,22 @@ state 676 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 702 + static_scalar go to state 704 static_class_constant go to state 390 state 677 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name . @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name . @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches - $default reduce using rule 63 (@24) + $default reduce using rule 61 (@22) - @24 go to state 703 + @22 go to state 705 state 678 - 328 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW . static_scalar + 326 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -17875,13 +18037,13 @@ state 678 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 704 + static_scalar go to state 706 static_class_constant go to state 390 state 679 - 195 class_constant_declaration: T_CONST T_STRING '=' . static_scalar + 193 class_constant_declaration: T_CONST T_STRING '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -17897,88 +18059,88 @@ state 679 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 705 + static_scalar go to state 707 static_class_constant go to state 390 state 680 - 192 class_variable_declaration: T_VARIABLE . - 193 | T_VARIABLE . '=' static_scalar + 190 class_variable_declaration: T_VARIABLE . + 191 | T_VARIABLE . '=' static_scalar - '=' shift, and go to state 706 + '=' shift, and go to state 708 - $default reduce using rule 192 (class_variable_declaration) + $default reduce using rule 190 (class_variable_declaration) state 681 - 171 class_statement: variable_modifiers @37 class_variable_declaration . ';' - 190 class_variable_declaration: class_variable_declaration . ',' T_VARIABLE - 191 | class_variable_declaration . ',' T_VARIABLE '=' static_scalar + 169 class_statement: variable_modifiers @35 class_variable_declaration . ';' + 188 class_variable_declaration: class_variable_declaration . ',' T_VARIABLE + 189 | class_variable_declaration . ',' T_VARIABLE '=' static_scalar - ',' shift, and go to state 707 - ';' shift, and go to state 708 + ',' shift, and go to state 709 + ';' shift, and go to state 710 state 682 - 175 class_statement: method_modifiers T_FUNCTION @38 . is_reference T_STRING @39 '(' parameter_list ')' method_body + 173 class_statement: method_modifiers T_FUNCTION @36 . is_reference T_STRING @37 '(' parameter_list ')' method_body '&' shift, and go to state 255 - $default reduce using rule 82 (is_reference) + $default reduce using rule 80 (is_reference) - is_reference go to state 709 + is_reference go to state 711 state 683 - 194 class_constant_declaration: class_constant_declaration ',' T_STRING . '=' static_scalar + 192 class_constant_declaration: class_constant_declaration ',' T_STRING . '=' static_scalar - '=' shift, and go to state 710 + '=' shift, and go to state 712 state 684 - 348 method_or_not: '(' @62 function_call_parameter_list ')' . + 346 method_or_not: '(' @60 function_call_parameter_list ')' . - $default reduce using rule 348 (method_or_not) + $default reduce using rule 346 (method_or_not) state 685 - 346 variable_property: T_OBJECT_OPERATOR object_property . @61 method_or_not + 344 variable_property: T_OBJECT_OPERATOR object_property . @59 method_or_not - $default reduce using rule 345 (@61) + $default reduce using rule 343 (@59) - @61 go to state 711 + @59 go to state 713 state 686 - 133 new_elseif_list: new_elseif_list T_ELSEIF . '(' expr ')' ':' @36 inner_statement_list + 131 new_elseif_list: new_elseif_list T_ELSEIF . '(' expr ')' ':' @34 inner_statement_list - '(' shift, and go to state 712 + '(' shift, and go to state 714 state 687 - 137 new_else_single: T_ELSE . ':' inner_statement_list + 135 new_else_single: T_ELSE . ':' inner_statement_list - ':' shift, and go to state 713 + ':' shift, and go to state 715 state 688 23 unticked_statement: T_IF '(' expr ')' ':' @5 inner_statement_list @6 new_elseif_list new_else_single . T_ENDIF ';' - T_ENDIF shift, and go to state 714 + T_ENDIF shift, and go to state 716 state 689 - 130 elseif_list: elseif_list T_ELSEIF '(' . expr ')' @35 statement + 128 elseif_list: elseif_list T_ELSEIF '(' . expr ')' @33 statement T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -18030,7 +18192,7 @@ state 689 fully_qualified_class_name go to state 86 common_scalar go to state 87 scalar go to state 88 - expr go to state 715 + expr go to state 717 r_variable go to state 90 rw_variable go to state 91 variable go to state 92 @@ -18047,16 +18209,16 @@ state 689 state 690 - 135 else_single: T_ELSE statement . + 133 else_single: T_ELSE statement . - $default reduce using rule 135 (else_single) + $default reduce using rule 133 (else_single) state 691 - 127 while_statement: ':' inner_statement_list T_ENDWHILE ';' . + 125 while_statement: ':' inner_statement_list T_ENDWHILE ';' . - $default reduce using rule 127 (while_statement) + $default reduce using rule 125 (while_statement) state 692 @@ -18065,253 +18227,97 @@ state 692 $default reduce using rule 32 (@13) - @13 go to state 716 + @13 go to state 718 state 693 - 57 unticked_statement: T_FOREACH '(' expr_without_variable @18 T_AS @19 variable foreach_optional_arg ')' @20 . foreach_statement + 108 foreach_statement: ':' . inner_statement_list T_ENDFOREACH ';' - T_REQUIRE_ONCE shift, and go to state 5 - T_REQUIRE shift, and go to state 6 - T_EVAL shift, and go to state 7 - T_INCLUDE_ONCE shift, and go to state 8 - T_INCLUDE shift, and go to state 9 - T_PRINT shift, and go to state 10 - ':' shift, and go to state 717 - '+' shift, and go to state 11 - '-' shift, and go to state 12 - '!' shift, and go to state 13 - '~' shift, and go to state 14 - '@' shift, and go to state 15 - T_UNSET_CAST shift, and go to state 16 - T_BOOL_CAST shift, and go to state 17 - T_OBJECT_CAST shift, and go to state 18 - T_ARRAY_CAST shift, and go to state 19 - T_STRING_CAST shift, and go to state 20 - T_DOUBLE_CAST shift, and go to state 21 - T_INT_CAST shift, and go to state 22 - T_DEC shift, and go to state 23 - T_INC shift, and go to state 24 - T_CLONE shift, and go to state 25 - T_NEW shift, and go to state 26 - T_EXIT shift, and go to state 27 - T_IF shift, and go to state 28 - T_LNUMBER shift, and go to state 29 - T_DNUMBER shift, and go to state 30 - T_STRING shift, and go to state 31 - T_STRING_VARNAME shift, and go to state 32 - T_VARIABLE shift, and go to state 33 - T_INLINE_HTML shift, and go to state 34 - T_CONSTANT_ENCAPSED_STRING shift, and go to state 35 - T_ECHO shift, and go to state 36 - T_DO shift, and go to state 37 - T_WHILE shift, and go to state 38 - T_FOR shift, and go to state 39 - T_FOREACH shift, and go to state 40 - T_DECLARE shift, and go to state 41 - T_SWITCH shift, and go to state 42 - T_BREAK shift, and go to state 43 - T_CONTINUE shift, and go to state 44 - T_RETURN shift, and go to state 46 - T_TRY shift, and go to state 47 - T_THROW shift, and go to state 48 - T_USE shift, and go to state 49 - T_GLOBAL shift, and go to state 50 - T_STATIC shift, and go to state 53 - T_UNSET shift, and go to state 54 - T_ISSET shift, and go to state 55 - T_EMPTY shift, and go to state 56 - T_LIST shift, and go to state 60 - T_ARRAY shift, and go to state 61 - T_CLASS_C shift, and go to state 62 - T_METHOD_C shift, and go to state 63 - T_FUNC_C shift, and go to state 64 - T_LINE shift, and go to state 65 - T_FILE shift, and go to state 66 - T_START_HEREDOC shift, and go to state 67 - '(' shift, and go to state 68 - ';' shift, and go to state 69 - '{' shift, and go to state 70 - '$' shift, and go to state 71 - '`' shift, and go to state 72 - '"' shift, and go to state 73 - ''' shift, and go to state 74 + $default reduce using rule 11 (inner_statement_list) - statement go to state 718 - unticked_statement go to state 77 - foreach_statement go to state 719 - expr_without_variable go to state 84 - function_call go to state 85 - fully_qualified_class_name go to state 86 - common_scalar go to state 87 - scalar go to state 88 - expr go to state 89 - r_variable go to state 90 - rw_variable go to state 91 - variable go to state 92 - variable_without_objects go to state 93 - static_member go to state 94 - base_variable_with_function_calls go to state 95 - base_variable go to state 96 - reference_variable go to state 97 - compound_variable go to state 98 - simple_indirect_reference go to state 99 - internal_functions_in_yacc go to state 100 - class_constant go to state 101 + inner_statement_list go to state 719 state 694 - 53 unticked_statement: T_FOREACH '(' variable @15 T_AS @16 foreach_variable foreach_optional_arg ')' @17 . foreach_statement + 107 foreach_statement: statement . - T_REQUIRE_ONCE shift, and go to state 5 - T_REQUIRE shift, and go to state 6 - T_EVAL shift, and go to state 7 - T_INCLUDE_ONCE shift, and go to state 8 - T_INCLUDE shift, and go to state 9 - T_PRINT shift, and go to state 10 - ':' shift, and go to state 717 - '+' shift, and go to state 11 - '-' shift, and go to state 12 - '!' shift, and go to state 13 - '~' shift, and go to state 14 - '@' shift, and go to state 15 - T_UNSET_CAST shift, and go to state 16 - T_BOOL_CAST shift, and go to state 17 - T_OBJECT_CAST shift, and go to state 18 - T_ARRAY_CAST shift, and go to state 19 - T_STRING_CAST shift, and go to state 20 - T_DOUBLE_CAST shift, and go to state 21 - T_INT_CAST shift, and go to state 22 - T_DEC shift, and go to state 23 - T_INC shift, and go to state 24 - T_CLONE shift, and go to state 25 - T_NEW shift, and go to state 26 - T_EXIT shift, and go to state 27 - T_IF shift, and go to state 28 - T_LNUMBER shift, and go to state 29 - T_DNUMBER shift, and go to state 30 - T_STRING shift, and go to state 31 - T_STRING_VARNAME shift, and go to state 32 - T_VARIABLE shift, and go to state 33 - T_INLINE_HTML shift, and go to state 34 - T_CONSTANT_ENCAPSED_STRING shift, and go to state 35 - T_ECHO shift, and go to state 36 - T_DO shift, and go to state 37 - T_WHILE shift, and go to state 38 - T_FOR shift, and go to state 39 - T_FOREACH shift, and go to state 40 - T_DECLARE shift, and go to state 41 - T_SWITCH shift, and go to state 42 - T_BREAK shift, and go to state 43 - T_CONTINUE shift, and go to state 44 - T_RETURN shift, and go to state 46 - T_TRY shift, and go to state 47 - T_THROW shift, and go to state 48 - T_USE shift, and go to state 49 - T_GLOBAL shift, and go to state 50 - T_STATIC shift, and go to state 53 - T_UNSET shift, and go to state 54 - T_ISSET shift, and go to state 55 - T_EMPTY shift, and go to state 56 - T_LIST shift, and go to state 60 - T_ARRAY shift, and go to state 61 - T_CLASS_C shift, and go to state 62 - T_METHOD_C shift, and go to state 63 - T_FUNC_C shift, and go to state 64 - T_LINE shift, and go to state 65 - T_FILE shift, and go to state 66 - T_START_HEREDOC shift, and go to state 67 - '(' shift, and go to state 68 - ';' shift, and go to state 69 - '{' shift, and go to state 70 - '$' shift, and go to state 71 - '`' shift, and go to state 72 - '"' shift, and go to state 73 - ''' shift, and go to state 74 - - statement go to state 718 - unticked_statement go to state 77 - foreach_statement go to state 720 - expr_without_variable go to state 84 - function_call go to state 85 - fully_qualified_class_name go to state 86 - common_scalar go to state 87 - scalar go to state 88 - expr go to state 89 - r_variable go to state 90 - rw_variable go to state 91 - variable go to state 92 - variable_without_objects go to state 93 - static_member go to state 94 - base_variable_with_function_calls go to state 95 - base_variable go to state 96 - reference_variable go to state 97 - compound_variable go to state 98 - simple_indirect_reference go to state 99 - internal_functions_in_yacc go to state 100 - class_constant go to state 101 + $default reduce using rule 107 (foreach_statement) state 695 - 118 switch_case_list: ':' ';' case_list T_ENDSWITCH ';' . + 55 unticked_statement: T_FOREACH '(' expr_without_variable T_AS @17 variable foreach_optional_arg ')' @18 foreach_statement . - $default reduce using rule 118 (switch_case_list) + $default reduce using rule 55 (unticked_statement) state 696 - 121 case_list: case_list T_CASE expr case_separator . @33 inner_statement_list + 52 unticked_statement: T_FOREACH '(' variable T_AS @15 foreach_variable foreach_optional_arg ')' @16 foreach_statement . - $default reduce using rule 120 (@33) - - @33 go to state 721 + $default reduce using rule 52 (unticked_statement) state 697 - 123 case_list: case_list T_DEFAULT case_separator @34 . inner_statement_list + 116 switch_case_list: ':' ';' case_list T_ENDSWITCH ';' . + + $default reduce using rule 116 (switch_case_list) + + +state 698 + + 119 case_list: case_list T_CASE expr case_separator . @31 inner_statement_list + + $default reduce using rule 118 (@31) + + @31 go to state 720 + + +state 699 + + 121 case_list: case_list T_DEFAULT case_separator @32 . inner_statement_list $default reduce using rule 11 (inner_statement_list) - inner_statement_list go to state 722 + inner_statement_list go to state 721 -state 698 +state 700 10 inner_statement_list: inner_statement_list . @2 inner_statement - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference T_STRING @30 '(' parameter_list ')' '{' inner_statement_list . '}' + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference T_STRING @28 '(' parameter_list ')' '{' inner_statement_list . '}' - '}' shift, and go to state 723 + '}' shift, and go to state 722 $default reduce using rule 9 (@2) @2 go to state 300 -state 699 +state 701 - 145 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type '&' . T_VARIABLE - 146 | non_empty_parameter_list ',' optional_class_type '&' . T_VARIABLE '=' static_scalar + 143 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type '&' . T_VARIABLE + 144 | non_empty_parameter_list ',' optional_class_type '&' . T_VARIABLE '=' static_scalar - T_VARIABLE shift, and go to state 724 + T_VARIABLE shift, and go to state 723 -state 700 +state 702 - 144 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type T_VARIABLE . - 147 | non_empty_parameter_list ',' optional_class_type T_VARIABLE . '=' static_scalar + 142 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type T_VARIABLE . + 145 | non_empty_parameter_list ',' optional_class_type T_VARIABLE . '=' static_scalar - '=' shift, and go to state 725 + '=' shift, and go to state 724 - $default reduce using rule 144 (non_empty_parameter_list) + $default reduce using rule 142 (non_empty_parameter_list) -state 701 +state 703 - 142 non_empty_parameter_list: optional_class_type '&' T_VARIABLE '=' . static_scalar + 140 non_empty_parameter_list: optional_class_type '&' T_VARIABLE '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -18327,41 +18333,41 @@ state 701 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 726 + static_scalar go to state 725 static_class_constant go to state 390 -state 702 +state 704 - 143 non_empty_parameter_list: optional_class_type T_VARIABLE '=' static_scalar . + 141 non_empty_parameter_list: optional_class_type T_VARIABLE '=' static_scalar . - $default reduce using rule 143 (non_empty_parameter_list) + $default reduce using rule 141 (non_empty_parameter_list) -state 703 +state 705 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 . T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 . T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches - T_VARIABLE shift, and go to state 727 + T_VARIABLE shift, and go to state 726 -state 704 +state 706 - 328 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar . + 326 non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar . - $default reduce using rule 328 (non_empty_static_array_pair_list) + $default reduce using rule 326 (non_empty_static_array_pair_list) -state 705 +state 707 - 195 class_constant_declaration: T_CONST T_STRING '=' static_scalar . + 193 class_constant_declaration: T_CONST T_STRING '=' static_scalar . - $default reduce using rule 195 (class_constant_declaration) + $default reduce using rule 193 (class_constant_declaration) -state 706 +state 708 - 193 class_variable_declaration: T_VARIABLE '=' . static_scalar + 191 class_variable_declaration: T_VARIABLE '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -18377,35 +18383,35 @@ state 706 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 728 + static_scalar go to state 727 static_class_constant go to state 390 -state 707 +state 709 - 190 class_variable_declaration: class_variable_declaration ',' . T_VARIABLE - 191 | class_variable_declaration ',' . T_VARIABLE '=' static_scalar + 188 class_variable_declaration: class_variable_declaration ',' . T_VARIABLE + 189 | class_variable_declaration ',' . T_VARIABLE '=' static_scalar - T_VARIABLE shift, and go to state 729 + T_VARIABLE shift, and go to state 728 -state 708 +state 710 - 171 class_statement: variable_modifiers @37 class_variable_declaration ';' . + 169 class_statement: variable_modifiers @35 class_variable_declaration ';' . - $default reduce using rule 171 (class_statement) + $default reduce using rule 169 (class_statement) -state 709 +state 711 - 175 class_statement: method_modifiers T_FUNCTION @38 is_reference . T_STRING @39 '(' parameter_list ')' method_body + 173 class_statement: method_modifiers T_FUNCTION @36 is_reference . T_STRING @37 '(' parameter_list ')' method_body - T_STRING shift, and go to state 730 + T_STRING shift, and go to state 729 -state 710 +state 712 - 194 class_constant_declaration: class_constant_declaration ',' T_STRING '=' . static_scalar + 192 class_constant_declaration: class_constant_declaration ',' T_STRING '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -18421,24 +18427,24 @@ state 710 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 731 + static_scalar go to state 730 static_class_constant go to state 390 -state 711 +state 713 - 346 variable_property: T_OBJECT_OPERATOR object_property @61 . method_or_not + 344 variable_property: T_OBJECT_OPERATOR object_property @59 . method_or_not - '(' shift, and go to state 550 + '(' shift, and go to state 552 - $default reduce using rule 349 (method_or_not) + $default reduce using rule 347 (method_or_not) - method_or_not go to state 732 + method_or_not go to state 731 -state 712 +state 714 - 133 new_elseif_list: new_elseif_list T_ELSEIF '(' . expr ')' ':' @36 inner_statement_list + 131 new_elseif_list: new_elseif_list T_ELSEIF '(' . expr ')' ':' @34 inner_statement_list T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -18490,7 +18496,7 @@ state 712 fully_qualified_class_name go to state 86 common_scalar go to state 87 scalar go to state 88 - expr go to state 733 + expr go to state 732 r_variable go to state 90 rw_variable go to state 91 variable go to state 92 @@ -18505,51 +18511,51 @@ state 712 class_constant go to state 101 -state 713 +state 715 - 137 new_else_single: T_ELSE ':' . inner_statement_list + 135 new_else_single: T_ELSE ':' . inner_statement_list $default reduce using rule 11 (inner_statement_list) - inner_statement_list go to state 734 + inner_statement_list go to state 733 -state 714 +state 716 23 unticked_statement: T_IF '(' expr ')' ':' @5 inner_statement_list @6 new_elseif_list new_else_single T_ENDIF . ';' - ';' shift, and go to state 735 + ';' shift, and go to state 734 -state 715 +state 717 - 130 elseif_list: elseif_list T_ELSEIF '(' expr . ')' @35 statement - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 128 elseif_list: elseif_list T_ELSEIF '(' expr . ')' @33 statement + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -18577,10 +18583,10 @@ state 715 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - ')' shift, and go to state 736 + ')' shift, and go to state 735 -state 716 +state 718 33 unticked_statement: T_FOR '(' for_expr ';' @11 for_expr ';' @12 for_expr ')' @13 . for_statement @@ -18590,7 +18596,7 @@ state 716 T_INCLUDE_ONCE shift, and go to state 8 T_INCLUDE shift, and go to state 9 T_PRINT shift, and go to state 10 - ':' shift, and go to state 737 + ':' shift, and go to state 736 '+' shift, and go to state 11 '-' shift, and go to state 12 '!' shift, and go to state 13 @@ -18650,9 +18656,9 @@ state 716 '"' shift, and go to state 73 ''' shift, and go to state 74 - statement go to state 738 + statement go to state 737 unticked_statement go to state 77 - for_statement go to state 739 + for_statement go to state 738 expr_without_variable go to state 84 function_call go to state 85 fully_qualified_class_name go to state 86 @@ -18673,79 +18679,61 @@ state 716 class_constant go to state 101 -state 717 - - 110 foreach_statement: ':' . inner_statement_list T_ENDFOREACH ';' - - $default reduce using rule 11 (inner_statement_list) - - inner_statement_list go to state 740 - - -state 718 - - 109 foreach_statement: statement . - - $default reduce using rule 109 (foreach_statement) - - state 719 - 57 unticked_statement: T_FOREACH '(' expr_without_variable @18 T_AS @19 variable foreach_optional_arg ')' @20 foreach_statement . - - $default reduce using rule 57 (unticked_statement) + 10 inner_statement_list: inner_statement_list . @2 inner_statement + 108 foreach_statement: ':' inner_statement_list . T_ENDFOREACH ';' + T_ENDFOREACH shift, and go to state 739 -state 720 - - 53 unticked_statement: T_FOREACH '(' variable @15 T_AS @16 foreach_variable foreach_optional_arg ')' @17 foreach_statement . + $default reduce using rule 9 (@2) - $default reduce using rule 53 (unticked_statement) + @2 go to state 300 -state 721 +state 720 - 121 case_list: case_list T_CASE expr case_separator @33 . inner_statement_list + 119 case_list: case_list T_CASE expr case_separator @31 . inner_statement_list $default reduce using rule 11 (inner_statement_list) - inner_statement_list go to state 741 + inner_statement_list go to state 740 -state 722 +state 721 10 inner_statement_list: inner_statement_list . @2 inner_statement - 123 case_list: case_list T_DEFAULT case_separator @34 inner_statement_list . + 121 case_list: case_list T_DEFAULT case_separator @32 inner_statement_list . - T_ENDSWITCH reduce using rule 123 (case_list) - T_CASE reduce using rule 123 (case_list) - T_DEFAULT reduce using rule 123 (case_list) - '}' reduce using rule 123 (case_list) + T_ENDSWITCH reduce using rule 121 (case_list) + T_CASE reduce using rule 121 (case_list) + T_DEFAULT reduce using rule 121 (case_list) + '}' reduce using rule 121 (case_list) $default reduce using rule 9 (@2) @2 go to state 300 -state 723 +state 722 - 86 unticked_function_declaration_statement: T_FUNCTION @29 is_reference T_STRING @30 '(' parameter_list ')' '{' inner_statement_list '}' . + 84 unticked_function_declaration_statement: T_FUNCTION @27 is_reference T_STRING @28 '(' parameter_list ')' '{' inner_statement_list '}' . - $default reduce using rule 86 (unticked_function_declaration_statement) + $default reduce using rule 84 (unticked_function_declaration_statement) -state 724 +state 723 - 145 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE . - 146 | non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE . '=' static_scalar + 143 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE . + 144 | non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE . '=' static_scalar - '=' shift, and go to state 742 + '=' shift, and go to state 741 - $default reduce using rule 145 (non_empty_parameter_list) + $default reduce using rule 143 (non_empty_parameter_list) -state 725 +state 724 - 147 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type T_VARIABLE '=' . static_scalar + 145 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type T_VARIABLE '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -18761,93 +18749,93 @@ state 725 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 743 + static_scalar go to state 742 static_class_constant go to state 390 +state 725 + + 140 non_empty_parameter_list: optional_class_type '&' T_VARIABLE '=' static_scalar . + + $default reduce using rule 140 (non_empty_parameter_list) + + state 726 - 142 non_empty_parameter_list: optional_class_type '&' T_VARIABLE '=' static_scalar . + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE . ')' @23 '{' inner_statement_list '}' @24 additional_catches - $default reduce using rule 142 (non_empty_parameter_list) + ')' shift, and go to state 743 state 727 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE . ')' @25 '{' inner_statement_list '}' @26 additional_catches + 191 class_variable_declaration: T_VARIABLE '=' static_scalar . - ')' shift, and go to state 744 + $default reduce using rule 191 (class_variable_declaration) state 728 - 193 class_variable_declaration: T_VARIABLE '=' static_scalar . + 188 class_variable_declaration: class_variable_declaration ',' T_VARIABLE . + 189 | class_variable_declaration ',' T_VARIABLE . '=' static_scalar + + '=' shift, and go to state 744 - $default reduce using rule 193 (class_variable_declaration) + $default reduce using rule 188 (class_variable_declaration) state 729 - 190 class_variable_declaration: class_variable_declaration ',' T_VARIABLE . - 191 | class_variable_declaration ',' T_VARIABLE . '=' static_scalar + 173 class_statement: method_modifiers T_FUNCTION @36 is_reference T_STRING . @37 '(' parameter_list ')' method_body - '=' shift, and go to state 745 + $default reduce using rule 172 (@37) - $default reduce using rule 190 (class_variable_declaration) + @37 go to state 745 state 730 - 175 class_statement: method_modifiers T_FUNCTION @38 is_reference T_STRING . @39 '(' parameter_list ')' method_body - - $default reduce using rule 174 (@39) + 192 class_constant_declaration: class_constant_declaration ',' T_STRING '=' static_scalar . - @39 go to state 746 + $default reduce using rule 192 (class_constant_declaration) state 731 - 194 class_constant_declaration: class_constant_declaration ',' T_STRING '=' static_scalar . + 344 variable_property: T_OBJECT_OPERATOR object_property @59 method_or_not . - $default reduce using rule 194 (class_constant_declaration) + $default reduce using rule 344 (variable_property) state 732 - 346 variable_property: T_OBJECT_OPERATOR object_property @61 method_or_not . - - $default reduce using rule 346 (variable_property) - - -state 733 - - 133 new_elseif_list: new_elseif_list T_ELSEIF '(' expr . ')' ':' @36 inner_statement_list - 228 expr_without_variable: expr . T_BOOLEAN_OR @44 expr - 230 | expr . T_BOOLEAN_AND @45 expr - 232 | expr . T_LOGICAL_OR @46 expr - 234 | expr . T_LOGICAL_AND @47 expr - 235 | expr . T_LOGICAL_XOR expr - 236 | expr . '|' expr - 237 | expr . '&' expr - 238 | expr . '^' expr - 239 | expr . '.' expr - 240 | expr . '+' expr - 241 | expr . '-' expr - 242 | expr . '*' expr - 243 | expr . '/' expr - 244 | expr . '%' expr - 245 | expr . T_SL expr - 246 | expr . T_SR expr - 251 | expr . T_IS_IDENTICAL expr - 252 | expr . T_IS_NOT_IDENTICAL expr - 253 | expr . T_IS_EQUAL expr - 254 | expr . T_IS_NOT_EQUAL expr - 255 | expr . '<' expr - 256 | expr . T_IS_SMALLER_OR_EQUAL expr - 257 | expr . '>' expr - 258 | expr . T_IS_GREATER_OR_EQUAL expr - 259 | expr . T_INSTANCEOF class_name_reference - 263 | expr . '?' @48 expr ':' @49 expr + 131 new_elseif_list: new_elseif_list T_ELSEIF '(' expr . ')' ':' @34 inner_statement_list + 226 expr_without_variable: expr . T_BOOLEAN_OR @42 expr + 228 | expr . T_BOOLEAN_AND @43 expr + 230 | expr . T_LOGICAL_OR @44 expr + 232 | expr . T_LOGICAL_AND @45 expr + 233 | expr . T_LOGICAL_XOR expr + 234 | expr . '|' expr + 235 | expr . '&' expr + 236 | expr . '^' expr + 237 | expr . '.' expr + 238 | expr . '+' expr + 239 | expr . '-' expr + 240 | expr . '*' expr + 241 | expr . '/' expr + 242 | expr . '%' expr + 243 | expr . T_SL expr + 244 | expr . T_SR expr + 249 | expr . T_IS_IDENTICAL expr + 250 | expr . T_IS_NOT_IDENTICAL expr + 251 | expr . T_IS_EQUAL expr + 252 | expr . T_IS_NOT_EQUAL expr + 253 | expr . '<' expr + 254 | expr . T_IS_SMALLER_OR_EQUAL expr + 255 | expr . '>' expr + 256 | expr . T_IS_GREATER_OR_EQUAL expr + 257 | expr . T_INSTANCEOF class_name_reference + 261 | expr . '?' @46 expr ':' @47 expr T_LOGICAL_OR shift, and go to state 183 T_LOGICAL_XOR shift, and go to state 184 @@ -18875,88 +18863,83 @@ state 733 '/' shift, and go to state 206 '%' shift, and go to state 207 T_INSTANCEOF shift, and go to state 208 - ')' shift, and go to state 747 + ')' shift, and go to state 746 -state 734 +state 733 10 inner_statement_list: inner_statement_list . @2 inner_statement - 137 new_else_single: T_ELSE ':' inner_statement_list . + 135 new_else_single: T_ELSE ':' inner_statement_list . - T_ENDIF reduce using rule 137 (new_else_single) + T_ENDIF reduce using rule 135 (new_else_single) $default reduce using rule 9 (@2) @2 go to state 300 -state 735 +state 734 23 unticked_statement: T_IF '(' expr ')' ':' @5 inner_statement_list @6 new_elseif_list new_else_single T_ENDIF ';' . $default reduce using rule 23 (unticked_statement) -state 736 +state 735 - 130 elseif_list: elseif_list T_ELSEIF '(' expr ')' . @35 statement + 128 elseif_list: elseif_list T_ELSEIF '(' expr ')' . @33 statement - $default reduce using rule 129 (@35) + $default reduce using rule 127 (@33) - @35 go to state 748 + @33 go to state 747 -state 737 +state 736 - 108 for_statement: ':' . inner_statement_list T_ENDFOR ';' + 106 for_statement: ':' . inner_statement_list T_ENDFOR ';' $default reduce using rule 11 (inner_statement_list) - inner_statement_list go to state 749 + inner_statement_list go to state 748 -state 738 +state 737 - 107 for_statement: statement . + 105 for_statement: statement . - $default reduce using rule 107 (for_statement) + $default reduce using rule 105 (for_statement) -state 739 +state 738 33 unticked_statement: T_FOR '(' for_expr ';' @11 for_expr ';' @12 for_expr ')' @13 for_statement . $default reduce using rule 33 (unticked_statement) -state 740 +state 739 - 10 inner_statement_list: inner_statement_list . @2 inner_statement - 110 foreach_statement: ':' inner_statement_list . T_ENDFOREACH ';' + 108 foreach_statement: ':' inner_statement_list T_ENDFOREACH . ';' - T_ENDFOREACH shift, and go to state 750 + ';' shift, and go to state 749 - $default reduce using rule 9 (@2) - @2 go to state 300 - - -state 741 +state 740 10 inner_statement_list: inner_statement_list . @2 inner_statement - 121 case_list: case_list T_CASE expr case_separator @33 inner_statement_list . + 119 case_list: case_list T_CASE expr case_separator @31 inner_statement_list . - T_ENDSWITCH reduce using rule 121 (case_list) - T_CASE reduce using rule 121 (case_list) - T_DEFAULT reduce using rule 121 (case_list) - '}' reduce using rule 121 (case_list) + T_ENDSWITCH reduce using rule 119 (case_list) + T_CASE reduce using rule 119 (case_list) + T_DEFAULT reduce using rule 119 (case_list) + '}' reduce using rule 119 (case_list) $default reduce using rule 9 (@2) @2 go to state 300 -state 742 +state 741 - 146 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE '=' . static_scalar + 144 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -18972,29 +18955,29 @@ state 742 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 751 + static_scalar go to state 750 static_class_constant go to state 390 -state 743 +state 742 - 147 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type T_VARIABLE '=' static_scalar . + 145 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type T_VARIABLE '=' static_scalar . - $default reduce using rule 147 (non_empty_parameter_list) + $default reduce using rule 145 (non_empty_parameter_list) -state 744 +state 743 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' . @25 '{' inner_statement_list '}' @26 additional_catches + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' . @23 '{' inner_statement_list '}' @24 additional_catches - $default reduce using rule 64 (@25) + $default reduce using rule 62 (@23) - @25 go to state 752 + @23 go to state 751 -state 745 +state 744 - 191 class_variable_declaration: class_variable_declaration ',' T_VARIABLE '=' . static_scalar + 189 class_variable_declaration: class_variable_declaration ',' T_VARIABLE '=' . static_scalar '+' shift, and go to state 384 '-' shift, and go to state 385 @@ -19010,27 +18993,27 @@ state 745 T_FILE shift, and go to state 66 common_scalar go to state 388 - static_scalar go to state 753 + static_scalar go to state 752 static_class_constant go to state 390 -state 746 +state 745 - 175 class_statement: method_modifiers T_FUNCTION @38 is_reference T_STRING @39 . '(' parameter_list ')' method_body + 173 class_statement: method_modifiers T_FUNCTION @36 is_reference T_STRING @37 . '(' parameter_list ')' method_body - '(' shift, and go to state 754 + '(' shift, and go to state 753 -state 747 +state 746 - 133 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' . ':' @36 inner_statement_list + 131 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' . ':' @34 inner_statement_list - ':' shift, and go to state 755 + ':' shift, and go to state 754 -state 748 +state 747 - 130 elseif_list: elseif_list T_ELSEIF '(' expr ')' @35 . statement + 128 elseif_list: elseif_list T_ELSEIF '(' expr ')' @33 . statement T_REQUIRE_ONCE shift, and go to state 5 T_REQUIRE shift, and go to state 6 @@ -19097,7 +19080,7 @@ state 748 '"' shift, and go to state 73 ''' shift, and go to state 74 - statement go to state 756 + statement go to state 755 unticked_statement go to state 77 expr_without_variable go to state 84 function_call go to state 85 @@ -19119,94 +19102,103 @@ state 748 class_constant go to state 101 -state 749 +state 748 10 inner_statement_list: inner_statement_list . @2 inner_statement - 108 for_statement: ':' inner_statement_list . T_ENDFOR ';' + 106 for_statement: ':' inner_statement_list . T_ENDFOR ';' - T_ENDFOR shift, and go to state 757 + T_ENDFOR shift, and go to state 756 $default reduce using rule 9 (@2) @2 go to state 300 +state 749 + + 108 foreach_statement: ':' inner_statement_list T_ENDFOREACH ';' . + + $default reduce using rule 108 (foreach_statement) + + state 750 - 110 foreach_statement: ':' inner_statement_list T_ENDFOREACH . ';' + 144 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE '=' static_scalar . - ';' shift, and go to state 758 + $default reduce using rule 144 (non_empty_parameter_list) state 751 - 146 non_empty_parameter_list: non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE '=' static_scalar . + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 . '{' inner_statement_list '}' @24 additional_catches - $default reduce using rule 146 (non_empty_parameter_list) + '{' shift, and go to state 757 state 752 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 . '{' inner_statement_list '}' @26 additional_catches + 189 class_variable_declaration: class_variable_declaration ',' T_VARIABLE '=' static_scalar . - '{' shift, and go to state 759 + $default reduce using rule 189 (class_variable_declaration) state 753 - 191 class_variable_declaration: class_variable_declaration ',' T_VARIABLE '=' static_scalar . + 173 class_statement: method_modifiers T_FUNCTION @36 is_reference T_STRING @37 '(' . parameter_list ')' method_body - $default reduce using rule 191 (class_variable_declaration) + T_STRING shift, and go to state 575 + T_ARRAY shift, and go to state 576 + ')' reduce using rule 137 (parameter_list) + $default reduce using rule 146 (optional_class_type) -state 754 + parameter_list go to state 758 + non_empty_parameter_list go to state 578 + optional_class_type go to state 579 - 175 class_statement: method_modifiers T_FUNCTION @38 is_reference T_STRING @39 '(' . parameter_list ')' method_body - T_STRING shift, and go to state 573 - T_ARRAY shift, and go to state 574 +state 754 - ')' reduce using rule 139 (parameter_list) - $default reduce using rule 148 (optional_class_type) + 131 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' ':' . @34 inner_statement_list - parameter_list go to state 760 - non_empty_parameter_list go to state 576 - optional_class_type go to state 577 + $default reduce using rule 130 (@34) + @34 go to state 759 -state 755 - 133 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' ':' . @36 inner_statement_list +state 755 - $default reduce using rule 132 (@36) + 128 elseif_list: elseif_list T_ELSEIF '(' expr ')' @33 statement . - @36 go to state 761 + $default reduce using rule 128 (elseif_list) state 756 - 130 elseif_list: elseif_list T_ELSEIF '(' expr ')' @35 statement . + 106 for_statement: ':' inner_statement_list T_ENDFOR . ';' - $default reduce using rule 130 (elseif_list) + ';' shift, and go to state 760 state 757 - 108 for_statement: ':' inner_statement_list T_ENDFOR . ';' + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' . inner_statement_list '}' @24 additional_catches + + $default reduce using rule 11 (inner_statement_list) - ';' shift, and go to state 762 + inner_statement_list go to state 761 state 758 - 110 foreach_statement: ':' inner_statement_list T_ENDFOREACH ';' . + 173 class_statement: method_modifiers T_FUNCTION @36 is_reference T_STRING @37 '(' parameter_list . ')' method_body - $default reduce using rule 110 (foreach_statement) + ')' shift, and go to state 762 state 759 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' . inner_statement_list '}' @26 additional_catches + 131 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' ':' @34 . inner_statement_list $default reduce using rule 11 (inner_statement_list) @@ -19215,34 +19207,41 @@ state 759 state 760 - 175 class_statement: method_modifiers T_FUNCTION @38 is_reference T_STRING @39 '(' parameter_list . ')' method_body + 106 for_statement: ':' inner_statement_list T_ENDFOR ';' . - ')' shift, and go to state 764 + $default reduce using rule 106 (for_statement) state 761 - 133 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' ':' @36 . inner_statement_list + 10 inner_statement_list: inner_statement_list . @2 inner_statement + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list . '}' @24 additional_catches - $default reduce using rule 11 (inner_statement_list) + '}' shift, and go to state 764 - inner_statement_list go to state 765 + $default reduce using rule 9 (@2) + + @2 go to state 300 state 762 - 108 for_statement: ':' inner_statement_list T_ENDFOR ';' . + 173 class_statement: method_modifiers T_FUNCTION @36 is_reference T_STRING @37 '(' parameter_list ')' . method_body - $default reduce using rule 108 (for_statement) + ';' shift, and go to state 765 + '{' shift, and go to state 766 + + method_body go to state 767 state 763 10 inner_statement_list: inner_statement_list . @2 inner_statement - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list . '}' @26 additional_catches - - '}' shift, and go to state 766 + 131 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' ':' @34 inner_statement_list . + T_ELSEIF reduce using rule 131 (new_elseif_list) + T_ELSE reduce using rule 131 (new_elseif_list) + T_ENDIF reduce using rule 131 (new_elseif_list) $default reduce using rule 9 (@2) @2 go to state 300 @@ -19250,202 +19249,179 @@ state 763 state 764 - 175 class_statement: method_modifiers T_FUNCTION @38 is_reference T_STRING @39 '(' parameter_list ')' . method_body + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' . @24 additional_catches - ';' shift, and go to state 767 - '{' shift, and go to state 768 + $default reduce using rule 63 (@24) - method_body go to state 769 + @24 go to state 768 state 765 - 10 inner_statement_list: inner_statement_list . @2 inner_statement - 133 new_elseif_list: new_elseif_list T_ELSEIF '(' expr ')' ':' @36 inner_statement_list . + 174 method_body: ';' . - T_ELSEIF reduce using rule 133 (new_elseif_list) - T_ELSE reduce using rule 133 (new_elseif_list) - T_ENDIF reduce using rule 133 (new_elseif_list) - $default reduce using rule 9 (@2) - - @2 go to state 300 + $default reduce using rule 174 (method_body) state 766 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' . @26 additional_catches + 175 method_body: '{' . inner_statement_list '}' - $default reduce using rule 65 (@26) + $default reduce using rule 11 (inner_statement_list) - @26 go to state 770 + inner_statement_list go to state 769 state 767 - 176 method_body: ';' . + 173 class_statement: method_modifiers T_FUNCTION @36 is_reference T_STRING @37 '(' parameter_list ')' method_body . - $default reduce using rule 176 (method_body) + $default reduce using rule 173 (class_statement) state 768 - 177 method_body: '{' . inner_statement_list '}' + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 . additional_catches - $default reduce using rule 11 (inner_statement_list) + T_CATCH shift, and go to state 770 - inner_statement_list go to state 771 + $default reduce using rule 67 (additional_catches) + + additional_catches go to state 771 + non_empty_additional_catches go to state 772 + additional_catch go to state 773 state 769 - 175 class_statement: method_modifiers T_FUNCTION @38 is_reference T_STRING @39 '(' parameter_list ')' method_body . + 10 inner_statement_list: inner_statement_list . @2 inner_statement + 175 method_body: '{' inner_statement_list . '}' - $default reduce using rule 175 (class_statement) + '}' shift, and go to state 774 + $default reduce using rule 9 (@2) -state 770 + @2 go to state 300 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 . additional_catches - T_CATCH shift, and go to state 772 +state 770 - $default reduce using rule 69 (additional_catches) + 72 additional_catch: T_CATCH . '(' fully_qualified_class_name @25 T_VARIABLE ')' @26 '{' inner_statement_list '}' - additional_catches go to state 773 - non_empty_additional_catches go to state 774 - additional_catch go to state 775 + '(' shift, and go to state 775 state 771 - 10 inner_statement_list: inner_statement_list . @2 inner_statement - 177 method_body: '{' inner_statement_list . '}' + 64 unticked_statement: T_TRY @20 '{' inner_statement_list '}' T_CATCH '(' @21 fully_qualified_class_name @22 T_VARIABLE ')' @23 '{' inner_statement_list '}' @24 additional_catches . - '}' shift, and go to state 776 + $default reduce using rule 64 (unticked_statement) - $default reduce using rule 9 (@2) - @2 go to state 300 +state 772 + 66 additional_catches: non_empty_additional_catches . + 69 non_empty_additional_catches: non_empty_additional_catches . additional_catch -state 772 + T_CATCH shift, and go to state 770 - 74 additional_catch: T_CATCH . '(' fully_qualified_class_name @27 T_VARIABLE ')' @28 '{' inner_statement_list '}' + $default reduce using rule 66 (additional_catches) - '(' shift, and go to state 777 + additional_catch go to state 776 state 773 - 66 unticked_statement: T_TRY @22 '{' inner_statement_list '}' T_CATCH '(' @23 fully_qualified_class_name @24 T_VARIABLE ')' @25 '{' inner_statement_list '}' @26 additional_catches . + 68 non_empty_additional_catches: additional_catch . - $default reduce using rule 66 (unticked_statement) + $default reduce using rule 68 (non_empty_additional_catches) state 774 - 68 additional_catches: non_empty_additional_catches . - 71 non_empty_additional_catches: non_empty_additional_catches . additional_catch - - T_CATCH shift, and go to state 772 - - $default reduce using rule 68 (additional_catches) + 175 method_body: '{' inner_statement_list '}' . - additional_catch go to state 778 + $default reduce using rule 175 (method_body) state 775 - 70 non_empty_additional_catches: additional_catch . + 72 additional_catch: T_CATCH '(' . fully_qualified_class_name @25 T_VARIABLE ')' @26 '{' inner_statement_list '}' - $default reduce using rule 70 (non_empty_additional_catches) + T_STRING shift, and go to state 419 + + fully_qualified_class_name go to state 777 state 776 - 177 method_body: '{' inner_statement_list '}' . + 69 non_empty_additional_catches: non_empty_additional_catches additional_catch . - $default reduce using rule 177 (method_body) + $default reduce using rule 69 (non_empty_additional_catches) state 777 - 74 additional_catch: T_CATCH '(' . fully_qualified_class_name @27 T_VARIABLE ')' @28 '{' inner_statement_list '}' + 72 additional_catch: T_CATCH '(' fully_qualified_class_name . @25 T_VARIABLE ')' @26 '{' inner_statement_list '}' - T_STRING shift, and go to state 419 + $default reduce using rule 70 (@25) - fully_qualified_class_name go to state 779 + @25 go to state 778 state 778 - 71 non_empty_additional_catches: non_empty_additional_catches additional_catch . + 72 additional_catch: T_CATCH '(' fully_qualified_class_name @25 . T_VARIABLE ')' @26 '{' inner_statement_list '}' - $default reduce using rule 71 (non_empty_additional_catches) + T_VARIABLE shift, and go to state 779 state 779 - 74 additional_catch: T_CATCH '(' fully_qualified_class_name . @27 T_VARIABLE ')' @28 '{' inner_statement_list '}' + 72 additional_catch: T_CATCH '(' fully_qualified_class_name @25 T_VARIABLE . ')' @26 '{' inner_statement_list '}' - $default reduce using rule 72 (@27) - - @27 go to state 780 + ')' shift, and go to state 780 state 780 - 74 additional_catch: T_CATCH '(' fully_qualified_class_name @27 . T_VARIABLE ')' @28 '{' inner_statement_list '}' + 72 additional_catch: T_CATCH '(' fully_qualified_class_name @25 T_VARIABLE ')' . @26 '{' inner_statement_list '}' + + $default reduce using rule 71 (@26) - T_VARIABLE shift, and go to state 781 + @26 go to state 781 state 781 - 74 additional_catch: T_CATCH '(' fully_qualified_class_name @27 T_VARIABLE . ')' @28 '{' inner_statement_list '}' + 72 additional_catch: T_CATCH '(' fully_qualified_class_name @25 T_VARIABLE ')' @26 . '{' inner_statement_list '}' - ')' shift, and go to state 782 + '{' shift, and go to state 782 state 782 - 74 additional_catch: T_CATCH '(' fully_qualified_class_name @27 T_VARIABLE ')' . @28 '{' inner_statement_list '}' - - $default reduce using rule 73 (@28) - - @28 go to state 783 - - -state 783 - - 74 additional_catch: T_CATCH '(' fully_qualified_class_name @27 T_VARIABLE ')' @28 . '{' inner_statement_list '}' - - '{' shift, and go to state 784 - - -state 784 - - 74 additional_catch: T_CATCH '(' fully_qualified_class_name @27 T_VARIABLE ')' @28 '{' . inner_statement_list '}' + 72 additional_catch: T_CATCH '(' fully_qualified_class_name @25 T_VARIABLE ')' @26 '{' . inner_statement_list '}' $default reduce using rule 11 (inner_statement_list) - inner_statement_list go to state 785 + inner_statement_list go to state 783 -state 785 +state 783 10 inner_statement_list: inner_statement_list . @2 inner_statement - 74 additional_catch: T_CATCH '(' fully_qualified_class_name @27 T_VARIABLE ')' @28 '{' inner_statement_list . '}' + 72 additional_catch: T_CATCH '(' fully_qualified_class_name @25 T_VARIABLE ')' @26 '{' inner_statement_list . '}' - '}' shift, and go to state 786 + '}' shift, and go to state 784 $default reduce using rule 9 (@2) @2 go to state 300 -state 786 +state 784 - 74 additional_catch: T_CATCH '(' fully_qualified_class_name @27 T_VARIABLE ')' @28 '{' inner_statement_list '}' . + 72 additional_catch: T_CATCH '(' fully_qualified_class_name @25 T_VARIABLE ')' @26 '{' inner_statement_list '}' . - $default reduce using rule 74 (additional_catch) + $default reduce using rule 72 (additional_catch) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 2273637a7..2eb27f493 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_parser.y,v 1.160.2.4.2.1 2006/05/11 21:07:39 helly Exp $ */ +/* $Id: zend_language_parser.y,v 1.160.2.4.2.4 2007/04/04 00:42:42 iliaa Exp $ */ /* * LALR shift/reduce conflicts and how they are resolved: @@ -162,7 +162,7 @@ top_statement: statement | function_declaration_statement { zend_do_early_binding(TSRMLS_C); } | class_declaration_statement { zend_do_early_binding(TSRMLS_C); } - | T_HALT_COMPILER '(' ')' ';' { REGISTER_MAIN_LONG_CONSTANT("__COMPILER_HALT_OFFSET__", zend_get_scanned_file_offset(TSRMLS_C), CONST_CS); YYACCEPT; } + | T_HALT_COMPILER '(' ')' ';' { zend_do_halt_compiler_register(TSRMLS_C); YYACCEPT; } ; @@ -214,14 +214,14 @@ unticked_statement: | expr ';' { zend_do_free(&$1 TSRMLS_CC); } | T_USE use_filename ';' { zend_error(E_COMPILE_ERROR,"use: Not yet supported. Please use include_once() or require_once()"); zval_dtor(&$2.u.constant); } | T_UNSET '(' unset_variables ')' ';' - | T_FOREACH '(' variable { zend_do_foreach_begin(&$1, &$2, &$3, 1 TSRMLS_CC); } T_AS - { zend_do_foreach_fetch(&$1, &$2, &$5 TSRMLS_CC); } - foreach_variable foreach_optional_arg ')' { zend_do_foreach_cont(&$1, &$5, &$7, &$8 TSRMLS_CC); } - foreach_statement { zend_do_foreach_end(&$1, &$5 TSRMLS_CC); } - | T_FOREACH '(' expr_without_variable { zend_do_foreach_begin(&$1, &$2, &$3, 0 TSRMLS_CC); } T_AS - { zend_do_foreach_fetch(&$1, &$2, &$5 TSRMLS_CC); } - variable foreach_optional_arg ')' { zend_check_writable_variable(&$7); zend_do_foreach_cont(&$1, &$5, &$7, &$8 TSRMLS_CC); } - foreach_statement { zend_do_foreach_end(&$1, &$5 TSRMLS_CC); } + | T_FOREACH '(' variable T_AS + { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 1 TSRMLS_CC); } + foreach_variable foreach_optional_arg ')' { zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); } + foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); } + | T_FOREACH '(' expr_without_variable T_AS + { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 0 TSRMLS_CC); } + variable foreach_optional_arg ')' { zend_check_writable_variable(&$6); zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); } + foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); } | T_DECLARE { $1.u.opline_num = get_next_op_number(CG(active_op_array)); zend_do_declare_begin(TSRMLS_C); } '(' declare_list ')' declare_statement { zend_do_declare_end(&$1 TSRMLS_CC); } | ';' /* empty statement */ | T_TRY { zend_do_try(&$1 TSRMLS_CC); } '{' inner_statement_list '}' diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index 32cec06f1..43e3a4f9a 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -357,165 +357,167 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); #undef yy_more_len -#define YY_NUM_RULES 160 -#define YY_END_OF_BUFFER 161 -static yyconst short int yy_accept[1411] = +#define YY_NUM_RULES 161 +#define YY_END_OF_BUFFER 162 +static yyconst short int yy_accept[1422] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 161, 111, 111, 159, 119, 96, 135, 120, - 96, 96, 96, 138, 96, 96, 96, 96, 96, 96, - 96, 102, 102, 96, 96, 96, 96, 96, 96, 117, - 137, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 97, 96, 99, 140, 156, 145, 140, 104, 104, - 145, 159, 118, 142, 145, 141, 158, 159, 143, 159, - 157, 155, 140, 159, 118, 38, 37, 101, 100, 127, - - 130, 130, 122, 122, 122, 121, 121, 121, 111, 0, - 111, 114, 112, 111, 119, 75, 0, 133, 0, 116, - 83, 132, 90, 86, 0, 134, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 80, 70, 78, - 71, 79, 36, 105, 82, 126, 120, 81, 105, 102, - 0, 0, 39, 0, 94, 76, 75, 74, 67, 77, - 95, 131, 88, 117, 117, 117, 117, 117, 23, 117, - 117, 117, 117, 117, 117, 15, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 9, 117, 117, 117, - 117, 117, 91, 117, 117, 117, 117, 117, 117, 117, - - 117, 117, 117, 117, 117, 87, 89, 140, 144, 98, - 36, 104, 0, 154, 150, 152, 154, 146, 118, 142, - 147, 141, 0, 148, 149, 143, 151, 155, 140, 139, - 139, 118, 0, 37, 100, 127, 129, 128, 122, 122, - 123, 124, 111, 0, 113, 0, 0, 73, 116, 132, - 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 105, 0, 105, 103, 0, 0, 84, 72, 85, - 131, 131, 117, 117, 117, 117, 117, 117, 92, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 2, 117, - 117, 117, 117, 117, 117, 117, 117, 16, 117, 117, - - 117, 117, 117, 117, 117, 117, 40, 117, 117, 117, - 117, 117, 117, 117, 117, 6, 117, 55, 42, 117, - 93, 104, 152, 153, 111, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, - 0, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 26, 117, 117, 117, 117, 117, 117, 117, 30, 12, - 117, 117, 117, 117, 117, 117, 50, 1, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 68, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 152, 153, 111, 0, 0, 0, 0, 0, 0, 0, - - 0, 43, 0, 0, 0, 0, 0, 0, 136, 136, - 0, 117, 117, 117, 117, 117, 117, 117, 69, 28, - 7, 32, 41, 4, 117, 117, 117, 117, 58, 117, - 117, 11, 117, 117, 117, 62, 117, 117, 117, 117, - 117, 117, 117, 57, 31, 117, 117, 117, 117, 117, - 117, 117, 8, 66, 13, 111, 0, 115, 115, 0, - 0, 0, 48, 0, 0, 0, 0, 0, 44, 0, - 0, 0, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 10, 117, 17, 117, 117, 117, 117, 117, - 56, 117, 117, 117, 117, 117, 117, 65, 117, 5, - - 60, 24, 111, 0, 0, 0, 46, 0, 0, 0, - 0, 0, 49, 0, 117, 117, 117, 117, 117, 117, - 117, 117, 20, 27, 117, 117, 117, 117, 34, 18, - 117, 117, 51, 117, 117, 63, 117, 53, 111, 0, - 0, 0, 0, 0, 47, 0, 45, 0, 117, 110, - 117, 117, 109, 117, 61, 29, 117, 117, 117, 14, - 3, 117, 117, 117, 117, 117, 117, 111, 0, 0, - 0, 106, 117, 117, 117, 117, 117, 25, 117, 117, - 117, 33, 64, 117, 111, 0, 0, 117, 117, 108, - 21, 19, 35, 117, 22, 117, 111, 0, 0, 117, - - 117, 117, 117, 111, 0, 0, 107, 117, 52, 54, - 111, 0, 0, 117, 111, 0, 0, 117, 111, 0, - 0, 59, 111, 0, 0, 111, 0, 0, 0, 111, - 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, - 111, 0, 0, 0, 0, 111, 0, 0, 0, 0, - 112, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - 0, 111, 0, 111, 0, 111, 0, 111, 0, 111, - - 0, 111, 0, 111, 0, 111, 0, 111, 0, 0 + 0, 0, 162, 112, 112, 160, 120, 97, 136, 121, + 97, 97, 97, 139, 97, 97, 97, 97, 97, 97, + 97, 103, 103, 97, 97, 97, 97, 97, 97, 118, + 138, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 98, 97, 100, 141, 157, 146, 141, 105, 105, + 146, 160, 119, 143, 146, 142, 159, 160, 144, 160, + 158, 156, 141, 160, 119, 38, 37, 102, 101, 128, + + 131, 131, 123, 123, 123, 122, 122, 122, 112, 0, + 112, 115, 113, 112, 120, 76, 0, 134, 0, 117, + 84, 133, 91, 87, 0, 135, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 81, 71, 79, + 72, 80, 36, 106, 83, 127, 121, 82, 106, 103, + 0, 0, 39, 0, 95, 77, 76, 75, 68, 78, + 96, 132, 89, 118, 118, 118, 118, 118, 23, 136, + 139, 0, 118, 118, 118, 118, 118, 118, 15, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 9, + 118, 118, 118, 118, 118, 92, 118, 118, 118, 118, + + 118, 118, 118, 118, 118, 118, 118, 118, 88, 90, + 141, 145, 99, 36, 105, 0, 155, 151, 153, 155, + 147, 119, 143, 148, 142, 0, 149, 150, 144, 152, + 156, 141, 140, 140, 119, 0, 37, 101, 128, 130, + 129, 123, 123, 124, 125, 112, 0, 114, 0, 0, + 74, 117, 133, 133, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 106, 0, 106, 104, 0, + 0, 85, 73, 86, 132, 132, 118, 118, 118, 118, + 118, 118, 93, 118, 0, 118, 118, 118, 118, 118, + 118, 118, 118, 2, 118, 118, 118, 118, 118, 118, + + 118, 118, 16, 118, 118, 118, 118, 118, 118, 118, + 118, 40, 118, 118, 118, 118, 118, 118, 118, 118, + 6, 118, 56, 42, 118, 94, 105, 153, 154, 112, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 126, 0, 0, 0, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 26, 118, 118, 118, + 118, 118, 118, 118, 30, 12, 118, 118, 118, 118, + 118, 118, 51, 1, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 69, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 153, 154, 112, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, + 0, 0, 0, 0, 0, 137, 137, 0, 118, 118, + 118, 118, 118, 118, 118, 70, 28, 7, 32, 41, + 4, 118, 118, 118, 118, 59, 118, 118, 11, 118, + 118, 118, 63, 118, 118, 118, 118, 118, 118, 118, + 58, 31, 118, 118, 118, 118, 118, 118, 118, 8, + 67, 13, 112, 0, 116, 116, 0, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 44, 0, 0, 0, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 10, 118, 17, 118, 118, 118, 118, 118, 57, 118, + + 118, 118, 118, 118, 118, 66, 118, 5, 61, 24, + 112, 0, 0, 0, 47, 0, 0, 0, 0, 0, + 0, 50, 0, 118, 118, 118, 118, 118, 118, 118, + 118, 20, 27, 118, 118, 118, 118, 34, 18, 118, + 118, 52, 118, 118, 64, 118, 54, 112, 0, 0, + 0, 46, 0, 0, 0, 48, 0, 45, 0, 118, + 111, 118, 118, 110, 118, 62, 29, 118, 118, 118, + 14, 3, 118, 118, 118, 118, 118, 118, 112, 0, + 0, 0, 107, 118, 118, 118, 118, 118, 25, 118, + 118, 118, 33, 65, 118, 112, 0, 0, 118, 118, + + 109, 21, 19, 35, 118, 22, 118, 112, 0, 0, + 118, 118, 118, 118, 112, 0, 0, 108, 118, 53, + 55, 112, 0, 0, 118, 112, 0, 0, 118, 112, + 0, 0, 60, 112, 0, 0, 112, 0, 0, 0, + 112, 0, 0, 0, 0, 0, 112, 0, 0, 0, + 0, 112, 0, 0, 0, 0, 112, 0, 0, 0, + 0, 113, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, + 0 } ; static yyconst int yy_ec[256] = @@ -561,417 +563,421 @@ static yyconst int yy_meta[63] = 4, 1 } ; -static yyconst short int yy_base[1831] = +static yyconst short int yy_base[1842] = { 0, - 7573, 7572, 0, 0, 62, 0, 114, 115, 121, 122, - 123, 151, 210, 0, 272, 0, 7582, 7581, 7580, 7579, - 132, 139, 7592, 7566, 121, 7599, 129, 7564, 131, 7599, - 0, 112, 137, 135, 333, 7599, 7563, 143, 151, 150, - 322, 322, 331, 7565, 320, 148, 153, 7560, 7560, 7553, - 7599, 303, 7533, 328, 323, 344, 340, 7538, 0, 356, - 7540, 7543, 7529, 305, 7541, 310, 99, 331, 7544, 7536, - 7528, 7599, 331, 7599, 0, 7599, 408, 7548, 451, 376, - 7599, 468, 0, 7541, 7565, 7542, 7599, 347, 7565, 457, - 7599, 469, 470, 462, 481, 7599, 0, 7599, 0, 0, - - 7551, 7550, 483, 7599, 7565, 7540, 7599, 7539, 7540, 484, - 7539, 7537, 469, 7526, 402, 7535, 485, 7599, 491, 0, - 7599, 493, 7599, 7599, 363, 7599, 7557, 0, 7508, 7510, - 7509, 7511, 7508, 7519, 7515, 7499, 7504, 7599, 7599, 7599, - 7599, 7599, 7599, 509, 7599, 7536, 7599, 7599, 512, 517, - 531, 522, 7599, 7497, 475, 7599, 7599, 7522, 7599, 7599, - 7521, 503, 7599, 0, 526, 7494, 7508, 7493, 0, 7505, - 468, 352, 7495, 477, 7503, 0, 7499, 7487, 7489, 7500, - 7502, 521, 7488, 7483, 7486, 7484, 0, 7482, 488, 7478, - 7477, 7472, 0, 456, 7492, 473, 7492, 7483, 7473, 7465, - - 7470, 7483, 7469, 7477, 7467, 7599, 7599, 0, 7599, 7599, - 0, 548, 555, 7599, 7599, 558, 561, 7599, 0, 7484, - 7599, 7486, 7485, 7599, 7599, 7508, 7599, 574, 595, 7599, - 7510, 584, 599, 0, 0, 0, 7599, 7599, 606, 7599, - 7599, 7599, 7487, 595, 7599, 7470, 7459, 7599, 0, 7599, - 7506, 7457, 7459, 7452, 7457, 7451, 7460, 7468, 7450, 7448, - 609, 597, 604, 609, 616, 7463, 7496, 7599, 7599, 7599, - 7599, 7494, 7451, 512, 7461, 7452, 7455, 7439, 0, 7457, - 7456, 7451, 7452, 7435, 7439, 569, 7440, 7450, 0, 7435, - 7444, 7428, 604, 7435, 7426, 7440, 7443, 7438, 7439, 7439, - - 7428, 7427, 7418, 7432, 7431, 7415, 0, 585, 7414, 7421, - 7411, 7410, 7410, 7409, 7413, 0, 7422, 0, 0, 7414, - 0, 637, 624, 643, 7433, 658, 7408, 7414, 3075, 3063, - 3071, 3071, 682, 3066, 3058, 3047, 3050, 666, 3036, 3084, - 645, 3051, 3039, 3036, 3037, 3021, 3014, 2988, 2973, 2986, - 0, 2986, 2974, 2985, 2967, 2977, 2984, 2963, 0, 2968, - 2945, 2964, 2939, 2945, 2923, 2937, 0, 0, 2912, 2908, - 2853, 2833, 2851, 2846, 2829, 2848, 2830, 2825, 0, 2824, - 2842, 2837, 2831, 2830, 2820, 2828, 2833, 2812, 2814, 2828, - 7599, 7599, 2840, 676, 685, 2814, 2804, 689, 2815, 2805, - - 571, 7599, 2814, 2812, 603, 2799, 2790, 2799, 7599, 2837, - 658, 2787, 2800, 2792, 2773, 2785, 2772, 2775, 0, 0, - 0, 0, 0, 0, 2756, 2749, 2751, 2754, 0, 2746, - 2728, 0, 2731, 2730, 2733, 0, 2731, 2722, 2705, 2703, - 2707, 2695, 2702, 0, 0, 2686, 2701, 2691, 2673, 2673, - 2678, 2666, 0, 0, 0, 2679, 681, 7599, 2694, 2641, - 690, 692, 7599, 2659, 2644, 2637, 2620, 694, 7599, 2632, - 695, 2622, 2616, 2633, 2598, 2618, 2613, 2595, 2606, 2585, - 2600, 2583, 0, 2590, 2587, 2568, 2571, 2561, 2566, 2558, - 0, 2566, 2560, 2559, 2559, 2548, 2530, 0, 2538, 0, - - 0, 0, 2549, 689, 709, 713, 7599, 2526, 2512, 716, - 717, 719, 7599, 2508, 2526, 2516, 2504, 2508, 2511, 2494, - 2475, 2484, 0, 0, 2483, 2480, 2472, 2469, 0, 0, - 2458, 2455, 2467, 2449, 2449, 0, 2446, 2445, 2449, 714, - 732, 735, 736, 738, 7599, 741, 7599, 742, 2440, 0, - 2414, 2411, 0, 2423, 0, 0, 2398, 2411, 2403, 0, - 0, 2389, 2384, 2381, 2387, 2386, 2364, 2385, 722, 2375, - 753, 0, 2361, 2361, 2371, 2362, 2357, 0, 2334, 2333, - 2339, 0, 0, 2330, 2348, 743, 2323, 2324, 2306, 0, - 0, 0, 0, 2316, 0, 2315, 2325, 750, 2308, 2309, - - 2288, 2288, 2283, 2293, 751, 2257, 0, 2264, 0, 0, - 2283, 756, 2270, 2263, 2273, 758, 2251, 2230, 2254, 763, - 2240, 0, 2241, 764, 759, 2238, 773, 802, 815, 2232, - 784, 827, 2203, 2202, 2208, 2223, 814, 2204, 2201, 2178, - 2197, 815, 2171, 2170, 842, 2187, 823, 2203, 2196, 850, - 7599, 2180, 832, 2177, 840, 2167, 846, 2165, 853, 2157, - 854, 2154, 861, 2152, 863, 2142, 871, 2139, 876, 2135, - 884, 2133, 886, 2127, 891, 2124, 893, 2122, 899, 2121, - 901, 2120, 916, 2118, 921, 2117, 922, 2103, 930, 2096, - 931, 2092, 939, 2090, 951, 2089, 952, 2088, 953, 2087, - - 960, 2083, 961, 2080, 962, 2078, 983, 2066, 990, 2061, - 991, 2060, 992, 2059, 997, 2058, 998, 2057, 1012, 2046, - 1020, 2043, 1027, 2037, 1029, 2036, 1037, 2032, 1038, 2031, - 1042, 2028, 1049, 2021, 1050, 2014, 1059, 2011, 1060, 2010, - 1067, 2001, 1071, 1999, 1082, 1989, 1088, 1988, 1089, 1984, - 1096, 1981, 1097, 1969, 1111, 1967, 1117, 1962, 1118, 1961, - 1119, 1960, 1126, 1959, 1128, 1958, 1148, 1956, 1149, 1955, - 1156, 1952, 1157, 1938, 1158, 1937, 1163, 1930, 1170, 1926, - 1178, 1925, 1188, 1924, 1193, 1923, 1195, 1922, 1203, 1921, - 1208, 1912, 1210, 1903, 1216, 1900, 1218, 1894, 1223, 1893, - - 1225, 1891, 1233, 1885, 1248, 1882, 1254, 1880, 1255, 1870, - 1256, 1865, 1262, 1863, 1263, 1862, 1269, 1861, 1277, 1860, - 1284, 1850, 1292, 1848, 1294, 1845, 1302, 1835, 1307, 1831, - 1309, 1825, 1314, 1822, 1315, 1818, 1322, 1815, 1324, 1804, - 1332, 1801, 1344, 1795, 1353, 1794, 1354, 1792, 1355, 1789, - 1361, 1786, 1362, 1772, 1366, 1771, 1376, 1766, 1383, 1764, - 1384, 1763, 1391, 1761, 1401, 1759, 1406, 1749, 1412, 1746, - 1413, 1742, 1414, 1736, 1421, 1729, 1423, 1726, 1435, 1719, - 1443, 1716, 1452, 1715, 1453, 1704, 1458, 1697, 1460, 1695, - 1465, 1694, 1473, 1693, 1475, 1690, 1483, 1687, 1488, 1673, - - 1490, 1672, 1498, 1667, 1505, 1665, 1511, 1664, 1513, 1661, - 1519, 1660, 1520, 1658, 1528, 1657, 1534, 1647, 1542, 1643, - 1549, 1638, 1551, 1635, 1557, 1629, 1559, 1628, 1564, 1626, - 1572, 1620, 1574, 139, 1579, 157, 1587, 312, 1589, 339, - 1597, 382, 1604, 454, 1609, 502, 1610, 520, 1618, 524, - 1619, 539, 1627, 561, 1639, 589, 1641, 602, 1648, 614, - 1649, 617, 1650, 641, 1656, 668, 1671, 674, 1678, 675, - 1679, 691, 1685, 697, 1686, 699, 1696, 700, 1700, 728, - 1707, 733, 1708, 739, 1717, 745, 1718, 762, 1725, 765, - 1730, 769, 1738, 771, 1740, 772, 1747, 774, 1748, 775, - - 1753, 782, 1755, 786, 1770, 788, 1776, 789, 1778, 795, - 1784, 797, 1785, 802, 1793, 809, 1799, 810, 1806, 812, - 1807, 822, 1814, 825, 1816, 831, 1824, 833, 1829, 834, - 1837, 836, 1839, 848, 1844, 858, 1846, 862, 1852, 865, - 1854, 869, 1869, 872, 1874, 878, 1875, 882, 1883, 892, - 1884, 895, 1892, 897, 1904, 907, 1905, 908, 1906, 909, - 1913, 910, 1914, 912, 1915, 917, 1936, 927, 1943, 929, - 1944, 932, 1945, 938, 1950, 940, 1951, 941, 1965, 947, - 1973, 950, 1980, 959, 1982, 968, 1990, 969, 1991, 970, - 1995, 971, 2002, 972, 2003, 973, 2012, 977, 2013, 984, - - 2020, 985, 2024, 999, 2035, 1002, 2041, 1003, 2042, 1005, - 2049, 1006, 2050, 1007, 2064, 1008, 2070, 1009, 2071, 1014, - 2072, 1016, 2079, 1028, 2081, 1031, 2101, 1035, 2102, 1036, - 2109, 1046, 2110, 1048, 2111, 1057, 2116, 1058, 2123, 1061, - 2131, 1068, 2141, 1075, 2146, 1078, 2148, 1079, 2156, 1083, - 2161, 1084, 2163, 1090, 2169, 1093, 2171, 1104, 2176, 1105, - 2178, 1106, 2186, 1107, 2201, 1108, 2207, 1113, 2208, 1125, - 2209, 1127, 2215, 1130, 2216, 1134, 2222, 1135, 2230, 1136, - 2237, 1137, 2245, 1139, 2247, 1143, 2255, 1150, 2260, 1164, - 2262, 1165, 2267, 1167, 2268, 1168, 2275, 1169, 2277, 1171, - - 2285, 1174, 2297, 1180, 2306, 1182, 2307, 1186, 2308, 1189, - 2314, 1199, 2315, 1201, 2319, 1204, 2329, 1212, 2336, 1214, - 2337, 1224, 2344, 1227, 2354, 1229, 2359, 1231, 2365, 1234, - 2366, 1241, 2367, 1242, 2374, 1244, 2376, 1249, 2388, 1264, - 2396, 1267, 2405, 1270, 2406, 1271, 2411, 1273, 2413, 1274, - 2418, 1279, 2426, 1285, 2428, 1288, 2436, 1300, 2441, 1301, - 2443, 1303, 2451, 1313, 2458, 1320, 2464, 1323, 2466, 1326, - 2472, 1330, 2473, 1331, 2481, 1333, 2487, 1340, 2495, 1343, - 2502, 1348, 2504, 1352, 2510, 1363, 2512, 1370, 2517, 1372, - 2525, 1373, 2527, 1374, 2532, 1377, 2540, 1378, 2542, 1392, - - 2550, 1395, 2557, 1399, 2562, 1400, 2563, 1402, 2571, 1408, - 2572, 1420, 2580, 1422, 2592, 1425, 2594, 1429, 2601, 1430, - 2602, 1431, 2603, 1432, 2609, 1434, 2624, 1445, 2631, 1447, - 2632, 1451, 2638, 1454, 2639, 1464, 2649, 1466, 2653, 1469, - 2660, 1471, 2661, 1477, 2670, 1481, 2671, 1484, 2678, 1494, - 2683, 1496, 2691, 1499, 2693, 1506, 2700, 1507, 2701, 1509, - 2706, 1521, 2708, 1524, 2723, 1527, 2729, 1529, 2731, 1530, - 2737, 1536, 2738, 1539, 2746, 1544, 2752, 1550, 2759, 1553, - 2760, 1565, 2767, 1566, 2769, 1568, 2777, 1570, 2782, 1580, - 2790, 1583, 2792, 1585, 2797, 1595, 2799, 1596, 2805, 1598, - - 2807, 1605, 2822, 1608, 2827, 1615, 2828, 7599, 2836, 7599, - 2888, 2899, 2910, 2921, 2932, 2943, 2954, 1631, 2965, 2969, - 2979, 2989, 2993, 3004, 3013, 3017, 3021, 3032, 3043, 3054, - 3058, 3069, 3079, 3090, 3099, 3110, 3121, 3132, 3143, 3154, - 3165, 3176, 3187, 3198, 3209, 3220, 3231, 3242, 3253, 3264, - 3275, 3286, 3297, 3308, 3319, 3330, 3341, 3352, 3363, 3374, - 3385, 3396, 3407, 3418, 3429, 3440, 3451, 3462, 3473, 3484, - 3495, 3506, 3517, 3528, 3539, 3550, 3561, 3572, 3583, 3594, - 3605, 3616, 3627, 3638, 3649, 3660, 3671, 3682, 3693, 3704, - 3715, 3726, 3737, 3748, 3759, 3770, 3781, 3792, 3803, 3814, - - 3825, 3836, 3847, 3858, 3869, 3880, 3891, 3902, 3913, 3924, - 3935, 3946, 3957, 3968, 3979, 3990, 4001, 4012, 4023, 4034, - 4045, 4056, 4067, 4078, 4089, 4100, 4111, 4122, 4133, 4144, - 4155, 4166, 4177, 4188, 4199, 4210, 4221, 4232, 4243, 4254, - 4265, 4276, 4287, 4298, 4309, 4320, 4331, 4342, 4353, 4364, - 4375, 4386, 4397, 4408, 4419, 4430, 4441, 4452, 4463, 4474, - 4485, 4496, 4507, 4518, 4529, 4540, 4551, 4562, 4573, 4584, - 4595, 4606, 4617, 4628, 4639, 4650, 4661, 4672, 4683, 4694, - 4705, 4716, 4727, 4738, 4749, 4760, 4771, 4782, 4793, 4804, - 4815, 4826, 4837, 4848, 4859, 4870, 4881, 4892, 4903, 4914, - - 4925, 4936, 4947, 4958, 4969, 4980, 4991, 5002, 5013, 5024, - 5035, 5046, 5057, 5068, 5079, 5090, 5101, 5112, 5123, 5134, - 5145, 5156, 5167, 5178, 5189, 5200, 5211, 5222, 5233, 5244, - 5255, 5266, 5277, 5288, 5299, 5310, 5321, 5332, 5343, 5354, - 5365, 5376, 5387, 5398, 5409, 5420, 5431, 5442, 5453, 5464, - 5475, 5486, 5497, 5508, 5519, 5530, 5541, 5552, 5563, 5574, - 5585, 5596, 5607, 5618, 5629, 5640, 5651, 5662, 5673, 5684, - 5695, 5706, 5717, 5728, 5739, 5750, 5761, 5772, 5783, 5794, - 5805, 5816, 5827, 5838, 5849, 5860, 5871, 5882, 5893, 5904, - 5915, 5926, 5937, 5948, 5959, 5970, 5981, 5992, 6003, 6014, - - 6025, 6036, 6047, 6058, 6069, 6080, 6091, 6102, 6113, 6124, - 6135, 6146, 6157, 6168, 6179, 6190, 6201, 6212, 6223, 6234, - 6245, 6256, 6267, 6278, 6289, 6300, 6311, 6322, 6333, 6344, - 6355, 6366, 6377, 6388, 6399, 6410, 6421, 6432, 6443, 6454, - 6465, 6476, 6487, 6498, 6509, 6520, 6531, 6542, 6553, 6564, - 6575, 6586, 6597, 6608, 6619, 6630, 6641, 6652, 6663, 6674, - 6685, 6696, 6707, 6718, 6729, 6740, 6751, 6762, 6773, 6784, - 6795, 6806, 6817, 6828, 6839, 6850, 6861, 6872, 6883, 6894, - 6905, 6916, 6927, 6938, 6949, 6960, 6971, 6982, 6993, 7004, - 7015, 7026, 7037, 7048, 7059, 7070, 7081, 7092, 7103, 7114, - - 7125, 7136, 7147, 7158, 7169, 7180, 7191, 7202, 7213, 7224, - 7235, 7246, 7257, 7268, 7279, 7290, 7301, 7312, 7323, 7334, - 7345, 7356, 7367, 7378, 7389, 7400, 7411, 7422, 7433, 7444 + 7591, 7590, 0, 0, 62, 0, 114, 115, 121, 122, + 123, 151, 210, 0, 272, 0, 7600, 7599, 7598, 7597, + 132, 139, 7610, 7584, 121, 7617, 129, 7582, 131, 7617, + 0, 112, 137, 135, 333, 7617, 7581, 143, 151, 150, + 322, 322, 331, 7583, 320, 148, 153, 7578, 7578, 7571, + 7617, 303, 351, 329, 323, 344, 340, 7557, 0, 357, + 7559, 7562, 7548, 305, 7560, 330, 99, 326, 7563, 7555, + 7547, 7617, 332, 7617, 0, 7617, 409, 7567, 452, 385, + 7617, 469, 0, 7560, 7584, 7561, 7617, 465, 7584, 458, + 7617, 471, 474, 463, 484, 7617, 0, 7617, 0, 0, + + 7570, 7569, 489, 7617, 7584, 7559, 7617, 7558, 7559, 472, + 7558, 7556, 470, 7545, 499, 7554, 480, 7617, 389, 0, + 7617, 502, 7617, 7617, 483, 7617, 7576, 0, 7527, 479, + 7529, 7531, 7528, 7539, 7535, 7519, 7524, 7617, 7617, 7617, + 7617, 7617, 7617, 510, 7617, 7556, 7617, 7617, 513, 518, + 532, 523, 7617, 7517, 486, 7617, 7617, 7542, 7617, 7617, + 7541, 538, 7617, 0, 527, 7514, 7528, 7513, 0, 516, + 539, 7538, 7524, 512, 480, 7514, 359, 7522, 0, 7518, + 7506, 7508, 7519, 7521, 525, 7507, 7502, 7505, 7503, 0, + 7501, 534, 7497, 7496, 7491, 0, 529, 7511, 526, 7511, + + 7502, 7492, 7484, 7489, 7502, 7488, 7496, 7486, 7617, 7617, + 0, 7617, 7617, 0, 560, 563, 7617, 7617, 554, 569, + 7617, 0, 7503, 7617, 7505, 7504, 7617, 7617, 7527, 7617, + 582, 603, 7617, 7529, 592, 607, 0, 0, 0, 7617, + 7617, 614, 7617, 7617, 7617, 7506, 603, 7617, 7489, 7478, + 7617, 0, 7617, 7525, 7476, 7479, 7477, 7470, 7475, 7469, + 7478, 7486, 7468, 7466, 617, 605, 612, 617, 624, 7481, + 7514, 7617, 7617, 7617, 7617, 7512, 7469, 483, 7479, 7470, + 7473, 7457, 0, 7475, 7483, 7473, 7468, 7469, 7452, 7456, + 577, 7457, 7467, 0, 7452, 7461, 7445, 612, 7452, 7443, + + 7457, 7460, 7455, 7456, 7456, 7445, 7444, 7435, 7449, 7448, + 7432, 0, 353, 7431, 7438, 7428, 7427, 7427, 7426, 7430, + 0, 7439, 0, 0, 7431, 0, 645, 627, 651, 7450, + 666, 7425, 7431, 7438, 7437, 7425, 7434, 7434, 690, 7429, + 7421, 7423, 7426, 674, 7412, 7460, 649, 7427, 7415, 7412, + 7413, 7410, 7403, 7404, 7396, 7409, 0, 7411, 7399, 7412, + 7396, 7406, 7413, 7392, 0, 7403, 7386, 7405, 7394, 7402, + 7384, 7398, 0, 0, 7391, 7392, 7402, 7382, 7400, 7395, + 7378, 7397, 7379, 7376, 0, 7375, 7393, 7388, 7383, 7382, + 7372, 7380, 7385, 7364, 7366, 7380, 7617, 7617, 7392, 684, + + 693, 7367, 7357, 7363, 697, 7368, 7359, 611, 7617, 7371, + 7374, 698, 7362, 7355, 7365, 7617, 7403, 653, 7353, 7366, + 7367, 7349, 7363, 7359, 7365, 0, 0, 0, 0, 0, + 0, 7351, 7346, 7351, 7356, 0, 7358, 7342, 0, 7350, + 7349, 7353, 0, 7353, 7346, 7342, 7340, 7348, 7337, 7344, + 0, 0, 2983, 2999, 2997, 2981, 2984, 2994, 2975, 0, + 0, 0, 2990, 689, 7617, 3011, 2960, 700, 2954, 702, + 7617, 2977, 2972, 2971, 2942, 703, 7617, 2954, 706, 2917, + 2906, 2925, 2901, 2921, 2918, 2899, 2910, 2891, 2906, 2884, + 0, 2885, 2891, 2861, 2866, 2854, 2864, 2838, 0, 2842, + + 2776, 2777, 2778, 2773, 2757, 0, 2771, 0, 0, 0, + 2783, 697, 727, 719, 7617, 721, 2760, 2755, 724, 725, + 731, 7617, 2752, 2771, 2770, 2759, 2764, 2767, 2760, 2743, + 2757, 0, 0, 2760, 2758, 2754, 2748, 0, 0, 2738, + 2737, 2750, 2741, 2742, 0, 2735, 2738, 2743, 715, 743, + 737, 7617, 740, 746, 749, 7617, 750, 7617, 752, 2735, + 0, 2716, 2694, 0, 2707, 0, 0, 2686, 2692, 2686, + 0, 0, 2672, 2676, 2674, 2659, 2659, 2646, 2666, 748, + 2654, 762, 0, 2638, 2636, 2647, 2638, 2624, 0, 2602, + 2606, 2612, 0, 0, 2603, 2623, 749, 2592, 2604, 2576, + + 0, 0, 0, 0, 2586, 0, 2583, 2588, 759, 2570, + 2576, 2565, 2566, 2551, 2557, 766, 2525, 0, 2532, 0, + 0, 2551, 771, 2539, 2529, 2539, 777, 2522, 2486, 2511, + 781, 2496, 0, 2508, 788, 767, 2506, 789, 817, 824, + 2497, 806, 842, 2470, 2467, 2464, 2469, 827, 2450, 2449, + 2439, 2460, 829, 2433, 2430, 847, 2451, 838, 2459, 2451, + 857, 7617, 2434, 847, 2423, 855, 2422, 860, 2420, 861, + 2419, 867, 2417, 868, 2397, 869, 2394, 873, 2392, 878, + 2391, 899, 2388, 901, 2382, 906, 2379, 907, 2377, 908, + 2358, 913, 2352, 914, 2351, 919, 2349, 936, 2348, 945, + + 2346, 947, 2345, 953, 2342, 954, 2331, 958, 2320, 959, + 2309, 965, 2306, 967, 2305, 976, 2303, 987, 2302, 993, + 2300, 998, 2291, 999, 2280, 1004, 2277, 1005, 2274, 1013, + 2263, 1027, 2260, 1033, 2259, 1034, 2257, 1035, 2254, 1039, + 2251, 1044, 2237, 1045, 2234, 1065, 2232, 1067, 2231, 1073, + 2228, 1074, 2217, 1075, 2214, 1079, 2211, 1080, 2192, 1085, + 2191, 1105, 2189, 1111, 2188, 1113, 2186, 1115, 2185, 1119, + 2182, 1120, 2171, 1125, 2152, 1126, 2149, 1133, 2146, 1151, + 2145, 1155, 2143, 1159, 2142, 1161, 2140, 1165, 2139, 1166, + 2106, 1172, 2104, 1173, 2103, 1187, 2101, 1195, 2100, 1201, + + 2099, 1205, 2097, 1207, 2094, 1212, 2064, 1213, 2061, 1218, + 2060, 1227, 2058, 1233, 2057, 1235, 2055, 1241, 2054, 1247, + 2051, 1253, 2032, 1258, 2029, 1264, 2018, 1273, 2015, 1275, + 2014, 1279, 2012, 1281, 2011, 1286, 2009, 1287, 1992, 1293, + 1989, 1304, 1986, 1315, 1983, 1319, 1972, 1321, 1969, 1325, + 1968, 1326, 1966, 1327, 1963, 1332, 1952, 1333, 1946, 1355, + 1943, 1361, 1941, 1363, 1940, 1365, 1937, 1367, 1926, 1372, + 1923, 1373, 1912, 1378, 1901, 1393, 1900, 1395, 1898, 1401, + 1897, 1403, 1895, 1407, 1894, 1413, 1891, 1418, 1869, 1424, + 1864, 1433, 1861, 1435, 1858, 1439, 1855, 1441, 1854, 1447, + + 1852, 1453, 1851, 1464, 1849, 1470, 1826, 1475, 1824, 1479, + 1823, 1481, 1821, 1485, 1812, 1487, 1809, 1492, 1806, 1493, + 1803, 1510, 1792, 1515, 1786, 1521, 1783, 1523, 1781, 1525, + 1780, 1527, 1777, 1532, 1766, 1533, 139, 1538, 157, 1555, + 312, 1561, 339, 1563, 341, 1567, 474, 1569, 530, 1573, + 567, 1578, 569, 1584, 597, 1595, 610, 1599, 615, 1601, + 625, 1607, 644, 1609, 645, 1613, 649, 1624, 676, 1630, + 682, 1635, 695, 1639, 735, 1641, 736, 1645, 747, 1647, + 753, 1653, 756, 1670, 757, 1675, 758, 1676, 760, 1681, + 767, 1683, 770, 1685, 778, 1687, 779, 1693, 782, 1698, + + 783, 1715, 785, 1716, 787, 1721, 797, 1723, 799, 1727, + 800, 1729, 807, 1733, 812, 1738, 814, 1744, 817, 1755, + 837, 1761, 840, 1767, 842, 1769, 843, 1773, 846, 1775, + 875, 1784, 877, 1790, 879, 1795, 880, 1801, 884, 1805, + 886, 1807, 889, 1813, 893, 1815, 912, 1830, 915, 1835, + 918, 1836, 921, 1841, 923, 1843, 924, 1845, 925, 1847, + 927, 1853, 930, 1875, 932, 1876, 944, 1881, 952, 1882, + 955, 1883, 964, 1887, 966, 1889, 969, 1893, 973, 1904, + 975, 1915, 978, 1921, 984, 1922, 991, 1927, 995, 1929, + 1000, 1933, 1006, 1935, 1009, 1944, 1010, 1950, 1012, 1955, + + 1015, 1961, 1021, 1967, 1022, 1973, 1024, 1975, 1041, 1981, + 1043, 1990, 1046, 1995, 1050, 1996, 1052, 2001, 1053, 2003, + 1055, 2007, 1056, 2013, 1081, 2021, 1084, 2035, 1086, 2036, + 1087, 2041, 1090, 2042, 1091, 2043, 1093, 2047, 1096, 2049, + 1098, 2053, 1121, 2075, 1124, 2081, 1127, 2082, 1130, 2083, + 1131, 2087, 1134, 2088, 1137, 2089, 1141, 2093, 1144, 2095, + 1148, 2121, 1163, 2123, 1167, 2127, 1170, 2128, 1174, 2129, + 1177, 2133, 1180, 2134, 1181, 2135, 1183, 2141, 1184, 2163, + 1194, 2167, 1203, 2169, 1206, 2173, 1209, 2174, 1220, 2175, + 1223, 2180, 1224, 2181, 1226, 2195, 1229, 2203, 1243, 2209, + + 1246, 2213, 1249, 2215, 1251, 2220, 1252, 2221, 1255, 2226, + 1266, 2235, 1269, 2241, 1272, 2243, 1283, 2249, 1292, 2255, + 1294, 2261, 1295, 2266, 1297, 2272, 1298, 2281, 1301, 2283, + 1312, 2287, 1323, 2289, 1334, 2294, 1337, 2295, 1338, 2301, + 1340, 2312, 1341, 2323, 1343, 2327, 1344, 2329, 1350, 2333, + 1369, 2334, 1371, 2335, 1374, 2340, 1380, 2341, 1383, 2363, + 1384, 2369, 1386, 2371, 1389, 2373, 1409, 2375, 1411, 2380, + 1412, 2381, 1414, 2386, 1415, 2401, 1426, 2403, 1429, 2409, + 1432, 2411, 1443, 2415, 1446, 2421, 1449, 2426, 1452, 2432, + 1455, 2441, 1457, 2443, 1458, 2447, 1461, 2449, 1472, 2455, + + 1483, 2461, 1486, 2472, 1489, 2478, 1498, 2483, 1500, 2487, + 1501, 2489, 1503, 2493, 1504, 2495, 1529, 2500, 1531, 2501, + 1534, 2518, 1540, 2523, 1543, 2529, 1544, 2531, 1546, 2533, + 1549, 2535, 1556, 2540, 1571, 2541, 1574, 2546, 1575, 2563, + 1577, 2569, 1580, 2571, 1586, 2575, 1589, 2577, 1592, 2581, + 1603, 2586, 1606, 2592, 1615, 2603, 1617, 2607, 1618, 2609, + 1620, 2615, 1621, 2617, 1632, 2621, 1643, 2632, 1646, 2638, + 1649, 2643, 1652, 2647, 1655, 2649, 1658, 2653, 1661, 2655, + 1663, 2661, 1664, 2678, 1689, 2683, 1691, 2684, 1692, 2689, + 1694, 2691, 1695, 2693, 1704, 2695, 1706, 2701, 1709, 2706, + + 1731, 2723, 1734, 2724, 1735, 2729, 1737, 2731, 1740, 2735, + 1746, 2737, 1749, 2741, 1752, 2746, 1762, 2752, 7617, 2763, + 7617, 2815, 2826, 2837, 2848, 2859, 2870, 2881, 1777, 2892, + 2896, 2906, 2916, 2920, 2931, 2940, 2944, 2948, 2959, 2970, + 2981, 2985, 2996, 3006, 3017, 3026, 3037, 3048, 3059, 3070, + 3081, 3092, 3103, 3114, 3125, 3136, 3147, 3158, 3169, 3180, + 3191, 3202, 3213, 3224, 3235, 3246, 3257, 3268, 3279, 3290, + 3301, 3312, 3323, 3334, 3345, 3356, 3367, 3378, 3389, 3400, + 3411, 3422, 3433, 3444, 3455, 3466, 3477, 3488, 3499, 3510, + 3521, 3532, 3543, 3554, 3565, 3576, 3587, 3598, 3609, 3620, + + 3631, 3642, 3653, 3664, 3675, 3686, 3697, 3708, 3719, 3730, + 3741, 3752, 3763, 3774, 3785, 3796, 3807, 3818, 3829, 3840, + 3851, 3862, 3873, 3884, 3895, 3906, 3917, 3928, 3939, 3950, + 3961, 3972, 3983, 3994, 4005, 4016, 4027, 4038, 4049, 4060, + 4071, 4082, 4093, 4104, 4115, 4126, 4137, 4148, 4159, 4170, + 4181, 4192, 4203, 4214, 4225, 4236, 4247, 4258, 4269, 4280, + 4291, 4302, 4313, 4324, 4335, 4346, 4357, 4368, 4379, 4390, + 4401, 4412, 4423, 4434, 4445, 4456, 4467, 4478, 4489, 4500, + 4511, 4522, 4533, 4544, 4555, 4566, 4577, 4588, 4599, 4610, + 4621, 4632, 4643, 4654, 4665, 4676, 4687, 4698, 4709, 4720, + + 4731, 4742, 4753, 4764, 4775, 4786, 4797, 4808, 4819, 4830, + 4841, 4852, 4863, 4874, 4885, 4896, 4907, 4918, 4929, 4940, + 4951, 4962, 4973, 4984, 4995, 5006, 5017, 5028, 5039, 5050, + 5061, 5072, 5083, 5094, 5105, 5116, 5127, 5138, 5149, 5160, + 5171, 5182, 5193, 5204, 5215, 5226, 5237, 5248, 5259, 5270, + 5281, 5292, 5303, 5314, 5325, 5336, 5347, 5358, 5369, 5380, + 5391, 5402, 5413, 5424, 5435, 5446, 5457, 5468, 5479, 5490, + 5501, 5512, 5523, 5534, 5545, 5556, 5567, 5578, 5589, 5600, + 5611, 5622, 5633, 5644, 5655, 5666, 5677, 5688, 5699, 5710, + 5721, 5732, 5743, 5754, 5765, 5776, 5787, 5798, 5809, 5820, + + 5831, 5842, 5853, 5864, 5875, 5886, 5897, 5908, 5919, 5930, + 5941, 5952, 5963, 5974, 5985, 5996, 6007, 6018, 6029, 6040, + 6051, 6062, 6073, 6084, 6095, 6106, 6117, 6128, 6139, 6150, + 6161, 6172, 6183, 6194, 6205, 6216, 6227, 6238, 6249, 6260, + 6271, 6282, 6293, 6304, 6315, 6326, 6337, 6348, 6359, 6370, + 6381, 6392, 6403, 6414, 6425, 6436, 6447, 6458, 6469, 6480, + 6491, 6502, 6513, 6524, 6535, 6546, 6557, 6568, 6579, 6590, + 6601, 6612, 6623, 6634, 6645, 6656, 6667, 6678, 6689, 6700, + 6711, 6722, 6733, 6744, 6755, 6766, 6777, 6788, 6799, 6810, + 6821, 6832, 6843, 6854, 6865, 6876, 6887, 6898, 6909, 6920, + + 6931, 6942, 6953, 6964, 6975, 6986, 6997, 7008, 7019, 7030, + 7041, 7052, 7063, 7074, 7085, 7096, 7107, 7118, 7129, 7140, + 7151, 7162, 7173, 7184, 7195, 7206, 7217, 7228, 7239, 7250, + 7261, 7272, 7283, 7294, 7305, 7316, 7327, 7338, 7349, 7360, + 7371 } ; -static yyconst short int yy_def[1831] = +static yyconst short int yy_def[1842] = { 0, - 1411, 1411, 1410, 3, 1410, 5, 1412, 1412, 5, 5, - 5, 5, 1410, 13, 1410, 15, 1413, 1413, 1413, 1413, - 1414, 1414, 1410, 1415, 1416, 1410, 1410, 1410, 1417, 1410, - 1418, 1410, 1410, 1419, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1420, - 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1410, 1410, 1410, 1421, 1410, 1410, 1421, 1410, 1410, - 1410, 1422, 1423, 1410, 1410, 1424, 1410, 1424, 1410, 1422, - 1410, 1410, 1421, 1422, 1425, 1410, 1426, 1410, 1427, 1428, - - 1410, 1410, 1429, 1410, 1410, 1410, 1410, 1410, 1430, 1415, - 1415, 1410, 1410, 1410, 1410, 1410, 1417, 1410, 1417, 1431, - 1410, 1410, 1410, 1410, 1419, 1410, 1419, 35, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - - 1420, 1420, 1420, 1420, 1420, 1410, 1410, 1421, 1410, 1410, - 1421, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1423, 1410, - 1410, 1424, 1424, 1410, 1410, 1410, 1410, 1410, 1421, 1410, - 1410, 1425, 1410, 1426, 1427, 1428, 1410, 1410, 1429, 1410, - 1410, 1410, 1432, 1430, 1410, 1410, 1410, 1410, 1431, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1433, 1410, 1410, 1410, - 1410, 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1410, 1410, 1410, 1434, 1432, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1433, - 1435, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1410, 1410, 1436, 1434, 1410, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1435, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1437, 1436, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - - 1420, 1420, 1438, 1437, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1439, 1438, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1440, 1439, 1410, - 1410, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1441, 1440, 1410, 1420, 1420, 1420, - 1420, 1420, 1420, 1420, 1420, 1420, 1442, 1441, 1410, 1420, - - 1420, 1420, 1420, 1443, 1442, 1410, 1420, 1420, 1420, 1420, - 1444, 1443, 1410, 1420, 1445, 1444, 1410, 1420, 1446, 1445, - 1410, 1420, 1447, 1446, 1410, 1448, 1447, 1410, 1410, 1449, - 1448, 1410, 1410, 1410, 1410, 1450, 1449, 1410, 1410, 1410, - 1451, 1450, 1410, 1410, 1410, 1452, 1451, 1410, 1410, 1410, - 1410, 1453, 1452, 1454, 1453, 1455, 1454, 1456, 1455, 1457, - 1456, 1458, 1457, 1459, 1458, 1460, 1459, 1461, 1460, 1462, - 1461, 1463, 1462, 1464, 1463, 1465, 1464, 1466, 1465, 1467, - 1466, 1468, 1467, 1469, 1468, 1470, 1469, 1471, 1470, 1472, - 1471, 1473, 1472, 1474, 1473, 1475, 1474, 1476, 1475, 1477, - - 1476, 1478, 1477, 1479, 1478, 1480, 1479, 1481, 1480, 1482, - 1481, 1483, 1482, 1484, 1483, 1485, 1484, 1486, 1485, 1487, - 1486, 1488, 1487, 1489, 1488, 1490, 1489, 1491, 1490, 1492, - 1491, 1493, 1492, 1494, 1493, 1495, 1494, 1496, 1495, 1497, - 1496, 1498, 1497, 1499, 1498, 1500, 1499, 1501, 1500, 1502, - 1501, 1503, 1502, 1504, 1503, 1505, 1504, 1506, 1505, 1507, - 1506, 1508, 1507, 1509, 1508, 1510, 1509, 1511, 1510, 1512, - 1511, 1513, 1512, 1514, 1513, 1515, 1514, 1516, 1515, 1517, - 1516, 1518, 1517, 1519, 1518, 1520, 1519, 1521, 1520, 1522, - 1521, 1523, 1522, 1524, 1523, 1525, 1524, 1526, 1525, 1527, - - 1526, 1528, 1527, 1529, 1528, 1530, 1529, 1531, 1530, 1532, - 1531, 1533, 1532, 1534, 1533, 1535, 1534, 1536, 1535, 1537, - 1536, 1538, 1537, 1539, 1538, 1540, 1539, 1541, 1540, 1542, - 1541, 1543, 1542, 1544, 1543, 1545, 1544, 1546, 1545, 1547, - 1546, 1548, 1547, 1549, 1548, 1550, 1549, 1551, 1550, 1552, - 1551, 1553, 1552, 1554, 1553, 1555, 1554, 1556, 1555, 1557, - 1556, 1558, 1557, 1559, 1558, 1560, 1559, 1561, 1560, 1562, - 1561, 1563, 1562, 1564, 1563, 1565, 1564, 1566, 1565, 1567, - 1566, 1568, 1567, 1569, 1568, 1570, 1569, 1571, 1570, 1572, - 1571, 1573, 1572, 1574, 1573, 1575, 1574, 1576, 1575, 1577, - - 1576, 1578, 1577, 1579, 1578, 1580, 1579, 1581, 1580, 1582, - 1581, 1583, 1582, 1584, 1583, 1585, 1584, 1586, 1585, 1587, - 1586, 1588, 1587, 1589, 1588, 1590, 1589, 1591, 1590, 1592, - 1591, 1593, 1592, 1594, 1593, 1595, 1594, 1596, 1595, 1597, - 1596, 1598, 1597, 1599, 1598, 1600, 1599, 1601, 1600, 1602, - 1601, 1603, 1602, 1604, 1603, 1605, 1604, 1606, 1605, 1607, - 1606, 1608, 1607, 1609, 1608, 1610, 1609, 1611, 1610, 1612, - 1611, 1613, 1612, 1614, 1613, 1615, 1614, 1616, 1615, 1617, - 1616, 1618, 1617, 1619, 1618, 1620, 1619, 1621, 1620, 1622, - 1621, 1623, 1622, 1624, 1623, 1625, 1624, 1626, 1625, 1627, - - 1626, 1628, 1627, 1629, 1628, 1630, 1629, 1631, 1630, 1632, - 1631, 1633, 1632, 1634, 1633, 1635, 1634, 1636, 1635, 1637, - 1636, 1638, 1637, 1639, 1638, 1640, 1639, 1641, 1640, 1642, - 1641, 1643, 1642, 1644, 1643, 1645, 1644, 1646, 1645, 1647, - 1646, 1648, 1647, 1649, 1648, 1650, 1649, 1651, 1650, 1652, - 1651, 1653, 1652, 1654, 1653, 1655, 1654, 1656, 1655, 1657, - 1656, 1658, 1657, 1659, 1658, 1660, 1659, 1661, 1660, 1662, - 1661, 1663, 1662, 1664, 1663, 1665, 1664, 1666, 1665, 1667, - 1666, 1668, 1667, 1669, 1668, 1670, 1669, 1671, 1670, 1672, - 1671, 1673, 1672, 1674, 1673, 1675, 1674, 1676, 1675, 1677, - - 1676, 1678, 1677, 1679, 1678, 1680, 1679, 1681, 1680, 1682, - 1681, 1683, 1682, 1684, 1683, 1685, 1684, 1686, 1685, 1687, - 1686, 1688, 1687, 1689, 1688, 1690, 1689, 1691, 1690, 1692, - 1691, 1693, 1692, 1694, 1693, 1695, 1694, 1696, 1695, 1697, - 1696, 1698, 1697, 1699, 1698, 1700, 1699, 1701, 1700, 1702, - 1701, 1703, 1702, 1704, 1703, 1705, 1704, 1706, 1705, 1707, - 1706, 1708, 1707, 1709, 1708, 1710, 1709, 1711, 1710, 1712, - 1711, 1713, 1712, 1714, 1713, 1715, 1714, 1716, 1715, 1717, - 1716, 1718, 1717, 1719, 1718, 1720, 1719, 1721, 1720, 1722, - 1721, 1723, 1722, 1724, 1723, 1725, 1724, 1726, 1725, 1727, - - 1726, 1728, 1727, 1729, 1728, 1730, 1729, 1731, 1730, 1732, - 1731, 1733, 1732, 1734, 1733, 1735, 1734, 1736, 1735, 1737, - 1736, 1738, 1737, 1739, 1738, 1740, 1739, 1741, 1740, 1742, - 1741, 1743, 1742, 1744, 1743, 1745, 1744, 1746, 1745, 1747, - 1746, 1748, 1747, 1749, 1748, 1750, 1749, 1751, 1750, 1752, - 1751, 1753, 1752, 1754, 1753, 1755, 1754, 1756, 1755, 1757, - 1756, 1758, 1757, 1759, 1758, 1760, 1759, 1761, 1760, 1762, - 1761, 1763, 1762, 1764, 1763, 1765, 1764, 1766, 1765, 1767, - 1766, 1768, 1767, 1769, 1768, 1770, 1769, 1771, 1770, 1772, - 1771, 1773, 1772, 1774, 1773, 1775, 1774, 1776, 1775, 1777, - - 1776, 1778, 1777, 1779, 1778, 1780, 1779, 1781, 1780, 1782, - 1781, 1783, 1782, 1784, 1783, 1785, 1784, 1786, 1785, 1787, - 1786, 1788, 1787, 1789, 1788, 1790, 1789, 1791, 1790, 1792, - 1791, 1793, 1792, 1794, 1793, 1795, 1794, 1796, 1795, 1797, - 1796, 1798, 1797, 1799, 1798, 1800, 1799, 1801, 1800, 1802, - 1801, 1803, 1802, 1804, 1803, 1805, 1804, 1806, 1805, 1807, - 1806, 1808, 1807, 1809, 1808, 1810, 1809, 1811, 1810, 1812, - 1811, 1813, 1812, 1814, 1813, 1815, 1814, 1816, 1815, 1817, - 1816, 1818, 1817, 1819, 1818, 1820, 1819, 1821, 1820, 1822, - 1821, 1823, 1822, 1824, 1823, 1825, 1824, 1826, 1825, 1827, - - 1826, 1828, 1827, 1829, 1828, 1830, 1829, 1410, 1830, 0, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410 + 1422, 1422, 1421, 3, 1421, 5, 1423, 1423, 5, 5, + 5, 5, 1421, 13, 1421, 15, 1424, 1424, 1424, 1424, + 1425, 1425, 1421, 1426, 1427, 1421, 1421, 1421, 1428, 1421, + 1429, 1421, 1421, 1430, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1431, + 1421, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1421, 1421, 1421, 1432, 1421, 1421, 1432, 1421, 1421, + 1421, 1433, 1434, 1421, 1421, 1435, 1421, 1435, 1421, 1433, + 1421, 1421, 1432, 1433, 1436, 1421, 1437, 1421, 1438, 1439, + + 1421, 1421, 1440, 1421, 1421, 1421, 1421, 1421, 1441, 1426, + 1426, 1421, 1421, 1421, 1421, 1421, 1428, 1421, 1428, 1442, + 1421, 1421, 1421, 1421, 1430, 1421, 1430, 35, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1431, 1431, 1431, 1431, 1431, 1431, 1428, + 1430, 1421, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1421, 1421, + 1432, 1421, 1421, 1432, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1434, 1421, 1421, 1435, 1435, 1421, 1421, 1421, 1421, + 1421, 1432, 1421, 1421, 1436, 1421, 1437, 1438, 1439, 1421, + 1421, 1440, 1421, 1421, 1421, 1443, 1441, 1421, 1421, 1421, + 1421, 1442, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1444, 1421, 1421, 1421, 1421, 1421, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1421, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1421, 1421, 1421, 1445, + 1443, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1444, 1446, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1421, 1421, 1447, 1445, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1446, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1448, 1447, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1449, 1448, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1450, 1449, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1451, 1450, + 1421, 1421, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, + 1431, 1431, 1431, 1431, 1431, 1452, 1451, 1421, 1431, 1431, + + 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1453, 1452, 1421, + 1431, 1431, 1431, 1431, 1454, 1453, 1421, 1431, 1431, 1431, + 1431, 1455, 1454, 1421, 1431, 1456, 1455, 1421, 1431, 1457, + 1456, 1421, 1431, 1458, 1457, 1421, 1459, 1458, 1421, 1421, + 1460, 1459, 1421, 1421, 1421, 1421, 1461, 1460, 1421, 1421, + 1421, 1462, 1461, 1421, 1421, 1421, 1463, 1462, 1421, 1421, + 1421, 1421, 1464, 1463, 1465, 1464, 1466, 1465, 1467, 1466, + 1468, 1467, 1469, 1468, 1470, 1469, 1471, 1470, 1472, 1471, + 1473, 1472, 1474, 1473, 1475, 1474, 1476, 1475, 1477, 1476, + 1478, 1477, 1479, 1478, 1480, 1479, 1481, 1480, 1482, 1481, + + 1483, 1482, 1484, 1483, 1485, 1484, 1486, 1485, 1487, 1486, + 1488, 1487, 1489, 1488, 1490, 1489, 1491, 1490, 1492, 1491, + 1493, 1492, 1494, 1493, 1495, 1494, 1496, 1495, 1497, 1496, + 1498, 1497, 1499, 1498, 1500, 1499, 1501, 1500, 1502, 1501, + 1503, 1502, 1504, 1503, 1505, 1504, 1506, 1505, 1507, 1506, + 1508, 1507, 1509, 1508, 1510, 1509, 1511, 1510, 1512, 1511, + 1513, 1512, 1514, 1513, 1515, 1514, 1516, 1515, 1517, 1516, + 1518, 1517, 1519, 1518, 1520, 1519, 1521, 1520, 1522, 1521, + 1523, 1522, 1524, 1523, 1525, 1524, 1526, 1525, 1527, 1526, + 1528, 1527, 1529, 1528, 1530, 1529, 1531, 1530, 1532, 1531, + + 1533, 1532, 1534, 1533, 1535, 1534, 1536, 1535, 1537, 1536, + 1538, 1537, 1539, 1538, 1540, 1539, 1541, 1540, 1542, 1541, + 1543, 1542, 1544, 1543, 1545, 1544, 1546, 1545, 1547, 1546, + 1548, 1547, 1549, 1548, 1550, 1549, 1551, 1550, 1552, 1551, + 1553, 1552, 1554, 1553, 1555, 1554, 1556, 1555, 1557, 1556, + 1558, 1557, 1559, 1558, 1560, 1559, 1561, 1560, 1562, 1561, + 1563, 1562, 1564, 1563, 1565, 1564, 1566, 1565, 1567, 1566, + 1568, 1567, 1569, 1568, 1570, 1569, 1571, 1570, 1572, 1571, + 1573, 1572, 1574, 1573, 1575, 1574, 1576, 1575, 1577, 1576, + 1578, 1577, 1579, 1578, 1580, 1579, 1581, 1580, 1582, 1581, + + 1583, 1582, 1584, 1583, 1585, 1584, 1586, 1585, 1587, 1586, + 1588, 1587, 1589, 1588, 1590, 1589, 1591, 1590, 1592, 1591, + 1593, 1592, 1594, 1593, 1595, 1594, 1596, 1595, 1597, 1596, + 1598, 1597, 1599, 1598, 1600, 1599, 1601, 1600, 1602, 1601, + 1603, 1602, 1604, 1603, 1605, 1604, 1606, 1605, 1607, 1606, + 1608, 1607, 1609, 1608, 1610, 1609, 1611, 1610, 1612, 1611, + 1613, 1612, 1614, 1613, 1615, 1614, 1616, 1615, 1617, 1616, + 1618, 1617, 1619, 1618, 1620, 1619, 1621, 1620, 1622, 1621, + 1623, 1622, 1624, 1623, 1625, 1624, 1626, 1625, 1627, 1626, + 1628, 1627, 1629, 1628, 1630, 1629, 1631, 1630, 1632, 1631, + + 1633, 1632, 1634, 1633, 1635, 1634, 1636, 1635, 1637, 1636, + 1638, 1637, 1639, 1638, 1640, 1639, 1641, 1640, 1642, 1641, + 1643, 1642, 1644, 1643, 1645, 1644, 1646, 1645, 1647, 1646, + 1648, 1647, 1649, 1648, 1650, 1649, 1651, 1650, 1652, 1651, + 1653, 1652, 1654, 1653, 1655, 1654, 1656, 1655, 1657, 1656, + 1658, 1657, 1659, 1658, 1660, 1659, 1661, 1660, 1662, 1661, + 1663, 1662, 1664, 1663, 1665, 1664, 1666, 1665, 1667, 1666, + 1668, 1667, 1669, 1668, 1670, 1669, 1671, 1670, 1672, 1671, + 1673, 1672, 1674, 1673, 1675, 1674, 1676, 1675, 1677, 1676, + 1678, 1677, 1679, 1678, 1680, 1679, 1681, 1680, 1682, 1681, + + 1683, 1682, 1684, 1683, 1685, 1684, 1686, 1685, 1687, 1686, + 1688, 1687, 1689, 1688, 1690, 1689, 1691, 1690, 1692, 1691, + 1693, 1692, 1694, 1693, 1695, 1694, 1696, 1695, 1697, 1696, + 1698, 1697, 1699, 1698, 1700, 1699, 1701, 1700, 1702, 1701, + 1703, 1702, 1704, 1703, 1705, 1704, 1706, 1705, 1707, 1706, + 1708, 1707, 1709, 1708, 1710, 1709, 1711, 1710, 1712, 1711, + 1713, 1712, 1714, 1713, 1715, 1714, 1716, 1715, 1717, 1716, + 1718, 1717, 1719, 1718, 1720, 1719, 1721, 1720, 1722, 1721, + 1723, 1722, 1724, 1723, 1725, 1724, 1726, 1725, 1727, 1726, + 1728, 1727, 1729, 1728, 1730, 1729, 1731, 1730, 1732, 1731, + + 1733, 1732, 1734, 1733, 1735, 1734, 1736, 1735, 1737, 1736, + 1738, 1737, 1739, 1738, 1740, 1739, 1741, 1740, 1742, 1741, + 1743, 1742, 1744, 1743, 1745, 1744, 1746, 1745, 1747, 1746, + 1748, 1747, 1749, 1748, 1750, 1749, 1751, 1750, 1752, 1751, + 1753, 1752, 1754, 1753, 1755, 1754, 1756, 1755, 1757, 1756, + 1758, 1757, 1759, 1758, 1760, 1759, 1761, 1760, 1762, 1761, + 1763, 1762, 1764, 1763, 1765, 1764, 1766, 1765, 1767, 1766, + 1768, 1767, 1769, 1768, 1770, 1769, 1771, 1770, 1772, 1771, + 1773, 1772, 1774, 1773, 1775, 1774, 1776, 1775, 1777, 1776, + 1778, 1777, 1779, 1778, 1780, 1779, 1781, 1780, 1782, 1781, + + 1783, 1782, 1784, 1783, 1785, 1784, 1786, 1785, 1787, 1786, + 1788, 1787, 1789, 1788, 1790, 1789, 1791, 1790, 1792, 1791, + 1793, 1792, 1794, 1793, 1795, 1794, 1796, 1795, 1797, 1796, + 1798, 1797, 1799, 1798, 1800, 1799, 1801, 1800, 1802, 1801, + 1803, 1802, 1804, 1803, 1805, 1804, 1806, 1805, 1807, 1806, + 1808, 1807, 1809, 1808, 1810, 1809, 1811, 1810, 1812, 1811, + 1813, 1812, 1814, 1813, 1815, 1814, 1816, 1815, 1817, 1816, + 1818, 1817, 1819, 1818, 1820, 1819, 1821, 1820, 1822, 1821, + 1823, 1822, 1824, 1823, 1825, 1824, 1826, 1825, 1827, 1826, + 1828, 1827, 1829, 1828, 1830, 1829, 1831, 1830, 1832, 1831, + + 1833, 1832, 1834, 1833, 1835, 1834, 1836, 1835, 1837, 1836, + 1838, 1837, 1839, 1838, 1840, 1839, 1841, 1840, 1421, 1841, + 0, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421 } ; -static yyconst short int yy_nxt[7662] = +static yyconst short int yy_nxt[7680] = { 0, 26, 27, 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 36, 39, 40, 41, 42, @@ -987,12 +993,12 @@ static yyconst short int yy_nxt[7662] = 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 75, 81, 87, 87, 89, 89, 92, 112, - 115, 115, 115, 93, 104, 105, 118, 121, 122, 199, - 106, 104, 105, 88, 88, 126, 123, 106, 113, 200, + 115, 115, 115, 93, 104, 105, 118, 121, 122, 202, + 106, 104, 105, 88, 88, 126, 123, 106, 113, 203, 90, 90, 94, 91, 91, 92, 92, 139, 107, 108, - 119, 93, 124, 937, 127, 107, 108, 141, 140, 144, + 119, 93, 124, 940, 127, 107, 108, 141, 140, 144, 144, 144, 114, 158, 159, 145, 142, 143, 160, 161, - 94, 939, 95, 92, 95, 95, 95, 95, 95, 95, + 94, 942, 95, 92, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, @@ -1009,816 +1015,817 @@ static yyconst short int yy_nxt[7662] = 98, 98, 98, 99, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 98, 98, 98, 128, 146, 941, 166, 154, 149, + 99, 98, 98, 98, 128, 146, 944, 166, 154, 149, 147, 150, 150, 150, 155, 156, 157, 148, 149, 167, - 150, 150, 150, 168, 169, 194, 206, 224, 195, 151, - 174, 171, 197, 943, 175, 198, 129, 130, 151, 131, - 176, 132, 172, 126, 133, 173, 225, 201, 152, 177, - 134, 183, 202, 135, 136, 284, 137, 184, 178, 179, - 180, 207, 127, 185, 187, 212, 212, 212, 181, 285, - - 182, 188, 189, 115, 115, 115, 945, 190, 209, 209, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 120, - 209, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 150, 150, 150, 168, 169, 197, 170, 209, 198, 151, + 177, 171, 174, 946, 178, 948, 129, 130, 151, 131, + 179, 132, 204, 175, 133, 172, 176, 205, 152, 180, + 134, 186, 200, 135, 136, 201, 137, 187, 181, 182, + 183, 1421, 210, 188, 292, 190, 117, 293, 184, 386, + + 185, 173, 191, 192, 215, 215, 215, 387, 193, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 120, 212, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 210, 209, 209, - 212, 212, 212, 215, 228, 228, 216, 216, 947, 228, - 229, 216, 216, 230, 231, 240, 240, 216, 216, 227, - 118, 240, 1410, 1410, 245, 250, 251, 308, 117, 267, - - 268, 228, 228, 309, 233, 271, 272, 213, 1410, 240, - 240, 1410, 287, 217, 119, 288, 218, 246, 217, 282, - 283, 218, 311, 302, 217, 312, 949, 218, 144, 144, - 144, 262, 262, 262, 149, 1410, 150, 150, 150, 303, - 304, 265, 265, 265, 951, 263, 151, 263, 953, 151, - 264, 264, 264, 343, 151, 265, 265, 265, 265, 265, - 265, 273, 295, 955, 274, 344, 275, 212, 212, 212, - 276, 277, 401, 296, 322, 322, 322, 323, 323, 228, - 324, 324, 324, 402, 228, 957, 230, 231, 322, 322, - 322, 322, 322, 322, 324, 324, 324, 324, 324, 324, - - 228, 230, 231, 1410, 468, 229, 228, 233, 240, 240, - 338, 338, 338, 959, 240, 469, 262, 262, 262, 1410, - 355, 356, 1410, 264, 264, 264, 961, 228, 264, 264, - 264, 380, 240, 240, 151, 265, 265, 265, 963, 381, - 362, 965, 363, 391, 391, 364, 1410, 409, 410, 265, - 265, 265, 265, 265, 265, 365, 322, 322, 322, 366, - 409, 410, 392, 392, 392, 967, 1410, 338, 338, 338, - 322, 322, 322, 322, 322, 322, 392, 392, 392, 392, - 392, 392, 1410, 401, 1410, 1410, 458, 458, 459, 1410, - 462, 506, 969, 462, 402, 468, 512, 1410, 971, 973, - - 1410, 463, 507, 1410, 463, 1410, 469, 513, 1410, 1410, - 541, 541, 541, 1410, 506, 975, 1410, 544, 546, 403, - 512, 977, 1410, 979, 981, 507, 464, 1410, 545, 547, - 1410, 513, 1410, 541, 541, 541, 462, 401, 1410, 544, - 1410, 1410, 546, 571, 571, 571, 1410, 463, 402, 1410, - 545, 1410, 983, 547, 571, 571, 571, 985, 1410, 1410, - 628, 628, 628, 987, 1410, 1410, 1410, 1410, 162, 989, - 1410, 1410, 1410, 1410, 1410, 1410, 570, 1410, 1410, 162, - 1410, 1410, 1410, 1410, 629, 1410, 991, 1410, 1410, 993, - 1410, 1410, 1410, 995, 1410, 997, 999, 1410, 1001, 1003, - - 1410, 1410, 1410, 628, 628, 628, 1005, 1410, 1410, 1410, - 1007, 1410, 1009, 1011, 1410, 1410, 632, 632, 632, 1013, - 633, 1015, 1410, 1410, 1410, 634, 1017, 629, 632, 632, - 632, 1410, 633, 1019, 1021, 1410, 1023, 634, 1410, 1410, - 1410, 1410, 1410, 650, 650, 650, 1025, 1410, 1410, 1027, - 1410, 650, 650, 650, 1410, 1029, 1410, 1031, 1033, 1410, - 1035, 1410, 1410, 635, 1410, 1410, 1410, 1410, 651, 1410, - 1410, 1410, 1037, 1410, 1410, 635, 651, 1410, 1410, 1410, - 1410, 1410, 1039, 1410, 1410, 1410, 1041, 1410, 1410, 1043, - 1410, 1410, 1410, 1045, 1410, 1410, 1047, 1410, 1410, 1410, - - 1410, 1410, 1049, 1410, 1410, 1410, 1051, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1053, 1410, 1410, 1055, - 1410, 1057, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1059, 1061, 1063, 1065, 1410, 1067, 1410, 1410, 1410, - 1410, 1069, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1071, 1410, 1073, 1410, 1410, 1075, 1410, 1410, 1410, - 1410, 1410, 1077, 1410, 1079, 1081, 1410, 1410, 1410, 1410, - 1410, 1083, 1410, 1410, 1085, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1087, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1089, 1091, 1093, 1095, 1097, 1099, 1410, 1410, - - 1410, 1101, 1410, 1410, 1410, 1410, 1410, 1410, 1103, 1105, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1107, 1410, 1410, 1109, 1111, 1410, 1113, - 1115, 1117, 1119, 1121, 1410, 1410, 1410, 1410, 1123, 1410, - 1125, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1127, 1410, 1410, 1129, 1410, 1410, 1410, 1131, - 1133, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1135, 1410, 1137, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1139, 1141, 1410, 1410, 1143, 1410, 1410, 1410, 1410, - 1410, 1410, 1145, 1410, 1410, 1410, 1410, 1410, 1410, 1147, - - 1410, 1410, 1149, 1151, 1410, 1410, 1410, 1153, 1155, 1410, - 1410, 1410, 1410, 1410, 1157, 1410, 1410, 1159, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1161, 1163, - 1165, 1167, 1169, 1410, 1410, 1410, 1410, 1171, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1173, - 1410, 1175, 1410, 1410, 1177, 1410, 1410, 1410, 1179, 1181, - 1183, 1185, 1410, 1187, 1410, 1410, 1410, 1189, 1410, 1410, - 1410, 1410, 1410, 1410, 1191, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1193, 1195, - 1410, 1197, 1199, 1201, 1410, 1203, 1410, 1410, 1205, 1410, - - 1410, 1410, 1410, 1410, 1207, 1410, 1209, 1410, 1410, 1410, - 1211, 1410, 1410, 1213, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1215, 1410, 1217, 1410, 1410, 1219, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1221, 1410, 1223, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1225, 1410, - 1410, 1227, 1410, 1229, 1410, 1231, 1410, 1410, 1233, 1410, - 1410, 1410, 1410, 1410, 1410, 1235, 1237, 1410, 1239, 1410, - 1410, 1410, 1410, 1241, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1243, 1410, - 1410, 1245, 1410, 1410, 1247, 1249, 1410, 1251, 1253, 1410, - - 1410, 1410, 1410, 1255, 1410, 1410, 1410, 1410, 1410, 1257, - 1410, 1410, 1259, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1261, 1263, 1410, 1265, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1267, 1410, 1410, - 1410, 1410, 1410, 1410, 1269, 1410, 1410, 1271, 1410, 1410, - 1273, 1410, 1410, 1410, 1275, 1277, 1410, 1279, 1410, 1410, - 1410, 1410, 1410, 1410, 1281, 1410, 1410, 1283, 1410, 1410, - 1410, 1410, 1285, 1410, 1410, 1410, 1287, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1289, 1410, 1410, - 1410, 1410, 1410, 1410, 1291, 1410, 1293, 1295, 1297, 1410, - - 1410, 1299, 1301, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1303, 1410, 1410, 1305, - 1410, 1410, 1410, 1307, 1309, 1410, 1311, 1410, 1410, 1410, - 1410, 1410, 1313, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1315, 1410, 1317, 1410, 1410, 1319, - 1410, 1410, 1410, 1321, 1323, 1325, 1327, 1410, 1329, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1331, - 1410, 1333, 1410, 1410, 1410, 1335, 1410, 1410, 1337, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1339, 1410, - 1341, 1410, 1410, 1343, 1410, 1345, 1410, 1410, 1410, 1410, - - 1410, 1347, 1410, 1410, 1410, 1349, 1410, 1410, 1351, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1353, 1410, - 1355, 1410, 1410, 1357, 1410, 1410, 1410, 1410, 1410, 1410, - 1359, 1361, 1410, 1363, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1365, 1410, 1410, 1367, 1410, - 1410, 1369, 1410, 1371, 1373, 1410, 1410, 1410, 1410, 1410, - 1375, 1410, 1410, 1377, 1410, 1410, 1410, 1410, 1379, 1410, - 1410, 1410, 1410, 1410, 1381, 1410, 1410, 1383, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1385, - 1387, 1410, 1389, 1410, 1391, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 1393, 1410, 1410, 1395, 1410, 1397, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1399, - 1401, 1410, 1403, 1410, 1410, 1410, 1410, 1410, 1410, 1405, - 1410, 1410, 1407, 1410, 1410, 1410, 1410, 1410, 1410, 1409, - 1410, 120, 1410, 1410, 935, 1410, 1410, 1410, 1410, 1410, - 933, 1410, 931, 929, 1410, 1410, 1410, 1410, 1410, 927, - 1410, 1410, 925, 1410, 1410, 1410, 1410, 923, 1410, 1410, - 1410, 921, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 919, 917, 1410, 915, 913, 1410, 1410, 911, 909, - 1410, 907, 1410, 1410, 1410, 1410, 905, 903, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 901, 1410, 1410, 899, 1410, 1410, 897, 895, 893, - 1410, 891, 1410, 1410, 1410, 1410, 1410, 1410, 889, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 887, - 885, 1410, 1410, 883, 1410, 1410, 1410, 1410, 1410, 1410, - 881, 1410, 1410, 879, 1410, 1410, 1410, 1410, 1410, 1410, - 877, 1410, 1410, 1410, 1410, 1410, 875, 1410, 1410, 1410, - 873, 1410, 1410, 871, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 869, 1410, 867, 1410, 865, 863, 1410, - 861, 1410, 1410, 1410, 1410, 859, 857, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 855, 1410, 1410, 853, 1410, 1410, 851, 1410, 849, 847, - 1410, 1410, 1410, 1410, 1410, 845, 1410, 1410, 843, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 841, - 1410, 1410, 839, 1410, 1410, 1410, 837, 1410, 1410, 835, - 1410, 1410, 1410, 1410, 1410, 833, 1410, 1410, 1410, 831, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 829, - 1410, 1410, 827, 1410, 825, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 823, 821, 819, 817, 1410, 815, - 1410, 1410, 1410, 1410, 813, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 811, 1410, 809, 1410, 1410, 807, - 1410, 1410, 1410, 1410, 1410, 805, 1410, 803, 801, 1410, - 1410, 1410, 1410, 1410, 799, 1410, 1410, 797, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 795, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 793, 791, 789, 787, 785, - 783, 1410, 1410, 1410, 781, 1410, 1410, 1410, 1410, 1410, - 1410, 779, 777, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 775, 1410, 1410, 773, - 771, 1410, 769, 767, 765, 763, 761, 1410, 1410, 1410, - 1410, 759, 1410, 757, 1410, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 755, 1410, 1410, 753, 1410, - 1410, 1410, 751, 749, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 747, 1410, 745, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 743, 741, 1410, 1410, 739, 1410, - 1410, 1410, 1410, 1410, 1410, 737, 1410, 1410, 1410, 1410, - 1410, 1410, 735, 1410, 1410, 733, 731, 1410, 1410, 1410, - 729, 727, 1410, 1410, 1410, 1410, 1410, 725, 1410, 1410, - 723, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 721, 719, 717, 715, 713, 1410, 1410, 1410, 1410, - 711, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - - 1410, 1410, 709, 1410, 707, 1410, 1410, 705, 1410, 1410, - 1410, 703, 701, 699, 697, 1410, 695, 1410, 1410, 1410, - 693, 1410, 1410, 1410, 1410, 1410, 1410, 691, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 689, 687, 1410, 685, 683, 681, 1410, 679, 1410, - 1410, 677, 1410, 1410, 1410, 1410, 1410, 675, 1410, 673, - 1410, 1410, 1410, 671, 1410, 1410, 669, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 667, 1410, 665, 1410, - 1410, 663, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 661, - 1410, 659, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - - 1410, 657, 1410, 1410, 655, 1410, 645, 1410, 645, 1410, - 1410, 653, 1410, 1410, 1410, 1410, 1410, 1410, 649, 648, - 1410, 647, 1410, 1410, 1410, 1410, 645, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 644, 1410, 1410, 643, 1410, 1410, 642, 640, 1410, - 639, 638, 1410, 1410, 1410, 1410, 637, 1410, 1410, 1410, - 1410, 1410, 631, 1410, 1410, 627, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 625, 624, 1410, - 622, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 621, 1410, 1410, 1410, 1410, 1410, 1410, 620, 1410, 1410, - - 618, 1410, 1410, 617, 1410, 1410, 1410, 616, 614, 1410, - 613, 1410, 1410, 1410, 1410, 1410, 1410, 612, 1410, 1410, - 610, 1410, 1410, 1410, 1410, 609, 1410, 1410, 1410, 608, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 607, 1410, 1410, 1410, 1410, 1410, 1410, 606, 1410, 605, - 603, 602, 1410, 1410, 601, 600, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 599, - 1410, 1410, 598, 1410, 1410, 1410, 596, 595, 1410, 594, - 1410, 1410, 1410, 1410, 1410, 593, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 592, 1410, 591, - - 1410, 1410, 590, 1410, 1410, 1410, 589, 588, 587, 586, - 1410, 584, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 583, 1410, 582, 1410, 1410, 1410, 581, 1410, - 1410, 580, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 579, 1410, 578, 1410, 1410, 577, 1410, 576, 1410, - 1410, 1410, 1410, 1410, 575, 1410, 1410, 1410, 574, 1410, - 1410, 573, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 572, 1410, 569, 1410, 1410, 567, 1410, 1410, 1410, - 1410, 1410, 1410, 566, 565, 1410, 564, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 563, 1410, - - 1410, 562, 1410, 1410, 561, 1410, 560, 559, 1410, 1410, - 1410, 1410, 1410, 558, 1410, 1410, 557, 1410, 1410, 1410, - 1410, 556, 1410, 1410, 1410, 1410, 1410, 555, 1410, 1410, - 554, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 553, 552, 1410, 551, 1410, 550, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 549, 1410, 1410, - 548, 1410, 543, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 542, 540, 1410, 538, 1410, 1410, 1410, 1410, - 1410, 1410, 537, 1410, 1410, 536, 1410, 1410, 1410, 1410, - 1410, 1410, 535, 1410, 534, 1410, 1410, 533, 1410, 1410, - - 1410, 1410, 1410, 532, 1410, 531, 530, 1410, 1410, 1410, - 1410, 1410, 529, 1410, 1410, 528, 1410, 1410, 1410, 1410, - 527, 1410, 1410, 1410, 526, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 525, 524, 1410, 523, 522, 1410, - 1410, 521, 520, 1410, 519, 1410, 1410, 1410, 1410, 518, - 517, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 516, 1410, 1410, 515, 1410, 1410, - 514, 511, 510, 1410, 509, 1410, 1410, 1410, 1410, 1410, - 1410, 405, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 508, 505, 1410, 1410, 458, 1410, 1410, 1410, - - 1410, 1410, 1410, 504, 1410, 1410, 502, 1410, 1410, 1410, - 1410, 1410, 1410, 501, 1410, 1410, 1410, 1410, 1410, 500, - 1410, 1410, 1410, 499, 1410, 1410, 498, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 497, 1410, 496, 1410, - 495, 494, 1410, 493, 1410, 1410, 1410, 1410, 492, 491, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 490, 1410, 1410, 489, 1410, 1410, 488, - 1410, 487, 486, 1410, 1410, 1410, 1410, 1410, 485, 1410, - 1410, 484, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 483, 1410, 1410, 482, 1410, 1410, 1410, 481, - - 1410, 1410, 480, 1410, 1410, 1410, 1410, 1410, 479, 1410, - 1410, 1410, 478, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 477, 1410, 1410, 476, 1410, 475, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 474, 473, 409, - 472, 1410, 471, 1410, 1410, 470, 1410, 467, 1410, 1410, - 1410, 1410, 1410, 466, 1410, 1410, 1410, 405, 1410, 465, - 1410, 461, 460, 1410, 457, 455, 454, 453, 452, 451, - 450, 449, 448, 1410, 447, 446, 445, 444, 1410, 1410, - 443, 442, 441, 440, 439, 438, 437, 1410, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 86, - - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 103, 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 436, 111, 117, 117, 117, 117, 435, 117, - 117, 117, 117, 117, 117, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 164, 434, 433, 164, - 208, 208, 208, 432, 208, 208, 431, 208, 208, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - - 219, 430, 429, 219, 222, 222, 222, 222, 222, 428, - 222, 222, 222, 222, 222, 232, 427, 426, 425, 424, - 232, 232, 423, 232, 234, 422, 421, 234, 235, 420, - 419, 235, 236, 236, 236, 236, 236, 236, 418, 236, - 236, 236, 236, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 243, 243, 243, 243, 243, 243, - 243, 243, 243, 243, 243, 249, 417, 416, 249, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 341, 415, 414, 413, 412, 340, 408, 407, 406, 341, - 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, - - 393, 411, 405, 404, 400, 399, 411, 398, 397, 411, - 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, - 456, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 539, 539, 539, 539, 539, 539, 539, 539, - 539, 539, 539, 568, 568, 568, 568, 568, 568, 568, - 568, 568, 568, 568, 585, 585, 585, 585, 585, 585, - 585, 585, 585, 585, 585, 597, 597, 597, 597, 597, - 597, 597, 597, 597, 597, 597, 604, 604, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 611, 611, 611, - 611, 611, 611, 611, 611, 611, 611, 611, 615, 615, - - 615, 615, 615, 615, 615, 615, 615, 615, 615, 619, - 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, - 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, - 623, 626, 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 630, 630, 630, 630, 630, 630, 630, 630, - 630, 630, 630, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 641, 641, 641, 641, 641, 641, - 641, 641, 641, 641, 641, 646, 646, 646, 646, 646, - 646, 646, 646, 646, 646, 646, 652, 652, 652, 652, - 652, 652, 652, 652, 652, 652, 652, 654, 654, 654, - - 654, 654, 654, 654, 654, 654, 654, 654, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, 656, 658, - 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, - 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, - 660, 662, 662, 662, 662, 662, 662, 662, 662, 662, - 662, 662, 664, 664, 664, 664, 664, 664, 664, 664, - 664, 664, 664, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 668, 668, 668, 668, 668, 668, - 668, 668, 668, 668, 668, 670, 670, 670, 670, 670, - 670, 670, 670, 670, 670, 670, 672, 672, 672, 672, - - 672, 672, 672, 672, 672, 672, 672, 674, 674, 674, - 674, 674, 674, 674, 674, 674, 674, 674, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, 676, 678, - 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, - 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, - 680, 682, 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 684, 684, 684, 684, 684, 684, 684, 684, - 684, 684, 684, 686, 686, 686, 686, 686, 686, 686, - 686, 686, 686, 686, 688, 688, 688, 688, 688, 688, - 688, 688, 688, 688, 688, 690, 690, 690, 690, 690, - - 690, 690, 690, 690, 690, 690, 692, 692, 692, 692, - 692, 692, 692, 692, 692, 692, 692, 694, 694, 694, - 694, 694, 694, 694, 694, 694, 694, 694, 696, 696, - 696, 696, 696, 696, 696, 696, 696, 696, 696, 698, - 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, - 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, - 700, 702, 702, 702, 702, 702, 702, 702, 702, 702, - 702, 702, 704, 704, 704, 704, 704, 704, 704, 704, - 704, 704, 704, 706, 706, 706, 706, 706, 706, 706, - 706, 706, 706, 706, 708, 708, 708, 708, 708, 708, - - 708, 708, 708, 708, 708, 710, 710, 710, 710, 710, - 710, 710, 710, 710, 710, 710, 712, 712, 712, 712, - 712, 712, 712, 712, 712, 712, 712, 714, 714, 714, - 714, 714, 714, 714, 714, 714, 714, 714, 716, 716, - 716, 716, 716, 716, 716, 716, 716, 716, 716, 718, - 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, - 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, - 720, 722, 722, 722, 722, 722, 722, 722, 722, 722, - 722, 722, 724, 724, 724, 724, 724, 724, 724, 724, - 724, 724, 724, 726, 726, 726, 726, 726, 726, 726, - - 726, 726, 726, 726, 728, 728, 728, 728, 728, 728, - 728, 728, 728, 728, 728, 730, 730, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 732, 732, 732, 732, - 732, 732, 732, 732, 732, 732, 732, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, 736, 736, - 736, 736, 736, 736, 736, 736, 736, 736, 736, 738, - 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, - 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, - 740, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 742, 744, 744, 744, 744, 744, 744, 744, 744, - - 744, 744, 744, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 748, 748, 748, 748, 748, 748, - 748, 748, 748, 748, 748, 750, 750, 750, 750, 750, - 750, 750, 750, 750, 750, 750, 752, 752, 752, 752, - 752, 752, 752, 752, 752, 752, 752, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, 756, 756, - 756, 756, 756, 756, 756, 756, 756, 756, 756, 758, - 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, - 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, - 760, 762, 762, 762, 762, 762, 762, 762, 762, 762, - - 762, 762, 764, 764, 764, 764, 764, 764, 764, 764, - 764, 764, 764, 766, 766, 766, 766, 766, 766, 766, - 766, 766, 766, 766, 768, 768, 768, 768, 768, 768, - 768, 768, 768, 768, 768, 770, 770, 770, 770, 770, - 770, 770, 770, 770, 770, 770, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 774, 774, 774, - 774, 774, 774, 774, 774, 774, 774, 774, 776, 776, - 776, 776, 776, 776, 776, 776, 776, 776, 776, 778, - 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, - 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, - - 780, 782, 782, 782, 782, 782, 782, 782, 782, 782, - 782, 782, 784, 784, 784, 784, 784, 784, 784, 784, - 784, 784, 784, 786, 786, 786, 786, 786, 786, 786, - 786, 786, 786, 786, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 792, 792, 794, 794, 794, - 794, 794, 794, 794, 794, 794, 794, 794, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, 796, 798, - 798, 798, 798, 798, 798, 798, 798, 798, 798, 798, - - 800, 800, 800, 800, 800, 800, 800, 800, 800, 800, - 800, 802, 802, 802, 802, 802, 802, 802, 802, 802, - 802, 802, 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 806, 806, 806, 806, 806, 806, 806, - 806, 806, 806, 806, 808, 808, 808, 808, 808, 808, - 808, 808, 808, 808, 808, 810, 810, 810, 810, 810, - 810, 810, 810, 810, 810, 810, 812, 812, 812, 812, - 812, 812, 812, 812, 812, 812, 812, 814, 814, 814, - 814, 814, 814, 814, 814, 814, 814, 814, 816, 816, - 816, 816, 816, 816, 816, 816, 816, 816, 816, 818, - - 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, - 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, - 820, 822, 822, 822, 822, 822, 822, 822, 822, 822, - 822, 822, 824, 824, 824, 824, 824, 824, 824, 824, - 824, 824, 824, 826, 826, 826, 826, 826, 826, 826, - 826, 826, 826, 826, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 828, 828, 830, 830, 830, 830, 830, - 830, 830, 830, 830, 830, 830, 832, 832, 832, 832, - 832, 832, 832, 832, 832, 832, 832, 834, 834, 834, - 834, 834, 834, 834, 834, 834, 834, 834, 836, 836, - - 836, 836, 836, 836, 836, 836, 836, 836, 836, 838, - 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, - 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, - 840, 842, 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 844, 844, 844, 844, 844, 844, 844, 844, - 844, 844, 844, 846, 846, 846, 846, 846, 846, 846, - 846, 846, 846, 846, 848, 848, 848, 848, 848, 848, - 848, 848, 848, 848, 848, 850, 850, 850, 850, 850, - 850, 850, 850, 850, 850, 850, 852, 852, 852, 852, - 852, 852, 852, 852, 852, 852, 852, 854, 854, 854, - - 854, 854, 854, 854, 854, 854, 854, 854, 856, 856, - 856, 856, 856, 856, 856, 856, 856, 856, 856, 858, - 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, - 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 860, 862, 862, 862, 862, 862, 862, 862, 862, 862, - 862, 862, 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 866, 866, 866, 866, 866, 866, 866, - 866, 866, 866, 866, 868, 868, 868, 868, 868, 868, - 868, 868, 868, 868, 868, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 872, 872, 872, 872, - - 872, 872, 872, 872, 872, 872, 872, 874, 874, 874, - 874, 874, 874, 874, 874, 874, 874, 874, 876, 876, - 876, 876, 876, 876, 876, 876, 876, 876, 876, 878, - 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, - 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, - 880, 882, 882, 882, 882, 882, 882, 882, 882, 882, - 882, 882, 884, 884, 884, 884, 884, 884, 884, 884, - 884, 884, 884, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 890, 890, 890, 890, 890, - - 890, 890, 890, 890, 890, 890, 892, 892, 892, 892, - 892, 892, 892, 892, 892, 892, 892, 894, 894, 894, - 894, 894, 894, 894, 894, 894, 894, 894, 896, 896, - 896, 896, 896, 896, 896, 896, 896, 896, 896, 898, - 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 902, 902, 902, 902, 902, 902, 902, 902, 902, - 902, 902, 904, 904, 904, 904, 904, 904, 904, 904, - 904, 904, 904, 906, 906, 906, 906, 906, 906, 906, - 906, 906, 906, 906, 908, 908, 908, 908, 908, 908, - - 908, 908, 908, 908, 908, 910, 910, 910, 910, 910, - 910, 910, 910, 910, 910, 910, 912, 912, 912, 912, - 912, 912, 912, 912, 912, 912, 912, 914, 914, 914, - 914, 914, 914, 914, 914, 914, 914, 914, 916, 916, - 916, 916, 916, 916, 916, 916, 916, 916, 916, 918, - 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, - 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, - 920, 922, 922, 922, 922, 922, 922, 922, 922, 922, - 922, 922, 924, 924, 924, 924, 924, 924, 924, 924, - 924, 924, 924, 926, 926, 926, 926, 926, 926, 926, - - 926, 926, 926, 926, 928, 928, 928, 928, 928, 928, - 928, 928, 928, 928, 928, 930, 930, 930, 930, 930, - 930, 930, 930, 930, 930, 930, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, 936, 936, - 936, 936, 936, 936, 936, 936, 936, 936, 936, 938, - 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, - 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, - 940, 942, 942, 942, 942, 942, 942, 942, 942, 942, - 942, 942, 944, 944, 944, 944, 944, 944, 944, 944, - - 944, 944, 944, 946, 946, 946, 946, 946, 946, 946, - 946, 946, 946, 946, 948, 948, 948, 948, 948, 948, - 948, 948, 948, 948, 948, 950, 950, 950, 950, 950, - 950, 950, 950, 950, 950, 950, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, 956, 956, - 956, 956, 956, 956, 956, 956, 956, 956, 956, 958, - 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, - 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, - 960, 962, 962, 962, 962, 962, 962, 962, 962, 962, - - 962, 962, 964, 964, 964, 964, 964, 964, 964, 964, - 964, 964, 964, 966, 966, 966, 966, 966, 966, 966, - 966, 966, 966, 966, 968, 968, 968, 968, 968, 968, - 968, 968, 968, 968, 968, 970, 970, 970, 970, 970, - 970, 970, 970, 970, 970, 970, 972, 972, 972, 972, - 972, 972, 972, 972, 972, 972, 972, 974, 974, 974, - 974, 974, 974, 974, 974, 974, 974, 974, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 978, - 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, - 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, - - 980, 982, 982, 982, 982, 982, 982, 982, 982, 982, - 982, 982, 984, 984, 984, 984, 984, 984, 984, 984, - 984, 984, 984, 986, 986, 986, 986, 986, 986, 986, - 986, 986, 986, 986, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 990, 990, 990, 990, 990, - 990, 990, 990, 990, 990, 990, 992, 992, 992, 992, - 992, 992, 992, 992, 992, 992, 992, 994, 994, 994, - 994, 994, 994, 994, 994, 994, 994, 994, 996, 996, - 996, 996, 996, 996, 996, 996, 996, 996, 996, 998, - 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, - - 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, - 1000, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, - 1002, 1002, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, - 1004, 1004, 1004, 1006, 1006, 1006, 1006, 1006, 1006, 1006, - 1006, 1006, 1006, 1006, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1010, 1010, 1010, 1010, 1010, - 1010, 1010, 1010, 1010, 1010, 1010, 1012, 1012, 1012, 1012, - 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1014, 1014, 1014, - 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1016, 1016, - 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1018, - - 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, - 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, - 1020, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, - 1022, 1022, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, - 1024, 1024, 1024, 1026, 1026, 1026, 1026, 1026, 1026, 1026, - 1026, 1026, 1026, 1026, 1028, 1028, 1028, 1028, 1028, 1028, - 1028, 1028, 1028, 1028, 1028, 1030, 1030, 1030, 1030, 1030, - 1030, 1030, 1030, 1030, 1030, 1030, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1034, 1034, 1034, - 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1036, 1036, - - 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1038, - 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, - 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, - 1040, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, - 1042, 1042, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, - 1044, 1044, 1044, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - 1046, 1046, 1046, 1046, 1048, 1048, 1048, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1050, 1050, 1050, 1050, 1050, - 1050, 1050, 1050, 1050, 1050, 1050, 1052, 1052, 1052, 1052, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1054, 1054, 1054, - - 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1056, 1056, - 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1058, - 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, - 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, - 1060, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, - 1062, 1062, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, - 1064, 1064, 1064, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1066, 1066, 1066, 1066, 1068, 1068, 1068, 1068, 1068, 1068, - 1068, 1068, 1068, 1068, 1068, 1070, 1070, 1070, 1070, 1070, - 1070, 1070, 1070, 1070, 1070, 1070, 1072, 1072, 1072, 1072, - - 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1074, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1076, 1076, - 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1078, - 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, - 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, - 1080, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, - 1082, 1082, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, - 1084, 1084, 1084, 1086, 1086, 1086, 1086, 1086, 1086, 1086, - 1086, 1086, 1086, 1086, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1090, 1090, 1090, 1090, 1090, - - 1090, 1090, 1090, 1090, 1090, 1090, 1092, 1092, 1092, 1092, - 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1096, 1096, - 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1098, - 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, - 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, - 1100, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, - 1102, 1102, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, - 1104, 1104, 1104, 1106, 1106, 1106, 1106, 1106, 1106, 1106, - 1106, 1106, 1106, 1106, 1108, 1108, 1108, 1108, 1108, 1108, - - 1108, 1108, 1108, 1108, 1108, 1110, 1110, 1110, 1110, 1110, - 1110, 1110, 1110, 1110, 1110, 1110, 1112, 1112, 1112, 1112, - 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1114, 1114, 1114, - 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1116, 1116, - 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1118, - 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, - 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, - 1120, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, - 1122, 1122, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 1124, 1124, 1124, 1126, 1126, 1126, 1126, 1126, 1126, 1126, - - 1126, 1126, 1126, 1126, 1128, 1128, 1128, 1128, 1128, 1128, - 1128, 1128, 1128, 1128, 1128, 1130, 1130, 1130, 1130, 1130, - 1130, 1130, 1130, 1130, 1130, 1130, 1132, 1132, 1132, 1132, - 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1134, 1134, 1134, - 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1136, 1136, - 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1138, - 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, - 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, - 1140, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, - 1142, 1142, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, - - 1144, 1144, 1144, 1146, 1146, 1146, 1146, 1146, 1146, 1146, - 1146, 1146, 1146, 1146, 1148, 1148, 1148, 1148, 1148, 1148, - 1148, 1148, 1148, 1148, 1148, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, 1150, 1150, 1150, 1152, 1152, 1152, 1152, - 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1154, 1154, 1154, - 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1156, 1156, - 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1158, - 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, - 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, - 1160, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, - - 1162, 1162, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, - 1164, 1164, 1164, 1166, 1166, 1166, 1166, 1166, 1166, 1166, - 1166, 1166, 1166, 1166, 1168, 1168, 1168, 1168, 1168, 1168, - 1168, 1168, 1168, 1168, 1168, 1170, 1170, 1170, 1170, 1170, - 1170, 1170, 1170, 1170, 1170, 1170, 1172, 1172, 1172, 1172, - 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1174, 1174, 1174, - 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1176, 1176, - 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1178, - 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, - 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, - - 1180, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, - 1182, 1182, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, - 1184, 1184, 1184, 1186, 1186, 1186, 1186, 1186, 1186, 1186, - 1186, 1186, 1186, 1186, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1190, 1190, 1190, 1190, 1190, - 1190, 1190, 1190, 1190, 1190, 1190, 1192, 1192, 1192, 1192, - 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1194, 1194, 1194, - 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1196, 1196, - 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1198, - 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, - - 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, - 1200, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, - 1202, 1202, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, - 1204, 1204, 1204, 1206, 1206, 1206, 1206, 1206, 1206, 1206, - 1206, 1206, 1206, 1206, 1208, 1208, 1208, 1208, 1208, 1208, - 1208, 1208, 1208, 1208, 1208, 1210, 1210, 1210, 1210, 1210, - 1210, 1210, 1210, 1210, 1210, 1210, 1212, 1212, 1212, 1212, - 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1214, 1214, 1214, - 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1216, 1216, - 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1218, - - 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, - 1222, 1222, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, - 1224, 1224, 1224, 1226, 1226, 1226, 1226, 1226, 1226, 1226, - 1226, 1226, 1226, 1226, 1228, 1228, 1228, 1228, 1228, 1228, - 1228, 1228, 1228, 1228, 1228, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1232, 1232, 1232, 1232, - 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1234, 1234, 1234, - 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1236, 1236, - - 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1238, - 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, - 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - 1240, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, - 1242, 1242, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, - 1244, 1244, 1244, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1248, 1248, 1248, 1248, 1248, 1248, - 1248, 1248, 1248, 1248, 1248, 1250, 1250, 1250, 1250, 1250, - 1250, 1250, 1250, 1250, 1250, 1250, 1252, 1252, 1252, 1252, - 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1254, 1254, 1254, - - 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1256, 1256, - 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1258, - 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, - 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, - 1260, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, - 1262, 1262, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, - 1264, 1264, 1264, 1266, 1266, 1266, 1266, 1266, 1266, 1266, - 1266, 1266, 1266, 1266, 1268, 1268, 1268, 1268, 1268, 1268, - 1268, 1268, 1268, 1268, 1268, 1270, 1270, 1270, 1270, 1270, - 1270, 1270, 1270, 1270, 1270, 1270, 1272, 1272, 1272, 1272, - - 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1274, 1274, 1274, - 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1276, 1276, - 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1278, - 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, - 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, - 1280, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, - 1282, 1282, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - 1284, 1284, 1284, 1286, 1286, 1286, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1286, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1290, 1290, 1290, 1290, 1290, - - 1290, 1290, 1290, 1290, 1290, 1290, 1292, 1292, 1292, 1292, - 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1294, 1294, 1294, - 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1296, 1296, - 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1298, - 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, - 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, - 1300, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, - 1304, 1304, 1304, 1306, 1306, 1306, 1306, 1306, 1306, 1306, - 1306, 1306, 1306, 1306, 1308, 1308, 1308, 1308, 1308, 1308, - - 1308, 1308, 1308, 1308, 1308, 1310, 1310, 1310, 1310, 1310, - 1310, 1310, 1310, 1310, 1310, 1310, 1312, 1312, 1312, 1312, - 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1314, 1314, 1314, - 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1316, 1316, - 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1318, - 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, - 1324, 1324, 1324, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - - 1326, 1326, 1326, 1326, 1328, 1328, 1328, 1328, 1328, 1328, - 1328, 1328, 1328, 1328, 1328, 1330, 1330, 1330, 1330, 1330, - 1330, 1330, 1330, 1330, 1330, 1330, 1332, 1332, 1332, 1332, - 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1334, 1334, 1334, - 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1336, 1336, - 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1338, - 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, - 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, - 1340, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, - 1342, 1342, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - - 1344, 1344, 1344, 1346, 1346, 1346, 1346, 1346, 1346, 1346, - 1346, 1346, 1346, 1346, 1348, 1348, 1348, 1348, 1348, 1348, - 1348, 1348, 1348, 1348, 1348, 1350, 1350, 1350, 1350, 1350, - 1350, 1350, 1350, 1350, 1350, 1350, 1352, 1352, 1352, 1352, - 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1354, 1354, 1354, - 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1356, 1356, - 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1358, - 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, - 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, - 1360, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, - - 1362, 1362, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, - 1364, 1364, 1364, 1366, 1366, 1366, 1366, 1366, 1366, 1366, - 1366, 1366, 1366, 1366, 1368, 1368, 1368, 1368, 1368, 1368, - 1368, 1368, 1368, 1368, 1368, 1370, 1370, 1370, 1370, 1370, - 1370, 1370, 1370, 1370, 1370, 1370, 1372, 1372, 1372, 1372, - 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1374, 1374, 1374, - 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1376, 1376, - 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1378, - 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, - 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, - - 1380, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, - 1382, 1382, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, - 1384, 1384, 1384, 1386, 1386, 1386, 1386, 1386, 1386, 1386, - 1386, 1386, 1386, 1386, 1388, 1388, 1388, 1388, 1388, 1388, - 1388, 1388, 1388, 1388, 1388, 1390, 1390, 1390, 1390, 1390, - 1390, 1390, 1390, 1390, 1390, 1390, 1392, 1392, 1392, 1392, - 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1394, 1394, 1394, - 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1396, 1396, - 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1398, - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - - 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, - 1400, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, - 1402, 1402, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, - 1404, 1404, 1404, 1406, 1406, 1406, 1406, 1406, 1406, 1406, - 1406, 1406, 1406, 1406, 1408, 1408, 1408, 1408, 1408, 1408, - 1408, 1408, 1408, 1408, 1408, 396, 395, 394, 390, 389, - 388, 387, 386, 385, 384, 383, 382, 379, 378, 377, - 376, 375, 374, 373, 372, 371, 370, 369, 368, 367, - 361, 360, 359, 358, 357, 354, 353, 352, 351, 350, - 349, 348, 347, 346, 345, 342, 271, 340, 339, 337, - - 336, 335, 334, 333, 332, 331, 330, 329, 250, 328, - 327, 326, 230, 226, 1410, 223, 220, 321, 320, 319, - 318, 317, 316, 315, 314, 313, 310, 307, 306, 305, - 301, 300, 299, 298, 297, 294, 293, 292, 291, 290, - 289, 286, 281, 280, 279, 278, 270, 269, 266, 261, - 260, 259, 258, 257, 256, 255, 254, 253, 252, 1410, - 248, 247, 245, 110, 244, 242, 242, 241, 238, 237, - 226, 223, 221, 220, 211, 205, 204, 203, 196, 193, - 192, 191, 186, 170, 165, 163, 162, 153, 138, 116, - 110, 1410, 102, 102, 101, 101, 25, 25, 23, 1410, - - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410 + 120, 120, 120, 120, 120, 120, 120, 120, 213, 212, + 212, 215, 215, 215, 218, 227, 231, 219, 219, 231, + 1421, 231, 219, 219, 232, 118, 233, 234, 219, 219, + 230, 243, 243, 126, 228, 248, 1421, 243, 950, 1421, + + 115, 115, 115, 231, 253, 254, 231, 236, 216, 119, + 271, 272, 127, 289, 220, 243, 243, 221, 249, 220, + 256, 118, 221, 1421, 349, 220, 257, 290, 221, 144, + 144, 144, 266, 266, 266, 149, 350, 150, 150, 150, + 275, 276, 269, 269, 269, 119, 267, 151, 267, 126, + 151, 268, 268, 268, 952, 151, 269, 269, 269, 269, + 269, 269, 277, 287, 288, 278, 300, 279, 127, 307, + 313, 280, 281, 328, 328, 316, 314, 301, 317, 215, + 215, 215, 327, 327, 327, 308, 309, 231, 329, 329, + 329, 954, 231, 956, 233, 234, 327, 327, 327, 327, + + 327, 327, 329, 329, 329, 329, 329, 329, 231, 233, + 234, 1421, 408, 232, 231, 236, 243, 243, 344, 344, + 344, 958, 243, 409, 266, 266, 266, 1421, 361, 362, + 1421, 268, 268, 268, 960, 231, 268, 268, 268, 962, + 243, 243, 151, 269, 269, 269, 397, 397, 368, 964, + 369, 416, 417, 370, 1421, 416, 417, 269, 269, 269, + 269, 269, 269, 371, 327, 327, 327, 372, 966, 968, + 398, 398, 398, 970, 1421, 344, 344, 344, 327, 327, + 327, 327, 327, 327, 398, 398, 398, 398, 398, 398, + 1421, 408, 1421, 1421, 465, 465, 466, 1421, 470, 476, + + 972, 514, 409, 470, 476, 1421, 974, 521, 1421, 471, + 477, 1421, 515, 1421, 471, 477, 1421, 1421, 522, 976, + 514, 1421, 551, 1421, 1421, 555, 557, 410, 550, 550, + 550, 515, 521, 552, 472, 1421, 556, 558, 551, 1421, + 1421, 470, 1421, 522, 550, 550, 550, 408, 1421, 552, + 555, 557, 471, 582, 582, 582, 1421, 1421, 409, 978, + 980, 556, 558, 582, 582, 582, 1421, 1421, 639, 639, + 639, 982, 1421, 1421, 1421, 1421, 1421, 984, 162, 1421, + 986, 988, 990, 1421, 992, 1421, 1421, 581, 162, 1421, + 1421, 994, 640, 1421, 996, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 998, 1000, 1421, 1421, 1002, 1004, 1421, 1006, + 1421, 1008, 1421, 1421, 1421, 1421, 1421, 1421, 639, 639, + 639, 1010, 1421, 1012, 1014, 643, 643, 643, 1421, 644, + 1421, 1016, 1421, 1421, 645, 1421, 1018, 1421, 1020, 1421, + 1421, 1022, 640, 643, 643, 643, 1421, 644, 661, 661, + 661, 1421, 645, 1421, 1421, 1421, 1421, 1421, 661, 661, + 661, 1024, 1421, 1421, 1026, 1421, 1028, 1030, 1421, 1421, + 1032, 1421, 646, 662, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 662, 1421, 1421, 1421, 1421, 1421, 1421, + 646, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1034, + + 1421, 1036, 1421, 1038, 1040, 1421, 1421, 1421, 1042, 1421, + 1044, 1421, 1421, 1046, 1421, 1421, 1421, 1048, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1050, 1421, 1421, 1052, + 1421, 1421, 1054, 1421, 1421, 1056, 1421, 1058, 1060, 1062, + 1421, 1064, 1421, 1421, 1066, 1421, 1068, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1070, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1072, 1421, 1421, 1074, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1076, 1421, + 1078, 1421, 1421, 1080, 1421, 1421, 1421, 1082, 1421, 1084, + + 1421, 1421, 1086, 1421, 1421, 1421, 1421, 1421, 1088, 1421, + 1421, 1421, 1421, 1421, 1421, 1090, 1421, 1421, 1421, 1092, + 1421, 1421, 1421, 1421, 1094, 1421, 1421, 1421, 1421, 1421, + 1096, 1421, 1421, 1098, 1100, 1421, 1102, 1421, 1421, 1104, + 1421, 1421, 1421, 1421, 1421, 1106, 1108, 1421, 1110, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1112, 1421, 1114, 1421, 1421, + 1116, 1421, 1421, 1421, 1118, 1421, 1120, 1122, 1421, 1124, + 1126, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1128, 1421, 1421, 1130, 1421, + 1132, 1134, 1421, 1421, 1136, 1138, 1421, 1140, 1421, 1421, + 1142, 1421, 1144, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1146, 1421, 1421, 1148, 1421, + 1421, 1150, 1421, 1421, 1152, 1154, 1421, 1421, 1156, 1421, + 1421, 1158, 1421, 1421, 1421, 1160, 1421, 1421, 1162, 1421, + 1421, 1421, 1164, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1166, 1421, 1421, + 1421, 1168, 1421, 1421, 1170, 1421, 1421, 1421, 1172, 1421, + + 1421, 1174, 1421, 1421, 1176, 1178, 1421, 1180, 1182, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1184, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1186, 1421, 1421, + 1188, 1421, 1421, 1190, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1192, 1421, 1421, 1194, 1196, 1421, + 1198, 1421, 1421, 1200, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1202, 1421, 1421, + 1204, 1421, 1421, 1206, 1421, 1208, 1210, 1421, 1421, 1212, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1214, 1421, 1421, 1216, 1421, 1421, 1218, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1220, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1222, 1421, 1224, 1226, + 1421, 1228, 1230, 1421, 1421, 1232, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1234, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1236, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1238, 1421, + 1421, 1240, 1242, 1421, 1244, 1246, 1421, 1248, 1250, 1421, + 1421, 1421, 1421, 1421, 1252, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1254, 1421, 1256, 1421, 1421, 1258, 1421, + + 1421, 1421, 1421, 1421, 1260, 1421, 1421, 1262, 1264, 1421, + 1266, 1421, 1421, 1268, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1270, 1421, 1272, 1274, 1421, 1276, 1278, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1280, 1421, 1421, 1282, 1421, 1421, 1284, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1286, 1421, 1421, + 1288, 1421, 1421, 1290, 1421, 1421, 1292, 1421, 1421, 1294, + 1421, 1296, 1298, 1421, 1421, 1300, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1302, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1304, 1421, 1421, + 1306, 1421, 1421, 1308, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1310, 1421, 1312, 1314, 1421, 1316, 1318, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1320, 1421, 1322, 1421, 1421, 1324, 1421, + 1421, 1421, 1421, 1421, 1326, 1421, 1421, 1328, 1330, 1421, + 1332, 1421, 1421, 1334, 1421, 1421, 1421, 1421, 1421, 1421, + 1336, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1338, 1421, 1421, 1340, 1342, + + 1421, 1344, 1421, 1421, 1346, 1421, 1421, 1421, 1421, 1421, + 1348, 1421, 1421, 1350, 1421, 1421, 1352, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1354, 1421, 1421, + 1356, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1358, + 1421, 1360, 1362, 1421, 1364, 1366, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1368, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1370, 1421, 1421, + 1372, 1421, 1421, 1374, 1421, 1421, 1376, 1421, 1421, 1378, + 1421, 1421, 1380, 1421, 1421, 1382, 1421, 1384, 1386, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1388, 1421, 1390, 1392, 1421, 1394, 1396, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1398, 1421, + 1400, 1421, 1421, 1402, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1404, 1421, 1421, 1406, 1408, + 1421, 1410, 1421, 1421, 1412, 1421, 1421, 1421, 1421, 1421, + 1414, 1421, 1421, 1416, 1421, 1421, 1418, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1420, 120, 1421, 1421, + 938, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 936, 1421, 1421, 934, 932, 1421, 930, 1421, 1421, + 928, 1421, 1421, 1421, 1421, 1421, 926, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 924, 1421, 1421, + 922, 1421, 1421, 920, 1421, 1421, 918, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 916, 1421, 914, 912, 1421, + 910, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 908, 1421, 906, 904, 1421, 902, 900, + 1421, 1421, 898, 1421, 1421, 896, 1421, 1421, 894, 1421, + 1421, 1421, 1421, 892, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 890, 1421, 1421, 888, 886, + 1421, 884, 882, 1421, 880, 878, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 876, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 874, 1421, 1421, + 872, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 870, 1421, 1421, 868, 866, 1421, 864, 1421, 1421, + 862, 1421, 1421, 1421, 1421, 1421, 860, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 858, 1421, 1421, + 856, 1421, 854, 852, 1421, 1421, 850, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 848, 1421, 1421, + 846, 1421, 1421, 844, 1421, 1421, 842, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 840, 1421, 838, 836, 1421, 834, 832, + 1421, 1421, 830, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 828, 1421, 1421, 826, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 824, 1421, 1421, 822, 820, + 1421, 818, 816, 1421, 814, 812, 1421, 1421, 810, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 808, 1421, + 1421, 806, 1421, 804, 802, 800, 1421, 798, 796, 1421, + 794, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 792, 790, 1421, 788, 786, 1421, 784, + 782, 1421, 1421, 780, 1421, 1421, 778, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 776, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 774, 1421, 1421, 772, + 770, 1421, 768, 766, 1421, 764, 762, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 760, 1421, 1421, 758, 1421, + 1421, 756, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 754, 1421, 1421, 752, 750, 1421, 748, 1421, + 1421, 746, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 744, 1421, 1421, 742, 1421, + 1421, 740, 1421, 738, 736, 1421, 1421, 734, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 732, 1421, + + 1421, 730, 1421, 1421, 728, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 726, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 724, 1421, 722, 720, 1421, 718, + 716, 1421, 1421, 714, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 712, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 710, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 708, 1421, 1421, 706, + 704, 1421, 702, 700, 1421, 698, 696, 1421, 1421, 1421, + 1421, 1421, 694, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 692, 1421, 690, 1421, 1421, 688, 1421, 1421, 1421, + 1421, 1421, 686, 1421, 1421, 684, 682, 1421, 680, 1421, + 1421, 678, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 676, 1421, 674, 672, 1421, 670, 668, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 666, 1421, + 1421, 656, 1421, 1421, 656, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 664, 1421, 1421, 660, 1421, + 1421, 659, 1421, 1421, 658, 1421, 1421, 656, 1421, 655, + 654, 1421, 1421, 653, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 651, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 650, 1421, 1421, 649, 1421, + 1421, 648, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 642, 1421, 638, 636, 1421, 635, 633, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 632, 1421, 631, 1421, 1421, 629, 1421, 1421, 1421, + 1421, 1421, 628, 1421, 1421, 627, 625, 1421, 624, 1421, + 1421, 623, 1421, 1421, 1421, 1421, 1421, 1421, 621, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + + 1421, 1421, 1421, 620, 1421, 1421, 619, 618, 1421, 617, + 1421, 1421, 616, 1421, 1421, 1421, 1421, 1421, 614, 1421, + 1421, 613, 1421, 1421, 612, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 611, 1421, 1421, 610, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 609, 1421, 607, + 606, 1421, 605, 604, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 603, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 602, 1421, 1421, 601, 1421, + 1421, 600, 1421, 1421, 599, 1421, 1421, 598, 1421, 1421, + 597, 1421, 1421, 595, 1421, 594, 593, 1421, 1421, 1421, + + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 592, 1421, 591, 590, 1421, 589, 588, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 587, 1421, 586, 1421, + 1421, 585, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 584, 1421, 1421, 583, 580, 1421, 578, + 1421, 1421, 577, 1421, 1421, 1421, 1421, 576, 575, 1421, + 1421, 574, 1421, 573, 572, 571, 1421, 1421, 1421, 570, + 1421, 569, 1421, 568, 567, 566, 565, 1421, 564, 563, + + 562, 561, 560, 1421, 559, 554, 553, 549, 547, 546, + 545, 544, 543, 542, 1421, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 541, + 111, 117, 117, 117, 117, 540, 117, 117, 117, 117, + 117, 117, 125, 125, 125, 125, 125, 125, 125, 125, + + 125, 125, 125, 164, 539, 538, 164, 211, 211, 211, + 537, 211, 211, 536, 211, 211, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 222, 535, 534, + 222, 225, 225, 225, 225, 225, 533, 225, 225, 225, + 225, 225, 235, 532, 531, 530, 529, 235, 235, 528, + 235, 237, 527, 526, 237, 238, 525, 524, 238, 239, + 239, 239, 239, 239, 239, 523, 239, 239, 239, 239, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 252, 520, 519, 252, 330, 330, 330, 330, + + 330, 330, 330, 330, 330, 330, 330, 347, 518, 412, + 517, 516, 513, 465, 512, 510, 347, 399, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, 418, 509, + 508, 507, 506, 418, 505, 504, 418, 463, 463, 463, + 463, 463, 463, 463, 463, 463, 463, 463, 511, 511, + 511, 511, 511, 511, 511, 511, 511, 511, 511, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 596, 596, 596, 596, 596, 596, 596, 596, 596, + 596, 596, 608, 608, 608, 608, 608, 608, 608, 608, + + 608, 608, 608, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 622, 622, 622, 622, 622, 622, + 622, 622, 622, 622, 622, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 630, 630, 630, 630, + 630, 630, 630, 630, 630, 630, 630, 634, 634, 634, + 634, 634, 634, 634, 634, 634, 634, 634, 637, 637, + 637, 637, 637, 637, 637, 637, 637, 637, 637, 641, + 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, + 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, + 647, 652, 652, 652, 652, 652, 652, 652, 652, 652, + + 652, 652, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 657, 663, 663, 663, 663, 663, 663, 663, + 663, 663, 663, 663, 665, 665, 665, 665, 665, 665, + 665, 665, 665, 665, 665, 667, 667, 667, 667, 667, + 667, 667, 667, 667, 667, 667, 669, 669, 669, 669, + 669, 669, 669, 669, 669, 669, 669, 671, 671, 671, + 671, 671, 671, 671, 671, 671, 671, 671, 673, 673, + 673, 673, 673, 673, 673, 673, 673, 673, 673, 675, + 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + + 677, 679, 679, 679, 679, 679, 679, 679, 679, 679, + 679, 679, 681, 681, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 685, 685, 685, 685, 685, 685, + 685, 685, 685, 685, 685, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 689, 689, 689, 689, + 689, 689, 689, 689, 689, 689, 689, 691, 691, 691, + 691, 691, 691, 691, 691, 691, 691, 691, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 695, + 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, + + 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, + 697, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, 699, 701, 701, 701, 701, 701, 701, 701, 701, + 701, 701, 701, 703, 703, 703, 703, 703, 703, 703, + 703, 703, 703, 703, 705, 705, 705, 705, 705, 705, + 705, 705, 705, 705, 705, 707, 707, 707, 707, 707, + 707, 707, 707, 707, 707, 707, 709, 709, 709, 709, + 709, 709, 709, 709, 709, 709, 709, 711, 711, 711, + 711, 711, 711, 711, 711, 711, 711, 711, 713, 713, + 713, 713, 713, 713, 713, 713, 713, 713, 713, 715, + + 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, + 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, + 717, 719, 719, 719, 719, 719, 719, 719, 719, 719, + 719, 719, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 723, 723, 723, 723, 723, 723, 723, + 723, 723, 723, 723, 725, 725, 725, 725, 725, 725, + 725, 725, 725, 725, 725, 727, 727, 727, 727, 727, + 727, 727, 727, 727, 727, 727, 729, 729, 729, 729, + 729, 729, 729, 729, 729, 729, 729, 731, 731, 731, + 731, 731, 731, 731, 731, 731, 731, 731, 733, 733, + + 733, 733, 733, 733, 733, 733, 733, 733, 733, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, + 737, 739, 739, 739, 739, 739, 739, 739, 739, 739, + 739, 739, 741, 741, 741, 741, 741, 741, 741, 741, + 741, 741, 741, 743, 743, 743, 743, 743, 743, 743, + 743, 743, 743, 743, 745, 745, 745, 745, 745, 745, + 745, 745, 745, 745, 745, 747, 747, 747, 747, 747, + 747, 747, 747, 747, 747, 747, 749, 749, 749, 749, + 749, 749, 749, 749, 749, 749, 749, 751, 751, 751, + + 751, 751, 751, 751, 751, 751, 751, 751, 753, 753, + 753, 753, 753, 753, 753, 753, 753, 753, 753, 755, + 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, + 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, + 757, 759, 759, 759, 759, 759, 759, 759, 759, 759, + 759, 759, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 763, 763, 763, 763, 763, 763, 763, + 763, 763, 763, 763, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 767, 767, 767, 767, 767, + 767, 767, 767, 767, 767, 767, 769, 769, 769, 769, + + 769, 769, 769, 769, 769, 769, 769, 771, 771, 771, + 771, 771, 771, 771, 771, 771, 771, 771, 773, 773, + 773, 773, 773, 773, 773, 773, 773, 773, 773, 775, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, + 777, 779, 779, 779, 779, 779, 779, 779, 779, 779, + 779, 779, 781, 781, 781, 781, 781, 781, 781, 781, + 781, 781, 781, 783, 783, 783, 783, 783, 783, 783, + 783, 783, 783, 783, 785, 785, 785, 785, 785, 785, + 785, 785, 785, 785, 785, 787, 787, 787, 787, 787, + + 787, 787, 787, 787, 787, 787, 789, 789, 789, 789, + 789, 789, 789, 789, 789, 789, 789, 791, 791, 791, + 791, 791, 791, 791, 791, 791, 791, 791, 793, 793, + 793, 793, 793, 793, 793, 793, 793, 793, 793, 795, + 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, + 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, + 797, 799, 799, 799, 799, 799, 799, 799, 799, 799, + 799, 799, 801, 801, 801, 801, 801, 801, 801, 801, + 801, 801, 801, 803, 803, 803, 803, 803, 803, 803, + 803, 803, 803, 803, 805, 805, 805, 805, 805, 805, + + 805, 805, 805, 805, 805, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 809, 809, 809, 809, + 809, 809, 809, 809, 809, 809, 809, 811, 811, 811, + 811, 811, 811, 811, 811, 811, 811, 811, 813, 813, + 813, 813, 813, 813, 813, 813, 813, 813, 813, 815, + 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, + 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, + 817, 819, 819, 819, 819, 819, 819, 819, 819, 819, + 819, 819, 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 823, 823, 823, 823, 823, 823, 823, + + 823, 823, 823, 823, 825, 825, 825, 825, 825, 825, + 825, 825, 825, 825, 825, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 831, 831, 831, + 831, 831, 831, 831, 831, 831, 831, 831, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 835, + 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, + 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 837, 839, 839, 839, 839, 839, 839, 839, 839, 839, + 839, 839, 841, 841, 841, 841, 841, 841, 841, 841, + + 841, 841, 841, 843, 843, 843, 843, 843, 843, 843, + 843, 843, 843, 843, 845, 845, 845, 845, 845, 845, + 845, 845, 845, 845, 845, 847, 847, 847, 847, 847, + 847, 847, 847, 847, 847, 847, 849, 849, 849, 849, + 849, 849, 849, 849, 849, 849, 849, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, 853, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, + 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, + 857, 859, 859, 859, 859, 859, 859, 859, 859, 859, + + 859, 859, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 863, 863, 863, 863, 863, 863, 863, + 863, 863, 863, 863, 865, 865, 865, 865, 865, 865, + 865, 865, 865, 865, 865, 867, 867, 867, 867, 867, + 867, 867, 867, 867, 867, 867, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, 873, 875, + 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, + 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, + + 877, 879, 879, 879, 879, 879, 879, 879, 879, 879, + 879, 879, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 883, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 885, 885, 885, 885, 885, 885, + 885, 885, 885, 885, 885, 887, 887, 887, 887, 887, + 887, 887, 887, 887, 887, 887, 889, 889, 889, 889, + 889, 889, 889, 889, 889, 889, 889, 891, 891, 891, + 891, 891, 891, 891, 891, 891, 891, 891, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, 893, 895, + 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, + + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 899, 899, 899, 899, 899, 899, 899, 899, 899, + 899, 899, 901, 901, 901, 901, 901, 901, 901, 901, + 901, 901, 901, 903, 903, 903, 903, 903, 903, 903, + 903, 903, 903, 903, 905, 905, 905, 905, 905, 905, + 905, 905, 905, 905, 905, 907, 907, 907, 907, 907, + 907, 907, 907, 907, 907, 907, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 911, 911, 911, + 911, 911, 911, 911, 911, 911, 911, 911, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 915, + + 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 921, 921, 921, 921, 921, 921, 921, 921, + 921, 921, 921, 923, 923, 923, 923, 923, 923, 923, + 923, 923, 923, 923, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 927, 927, 927, 927, 927, + 927, 927, 927, 927, 927, 927, 929, 929, 929, 929, + 929, 929, 929, 929, 929, 929, 929, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 933, 933, + + 933, 933, 933, 933, 933, 933, 933, 933, 933, 935, + 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, + 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, + 937, 939, 939, 939, 939, 939, 939, 939, 939, 939, + 939, 939, 941, 941, 941, 941, 941, 941, 941, 941, + 941, 941, 941, 943, 943, 943, 943, 943, 943, 943, + 943, 943, 943, 943, 945, 945, 945, 945, 945, 945, + 945, 945, 945, 945, 945, 947, 947, 947, 947, 947, + 947, 947, 947, 947, 947, 947, 949, 949, 949, 949, + 949, 949, 949, 949, 949, 949, 949, 951, 951, 951, + + 951, 951, 951, 951, 951, 951, 951, 951, 953, 953, + 953, 953, 953, 953, 953, 953, 953, 953, 953, 955, + 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, + 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + 957, 959, 959, 959, 959, 959, 959, 959, 959, 959, + 959, 959, 961, 961, 961, 961, 961, 961, 961, 961, + 961, 961, 961, 963, 963, 963, 963, 963, 963, 963, + 963, 963, 963, 963, 965, 965, 965, 965, 965, 965, + 965, 965, 965, 965, 965, 967, 967, 967, 967, 967, + 967, 967, 967, 967, 967, 967, 969, 969, 969, 969, + + 969, 969, 969, 969, 969, 969, 969, 971, 971, 971, + 971, 971, 971, 971, 971, 971, 971, 971, 973, 973, + 973, 973, 973, 973, 973, 973, 973, 973, 973, 975, + 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 981, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 981, 983, 983, 983, 983, 983, 983, 983, + 983, 983, 983, 983, 985, 985, 985, 985, 985, 985, + 985, 985, 985, 985, 985, 987, 987, 987, 987, 987, + + 987, 987, 987, 987, 987, 987, 989, 989, 989, 989, + 989, 989, 989, 989, 989, 989, 989, 991, 991, 991, + 991, 991, 991, 991, 991, 991, 991, 991, 993, 993, + 993, 993, 993, 993, 993, 993, 993, 993, 993, 995, + 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, + 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, + 997, 999, 999, 999, 999, 999, 999, 999, 999, 999, + 999, 999, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, + 1001, 1001, 1001, 1003, 1003, 1003, 1003, 1003, 1003, 1003, + 1003, 1003, 1003, 1003, 1005, 1005, 1005, 1005, 1005, 1005, + + 1005, 1005, 1005, 1005, 1005, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1011, 1011, 1011, + 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, + 1017, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, + 1019, 1019, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 1021, 1021, 1021, 1023, 1023, 1023, 1023, 1023, 1023, 1023, + + 1023, 1023, 1023, 1023, 1025, 1025, 1025, 1025, 1025, 1025, + 1025, 1025, 1025, 1025, 1025, 1027, 1027, 1027, 1027, 1027, + 1027, 1027, 1027, 1027, 1027, 1027, 1029, 1029, 1029, 1029, + 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1031, 1031, 1031, + 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1033, 1033, + 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1035, + 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, + 1039, 1039, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, + + 1041, 1041, 1041, 1043, 1043, 1043, 1043, 1043, 1043, 1043, + 1043, 1043, 1043, 1043, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1051, 1051, 1051, + 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1053, 1053, + 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1055, + 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, + 1057, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + + 1059, 1059, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, + 1061, 1061, 1061, 1063, 1063, 1063, 1063, 1063, 1063, 1063, + 1063, 1063, 1063, 1063, 1065, 1065, 1065, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1067, 1067, 1067, 1067, 1067, + 1067, 1067, 1067, 1067, 1067, 1067, 1069, 1069, 1069, 1069, + 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1071, 1071, 1071, + 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, + + 1077, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, + 1079, 1079, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, + 1081, 1081, 1081, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1085, 1085, 1085, 1085, 1085, 1085, + 1085, 1085, 1085, 1085, 1085, 1087, 1087, 1087, 1087, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1089, 1089, 1089, 1089, + 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1091, 1091, 1091, + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1093, 1093, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1095, + 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, + + 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, + 1097, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, + 1099, 1099, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1101, 1101, 1101, 1103, 1103, 1103, 1103, 1103, 1103, 1103, + 1103, 1103, 1103, 1103, 1105, 1105, 1105, 1105, 1105, 1105, + 1105, 1105, 1105, 1105, 1105, 1107, 1107, 1107, 1107, 1107, + 1107, 1107, 1107, 1107, 1107, 1107, 1109, 1109, 1109, 1109, + 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1111, 1111, 1111, + 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1113, 1113, + 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1115, + + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, + 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, + 1117, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, + 1119, 1119, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 1121, 1121, 1121, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1131, 1131, 1131, + 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1133, 1133, + + 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1135, + 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, + 1139, 1139, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, + 1141, 1141, 1141, 1143, 1143, 1143, 1143, 1143, 1143, 1143, + 1143, 1143, 1143, 1143, 1145, 1145, 1145, 1145, 1145, 1145, + 1145, 1145, 1145, 1145, 1145, 1147, 1147, 1147, 1147, 1147, + 1147, 1147, 1147, 1147, 1147, 1147, 1149, 1149, 1149, 1149, + 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1151, 1151, 1151, + + 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1153, 1153, + 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1155, + 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, + 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, + 1157, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, + 1159, 1159, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, + 1161, 1161, 1161, 1163, 1163, 1163, 1163, 1163, 1163, 1163, + 1163, 1163, 1163, 1163, 1165, 1165, 1165, 1165, 1165, 1165, + 1165, 1165, 1165, 1165, 1165, 1167, 1167, 1167, 1167, 1167, + 1167, 1167, 1167, 1167, 1167, 1167, 1169, 1169, 1169, 1169, + + 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1171, 1171, 1171, + 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1173, 1173, + 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1175, + 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, + 1179, 1179, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, + 1181, 1181, 1181, 1183, 1183, 1183, 1183, 1183, 1183, 1183, + 1183, 1183, 1183, 1183, 1185, 1185, 1185, 1185, 1185, 1185, + 1185, 1185, 1185, 1185, 1185, 1187, 1187, 1187, 1187, 1187, + + 1187, 1187, 1187, 1187, 1187, 1187, 1189, 1189, 1189, 1189, + 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1191, 1191, 1191, + 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1193, 1193, + 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1195, + 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, + 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, + 1197, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, + 1199, 1199, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, + 1201, 1201, 1201, 1203, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, 1205, 1205, 1205, 1205, 1205, 1205, + + 1205, 1205, 1205, 1205, 1205, 1207, 1207, 1207, 1207, 1207, + 1207, 1207, 1207, 1207, 1207, 1207, 1209, 1209, 1209, 1209, + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1213, 1213, + 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1215, + 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, + 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, + 1217, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, + 1219, 1219, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, + 1221, 1221, 1221, 1223, 1223, 1223, 1223, 1223, 1223, 1223, + + 1223, 1223, 1223, 1223, 1225, 1225, 1225, 1225, 1225, 1225, + 1225, 1225, 1225, 1225, 1225, 1227, 1227, 1227, 1227, 1227, + 1227, 1227, 1227, 1227, 1227, 1227, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1231, 1231, 1231, + 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1233, 1233, + 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1235, + 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, + 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, + 1237, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, + + 1241, 1241, 1241, 1243, 1243, 1243, 1243, 1243, 1243, 1243, + 1243, 1243, 1243, 1243, 1245, 1245, 1245, 1245, 1245, 1245, + 1245, 1245, 1245, 1245, 1245, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1249, 1249, 1249, 1249, + 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1251, 1251, 1251, + 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1253, 1253, + 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, + 1257, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, + + 1259, 1259, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1263, 1263, 1263, 1263, 1263, 1263, 1263, + 1263, 1263, 1263, 1263, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1267, 1267, 1267, 1267, 1267, + 1267, 1267, 1267, 1267, 1267, 1267, 1269, 1269, 1269, 1269, + 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1273, 1273, + 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1275, + 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, + 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, + + 1277, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 1279, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, + 1281, 1281, 1281, 1283, 1283, 1283, 1283, 1283, 1283, 1283, + 1283, 1283, 1283, 1283, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1287, 1287, 1287, 1287, 1287, + 1287, 1287, 1287, 1287, 1287, 1287, 1289, 1289, 1289, 1289, + 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1291, 1291, 1291, + 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1293, 1293, + 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1295, + 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, + + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, + 1299, 1299, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1305, 1305, 1305, 1305, 1305, 1305, + 1305, 1305, 1305, 1305, 1305, 1307, 1307, 1307, 1307, 1307, + 1307, 1307, 1307, 1307, 1307, 1307, 1309, 1309, 1309, 1309, + 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1311, 1311, 1311, + 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1313, 1313, + 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1315, + + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, + 1319, 1319, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1323, 1323, 1323, 1323, 1323, 1323, 1323, + 1323, 1323, 1323, 1323, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1329, 1329, 1329, 1329, + 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1331, 1331, 1331, + 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1333, 1333, + + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1335, + 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, + 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, + 1337, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, + 1339, 1339, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, + 1341, 1341, 1341, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1345, 1345, 1345, 1345, 1345, 1345, + 1345, 1345, 1345, 1345, 1345, 1347, 1347, 1347, 1347, 1347, + 1347, 1347, 1347, 1347, 1347, 1347, 1349, 1349, 1349, 1349, + 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1351, 1351, 1351, + + 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1353, 1353, + 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, + 1359, 1359, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1363, 1363, 1363, 1363, 1363, 1363, 1363, + 1363, 1363, 1363, 1363, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1367, 1367, 1367, 1367, 1367, + 1367, 1367, 1367, 1367, 1367, 1367, 1369, 1369, 1369, 1369, + + 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1371, 1371, 1371, + 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1373, 1373, + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1375, + 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, + 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, + 1377, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, + 1379, 1379, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, + 1381, 1381, 1381, 1383, 1383, 1383, 1383, 1383, 1383, 1383, + 1383, 1383, 1383, 1383, 1385, 1385, 1385, 1385, 1385, 1385, + 1385, 1385, 1385, 1385, 1385, 1387, 1387, 1387, 1387, 1387, + + 1387, 1387, 1387, 1387, 1387, 1387, 1389, 1389, 1389, 1389, + 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1391, 1391, 1391, + 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1395, + 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, + 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, + 1397, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, + 1399, 1399, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, + 1401, 1401, 1401, 1403, 1403, 1403, 1403, 1403, 1403, 1403, + 1403, 1403, 1403, 1403, 1405, 1405, 1405, 1405, 1405, 1405, + + 1405, 1405, 1405, 1405, 1405, 1407, 1407, 1407, 1407, 1407, + 1407, 1407, 1407, 1407, 1407, 1407, 1409, 1409, 1409, 1409, + 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1411, 1411, 1411, + 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1413, 1413, + 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1415, + 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, + 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, + 1417, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, + 1419, 1419, 503, 502, 501, 500, 499, 498, 497, 496, + 495, 494, 493, 492, 491, 490, 489, 488, 487, 486, + + 485, 484, 483, 482, 481, 416, 480, 479, 478, 475, + 474, 412, 473, 469, 468, 467, 464, 462, 461, 460, + 459, 458, 457, 456, 455, 454, 453, 452, 451, 450, + 449, 448, 447, 446, 445, 444, 443, 442, 441, 440, + 439, 438, 437, 436, 435, 434, 433, 432, 431, 430, + 429, 428, 427, 426, 425, 424, 423, 422, 421, 420, + 419, 346, 415, 414, 413, 412, 411, 407, 406, 405, + 404, 403, 402, 401, 400, 396, 395, 394, 393, 392, + 391, 390, 389, 388, 385, 384, 383, 382, 381, 380, + 379, 378, 377, 376, 375, 374, 373, 367, 366, 365, + + 364, 363, 360, 359, 358, 357, 356, 271, 355, 354, + 353, 352, 351, 348, 275, 346, 345, 343, 342, 341, + 340, 339, 338, 337, 336, 335, 334, 253, 333, 332, + 331, 233, 229, 1421, 226, 223, 326, 325, 324, 323, + 322, 321, 320, 319, 318, 315, 312, 311, 310, 306, + 305, 304, 303, 302, 299, 298, 297, 296, 295, 294, + 291, 286, 285, 284, 283, 282, 274, 273, 270, 265, + 264, 263, 262, 261, 260, 259, 258, 255, 1421, 251, + 250, 248, 110, 247, 245, 245, 244, 241, 240, 229, + 226, 224, 223, 214, 208, 207, 206, 199, 196, 195, + + 194, 189, 165, 163, 162, 153, 138, 116, 110, 1421, + 102, 102, 101, 101, 25, 25, 23, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421 } ; -static yyconst short int yy_chk[7662] = +static yyconst short int yy_chk[7680] = { 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -1837,9 +1844,9 @@ static yyconst short int yy_chk[7662] = 27, 27, 27, 11, 21, 21, 29, 32, 32, 67, 21, 22, 22, 7, 8, 34, 33, 22, 25, 67, 9, 10, 11, 9, 10, 11, 12, 38, 21, 21, - 29, 12, 33, 934, 34, 22, 22, 39, 38, 40, + 29, 12, 33, 937, 34, 22, 22, 39, 38, 40, 40, 40, 25, 46, 46, 40, 39, 39, 47, 47, - 12, 936, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 939, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, @@ -1856,813 +1863,814 @@ static yyconst short int yy_chk[7662] = 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 35, 41, 938, 52, 45, 42, + 15, 15, 15, 15, 35, 41, 941, 52, 45, 42, 41, 42, 42, 42, 45, 45, 45, 41, 43, 52, - 43, 43, 43, 52, 52, 64, 73, 88, 64, 42, - 55, 54, 66, 940, 55, 66, 35, 35, 43, 35, - 55, 35, 54, 125, 35, 54, 88, 68, 42, 56, - 35, 57, 68, 35, 35, 172, 35, 57, 56, 56, - 56, 73, 125, 57, 60, 80, 80, 80, 56, 172, + 43, 43, 43, 52, 52, 64, 53, 73, 64, 42, + 55, 53, 54, 943, 55, 945, 35, 35, 43, 35, + 55, 35, 68, 54, 35, 53, 54, 68, 42, 56, + 35, 57, 66, 35, 35, 66, 35, 57, 56, 56, + 56, 119, 73, 57, 177, 60, 119, 177, 56, 313, - 56, 60, 60, 115, 115, 115, 942, 60, 77, 77, + 56, 53, 60, 60, 80, 80, 80, 313, 60, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 79, 79, 79, 82, 92, 93, 90, 90, 944, 92, - 93, 94, 94, 95, 95, 103, 103, 82, 82, 90, - 117, 103, 110, 119, 113, 122, 122, 194, 119, 155, - - 155, 92, 93, 194, 95, 162, 162, 79, 110, 103, - 103, 110, 174, 90, 117, 174, 90, 113, 94, 171, - 171, 94, 196, 189, 82, 196, 946, 82, 144, 144, - 144, 149, 149, 149, 150, 110, 150, 150, 150, 189, - 189, 152, 152, 152, 948, 151, 144, 151, 950, 149, - 151, 151, 151, 274, 150, 152, 152, 152, 152, 152, - 152, 165, 182, 952, 165, 274, 165, 212, 212, 212, - 165, 165, 401, 182, 213, 213, 213, 216, 216, 228, - 217, 217, 217, 401, 228, 954, 232, 232, 213, 213, - 213, 213, 213, 213, 217, 217, 217, 217, 217, 217, - - 229, 233, 233, 244, 405, 229, 228, 232, 239, 239, - 261, 261, 261, 956, 239, 405, 262, 262, 262, 244, - 286, 286, 244, 263, 263, 263, 958, 229, 264, 264, - 264, 308, 239, 239, 262, 265, 265, 265, 960, 308, - 293, 962, 293, 323, 323, 293, 244, 341, 341, 265, - 265, 265, 265, 265, 265, 293, 322, 322, 322, 293, - 411, 411, 324, 324, 324, 964, 326, 338, 338, 338, - 322, 322, 322, 322, 322, 322, 324, 324, 324, 324, - 324, 324, 326, 333, 394, 326, 395, 395, 395, 457, - 398, 461, 966, 462, 333, 468, 471, 504, 968, 970, - - 394, 398, 461, 394, 462, 457, 468, 471, 457, 326, - 505, 505, 505, 504, 506, 972, 504, 510, 511, 333, - 512, 974, 540, 976, 978, 506, 398, 394, 510, 511, - 569, 512, 457, 541, 541, 541, 542, 543, 540, 544, - 504, 540, 546, 548, 548, 548, 569, 542, 543, 569, - 544, 586, 980, 546, 571, 571, 571, 982, 598, 605, - 625, 625, 625, 984, 612, 540, 616, 586, 548, 986, - 586, 620, 624, 569, 598, 605, 541, 598, 605, 571, - 612, 627, 616, 612, 625, 616, 988, 620, 624, 990, - 620, 624, 631, 992, 586, 994, 996, 627, 998, 1000, - - 627, 598, 605, 628, 628, 628, 1002, 612, 631, 616, - 1004, 631, 1006, 1008, 620, 624, 629, 629, 629, 1010, - 629, 1012, 637, 642, 627, 629, 1014, 628, 632, 632, - 632, 647, 632, 1016, 1018, 631, 1020, 632, 637, 642, - 653, 637, 642, 645, 645, 645, 1022, 647, 655, 1024, - 647, 650, 650, 650, 657, 1026, 653, 1028, 1030, 653, - 1032, 659, 661, 629, 655, 637, 642, 655, 645, 663, - 657, 665, 1034, 657, 647, 632, 650, 659, 661, 667, - 659, 661, 1036, 653, 669, 663, 1038, 665, 663, 1040, - 665, 655, 671, 1042, 673, 667, 1044, 657, 667, 675, - - 669, 677, 1046, 669, 659, 661, 1048, 679, 671, 681, - 673, 671, 663, 673, 665, 675, 1050, 677, 675, 1052, - 677, 1054, 667, 679, 683, 681, 679, 669, 681, 685, - 687, 1056, 1058, 1060, 1062, 671, 1064, 673, 689, 691, - 683, 1066, 675, 683, 677, 685, 687, 693, 685, 687, - 679, 1068, 681, 1070, 689, 691, 1072, 689, 691, 695, - 697, 699, 1074, 693, 1076, 1078, 693, 683, 701, 703, - 705, 1080, 685, 687, 1082, 695, 697, 699, 695, 697, - 699, 689, 691, 1084, 701, 703, 705, 701, 703, 705, - 693, 707, 1086, 1088, 1090, 1092, 1094, 1096, 709, 711, - - 713, 1098, 695, 697, 699, 715, 717, 707, 1100, 1102, - 707, 701, 703, 705, 709, 711, 713, 709, 711, 713, - 719, 715, 717, 1104, 715, 717, 1106, 1108, 721, 1110, - 1112, 1114, 1116, 1118, 707, 723, 719, 725, 1120, 719, - 1122, 709, 711, 713, 721, 727, 729, 721, 715, 717, - 731, 723, 1124, 725, 723, 1126, 725, 733, 735, 1128, - 1130, 727, 729, 719, 727, 729, 731, 737, 739, 731, - 1132, 721, 1134, 733, 735, 741, 733, 735, 723, 743, - 725, 1136, 1138, 737, 739, 1140, 737, 739, 727, 729, - 745, 741, 1142, 731, 741, 743, 747, 749, 743, 1144, - - 733, 735, 1146, 1148, 751, 753, 745, 1150, 1152, 745, - 737, 739, 747, 749, 1154, 747, 749, 1156, 741, 755, - 751, 753, 743, 751, 753, 757, 759, 761, 1158, 1160, - 1162, 1164, 1166, 745, 763, 755, 765, 1168, 755, 747, - 749, 757, 759, 761, 757, 759, 761, 751, 753, 1170, - 763, 1172, 765, 763, 1174, 765, 767, 769, 1176, 1178, - 1180, 1182, 755, 1184, 771, 773, 775, 1186, 757, 759, - 761, 777, 767, 769, 1188, 767, 769, 763, 779, 765, - 771, 773, 775, 771, 773, 775, 781, 777, 1190, 1192, - 777, 1194, 1196, 1198, 779, 1200, 783, 779, 1202, 767, - - 769, 785, 781, 787, 1204, 781, 1206, 771, 773, 775, - 1208, 789, 783, 1210, 777, 783, 791, 785, 793, 787, - 785, 779, 787, 1212, 795, 1214, 797, 789, 1216, 781, - 789, 799, 791, 801, 793, 791, 1218, 793, 1220, 783, - 795, 803, 797, 795, 785, 797, 787, 799, 1222, 801, - 799, 1224, 801, 1226, 789, 1228, 805, 803, 1230, 791, - 803, 793, 807, 809, 811, 1232, 1234, 795, 1236, 797, - 813, 815, 805, 1238, 799, 805, 801, 817, 807, 809, - 811, 807, 809, 811, 803, 819, 813, 815, 1240, 813, - 815, 1242, 821, 817, 1244, 1246, 817, 1248, 1250, 805, - - 823, 819, 825, 1252, 819, 807, 809, 811, 821, 1254, - 827, 821, 1256, 813, 815, 829, 823, 831, 825, 823, - 817, 825, 833, 835, 1258, 1260, 827, 1262, 819, 827, - 837, 829, 839, 831, 829, 821, 831, 1264, 833, 835, - 841, 833, 835, 823, 1266, 825, 837, 1268, 839, 837, - 1270, 839, 843, 827, 1272, 1274, 841, 1276, 829, 841, - 831, 845, 847, 849, 1278, 833, 835, 1280, 843, 851, - 853, 843, 1282, 837, 855, 839, 1284, 845, 847, 849, - 845, 847, 849, 841, 857, 851, 853, 1286, 851, 853, - 855, 859, 861, 855, 1288, 843, 1290, 1292, 1294, 863, - - 857, 1296, 1298, 857, 845, 847, 849, 859, 861, 865, - 859, 861, 851, 853, 867, 863, 1300, 855, 863, 1302, - 869, 871, 873, 1304, 1306, 865, 1308, 857, 865, 875, - 867, 877, 1310, 867, 859, 861, 869, 871, 873, 869, - 871, 873, 863, 879, 1312, 875, 1314, 877, 875, 1316, - 877, 881, 865, 1318, 1320, 1322, 1324, 867, 1326, 879, - 883, 885, 879, 869, 871, 873, 887, 881, 889, 1328, - 881, 1330, 875, 891, 877, 1332, 883, 885, 1334, 883, - 885, 893, 887, 895, 889, 887, 879, 889, 1336, 891, - 1338, 897, 891, 1340, 881, 1342, 899, 893, 901, 895, - - 893, 1344, 895, 883, 885, 1346, 903, 897, 1348, 887, - 897, 889, 899, 905, 901, 899, 891, 901, 1350, 907, - 1352, 909, 903, 1354, 893, 903, 895, 911, 913, 905, - 1356, 1358, 905, 1360, 897, 907, 915, 909, 907, 899, - 909, 901, 917, 911, 913, 1362, 911, 913, 1364, 903, - 919, 1366, 915, 1368, 1370, 915, 905, 921, 917, 923, - 1372, 917, 907, 1374, 909, 925, 919, 927, 1376, 919, - 911, 913, 929, 921, 1378, 923, 921, 1380, 923, 915, - 931, 925, 933, 927, 925, 917, 927, 935, 929, 1382, - 1384, 929, 1386, 919, 1388, 937, 931, 939, 933, 931, - - 921, 933, 923, 935, 1390, 941, 935, 1392, 925, 1394, - 927, 937, 943, 939, 937, 929, 939, 945, 947, 1396, - 1398, 941, 1400, 931, 941, 933, 949, 951, 943, 1402, - 935, 943, 1404, 945, 947, 953, 945, 947, 937, 1406, - 939, 1418, 949, 951, 932, 949, 951, 955, 941, 957, - 930, 953, 928, 926, 953, 943, 959, 961, 963, 924, - 945, 947, 922, 955, 965, 957, 955, 920, 957, 949, - 951, 918, 959, 961, 963, 959, 961, 963, 953, 967, - 965, 916, 914, 965, 912, 910, 969, 971, 908, 906, - 955, 904, 957, 973, 975, 967, 902, 900, 967, 959, - - 961, 963, 969, 971, 977, 969, 971, 965, 979, 973, - 975, 898, 973, 975, 896, 981, 983, 894, 892, 890, - 977, 888, 967, 977, 979, 985, 987, 979, 886, 969, - 971, 981, 983, 989, 981, 983, 973, 975, 991, 884, - 882, 985, 987, 880, 985, 987, 993, 977, 995, 989, - 878, 979, 989, 876, 991, 997, 999, 991, 981, 983, - 874, 1001, 993, 1003, 995, 993, 872, 995, 985, 987, - 870, 997, 999, 868, 997, 999, 989, 1001, 1005, 1003, - 1001, 991, 1003, 866, 1007, 864, 1009, 862, 860, 993, - 858, 995, 1011, 1013, 1005, 856, 854, 1005, 997, 999, - - 1007, 1015, 1009, 1007, 1001, 1009, 1003, 1017, 1011, 1013, - 852, 1011, 1013, 850, 1019, 1021, 848, 1015, 846, 844, - 1015, 1005, 1023, 1017, 1025, 842, 1017, 1007, 840, 1009, - 1019, 1021, 1027, 1019, 1021, 1011, 1013, 1029, 1023, 838, - 1025, 1023, 836, 1025, 1015, 1031, 834, 1033, 1027, 832, - 1017, 1027, 1035, 1029, 1037, 830, 1029, 1019, 1021, 828, - 1039, 1031, 1041, 1033, 1031, 1023, 1033, 1025, 1035, 826, - 1037, 1035, 824, 1037, 822, 1027, 1039, 1043, 1041, 1039, - 1029, 1041, 1045, 1047, 820, 818, 816, 814, 1031, 812, - 1033, 1049, 1051, 1043, 810, 1035, 1043, 1037, 1045, 1047, - - 1053, 1045, 1047, 1039, 808, 1041, 806, 1049, 1051, 804, - 1049, 1051, 1055, 1057, 1059, 802, 1053, 800, 798, 1053, - 1043, 1061, 1063, 1065, 796, 1045, 1047, 794, 1055, 1057, - 1059, 1055, 1057, 1059, 1049, 1051, 792, 1061, 1063, 1065, - 1061, 1063, 1065, 1053, 1067, 790, 788, 786, 784, 782, - 780, 1069, 1071, 1073, 778, 1055, 1057, 1059, 1075, 1077, - 1067, 776, 774, 1067, 1061, 1063, 1065, 1069, 1071, 1073, - 1069, 1071, 1073, 1079, 1075, 1077, 772, 1075, 1077, 770, - 768, 1081, 766, 764, 762, 760, 758, 1067, 1083, 1079, - 1085, 756, 1079, 754, 1069, 1071, 1073, 1081, 1087, 1089, - - 1081, 1075, 1077, 1091, 1083, 752, 1085, 1083, 750, 1085, - 1093, 1095, 748, 746, 1087, 1089, 1079, 1087, 1089, 1091, - 1097, 1099, 1091, 744, 1081, 742, 1093, 1095, 1101, 1093, - 1095, 1083, 1103, 1085, 740, 738, 1097, 1099, 736, 1097, - 1099, 1087, 1089, 1105, 1101, 734, 1091, 1101, 1103, 1107, - 1109, 1103, 732, 1093, 1095, 730, 728, 1111, 1113, 1105, - 726, 724, 1105, 1097, 1099, 1107, 1109, 722, 1107, 1109, - 720, 1101, 1115, 1111, 1113, 1103, 1111, 1113, 1117, 1119, - 1121, 718, 716, 714, 712, 710, 1105, 1123, 1115, 1125, - 708, 1115, 1107, 1109, 1117, 1119, 1121, 1117, 1119, 1121, - - 1111, 1113, 706, 1123, 704, 1125, 1123, 702, 1125, 1127, - 1129, 700, 698, 696, 694, 1115, 692, 1131, 1133, 1135, - 690, 1117, 1119, 1121, 1137, 1127, 1129, 688, 1127, 1129, - 1123, 1139, 1125, 1131, 1133, 1135, 1131, 1133, 1135, 1141, - 1137, 686, 684, 1137, 682, 680, 678, 1139, 676, 1143, - 1139, 674, 1127, 1129, 1145, 1141, 1147, 672, 1141, 670, - 1131, 1133, 1135, 668, 1149, 1143, 666, 1137, 1143, 1151, - 1145, 1153, 1147, 1145, 1139, 1147, 664, 1155, 662, 1157, - 1149, 660, 1141, 1149, 1159, 1151, 1161, 1153, 1151, 658, - 1153, 656, 1143, 1155, 1163, 1157, 1155, 1145, 1157, 1147, - - 1159, 654, 1161, 1159, 652, 1161, 649, 1149, 648, 1165, - 1163, 646, 1151, 1163, 1153, 1167, 1169, 1171, 644, 643, - 1155, 641, 1157, 1173, 1175, 1165, 640, 1159, 1165, 1161, - 1177, 1167, 1169, 1171, 1167, 1169, 1171, 1163, 1179, 1173, - 1175, 639, 1173, 1175, 638, 1181, 1177, 636, 635, 1177, - 634, 633, 1165, 1183, 1179, 1185, 630, 1179, 1167, 1169, - 1171, 1181, 626, 1187, 1181, 623, 1173, 1175, 1189, 1183, - 1191, 1185, 1183, 1177, 1185, 1193, 1195, 621, 619, 1187, - 618, 1179, 1187, 1197, 1189, 1199, 1191, 1189, 1181, 1191, - 617, 1193, 1195, 1201, 1193, 1195, 1183, 615, 1185, 1197, - - 614, 1199, 1197, 613, 1199, 1203, 1187, 611, 608, 1201, - 606, 1189, 1201, 1191, 1205, 1207, 1209, 604, 1193, 1195, - 603, 1203, 1211, 1213, 1203, 602, 1197, 1215, 1199, 601, - 1205, 1207, 1209, 1205, 1207, 1209, 1201, 1217, 1211, 1213, - 600, 1211, 1213, 1215, 1219, 1221, 1215, 599, 1203, 597, - 596, 594, 1223, 1217, 589, 588, 1217, 1205, 1207, 1209, - 1219, 1221, 1225, 1219, 1221, 1211, 1213, 1227, 1223, 587, - 1215, 1223, 585, 1229, 1231, 1233, 584, 581, 1225, 580, - 1217, 1225, 1235, 1227, 1237, 579, 1227, 1219, 1221, 1229, - 1231, 1233, 1229, 1231, 1233, 1223, 1239, 577, 1235, 576, - - 1237, 1235, 575, 1237, 1241, 1225, 574, 573, 570, 568, - 1227, 567, 1239, 1243, 1245, 1239, 1229, 1231, 1233, 1247, - 1241, 1249, 566, 1241, 565, 1235, 1251, 1237, 564, 1243, - 1245, 563, 1243, 1245, 1253, 1247, 1255, 1249, 1247, 1239, - 1249, 562, 1251, 559, 1257, 1251, 558, 1241, 557, 1259, - 1253, 1261, 1255, 1253, 554, 1255, 1243, 1245, 552, 1263, - 1257, 551, 1247, 1257, 1249, 1259, 1265, 1261, 1259, 1251, - 1261, 549, 1267, 539, 1269, 1263, 538, 1253, 1263, 1255, - 1271, 1273, 1265, 537, 535, 1265, 534, 1257, 1267, 1275, - 1269, 1267, 1259, 1269, 1261, 1277, 1271, 1273, 533, 1271, - - 1273, 532, 1263, 1279, 531, 1275, 528, 527, 1275, 1265, - 1281, 1277, 1283, 526, 1277, 1267, 525, 1269, 1285, 1279, - 1287, 522, 1279, 1271, 1273, 1289, 1281, 521, 1283, 1281, - 520, 1283, 1275, 1291, 1285, 1293, 1287, 1285, 1277, 1287, - 1295, 1289, 519, 518, 1289, 517, 1279, 516, 1297, 1291, - 1299, 1293, 1291, 1281, 1293, 1283, 1295, 515, 1301, 1295, - 514, 1285, 509, 1287, 1297, 1303, 1299, 1297, 1289, 1299, - 1305, 1307, 508, 503, 1301, 499, 1291, 1301, 1293, 1309, - 1311, 1303, 497, 1295, 1303, 496, 1305, 1307, 1313, 1305, - 1307, 1297, 495, 1299, 494, 1309, 1311, 493, 1309, 1311, - - 1315, 1301, 1317, 492, 1313, 490, 489, 1313, 1303, 1319, - 1321, 1323, 488, 1305, 1307, 487, 1315, 1325, 1317, 1315, - 486, 1317, 1309, 1311, 485, 1319, 1321, 1323, 1319, 1321, - 1323, 1313, 1327, 1325, 484, 482, 1325, 481, 480, 1329, - 1331, 479, 478, 1315, 477, 1317, 1333, 1335, 1327, 476, - 475, 1327, 1319, 1321, 1323, 1329, 1331, 1337, 1329, 1331, - 1325, 1339, 1333, 1335, 474, 1333, 1335, 473, 1341, 1343, - 472, 470, 467, 1337, 466, 1327, 1337, 1339, 1345, 1347, - 1339, 465, 1329, 1331, 1341, 1343, 1349, 1341, 1343, 1333, - 1335, 1351, 464, 460, 1345, 1347, 459, 1345, 1347, 1353, - - 1337, 1355, 1349, 456, 1339, 1349, 452, 1351, 1357, 1359, - 1351, 1341, 1343, 451, 1361, 1353, 1363, 1355, 1353, 450, - 1355, 1345, 1347, 449, 1357, 1359, 448, 1357, 1359, 1349, - 1361, 1365, 1363, 1361, 1351, 1363, 447, 1367, 446, 1369, - 443, 442, 1353, 441, 1355, 1371, 1373, 1365, 440, 439, - 1365, 1357, 1359, 1367, 1375, 1369, 1367, 1361, 1369, 1363, - 1377, 1371, 1373, 438, 1371, 1373, 437, 1379, 1381, 435, - 1375, 434, 433, 1375, 1365, 1383, 1377, 1385, 431, 1377, - 1367, 430, 1369, 1379, 1381, 1387, 1379, 1381, 1371, 1373, - 1389, 1383, 428, 1385, 1383, 427, 1385, 1375, 1391, 426, - - 1393, 1387, 425, 1377, 1387, 1395, 1389, 1397, 418, 1389, - 1379, 1381, 417, 1399, 1391, 1401, 1393, 1391, 1383, 1393, - 1385, 1395, 416, 1397, 1395, 415, 1397, 414, 1387, 1399, - 1403, 1401, 1399, 1389, 1401, 1405, 1407, 413, 412, 410, - 408, 1391, 407, 1393, 1409, 406, 1403, 404, 1395, 1403, - 1397, 1405, 1407, 403, 1405, 1407, 1399, 400, 1401, 399, - 1409, 397, 396, 1409, 393, 390, 389, 388, 387, 386, - 385, 384, 383, 1403, 382, 381, 380, 378, 1405, 1407, - 377, 376, 375, 374, 373, 372, 371, 1409, 1411, 1411, - 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1412, - - 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, - 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, - 1413, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, - 1414, 1414, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, - 1415, 1415, 1415, 1416, 1416, 1416, 1416, 1416, 1416, 1416, - 1416, 1416, 370, 1416, 1417, 1417, 1417, 1417, 369, 1417, - 1417, 1417, 1417, 1417, 1417, 1419, 1419, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1420, 366, 365, 1420, - 1421, 1421, 1421, 364, 1421, 1421, 363, 1421, 1421, 1422, - 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, - - 1423, 362, 361, 1423, 1424, 1424, 1424, 1424, 1424, 360, - 1424, 1424, 1424, 1424, 1424, 1425, 358, 357, 356, 355, - 1425, 1425, 354, 1425, 1426, 353, 352, 1426, 1427, 350, - 349, 1427, 1428, 1428, 1428, 1428, 1428, 1428, 348, 1428, - 1428, 1428, 1428, 1429, 1429, 1429, 1429, 1429, 1429, 1429, - 1429, 1429, 1429, 1429, 1430, 1430, 1430, 1430, 1430, 1430, - 1430, 1430, 1430, 1430, 1430, 1431, 347, 346, 1431, 1432, - 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, - 1433, 345, 344, 343, 342, 340, 339, 337, 336, 1433, - 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, - - 1434, 1435, 335, 334, 332, 331, 1435, 330, 329, 1435, - 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, - 1436, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, - 1437, 1437, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, - 1438, 1438, 1438, 1439, 1439, 1439, 1439, 1439, 1439, 1439, - 1439, 1439, 1439, 1439, 1440, 1440, 1440, 1440, 1440, 1440, - 1440, 1440, 1440, 1440, 1440, 1441, 1441, 1441, 1441, 1441, - 1441, 1441, 1441, 1441, 1441, 1441, 1442, 1442, 1442, 1442, - 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1443, 1443, 1443, - 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1444, 1444, - - 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1445, - 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, - 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, - 1446, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1449, 1449, 1449, 1449, 1449, 1449, 1449, - 1449, 1449, 1449, 1449, 1450, 1450, 1450, 1450, 1450, 1450, - 1450, 1450, 1450, 1450, 1450, 1451, 1451, 1451, 1451, 1451, - 1451, 1451, 1451, 1451, 1451, 1451, 1452, 1452, 1452, 1452, - 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1453, 1453, 1453, - - 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1454, 1454, - 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1455, - 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, - 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, - 1456, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, - 1457, 1457, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, - 1458, 1458, 1458, 1459, 1459, 1459, 1459, 1459, 1459, 1459, - 1459, 1459, 1459, 1459, 1460, 1460, 1460, 1460, 1460, 1460, - 1460, 1460, 1460, 1460, 1460, 1461, 1461, 1461, 1461, 1461, - 1461, 1461, 1461, 1461, 1461, 1461, 1462, 1462, 1462, 1462, - - 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1463, 1463, 1463, - 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1464, 1464, - 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1465, - 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, - 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, - 1466, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, - 1467, 1467, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, - 1468, 1468, 1468, 1469, 1469, 1469, 1469, 1469, 1469, 1469, - 1469, 1469, 1469, 1469, 1470, 1470, 1470, 1470, 1470, 1470, - 1470, 1470, 1470, 1470, 1470, 1471, 1471, 1471, 1471, 1471, - - 1471, 1471, 1471, 1471, 1471, 1471, 1472, 1472, 1472, 1472, - 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1473, 1473, 1473, - 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1474, 1474, - 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1475, - 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, - 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, - 1476, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, - 1477, 1477, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, - 1478, 1478, 1478, 1479, 1479, 1479, 1479, 1479, 1479, 1479, - 1479, 1479, 1479, 1479, 1480, 1480, 1480, 1480, 1480, 1480, - - 1480, 1480, 1480, 1480, 1480, 1481, 1481, 1481, 1481, 1481, - 1481, 1481, 1481, 1481, 1481, 1481, 1482, 1482, 1482, 1482, - 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1483, 1483, 1483, - 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1484, 1484, - 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1485, - 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, - 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, - 1486, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, - 1487, 1487, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1489, 1489, 1489, 1489, 1489, 1489, 1489, - - 1489, 1489, 1489, 1489, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1491, 1491, 1491, 1491, 1491, - 1491, 1491, 1491, 1491, 1491, 1491, 1492, 1492, 1492, 1492, - 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1494, 1494, - 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1495, - 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - 1496, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, - - 1498, 1498, 1498, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1500, 1500, 1500, 1500, 1500, 1500, - 1500, 1500, 1500, 1500, 1500, 1501, 1501, 1501, 1501, 1501, - 1501, 1501, 1501, 1501, 1501, 1501, 1502, 1502, 1502, 1502, - 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1503, 1503, 1503, - 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - - 1507, 1507, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1509, 1509, 1509, 1509, 1509, 1509, 1509, - 1509, 1509, 1509, 1509, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1511, 1511, 1511, 1511, 1511, - 1511, 1511, 1511, 1511, 1511, 1511, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1513, 1513, 1513, - 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1515, - 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - - 1516, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, - 1517, 1517, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, - 1518, 1518, 1518, 1519, 1519, 1519, 1519, 1519, 1519, 1519, - 1519, 1519, 1519, 1519, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1521, 1521, 1521, 1521, 1521, - 1521, 1521, 1521, 1521, 1521, 1521, 1522, 1522, 1522, 1522, - 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1523, 1523, 1523, - 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1524, 1524, - 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1525, - 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, - - 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, - 1526, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, - 1527, 1527, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, - 1528, 1528, 1528, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1530, 1530, 1530, 1530, 1530, 1530, - 1530, 1530, 1530, 1530, 1530, 1531, 1531, 1531, 1531, 1531, - 1531, 1531, 1531, 1531, 1531, 1531, 1532, 1532, 1532, 1532, - 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1533, 1533, 1533, - 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1534, 1534, - 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1535, - - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, - 1536, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, - 1537, 1537, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, - 1538, 1538, 1538, 1539, 1539, 1539, 1539, 1539, 1539, 1539, - 1539, 1539, 1539, 1539, 1540, 1540, 1540, 1540, 1540, 1540, - 1540, 1540, 1540, 1540, 1540, 1541, 1541, 1541, 1541, 1541, - 1541, 1541, 1541, 1541, 1541, 1541, 1542, 1542, 1542, 1542, - 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1543, 1543, 1543, - 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1544, 1544, - - 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1545, - 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, - 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, - 1546, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, - 1547, 1547, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1549, 1549, 1549, 1549, 1549, 1549, 1549, - 1549, 1549, 1549, 1549, 1550, 1550, 1550, 1550, 1550, 1550, - 1550, 1550, 1550, 1550, 1550, 1551, 1551, 1551, 1551, 1551, - 1551, 1551, 1551, 1551, 1551, 1551, 1552, 1552, 1552, 1552, - 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1553, 1553, 1553, - - 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1554, 1554, - 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1555, - 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, - 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, - 1556, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, - 1557, 1557, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, - 1558, 1558, 1558, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - 1559, 1559, 1559, 1559, 1560, 1560, 1560, 1560, 1560, 1560, - 1560, 1560, 1560, 1560, 1560, 1561, 1561, 1561, 1561, 1561, - 1561, 1561, 1561, 1561, 1561, 1561, 1562, 1562, 1562, 1562, - - 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1563, 1563, 1563, - 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1564, 1564, - 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1565, - 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, - 1567, 1567, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, - 1568, 1568, 1568, 1569, 1569, 1569, 1569, 1569, 1569, 1569, - 1569, 1569, 1569, 1569, 1570, 1570, 1570, 1570, 1570, 1570, - 1570, 1570, 1570, 1570, 1570, 1571, 1571, 1571, 1571, 1571, - - 1571, 1571, 1571, 1571, 1571, 1571, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1573, 1573, 1573, - 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1574, 1574, - 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1575, - 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, - 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, - 1576, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, - 1577, 1577, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, - 1578, 1578, 1578, 1579, 1579, 1579, 1579, 1579, 1579, 1579, - 1579, 1579, 1579, 1579, 1580, 1580, 1580, 1580, 1580, 1580, - - 1580, 1580, 1580, 1580, 1580, 1581, 1581, 1581, 1581, 1581, - 1581, 1581, 1581, 1581, 1581, 1581, 1582, 1582, 1582, 1582, - 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1583, 1583, 1583, - 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1584, 1584, - 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1585, - 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, - 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, - 1586, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, - 1587, 1587, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, - 1588, 1588, 1588, 1589, 1589, 1589, 1589, 1589, 1589, 1589, - - 1589, 1589, 1589, 1589, 1590, 1590, 1590, 1590, 1590, 1590, - 1590, 1590, 1590, 1590, 1590, 1591, 1591, 1591, 1591, 1591, - 1591, 1591, 1591, 1591, 1591, 1591, 1592, 1592, 1592, 1592, - 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1593, 1593, 1593, - 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1594, 1594, - 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1595, - 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, - 1597, 1597, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, - - 1598, 1598, 1598, 1599, 1599, 1599, 1599, 1599, 1599, 1599, - 1599, 1599, 1599, 1599, 1600, 1600, 1600, 1600, 1600, 1600, - 1600, 1600, 1600, 1600, 1600, 1601, 1601, 1601, 1601, 1601, - 1601, 1601, 1601, 1601, 1601, 1601, 1602, 1602, 1602, 1602, - 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1603, 1603, 1603, - 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1604, 1604, - 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1605, - 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, - 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, - 1606, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, - - 1607, 1607, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, - 1608, 1608, 1608, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1609, 1610, 1610, 1610, 1610, 1610, 1610, - 1610, 1610, 1610, 1610, 1610, 1611, 1611, 1611, 1611, 1611, - 1611, 1611, 1611, 1611, 1611, 1611, 1612, 1612, 1612, 1612, - 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1613, 1613, 1613, - 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1614, 1614, - 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1615, - 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, - 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, - - 1616, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, - 1617, 1617, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, - 1618, 1618, 1618, 1619, 1619, 1619, 1619, 1619, 1619, 1619, - 1619, 1619, 1619, 1619, 1620, 1620, 1620, 1620, 1620, 1620, - 1620, 1620, 1620, 1620, 1620, 1621, 1621, 1621, 1621, 1621, - 1621, 1621, 1621, 1621, 1621, 1621, 1622, 1622, 1622, 1622, - 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1623, 1623, 1623, - 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1624, 1624, - 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1625, - 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, - - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - 1626, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, - 1627, 1627, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, - 1628, 1628, 1628, 1629, 1629, 1629, 1629, 1629, 1629, 1629, - 1629, 1629, 1629, 1629, 1630, 1630, 1630, 1630, 1630, 1630, - 1630, 1630, 1630, 1630, 1630, 1631, 1631, 1631, 1631, 1631, - 1631, 1631, 1631, 1631, 1631, 1631, 1632, 1632, 1632, 1632, - 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1633, 1633, 1633, - 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1634, 1634, - 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1635, - - 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, - 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, - 1636, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, - 1637, 1637, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, - 1638, 1638, 1638, 1639, 1639, 1639, 1639, 1639, 1639, 1639, - 1639, 1639, 1639, 1639, 1640, 1640, 1640, 1640, 1640, 1640, - 1640, 1640, 1640, 1640, 1640, 1641, 1641, 1641, 1641, 1641, - 1641, 1641, 1641, 1641, 1641, 1641, 1642, 1642, 1642, 1642, - 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1643, 1643, 1643, - 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1644, 1644, - - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1645, - 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, - 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, - 1646, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, - 1647, 1647, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, - 1648, 1648, 1648, 1649, 1649, 1649, 1649, 1649, 1649, 1649, - 1649, 1649, 1649, 1649, 1650, 1650, 1650, 1650, 1650, 1650, - 1650, 1650, 1650, 1650, 1650, 1651, 1651, 1651, 1651, 1651, - 1651, 1651, 1651, 1651, 1651, 1651, 1652, 1652, 1652, 1652, - 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1653, 1653, 1653, - - 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1654, 1654, - 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1655, - 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, - 1656, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, - 1657, 1657, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, - 1658, 1658, 1658, 1659, 1659, 1659, 1659, 1659, 1659, 1659, - 1659, 1659, 1659, 1659, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1661, 1661, 1661, 1661, 1661, - 1661, 1661, 1661, 1661, 1661, 1661, 1662, 1662, 1662, 1662, - - 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1663, 1663, 1663, - 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1664, 1664, - 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1665, - 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, - 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, - 1666, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, - 1667, 1667, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, - 1668, 1668, 1668, 1669, 1669, 1669, 1669, 1669, 1669, 1669, - 1669, 1669, 1669, 1669, 1670, 1670, 1670, 1670, 1670, 1670, - 1670, 1670, 1670, 1670, 1670, 1671, 1671, 1671, 1671, 1671, - - 1671, 1671, 1671, 1671, 1671, 1671, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1673, 1673, 1673, - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1674, 1674, - 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, - 1676, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, - 1678, 1678, 1678, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1680, 1680, 1680, 1680, 1680, 1680, - - 1680, 1680, 1680, 1680, 1680, 1681, 1681, 1681, 1681, 1681, - 1681, 1681, 1681, 1681, 1681, 1681, 1682, 1682, 1682, 1682, - 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1683, 1683, 1683, - 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1684, 1684, - 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1685, - 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, - 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, - 1686, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, - 1687, 1687, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, - 1688, 1688, 1688, 1689, 1689, 1689, 1689, 1689, 1689, 1689, - - 1689, 1689, 1689, 1689, 1690, 1690, 1690, 1690, 1690, 1690, - 1690, 1690, 1690, 1690, 1690, 1691, 1691, 1691, 1691, 1691, - 1691, 1691, 1691, 1691, 1691, 1691, 1692, 1692, 1692, 1692, - 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1693, 1693, 1693, - 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1694, 1694, - 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1695, - 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, - 1697, 1697, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - - 1698, 1698, 1698, 1699, 1699, 1699, 1699, 1699, 1699, 1699, - 1699, 1699, 1699, 1699, 1700, 1700, 1700, 1700, 1700, 1700, - 1700, 1700, 1700, 1700, 1700, 1701, 1701, 1701, 1701, 1701, - 1701, 1701, 1701, 1701, 1701, 1701, 1702, 1702, 1702, 1702, - 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1703, 1703, 1703, - 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1704, 1704, - 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1705, - 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, - 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, - 1706, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, - - 1707, 1707, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, - 1708, 1708, 1708, 1709, 1709, 1709, 1709, 1709, 1709, 1709, - 1709, 1709, 1709, 1709, 1710, 1710, 1710, 1710, 1710, 1710, - 1710, 1710, 1710, 1710, 1710, 1711, 1711, 1711, 1711, 1711, - 1711, 1711, 1711, 1711, 1711, 1711, 1712, 1712, 1712, 1712, - 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1713, 1713, 1713, - 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1714, 1714, - 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1715, - 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, - 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, - - 1716, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - 1717, 1717, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, - 1718, 1718, 1718, 1719, 1719, 1719, 1719, 1719, 1719, 1719, - 1719, 1719, 1719, 1719, 1720, 1720, 1720, 1720, 1720, 1720, - 1720, 1720, 1720, 1720, 1720, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1722, 1722, 1722, 1722, - 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1723, 1723, 1723, - 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1724, 1724, - 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1725, - 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, - - 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, - 1726, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, - 1727, 1727, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, - 1728, 1728, 1728, 1729, 1729, 1729, 1729, 1729, 1729, 1729, - 1729, 1729, 1729, 1729, 1730, 1730, 1730, 1730, 1730, 1730, - 1730, 1730, 1730, 1730, 1730, 1731, 1731, 1731, 1731, 1731, - 1731, 1731, 1731, 1731, 1731, 1731, 1732, 1732, 1732, 1732, - 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1733, 1733, 1733, - 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1734, 1734, - 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1735, - - 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, - 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, - 1736, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, - 1737, 1737, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, - 1738, 1738, 1738, 1739, 1739, 1739, 1739, 1739, 1739, 1739, - 1739, 1739, 1739, 1739, 1740, 1740, 1740, 1740, 1740, 1740, - 1740, 1740, 1740, 1740, 1740, 1741, 1741, 1741, 1741, 1741, - 1741, 1741, 1741, 1741, 1741, 1741, 1742, 1742, 1742, 1742, - 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1743, 1743, 1743, - 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1744, 1744, - - 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1745, - 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, - 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, - 1746, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, - 1747, 1747, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, - 1748, 1748, 1748, 1749, 1749, 1749, 1749, 1749, 1749, 1749, - 1749, 1749, 1749, 1749, 1750, 1750, 1750, 1750, 1750, 1750, - 1750, 1750, 1750, 1750, 1750, 1751, 1751, 1751, 1751, 1751, - 1751, 1751, 1751, 1751, 1751, 1751, 1752, 1752, 1752, 1752, - 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1753, 1753, 1753, - - 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1754, 1754, - 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, - 1756, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, - 1757, 1757, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, - 1758, 1758, 1758, 1759, 1759, 1759, 1759, 1759, 1759, 1759, - 1759, 1759, 1759, 1759, 1760, 1760, 1760, 1760, 1760, 1760, - 1760, 1760, 1760, 1760, 1760, 1761, 1761, 1761, 1761, 1761, - 1761, 1761, 1761, 1761, 1761, 1761, 1762, 1762, 1762, 1762, - - 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1763, 1763, 1763, - 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1765, - 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, - 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, - 1766, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1767, 1767, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, - 1768, 1768, 1768, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1770, 1770, 1770, 1770, 1770, 1770, - 1770, 1770, 1770, 1770, 1770, 1771, 1771, 1771, 1771, 1771, - - 1771, 1771, 1771, 1771, 1771, 1771, 1772, 1772, 1772, 1772, - 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1773, 1773, 1773, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1774, 1774, - 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1775, - 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, - 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, - 1776, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, - 1777, 1777, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, - 1778, 1778, 1778, 1779, 1779, 1779, 1779, 1779, 1779, 1779, - 1779, 1779, 1779, 1779, 1780, 1780, 1780, 1780, 1780, 1780, - - 1780, 1780, 1780, 1780, 1780, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1782, 1782, 1782, 1782, - 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1783, 1783, 1783, - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1784, 1784, - 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1785, - 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, - 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, - 1786, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1787, 1787, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - 1788, 1788, 1788, 1789, 1789, 1789, 1789, 1789, 1789, 1789, - - 1789, 1789, 1789, 1789, 1790, 1790, 1790, 1790, 1790, 1790, - 1790, 1790, 1790, 1790, 1790, 1791, 1791, 1791, 1791, 1791, - 1791, 1791, 1791, 1791, 1791, 1791, 1792, 1792, 1792, 1792, - 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1793, 1793, 1793, - 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1794, 1794, - 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1795, - 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, - 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, - 1796, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, - 1797, 1797, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, - - 1798, 1798, 1798, 1799, 1799, 1799, 1799, 1799, 1799, 1799, - 1799, 1799, 1799, 1799, 1800, 1800, 1800, 1800, 1800, 1800, - 1800, 1800, 1800, 1800, 1800, 1801, 1801, 1801, 1801, 1801, - 1801, 1801, 1801, 1801, 1801, 1801, 1802, 1802, 1802, 1802, - 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1803, 1803, 1803, - 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1804, 1804, - 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1805, - 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, - 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, - 1806, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, - - 1807, 1807, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, - 1808, 1808, 1808, 1809, 1809, 1809, 1809, 1809, 1809, 1809, - 1809, 1809, 1809, 1809, 1810, 1810, 1810, 1810, 1810, 1810, - 1810, 1810, 1810, 1810, 1810, 1811, 1811, 1811, 1811, 1811, - 1811, 1811, 1811, 1811, 1811, 1811, 1812, 1812, 1812, 1812, - 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1813, 1813, 1813, - 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1814, 1814, - 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1815, - 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, - 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, - - 1816, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, - 1817, 1817, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, - 1818, 1818, 1818, 1819, 1819, 1819, 1819, 1819, 1819, 1819, - 1819, 1819, 1819, 1819, 1820, 1820, 1820, 1820, 1820, 1820, - 1820, 1820, 1820, 1820, 1820, 1821, 1821, 1821, 1821, 1821, - 1821, 1821, 1821, 1821, 1821, 1821, 1822, 1822, 1822, 1822, - 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1823, 1823, 1823, - 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1825, - 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, - - 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, - 1826, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, - 1827, 1827, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1829, 1829, 1829, 1829, 1829, 1829, 1829, - 1829, 1829, 1829, 1829, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 328, 327, 325, 320, 317, - 315, 314, 313, 312, 311, 310, 309, 306, 305, 304, - 303, 302, 301, 300, 299, 298, 297, 296, 295, 294, - 292, 291, 290, 288, 287, 285, 284, 283, 282, 281, - 280, 278, 277, 276, 275, 273, 272, 267, 266, 260, - - 259, 258, 257, 256, 255, 254, 253, 252, 251, 247, - 246, 243, 231, 226, 223, 222, 220, 205, 204, 203, - 202, 201, 200, 199, 198, 197, 195, 192, 191, 190, - 188, 186, 185, 184, 183, 181, 180, 179, 178, 177, - 175, 173, 170, 168, 167, 166, 161, 158, 154, 146, - 137, 136, 135, 134, 133, 132, 131, 130, 129, 127, - 116, 114, 112, 111, 109, 108, 106, 105, 102, 101, - 89, 86, 85, 84, 78, 71, 70, 69, 65, 63, - 62, 61, 58, 53, 50, 49, 48, 44, 37, 28, - 24, 23, 20, 19, 18, 17, 2, 1, 1410, 1410, - - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, - 1410 + 77, 79, 79, 79, 82, 88, 92, 90, 90, 93, + 110, 92, 94, 94, 93, 117, 95, 95, 82, 82, + 90, 103, 103, 125, 88, 113, 110, 103, 947, 110, + + 115, 115, 115, 92, 122, 122, 93, 95, 79, 117, + 155, 155, 125, 175, 90, 103, 103, 90, 113, 94, + 130, 170, 94, 110, 278, 82, 130, 175, 82, 144, + 144, 144, 149, 149, 149, 150, 278, 150, 150, 150, + 162, 162, 152, 152, 152, 170, 151, 144, 151, 171, + 149, 151, 151, 151, 949, 150, 152, 152, 152, 152, + 152, 152, 165, 174, 174, 165, 185, 165, 171, 192, + 197, 165, 165, 219, 219, 199, 197, 185, 199, 215, + 215, 215, 216, 216, 216, 192, 192, 231, 220, 220, + 220, 951, 231, 953, 235, 235, 216, 216, 216, 216, + + 216, 216, 220, 220, 220, 220, 220, 220, 232, 236, + 236, 247, 408, 232, 231, 235, 242, 242, 265, 265, + 265, 955, 242, 408, 266, 266, 266, 247, 291, 291, + 247, 267, 267, 267, 957, 232, 268, 268, 268, 959, + 242, 242, 266, 269, 269, 269, 328, 328, 298, 961, + 298, 347, 347, 298, 247, 418, 418, 269, 269, 269, + 269, 269, 269, 298, 327, 327, 327, 298, 963, 965, + 329, 329, 329, 967, 331, 344, 344, 344, 327, 327, + 327, 327, 327, 327, 329, 329, 329, 329, 329, 329, + 331, 339, 400, 331, 401, 401, 401, 464, 405, 412, + + 969, 468, 339, 470, 476, 512, 971, 479, 400, 405, + 412, 400, 468, 464, 470, 476, 464, 331, 479, 973, + 514, 512, 516, 549, 512, 519, 520, 339, 513, 513, + 513, 514, 521, 516, 405, 400, 519, 520, 551, 549, + 464, 553, 549, 521, 550, 550, 550, 554, 512, 551, + 555, 557, 553, 559, 559, 559, 580, 597, 554, 975, + 977, 555, 557, 582, 582, 582, 549, 609, 636, 636, + 636, 979, 580, 597, 616, 580, 597, 981, 559, 623, + 983, 985, 987, 609, 989, 627, 609, 550, 582, 631, + 616, 991, 636, 616, 993, 623, 635, 638, 623, 580, + + 597, 627, 995, 997, 627, 631, 999, 1001, 631, 1003, + 609, 1005, 635, 638, 642, 635, 638, 616, 639, 639, + 639, 1007, 623, 1009, 1011, 640, 640, 640, 627, 640, + 642, 1013, 631, 642, 640, 648, 1015, 653, 1017, 635, + 638, 1019, 639, 643, 643, 643, 658, 643, 656, 656, + 656, 648, 643, 653, 648, 664, 653, 642, 661, 661, + 661, 1021, 658, 666, 1023, 658, 1025, 1027, 668, 670, + 1029, 664, 640, 656, 664, 672, 674, 676, 648, 666, + 653, 678, 666, 661, 668, 670, 680, 668, 670, 658, + 643, 672, 674, 676, 672, 674, 676, 678, 664, 1031, + + 678, 1033, 680, 1035, 1037, 680, 666, 682, 1039, 684, + 1041, 668, 670, 1043, 686, 688, 690, 1045, 672, 674, + 676, 692, 694, 682, 678, 684, 682, 696, 684, 680, + 686, 688, 690, 686, 688, 690, 1047, 692, 694, 1049, + 692, 694, 1051, 696, 698, 1053, 696, 1055, 1057, 1059, + 682, 1061, 684, 700, 1063, 702, 1065, 686, 688, 690, + 698, 704, 706, 698, 692, 694, 708, 710, 1067, 700, + 696, 702, 700, 712, 702, 714, 1069, 704, 706, 1071, + 704, 706, 708, 710, 716, 708, 710, 698, 1073, 712, + 1075, 714, 712, 1077, 714, 718, 700, 1079, 702, 1081, + + 716, 720, 1083, 716, 704, 706, 722, 724, 1085, 708, + 710, 718, 726, 728, 718, 1087, 712, 720, 714, 1089, + 720, 730, 722, 724, 1091, 722, 724, 716, 726, 728, + 1093, 726, 728, 1095, 1097, 732, 1099, 730, 718, 1101, + 730, 734, 736, 738, 720, 1103, 1105, 740, 1107, 722, + 724, 732, 742, 744, 732, 726, 728, 734, 736, 738, + 734, 736, 738, 740, 730, 1109, 740, 1111, 742, 744, + 1113, 742, 744, 746, 1115, 748, 1117, 1119, 732, 1121, + 1123, 750, 752, 754, 734, 736, 738, 756, 758, 746, + 740, 748, 746, 760, 748, 742, 744, 750, 752, 754, + + 750, 752, 754, 756, 758, 1125, 756, 758, 1127, 760, + 1129, 1131, 760, 762, 1133, 1135, 746, 1137, 748, 764, + 1139, 766, 1141, 768, 750, 752, 754, 770, 772, 762, + 756, 758, 762, 774, 776, 764, 760, 766, 764, 768, + 766, 778, 768, 770, 772, 1143, 770, 772, 1145, 774, + 776, 1147, 774, 776, 1149, 1151, 762, 778, 1153, 780, + 778, 1155, 764, 782, 766, 1157, 768, 784, 1159, 786, + 770, 772, 1161, 788, 790, 780, 774, 776, 780, 782, + 792, 794, 782, 784, 778, 786, 784, 1163, 786, 788, + 790, 1165, 788, 790, 1167, 796, 792, 794, 1169, 792, + + 794, 1171, 780, 798, 1173, 1175, 782, 1177, 1179, 800, + 784, 796, 786, 802, 796, 804, 788, 790, 1181, 798, + 806, 808, 798, 792, 794, 800, 810, 1183, 800, 802, + 1185, 804, 802, 1187, 804, 812, 806, 808, 796, 806, + 808, 814, 810, 816, 1189, 810, 798, 1191, 1193, 818, + 1195, 812, 800, 1197, 812, 820, 802, 814, 804, 816, + 814, 822, 816, 806, 808, 818, 824, 1199, 818, 810, + 1201, 820, 826, 1203, 820, 1205, 1207, 822, 812, 1209, + 822, 828, 824, 830, 814, 824, 816, 832, 826, 834, + 1211, 826, 818, 1213, 836, 838, 1215, 828, 820, 830, + + 828, 840, 830, 832, 822, 834, 832, 1217, 834, 824, + 836, 838, 842, 836, 838, 826, 1219, 840, 1221, 1223, + 840, 1225, 1227, 844, 828, 1229, 830, 846, 842, 848, + 832, 842, 834, 850, 852, 854, 1231, 836, 838, 844, + 856, 858, 844, 846, 840, 848, 846, 1233, 848, 850, + 852, 854, 850, 852, 854, 842, 856, 858, 1235, 856, + 858, 1237, 1239, 860, 1241, 1243, 844, 1245, 1247, 862, + 846, 864, 848, 866, 1249, 868, 850, 852, 854, 860, + 870, 872, 860, 856, 858, 862, 874, 864, 862, 866, + 864, 868, 866, 1251, 868, 1253, 870, 872, 1255, 870, + + 872, 876, 874, 878, 1257, 874, 860, 1259, 1261, 880, + 1263, 882, 862, 1265, 864, 884, 866, 876, 868, 878, + 876, 886, 878, 870, 872, 880, 888, 882, 880, 874, + 882, 884, 890, 1267, 884, 1269, 1271, 886, 1273, 1275, + 886, 892, 888, 894, 876, 888, 878, 896, 890, 898, + 1277, 890, 880, 1279, 882, 900, 1281, 892, 884, 894, + 892, 902, 894, 896, 886, 898, 896, 1283, 898, 888, + 1285, 900, 904, 1287, 900, 890, 1289, 902, 906, 1291, + 902, 1293, 1295, 908, 892, 1297, 894, 910, 904, 912, + 896, 904, 898, 914, 906, 916, 1299, 906, 900, 908, + + 918, 920, 908, 910, 902, 912, 910, 1301, 912, 914, + 1303, 916, 914, 1305, 916, 904, 918, 920, 922, 918, + 920, 906, 1307, 924, 1309, 1311, 908, 1313, 1315, 926, + 910, 928, 912, 930, 922, 932, 914, 922, 916, 924, + 934, 936, 924, 918, 920, 926, 938, 928, 926, 930, + 928, 932, 930, 1317, 932, 1319, 934, 936, 1321, 934, + 936, 922, 938, 940, 1323, 938, 924, 1325, 1327, 942, + 1329, 944, 926, 1331, 928, 946, 930, 948, 932, 940, + 1333, 950, 940, 934, 936, 942, 952, 944, 942, 938, + 944, 946, 954, 948, 946, 1335, 948, 950, 1337, 1339, + + 950, 1341, 952, 956, 1343, 952, 940, 958, 954, 960, + 1345, 954, 942, 1347, 944, 962, 1349, 964, 946, 956, + 948, 966, 956, 958, 950, 960, 958, 1351, 960, 952, + 1353, 962, 968, 964, 962, 954, 964, 966, 970, 1355, + 966, 1357, 1359, 972, 1361, 1363, 956, 974, 968, 976, + 958, 968, 960, 978, 970, 980, 1365, 970, 962, 972, + 964, 982, 972, 974, 966, 976, 974, 1367, 976, 978, + 1369, 980, 978, 1371, 980, 968, 1373, 982, 984, 1375, + 982, 970, 1377, 986, 988, 1379, 972, 1381, 1383, 990, + 974, 992, 976, 994, 984, 996, 978, 984, 980, 986, + + 988, 998, 986, 988, 982, 990, 1000, 992, 990, 994, + 992, 996, 994, 1385, 996, 1387, 1389, 998, 1391, 1393, + 998, 984, 1000, 1002, 1004, 1000, 986, 988, 1395, 1006, + 1397, 1008, 990, 1399, 992, 1010, 994, 1012, 996, 1002, + 1004, 1014, 1002, 1004, 998, 1006, 1016, 1008, 1006, 1000, + 1008, 1010, 1018, 1012, 1010, 1401, 1012, 1014, 1403, 1405, + 1014, 1407, 1016, 1020, 1409, 1016, 1002, 1004, 1018, 1022, + 1411, 1018, 1006, 1413, 1008, 1024, 1415, 1026, 1010, 1020, + 1012, 1028, 1020, 1030, 1014, 1022, 1417, 1429, 1022, 1016, + 935, 1024, 1032, 1026, 1024, 1018, 1026, 1028, 1034, 1030, + + 1028, 933, 1030, 1036, 931, 929, 1020, 927, 1032, 1038, + 925, 1032, 1022, 1040, 1034, 1042, 923, 1034, 1024, 1036, + 1026, 1044, 1036, 1046, 1028, 1038, 1030, 921, 1038, 1040, + 919, 1042, 1040, 917, 1042, 1032, 915, 1044, 1048, 1046, + 1044, 1034, 1046, 1050, 1052, 913, 1036, 911, 909, 1054, + 907, 1056, 1038, 1058, 1048, 1060, 1040, 1048, 1042, 1050, + 1052, 1062, 1050, 1052, 1044, 1054, 1046, 1056, 1054, 1058, + 1056, 1060, 1058, 905, 1060, 903, 901, 1062, 899, 897, + 1062, 1048, 895, 1064, 1066, 893, 1050, 1052, 891, 1068, + 1070, 1072, 1054, 889, 1056, 1074, 1058, 1076, 1060, 1064, + + 1066, 1078, 1064, 1066, 1062, 1068, 1070, 1072, 1068, 1070, + 1072, 1074, 1080, 1076, 1074, 887, 1076, 1078, 885, 883, + 1078, 881, 879, 1082, 877, 875, 1064, 1066, 1080, 1084, + 1086, 1080, 1068, 1070, 1072, 1088, 873, 1090, 1074, 1082, + 1076, 1092, 1082, 1094, 1078, 1084, 1086, 871, 1084, 1086, + 869, 1088, 1096, 1090, 1088, 1080, 1090, 1092, 1098, 1094, + 1092, 867, 1094, 1100, 865, 863, 1082, 861, 1096, 1102, + 859, 1096, 1084, 1086, 1098, 1104, 857, 1098, 1088, 1100, + 1090, 1106, 1100, 1108, 1092, 1102, 1094, 855, 1102, 1110, + 853, 1104, 851, 849, 1104, 1096, 847, 1106, 1112, 1108, + + 1106, 1098, 1108, 1114, 1116, 1110, 1100, 845, 1110, 1118, + 843, 1120, 1102, 841, 1112, 1122, 839, 1112, 1104, 1114, + 1116, 1124, 1114, 1116, 1106, 1118, 1108, 1120, 1118, 1126, + 1120, 1122, 1110, 837, 1122, 835, 833, 1124, 831, 829, + 1124, 1112, 827, 1128, 1130, 1126, 1114, 1116, 1126, 1132, + 1134, 1136, 1118, 825, 1120, 1138, 823, 1140, 1122, 1128, + 1130, 1142, 1128, 1130, 1124, 1132, 1134, 1136, 1132, 1134, + 1136, 1138, 1126, 1140, 1138, 821, 1140, 1142, 819, 817, + 1142, 815, 813, 1144, 811, 809, 1128, 1130, 807, 1146, + 1148, 1150, 1132, 1134, 1136, 1152, 1154, 1156, 1138, 1144, + + 1140, 1158, 1144, 1160, 1142, 1146, 1148, 1150, 1146, 1148, + 1150, 1152, 1154, 1156, 1152, 1154, 1156, 1158, 805, 1160, + 1158, 803, 1160, 801, 799, 797, 1144, 795, 793, 1162, + 791, 1164, 1146, 1148, 1150, 1166, 1168, 1170, 1152, 1154, + 1156, 1172, 1174, 1176, 1158, 1162, 1160, 1164, 1162, 1178, + 1164, 1166, 1168, 1170, 1166, 1168, 1170, 1172, 1174, 1176, + 1172, 1174, 1176, 789, 787, 1178, 785, 783, 1178, 781, + 779, 1180, 1162, 777, 1164, 1182, 775, 1184, 1166, 1168, + 1170, 1186, 1188, 1190, 1172, 1174, 1176, 1180, 1192, 1194, + 1180, 1182, 1178, 1184, 1182, 773, 1184, 1186, 1188, 1190, + + 1186, 1188, 1190, 1196, 1192, 1194, 771, 1192, 1194, 769, + 767, 1198, 765, 763, 1180, 761, 759, 1200, 1182, 1196, + 1184, 1202, 1196, 1204, 1186, 1188, 1190, 1198, 1206, 1208, + 1198, 1192, 1194, 1200, 1210, 757, 1200, 1202, 755, 1204, + 1202, 753, 1204, 1212, 1206, 1208, 1196, 1206, 1208, 1214, + 1210, 1216, 751, 1210, 1198, 749, 747, 1218, 745, 1212, + 1200, 743, 1212, 1220, 1202, 1214, 1204, 1216, 1214, 1222, + 1216, 1206, 1208, 1218, 1224, 741, 1218, 1210, 739, 1220, + 1226, 737, 1220, 735, 733, 1222, 1212, 731, 1222, 1228, + 1224, 1230, 1214, 1224, 1216, 1232, 1226, 1234, 729, 1226, + + 1218, 727, 1236, 1238, 725, 1228, 1220, 1230, 1228, 1240, + 1230, 1232, 1222, 1234, 1232, 723, 1234, 1224, 1236, 1238, + 1242, 1236, 1238, 1226, 721, 1240, 719, 717, 1240, 715, + 713, 1244, 1228, 711, 1230, 1246, 1242, 1248, 1232, 1242, + 1234, 1250, 1252, 1254, 709, 1236, 1238, 1244, 1256, 1258, + 1244, 1246, 1240, 1248, 1246, 707, 1248, 1250, 1252, 1254, + 1250, 1252, 1254, 1242, 1256, 1258, 705, 1256, 1258, 703, + 701, 1260, 699, 697, 1244, 695, 693, 1262, 1246, 1264, + 1248, 1266, 691, 1268, 1250, 1252, 1254, 1260, 1270, 1272, + 1260, 1256, 1258, 1262, 1274, 1264, 1262, 1266, 1264, 1268, + + 1266, 689, 1268, 687, 1270, 1272, 685, 1270, 1272, 1276, + 1274, 1278, 683, 1274, 1260, 681, 679, 1280, 677, 1282, + 1262, 675, 1264, 1284, 1266, 1276, 1268, 1278, 1276, 1286, + 1278, 1270, 1272, 1280, 1288, 1282, 1280, 1274, 1282, 1284, + 1290, 673, 1284, 671, 669, 1286, 667, 665, 1286, 1292, + 1288, 1294, 1276, 1288, 1278, 1296, 1290, 1298, 663, 1290, + 1280, 660, 1282, 1300, 659, 1292, 1284, 1294, 1292, 1302, + 1294, 1296, 1286, 1298, 1296, 657, 1298, 1288, 655, 1300, + 1304, 654, 1300, 1290, 652, 1302, 1306, 651, 1302, 650, + 649, 1308, 1292, 647, 1294, 1310, 1304, 1312, 1296, 1304, + + 1298, 1314, 1306, 1316, 646, 1306, 1300, 1308, 1318, 1320, + 1308, 1310, 1302, 1312, 1310, 645, 1312, 1314, 644, 1316, + 1314, 641, 1316, 1304, 1318, 1320, 1322, 1318, 1320, 1306, + 637, 1324, 634, 632, 1308, 630, 629, 1326, 1310, 1328, + 1312, 1330, 1322, 1332, 1314, 1322, 1316, 1324, 1334, 1336, + 1324, 1318, 1320, 1326, 1338, 1328, 1326, 1330, 1328, 1332, + 1330, 628, 1332, 626, 1334, 1336, 625, 1334, 1336, 1322, + 1338, 1340, 624, 1338, 1324, 622, 619, 1342, 617, 1344, + 1326, 615, 1328, 1346, 1330, 1348, 1332, 1340, 614, 1350, + 1340, 1334, 1336, 1342, 1352, 1344, 1342, 1338, 1344, 1346, + + 1354, 1348, 1346, 613, 1348, 1350, 612, 611, 1350, 610, + 1352, 1356, 608, 1352, 1340, 1358, 1354, 1360, 607, 1354, + 1342, 605, 1344, 1362, 600, 1364, 1346, 1356, 1348, 1366, + 1356, 1358, 1350, 1360, 1358, 599, 1360, 1352, 598, 1362, + 1368, 1364, 1362, 1354, 1364, 1366, 1370, 596, 1366, 595, + 592, 1372, 591, 590, 1356, 1374, 1368, 1376, 1358, 1368, + 1360, 1378, 1370, 1380, 588, 1370, 1362, 1372, 1364, 1382, + 1372, 1374, 1366, 1376, 1374, 587, 1376, 1378, 586, 1380, + 1378, 585, 1380, 1368, 584, 1382, 1384, 581, 1382, 1370, + 579, 1386, 1388, 578, 1372, 577, 576, 1390, 1374, 1392, + + 1376, 1394, 1384, 1396, 1378, 1384, 1380, 1386, 1388, 1398, + 1386, 1388, 1382, 1390, 1400, 1392, 1390, 1394, 1392, 1396, + 1394, 575, 1396, 574, 573, 1398, 570, 569, 1398, 1384, + 1400, 1402, 1404, 1400, 1386, 1388, 568, 1406, 565, 1408, + 1390, 563, 1392, 1410, 1394, 1412, 1396, 1402, 1404, 1414, + 1402, 1404, 1398, 1406, 1416, 1408, 1406, 1400, 1408, 1410, + 1418, 1412, 1410, 562, 1412, 1414, 560, 548, 1414, 547, + 1416, 1420, 546, 1416, 1402, 1404, 1418, 544, 543, 1418, + 1406, 542, 1408, 541, 540, 537, 1410, 1420, 1412, 536, + 1420, 535, 1414, 534, 531, 530, 529, 1416, 528, 527, + + 526, 525, 524, 1418, 523, 518, 517, 511, 507, 505, + 504, 503, 502, 501, 1420, 1422, 1422, 1422, 1422, 1422, + 1422, 1422, 1422, 1422, 1422, 1422, 1423, 1423, 1423, 1423, + 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1425, 1425, + 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1426, + 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, + 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 500, + 1427, 1428, 1428, 1428, 1428, 498, 1428, 1428, 1428, 1428, + 1428, 1428, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, + + 1430, 1430, 1430, 1431, 497, 496, 1431, 1432, 1432, 1432, + 495, 1432, 1432, 494, 1432, 1432, 1433, 1433, 1433, 1433, + 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1434, 493, 492, + 1434, 1435, 1435, 1435, 1435, 1435, 490, 1435, 1435, 1435, + 1435, 1435, 1436, 489, 488, 487, 486, 1436, 1436, 485, + 1436, 1437, 484, 483, 1437, 1438, 482, 481, 1438, 1439, + 1439, 1439, 1439, 1439, 1439, 480, 1439, 1439, 1439, 1439, + 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, + 1440, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, + 1441, 1441, 1442, 478, 475, 1442, 1443, 1443, 1443, 1443, + + 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1444, 474, 473, + 472, 469, 467, 466, 463, 459, 1444, 1445, 1445, 1445, + 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1446, 458, + 457, 456, 455, 1446, 454, 453, 1446, 1447, 1447, 1447, + 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1448, 1448, + 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1449, + 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, + 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, + 1450, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, + 1451, 1451, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, + + 1452, 1452, 1452, 1453, 1453, 1453, 1453, 1453, 1453, 1453, + 1453, 1453, 1453, 1453, 1454, 1454, 1454, 1454, 1454, 1454, + 1454, 1454, 1454, 1454, 1454, 1455, 1455, 1455, 1455, 1455, + 1455, 1455, 1455, 1455, 1455, 1455, 1456, 1456, 1456, 1456, + 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1457, 1457, 1457, + 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1458, 1458, + 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1459, + 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, + 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, + 1460, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, + + 1461, 1461, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, + 1462, 1462, 1462, 1463, 1463, 1463, 1463, 1463, 1463, 1463, + 1463, 1463, 1463, 1463, 1464, 1464, 1464, 1464, 1464, 1464, + 1464, 1464, 1464, 1464, 1464, 1465, 1465, 1465, 1465, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1466, 1466, 1466, 1466, + 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1467, 1467, 1467, + 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1468, 1468, + 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1469, + 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, + 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, + + 1470, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, + 1471, 1471, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, + 1472, 1472, 1472, 1473, 1473, 1473, 1473, 1473, 1473, 1473, + 1473, 1473, 1473, 1473, 1474, 1474, 1474, 1474, 1474, 1474, + 1474, 1474, 1474, 1474, 1474, 1475, 1475, 1475, 1475, 1475, + 1475, 1475, 1475, 1475, 1475, 1475, 1476, 1476, 1476, 1476, + 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1477, 1477, 1477, + 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1478, 1478, + 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1479, + 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + + 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, + 1480, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, + 1481, 1481, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, + 1482, 1482, 1482, 1483, 1483, 1483, 1483, 1483, 1483, 1483, + 1483, 1483, 1483, 1483, 1484, 1484, 1484, 1484, 1484, 1484, + 1484, 1484, 1484, 1484, 1484, 1485, 1485, 1485, 1485, 1485, + 1485, 1485, 1485, 1485, 1485, 1485, 1486, 1486, 1486, 1486, + 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1487, 1487, 1487, + 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1488, 1488, + 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1489, + + 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, + 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, + 1490, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1493, 1493, 1493, 1493, 1493, 1493, 1493, + 1493, 1493, 1493, 1493, 1494, 1494, 1494, 1494, 1494, 1494, + 1494, 1494, 1494, 1494, 1494, 1495, 1495, 1495, 1495, 1495, + 1495, 1495, 1495, 1495, 1495, 1495, 1496, 1496, 1496, 1496, + 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1497, 1497, 1497, + 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1498, 1498, + + 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1499, + 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, + 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, + 1500, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, + 1501, 1501, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, + 1502, 1502, 1502, 1503, 1503, 1503, 1503, 1503, 1503, 1503, + 1503, 1503, 1503, 1503, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1505, 1505, 1505, 1505, 1505, + 1505, 1505, 1505, 1505, 1505, 1505, 1506, 1506, 1506, 1506, + 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1507, 1507, 1507, + + 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1508, 1508, + 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1509, + 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, + 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, + 1510, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, + 1511, 1511, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, + 1512, 1512, 1512, 1513, 1513, 1513, 1513, 1513, 1513, 1513, + 1513, 1513, 1513, 1513, 1514, 1514, 1514, 1514, 1514, 1514, + 1514, 1514, 1514, 1514, 1514, 1515, 1515, 1515, 1515, 1515, + 1515, 1515, 1515, 1515, 1515, 1515, 1516, 1516, 1516, 1516, + + 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1517, 1517, 1517, + 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1518, 1518, + 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1519, + 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, + 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, + 1520, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, + 1521, 1521, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, + 1522, 1522, 1522, 1523, 1523, 1523, 1523, 1523, 1523, 1523, + 1523, 1523, 1523, 1523, 1524, 1524, 1524, 1524, 1524, 1524, + 1524, 1524, 1524, 1524, 1524, 1525, 1525, 1525, 1525, 1525, + + 1525, 1525, 1525, 1525, 1525, 1525, 1526, 1526, 1526, 1526, + 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1527, 1527, 1527, + 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1528, 1528, + 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, + 1530, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, + 1531, 1531, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, + 1532, 1532, 1532, 1533, 1533, 1533, 1533, 1533, 1533, 1533, + 1533, 1533, 1533, 1533, 1534, 1534, 1534, 1534, 1534, 1534, + + 1534, 1534, 1534, 1534, 1534, 1535, 1535, 1535, 1535, 1535, + 1535, 1535, 1535, 1535, 1535, 1535, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, + 1540, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, + 1542, 1542, 1542, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + + 1543, 1543, 1543, 1543, 1544, 1544, 1544, 1544, 1544, 1544, + 1544, 1544, 1544, 1544, 1544, 1545, 1545, 1545, 1545, 1545, + 1545, 1545, 1545, 1545, 1545, 1545, 1546, 1546, 1546, 1546, + 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1547, 1547, 1547, + 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, + 1551, 1551, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, + + 1552, 1552, 1552, 1553, 1553, 1553, 1553, 1553, 1553, 1553, + 1553, 1553, 1553, 1553, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1555, 1555, 1555, 1555, 1555, + 1555, 1555, 1555, 1555, 1555, 1555, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1557, 1557, 1557, + 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1558, 1558, + 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1559, + 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + 1560, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, + + 1561, 1561, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, + 1562, 1562, 1562, 1563, 1563, 1563, 1563, 1563, 1563, 1563, + 1563, 1563, 1563, 1563, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1565, 1565, 1565, 1565, 1565, + 1565, 1565, 1565, 1565, 1565, 1565, 1566, 1566, 1566, 1566, + 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1567, 1567, 1567, + 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1568, 1568, + 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1569, + 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, + 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, + + 1570, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, + 1571, 1571, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, + 1572, 1572, 1572, 1573, 1573, 1573, 1573, 1573, 1573, 1573, + 1573, 1573, 1573, 1573, 1574, 1574, 1574, 1574, 1574, 1574, + 1574, 1574, 1574, 1574, 1574, 1575, 1575, 1575, 1575, 1575, + 1575, 1575, 1575, 1575, 1575, 1575, 1576, 1576, 1576, 1576, + 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1577, 1577, 1577, + 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1578, 1578, + 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1579, + 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, + + 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, + 1580, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, + 1581, 1581, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, + 1582, 1582, 1582, 1583, 1583, 1583, 1583, 1583, 1583, 1583, + 1583, 1583, 1583, 1583, 1584, 1584, 1584, 1584, 1584, 1584, + 1584, 1584, 1584, 1584, 1584, 1585, 1585, 1585, 1585, 1585, + 1585, 1585, 1585, 1585, 1585, 1585, 1586, 1586, 1586, 1586, + 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1587, 1587, 1587, + 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1588, 1588, + 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1589, + + 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, + 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, + 1590, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, + 1591, 1591, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, + 1592, 1592, 1592, 1593, 1593, 1593, 1593, 1593, 1593, 1593, + 1593, 1593, 1593, 1593, 1594, 1594, 1594, 1594, 1594, 1594, + 1594, 1594, 1594, 1594, 1594, 1595, 1595, 1595, 1595, 1595, + 1595, 1595, 1595, 1595, 1595, 1595, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1597, 1597, 1597, + 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1598, 1598, + + 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1599, + 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, + 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, + 1600, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, + 1601, 1601, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1603, 1603, 1603, 1603, 1603, 1603, 1603, + 1603, 1603, 1603, 1603, 1604, 1604, 1604, 1604, 1604, 1604, + 1604, 1604, 1604, 1604, 1604, 1605, 1605, 1605, 1605, 1605, + 1605, 1605, 1605, 1605, 1605, 1605, 1606, 1606, 1606, 1606, + 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1607, 1607, 1607, + + 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1608, 1608, + 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1609, + 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, + 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, + 1610, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, + 1611, 1611, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, + 1612, 1612, 1612, 1613, 1613, 1613, 1613, 1613, 1613, 1613, + 1613, 1613, 1613, 1613, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1615, 1615, 1615, 1615, 1615, + 1615, 1615, 1615, 1615, 1615, 1615, 1616, 1616, 1616, 1616, + + 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1617, 1617, 1617, + 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1618, 1618, + 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1619, + 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, + 1621, 1621, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, + 1622, 1622, 1622, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + 1623, 1623, 1623, 1623, 1624, 1624, 1624, 1624, 1624, 1624, + 1624, 1624, 1624, 1624, 1624, 1625, 1625, 1625, 1625, 1625, + + 1625, 1625, 1625, 1625, 1625, 1625, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1627, 1627, 1627, + 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1628, 1628, + 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1629, + 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, + 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, + 1630, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, + 1631, 1631, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1633, 1633, 1633, 1633, 1633, 1633, 1633, + 1633, 1633, 1633, 1633, 1634, 1634, 1634, 1634, 1634, 1634, + + 1634, 1634, 1634, 1634, 1634, 1635, 1635, 1635, 1635, 1635, + 1635, 1635, 1635, 1635, 1635, 1635, 1636, 1636, 1636, 1636, + 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1637, 1637, 1637, + 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1638, 1638, + 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1639, + 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, + 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, + 1640, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, + 1641, 1641, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, + 1642, 1642, 1642, 1643, 1643, 1643, 1643, 1643, 1643, 1643, + + 1643, 1643, 1643, 1643, 1644, 1644, 1644, 1644, 1644, 1644, + 1644, 1644, 1644, 1644, 1644, 1645, 1645, 1645, 1645, 1645, + 1645, 1645, 1645, 1645, 1645, 1645, 1646, 1646, 1646, 1646, + 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1647, 1647, 1647, + 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1648, 1648, + 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1649, + 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, + 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, + 1650, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, + + 1652, 1652, 1652, 1653, 1653, 1653, 1653, 1653, 1653, 1653, + 1653, 1653, 1653, 1653, 1654, 1654, 1654, 1654, 1654, 1654, + 1654, 1654, 1654, 1654, 1654, 1655, 1655, 1655, 1655, 1655, + 1655, 1655, 1655, 1655, 1655, 1655, 1656, 1656, 1656, 1656, + 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1657, 1657, 1657, + 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1658, 1658, + 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, + 1660, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + + 1661, 1661, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, + 1662, 1662, 1662, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1664, 1664, 1664, 1664, 1664, 1664, + 1664, 1664, 1664, 1664, 1664, 1665, 1665, 1665, 1665, 1665, + 1665, 1665, 1665, 1665, 1665, 1665, 1666, 1666, 1666, 1666, + 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1667, 1667, 1667, + 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1668, 1668, + 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1669, + 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, + 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, + + 1670, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + 1671, 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, + 1672, 1672, 1672, 1673, 1673, 1673, 1673, 1673, 1673, 1673, + 1673, 1673, 1673, 1673, 1674, 1674, 1674, 1674, 1674, 1674, + 1674, 1674, 1674, 1674, 1674, 1675, 1675, 1675, 1675, 1675, + 1675, 1675, 1675, 1675, 1675, 1675, 1676, 1676, 1676, 1676, + 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1677, 1677, 1677, + 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1678, 1678, + 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1679, + 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, + + 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, + 1680, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, + 1681, 1681, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, + 1682, 1682, 1682, 1683, 1683, 1683, 1683, 1683, 1683, 1683, + 1683, 1683, 1683, 1683, 1684, 1684, 1684, 1684, 1684, 1684, + 1684, 1684, 1684, 1684, 1684, 1685, 1685, 1685, 1685, 1685, + 1685, 1685, 1685, 1685, 1685, 1685, 1686, 1686, 1686, 1686, + 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1687, 1687, 1687, + 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1688, 1688, + 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1689, + + 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, + 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, + 1690, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, + 1691, 1691, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, + 1692, 1692, 1692, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1694, 1694, 1694, 1694, 1694, 1694, + 1694, 1694, 1694, 1694, 1694, 1695, 1695, 1695, 1695, 1695, + 1695, 1695, 1695, 1695, 1695, 1695, 1696, 1696, 1696, 1696, + 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1697, 1697, 1697, + 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1698, 1698, + + 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1699, + 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, + 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, + 1700, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, + 1701, 1701, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, + 1702, 1702, 1702, 1703, 1703, 1703, 1703, 1703, 1703, 1703, + 1703, 1703, 1703, 1703, 1704, 1704, 1704, 1704, 1704, 1704, + 1704, 1704, 1704, 1704, 1704, 1705, 1705, 1705, 1705, 1705, + 1705, 1705, 1705, 1705, 1705, 1705, 1706, 1706, 1706, 1706, + 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1707, 1707, 1707, + + 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1708, 1708, + 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1709, + 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, + 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, + 1710, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, + 1711, 1711, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1713, 1713, 1713, 1713, 1713, 1713, 1713, + 1713, 1713, 1713, 1713, 1714, 1714, 1714, 1714, 1714, 1714, + 1714, 1714, 1714, 1714, 1714, 1715, 1715, 1715, 1715, 1715, + 1715, 1715, 1715, 1715, 1715, 1715, 1716, 1716, 1716, 1716, + + 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1717, 1717, 1717, + 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1718, 1718, + 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1719, + 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, + 1721, 1721, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, + 1722, 1722, 1722, 1723, 1723, 1723, 1723, 1723, 1723, 1723, + 1723, 1723, 1723, 1723, 1724, 1724, 1724, 1724, 1724, 1724, + 1724, 1724, 1724, 1724, 1724, 1725, 1725, 1725, 1725, 1725, + + 1725, 1725, 1725, 1725, 1725, 1725, 1726, 1726, 1726, 1726, + 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1727, 1727, 1727, + 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1729, + 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + 1730, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, + 1731, 1731, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, + 1732, 1732, 1732, 1733, 1733, 1733, 1733, 1733, 1733, 1733, + 1733, 1733, 1733, 1733, 1734, 1734, 1734, 1734, 1734, 1734, + + 1734, 1734, 1734, 1734, 1734, 1735, 1735, 1735, 1735, 1735, + 1735, 1735, 1735, 1735, 1735, 1735, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1737, 1737, 1737, + 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1738, 1738, + 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1739, + 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, + 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, + 1740, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, + 1742, 1742, 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1744, 1744, 1744, 1744, 1744, 1744, + 1744, 1744, 1744, 1744, 1744, 1745, 1745, 1745, 1745, 1745, + 1745, 1745, 1745, 1745, 1745, 1745, 1746, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1747, 1747, 1747, + 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1748, 1748, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1749, + 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, + 1751, 1751, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, + + 1752, 1752, 1752, 1753, 1753, 1753, 1753, 1753, 1753, 1753, + 1753, 1753, 1753, 1753, 1754, 1754, 1754, 1754, 1754, 1754, + 1754, 1754, 1754, 1754, 1754, 1755, 1755, 1755, 1755, 1755, + 1755, 1755, 1755, 1755, 1755, 1755, 1756, 1756, 1756, 1756, + 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1758, 1758, + 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1759, + 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, + 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, + 1760, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, + + 1761, 1761, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, + 1762, 1762, 1762, 1763, 1763, 1763, 1763, 1763, 1763, 1763, + 1763, 1763, 1763, 1763, 1764, 1764, 1764, 1764, 1764, 1764, + 1764, 1764, 1764, 1764, 1764, 1765, 1765, 1765, 1765, 1765, + 1765, 1765, 1765, 1765, 1765, 1765, 1766, 1766, 1766, 1766, + 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1768, 1768, + 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1769, + 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, + + 1770, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, + 1771, 1771, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1773, 1773, 1773, 1773, 1773, 1773, 1773, + 1773, 1773, 1773, 1773, 1774, 1774, 1774, 1774, 1774, 1774, + 1774, 1774, 1774, 1774, 1774, 1775, 1775, 1775, 1775, 1775, + 1775, 1775, 1775, 1775, 1775, 1775, 1776, 1776, 1776, 1776, + 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1777, 1777, + 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1778, 1778, + 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1779, + 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, + + 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, + 1780, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, + 1782, 1782, 1782, 1783, 1783, 1783, 1783, 1783, 1783, 1783, + 1783, 1783, 1783, 1783, 1784, 1784, 1784, 1784, 1784, 1784, + 1784, 1784, 1784, 1784, 1784, 1785, 1785, 1785, 1785, 1785, + 1785, 1785, 1785, 1785, 1785, 1785, 1786, 1786, 1786, 1786, + 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1787, 1787, 1787, + 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1788, 1788, + 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1789, + + 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, + 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, + 1790, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, + 1791, 1791, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, + 1792, 1792, 1792, 1793, 1793, 1793, 1793, 1793, 1793, 1793, + 1793, 1793, 1793, 1793, 1794, 1794, 1794, 1794, 1794, 1794, + 1794, 1794, 1794, 1794, 1794, 1795, 1795, 1795, 1795, 1795, + 1795, 1795, 1795, 1795, 1795, 1795, 1796, 1796, 1796, 1796, + 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1797, 1797, 1797, + 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1798, 1798, + + 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1799, + 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, + 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, + 1801, 1801, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, + 1802, 1802, 1802, 1803, 1803, 1803, 1803, 1803, 1803, 1803, + 1803, 1803, 1803, 1803, 1804, 1804, 1804, 1804, 1804, 1804, + 1804, 1804, 1804, 1804, 1804, 1805, 1805, 1805, 1805, 1805, + 1805, 1805, 1805, 1805, 1805, 1805, 1806, 1806, 1806, 1806, + 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1807, 1807, 1807, + + 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1808, 1808, + 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1809, + 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, + 1811, 1811, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, + 1812, 1812, 1812, 1813, 1813, 1813, 1813, 1813, 1813, 1813, + 1813, 1813, 1813, 1813, 1814, 1814, 1814, 1814, 1814, 1814, + 1814, 1814, 1814, 1814, 1814, 1815, 1815, 1815, 1815, 1815, + 1815, 1815, 1815, 1815, 1815, 1815, 1816, 1816, 1816, 1816, + + 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1818, 1818, + 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1819, + 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, + 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, + 1820, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, + 1821, 1821, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, + 1822, 1822, 1822, 1823, 1823, 1823, 1823, 1823, 1823, 1823, + 1823, 1823, 1823, 1823, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1825, 1825, 1825, 1825, 1825, + + 1825, 1825, 1825, 1825, 1825, 1825, 1826, 1826, 1826, 1826, + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1827, 1827, 1827, + 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1828, 1828, + 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1829, + 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, + 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, + 1830, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, + 1831, 1831, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, + 1832, 1832, 1832, 1833, 1833, 1833, 1833, 1833, 1833, 1833, + 1833, 1833, 1833, 1833, 1834, 1834, 1834, 1834, 1834, 1834, + + 1834, 1834, 1834, 1834, 1834, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1836, 1836, 1836, 1836, + 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1837, 1837, 1837, + 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1838, 1838, + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1839, + 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, + 1841, 1841, 450, 449, 448, 447, 446, 445, 444, 442, + 441, 440, 438, 437, 435, 434, 433, 432, 425, 424, + + 423, 422, 421, 420, 419, 417, 415, 414, 413, 411, + 410, 407, 406, 404, 403, 402, 399, 396, 395, 394, + 393, 392, 391, 390, 389, 388, 387, 386, 384, 383, + 382, 381, 380, 379, 378, 377, 376, 375, 372, 371, + 370, 369, 368, 367, 366, 364, 363, 362, 361, 360, + 359, 358, 356, 355, 354, 353, 352, 351, 350, 349, + 348, 346, 345, 343, 342, 341, 340, 338, 337, 336, + 335, 334, 333, 332, 330, 325, 322, 320, 319, 318, + 317, 316, 315, 314, 311, 310, 309, 308, 307, 306, + 305, 304, 303, 302, 301, 300, 299, 297, 296, 295, + + 293, 292, 290, 289, 288, 287, 286, 285, 284, 282, + 281, 280, 279, 277, 276, 271, 270, 264, 263, 262, + 261, 260, 259, 258, 257, 256, 255, 254, 250, 249, + 246, 234, 229, 226, 225, 223, 208, 207, 206, 205, + 204, 203, 202, 201, 200, 198, 195, 194, 193, 191, + 189, 188, 187, 186, 184, 183, 182, 181, 180, 178, + 176, 173, 172, 168, 167, 166, 161, 158, 154, 146, + 137, 136, 135, 134, 133, 132, 131, 129, 127, 116, + 114, 112, 111, 109, 108, 106, 105, 102, 101, 89, + 86, 85, 84, 78, 71, 70, 69, 65, 63, 62, + + 61, 58, 50, 49, 48, 44, 37, 28, 24, 23, + 20, 19, 18, 17, 2, 1, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, + 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421 } ; static yy_state_type yy_last_accepting_state; @@ -2699,7 +2707,7 @@ char *yytext; +----------------------------------------------------------------------+ */ -/* $Id: zend_language_scanner.l,v 1.131.2.11 2006/04/13 13:48:28 dmitry Exp $ */ +/* $Id: zend_language_scanner.l,v 1.131.2.11.2.10 2007/04/22 21:33:10 tony2001 Exp $ */ #define yyleng SCNG(yy_leng) #define yytext SCNG(yy_text) @@ -2745,6 +2753,7 @@ char *yytext; #include "zend_operators.h" #include "zend_API.h" #include "zend_strtod.h" +#include "zend_exceptions.h" #ifdef HAVE_STDARG_H # include <stdarg.h> @@ -2972,6 +2981,11 @@ int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2) ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC) { zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles); + /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */ + file_handle->opened_path = NULL; + if (file_handle->free_filename) { + file_handle->filename = NULL; + } } @@ -3226,7 +3240,11 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC) efree(op_array); retval = NULL; } else { + zend_bool orig_interactive = CG(interactive); + + CG(interactive) = 0; init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE TSRMLS_CC); + CG(interactive) = orig_interactive; CG(active_op_array) = op_array; BEGIN(ST_IN_SCRIPTING); compiler_result = zendparse(TSRMLS_C); @@ -3713,13 +3731,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1411 ) + if ( yy_current_state >= 1422 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 7599 ); + while ( yy_base[yy_current_state] != 7617 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4023,324 +4041,330 @@ YY_RULE_SETUP case 46: YY_RULE_SETUP { - return T_ARRAY_CAST; + return T_STRING_CAST; } YY_BREAK case 47: YY_RULE_SETUP { - return T_OBJECT_CAST; + return T_ARRAY_CAST; } YY_BREAK case 48: YY_RULE_SETUP { - return T_BOOL_CAST; + return T_OBJECT_CAST; } YY_BREAK case 49: YY_RULE_SETUP { - return T_UNSET_CAST; + return T_BOOL_CAST; } YY_BREAK case 50: YY_RULE_SETUP { - return T_EVAL; + return T_UNSET_CAST; } YY_BREAK case 51: YY_RULE_SETUP { - return T_INCLUDE; + return T_EVAL; } YY_BREAK case 52: YY_RULE_SETUP { - return T_INCLUDE_ONCE; + return T_INCLUDE; } YY_BREAK case 53: YY_RULE_SETUP { - return T_REQUIRE; + return T_INCLUDE_ONCE; } YY_BREAK case 54: YY_RULE_SETUP { - return T_REQUIRE_ONCE; + return T_REQUIRE; } YY_BREAK case 55: YY_RULE_SETUP { - return T_USE; + return T_REQUIRE_ONCE; } YY_BREAK case 56: YY_RULE_SETUP { - return T_GLOBAL; + return T_USE; } YY_BREAK case 57: YY_RULE_SETUP { - return T_ISSET; + return T_GLOBAL; } YY_BREAK case 58: YY_RULE_SETUP { - return T_EMPTY; + return T_ISSET; } YY_BREAK case 59: YY_RULE_SETUP { - return T_HALT_COMPILER; + return T_EMPTY; } YY_BREAK case 60: YY_RULE_SETUP { - return T_STATIC; + return T_HALT_COMPILER; } YY_BREAK case 61: YY_RULE_SETUP { - return T_ABSTRACT; + return T_STATIC; } YY_BREAK case 62: YY_RULE_SETUP { - return T_FINAL; + return T_ABSTRACT; } YY_BREAK case 63: YY_RULE_SETUP { - return T_PRIVATE; + return T_FINAL; } YY_BREAK case 64: YY_RULE_SETUP { - return T_PROTECTED; + return T_PRIVATE; } YY_BREAK case 65: YY_RULE_SETUP { - return T_PUBLIC; + return T_PROTECTED; } YY_BREAK case 66: YY_RULE_SETUP { - return T_UNSET; + return T_PUBLIC; } YY_BREAK case 67: YY_RULE_SETUP { - return T_DOUBLE_ARROW; + return T_UNSET; } YY_BREAK case 68: YY_RULE_SETUP { - return T_LIST; + return T_DOUBLE_ARROW; } YY_BREAK case 69: YY_RULE_SETUP { - return T_ARRAY; + return T_LIST; } YY_BREAK case 70: YY_RULE_SETUP { - return T_INC; + return T_ARRAY; } YY_BREAK case 71: YY_RULE_SETUP { - return T_DEC; + return T_INC; } YY_BREAK case 72: YY_RULE_SETUP { - return T_IS_IDENTICAL; + return T_DEC; } YY_BREAK case 73: YY_RULE_SETUP { - return T_IS_NOT_IDENTICAL; + return T_IS_IDENTICAL; } YY_BREAK case 74: YY_RULE_SETUP { - return T_IS_EQUAL; + return T_IS_NOT_IDENTICAL; } YY_BREAK case 75: YY_RULE_SETUP { - return T_IS_NOT_EQUAL; + return T_IS_EQUAL; } YY_BREAK case 76: YY_RULE_SETUP { - return T_IS_SMALLER_OR_EQUAL; + return T_IS_NOT_EQUAL; } YY_BREAK case 77: YY_RULE_SETUP { - return T_IS_GREATER_OR_EQUAL; + return T_IS_SMALLER_OR_EQUAL; } YY_BREAK case 78: YY_RULE_SETUP { - return T_PLUS_EQUAL; + return T_IS_GREATER_OR_EQUAL; } YY_BREAK case 79: YY_RULE_SETUP { - return T_MINUS_EQUAL; + return T_PLUS_EQUAL; } YY_BREAK case 80: YY_RULE_SETUP { - return T_MUL_EQUAL; + return T_MINUS_EQUAL; } YY_BREAK case 81: YY_RULE_SETUP { - return T_DIV_EQUAL; + return T_MUL_EQUAL; } YY_BREAK case 82: YY_RULE_SETUP { - return T_CONCAT_EQUAL; + return T_DIV_EQUAL; } YY_BREAK case 83: YY_RULE_SETUP { - return T_MOD_EQUAL; + return T_CONCAT_EQUAL; } YY_BREAK case 84: YY_RULE_SETUP { - return T_SL_EQUAL; + return T_MOD_EQUAL; } YY_BREAK case 85: YY_RULE_SETUP { - return T_SR_EQUAL; + return T_SL_EQUAL; } YY_BREAK case 86: YY_RULE_SETUP { - return T_AND_EQUAL; + return T_SR_EQUAL; } YY_BREAK case 87: YY_RULE_SETUP { - return T_OR_EQUAL; + return T_AND_EQUAL; } YY_BREAK case 88: YY_RULE_SETUP { - return T_XOR_EQUAL; + return T_OR_EQUAL; } YY_BREAK case 89: YY_RULE_SETUP { - return T_BOOLEAN_OR; + return T_XOR_EQUAL; } YY_BREAK case 90: YY_RULE_SETUP { - return T_BOOLEAN_AND; + return T_BOOLEAN_OR; } YY_BREAK case 91: YY_RULE_SETUP { - return T_LOGICAL_OR; + return T_BOOLEAN_AND; } YY_BREAK case 92: YY_RULE_SETUP { - return T_LOGICAL_AND; + return T_LOGICAL_OR; } YY_BREAK case 93: YY_RULE_SETUP { - return T_LOGICAL_XOR; + return T_LOGICAL_AND; } YY_BREAK case 94: YY_RULE_SETUP { - return T_SL; + return T_LOGICAL_XOR; } YY_BREAK case 95: YY_RULE_SETUP { - return T_SR; + return T_SL; } YY_BREAK case 96: YY_RULE_SETUP { - return yytext[0]; + return T_SR; } YY_BREAK case 97: YY_RULE_SETUP { + return yytext[0]; +} + YY_BREAK +case 98: +YY_RULE_SETUP +{ yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return '{'; } YY_BREAK -case 98: +case 99: YY_RULE_SETUP { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; } YY_BREAK -case 99: +case 100: YY_RULE_SETUP { RESET_DOC_COMMENT(); @@ -4351,7 +4375,7 @@ YY_RULE_SETUP return '}'; } YY_BREAK -case 100: +case 101: YY_RULE_SETUP { zend_copy_value(zendlval, yytext, yyleng); @@ -4361,7 +4385,7 @@ YY_RULE_SETUP return T_STRING_VARNAME; } YY_BREAK -case 101: +case 102: YY_RULE_SETUP { yyless(0); @@ -4369,45 +4393,54 @@ YY_RULE_SETUP yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); } YY_BREAK -case 102: -YY_RULE_SETUP -{ - errno = 0; - zendlval->value.lval = strtol(yytext, NULL, 0); - if (errno == ERANGE) { /* overflow */ - zendlval->value.dval = zend_strtod(yytext, NULL); - zendlval->type = IS_DOUBLE; - return T_DNUMBER; - } else { - zendlval->type = IS_LONG; - return T_LNUMBER; - } -} - YY_BREAK case 103: YY_RULE_SETUP { - errno = 0; - zendlval->value.lval = strtoul(yytext, NULL, 16); - if (errno == ERANGE) { /* overflow */ - /* not trying strtod - it returns trash on 0x-es */ - zendlval->value.lval = LONG_MAX; /* maximal long */ - zend_error(E_NOTICE,"Hex number is too big: %s", yytext); + if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */ + zendlval->value.lval = strtol(yytext, NULL, 0); } else { - if (zendlval->value.lval < 0) { - /* maintain consistency with the old way */ - zendlval->value.dval = (unsigned long) zendlval->value.lval; + errno = 0; + zendlval->value.lval = strtol(yytext, NULL, 0); + if (errno == ERANGE) { /* Overflow */ + if (yytext[0] == '0') { /* octal overflow */ + zendlval->value.dval = zend_oct_strtod(yytext, NULL); + } else { + zendlval->value.dval = zend_strtod(yytext, NULL); + } zendlval->type = IS_DOUBLE; return T_DNUMBER; } - zendlval->type = IS_LONG; } + zendlval->type = IS_LONG; return T_LNUMBER; } YY_BREAK case 104: YY_RULE_SETUP +{ + char *hex = yytext + 2; /* Skip "0x" */ + int len = yyleng - 2; + + /* Skip any leading 0s */ + while (*hex == '0') { + hex++; + len--; + } + + if (len < SIZEOF_LONG * 2 || (len == SIZEOF_LONG * 2 && *hex <= '7')) { + zendlval->value.lval = strtol(hex, NULL, 16); + zendlval->type = IS_LONG; + return T_LNUMBER; + } else { + zendlval->value.dval = zend_hex_strtod(hex, NULL); + zendlval->type = IS_DOUBLE; + return T_DNUMBER; + } +} + YY_BREAK +case 105: +YY_RULE_SETUP { /* treat numbers (almost) as strings inside encapsulated strings */ zendlval->value.str.val = (char *)estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; @@ -4415,7 +4448,7 @@ YY_RULE_SETUP return T_NUM_STRING; } YY_BREAK -case 105: +case 106: YY_RULE_SETUP { zendlval->value.dval = zend_strtod(yytext, NULL); @@ -4423,7 +4456,7 @@ YY_RULE_SETUP return T_DNUMBER; } YY_BREAK -case 106: +case 107: YY_RULE_SETUP { char *class_name = NULL; @@ -4441,7 +4474,7 @@ YY_RULE_SETUP return T_CLASS_C; } YY_BREAK -case 107: +case 108: YY_RULE_SETUP { char *func_name = NULL; @@ -4459,7 +4492,7 @@ YY_RULE_SETUP return T_FUNC_C; } YY_BREAK -case 108: +case 109: YY_RULE_SETUP { char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL; @@ -4473,18 +4506,16 @@ YY_RULE_SETUP len += strlen(func_name); } - zendlval->value.str.val = emalloc(len+1); - zendlval->value.str.len = sprintf(zendlval->value.str.val, "%s%s%s", + zendlval->value.str.len = zend_spprintf(&zendlval->value.str.val, 0, "%s%s%s", class_name ? class_name : "", class_name && func_name ? "::" : "", func_name ? func_name : "" ); - zendlval->value.str.len = strlen(zendlval->value.str.val); zendlval->type = IS_STRING; return T_METHOD_C; } YY_BREAK -case 109: +case 110: YY_RULE_SETUP { zendlval->value.lval = CG(zend_lineno); @@ -4492,7 +4523,7 @@ YY_RULE_SETUP return T_LINE; } YY_BREAK -case 110: +case 111: YY_RULE_SETUP { char *filename = zend_get_compiled_filename(TSRMLS_C); @@ -4506,7 +4537,7 @@ YY_RULE_SETUP return T_FILE; } YY_BREAK -case 111: +case 112: YY_RULE_SETUP { #ifdef ZEND_MULTIBYTE @@ -4529,7 +4560,7 @@ YY_RULE_SETUP return T_INLINE_HTML; } YY_BREAK -case 112: +case 113: YY_RULE_SETUP { HANDLE_NEWLINES(yytext, yyleng); @@ -4547,7 +4578,7 @@ YY_RULE_SETUP } } YY_BREAK -case 113: +case 114: YY_RULE_SETUP { if ((yytext[1]=='%' && CG(asp_tags)) || (yytext[1]=='?' && CG(short_tags))) { @@ -4564,7 +4595,7 @@ YY_RULE_SETUP } } YY_BREAK -case 114: +case 115: YY_RULE_SETUP { if (CG(asp_tags)) { @@ -4581,7 +4612,7 @@ YY_RULE_SETUP } } YY_BREAK -case 115: +case 116: YY_RULE_SETUP { zendlval->value.str.val = yytext; /* no copying - intentional */ @@ -4592,7 +4623,7 @@ YY_RULE_SETUP return T_OPEN_TAG; } YY_BREAK -case 116: +case 117: YY_RULE_SETUP { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); @@ -4600,7 +4631,7 @@ YY_RULE_SETUP return T_VARIABLE; } YY_BREAK -case 117: +case 118: YY_RULE_SETUP { zend_copy_value(zendlval, yytext, yyleng); @@ -4608,7 +4639,7 @@ YY_RULE_SETUP return T_STRING; } YY_BREAK -case 118: +case 119: YY_RULE_SETUP { zend_copy_value(zendlval, yytext, yyleng); @@ -4616,7 +4647,7 @@ YY_RULE_SETUP return T_STRING; } YY_BREAK -case 119: +case 120: YY_RULE_SETUP { zendlval->value.str.val = yytext; /* no copying - intentional */ @@ -4626,20 +4657,20 @@ YY_RULE_SETUP return T_WHITESPACE; } YY_BREAK -case 120: +case 121: YY_RULE_SETUP { BEGIN(ST_ONE_LINE_COMMENT); yymore(); } YY_BREAK -case 121: +case 122: YY_RULE_SETUP { yymore(); } YY_BREAK -case 122: +case 123: YY_RULE_SETUP { switch (yytext[yyleng-1]) { @@ -4659,7 +4690,7 @@ YY_RULE_SETUP } } YY_BREAK -case 123: +case 124: YY_RULE_SETUP { zendlval->value.str.val = yytext; /* no copying - intentional */ @@ -4670,7 +4701,7 @@ YY_RULE_SETUP return T_COMMENT; } YY_BREAK -case 124: +case 125: YY_RULE_SETUP { if (CG(asp_tags) || yytext[yyleng-2] != '%') { /* asp comment? */ @@ -4685,7 +4716,7 @@ YY_RULE_SETUP } } YY_BREAK -case 125: +case 126: YY_RULE_SETUP { CG(comment_start_line) = CG(zend_lineno); @@ -4694,7 +4725,7 @@ YY_RULE_SETUP yymore(); } YY_BREAK -case 126: +case 127: YY_RULE_SETUP { CG(comment_start_line) = CG(zend_lineno); @@ -4702,13 +4733,13 @@ YY_RULE_SETUP yymore(); } YY_BREAK -case 127: +case 128: YY_RULE_SETUP { yymore(); } YY_BREAK -case 128: +case 129: YY_RULE_SETUP { CG(doc_comment) = estrndup(yytext, yyleng); @@ -4718,7 +4749,7 @@ YY_RULE_SETUP return T_DOC_COMMENT; } YY_BREAK -case 129: +case 130: YY_RULE_SETUP { HANDLE_NEWLINES(yytext, yyleng); @@ -4726,13 +4757,13 @@ YY_RULE_SETUP return T_COMMENT; } YY_BREAK -case 130: +case 131: YY_RULE_SETUP { yymore(); } YY_BREAK -case 131: +case 132: YY_RULE_SETUP { zendlval->value.str.val = yytext; /* no copying - intentional */ @@ -4742,7 +4773,7 @@ YY_RULE_SETUP return T_CLOSE_TAG; /* implicit ';' at php-end tag */ } YY_BREAK -case 132: +case 133: YY_RULE_SETUP { if (CG(asp_tags)) { @@ -4757,14 +4788,15 @@ YY_RULE_SETUP } } YY_BREAK -case 133: +case 134: YY_RULE_SETUP { register char *s, *t; char *end; + int bprefix = (*yytext == 'b') ? 1 : 0; - zendlval->value.str.val = estrndup(yytext+1, yyleng-2); - zendlval->value.str.len = yyleng-2; + zendlval->value.str.val = estrndup(yytext+bprefix+1, yyleng-bprefix-2); + zendlval->value.str.len = yyleng-bprefix-2; zendlval->type = IS_STRING; HANDLE_NEWLINES(yytext, yyleng); @@ -4848,14 +4880,15 @@ YY_RULE_SETUP return T_CONSTANT_ENCAPSED_STRING; } YY_BREAK -case 134: +case 135: YY_RULE_SETUP { register char *s, *t; char *end; + int bprefix = (*yytext == 'b') ? 1 : 0; - zendlval->value.str.val = estrndup(yytext+1, yyleng-2); - zendlval->value.str.len = yyleng-2; + zendlval->value.str.val = estrndup(yytext+bprefix+1, yyleng-bprefix-2); + zendlval->value.str.len = yyleng-bprefix-2; zendlval->type = IS_STRING; HANDLE_NEWLINES(yytext, yyleng); @@ -4897,20 +4930,22 @@ YY_RULE_SETUP return T_CONSTANT_ENCAPSED_STRING; } YY_BREAK -case 135: +case 136: YY_RULE_SETUP { BEGIN(ST_DOUBLE_QUOTES); return '\"'; } YY_BREAK -case 136: +case 137: YY_RULE_SETUP { char *s; + int bprefix = (*yytext == 'b') ? 1 : 0; + CG(zend_lineno)++; - CG(heredoc_len) = yyleng-3-1-(yytext[yyleng-2]=='\r'?1:0); - s = yytext+3; + CG(heredoc_len) = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0); + s = yytext+bprefix+3; while ((*s == ' ') || (*s == '\t')) { s++; CG(heredoc_len)--; @@ -4920,21 +4955,21 @@ YY_RULE_SETUP return T_START_HEREDOC; } YY_BREAK -case 137: +case 138: YY_RULE_SETUP { BEGIN(ST_BACKQUOTE); return '`'; } YY_BREAK -case 138: +case 139: YY_RULE_SETUP { BEGIN(ST_SINGLE_QUOTE); return '\''; } YY_BREAK -case 139: +case 140: YY_RULE_SETUP { int label_len; @@ -4966,7 +5001,7 @@ YY_RULE_SETUP } } YY_BREAK -case 140: +case 141: YY_RULE_SETUP { HANDLE_NEWLINES(yytext, yyleng); @@ -4976,7 +5011,7 @@ YY_RULE_SETUP return T_ENCAPSED_AND_WHITESPACE; } YY_BREAK -case 141: +case 142: YY_RULE_SETUP { HANDLE_NEWLINES(yytext, yyleng); @@ -4985,7 +5020,7 @@ YY_RULE_SETUP return T_ENCAPSED_AND_WHITESPACE; } YY_BREAK -case 142: +case 143: YY_RULE_SETUP { zend_copy_value(zendlval, yytext, yyleng); @@ -4993,7 +5028,7 @@ YY_RULE_SETUP return T_ENCAPSED_AND_WHITESPACE; } YY_BREAK -case 143: +case 144: YY_RULE_SETUP { zend_copy_value(zendlval, yytext, yyleng); @@ -5001,7 +5036,7 @@ YY_RULE_SETUP return T_ENCAPSED_AND_WHITESPACE; } YY_BREAK -case 144: +case 145: YY_RULE_SETUP { zendlval->value.lval = (long) yytext[0]; @@ -5011,14 +5046,14 @@ YY_RULE_SETUP return T_CHARACTER; } YY_BREAK -case 145: +case 146: YY_RULE_SETUP { zendlval->value.lval = (long) yytext[0]; return yytext[0]; } YY_BREAK -case 146: +case 147: YY_RULE_SETUP { zendlval->value.str.val = estrndup("\\{", sizeof("\\{") - 1); @@ -5027,7 +5062,7 @@ YY_RULE_SETUP return T_STRING; } YY_BREAK -case 147: +case 148: YY_RULE_SETUP { zendlval->value.lval = (long) yytext[0]; @@ -5036,49 +5071,49 @@ YY_RULE_SETUP return T_CURLY_OPEN; } YY_BREAK -case 148: +case 149: YY_RULE_SETUP { zendlval->value.lval = (long) '\''; return T_CHARACTER; } YY_BREAK -case 149: +case 150: YY_RULE_SETUP { zendlval->value.lval = (long)'\\'; return T_CHARACTER; } YY_BREAK -case 150: +case 151: YY_RULE_SETUP { zendlval->value.lval = (long) '"'; return T_CHARACTER; } YY_BREAK -case 151: +case 152: YY_RULE_SETUP { zendlval->value.lval = (long) '`'; return T_CHARACTER; } YY_BREAK -case 152: +case 153: YY_RULE_SETUP { zendlval->value.lval = strtol(yytext+1, NULL, 8); return T_CHARACTER; } YY_BREAK -case 153: +case 154: YY_RULE_SETUP { zendlval->value.lval = strtol (yytext+2, NULL, 16); return T_CHARACTER; } YY_BREAK -case 154: +case 155: YY_RULE_SETUP { switch (yytext[1]) { @@ -5107,7 +5142,7 @@ YY_RULE_SETUP return T_CHARACTER; } YY_BREAK -case 155: +case 156: YY_RULE_SETUP { zendlval->value.str.val = (char *) estrndup(yytext, yyleng); @@ -5116,21 +5151,21 @@ YY_RULE_SETUP return T_ENCAPSED_AND_WHITESPACE; } YY_BREAK -case 156: +case 157: YY_RULE_SETUP { BEGIN(ST_IN_SCRIPTING); return '\"'; } YY_BREAK -case 157: +case 158: YY_RULE_SETUP { BEGIN(ST_IN_SCRIPTING); return '`'; } YY_BREAK -case 158: +case 159: YY_RULE_SETUP { BEGIN(ST_IN_SCRIPTING); @@ -5153,13 +5188,13 @@ case YY_STATE_EOF(ST_DOC_COMMENT): return 0; } YY_BREAK -case 159: +case 160: YY_RULE_SETUP { zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); } YY_BREAK -case 160: +case 161: YY_RULE_SETUP ECHO; YY_BREAK @@ -5457,7 +5492,7 @@ static yy_state_type yy_get_previous_state(TSRMLS_D) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1411 ) + if ( yy_current_state >= 1422 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -5495,11 +5530,11 @@ void ***tsrm_ls; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1411 ) + if ( yy_current_state >= 1422 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 1410); + yy_is_jam = (yy_current_state == 1421); return yy_is_jam ? 0 : yy_current_state; } diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h index 2e1159497..e8ce560fc 100644 --- a/Zend/zend_language_scanner.h +++ b/Zend/zend_language_scanner.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_scanner.h,v 1.19.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_language_scanner.h,v 1.19.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_SCANNER_H #define ZEND_SCANNER_H diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 52465eb6b..26a8ebeb3 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_scanner.l,v 1.131.2.11 2006/04/13 13:48:28 dmitry Exp $ */ +/* $Id: zend_language_scanner.l,v 1.131.2.11.2.10 2007/04/22 21:33:10 tony2001 Exp $ */ #define yyleng SCNG(yy_leng) #define yytext SCNG(yy_text) @@ -59,6 +59,7 @@ #include "zend_operators.h" #include "zend_API.h" #include "zend_strtod.h" +#include "zend_exceptions.h" #ifdef HAVE_STDARG_H # include <stdarg.h> @@ -286,6 +287,11 @@ int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2) ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC) { zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles); + /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */ + file_handle->opened_path = NULL; + if (file_handle->free_filename) { + file_handle->filename = NULL; + } } @@ -540,7 +546,11 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC) efree(op_array); retval = NULL; } else { + zend_bool orig_interactive = CG(interactive); + + CG(interactive) = 0; init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE TSRMLS_CC); + CG(interactive) = orig_interactive; CG(active_op_array) = op_array; BEGIN(ST_IN_SCRIPTING); compiler_result = zendparse(TSRMLS_C); @@ -983,6 +993,10 @@ NEWLINE ("\r"|"\n"|"\r\n") return T_STRING_CAST; } +<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}"binary"{TABS_AND_SPACES}")" { + return T_STRING_CAST; +} + <ST_IN_SCRIPTING>"("{TABS_AND_SPACES}"array"{TABS_AND_SPACES}")" { return T_ARRAY_CAST; } @@ -1227,38 +1241,47 @@ NEWLINE ("\r"|"\n"|"\r\n") <ST_IN_SCRIPTING>{LNUM} { - errno = 0; - zendlval->value.lval = strtol(yytext, NULL, 0); - if (errno == ERANGE) { /* overflow */ - zendlval->value.dval = zend_strtod(yytext, NULL); - zendlval->type = IS_DOUBLE; - return T_DNUMBER; + if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */ + zendlval->value.lval = strtol(yytext, NULL, 0); } else { - zendlval->type = IS_LONG; - return T_LNUMBER; - } -} - -<ST_IN_SCRIPTING>{HNUM} { - errno = 0; - zendlval->value.lval = strtoul(yytext, NULL, 16); - if (errno == ERANGE) { /* overflow */ - /* not trying strtod - it returns trash on 0x-es */ - zendlval->value.lval = LONG_MAX; /* maximal long */ - zend_error(E_NOTICE,"Hex number is too big: %s", yytext); - } else { - if (zendlval->value.lval < 0) { - /* maintain consistency with the old way */ - zendlval->value.dval = (unsigned long) zendlval->value.lval; + errno = 0; + zendlval->value.lval = strtol(yytext, NULL, 0); + if (errno == ERANGE) { /* Overflow */ + if (yytext[0] == '0') { /* octal overflow */ + zendlval->value.dval = zend_oct_strtod(yytext, NULL); + } else { + zendlval->value.dval = zend_strtod(yytext, NULL); + } zendlval->type = IS_DOUBLE; return T_DNUMBER; } - zendlval->type = IS_LONG; } + zendlval->type = IS_LONG; return T_LNUMBER; } +<ST_IN_SCRIPTING>{HNUM} { + char *hex = yytext + 2; /* Skip "0x" */ + int len = yyleng - 2; + + /* Skip any leading 0s */ + while (*hex == '0') { + hex++; + len--; + } + + if (len < SIZEOF_LONG * 2 || (len == SIZEOF_LONG * 2 && *hex <= '7')) { + zendlval->value.lval = strtol(hex, NULL, 16); + zendlval->type = IS_LONG; + return T_LNUMBER; + } else { + zendlval->value.dval = zend_hex_strtod(hex, NULL); + zendlval->type = IS_DOUBLE; + return T_DNUMBER; + } +} + <ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>{LNUM}|{HNUM} { /* treat numbers (almost) as strings inside encapsulated strings */ zendlval->value.str.val = (char *)estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; @@ -1316,13 +1339,11 @@ NEWLINE ("\r"|"\n"|"\r\n") len += strlen(func_name); } - zendlval->value.str.val = emalloc(len+1); - zendlval->value.str.len = sprintf(zendlval->value.str.val, "%s%s%s", + zendlval->value.str.len = zend_spprintf(&zendlval->value.str.val, 0, "%s%s%s", class_name ? class_name : "", class_name && func_name ? "::" : "", func_name ? func_name : "" ); - zendlval->value.str.len = strlen(zendlval->value.str.val); zendlval->type = IS_STRING; return T_METHOD_C; } @@ -1560,12 +1581,13 @@ NEWLINE ("\r"|"\n"|"\r\n") } -<ST_IN_SCRIPTING>(["]([^$"\\]|("\\".))*["]) { +<ST_IN_SCRIPTING>("b"?["]([^$"\\]|("\\".))*["]) { register char *s, *t; char *end; + int bprefix = (*yytext == 'b') ? 1 : 0; - zendlval->value.str.val = estrndup(yytext+1, yyleng-2); - zendlval->value.str.len = yyleng-2; + zendlval->value.str.val = estrndup(yytext+bprefix+1, yyleng-bprefix-2); + zendlval->value.str.len = yyleng-bprefix-2; zendlval->type = IS_STRING; HANDLE_NEWLINES(yytext, yyleng); @@ -1650,12 +1672,13 @@ NEWLINE ("\r"|"\n"|"\r\n") } -<ST_IN_SCRIPTING>([']([^'\\]|("\\".))*[']) { +<ST_IN_SCRIPTING>("b"?[']([^'\\]|("\\".))*[']) { register char *s, *t; char *end; + int bprefix = (*yytext == 'b') ? 1 : 0; - zendlval->value.str.val = estrndup(yytext+1, yyleng-2); - zendlval->value.str.len = yyleng-2; + zendlval->value.str.val = estrndup(yytext+bprefix+1, yyleng-bprefix-2); + zendlval->value.str.len = yyleng-bprefix-2; zendlval->type = IS_STRING; HANDLE_NEWLINES(yytext, yyleng); @@ -1698,17 +1721,19 @@ NEWLINE ("\r"|"\n"|"\r\n") } -<ST_IN_SCRIPTING>["] { +<ST_IN_SCRIPTING>b?["] { BEGIN(ST_DOUBLE_QUOTES); return '\"'; } -<ST_IN_SCRIPTING>"<<<"{TABS_AND_SPACES}{LABEL}{NEWLINE} { +<ST_IN_SCRIPTING>"b"?"<<<"{TABS_AND_SPACES}{LABEL}{NEWLINE} { char *s; + int bprefix = (*yytext == 'b') ? 1 : 0; + CG(zend_lineno)++; - CG(heredoc_len) = yyleng-3-1-(yytext[yyleng-2]=='\r'?1:0); - s = yytext+3; + CG(heredoc_len) = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0); + s = yytext+bprefix+3; while ((*s == ' ') || (*s == '\t')) { s++; CG(heredoc_len)--; @@ -1725,7 +1750,7 @@ NEWLINE ("\r"|"\n"|"\r\n") } -<ST_IN_SCRIPTING>['] { +<ST_IN_SCRIPTING>b?['] { BEGIN(ST_SINGLE_QUOTE); return '\''; } diff --git a/Zend/zend_list.c b/Zend/zend_list.c index d247551c8..805b14ea3 100644 --- a/Zend/zend_list.c +++ b/Zend/zend_list.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_list.c,v 1.66.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_list.c,v 1.66.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ /* resource lists */ diff --git a/Zend/zend_list.h b/Zend/zend_list.h index b44c518dd..176c7dcdb 100644 --- a/Zend/zend_list.h +++ b/Zend/zend_list.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_list.h,v 1.48.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_list.h,v 1.48.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_LIST_H #define ZEND_LIST_H diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c index 6991c0eb0..8e4f5a8d0 100644 --- a/Zend/zend_llist.c +++ b/Zend/zend_llist.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_llist.c,v 1.35.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_llist.c,v 1.35.2.1.2.2 2007/02/16 08:33:28 dmitry Exp $ */ #include "zend.h" #include "zend_llist.h" @@ -134,13 +134,15 @@ ZEND_API void *zend_llist_remove_tail(zend_llist *l) void *data; if ((old_tail = l->tail)) { - if (l->tail->prev) { - l->tail->prev->next = NULL; + if (old_tail->prev) { + old_tail->prev->next = NULL; + } else { + l->head = NULL; } data = old_tail->data; - l->tail = l->tail->prev; + l->tail = old_tail->prev; if (l->dtor) { l->dtor(data); } diff --git a/Zend/zend_llist.h b/Zend/zend_llist.h index b6addc9e4..7854297e8 100644 --- a/Zend/zend_llist.h +++ b/Zend/zend_llist.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_llist.h,v 1.33.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_llist.h,v 1.33.2.1.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_LLIST_H #define ZEND_LLIST_H diff --git a/Zend/zend_mm.c b/Zend/zend_mm.c deleted file mode 100644 index 562e6c8d1..000000000 --- a/Zend/zend_mm.c +++ /dev/null @@ -1,475 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans <andi@zend.com> | - | Zeev Suraski <zeev@zend.com> | - +----------------------------------------------------------------------+ -*/ - -/* $Id: zend_mm.c,v 1.31.2.1.2.1 2006/07/18 09:06:33 dmitry Exp $ */ -#if 0 -#include "zend.h" -#include "zend_mm.h" - -#if WIN32|WINNT -# ifndef inline -# define inline __inline -# endif -#endif - -#define ZEND_MM_FREE_BLOCK 0 -#define ZEND_MM_USED_BLOCK 1 - -#ifndef MAX -#define MAX(a, b) (((a)>(b))?(a):(b)) -#endif - -#ifndef ZEND_MM_ALIGNMENT -#define ZEND_MM_ALIGNMENT 8 -#define ZEND_MM_ALIGNMENT_LOG2 3 -#endif - -#define ZEND_MM_ALIGNMENT_MASK ~(ZEND_MM_ALIGNMENT-1) - -#define ZEND_MM_BUCKET_INDEX(true_size) (true_size >> ZEND_MM_ALIGNMENT_LOG2) - -/* Aligned header size */ -#define ZEND_MM_ALIGNED_SIZE(size) ((size + ZEND_MM_ALIGNMENT - 1) & ZEND_MM_ALIGNMENT_MASK) -#define ZEND_MM_ALIGNED_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_block)) -#define ZEND_MM_ALIGNED_FREE_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_free_block)) -#define ZEND_MM_ALIGNED_SEGMENT_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_segment)) - -/* Memory calculations */ -#define ZEND_MM_BLOCK_AT(blk, offset) ((zend_mm_block *) (((char *) (blk))+(offset))) -#define ZEND_MM_DATA_OF(p) ((void *) (((char *) (p))+ZEND_MM_ALIGNED_HEADER_SIZE)) -#define ZEND_MM_HEADER_OF(blk) ZEND_MM_BLOCK_AT(blk, -(int)ZEND_MM_ALIGNED_HEADER_SIZE) - -/* Debug output */ -#define ZEND_MM_DEBUG(stmt) - - -/* Start Heap Code */ - -static int left_child[ZEND_HEAP_MAX_BUCKETS]; -static int left_child_of_right_brother[ZEND_HEAP_MAX_BUCKETS]; - -static inline void zend_heap_init(zend_heap heap) -{ - int i; - - for (i=0; i<ZEND_HEAP_MAX_BUCKETS; i++) { - left_child[i] = 2*i+1; - left_child_of_right_brother[i] = 2*i+3; - } - - memset(heap, 0, sizeof(zend_heap)); -} - -static inline void zend_heap_activate_leaf(zend_heap heap, int node) -{ - int i = node + ZEND_HEAP_MAX_BUCKETS-1; - - heap[i] = node; - - do { - i = (i-1)>>1; /* (i-1)/2 */ - if (heap[i] < node) { - heap[i] = node; - } else { - break; - } - } while (i > 0); -} - -static inline void zend_heap_deactivate_leaf(zend_heap heap, int node) -{ - int i = node + ZEND_HEAP_MAX_BUCKETS-1; - - heap[i] = 0; - - do { - i = (i-1)>>1; /* (i-1)/2 */ - if (heap[i] == node) { - heap[i] = MAX(heap[2*i+1], heap[2*i+2]); - } else { - break; - } - } while (i > 0); -} - -static inline int zend_heap_search_leaf(zend_heap heap, int value) -{ - int i = 1; - - if (heap[0] < value) { - return 0; - } - - - while (i < ZEND_HEAP_MAX_BUCKETS) { - if (heap[i] >= value) { - /* Go to left child */ - i = left_child[i]; - } else { - /* Go to left child of right brother */ - i = left_child_of_right_brother[i]; - } - } - if (heap[i] >= value) { - return heap[i]; - } else { - return heap[i+1]; - } -} - -/* End Heap Code */ - -static inline void zend_mm_add_to_free_list(zend_mm_heap *heap, zend_mm_free_block *mm_block) -{ - zend_mm_free_block **free_list_bucket; - size_t index = ZEND_MM_BUCKET_INDEX(mm_block->size); - - if (index < ZEND_MM_NUM_BUCKETS) { - free_list_bucket = &heap->free_buckets[index]; - if (*free_list_bucket == NULL) { - zend_heap_activate_leaf(heap->heap, index); - } - } else { - free_list_bucket = &heap->free_buckets[0]; - } - mm_block->next_free_block = *free_list_bucket; - if (*free_list_bucket != NULL) { - mm_block->next_free_block->prev_free_block = mm_block; - } - *free_list_bucket = mm_block; - mm_block->prev_free_block = NULL; -} - - -static inline void zend_mm_remove_from_free_list(zend_mm_heap *heap, zend_mm_free_block *mm_block) -{ - if (mm_block->prev_free_block) { - mm_block->prev_free_block->next_free_block = mm_block->next_free_block; - } else { - zend_mm_free_block **free_list_bucket; - size_t index = ZEND_MM_BUCKET_INDEX(mm_block->size); - - if (index < ZEND_MM_NUM_BUCKETS) { - free_list_bucket = &heap->free_buckets[index]; - *free_list_bucket = mm_block->next_free_block; - if (*free_list_bucket == NULL) { - zend_heap_deactivate_leaf(heap->heap, index); - } - } else { - free_list_bucket = &heap->free_buckets[0]; - *free_list_bucket = mm_block->next_free_block; - } - } - - if (mm_block->next_free_block) { - mm_block->next_free_block->prev_free_block = mm_block->prev_free_block; - } -} - -static inline void zend_mm_create_new_free_block(zend_mm_heap *heap, zend_mm_block *mm_block, size_t true_size) -{ - int remaining_size; - zend_mm_free_block *new_free_block; - - /* calculate sizes */ - remaining_size = mm_block->size - true_size; - - if (remaining_size < ZEND_MM_ALIGNED_FREE_HEADER_SIZE) { - /* keep best_fit->size as is, it'll include this extra space */ - return; - } - - /* prepare new free block */ - mm_block->size = true_size; - new_free_block = (zend_mm_free_block *) ZEND_MM_BLOCK_AT(mm_block, mm_block->size); - - new_free_block->type = ZEND_MM_FREE_BLOCK; - new_free_block->size = remaining_size; - new_free_block->prev_size = true_size; - - /* update the next block's prev_size */ - ZEND_MM_BLOCK_AT(new_free_block, new_free_block->size)->prev_size = new_free_block->size; - - /* add the new free block to the free list */ - zend_mm_add_to_free_list(heap, new_free_block); -} - -zend_bool zend_mm_add_memory_block(zend_mm_heap *heap, size_t block_size) -{ - /* We need to make sure that block_size is big enough for the minimum segment size */ - zend_mm_free_block *mm_block; - zend_mm_block *guard_block; - zend_mm_segment *segment; - - /* align block size downwards */ - block_size = block_size & ZEND_MM_ALIGNMENT_MASK; - - segment = (zend_mm_segment *) malloc(block_size); - if (!segment) { - return 1; - } -/* fprintf(stderr, "Allocating segment %X\n", segment); */ - segment->next_segment = heap->segments_list; - heap->segments_list = segment; - - block_size -= ZEND_MM_ALIGNED_SEGMENT_SIZE; - mm_block = (zend_mm_free_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE); - - mm_block->size = block_size - ZEND_MM_ALIGNED_HEADER_SIZE; /* keep one guard block in the end */ - mm_block->type = ZEND_MM_FREE_BLOCK; - mm_block->prev_size = 0; /* Size is always at least ZEND_MM_ALIGNED_HEADER_SIZE big (>0) so 0 is OK */ - - /* setup guard block */ - guard_block = ZEND_MM_BLOCK_AT(mm_block, mm_block->size); - guard_block->type = ZEND_MM_USED_BLOCK; - guard_block->size = ZEND_MM_ALIGNED_HEADER_SIZE; - guard_block->guard_block = 1; - guard_block->prev_size = mm_block->size; - ZEND_MM_DEBUG(("Setup guard block at 0x%0.8X\n", guard_block)); - - zend_mm_add_to_free_list(heap, mm_block); - - return 0; -} - -/* Notes: - * - This function may alter the block_sizes values to match platform alignment - * - This function does *not* perform sanity checks on the arguments - */ -zend_bool zend_mm_startup(zend_mm_heap *heap, size_t block_size) -{ - heap->block_size = block_size; - heap->segments_list = NULL; - memset(heap->free_buckets, 0, sizeof(heap->free_buckets)); - zend_heap_init(heap->heap); - return zend_mm_add_memory_block(heap, block_size); -} - - -void zend_mm_shutdown(zend_mm_heap *heap) -{ - zend_mm_segment *segment = heap->segments_list; - zend_mm_segment *prev; - - while (segment) { - prev = segment; - segment = segment->next_segment; -/* fprintf(stderr, "Freeing segment %X\n", prev);*/ - free(prev); - } - heap->segments_list = NULL; -} - -void *zend_mm_alloc(zend_mm_heap *heap, size_t size) -{ - size_t true_size; - zend_mm_free_block *p, *best_fit=NULL; - zend_mm_free_block **free_list_bucket; - size_t index; - - /* The max() can probably be optimized with an if () which checks more specific cases */ - true_size = MAX(ZEND_MM_ALIGNED_SIZE(size)+ZEND_MM_ALIGNED_HEADER_SIZE, ZEND_MM_ALIGNED_FREE_HEADER_SIZE); - - index = ZEND_MM_BUCKET_INDEX(true_size); - - if (index < ZEND_MM_NUM_BUCKETS) { - free_list_bucket = &heap->free_buckets[index]; - if (*free_list_bucket) { - best_fit = *free_list_bucket; - goto zend_mm_finished_searching_for_block; - } else { - int leaf; - - leaf = zend_heap_search_leaf(heap->heap, index); - if (leaf != 0) { - best_fit = heap->free_buckets[leaf]; - goto zend_mm_finished_searching_for_block; - } - } - } - - for (p = heap->free_buckets[0]; p; p = p->next_free_block) { - if (p->size == true_size) { - best_fit = p; - break; - } - if ((p->size > true_size) && (!best_fit || (best_fit->size > p->size))) { /* better fit */ - best_fit = p; - } - } - -zend_mm_finished_searching_for_block: - if (!best_fit) { - if (true_size > (heap->block_size - ZEND_MM_ALIGNED_SEGMENT_SIZE - ZEND_MM_ALIGNED_HEADER_SIZE)) { - /* Make sure we add a memory block which is big enough */ - if (zend_mm_add_memory_block(heap, true_size + ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE)) { - zend_error(E_ERROR, "Out of memory: cannot allocate %zd bytes!", true_size); - return NULL; - } - } else { - if (zend_mm_add_memory_block(heap, heap->block_size)) { - zend_error(E_ERROR, "Out of memory: cannot allocate %zd bytes!", heap->block_size); - return NULL; - } - } - return zend_mm_alloc(heap, size); - } - - /* mark as used */ - best_fit->type = ZEND_MM_USED_BLOCK; - ((zend_mm_block *) best_fit)->guard_block = 0; - - /* remove from free list */ - zend_mm_remove_from_free_list(heap, best_fit); - - zend_mm_create_new_free_block(heap, (zend_mm_block *) best_fit, true_size); - - return ZEND_MM_DATA_OF(best_fit); -} - - -void zend_mm_free(zend_mm_heap *heap, void *p) -{ - zend_mm_block *mm_block = ZEND_MM_HEADER_OF(p); - zend_mm_block *prev_block, *next_block; - - if (mm_block->type != ZEND_MM_USED_BLOCK) { - /* error */ - return; - } - - next_block = ZEND_MM_BLOCK_AT(mm_block, mm_block->size); - - /* merge with previous block if empty */ - if (mm_block->prev_size != 0 - && (prev_block=ZEND_MM_BLOCK_AT(mm_block, -(int)mm_block->prev_size))->type == ZEND_MM_FREE_BLOCK) { - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) prev_block); - prev_block->size += mm_block->size; - mm_block = prev_block; - next_block->prev_size = mm_block->size; - } - - /* merge with the next block if empty */ - if (next_block->type == ZEND_MM_FREE_BLOCK) { - mm_block->size += next_block->size; - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); - next_block = ZEND_MM_BLOCK_AT(mm_block, mm_block->size); /* recalculate */ - next_block->prev_size = mm_block->size; - } - - mm_block->type = ZEND_MM_FREE_BLOCK; - zend_mm_add_to_free_list(heap, (zend_mm_free_block *) mm_block); -} - -void *zend_mm_realloc(zend_mm_heap *heap, void *p, size_t size) -{ - zend_mm_block *mm_block = ZEND_MM_HEADER_OF(p); - zend_mm_block *next_block; - size_t true_size = MAX(ZEND_MM_ALIGNED_SIZE(size)+ZEND_MM_ALIGNED_HEADER_SIZE, ZEND_MM_ALIGNED_FREE_HEADER_SIZE); - - next_block = ZEND_MM_BLOCK_AT(mm_block, mm_block->size); - - if (true_size <= mm_block->size) { - zend_mm_create_new_free_block(heap, mm_block, true_size); - - if (next_block->type == ZEND_MM_FREE_BLOCK) { - zend_mm_block *new_next_block; - - new_next_block = ZEND_MM_BLOCK_AT(mm_block, mm_block->size); - if (new_next_block != next_block) { /* A new free block was created */ - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) new_next_block); - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); - new_next_block->size += next_block->size; - /* update the next block's prev_size */ - ZEND_MM_BLOCK_AT(new_next_block, new_next_block->size)->prev_size = new_next_block->size; - zend_mm_add_to_free_list(heap, (zend_mm_free_block *) new_next_block); - } - } - return p; - } - - if ((mm_block->prev_size == 0) && (next_block->type == ZEND_MM_USED_BLOCK) && - (next_block->guard_block)) { - zend_mm_segment *segment = (zend_mm_segment *) ((char *)mm_block - ZEND_MM_ALIGNED_SEGMENT_SIZE); - zend_mm_segment *segment_copy = segment; - zend_mm_block *guard_block; - size_t realloc_to_size; - - /* segment size, size of block and size of guard block */ - realloc_to_size = ZEND_MM_ALIGNED_SEGMENT_SIZE+true_size+ZEND_MM_ALIGNED_HEADER_SIZE; - segment = realloc(segment, realloc_to_size); - if (!segment) { - return NULL; - } - - if (segment != segment_copy) { - if (heap->segments_list == segment_copy) { - heap->segments_list = segment; - } else { - zend_mm_segment *seg = heap->segments_list; - - while (seg) { - if (seg->next_segment == segment_copy) { - seg->next_segment = segment; - break; - } - seg = seg->next_segment; - } - } - mm_block = (zend_mm_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE); - } - - mm_block->size = true_size; - - /* setup guard block */ - guard_block = ZEND_MM_BLOCK_AT(mm_block, mm_block->size); - guard_block->type = ZEND_MM_USED_BLOCK; - guard_block->size = ZEND_MM_ALIGNED_HEADER_SIZE; - guard_block->guard_block = 1; - guard_block->prev_size = mm_block->size; - - return ZEND_MM_DATA_OF(mm_block); - } - - if (next_block->type != ZEND_MM_FREE_BLOCK || (mm_block->size + next_block->size < true_size)) { - void *ptr; - - ptr = zend_mm_alloc(heap, size); - memcpy(ptr, p, mm_block->size - ZEND_MM_ALIGNED_HEADER_SIZE); - zend_mm_free(heap, p); - return ptr; - } - - zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); - mm_block->size += next_block->size; - /* update the next block's prev_size */ - ZEND_MM_BLOCK_AT(mm_block, mm_block->size)->prev_size = mm_block->size; - - zend_mm_create_new_free_block(heap, mm_block, true_size); - - return p; -} -#endif -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_mm.h b/Zend/zend_mm.h deleted file mode 100644 index 6403807df..000000000 --- a/Zend/zend_mm.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans <andi@zend.com> | - | Zeev Suraski <zeev@zend.com> | - +----------------------------------------------------------------------+ -*/ - -/* $Id: zend_mm.h,v 1.19.2.1.2.1 2006/07/18 09:06:33 dmitry Exp $ */ -#if 0 -#ifndef _ZEND_MM_H -#define _ZEND_MM_H - -#include <sys/types.h> - -#include "zend.h" -#include "zend_types.h" - - -#ifdef ZEND_WIN32 -#undef ZEND_MM -#else -/* #define ZEND_MM */ -#undef ZEND_MM -#endif - -/* mm block type */ -typedef struct _zend_mm_block { - unsigned int size : 31; - unsigned int type : 1; - size_t prev_size; - unsigned int guard_block : 1; -} zend_mm_block; - -typedef struct _zend_mm_free_block { - unsigned int size : 31; - unsigned int type : 1; - size_t prev_size; - struct _zend_mm_free_block *prev_free_block; - struct _zend_mm_free_block *next_free_block; -} zend_mm_free_block; - -typedef struct _zend_mm_segment { - struct _zend_mm_segment *next_segment; -} zend_mm_segment; - -#define ZEND_MM_NUM_BUCKETS 16 - -#define ZEND_HEAP_MAX_BUCKETS ZEND_MM_NUM_BUCKETS - -typedef int zend_heap[2*ZEND_HEAP_MAX_BUCKETS-1]; - -typedef struct _zend_mm_heap { - zend_mm_segment *segments_list; - size_t block_size; - zend_mm_free_block *free_buckets[ZEND_MM_NUM_BUCKETS]; - zend_heap heap; -} zend_mm_heap; - -zend_bool zend_mm_startup(zend_mm_heap *heap, size_t block_size); -void zend_mm_shutdown(zend_mm_heap *heap); -void *zend_mm_alloc(zend_mm_heap *heap, size_t size); -void zend_mm_free(zend_mm_heap *heap, void *p); -void *zend_mm_realloc(zend_mm_heap *heap, void *p, size_t size); - -#endif /* _ZEND_MM_H */ -#endif -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h index 3532fe2c3..8531c9676 100644 --- a/Zend/zend_modules.h +++ b/Zend/zend_modules.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_modules.h,v 1.67.2.3.2.3 2006/06/22 21:24:23 tony2001 Exp $ */ +/* $Id: zend_modules.h,v 1.67.2.3.2.4 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef MODULES_H #define MODULES_H diff --git a/Zend/zend_multibyte.c b/Zend/zend_multibyte.c index c3833322b..e5114797e 100644 --- a/Zend/zend_multibyte.c +++ b/Zend/zend_multibyte.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_multibyte.c,v 1.4.2.4 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_multibyte.c,v 1.4.2.4.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #include "zend.h" #include "zend_compile.h" diff --git a/Zend/zend_multibyte.h b/Zend/zend_multibyte.h index 319a6f088..57cbbe7cd 100644 --- a/Zend/zend_multibyte.h +++ b/Zend/zend_multibyte.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_multibyte.h,v 1.3.2.3 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_multibyte.h,v 1.3.2.3.2.1 2007/01/01 09:35:46 sebastian Exp $ */ #ifndef ZEND_MULTIBYTE_H #define ZEND_MULTIBYTE_H diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h index 6bae3c70a..1a4d1553b 100644 --- a/Zend/zend_multiply.h +++ b/Zend/zend_multiply.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_multiply.h,v 1.10.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_multiply.h,v 1.10.2.1.2.2 2007/04/10 10:57:35 sniper Exp $ */ #if defined(__i386__) && defined(__GNUC__) @@ -35,8 +35,8 @@ #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ long __lres = (a) * (b); \ - double __dres = (double)(a) * (double)(b); \ - double __delta = (double) __lres - __dres; \ + long double __dres = (long double)(a) * (long double)(b); \ + long double __delta = (long double) __lres - __dres; \ if ( ((usedval) = (( __dres + __delta ) != __dres))) { \ (dval) = __dres; \ } else { \ diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 765403381..68c7e122b 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.c,v 1.135.2.6.2.15 2006/09/12 11:01:16 dmitry Exp $ */ +/* $Id: zend_object_handlers.c,v 1.135.2.6.2.20 2007/03/23 17:16:55 stas Exp $ */ #include "zend.h" #include "zend_globals.h" @@ -42,8 +42,8 @@ set, we call __set handler. If it fails, we do not change the array. for both handlers above, when we are inside __get/__set, no further calls for - __get/__set for these objects will be made, to prevent endless recursion and - enable accessors to change properties array. + __get/__set for this property of this object will be made, to prevent endless + recursion and enable accessors to change properties array. if we have __call and method which is not part of the class function table is called, we cal __call handler. @@ -334,14 +334,17 @@ zval *zend_std_read_property(zval *object, zval *member, int type TSRMLS_DC) if (rv) { retval = &rv; - if ((type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET) && rv->refcount > 0) { - zval *tmp = rv; - - ALLOC_ZVAL(rv); - *rv = *tmp; - zval_copy_ctor(rv); - rv->is_ref = 0; - rv->refcount = 0; + if (!rv->is_ref && + (type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET)) { + if (rv->refcount > 0) { + zval *tmp = rv; + + ALLOC_ZVAL(rv); + *rv = *tmp; + zval_copy_ctor(rv); + rv->is_ref = 0; + rv->refcount = 0; + } if (Z_TYPE_P(rv) != IS_OBJECT) { zend_error(E_NOTICE, "Indirect modification of overloaded property %s::$%s has no effect", zobj->ce->name, Z_STRVAL_P(member)); } diff --git a/Zend/zend_object_handlers.h b/Zend/zend_object_handlers.h index f94ac6708..bb17045fd 100644 --- a/Zend/zend_object_handlers.h +++ b/Zend/zend_object_handlers.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.h,v 1.47.2.2.2.4 2006/07/24 17:58:32 helly Exp $ */ +/* $Id: zend_object_handlers.h,v 1.47.2.2.2.5 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_OBJECT_HANDLERS_H #define ZEND_OBJECT_HANDLERS_H diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c index 2ff7d5acb..fdccf4a7d 100644 --- a/Zend/zend_objects.c +++ b/Zend/zend_objects.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects.c,v 1.56.2.3.2.5 2006/07/26 15:29:27 dmitry Exp $ */ +/* $Id: zend_objects.c,v 1.56.2.3.2.6 2007/01/01 09:35:47 sebastian Exp $ */ #include "zend.h" #include "zend_globals.h" diff --git a/Zend/zend_objects.h b/Zend/zend_objects.h index 65af84286..91f646418 100644 --- a/Zend/zend_objects.h +++ b/Zend/zend_objects.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects.h,v 1.25.2.2 2006/03/29 14:28:40 tony2001 Exp $ */ +/* $Id: zend_objects.h,v 1.25.2.2.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_OBJECTS_H #define ZEND_OBJECTS_H diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c index 5a9a7a835..0cd1f6a47 100644 --- a/Zend/zend_objects_API.c +++ b/Zend/zend_objects_API.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects_API.c,v 1.47.2.6.2.3 2006/08/07 15:15:20 dmitry Exp $ */ +/* $Id: zend_objects_API.c,v 1.47.2.6.2.5 2007/01/01 09:35:47 sebastian Exp $ */ #include "zend.h" #include "zend_globals.h" @@ -64,8 +64,11 @@ ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TS ZEND_API void zend_objects_store_mark_destructed(zend_objects_store *objects TSRMLS_DC) { - zend_uint i = 1; + zend_uint i; + if (!objects->object_buckets) { + return; + } for (i = 1; i < objects->top ; i++) { if (objects->object_buckets[i].valid) { objects->object_buckets[i].destructor_called = 1; diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h index 7fc8d0d74..bd05bbde9 100644 --- a/Zend/zend_objects_API.h +++ b/Zend/zend_objects_API.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects_API.h,v 1.20.2.1.2.2 2006/08/07 15:15:20 dmitry Exp $ */ +/* $Id: zend_objects_API.h,v 1.20.2.1.2.3 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_OBJECTS_API_H #define ZEND_OBJECTS_API_H diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index 5f2a80391..ff9a3fb3d 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_opcode.c,v 1.110.2.6 2006/04/10 12:26:53 dmitry Exp $ */ +/* $Id: zend_opcode.c,v 1.110.2.6.2.3 2007/04/16 08:09:55 dmitry Exp $ */ #include <stdio.h> @@ -99,6 +99,8 @@ void init_op_array(zend_op_array *op_array, zend_uchar type, int initial_ops_siz op_array->start_op = NULL; + op_array->fn_flags = CG(interactive)?ZEND_ACC_INTERACTIVE:0; + zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_op_array_ctor_handler, op_array TSRMLS_CC); } @@ -158,7 +160,7 @@ ZEND_API int zend_cleanup_class_data(zend_class_entry **pce TSRMLS_DC) zend_hash_destroy(CE_STATIC_MEMBERS(*pce)); FREE_HASHTABLE(CE_STATIC_MEMBERS(*pce)); #ifdef ZTS - CG(static_members)[(long)((*pce)->static_members)] = NULL; + CG(static_members)[(zend_intptr_t)((*pce)->static_members)] = NULL; #else (*pce)->static_members = NULL; #endif @@ -294,7 +296,7 @@ zend_op *get_next_op(zend_op_array *op_array TSRMLS_DC) zend_op *next_op; if (next_op_num >= op_array->size) { - if (CG(interactive)) { + if (op_array->fn_flags & ZEND_ACC_INTERACTIVE) { /* we messed up */ zend_printf("Ran out of opcode space!\n" "You should probably consider writing this huge script into a file!\n"); @@ -367,7 +369,7 @@ int pass_two(zend_op_array *op_array TSRMLS_DC) zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_op_array_handler, op_array TSRMLS_CC); } - if (!CG(interactive) && op_array->size != op_array->last) { + if (!(op_array->fn_flags & ZEND_ACC_INTERACTIVE) && op_array->size != op_array->last) { op_array->opcodes = (zend_op *) erealloc(op_array->opcodes, sizeof(zend_op)*op_array->last); op_array->size = op_array->last; } diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 6f6b65fab..b90fe47b6 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_operators.c,v 1.208.2.4.2.10 2006/10/03 17:54:51 tony2001 Exp $ */ +/* $Id: zend_operators.c,v 1.208.2.4.2.21 2007/04/23 09:56:30 dmitry Exp $ */ #include <ctype.h> @@ -29,9 +29,19 @@ #include "zend_API.h" #include "zend_multiply.h" #include "zend_strtod.h" +#include "zend_exceptions.h" #define LONG_SIGN_MASK (1L << (8*sizeof(long)-1)) +#if ZEND_USE_TOLOWER_L +#include <locale.h> +static _locale_t current_locale = NULL; +/* this is true global! may lead to strange effects on ZTS, but so is setlocale() */ +#define zend_tolower(c) _tolower_l(c, current_locale) +#else +#define zend_tolower(c) tolower(c) +#endif + ZEND_API int zend_atoi(const char *str, int str_len) { int retval; @@ -114,14 +124,9 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC) char *strval; strval = op->value.str.val; - switch ((op->type=is_numeric_string(strval, op->value.str.len, &op->value.lval, &op->value.dval, 1))) { - case IS_DOUBLE: - case IS_LONG: - break; - default: - op->value.lval = strtol(op->value.str.val, NULL, 10); - op->type = IS_LONG; - break; + if ((op->type=is_numeric_string(strval, op->value.str.len, &op->value.lval, &op->value.dval, 1)) == 0) { + op->value.lval = 0; + op->type = IS_LONG; } STR_FREE(strval); break; @@ -152,14 +157,9 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC) switch ((op)->type) { \ case IS_STRING: \ { \ - switch (((holder).type=is_numeric_string((op)->value.str.val, (op)->value.str.len, &(holder).value.lval, &(holder).value.dval, 1))) { \ - case IS_DOUBLE: \ - case IS_LONG: \ - break; \ - default: \ - (holder).value.lval = strtol((op)->value.str.val, NULL, 10); \ - (holder).type = IS_LONG; \ - break; \ + if (((holder).type=is_numeric_string((op)->value.str.val, (op)->value.str.len, &(holder).value.lval, &(holder).value.dval, 1)) == 0) { \ + (holder).value.lval = 0; \ + (holder).type = IS_LONG; \ } \ (op) = &(holder); \ break; \ @@ -186,13 +186,21 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC) } \ } -#define DVAL_TO_LVAL(d, l) \ +#ifdef _WIN64 +# define DVAL_TO_LVAL(d, l) \ + if ((d) > LONG_MAX) { \ + (l) = (long)(unsigned long)(__int64) (d); \ + } else { \ + (l) = (long) (d); \ + } +#else +# define DVAL_TO_LVAL(d, l) \ if ((d) > LONG_MAX) { \ (l) = (unsigned long) (d); \ } else { \ (l) = (long) (d); \ } - +#endif #define zendi_convert_to_long(op, holder, result) \ if (op == result) { \ @@ -295,13 +303,13 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC) } \ } - ZEND_API void convert_to_long(zval *op) { - convert_to_long_base(op, 10); + if ((op)->type != IS_LONG) { + convert_to_long_base(op, 10); + } } - ZEND_API void convert_to_long_base(zval *op, int base) { char *strval; @@ -447,6 +455,7 @@ ZEND_API void convert_to_null(zval *op) return; } *op = *org; + FREE_ZVAL(org); } } @@ -550,21 +559,18 @@ ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC) TSRMLS_FETCH(); zend_list_delete(op->value.lval); - op->value.str.val = (char *) emalloc(sizeof("Resource id #")-1 + MAX_LENGTH_OF_LONG); - op->value.str.len = sprintf(op->value.str.val, "Resource id #%ld", tmp); + op->value.str.len = zend_spprintf(&op->value.str.val, 0, "Resource id #%ld", tmp); break; } case IS_LONG: lval = op->value.lval; - op->value.str.val = (char *) emalloc_rel(MAX_LENGTH_OF_LONG + 1); - op->value.str.len = zend_sprintf(op->value.str.val, "%ld", lval); /* SAFE */ + op->value.str.len = zend_spprintf(&op->value.str.val, 0, "%ld", lval); /* SAFE */ break; case IS_DOUBLE: { TSRMLS_FETCH(); dval = op->value.dval; - op->value.str.val = (char *) emalloc_rel(MAX_LENGTH_OF_DOUBLE + EG(precision) + 1); - op->value.str.len = zend_sprintf(op->value.str.val, "%.*G", (int) EG(precision), dval); /* SAFE */ + op->value.str.len = zend_spprintf(&op->value.str.val, 0, "%.*G", (int) EG(precision), dval); /* SAFE */ /* %G already handles removing trailing zeros from the fractional part, yay */ break; } @@ -651,6 +657,8 @@ ZEND_API void convert_to_array(zval *op) convert_object_to_type(op, IS_ARRAY, convert_to_array); if (op->type == IS_ARRAY) { + zend_hash_destroy(ht); + FREE_HASHTABLE(ht); return; } } @@ -1165,11 +1173,14 @@ ZEND_API int add_string_to_string(zval *result, zval *op1, zval *op2) ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) { zval op1_copy, op2_copy; - int use_copy1, use_copy2; - + int use_copy1 = 0, use_copy2 = 0; - zend_make_printable_zval(op1, &op1_copy, &use_copy1); - zend_make_printable_zval(op2, &op2_copy, &use_copy2); + if (op1->type != IS_STRING) { + zend_make_printable_zval(op1, &op1_copy, &use_copy1); + } + if (op2->type != IS_STRING) { + zend_make_printable_zval(op2, &op2_copy, &use_copy2); + } if (use_copy1) { /* We have created a converted copy of op1. Therefore, op1 won't become the result so @@ -1212,10 +1223,14 @@ ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) { zval op1_copy, op2_copy; - int use_copy1, use_copy2; + int use_copy1 = 0, use_copy2 = 0; - zend_make_printable_zval(op1, &op1_copy, &use_copy1); - zend_make_printable_zval(op2, &op2_copy, &use_copy2); + if (op1->type != IS_STRING) { + zend_make_printable_zval(op1, &op1_copy, &use_copy1); + } + if (op2->type != IS_STRING) { + zend_make_printable_zval(op2, &op2_copy, &use_copy2); + } if (use_copy1) { op1 = &op1_copy; @@ -1240,10 +1255,14 @@ ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_D ZEND_API int string_locale_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) { zval op1_copy, op2_copy; - int use_copy1, use_copy2; + int use_copy1 = 0, use_copy2 = 0; - zend_make_printable_zval(op1, &op1_copy, &use_copy1); - zend_make_printable_zval(op2, &op2_copy, &use_copy2); + if (op1->type != IS_STRING) { + zend_make_printable_zval(op1, &op1_copy, &use_copy1); + } + if (op2->type != IS_STRING) { + zend_make_printable_zval(op2, &op2_copy, &use_copy2); + } if (use_copy1) { op1 = &op1_copy; @@ -1817,6 +1836,13 @@ ZEND_API int zval_is_true(zval *op) return (op->value.lval ? 1 : 0); } +#ifdef ZEND_USE_TOLOWER_L +ZEND_API void zend_update_current_locale() +{ + current_locale = _get_current_locale(); +} +#endif + ZEND_API char *zend_str_tolower_copy(char *dest, const char *source, unsigned int length) { register unsigned char *str = (unsigned char*)source; @@ -1824,7 +1850,7 @@ ZEND_API char *zend_str_tolower_copy(char *dest, const char *source, unsigned in register unsigned char *end = str + length; while (str < end) { - *result++ = tolower((int)*str++); + *result++ = zend_tolower((int)*str++); } *result = '\0'; @@ -1837,7 +1863,7 @@ ZEND_API void zend_str_tolower(char *str, unsigned int length) register unsigned char *end = p + length; while (p < end) { - *p = tolower((int)*p); + *p = zend_tolower((int)*p); p++; } } @@ -1875,8 +1901,8 @@ ZEND_API int zend_binary_strcasecmp(char *s1, uint len1, char *s2, uint len2) len = MIN(len1, len2); while (len--) { - c1 = tolower((int)*(unsigned char *)s1++); - c2 = tolower((int)*(unsigned char *)s2++); + c1 = zend_tolower((int)*(unsigned char *)s1++); + c2 = zend_tolower((int)*(unsigned char *)s2++); if (c1 != c2) { return c1 - c2; } @@ -1894,8 +1920,8 @@ ZEND_API int zend_binary_strncasecmp(char *s1, uint len1, char *s2, uint len2, u len = MIN(length, MIN(len1, len2)); while (len--) { - c1 = tolower((int)*(unsigned char *)s1++); - c2 = tolower((int)*(unsigned char *)s2++); + c1 = zend_tolower((int)*(unsigned char *)s1++); + c2 = zend_tolower((int)*(unsigned char *)s2++); if (c1 != c2) { return c1 - c2; } @@ -1938,19 +1964,23 @@ ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2) (ret2=is_numeric_string(s2->value.str.val, s2->value.str.len, &lval2, &dval2, 0))) { if ((ret1==IS_DOUBLE) || (ret2==IS_DOUBLE)) { if (ret1!=IS_DOUBLE) { - dval1 = zend_strtod(s1->value.str.val, NULL); + dval1 = (double) lval1; } else if (ret2!=IS_DOUBLE) { - dval2 = zend_strtod(s2->value.str.val, NULL); + dval2 = (double) lval2; + } else if (dval1 == dval2 && !zend_finite(dval1)) { + /* Both values overflowed and have the same sign, + * so a numeric comparison would be inaccurate */ + goto string_cmp; } result->value.dval = dval1 - dval2; result->value.lval = ZEND_NORMALIZE_BOOL(result->value.dval); result->type = IS_LONG; } else { /* they both have to be long's */ - result->value.lval = lval1 - lval2; - result->value.lval = ZEND_NORMALIZE_BOOL(result->value.lval); + result->value.lval = lval1 > lval2 ? 1 : (lval1 < lval2 ? -1 : 0); result->type = IS_LONG; } } else { +string_cmp: result->value.lval = zend_binary_zval_strcmp(s1, s2); result->value.lval = ZEND_NORMALIZE_BOOL(result->value.lval); result->type = IS_LONG; @@ -2007,13 +2037,9 @@ ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC) ZEND_API void zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC) { - double dval = op->value.dval; - TSRMLS_FETCH(); - - op->value.str.val = (char *) emalloc_rel(MAX_LENGTH_OF_DOUBLE + EG(precision) + 1); - sprintf(op->value.str.val, "%.*G", (int) EG(precision), dval); - op->value.str.len = strlen(op->value.str.val); + + op->value.str.len = zend_spprintf(&op->value.str.val, 0, "%.*G", (int) EG(precision), (double)op->value.dval); } /* diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index ebdce7666..55710116d 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_operators.h,v 1.94.2.4.2.4 2006/08/08 10:54:24 tony2001 Exp $ */ +/* $Id: zend_operators.h,v 1.94.2.4.2.9 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_OPERATORS_H #define ZEND_OPERATORS_H @@ -36,7 +36,16 @@ #include "ext/bcmath/libbcmath/src/bcmath.h" #endif +#if SIZEOF_LONG == 4 +#define MAX_LENGTH_OF_LONG 11 +static const char long_min_digits[] = "2147483648"; +#elif SIZEOF_LONG == 8 #define MAX_LENGTH_OF_LONG 20 +static const char long_min_digits[] = "9223372036854775808"; +#else +#error "Unknown SIZEOF_LONG" +#endif + #define MAX_LENGTH_OF_DOUBLE 32 BEGIN_EXTERN_C() @@ -66,82 +75,143 @@ ZEND_API zend_bool instanceof_function_ex(zend_class_entry *instance_ce, zend_cl ZEND_API zend_bool instanceof_function(zend_class_entry *instance_ce, zend_class_entry *ce TSRMLS_DC); END_EXTERN_C() +#define ZEND_IS_DIGIT(c) ((c) >= '0' && (c) <= '9') +#define ZEND_IS_XDIGIT(c) (((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f')) + /** - * Checks whether the string "str" with the length "length" is a numeric string. + * Checks whether the string "str" with length "length" is numeric. The value + * of allow_errors determines whether it's required to be entirely numeric, or + * just its prefix. Leading whitespace is allowed. * - * The function returns 0 if the string did not contain a string; IS_LONG if - * the string contained a number that fits in the integer range and IS_DOUBLE - * in case it did not. The long value is returned into the pointer *lval if - * that pointer was not NULL or into the pointer *dval if that pointer was not - * NULL. + * The function returns 0 if the string did not contain a valid number; IS_LONG + * if it contained a number that fits within the range of a long; or IS_DOUBLE + * if the number was out of long range or contained a decimal point/exponent. + * The number's value is returned into the respective pointer, *lval or *dval, + * if that pointer is not NULL. */ -static inline zend_bool is_numeric_string(char *str, int length, long *lval, double *dval, int allow_errors) + +static inline zend_uchar is_numeric_string(const char *str, int length, long *lval, double *dval, int allow_errors) { - long local_lval; + const char *ptr; + int base = 10, digits = 0, dp_or_e = 0; double local_dval; - char *end_ptr_long, *end_ptr_double; - int conv_base=10; + zend_uchar type; if (!length) { return 0; } - /* handle hex numbers */ - if (length>=2 && str[0]=='0' && (str[1]=='x' || str[1]=='X')) { - conv_base=16; - } - errno=0; - local_lval = strtol(str, &end_ptr_long, conv_base); - if (errno!=ERANGE) { - if (end_ptr_long == str+length) { /* integer string */ - if (lval) { - *lval = local_lval; - } - return IS_LONG; - } else if (end_ptr_long == str && *end_ptr_long != '\0' && *str != '.' && *str != '-') { /* ignore partial string matches */ - return 0; - } - } else { - end_ptr_long=NULL; + /* Skip any whitespace + * This is much faster than the isspace() function */ + while (*str == ' ' || *str == '\t' || *str == '\n' || *str == '\r' || *str == '\v' || *str == '\f') { + str++; + length--; } + ptr = str; - if (conv_base==16) { /* hex string, under UNIX strtod() messes it up */ - return 0; + if (*ptr == '-' || *ptr == '+') { + ptr++; } - errno=0; - local_dval = zend_strtod(str, &end_ptr_double); - if (errno != ERANGE) { - if (end_ptr_double == str+length) { /* floating point string */ - if (!zend_finite(local_dval)) { - /* "inf","nan" and maybe other weird ones */ - return 0; + if (ZEND_IS_DIGIT(*ptr)) { + /* Handle hex numbers + * str is used instead of ptr to disallow signs and keep old behavior */ + if (length > 2 && *str == '0' && (str[1] == 'x' || str[1] == 'X')) { + base = 16; + ptr += 2; + } + + /* Skip any leading 0s */ + while (*ptr == '0') { + ptr++; + } + + /* Count the number of digits. If a decimal point/exponent is found, + * it's a double. Otherwise, if there's a dval or no need to check for + * a full match, stop when there are too many digits for a long */ + for (type = IS_LONG; !(digits >= MAX_LENGTH_OF_LONG && (dval || allow_errors == 1)); digits++, ptr++) { +check_digits: + if (ZEND_IS_DIGIT(*ptr) || (base == 16 && ZEND_IS_XDIGIT(*ptr))) { + continue; + } else if (base == 10) { + if (*ptr == '.' && dp_or_e < 1) { + goto process_double; + } else if ((*ptr == 'e' || *ptr == 'E') && dp_or_e < 2) { + const char *e = ptr + 1; + + if (*e == '-' || *e == '+') { + ptr = e++; + } + if (ZEND_IS_DIGIT(*e)) { + goto process_double; + } + } } + break; + } + + if (base == 10) { + if (digits >= MAX_LENGTH_OF_LONG) { + dp_or_e = -1; + goto process_double; + } + } else if (!(digits < SIZEOF_LONG * 2 || (digits == SIZEOF_LONG * 2 && ptr[-digits] <= '7'))) { if (dval) { - *dval = local_dval; + local_dval = zend_hex_strtod(str, (char **)&ptr); } - return IS_DOUBLE; + type = IS_DOUBLE; + } + } else if (*ptr == '.' && ZEND_IS_DIGIT(ptr[1])) { +process_double: + type = IS_DOUBLE; + + /* If there's a dval, do the conversion; else continue checking + * the digits if we need to check for a full match */ + if (dval) { + local_dval = zend_strtod(str, (char **)&ptr); + } else if (allow_errors != 1 && dp_or_e != -1) { + dp_or_e = (*ptr++ == '.') ? 1 : 2; + goto check_digits; } } else { - end_ptr_double=NULL; - } - - if (!allow_errors) { return 0; } - if (allow_errors == -1) { - zend_error(E_NOTICE, "A non well formed numeric value encountered"); + + if (ptr != str + length) { + if (!allow_errors) { + return 0; + } + if (allow_errors == -1) { + zend_error(E_NOTICE, "A non well formed numeric value encountered"); + } } - if (end_ptr_double>end_ptr_long && dval) { - *dval = local_dval; - return IS_DOUBLE; - } else if (end_ptr_long && lval) { - *lval = local_lval; + if (type == IS_LONG) { + if (digits == MAX_LENGTH_OF_LONG - 1) { + int cmp = strcmp(&ptr[-digits], long_min_digits); + + if (!(cmp < 0 || (cmp == 0 && *str == '-'))) { + if (dval) { + *dval = zend_strtod(str, NULL); + } + + return IS_DOUBLE; + } + } + + if (lval) { + *lval = strtol(str, NULL, base); + } + return IS_LONG; + } else { + if (dval) { + *dval = local_dval; + } + + return IS_DOUBLE; } - return 0; } static inline char * @@ -171,9 +241,13 @@ zend_memnstr(char *haystack, char *needle, int needle_len, char *end) static inline void *zend_memrchr(const void *s, int c, size_t n) { - register unsigned char *e = (unsigned char *)s + n; + register unsigned char *e; + + if (n <= 0) { + return NULL; + } - for (e--; e >= (unsigned char *)s; e--) { + for (e = (unsigned char *)s + n - 1; e >= (unsigned char *)s; e--) { if (*e == (unsigned char)c) { return (void *)e; } @@ -200,7 +274,7 @@ ZEND_API void multi_convert_to_double_ex(int argc, ...); ZEND_API void multi_convert_to_string_ex(int argc, ...); ZEND_API int add_char_to_string(zval *result, zval *op1, zval *op2); ZEND_API int add_string_to_string(zval *result, zval *op1, zval *op2); -#define convert_to_string(op) _convert_to_string((op) ZEND_FILE_LINE_CC) +#define convert_to_string(op) if ((op)->type != IS_STRING) { _convert_to_string((op) ZEND_FILE_LINE_CC); } ZEND_API double zend_string_to_double(const char *number, zend_uint length); @@ -346,6 +420,19 @@ END_EXTERN_C() #define Z_TYPE_P(zval_p) Z_TYPE(*zval_p) #define Z_TYPE_PP(zval_pp) Z_TYPE(**zval_pp) +#if HAVE_SETLOCALE && defined(ZEND_WIN32) && !defined(ZTS) && defined(_MSC_VER) && (_MSC_VER >= 1400) +/* This is performance improvement of tolower() on Windows and VC2005 + * GIves 10-18% on bench.php + */ +#define ZEND_USE_TOLOWER_L 1 +#endif + +#ifdef ZEND_USE_TOLOWER_L +ZEND_API void zend_update_current_locale(); +#else +#define zend_update_current_locale() +#endif + #endif /* diff --git a/Zend/zend_ptr_stack.c b/Zend/zend_ptr_stack.c index dc9d91a29..b0d2ed7f0 100644 --- a/Zend/zend_ptr_stack.c +++ b/Zend/zend_ptr_stack.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ptr_stack.c,v 1.23.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_ptr_stack.c,v 1.23.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #include "zend.h" #include "zend_ptr_stack.h" diff --git a/Zend/zend_ptr_stack.h b/Zend/zend_ptr_stack.h index 788089172..178278b14 100644 --- a/Zend/zend_ptr_stack.h +++ b/Zend/zend_ptr_stack.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ptr_stack.h,v 1.22.2.2 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_ptr_stack.h,v 1.22.2.2.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_PTR_STACK_H #define ZEND_PTR_STACK_H diff --git a/Zend/zend_qsort.c b/Zend/zend_qsort.c index 02ca5b6ee..e186837da 100644 --- a/Zend/zend_qsort.c +++ b/Zend/zend_qsort.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_qsort.c,v 1.8.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_qsort.c,v 1.8.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #include "zend.h" diff --git a/Zend/zend_qsort.h b/Zend/zend_qsort.h index 0965baba5..b0ae89791 100644 --- a/Zend/zend_qsort.h +++ b/Zend/zend_qsort.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_qsort.h,v 1.8.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_qsort.h,v 1.8.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_QSORT_H #define ZEND_QSORT_H diff --git a/Zend/zend_sprintf.c b/Zend/zend_sprintf.c index ec04f128c..e15ac02b2 100644 --- a/Zend/zend_sprintf.c +++ b/Zend/zend_sprintf.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_sprintf.c,v 1.16.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_sprintf.c,v 1.16.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #include <stdio.h> diff --git a/Zend/zend_stack.c b/Zend/zend_stack.c index 30345324b..f2892042a 100644 --- a/Zend/zend_stack.c +++ b/Zend/zend_stack.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_stack.c,v 1.16.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_stack.c,v 1.16.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #include "zend.h" #include "zend_stack.h" diff --git a/Zend/zend_stack.h b/Zend/zend_stack.h index b40d26746..61e4226aa 100644 --- a/Zend/zend_stack.h +++ b/Zend/zend_stack.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_stack.h,v 1.19.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_stack.h,v 1.19.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_STACK_H #define ZEND_STACK_H diff --git a/Zend/zend_static_allocator.c b/Zend/zend_static_allocator.c index 9e0f4e0f5..6eaec24f5 100644 --- a/Zend/zend_static_allocator.c +++ b/Zend/zend_static_allocator.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_static_allocator.c,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_static_allocator.c,v 1.13.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #include "zend_static_allocator.h" diff --git a/Zend/zend_static_allocator.h b/Zend/zend_static_allocator.h index 7b51dd953..a053ca887 100644 --- a/Zend/zend_static_allocator.h +++ b/Zend/zend_static_allocator.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_static_allocator.h,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_static_allocator.h,v 1.13.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_STATIC_ALLOCATOR_H #define ZEND_STATIC_ALLOCATOR_H diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c index b56c045fa..0fbb91554 100644 --- a/Zend/zend_stream.c +++ b/Zend/zend_stream.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_stream.c,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_stream.c,v 1.13.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #include "zend.h" diff --git a/Zend/zend_stream.h b/Zend/zend_stream.h index 90daf03b6..42367b2bd 100644 --- a/Zend/zend_stream.h +++ b/Zend/zend_stream.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_stream.h,v 1.8.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_stream.h,v 1.8.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_STREAM_H #define ZEND_STREAM_H diff --git a/Zend/zend_strtod.c b/Zend/zend_strtod.c index 3a469fd59..2c133bb0e 100644 --- a/Zend/zend_strtod.c +++ b/Zend/zend_strtod.c @@ -18,13 +18,13 @@ ***************************************************************/ /* Please send bug reports to - David M. Gay - AT&T Bell Laboratories, Room 2C-463 - 600 Mountain Avenue - Murray Hill, NJ 07974-2070 - U.S.A. - dmg@research.att.com or research!dmg - */ + David M. Gay + AT&T Bell Laboratories, Room 2C-463 + 600 Mountain Avenue + Murray Hill, NJ 07974-2070 + U.S.A. + dmg@research.att.com or research!dmg + */ /* strtod for IEEE-, VAX-, and IBM-arithmetic machines. * @@ -89,8 +89,26 @@ * directly -- and assumed always to succeed. */ +/* $Id: zend_strtod.c,v 1.17.2.2.2.10 2007/04/26 23:13:25 tony2001 Exp $ */ + #include <zend_strtod.h> +#ifdef ZTS +#include <TSRM.h> +#endif + +#include <stddef.h> +#include <stdio.h> +#include <ctype.h> +#include <stdarg.h> +#include <string.h> +#include <stdlib.h> +#include <math.h> + +#ifdef HAVE_LOCALE_H +#include <locale.h> +#endif + #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> #endif @@ -125,10 +143,10 @@ typedef unsigned long int uint32_t; #if defined(__arm__) && !defined(__VFP_FP__) /* - * Although the CPU is little endian the FP has different - * byte and word endianness. The byte order is still little endian - * but the word order is big endian. - */ + * * Although the CPU is little endian the FP has different + * * byte and word endianness. The byte order is still little endian + * * but the word order is big endian. + * */ #define IEEE_BIG_ENDIAN #undef IEEE_LITTLE_ENDIAN #endif @@ -143,8 +161,8 @@ typedef unsigned long int uint32_t; #define IEEE_LITTLE_ENDIAN #endif -#define Long int32_t -#define ULong uint32_t +#define Long int32_t +#define ULong uint32_t #ifdef __cplusplus #include "malloc.h" @@ -208,6 +226,7 @@ extern void *MALLOC(size_t); #define DBL_MAX 1.7014118346046923e+38 #endif + #ifndef LONG_MAX #define LONG_MAX 2147483647 #endif @@ -218,9 +237,7 @@ extern void *MALLOC(size_t); #include "math.h" #endif -#ifdef __cplusplus -extern "C" { -#endif +BEGIN_EXTERN_C() #ifndef CONST #ifdef KR_headers @@ -237,15 +254,15 @@ extern "C" { #endif #if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + \ - defined(IBM) != 1 -Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or -IBM should be defined. + defined(IBM) != 1 + Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or + IBM should be defined. #endif -typedef union { - double d; - ULong ul[2]; -} _double; + typedef union { + double d; + ULong ul[2]; + } _double; #define value(x) ((x).d) #ifdef IEEE_LITTLE_ENDIAN #define word0(x) ((x).ul[1]) @@ -256,15 +273,15 @@ typedef union { #endif /* The following definition of Storeinc is appropriate for MIPS processors. - * An alternative that might be better on some machines is - * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff) - */ + * * An alternative that might be better on some machines is + * * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff) + * */ #if defined(IEEE_LITTLE_ENDIAN) + defined(VAX) + defined(__arm__) #define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \ -((unsigned short *)a)[0] = (unsigned short)c, a++) + ((unsigned short *)a)[0] = (unsigned short)c, a++) #else #define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \ -((unsigned short *)a)[1] = (unsigned short)c, a++) + ((unsigned short *)a)[1] = (unsigned short)c, a++) #endif /* #define P DBL_MANT_DIG */ @@ -313,7 +330,7 @@ typedef union { #define Bias 65 #define Exp_1 0x41000000 #define Exp_11 0x41000000 -#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */ +#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */ #define Frac_mask 0xffffff #define Frac_mask1 0xffffff #define Bletch 4 @@ -376,10 +393,10 @@ extern double rnd_prod(double, double), rnd_quot(double, double); #ifndef Just_16 /* When Pack_32 is not defined, we store 16 bits per 32-bit Long. - * This makes some inner loops simpler and sometimes saves work - * during multiplications, but it often seems to make things slightly - * slower. Hence the default is now to store 32 bits per Long. - */ + * * This makes some inner loops simpler and sometimes saves work + * * during multiplications, but it often seems to make things slightly + * * slower. Hence the default is now to store 32 bits per Long. + * */ #ifndef Pack_32 #define Pack_32 #endif @@ -387,65 +404,131 @@ extern double rnd_prod(double, double), rnd_quot(double, double); #define Kmax 15 - struct -Bigint { +struct Bigint { struct Bigint *next; int k, maxwds, sign, wds; ULong x[1]; - }; +}; - typedef struct Bigint Bigint; +typedef struct Bigint Bigint; - static Bigint *freelist[Kmax+1]; +/* static variables, multithreading fun! */ +static Bigint *freelist[Kmax+1]; +static Bigint *p5s; - static Bigint * -Balloc -#ifdef KR_headers - (k) int k; -#else - (int k) +static void destroy_freelist(void); + +#ifdef ZTS + +static MUTEX_T dtoa_mutex; +static MUTEX_T pow5mult_mutex; + +#define _THREAD_PRIVATE_MUTEX_LOCK(x) tsrm_mutex_lock(x); +#define _THREAD_PRIVATE_MUTEX_UNLOCK(x) tsrm_mutex_unlock(x); + +#else + +#define _THREAD_PRIVATE_MUTEX_LOCK(x) +#define _THREAD_PRIVATE_MUTEX_UNLOCK(x) + +#endif /* ZTS */ + +ZEND_API int zend_startup_strtod(void) /* {{{ */ +{ +#ifdef ZTS + dtoa_mutex = tsrm_mutex_alloc(); + pow5mult_mutex = tsrm_mutex_alloc(); +#endif + return 1; +} +/* }}} */ +ZEND_API int zend_shutdown_strtod(void) /* {{{ */ +{ + destroy_freelist(); +#ifdef ZTS + tsrm_mutex_free(dtoa_mutex); + dtoa_mutex = NULL; + + tsrm_mutex_free(pow5mult_mutex); + pow5mult_mutex = NULL; #endif + return 1; +} +/* }}} */ + +static Bigint * Balloc(int k) { int x; Bigint *rv; + if (k > Kmax) { + zend_error(E_ERROR, "Balloc() allocation exceeds list boundary"); + } + + _THREAD_PRIVATE_MUTEX_LOCK(dtoa_mutex); if ((rv = freelist[k])) { freelist[k] = rv->next; - } - else { + } else { x = 1 << k; rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(Long)); + if (!rv) { + _THREAD_PRIVATE_MUTEX_UNLOCK(dtoa_mutex); + zend_error(E_ERROR, "Balloc() failed to allocate memory"); + } rv->k = k; rv->maxwds = x; - } + } + _THREAD_PRIVATE_MUTEX_UNLOCK(dtoa_mutex); rv->sign = rv->wds = 0; return rv; - } +} - static void -Bfree -#ifdef KR_headers - (v) Bigint *v; -#else - (Bigint *v) -#endif +static void Bfree(Bigint *v) { if (v) { + _THREAD_PRIVATE_MUTEX_LOCK(dtoa_mutex); v->next = freelist[v->k]; freelist[v->k] = v; - } + _THREAD_PRIVATE_MUTEX_UNLOCK(dtoa_mutex); } +} #define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \ -y->wds*sizeof(Long) + 2*sizeof(int)) + y->wds*sizeof(Long) + 2*sizeof(int)) - static Bigint * -multadd -#ifdef KR_headers - (b, m, a) Bigint *b; int m, a; -#else - (Bigint *b, int m, int a) /* multiply by m and add a */ -#endif +/* return value is only used as a simple string, so mis-aligned parts + * inside the Bigint are not at risk on strict align architectures + */ +static char * rv_alloc(int i) { + int j, k, *r; + + j = sizeof(ULong); + for(k = 0; + sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= i; + j <<= 1) { + k++; + } + r = (int*)Balloc(k); + *r = k; + return (char *)(r+1); +} + + +static char * nrv_alloc(char *s, char **rve, int n) +{ + char *rv, *t; + + t = rv = rv_alloc(n); + while((*t = *s++) !=0) { + t++; + } + if (rve) { + *rve = t; + } + return rv; +} + +static Bigint * multadd(Bigint *b, int m, int a) /* multiply by m and add a */ { int i, wds; ULong *x, y; @@ -469,148 +552,95 @@ multadd a = (int)(y >> 16); *x++ = y & 0xffff; #endif - } - while(++i < wds); + } + while(++i < wds); if (a) { if (wds >= b->maxwds) { b1 = Balloc(b->k+1); Bcopy(b1, b); Bfree(b); b = b1; - } + } b->x[wds++] = a; b->wds = wds; - } - return b; } - - static Bigint * -s2b -#ifdef KR_headers - (s, nd0, nd, y9) CONST char *s; int nd0, nd; ULong y9; -#else - (CONST char *s, int nd0, int nd, ULong y9) -#endif -{ - Bigint *b; - int i, k; - Long x, y; - - x = (nd + 8) / 9; - for(k = 0, y = 1; x > y; y <<= 1, k++) ; -#ifdef Pack_32 - b = Balloc(k); - b->x[0] = y9; - b->wds = 1; -#else - b = Balloc(k+1); - b->x[0] = y9 & 0xffff; - b->wds = (b->x[1] = y9 >> 16) ? 2 : 1; -#endif - - i = 9; - if (9 < nd0) { - s += 9; - do b = multadd(b, 10, *s++ - '0'); - while(++i < nd0); - s++; - } - else - s += 10; - for(; i < nd; i++) - b = multadd(b, 10, *s++ - '0'); return b; - } +} - static int -hi0bits -#ifdef KR_headers - (x) register ULong x; -#else - (register ULong x) -#endif +static int hi0bits(ULong x) { - register int k = 0; + int k = 0; if (!(x & 0xffff0000)) { k = 16; x <<= 16; - } + } if (!(x & 0xff000000)) { k += 8; x <<= 8; - } + } if (!(x & 0xf0000000)) { k += 4; x <<= 4; - } + } if (!(x & 0xc0000000)) { k += 2; x <<= 2; - } + } if (!(x & 0x80000000)) { k++; - if (!(x & 0x40000000)) + if (!(x & 0x40000000)) { return 32; } - return k; } + return k; +} - static int -lo0bits -#ifdef KR_headers - (y) ULong *y; -#else - (ULong *y) -#endif +static int lo0bits(ULong *y) { - register int k; - register ULong x = *y; + int k; + ULong x = *y; if (x & 7) { - if (x & 1) + if (x & 1) { return 0; + } if (x & 2) { *y = x >> 1; return 1; - } + } *y = x >> 2; return 2; - } + } k = 0; if (!(x & 0xffff)) { k = 16; x >>= 16; - } + } if (!(x & 0xff)) { k += 8; x >>= 8; - } + } if (!(x & 0xf)) { k += 4; x >>= 4; - } + } if (!(x & 0x3)) { k += 2; x >>= 2; - } + } if (!(x & 1)) { k++; x >>= 1; - if (!x & 1) + if (!(x & 1)) { return 32; } + } *y = x; return k; - } +} - static Bigint * -i2b -#ifdef KR_headers - (i) int i; -#else - (int i) -#endif +static Bigint * i2b(int i) { Bigint *b; @@ -618,15 +648,9 @@ i2b b->x[0] = i; b->wds = 1; return b; - } +} - static Bigint * -mult -#ifdef KR_headers - (a, b) Bigint *a, *b; -#else - (Bigint *a, Bigint *b) -#endif +static Bigint * mult(Bigint *a, Bigint *b) { Bigint *c; int k, wa, wb, wc; @@ -640,16 +664,18 @@ mult c = a; a = b; b = c; - } + } k = a->k; wa = a->wds; wb = b->wds; wc = wa + wb; - if (wc > a->maxwds) + if (wc > a->maxwds) { k++; + } c = Balloc(k); - for(x = c->x, xa = x + wc; x < xa; x++) + for(x = c->x, xa = x + wc; x < xa; x++) { *x = 0; + } xa = a->x; xae = xa + wa; xb = b->x; @@ -667,10 +693,10 @@ mult z2 = (*x++ >> 16) * y + (*xc >> 16) + carry; carry = z2 >> 16; Storeinc(xc, z2, z); - } - while(x < xae); - *xc = carry; } + while(x < xae); + *xc = carry; + } if ((y = *xb >> 16)) { x = xa; xc = xc0; @@ -682,11 +708,11 @@ mult Storeinc(xc, z, z2); z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry; carry = z2 >> 16; - } - while(x < xae); - *xc = z2; } + while(x < xae); + *xc = z2; } + } #else for(; xb < xbe; xc0++) { if (y = *xb++) { @@ -697,65 +723,93 @@ mult z = *x++ * y + *xc + carry; carry = z >> 16; *xc++ = z & 0xffff; - } - while(x < xae); - *xc = carry; } + while(x < xae); + *xc = carry; } + } #endif for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ; c->wds = wc; return c; - } +} - static Bigint *p5s; +static Bigint * s2b (CONST char *s, int nd0, int nd, ULong y9) +{ + Bigint *b; + int i, k; + Long x, y; - static Bigint * -pow5mult -#ifdef KR_headers - (b, k) Bigint *b; int k; + x = (nd + 8) / 9; + for(k = 0, y = 1; x > y; y <<= 1, k++) ; +#ifdef Pack_32 + b = Balloc(k); + b->x[0] = y9; + b->wds = 1; #else - (Bigint *b, int k) + b = Balloc(k+1); + b->x[0] = y9 & 0xffff; + b->wds = (b->x[1] = y9 >> 16) ? 2 : 1; #endif + + i = 9; + if (9 < nd0) { + s += 9; + do b = multadd(b, 10, *s++ - '0'); + while(++i < nd0); + s++; + } else { + s += 10; + } + for(; i < nd; i++) { + b = multadd(b, 10, *s++ - '0'); + } + return b; +} + +static Bigint * pow5mult(Bigint *b, int k) { Bigint *b1, *p5, *p51; int i; static int p05[3] = { 5, 25, 125 }; - if ((i = k & 3)) + _THREAD_PRIVATE_MUTEX_LOCK(pow5mult_mutex); + if ((i = k & 3)) { b = multadd(b, p05[i-1], 0); + } - if (!(k >>= 2)) + if (!(k >>= 2)) { + _THREAD_PRIVATE_MUTEX_UNLOCK(pow5mult_mutex); return b; + } if (!(p5 = p5s)) { /* first time */ p5 = p5s = i2b(625); p5->next = 0; - } + } for(;;) { if (k & 1) { b1 = mult(b, p5); Bfree(b); b = b1; - } - if (!(k >>= 1)) + } + if (!(k >>= 1)) { break; + } if (!(p51 = p5->next)) { - p51 = p5->next = mult(p5,p5); - p51->next = 0; + if (!(p51 = p5->next)) { + p51 = p5->next = mult(p5,p5); + p51->next = 0; } - p5 = p51; } - return b; + p5 = p51; } + _THREAD_PRIVATE_MUTEX_UNLOCK(pow5mult_mutex); + return b; +} - static Bigint * -lshift -#ifdef KR_headers - (b, k) Bigint *b; int k; -#else - (Bigint *b, int k) -#endif + +static Bigint *lshift(Bigint *b, int k) { int i, k1, n, n1; Bigint *b1; @@ -768,12 +822,14 @@ lshift #endif k1 = b->k; n1 = n + b->wds + 1; - for(i = b->maxwds; n1 > i; i <<= 1) + for(i = b->maxwds; n1 > i; i <<= 1) { k1++; + } b1 = Balloc(k1); x1 = b1->x; - for(i = 0; i < n; i++) + for(i = 0; i < n; i++) { *x1++ = 0; + } x = b->x; xe = x + b->wds; #ifdef Pack_32 @@ -783,11 +839,12 @@ lshift do { *x1++ = *x << k | z; z = *x++ >> k1; - } - while(x < xe); - if ((*x1 = z)) + } + while(x < xe); + if ((*x1 = z)) { ++n1; } + } #else if (k &= 0xf) { k1 = 16 - k; @@ -795,27 +852,22 @@ lshift do { *x1++ = *x << k & 0xffff | z; z = *x++ >> k1; - } - while(x < xe); - if (*x1 = z) + } + while(x < xe); + if (*x1 = z) { ++n1; } + } #endif else do *x1++ = *x++; - while(x < xe); + while(x < xe); b1->wds = n1 - 1; Bfree(b); return b1; - } +} - static int -cmp -#ifdef KR_headers - (a, b) Bigint *a, *b; -#else - (Bigint *a, Bigint *b) -#endif +static int cmp(Bigint *a, Bigint *b) { ULong *xa, *xa0, *xb, *xb0; int i, j; @@ -839,21 +891,16 @@ cmp return *xa < *xb ? -1 : 1; if (xa <= xa0) break; - } - return 0; } + return 0; +} - static Bigint * -diff -#ifdef KR_headers - (a, b) Bigint *a, *b; -#else - (Bigint *a, Bigint *b) -#endif + +static Bigint * diff(Bigint *a, Bigint *b) { Bigint *c; int i, wa, wb; - Long borrow, y; /* We need signed shifts here. */ + Long borrow, y; /* We need signed shifts here. */ ULong *xa, *xae, *xb, *xbe, *xc; #ifdef Pack_32 Long z; @@ -865,15 +912,15 @@ diff c->wds = 1; c->x[0] = 0; return c; - } + } if (i < 0) { c = a; a = b; b = c; i = 1; - } - else + } else { i = 0; + } c = Balloc(a->k); c->sign = i; wa = a->wds; @@ -893,8 +940,7 @@ diff borrow = z >> 16; Sign_Extend(borrow, z); Storeinc(xc, z, y); - } - while(xb < xbe); + } while(xb < xbe); while(xa < xae) { y = (*xa & 0xffff) + borrow; borrow = y >> 16; @@ -903,35 +949,29 @@ diff borrow = z >> 16; Sign_Extend(borrow, z); Storeinc(xc, z, y); - } + } #else do { y = *xa++ - *xb++ + borrow; borrow = y >> 16; Sign_Extend(borrow, y); *xc++ = y & 0xffff; - } - while(xb < xbe); + } while(xb < xbe); while(xa < xae) { y = *xa++ + borrow; borrow = y >> 16; Sign_Extend(borrow, y); *xc++ = y & 0xffff; - } + } #endif - while(!*--xc) + while(!*--xc) { wa--; + } c->wds = wa; return c; - } +} - static double -ulp -#ifdef KR_headers - (_x) double _x; -#else - (double _x) -#endif +static double ulp (double _x) { _double x; register Long L; @@ -948,29 +988,29 @@ ulp word0(a) = L; word1(a) = 0; #ifndef Sudden_Underflow - } + } else { L = -L >> Exp_shift; if (L < Exp_shift) { word0(a) = 0x80000 >> L; word1(a) = 0; - } + } else { word0(a) = 0; L -= Exp_shift; word1(a) = L >= 31 ? 1 : 1 << (31 - L); - } } + } #endif return value(a); - } +} - static double +static double b2d #ifdef KR_headers - (a, e) Bigint *a; int *e; +(a, e) Bigint *a; int *e; #else - (Bigint *a, int *e) +(Bigint *a, int *e) #endif { ULong *xa, *xa0, w, y, z; @@ -997,17 +1037,17 @@ b2d w = xa > xa0 ? *--xa : 0; d1 = y << ((32-Ebits) + k) | w >> (Ebits - k); goto ret_d; - } + } z = xa > xa0 ? *--xa : 0; if (k -= Ebits) { d0 = Exp_1 | y << k | z >> (32 - k); y = xa > xa0 ? *--xa : 0; d1 = z << k | y >> (32 - k); - } + } else { d0 = Exp_1 | y; d1 = z; - } + } #else if (k < Ebits + 16) { z = xa > xa0 ? *--xa : 0; @@ -1016,7 +1056,7 @@ b2d y = xa > xa0 ? *--xa : 0; d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k; goto ret_d; - } + } z = xa > xa0 ? *--xa : 0; w = xa > xa0 ? *--xa : 0; k -= Ebits + 16; @@ -1024,7 +1064,7 @@ b2d y = xa > xa0 ? *--xa : 0; d1 = w << k + 16 | y << k; #endif - ret_d: +ret_d: #ifdef VAX word0(d) = d0 >> 16 | d0 << 16; word1(d) = d1 >> 16 | d1 << 16; @@ -1033,15 +1073,10 @@ b2d #undef d1 #endif return value(d); - } +} - static Bigint * -d2b -#ifdef KR_headers - (_d, e, bits) double d; int *e, *bits; -#else - (double _d, int *e, int *bits) -#endif + +static Bigint * d2b(double _d, int *e, int *bits) { Bigint *b; int de, i, k; @@ -1068,7 +1103,7 @@ d2b x = b->x; z = d0 & Frac_mask; - d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ + d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ #ifdef Sudden_Underflow de = (int)(d0 >> Exp_shift); #ifndef IBM @@ -1081,14 +1116,13 @@ d2b #ifdef Pack_32 if ((y = d1)) { if ((k = lo0bits(&y))) { - x[0] = y | z << (32 - k); + x[0] = y | (z << (32 - k)); z >>= k; - } - else + } else { x[0] = y; - i = b->wds = (x[1] = z) ? 2 : 1; } - else { + i = b->wds = (x[1] = z) ? 2 : 1; + } else { #ifdef DEBUG if (!z) Bug("Zero passed to d2b"); @@ -1097,32 +1131,30 @@ d2b x[0] = z; i = b->wds = 1; k += 32; - } + } #else if (y = d1) { - if (k = lo0bits(&y)) + if (k = lo0bits(&y)) { if (k >= 16) { x[0] = y | z << 32 - k & 0xffff; x[1] = z >> k - 16 & 0xffff; x[2] = z >> k; i = 2; - } - else { + } else { x[0] = y & 0xffff; x[1] = y >> 16 | z << 16 - k & 0xffff; x[2] = z >> k & 0xffff; x[3] = z >> k+16; i = 3; - } - else { + } + } else { x[0] = y & 0xffff; x[1] = y >> 16; x[2] = z & 0xffff; x[3] = z >> 16; i = 3; - } } - else { + } else { #ifdef DEBUG if (!z) Bug("Zero passed to d2b"); @@ -1131,14 +1163,13 @@ d2b if (k >= 16) { x[0] = z; i = 0; - } - else { + } else { x[0] = z & 0xffff; x[1] = z >> 16; i = 1; - } - k += 32; } + k += 32; + } while(!x[i]) --i; b->wds = i + 1; @@ -1154,28 +1185,22 @@ d2b *bits = P - k; #endif #ifndef Sudden_Underflow - } - else { + } else { *e = de - Bias - (P-1) + 1 + k; #ifdef Pack_32 *bits = 32*i - hi0bits(x[i-1]); #else *bits = (i+2)*16 - hi0bits(x[i]); #endif - } + } #endif return b; - } +} #undef d0 #undef d1 - static double -ratio -#ifdef KR_headers - (a, b) Bigint *a, *b; -#else - (Bigint *a, Bigint *b) -#endif + +static double ratio (Bigint *a, Bigint *b) { _double da, db; int k, ka, kb; @@ -1190,35 +1215,35 @@ ratio #ifdef IBM if (k > 0) { word0(da) += (k >> 2)*Exp_msk1; - if (k &= 3) + if (k &= 3) { da *= 1 << k; } - else { + } else { k = -k; word0(db) += (k >> 2)*Exp_msk1; if (k &= 3) db *= 1 << k; - } + } #else - if (k > 0) + if (k > 0) { word0(da) += k*Exp_msk1; - else { + } else { k = -k; word0(db) += k*Exp_msk1; - } + } #endif return value(da) / value(db); - } +} static CONST double tens[] = { - 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, - 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, - 1e20, 1e21, 1e22 + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, + 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, + 1e20, 1e21, 1e22 #ifdef VAX , 1e23, 1e24 #endif - }; +}; #ifdef IEEE_Arith static CONST double bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 }; @@ -1236,16 +1261,775 @@ static CONST double tinytens[] = { 1e-16, 1e-32 }; #endif #endif -ZEND_API double -zend_strtod -#ifdef KR_headers - (s00, se) CONST char *s00; char **se; + +static int quorem(Bigint *b, Bigint *S) +{ + int n; + Long borrow, y; + ULong carry, q, ys; + ULong *bx, *bxe, *sx, *sxe; +#ifdef Pack_32 + Long z; + ULong si, zs; +#endif + + n = S->wds; +#ifdef DEBUG + /*debug*/ if (b->wds > n) + /*debug*/ Bug("oversize b in quorem"); +#endif + if (b->wds < n) + return 0; + sx = S->x; + sxe = sx + --n; + bx = b->x; + bxe = bx + n; + q = *bxe / (*sxe + 1); /* ensure q <= true quotient */ +#ifdef DEBUG + /*debug*/ if (q > 9) + /*debug*/ Bug("oversized quotient in quorem"); +#endif + if (q) { + borrow = 0; + carry = 0; + do { +#ifdef Pack_32 + si = *sx++; + ys = (si & 0xffff) * q + carry; + zs = (si >> 16) * q + (ys >> 16); + carry = zs >> 16; + y = (*bx & 0xffff) - (ys & 0xffff) + borrow; + borrow = y >> 16; + Sign_Extend(borrow, y); + z = (*bx >> 16) - (zs & 0xffff) + borrow; + borrow = z >> 16; + Sign_Extend(borrow, z); + Storeinc(bx, z, y); +#else + ys = *sx++ * q + carry; + carry = ys >> 16; + y = *bx - (ys & 0xffff) + borrow; + borrow = y >> 16; + Sign_Extend(borrow, y); + *bx++ = y & 0xffff; +#endif + } + while(sx <= sxe); + if (!*bxe) { + bx = b->x; + while(--bxe > bx && !*bxe) + --n; + b->wds = n; + } + } + if (cmp(b, S) >= 0) { + q++; + borrow = 0; + carry = 0; + bx = b->x; + sx = S->x; + do { +#ifdef Pack_32 + si = *sx++; + ys = (si & 0xffff) + carry; + zs = (si >> 16) + (ys >> 16); + carry = zs >> 16; + y = (*bx & 0xffff) - (ys & 0xffff) + borrow; + borrow = y >> 16; + Sign_Extend(borrow, y); + z = (*bx >> 16) - (zs & 0xffff) + borrow; + borrow = z >> 16; + Sign_Extend(borrow, z); + Storeinc(bx, z, y); +#else + ys = *sx++ + carry; + carry = ys >> 16; + y = *bx - (ys & 0xffff) + borrow; + borrow = y >> 16; + Sign_Extend(borrow, y); + *bx++ = y & 0xffff; +#endif + } + while(sx <= sxe); + bx = b->x; + bxe = bx + n; + if (!*bxe) { + while(--bxe > bx && !*bxe) + --n; + b->wds = n; + } + } + return q; +} + +static void destroy_freelist(void) +{ + int i; + Bigint *tmp; + + _THREAD_PRIVATE_MUTEX_LOCK(dtoa_mutex); + for (i = 0; i <= Kmax; i++) { + Bigint **listp = &freelist[i]; + while ((tmp = *listp) != NULL) { + *listp = tmp->next; + free(tmp); + } + freelist[i] = NULL; + } + _THREAD_PRIVATE_MUTEX_UNLOCK(dtoa_mutex); + +} + + +ZEND_API void zend_freedtoa(char *s) +{ + Bigint *b = (Bigint *)((int *)s - 1); + b->maxwds = 1 << (b->k = *(int*)b); + Bfree(b); +} + +/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string. + * + * Inspired by "How to Print Floating-Point Numbers Accurately" by + * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101]. + * + * Modifications: + * 1. Rather than iterating, we use a simple numeric overestimate + * to determine k = floor(log10(d)). We scale relevant + * quantities using O(log2(k)) rather than O(k) multiplications. + * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't + * try to generate digits strictly left to right. Instead, we + * compute with fewer bits and propagate the carry if necessary + * when rounding the final digit up. This is often faster. + * 3. Under the assumption that input will be rounded nearest, + * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. + * That is, we allow equality in stopping tests when the + * round-nearest rule will give the same floating-point value + * as would satisfaction of the stopping test with strict + * inequality. + * 4. We remove common factors of powers of 2 from relevant + * quantities. + * 5. When converting floating-point integers less than 1e16, + * we use floating-point arithmetic rather than resorting + * to multiple-precision integers. + * 6. When asked to produce fewer than 15 digits, we first try + * to get by with floating-point arithmetic; we resort to + * multiple-precision integer arithmetic only if we cannot + * guarantee that the floating-point calculation has given + * the correctly rounded result. For k requested digits and + * "uniformly" distributed input, the probability is + * something like 10^(k-15) that we must resort to the Long + * calculation. + */ + +ZEND_API char * zend_dtoa(double _d, int mode, int ndigits, int *decpt, int *sign, char **rve) +{ + /* Arguments ndigits, decpt, sign are similar to those + of ecvt and fcvt; trailing zeros are suppressed from + the returned string. If not null, *rve is set to point + to the end of the return value. If d is +-Infinity or NaN, + then *decpt is set to 9999. + + mode: + 0 ==> shortest string that yields d when read in + and rounded to nearest. + 1 ==> like 0, but with Steele & White stopping rule; + e.g. with IEEE P754 arithmetic , mode 0 gives + 1e23 whereas mode 1 gives 9.999999999999999e22. + 2 ==> max(1,ndigits) significant digits. This gives a + return value similar to that of ecvt, except + that trailing zeros are suppressed. + 3 ==> through ndigits past the decimal point. This + gives a return value similar to that from fcvt, + except that trailing zeros are suppressed, and + ndigits can be negative. + 4-9 should give the same return values as 2-3, i.e., + 4 <= mode <= 9 ==> same return as mode + 2 + (mode & 1). These modes are mainly for + debugging; often they run slower but sometimes + faster than modes 2-3. + 4,5,8,9 ==> left-to-right digit generation. + 6-9 ==> don't try fast floating-point estimate + (if applicable). + + Values of mode other than 0-9 are treated as mode 0. + + Sufficient space is allocated to the return value + to hold the suppressed trailing zeros. + */ + + int bbits, b2, b5, be, dig, i, ieps, ilim = 0, ilim0, ilim1, + j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, + spec_case = 0, try_quick; + Long L; +#ifndef Sudden_Underflow + int denorm; + ULong x; +#endif + Bigint *b, *b1, *delta, *mlo, *mhi, *S, *tmp; + double ds; + char *s, *s0; + _double d, d2, eps; + + value(d) = _d; + + if (word0(d) & Sign_bit) { + /* set sign for everything, including 0's and NaNs */ + *sign = 1; + word0(d) &= ~Sign_bit; /* clear sign bit */ + } + else + *sign = 0; + +#if defined(IEEE_Arith) + defined(VAX) +#ifdef IEEE_Arith + if ((word0(d) & Exp_mask) == Exp_mask) +#else + if (word0(d) == 0x8000) +#endif + { + /* Infinity or NaN */ + *decpt = 9999; +#ifdef IEEE_Arith + if (!word1(d) && !(word0(d) & 0xfffff)) + return nrv_alloc("Infinity", rve, 8); +#endif + return nrv_alloc("NaN", rve, 3); + } +#endif +#ifdef IBM + value(d) += 0; /* normalize */ +#endif + if (!value(d)) { + *decpt = 1; + return nrv_alloc("0", rve, 1); + } + + b = d2b(value(d), &be, &bbits); +#ifdef Sudden_Underflow + i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)); +#else + if ((i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) { +#endif + value(d2) = value(d); + word0(d2) &= Frac_mask1; + word0(d2) |= Exp_11; +#ifdef IBM + if (j = 11 - hi0bits(word0(d2) & Frac_mask)) + value(d2) /= 1 << j; +#endif + + /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 + * log10(x) = log(x) / log(10) + * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) + * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2) + * + * This suggests computing an approximation k to log10(d) by + * + * k = (i - Bias)*0.301029995663981 + * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); + * + * We want k to be too large rather than too small. + * The error in the first-order Taylor series approximation + * is in our favor, so we just round up the constant enough + * to compensate for any error in the multiplication of + * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, + * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, + * adding 1e-13 to the constant term more than suffices. + * Hence we adjust the constant term to 0.1760912590558. + * (We could get a more accurate k by invoking log10, + * but this is probably not worthwhile.) + */ + + i -= Bias; +#ifdef IBM + i <<= 2; + i += j; +#endif +#ifndef Sudden_Underflow + denorm = 0; + } + else { + /* d is denormalized */ + + i = bbits + be + (Bias + (P-1) - 1); + x = i > 32 ? (word0(d) << (64 - i)) | (word1(d) >> (i - 32)) + : (word1(d) << (32 - i)); + value(d2) = x; + word0(d2) -= 31*Exp_msk1; /* adjust exponent */ + i -= (Bias + (P-1) - 1) + 1; + denorm = 1; + } +#endif + ds = (value(d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; + k = (int)ds; + if (ds < 0. && ds != k) + k--; /* want k = floor(ds) */ + k_check = 1; + if (k >= 0 && k <= Ten_pmax) { + if (value(d) < tens[k]) + k--; + k_check = 0; + } + j = bbits - i - 1; + if (j >= 0) { + b2 = 0; + s2 = j; + } + else { + b2 = -j; + s2 = 0; + } + if (k >= 0) { + b5 = 0; + s5 = k; + s2 += k; + } + else { + b2 -= k; + b5 = -k; + s5 = 0; + } + if (mode < 0 || mode > 9) + mode = 0; + try_quick = 1; + if (mode > 5) { + mode -= 4; + try_quick = 0; + } + leftright = 1; + switch(mode) { + case 0: + case 1: + ilim = ilim1 = -1; + i = 18; + ndigits = 0; + break; + case 2: + leftright = 0; + /* no break */ + case 4: + if (ndigits <= 0) + ndigits = 1; + ilim = ilim1 = i = ndigits; + break; + case 3: + leftright = 0; + /* no break */ + case 5: + i = ndigits + k + 1; + ilim = i; + ilim1 = i - 1; + if (i <= 0) + i = 1; + } + s = s0 = rv_alloc(i); + + if (ilim >= 0 && ilim <= Quick_max && try_quick) { + + /* Try to get by with floating-point arithmetic. */ + + i = 0; + value(d2) = value(d); + k0 = k; + ilim0 = ilim; + ieps = 2; /* conservative */ + if (k > 0) { + ds = tens[k&0xf]; + j = k >> 4; + if (j & Bletch) { + /* prevent overflows */ + j &= Bletch - 1; + value(d) /= bigtens[n_bigtens-1]; + ieps++; + } + for(; j; j >>= 1, i++) + if (j & 1) { + ieps++; + ds *= bigtens[i]; + } + value(d) /= ds; + } + else if ((j1 = -k)) { + value(d) *= tens[j1 & 0xf]; + for(j = j1 >> 4; j; j >>= 1, i++) + if (j & 1) { + ieps++; + value(d) *= bigtens[i]; + } + } + if (k_check && value(d) < 1. && ilim > 0) { + if (ilim1 <= 0) + goto fast_failed; + ilim = ilim1; + k--; + value(d) *= 10.; + ieps++; + } + value(eps) = ieps*value(d) + 7.; + word0(eps) -= (P-1)*Exp_msk1; + if (ilim == 0) { + S = mhi = 0; + value(d) -= 5.; + if (value(d) > value(eps)) + goto one_digit; + if (value(d) < -value(eps)) + goto no_digits; + goto fast_failed; + } +#ifndef No_leftright + if (leftright) { + /* Use Steele & White method of only + * generating digits needed. + */ + value(eps) = 0.5/tens[ilim-1] - value(eps); + for(i = 0;;) { + L = value(d); + value(d) -= L; + *s++ = '0' + (int)L; + if (value(d) < value(eps)) + goto ret1; + if (1. - value(d) < value(eps)) + goto bump_up; + if (++i >= ilim) + break; + value(eps) *= 10.; + value(d) *= 10.; + } + } + else { +#endif + /* Generate ilim digits, then fix them up. */ + value(eps) *= tens[ilim-1]; + for(i = 1;; i++, value(d) *= 10.) { + L = value(d); + value(d) -= L; + *s++ = '0' + (int)L; + if (i == ilim) { + if (value(d) > 0.5 + value(eps)) + goto bump_up; + else if (value(d) < 0.5 - value(eps)) { + /* cut ALL traling zeros only if the number of chars is greater than precision + * otherwise cut only extra zeros + */ + if (k < ndigits) { + while(*--s == '0' && (s - s0) > k); + } else { + while(*--s == '0'); + } + s++; + goto ret1; + } + break; + } + } +#ifndef No_leftright + } +#endif +fast_failed: + s = s0; + value(d) = value(d2); + k = k0; + ilim = ilim0; + } + + /* Do we have a "small" integer? */ + + if (be >= 0 && k <= Int_max) { + /* Yes. */ + ds = tens[k]; + if (ndigits < 0 && ilim <= 0) { + S = mhi = 0; + if (ilim < 0 || value(d) <= 5*ds) + goto no_digits; + goto one_digit; + } + for(i = 1;; i++) { + L = value(d) / ds; + value(d) -= L*ds; +#ifdef Check_FLT_ROUNDS + /* If FLT_ROUNDS == 2, L will usually be high by 1 */ + if (value(d) < 0) { + L--; + value(d) += ds; + } +#endif + *s++ = '0' + (int)L; + if (i == ilim) { + value(d) += value(d); + if (value(d) > ds || (value(d) == ds && (L & 1))) { +bump_up: + while(*--s == '9') + if (s == s0) { + k++; + *s = '0'; + break; + } + ++*s++; + } + break; + } + if (!(value(d) *= 10.)) + break; + } + goto ret1; + } + + m2 = b2; + m5 = b5; + mhi = mlo = 0; + if (leftright) { + if (mode < 2) { + i = +#ifndef Sudden_Underflow + denorm ? be + (Bias + (P-1) - 1 + 1) : +#endif +#ifdef IBM + 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3); +#else + 1 + P - bbits; +#endif + } + else { + j = ilim - 1; + if (m5 >= j) + m5 -= j; + else { + s5 += j -= m5; + b5 += j; + m5 = 0; + } + if ((i = ilim) < 0) { + m2 -= i; + i = 0; + } + } + b2 += i; + s2 += i; + mhi = i2b(1); + } + if (m2 > 0 && s2 > 0) { + i = m2 < s2 ? m2 : s2; + b2 -= i; + m2 -= i; + s2 -= i; + } + if (b5 > 0) { + if (leftright) { + if (m5 > 0) { + mhi = pow5mult(mhi, m5); + b1 = mult(mhi, b); + Bfree(b); + b = b1; + } + if ((j = b5 - m5)) { + b = pow5mult(b, j); + } + } else { + b = pow5mult(b, b5); + } + } + S = i2b(1); + if (s5 > 0) + S = pow5mult(S, s5); + /* Check for special case that d is a normalized power of 2. */ + + if (mode < 2) { + if (!word1(d) && !(word0(d) & Bndry_mask) +#ifndef Sudden_Underflow + && word0(d) & Exp_mask +#endif + ) { + /* The special case */ + b2 += Log2P; + s2 += Log2P; + spec_case = 1; + } else { + spec_case = 0; + } + } + + /* Arrange for convenient computation of quotients: + * shift left if necessary so divisor has 4 leading 0 bits. + * + * Perhaps we should just compute leading 28 bits of S once + * and for all and pass them and a shift to quorem, so it + * can do shifts and ors to compute the numerator for q. + */ +#ifdef Pack_32 + if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f)) + i = 32 - i; #else - (CONST char *s00, char **se) + if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf)) + i = 16 - i; +#endif + if (i > 4) { + i -= 4; + b2 += i; + m2 += i; + s2 += i; + } + else if (i < 4) { + i += 28; + b2 += i; + m2 += i; + s2 += i; + } + if (b2 > 0) + b = lshift(b, b2); + if (s2 > 0) + S = lshift(S, s2); + if (k_check) { + if (cmp(b,S) < 0) { + k--; + b = multadd(b, 10, 0); /* we botched the k estimate */ + if (leftright) + mhi = multadd(mhi, 10, 0); + ilim = ilim1; + } + } + if (ilim <= 0 && mode > 2) { + if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) { + /* no digits, fcvt style */ +no_digits: + k = -1 - ndigits; + goto ret; + } +one_digit: + *s++ = '1'; + k++; + goto ret; + } + if (leftright) { + if (m2 > 0) + mhi = lshift(mhi, m2); + + /* Compute mlo -- check for special case + * that d is a normalized power of 2. + */ + + mlo = mhi; + if (spec_case) { + mhi = Balloc(mhi->k); + Bcopy(mhi, mlo); + mhi = lshift(mhi, Log2P); + } + + for(i = 1;;i++) { + dig = quorem(b,S) + '0'; + /* Do we yet have the shortest decimal string + * that will round to d? + */ + j = cmp(b, mlo); + delta = diff(S, mhi); + j1 = delta->sign ? 1 : cmp(b, delta); + Bfree(delta); +#ifndef ROUND_BIASED + if (j1 == 0 && !mode && !(word1(d) & 1)) { + if (dig == '9') + goto round_9_up; + if (j > 0) + dig++; + *s++ = dig; + goto ret; + } #endif + if (j < 0 || (j == 0 && !mode +#ifndef ROUND_BIASED + && !(word1(d) & 1) +#endif + )) { + if (j1 > 0) { + b = lshift(b, 1); + j1 = cmp(b, S); + if ((j1 > 0 || (j1 == 0 && (dig & 1))) + && dig++ == '9') + goto round_9_up; + } + *s++ = dig; + goto ret; + } + if (j1 > 0) { + if (dig == '9') { /* possible if i == 1 */ +round_9_up: + *s++ = '9'; + goto roundoff; + } + *s++ = dig + 1; + goto ret; + } + *s++ = dig; + if (i == ilim) + break; + b = multadd(b, 10, 0); + if (mlo == mhi) + mlo = mhi = multadd(mhi, 10, 0); + else { + mlo = multadd(mlo, 10, 0); + mhi = multadd(mhi, 10, 0); + } + } + } + else + for(i = 1;; i++) { + *s++ = dig = quorem(b,S) + '0'; + if (i >= ilim) + break; + b = multadd(b, 10, 0); + } + + /* Round off last digit */ + + b = lshift(b, 1); + j = cmp(b, S); + if (j > 0 || (j == 0 && (dig & 1))) { +roundoff: + while(*--s == '9') + if (s == s0) { + k++; + *s++ = '1'; + goto ret; + } + ++*s++; + } + else { + while(*--s == '0'); + s++; + } +ret: + Bfree(S); + if (mhi) { + if (mlo && mlo != mhi) + Bfree(mlo); + Bfree(mhi); + } +ret1: + + _THREAD_PRIVATE_MUTEX_LOCK(pow5mult_mutex); + while (p5s) { + tmp = p5s; + p5s = p5s->next; + free(tmp); + } + _THREAD_PRIVATE_MUTEX_UNLOCK(pow5mult_mutex); + + Bfree(b); + + if (s == s0) { /* don't return empty string */ + *s++ = '0'; + k = 0; + } + *s = 0; + *decpt = k + 1; + if (rve) + *rve = s; + return s0; +} + +ZEND_API double zend_strtod (CONST char *s00, char **se) { int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign, - e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; + e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; CONST char *s, *s0, *s1; double aadj, aadj1, adj; _double rv, rv0; @@ -1280,7 +2064,7 @@ zend_strtod while(*++s == '0') ; if (!*s) goto ret; - } + } s0 = s; y = z = 0; for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) @@ -1299,11 +2083,11 @@ zend_strtod nf += nz; nz = 0; goto have_dig; - } - goto dig_done; } + goto dig_done; + } for(; c >= '0' && c <= '9'; c = *++s) { - have_dig: +have_dig: nz++; if (c -= '0') { nf += nz; @@ -1317,16 +2101,16 @@ zend_strtod else if (nd <= DBL_DIG + 1) z = 10*z + c; nz = 0; - } } } - dig_done: + } +dig_done: e = 0; if (c == 'e' || c == 'E') { if (!nd && !nz && !nz0) { s = s00; goto ret; - } + } s00 = s; esign = 0; switch(c = *++s) { @@ -1334,7 +2118,7 @@ zend_strtod esign = 1; case '+': c = *++s; - } + } if (c >= '0' && c <= '9') { while(c == '0') c = *++s; @@ -1352,18 +2136,18 @@ zend_strtod e = (int)L; if (esign) e = -e; - } + } else e = 0; - } + } else s = s00; - } + } if (!nd) { if (!nz && !nz0) s = s00; goto ret; - } + } e1 = e -= nf; /* Now we have nd0 digits, starting at s0, followed by a @@ -1380,9 +2164,9 @@ zend_strtod bd0 = 0; if (nd <= DBL_DIG #ifndef RND_PRODQUOT - && FLT_ROUNDS == 1 + && FLT_ROUNDS == 1 #endif - ) { + ) { if (!e) goto ret; if (e > 0) { @@ -1391,10 +2175,10 @@ zend_strtod goto vax_ovfl_check; #else /* value(rv) = */ rounded_product(value(rv), - tens[e]); + tens[e]); goto ret; #endif - } + } i = DBL_DIG - nd; if (e <= Ten_pmax + i) { /* A fancier test would sometimes let us do @@ -1406,29 +2190,29 @@ zend_strtod /* VAX exponent range is so narrow we must * worry about overflow here... */ - vax_ovfl_check: +vax_ovfl_check: word0(rv) -= P*Exp_msk1; /* value(rv) = */ rounded_product(value(rv), - tens[e]); + tens[e]); if ((word0(rv) & Exp_mask) - > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) + > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) goto ovfl; word0(rv) += P*Exp_msk1; #else /* value(rv) = */ rounded_product(value(rv), - tens[e]); + tens[e]); #endif goto ret; - } } + } #ifndef Inaccurate_Divide else if (e >= -Ten_pmax) { /* value(rv) = */ rounded_quotient(value(rv), - tens[-e]); + tens[-e]); goto ret; - } -#endif } +#endif + } e1 += nd - k; /* Get starting approximation = rv * 10**e1 */ @@ -1438,7 +2222,7 @@ zend_strtod value(rv) *= tens[i]; if (e1 &= ~15) { if (e1 > DBL_MAX_10_EXP) { - ovfl: +ovfl: errno = ERANGE; #ifndef Bad_float_h value(rv) = HUGE_VAL; @@ -1455,29 +2239,29 @@ zend_strtod if (bd0) goto retfree; goto ret; - } + } if (e1 >>= 4) { for(j = 0; e1 > 1; j++, e1 >>= 1) if (e1 & 1) value(rv) *= bigtens[j]; - /* The last multiplication could overflow. */ + /* The last multiplication could overflow. */ word0(rv) -= P*Exp_msk1; value(rv) *= bigtens[j]; if ((z = word0(rv) & Exp_mask) - > Exp_msk1*(DBL_MAX_EXP+Bias-P)) + > Exp_msk1*(DBL_MAX_EXP+Bias-P)) goto ovfl; if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) { /* set to largest number */ /* (Can't trust DBL_MAX) */ word0(rv) = Big0; word1(rv) = Big1; - } + } else word0(rv) += P*Exp_msk1; - } - } + } + } else if (e1 < 0) { e1 = -e1; if ((i = e1 & 15)) @@ -1496,21 +2280,21 @@ zend_strtod value(rv) = 2.*value(rv0); value(rv) *= tinytens[j]; if (!value(rv)) { - undfl: +undfl: value(rv) = 0.; errno = ERANGE; if (bd0) goto retfree; goto ret; - } + } word0(rv) = Tiny0; word1(rv) = Tiny1; /* The refinement below will clean * this approximation up. */ - } } } + } /* Now the hard part -- adjusting rv to the correct value.*/ @@ -1527,11 +2311,11 @@ zend_strtod if (e >= 0) { bb2 = bb5 = 0; bd2 = bd5 = e; - } + } else { bb2 = bb5 = -e; bd2 = bd5 = 0; - } + } if (bbe >= 0) bb2 += bbe; else @@ -1559,13 +2343,13 @@ zend_strtod bb2 -= i; bd2 -= i; bs2 -= i; - } + } if (bb5 > 0) { bs = pow5mult(bs, bb5); bb1 = mult(bs, bb); Bfree(bb); bb = bb1; - } + } if (bb2 > 0) bb = lshift(bb, bb2); if (bd5 > 0) @@ -1588,12 +2372,12 @@ zend_strtod if (cmp(delta, bs) > 0) goto drop_down; break; - } + } if (i == 0) { /* exactly half-way between */ if (dsign) { if ((word0(rv) & Bndry_mask1) == Bndry_mask1 - && word1(rv) == 0xffffffff) { + && word1(rv) == 0xffffffff) { /*boundary case -- increment exponent*/ word0(rv) = (word0(rv) & Exp_mask) + Exp_msk1 @@ -1603,19 +2387,19 @@ zend_strtod ; word1(rv) = 0; break; - } } + } else if (!(word0(rv) & Bndry_mask) && !word1(rv)) { - drop_down: +drop_down: /* boundary case -- decrement exponent */ #ifdef Sudden_Underflow L = word0(rv) & Exp_mask; #ifdef IBM if (L < Exp_msk1) #else - if (L <= Exp_msk1) + if (L <= Exp_msk1) #endif - goto undfl; + goto undfl; L -= Exp_msk1; #else L = (word0(rv) & Exp_mask) - Exp_msk1; @@ -1627,7 +2411,7 @@ zend_strtod #else break; #endif - } + } #ifndef ROUND_BIASED if (!(word1(rv) & LSB)) break; @@ -1641,10 +2425,10 @@ zend_strtod if (!value(rv)) goto undfl; #endif - } + } #endif break; - } + } if ((aadj = ratio(delta, bs)) <= 2.) { if (dsign) aadj = aadj1 = 1.; @@ -1655,7 +2439,7 @@ zend_strtod #endif aadj = 1.; aadj1 = -1.; - } + } else { /* special case -- power of FLT_RADIX to be */ /* rounded down... */ @@ -1665,8 +2449,8 @@ zend_strtod else aadj *= 0.5; aadj1 = -aadj; - } } + } else { aadj *= 0.5; aadj1 = dsign ? aadj : -aadj; @@ -1678,12 +2462,12 @@ zend_strtod case 0: /* towards 0 */ case 3: /* towards -infinity */ aadj1 += 0.5; - } + } #else if (FLT_ROUNDS == 0) aadj1 += 0.5; #endif - } + } y = word0(rv) & Exp_mask; /* Check for overflow */ @@ -1700,10 +2484,10 @@ zend_strtod word0(rv) = Big0; word1(rv) = Big1; goto cont; - } + } else word0(rv) += P*Exp_msk1; - } + } else { #ifdef Sudden_Underflow if ((word0(rv) & Exp_mask) <= P*Exp_msk1) { @@ -1714,23 +2498,23 @@ zend_strtod #ifdef IBM if ((word0(rv) & Exp_mask) < P*Exp_msk1) #else - if ((word0(rv) & Exp_mask) <= P*Exp_msk1) + if ((word0(rv) & Exp_mask) <= P*Exp_msk1) #endif { - if (word0(rv0) == Tiny0 - && word1(rv0) == Tiny1) - goto undfl; - word0(rv) = Tiny0; - word1(rv) = Tiny1; - goto cont; + if (word0(rv0) == Tiny0 + && word1(rv0) == Tiny1) + goto undfl; + word0(rv) = Tiny0; + word1(rv) = Tiny1; + goto cont; } - else - word0(rv) -= P*Exp_msk1; - } + else + word0(rv) -= P*Exp_msk1; + } else { adj = aadj1 * ulp(value(rv)); value(rv) += adj; - } + } #else /* Compute adj so that the IEEE rounding rules will * correctly round rv + adj in some half-way cases. @@ -1743,11 +2527,11 @@ zend_strtod aadj1 = (double)(int)(aadj + 0.5); if (!dsign) aadj1 = -aadj1; - } + } adj = aadj1 * ulp(value(rv)); value(rv) += adj; #endif - } + } z = word0(rv) & Exp_mask; if (y == z) { /* Can we stop now? */ @@ -1757,41 +2541,104 @@ zend_strtod if (dsign || word1(rv) || word0(rv) & Bndry_mask) { if (aadj < .4999999 || aadj > .5000001) break; - } + } else if (aadj < .4999999/FLT_RADIX) break; - } - cont: + } +cont: Bfree(bb); Bfree(bd); Bfree(bs); Bfree(delta); - } - retfree: + } +retfree: Bfree(bb); Bfree(bd); Bfree(bs); Bfree(bd0); Bfree(delta); - ret: +ret: if (se) *se = (char *)s; result = sign ? -value(rv) : value(rv); - - for (i = 0; i <= Kmax; i++) { - Bigint **listp = &freelist[i]; - while ((tmp = *listp) != NULL) { - *listp = tmp->next; - free(tmp); - } - freelist[i] = NULL; - } - + + _THREAD_PRIVATE_MUTEX_LOCK(pow5mult_mutex); while (p5s) { tmp = p5s; p5s = p5s->next; free(tmp); } - + _THREAD_PRIVATE_MUTEX_UNLOCK(pow5mult_mutex); + return result; +} + +ZEND_API double zend_hex_strtod(const char *str, char **endptr) +{ + const char *s = str; + char c; + int any = 0; + double value = 0; + + if (*s == '0' && (s[1] == 'x' || s[1] == 'X')) { + s += 2; } + + while ((c = *s++)) { + if (c >= '0' && c <= '9') { + c -= '0'; + } else if (c >= 'A' && c <= 'F') { + c -= 'A' - 10; + } else if (c >= 'a' && c <= 'f') { + c -= 'a' - 10; + } else { + break; + } + + any = 1; + value = value * 16 + c; + } + + if (endptr != NULL) { + *endptr = (char *)(any ? s - 1 : str); + } + + return value; +} + +ZEND_API double zend_oct_strtod(const char *str, char **endptr) +{ + const char *s = str; + char c; + double value = 0; + int any = 0; + + /* skip leading zero */ + s++; + + while ((c = *s++)) { + if (c > '7') { + /* break and return the current value if the number is not well-formed + * that's what Linux strtol() does + */ + break; + } + value = value * 8 + c - '0'; + any = 1; + } + + if (endptr != NULL) { + *endptr = (char *)(any ? s - 1 : str); + } + + return value; +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: sw=4 ts=4 fdm=marker + * vim<600: sw=4 ts=4 + */ diff --git a/Zend/zend_strtod.h b/Zend/zend_strtod.h index 093417298..249b63a39 100644 --- a/Zend/zend_strtod.h +++ b/Zend/zend_strtod.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_strtod.h,v 1.3.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_strtod.h,v 1.3.2.1.2.4 2007/04/22 21:33:10 tony2001 Exp $ */ /* This is a header file for the strtod implementation by David M. Gay which * can be found in zend_strtod.c */ @@ -25,7 +25,13 @@ #include <zend.h> BEGIN_EXTERN_C() +ZEND_API void zend_freedtoa(char *s); +ZEND_API char * zend_dtoa(double _d, int mode, int ndigits, int *decpt, int *sign, char **rve); ZEND_API double zend_strtod(const char *s00, char **se); +ZEND_API double zend_hex_strtod(const char *str, char **endptr); +ZEND_API double zend_oct_strtod(const char *str, char **endptr); +ZEND_API int zend_startup_strtod(void); +ZEND_API int zend_shutdown_strtod(void); END_EXTERN_C() #endif diff --git a/Zend/zend_ts_hash.c b/Zend/zend_ts_hash.c index 5017f9cee..f1680adf7 100644 --- a/Zend/zend_ts_hash.c +++ b/Zend/zend_ts_hash.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ts_hash.c,v 1.14.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_ts_hash.c,v 1.14.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #include "zend.h" #include "zend_ts_hash.h" diff --git a/Zend/zend_ts_hash.h b/Zend/zend_ts_hash.h index 5dfce0e48..d63400796 100644 --- a/Zend/zend_ts_hash.h +++ b/Zend/zend_ts_hash.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ts_hash.h,v 1.13.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_ts_hash.h,v 1.13.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_TS_HASH_H #define ZEND_TS_HASH_H diff --git a/Zend/zend_types.h b/Zend/zend_types.h index 52f113306..c7c0b9717 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_types.h,v 1.6.2.2 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_types.h,v 1.6.2.2.2.3 2007/04/17 06:26:31 dmitry Exp $ */ #ifndef ZEND_TYPES_H #define ZEND_TYPES_H @@ -28,6 +28,14 @@ typedef unsigned int zend_uint; typedef unsigned long zend_ulong; typedef unsigned short zend_ushort; +#ifdef _WIN64 +typedef __int64 zend_intptr_t; +typedef unsigned __int64 zend_uintptr_t; +#else +typedef long zend_intptr_t; +typedef unsigned long zend_uintptr_t; +#endif + typedef unsigned int zend_object_handle; typedef struct _zend_object_handlers zend_object_handlers; diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index 4faecc22e..9a2c374ec 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_variables.c,v 1.62.2.1.2.1 2006/10/03 11:10:33 dmitry Exp $ */ +/* $Id: zend_variables.c,v 1.62.2.1.2.2 2007/01/01 09:35:47 sebastian Exp $ */ #include <stdio.h> #include "zend.h" diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h index f682949b7..ccebc3b96 100644 --- a/Zend/zend_variables.h +++ b/Zend/zend_variables.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_variables.h,v 1.34.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_variables.h,v 1.34.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_VARIABLES_H #define ZEND_VARIABLES_H diff --git a/Zend/zend_vm.h b/Zend/zend_vm.h index 6a2de7aa2..158d8afb2 100644 --- a/Zend/zend_vm.h +++ b/Zend/zend_vm.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm.h,v 1.7.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_vm.h,v 1.7.2.1.2.1 2007/01/01 09:35:47 sebastian Exp $ */ #ifndef ZEND_VM_H #define ZEND_VM_H diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 340579cd3..72967a230 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm_def.h,v 1.59.2.29.2.32 2006/10/30 11:04:31 dmitry Exp $ */ +/* $Id: zend_vm_def.h,v 1.59.2.29.2.43 2007/04/16 08:09:55 dmitry Exp $ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: @@ -408,11 +408,11 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_helper, VAR|UNUSED|CV, CONST|TMP|VAR|UNU case ZEND_ASSIGN_DIM: { zval **object_ptr = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_W); - if (OP1_TYPE != IS_CV && !OP1_FREE) { + if (object_ptr && OP1_TYPE != IS_CV && !OP1_FREE) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_obj_helper, binary_op, binary_op); } else { zend_op *op_data = opline+1; @@ -1328,7 +1328,7 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|CV, CONST|TMP|VAR|CV) if (IS_OP2_TMP_FREE()) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (IS_OP2_TMP_FREE()) { zval_ptr_dtor(&property); } else { @@ -1350,7 +1350,7 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|CV, CONST|TMP|VAR|CV) ZEND_VM_NEXT_OPCODE(); } -ZEND_VM_HANDLER(98, ZEND_FETCH_DIM_TMP_VAR, TMP, CONST) +ZEND_VM_HANDLER(98, ZEND_FETCH_DIM_TMP_VAR, CONST|TMP, CONST) { zend_op *opline = EX(opline); zend_free_op free_op1; @@ -1765,7 +1765,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, ANY, CONST|TMP|VAR|UNUSED|CV) if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } - if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name); } EX(fbc) = ce->constructor; @@ -1857,7 +1857,7 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY) } } - zend_ptr_stack_2_push(&EG(argument_stack), (void *) opline->extended_value, NULL); + zend_ptr_stack_2_push(&EG(argument_stack), (void *)(zend_uintptr_t)opline->extended_value, NULL); EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; @@ -1900,7 +1900,7 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY) ulong arg_count; p = (zval **) EG(argument_stack).top_element-2; - arg_count = (ulong) *p; + arg_count = (ulong)(zend_uintptr_t) *p; while (arg_count>0) { zend_verify_arg_type(EX(function_state).function, ++i, *(p-arg_count) TSRMLS_CC); @@ -2255,7 +2255,15 @@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR|CV, ANY) ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper); } - varptr = GET_OP1_ZVAL_PTR(BP_VAR_R); + if (OP1_TYPE == IS_VAR && + (opline->extended_value & ZEND_ARG_SEND_FUNCTION) && + EX_T(opline->op1.u.var).var.fcall_returned_reference && + EX_T(opline->op1.u.var).var.ptr) { + varptr = EX_T(opline->op1.u.var).var.ptr; + PZVAL_UNLOCK_EX(varptr, &free_op1, 0); + } else { + varptr = GET_OP1_ZVAL_PTR(BP_VAR_R); + } if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) || EX_T(opline->op1.u.var).var.fcall_returned_reference) && varptr != &EG(uninitialized_zval) && @@ -3094,6 +3102,9 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET, CONST|TMP|VAR|CV, ANY) } else { if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); + if (opline->extended_value & ZEND_FE_FETCH_BYREF) { + (*array_ptr_ptr)->is_ref = 1; + } } array_ptr = *array_ptr_ptr; array_ptr->refcount++; @@ -3129,7 +3140,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET, CONST|TMP|VAR|CV, ANY) } } - if (ce && ce->get_iterator) { + if (OP1_TYPE != IS_TMP_VAR && ce && ce->get_iterator) { iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); if (iter && !EG(exception)) { @@ -3191,13 +3202,15 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET, CONST|TMP|VAR|CV, ANY) key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); if (key_type != HASH_KEY_NON_EXISTANT && - zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS) { + (key_type == HASH_KEY_IS_LONG || + zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { break; } zend_hash_move_forward(fe_ht); } } is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; + zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); is_empty = 1; @@ -3242,6 +3255,7 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH, VAR, ANY) zend_object *zobj = zend_objects_get_address(array TSRMLS_CC); fe_ht = HASH_OF(array); + zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); do { if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) { /* reached end of iteration */ @@ -3250,8 +3264,11 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH, VAR, ANY) key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); zend_hash_move_forward(fe_ht); - } while (key_type == HASH_KEY_NON_EXISTANT || zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) != SUCCESS); - if (use_key) { + } while (key_type == HASH_KEY_NON_EXISTANT || + (key_type != HASH_KEY_IS_LONG && + zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) != SUCCESS)); + zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); + if (use_key && key_type != HASH_KEY_IS_LONG) { zend_unmangle_property_name(str_key, str_key_len-1, &class_name, &prop_name); str_key_len = strlen(prop_name); str_key = estrndup(prop_name, str_key_len); @@ -3262,6 +3279,7 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH, VAR, ANY) case ZEND_ITER_PLAIN_ARRAY: fe_ht = HASH_OF(array); + zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) { /* reached end of iteration */ ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); @@ -3270,6 +3288,7 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH, VAR, ANY) key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 1, NULL); } zend_hash_move_forward(fe_ht); + zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); break; case ZEND_ITER_OBJECT: diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 19ecb8830..dc1758b17 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -145,7 +145,7 @@ static int zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) } } - zend_ptr_stack_2_push(&EG(argument_stack), (void *) opline->extended_value, NULL); + zend_ptr_stack_2_push(&EG(argument_stack), (void *)(zend_uintptr_t)opline->extended_value, NULL); EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; @@ -188,7 +188,7 @@ static int zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) ulong arg_count; p = (zval **) EG(argument_stack).top_element-2; - arg_count = (ulong) *p; + arg_count = (ulong)(zend_uintptr_t) *p; while (arg_count>0) { zend_verify_arg_type(EX(function_state).function, ++i, *(p-arg_count) TSRMLS_CC); @@ -694,7 +694,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } - if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name); } EX(fbc) = ce->constructor; @@ -898,7 +898,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } - if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name); } EX(fbc) = ce->constructor; @@ -1059,7 +1059,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } - if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name); } EX(fbc) = ce->constructor; @@ -1219,7 +1219,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } - if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name); } EX(fbc) = ce->constructor; @@ -1312,7 +1312,7 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS if(!ce->constructor) { zend_error_noreturn(E_ERROR, "Can not call constructor"); } - if (Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { + if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name); } EX(fbc) = ce->constructor; @@ -2151,6 +2151,9 @@ static int ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } else { if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); + if (opline->extended_value & ZEND_FE_FETCH_BYREF) { + (*array_ptr_ptr)->is_ref = 1; + } } array_ptr = *array_ptr_ptr; array_ptr->refcount++; @@ -2186,7 +2189,7 @@ static int ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } - if (ce && ce->get_iterator) { + if (IS_CONST != IS_TMP_VAR && ce && ce->get_iterator) { iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); if (iter && !EG(exception)) { @@ -2248,13 +2251,15 @@ static int ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); if (key_type != HASH_KEY_NON_EXISTANT && - zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS) { + (key_type == HASH_KEY_IS_LONG || + zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { break; } zend_hash_move_forward(fe_ht); } } is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; + zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); is_empty = 1; @@ -2607,6 +2612,29 @@ static int ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) ZEND_VM_NEXT_OPCODE(); } +static int ZEND_FETCH_DIM_TMP_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + zend_op *opline = EX(opline); + + zval *container = &opline->op1.u.constant; + + if (Z_TYPE_P(container) != IS_ARRAY) { + if (!RETURN_VALUE_UNUSED(&opline->result)) { + EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); + PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); + } + } else { + + zval *dim = &opline->op2.u.constant; + + EX_T(opline->result.u.var).var.ptr_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, BP_VAR_R TSRMLS_CC); + SELECTIVE_PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &opline->result); + + } + AI_USE_PTR(EX_T(opline->result.u.var).var); + ZEND_VM_NEXT_OPCODE(); +} + static int ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); @@ -4690,6 +4718,9 @@ static int ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } else { if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); + if (opline->extended_value & ZEND_FE_FETCH_BYREF) { + (*array_ptr_ptr)->is_ref = 1; + } } array_ptr = *array_ptr_ptr; array_ptr->refcount++; @@ -4725,7 +4756,7 @@ static int ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } - if (ce && ce->get_iterator) { + if (IS_TMP_VAR != IS_TMP_VAR && ce && ce->get_iterator) { iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); if (iter && !EG(exception)) { @@ -4787,13 +4818,15 @@ static int ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); if (key_type != HASH_KEY_NON_EXISTANT && - zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS) { + (key_type == HASH_KEY_IS_LONG || + zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { break; } zend_hash_move_forward(fe_ht); } } is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; + zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); is_empty = 1; @@ -7412,7 +7445,15 @@ static int ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } - varptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); + if (IS_VAR == IS_VAR && + (opline->extended_value & ZEND_ARG_SEND_FUNCTION) && + EX_T(opline->op1.u.var).var.fcall_returned_reference && + EX_T(opline->op1.u.var).var.ptr) { + varptr = EX_T(opline->op1.u.var).var.ptr; + PZVAL_UNLOCK_EX(varptr, &free_op1, 0); + } else { + varptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); + } if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) || EX_T(opline->op1.u.var).var.fcall_returned_reference) && varptr != &EG(uninitialized_zval) && @@ -7811,6 +7852,9 @@ static int ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } else { if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); + if (opline->extended_value & ZEND_FE_FETCH_BYREF) { + (*array_ptr_ptr)->is_ref = 1; + } } array_ptr = *array_ptr_ptr; array_ptr->refcount++; @@ -7846,7 +7890,7 @@ static int ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } - if (ce && ce->get_iterator) { + if (IS_VAR != IS_TMP_VAR && ce && ce->get_iterator) { iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); if (iter && !EG(exception)) { @@ -7908,13 +7952,15 @@ static int ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); if (key_type != HASH_KEY_NON_EXISTANT && - zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS) { + (key_type == HASH_KEY_IS_LONG || + zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { break; } zend_hash_move_forward(fe_ht); } } is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; + zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); is_empty = 1; @@ -7959,6 +8005,7 @@ static int ZEND_FE_FETCH_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_object *zobj = zend_objects_get_address(array TSRMLS_CC); fe_ht = HASH_OF(array); + zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); do { if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) { /* reached end of iteration */ @@ -7967,8 +8014,11 @@ static int ZEND_FE_FETCH_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); zend_hash_move_forward(fe_ht); - } while (key_type == HASH_KEY_NON_EXISTANT || zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) != SUCCESS); - if (use_key) { + } while (key_type == HASH_KEY_NON_EXISTANT || + (key_type != HASH_KEY_IS_LONG && + zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) != SUCCESS)); + zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); + if (use_key && key_type != HASH_KEY_IS_LONG) { zend_unmangle_property_name(str_key, str_key_len-1, &class_name, &prop_name); str_key_len = strlen(prop_name); str_key = estrndup(prop_name, str_key_len); @@ -7979,6 +8029,7 @@ static int ZEND_FE_FETCH_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) case ZEND_ITER_PLAIN_ARRAY: fe_ht = HASH_OF(array); + zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) { /* reached end of iteration */ ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); @@ -7987,6 +8038,7 @@ static int ZEND_FE_FETCH_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 1, NULL); } zend_hash_move_forward(fe_ht); + zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); break; case ZEND_ITER_OBJECT: @@ -8540,11 +8592,11 @@ static int zend_binary_assign_op_helper_SPEC_VAR_CONST(int (*binary_op)(zval *re case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - if (IS_VAR != IS_CV && !(free_op1.var != NULL)) { + if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -9142,7 +9194,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (0) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (0) { zval_ptr_dtor(&property); } else { @@ -10024,11 +10076,11 @@ static int zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_op)(zval *resu case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - if (IS_VAR != IS_CV && !(free_op1.var != NULL)) { + if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -10627,7 +10679,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (1) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (1) { zval_ptr_dtor(&property); } else { @@ -11512,11 +11564,11 @@ static int zend_binary_assign_op_helper_SPEC_VAR_VAR(int (*binary_op)(zval *resu case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - if (IS_VAR != IS_CV && !(free_op1.var != NULL)) { + if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -12115,7 +12167,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (0) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (0) { zval_ptr_dtor(&property); } else { @@ -12804,11 +12856,11 @@ static int zend_binary_assign_op_helper_SPEC_VAR_UNUSED(int (*binary_op)(zval *r case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - if (IS_VAR != IS_CV && !(free_op1.var != NULL)) { + if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -13473,11 +13525,11 @@ static int zend_binary_assign_op_helper_SPEC_VAR_CV(int (*binary_op)(zval *resul case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - if (IS_VAR != IS_CV && !(free_op1.var != NULL)) { + if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -14075,7 +14127,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (0) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (0) { zval_ptr_dtor(&property); } else { @@ -14839,11 +14891,11 @@ static int zend_binary_assign_op_helper_SPEC_UNUSED_CONST(int (*binary_op)(zval case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - if (IS_UNUSED != IS_CV && !0) { + if (object_ptr && IS_UNUSED != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -15315,7 +15367,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR if (0) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (0) { zval_ptr_dtor(&property); } else { @@ -15842,11 +15894,11 @@ static int zend_binary_assign_op_helper_SPEC_UNUSED_TMP(int (*binary_op)(zval *r case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - if (IS_UNUSED != IS_CV && !0) { + if (object_ptr && IS_UNUSED != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -16319,7 +16371,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS if (1) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (1) { zval_ptr_dtor(&property); } else { @@ -16806,11 +16858,11 @@ static int zend_binary_assign_op_helper_SPEC_UNUSED_VAR(int (*binary_op)(zval *r case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - if (IS_UNUSED != IS_CV && !0) { + if (object_ptr && IS_UNUSED != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -17283,7 +17335,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS if (0) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (0) { zval_ptr_dtor(&property); } else { @@ -17770,11 +17822,11 @@ static int zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(int (*binary_op)(zval case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - if (IS_UNUSED != IS_CV && !0) { + if (object_ptr && IS_UNUSED != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -18036,11 +18088,11 @@ static int zend_binary_assign_op_helper_SPEC_UNUSED_CV(int (*binary_op)(zval *re case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - if (IS_UNUSED != IS_CV && !0) { + if (object_ptr && IS_UNUSED != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -18512,7 +18564,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (0) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (0) { zval_ptr_dtor(&property); } else { @@ -19465,7 +19517,15 @@ static int ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } - varptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); + if (IS_CV == IS_VAR && + (opline->extended_value & ZEND_ARG_SEND_FUNCTION) && + EX_T(opline->op1.u.var).var.fcall_returned_reference && + EX_T(opline->op1.u.var).var.ptr) { + varptr = EX_T(opline->op1.u.var).var.ptr; + PZVAL_UNLOCK_EX(varptr, &free_op1, 0); + } else { + varptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); + } if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) || EX_T(opline->op1.u.var).var.fcall_returned_reference) && varptr != &EG(uninitialized_zval) && @@ -19856,6 +19916,9 @@ static int ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } else { if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); + if (opline->extended_value & ZEND_FE_FETCH_BYREF) { + (*array_ptr_ptr)->is_ref = 1; + } } array_ptr = *array_ptr_ptr; array_ptr->refcount++; @@ -19891,7 +19954,7 @@ static int ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } } - if (ce && ce->get_iterator) { + if (IS_CV != IS_TMP_VAR && ce && ce->get_iterator) { iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); if (iter && !EG(exception)) { @@ -19953,13 +20016,15 @@ static int ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); if (key_type != HASH_KEY_NON_EXISTANT && - zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS) { + (key_type == HASH_KEY_IS_LONG || + zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { break; } zend_hash_move_forward(fe_ht); } } is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; + zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); is_empty = 1; @@ -20442,11 +20507,11 @@ static int zend_binary_assign_op_helper_SPEC_CV_CONST(int (*binary_op)(zval *res case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - if (IS_CV != IS_CV && !0) { + if (object_ptr && IS_CV != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -21043,7 +21108,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (0) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (0) { zval_ptr_dtor(&property); } else { @@ -21918,11 +21983,11 @@ static int zend_binary_assign_op_helper_SPEC_CV_TMP(int (*binary_op)(zval *resul case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - if (IS_CV != IS_CV && !0) { + if (object_ptr && IS_CV != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_CV_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -22520,7 +22585,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (1) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (1) { zval_ptr_dtor(&property); } else { @@ -23398,11 +23463,11 @@ static int zend_binary_assign_op_helper_SPEC_CV_VAR(int (*binary_op)(zval *resul case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - if (IS_CV != IS_CV && !0) { + if (object_ptr && IS_CV != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_CV_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -24000,7 +24065,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (0) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (0) { zval_ptr_dtor(&property); } else { @@ -24681,11 +24746,11 @@ static int zend_binary_assign_op_helper_SPEC_CV_UNUSED(int (*binary_op)(zval *re case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - if (IS_CV != IS_CV && !0) { + if (object_ptr && IS_CV != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -25349,11 +25414,11 @@ static int zend_binary_assign_op_helper_SPEC_CV_CV(int (*binary_op)(zval *result case ZEND_ASSIGN_DIM: { zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - if (IS_CV != IS_CV && !0) { + if (object_ptr && IS_CV != IS_CV && !0) { (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ } - if (Z_TYPE_PP(object_ptr) == IS_OBJECT) { + if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { return zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } else { zend_op *op_data = opline+1; @@ -25950,7 +26015,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (0) { MAKE_REAL_ZVAL_PTR(property); } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_R TSRMLS_CC); + zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); if (0) { zval_ptr_dtor(&property); } else { @@ -28960,7 +29025,7 @@ void zend_init_opcodes_handlers() ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, + ZEND_FETCH_DIM_TMP_VAR_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index 9a1df4db8..062ac3915 100644 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -3,7 +3,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | @@ -16,7 +16,7 @@ | Authors: Dmitry Stogov <dmitry@zend.com> | +----------------------------------------------------------------------+ - $Id: zend_vm_gen.php,v 1.12.2.5.2.3 2006/09/18 12:03:10 dmitry Exp $ + $Id: zend_vm_gen.php,v 1.12.2.5.2.4 2007/01/09 11:53:08 dmitry Exp $ */ $header_text = <<< DATA @@ -24,7 +24,7 @@ $header_text = <<< DATA +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h index 31f17e1b7..230e11097 100644 --- a/Zend/zend_vm_opcodes.h +++ b/Zend/zend_vm_opcodes.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | + | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | |