diff options
Diffstat (limited to 'Zend')
74 files changed, 3048 insertions, 3318 deletions
diff --git a/Zend/RFCs/001.txt b/Zend/RFCs/001.txt deleted file mode 100644 index bf1d847b97..0000000000 --- a/Zend/RFCs/001.txt +++ /dev/null @@ -1,136 +0,0 @@ -Revamped object model using object handles -=========================================== - -Background ----------- - -In the Zend Engine 1.0 (and its predecessor the PHP 3 scripting -engine) the object model's design is that instantiated objects are -language values. This means that when programmers are performing -operations, such variable assignment and passing parameters to -functions, objects are handled very similarly to the way other -primitive types are handled such as integers and strings. -Semantically this means that the whole object is being copied. The -approach Java takes is different where one refers to objects by handle -and not by value (one can think of a handle as an objects' ID). - -Need ----- - -Unfortunately, the approach taken up to now has severely limited the -Zend Engine's object oriented model, both feature and simplicity -wise. One of the main problems with the former approach is that object -instantiation and duplication is very hard to control, a problem which -can not only lead to inefficient development but also often to strange -run-time behavior. Changing the object model to a handle oriented -model will allow the addressing of many needs such as destructors, -de-referencing method return values, tight control of object -duplication and more. - -Overview --------- - -The proposed object model is very much influenced by the Java -model. In general, when you create a new object you will be getting a -handle to the object instead of the object itself. When this handle is -sent to functions, assigned and copied it is only the handle which is -copied/sent/assigned. The object itself is never copied nor -duplicated. This results in all handles of this object to always point -at the same object making it a very consistent solution and saving -unnecessary duplication and confusing behavior. - -Functionality -------------- - -After this change the basic use of objects will be almost identical to -previous versions of the scripting engine. However, you won't bump -into awkward and confusing copying & destructing of objects. In order -to create and use a new object instance you will do the following: -$object = new MyClass(); $object->method(); - -The previous code will assign $object the handle of a new instance of -the class MyClass and call one of its methods. - - -Consider the following code: - -1 class MyClass -2 { -3 function setMember($value) -4 { -5 $this->member = $value; -6 } -7 -8 function getMember() -9 { -10 return $this->member; -11 } -12 } -13 -14 function foo($obj) -15 { -16 $obj->setMember("foo"); -17 } -18 -19 $object = new MyClass(); -20 $object->setMember("bar"); -21 foo($object); -22 print $object->getMember(); - -Without the new Java-like handles, at line 20 the objects' data member -member is set to the string value of "bar". Because of the internal -representation of objects in the Zend Engine 1.0, the object is marked -as a reference, and when it is sent by value to the function foo, it -is duplicated (!). Therefore, the call to foo() on line 21 will -result in the $obj->setMember("foo") call being called on a duplicate -of $object. Line 22 will then result in "bar" being printed. - -This is how the scripting engine has worked until today. Most -developers are probably unaware of the fact that they aren't always -talking to the same object but often duplicates; others may have -realized this can usually be solved by always passing objects by -reference (unless a replica is actually desired, which is uncommon). - -The new object model will allow for a much more intuitive -implementation of the code. On line 21, the object's handle (ID) is -passed to foo() by value. Inside foo(), the object is fetched -according to this handle and, therefore, the setMember() method is -called on the originally instantiated object and not a copy. Line 22 -will therefore result in "foo" being printed. This approach gives -developers tighter control of when objects are created and duplicated. -An additional not-as-important benefit is that the object handle will -be passed to foo() by value, which most probably will also save -unnecessary duplication of the value containing the ID itself and thus -additionally improving run-time performance. - -This was just a simple description of why the new object model solves -awkward behavior and makes object handling much easier, intuitive and -efficient. The importance of this change goes far beyond what is -mentioned in this section as you will see in further sections which -describe new features with a majority of them being based on this -change. - -Compatibility Notes --------------------- - -Many PHP programmers aren't even aware of the copying quirks of the -current object model and, therefore, there is a relatively good chance -that the amount of PHP applications that will work out of the box or -after a very small amount of modifications would be high. - -To simplify migration, version 2.0 will support an optional -'auto-clone' feature, which will perform a cloning of the object -whenever it would have been copied in version 1.0. Optionally, it -will also be possible to request that the engine will emit an E_NOTICE -message whenever such an automatic clone occurs, in order to allow -developers to gradually migrate to the version 2.0-style behavior -(without automatic clones). - -Dependencies ------------- - -The new object model is not dependent on other features. Many of the -other Zend Engine 2.0 features, such as the $foo->bar()->barbara() -syntax, destructors and others completely rely on this new object -model. - diff --git a/Zend/RFCs/002.txt b/Zend/RFCs/002.txt deleted file mode 100644 index 7d7cb885d8..0000000000 --- a/Zend/RFCs/002.txt +++ /dev/null @@ -1,169 +0,0 @@ -Title: Zend 2.0 Namespaces -Version: $Id$ -Status: declined -Maintainer: Stig S. Bakken <ssb@php.net> -Created: 2001-09-08 -Modified: 2001-09-08 - - -1. Background/Need -================== - -PHP and Zend 1.0 have come to a point where a lot of reusable code is -being written; from simple functions and classes to entire application -frameworks. It is becoming increasingly difficult to avoid symbol -name collisions with the current scoping methods. - -The symbol scopes available in Zend 1.0 are the global scope, the -class scope and the function scope. All scopes but classes may -contain variables, only the class and global scopes may contain -functions, while only the global scope may contain constants and -classes. This means that all of Zend 1.0's scoping methods are -inherently limited for solving symbol name collision problems. - - -2. Overview -=========== - -Namespaces in Zend 2.0 provide a way to manage the symbol collision -problem by making it possible to define multiple symbol tables able to -contain all types of symbols. Zend will get the notion of a current -namespace, defaulting to the current global one. The current name -space may be changed on a file-by-file basis. Symbols in other name -spaces than the current one may be referenced using a new namespace -operator. It will be possible to "import" symbols from one namespace -into another. - - -3. Functionality -================ - -3.1. Namespace Syntax -===================== - -The namespace operator ":" is used to refer to symbols in other -namespaces than the current one: - -Class: Namespace:class -Function: Namespace:function -Static method: Namespace:class::method -Variable: $Namespace:variable -Constant: Namespace:CONSTANT -Class variable: $Namespace:class::variable - -To refer to symbols in the global namespace, symbols are prefixed with -only the namespace operator: - -Class: :class -Function: :function -Static method: :class::method -Variable: $:variable -Constant: :CONSTANT -Class variable: $:class::variable - -Note: $:variable will effectively be just another syntax for -$GLOBALS['variable']. - -A namespace may have a name containing a ":", it is always the last -":" character in the symbol qualifier that is the actual namespace -operator: - -Class: Name:Space:class -Function: Name:Space:function -Static method: Name:Space:class::method -Variable: $Name:Space:variable -Constant: Name:Space:CONSTANT -Class variable: $Name:Space:class::variable - -(Here, the ":" between "Name" and "Space" is part of the name, it is -the one after "Space" that is the namespace operator.) - - -3.2. Defining Namespaces -======================== - -Individual files may define a namespace that will apply to the entire -file. If no "namespace" operator occurs in the file, it will be in -the global namespace: - - 1 namespace HTML; - 2 - 3 class Form { - 4 function Form() { - 5 // constructor - 6 } - 7 // ... - 8 } - -Or with the "nested" name syntax: - - 1 namespace HTML:Form; - 2 - 3 class Image { - 4 var $src; - 5 function Image($src) { - 6 $this->src = $src; - 7 } - 8 // ... - 9 } - -Code executed within the "HTML" namespace may refer to the Form class -as just "Form". Code executed from within other namespaces has to -refer to it as "HTML:Form". The "namespace" statement must occur -before any other statements in the file. - -# [ssb 2001-09-08]: -# Should it be possible to "add" symbols to a namespace by including a -# second file with the same namespace statement? - - -3.3. Importing Symbols -====================== - -It is possible to import symbols from another namespace into the -current one with the "import" statement: - - import * from HTML; // all symbols - - import Form from HTML; // single symbols - - import Form,Table from HTML; // multiple symbols - -There is a potential for name clashes between symols of different -types that have the same qualifier syntax. These are resolved in this -order: class, function, constant. - -Optionally, the symbol type may be explicitly given to import (as -"class", "function", "variable" or "constant"): - - import class Form from HTML; - -And finally, you may import all symbols of a given type: - - import constant * from HTML:Table; - -The namespace with its symbols must already be defined before using -"import". - - -4. Compatibility Notes -====================== - -Old code that does not take advantage of namespaces will run without -modifications. - - -5. Dependencies -=============== - -The class variable syntax depends on this class variables being -implemented in the new ZE2 object model. - - -6. Acknowledgements -=================== - -Andi Gutmans <andi@zend.com> and Zeev Suraski <zeev@zend.com> for -initial ZE2 namespaces proposal - -Dean Hall <php@apt7.com> for the initial symbol qualification syntax diff --git a/Zend/RFCs/003.txt b/Zend/RFCs/003.txt deleted file mode 100644 index ac042183d4..0000000000 --- a/Zend/RFCs/003.txt +++ /dev/null @@ -1,72 +0,0 @@ -Title: Loose type requirements for functions -Version: $Id$ -Status: draft -Maintainer: Brian Moon <brianm@dealnews.com> -Created: 2001-09-17 -Modified: 2001-09-17 - - -1. Background/Need -================== - -Many internal functions of PHP will reject parameters because of their -type (the array and variable function come to mind). For userland -this is not an easy task as there is no uniform way to do it. An -addition to the engine for requiring loose types would allow -developers to know that the data passed to their functions are of the -correct type and reduce the need for duplicating the same code in -every function to check for the type of data. - - -2. Overview -=========== - -Loose typing mostly means evaluating the contents of the variable and -not the type of the variable itself. The requirements for this would -and should work much like several of the is_* functions do now. - -The typing of parameters would be optional and those not typed would -simply continue to be treated as they are now. - -3. Functionality -================ - -3.1. Allowed Types -================== - -Only loose types should be needed to ensure the data is usable by the -function. Duplicating the functionallity of is_scalar, is_resource, -is_array and is_object should give developers all the information they -need to use a variable correctly. - -3.2. Syntax -=========== - -The current function syntax should be expanded to allow typing of -variables inline in a C style. - -function foo ($var){ -} - -could be changed to require an array such as: - -function foo (array $var){ -} - -3.3. Errors -=========== - -Mis-matches in type should be reported as fatal errors and should halt -the execution of a script as that function cannot be run and code -following could not reliably run. - - -4. Compatibility Notes -====================== - -Old code that does not take advantage of this will run without -modifications. - - - - diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index 9d3b46a755..a1c1d3b07b 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -466,3 +466,140 @@ else HAVE_GCC_GLOBAL_REGS=no fi AC_MSG_RESULT($ZEND_GCC_GLOBAL_REGS) + +dnl +dnl Check if atof() accepts NAN +dnl +AC_CACHE_CHECK(whether atof() accepts NAN, ac_cv_atof_accept_nan,[ +AC_TRY_RUN([ +#include <math.h> +#include <stdlib.h> + +#ifdef HAVE_ISNAN +#define zend_isnan(a) isnan(a) +#elif defined(HAVE_FPCLASS) +#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) +#else +#define zend_isnan(a) 0 +#endif + +int main(int argc, char** argv) +{ + return zend_isnan(atof("NAN")) ? 0 : 1; +} +],[ + ac_cv_atof_accept_nan=yes +],[ + ac_cv_atof_accept_nan=no +],[ + ac_cv_atof_accept_nan=no +])]) +if test "$ac_cv_atof_accept_nan" = "yes"; then + AC_DEFINE([HAVE_ATOF_ACCEPTS_NAN], 1, [whether atof() accepts NAN]) +fi + +dnl +dnl Check if atof() accepts INF +dnl +AC_CACHE_CHECK(whether atof() accepts INF, ac_cv_atof_accept_inf,[ +AC_TRY_RUN([ +#include <math.h> +#include <stdlib.h> + +#ifdef HAVE_ISINF +#define zend_isinf(a) isinf(a) +#elif defined(INFINITY) +/* Might not work, but is required by ISO C99 */ +#define zend_isinf(a) (((a)==INFINITY)?1:0) +#elif defined(HAVE_FPCLASS) +#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF)) +#else +#define zend_isinf(a) 0 +#endif + +int main(int argc, char** argv) +{ + return zend_isinf(atof("INF")) && zend_isinf(atof("-INF")) ? 0 : 1; +} +],[ + ac_cv_atof_accept_inf=yes +],[ + ac_cv_atof_accept_inf=no +],[ + ac_cv_atof_accept_inf=no +])]) +if test "$ac_cv_atof_accept_inf" = "yes"; then + AC_DEFINE([HAVE_ATOF_ACCEPTS_INF], 1, [whether atof() accepts INF]) +fi + +dnl +dnl Check if HUGE_VAL == INF +dnl +AC_CACHE_CHECK(whether HUGE_VAL == INF, ac_cv_huge_val_inf,[ +AC_TRY_RUN([ +#include <math.h> +#include <stdlib.h> + +#ifdef HAVE_ISINF +#define zend_isinf(a) isinf(a) +#elif defined(INFINITY) +/* Might not work, but is required by ISO C99 */ +#define zend_isinf(a) (((a)==INFINITY)?1:0) +#elif defined(HAVE_FPCLASS) +#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF)) +#else +#define zend_isinf(a) 0 +#endif + +int main(int argc, char** argv) +{ + return zend_isinf(HUGE_VAL) ? 0 : 1; +} +],[ + ac_cv_huge_val_inf=yes +],[ + ac_cv_huge_val_inf=no +],[ + ac_cv_huge_val_inf=yes +])]) +dnl This is the most probable fallback so we assume yes in case of cross compile. +if test "$ac_cv_huge_val_inf" = "yes"; then + AC_DEFINE([HAVE_HUGE_VAL_INF], 1, [whether HUGE_VAL == INF]) +fi + +dnl +dnl Check if HUGE_VAL + -HUGEVAL == NAN +dnl +AC_CACHE_CHECK(whether HUGE_VAL + -HUGEVAL == NAN, ac_cv_huge_val_nan,[ +AC_TRY_RUN([ +#include <math.h> +#include <stdlib.h> + +#ifdef HAVE_ISNAN +#define zend_isnan(a) isnan(a) +#elif defined(HAVE_FPCLASS) +#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) +#else +#define zend_isnan(a) 0 +#endif + +int main(int argc, char** argv) +{ +#if defined(__sparc__) && !(__GNUC__ >= 3) + /* prevent bug #27830 */ + return 1; +#else + return zend_isnan(HUGE_VAL + -HUGE_VAL) ? 0 : 1; +#endif +} +],[ + ac_cv_huge_val_nan=yes +],[ + ac_cv_huge_val_nan=no +],[ + ac_cv_huge_val_nan=yes +])]) +dnl This is the most probable fallback so we assume yes in case of cross compile. +if test "$ac_cv_huge_val_nan" = "yes"; then + AC_DEFINE([HAVE_HUGE_VAL_NAN], 1, [whether HUGE_VAL + -HUGEVAL == NAN]) +fi diff --git a/Zend/configure.in b/Zend/configure.in index 29551d924c..3ebea4b8ed 100644 --- a/Zend/configure.in +++ b/Zend/configure.in @@ -62,13 +62,6 @@ int zend_sprintf(char *buffer, const char *format, ...); #include <math.h> -/* To enable the is_nan, is_infinite and is_finite PHP functions */ -#ifdef NETWARE - #define HAVE_ISNAN 1 - #define HAVE_ISINF 1 - #define HAVE_ISFINITE 1 -#endif - #ifndef zend_isnan #ifdef HAVE_ISNAN #define zend_isnan(a) isnan(a) @@ -102,12 +95,6 @@ int zend_sprintf(char *buffer, const char *format, ...); #endif /* ifndef ZEND_ACCONFIG_H_NO_C_PROTOS */ -#ifdef NETWARE -#ifdef USE_WINSOCK -#/*This detection against winsock is of no use*/ undef HAVE_SOCKLEN_T -#/*This detection against winsock is of no use*/ undef HAVE_SYS_SOCKET_H -#endif -#endif ]) dnl We want this one before the checks, so the checks can modify CFLAGS. diff --git a/Zend/tests/009.phpt b/Zend/tests/009.phpt index b44a6ba687..0dc9453576 100644 --- a/Zend/tests/009.phpt +++ b/Zend/tests/009.phpt @@ -7,6 +7,10 @@ class foo { function bar () { var_dump(get_class()); } + function testNull () + { + var_dump(get_class(null)); + } } class foo2 extends foo { @@ -27,6 +31,8 @@ var_dump(get_class("qwerty")); var_dump(get_class($f1)); var_dump(get_class($f2)); +$f1->testNull(); + echo "Done\n"; ?> --EXPECTF-- @@ -45,4 +51,7 @@ Warning: get_class() expects parameter 1 to be object, string given in %s on lin bool(false) string(3) "foo" string(4) "foo2" + +Warning: get_class() expects parameter 1 to be object, null given in %s on line %d +bool(false) Done diff --git a/Zend/tests/ast/zend-pow-assign.phpt b/Zend/tests/ast/zend-pow-assign.phpt new file mode 100644 index 0000000000..d978e77ce6 --- /dev/null +++ b/Zend/tests/ast/zend-pow-assign.phpt @@ -0,0 +1,11 @@ +--TEST-- +ZEND_POW_ASSIGN +--INI-- +zend.assertions=1 +--FILE-- +<?php + +assert_options(ASSERT_WARNING); +assert(false && ($a **= 2)); +--EXPECTF-- +Warning: assert(): assert(false && ($a **= 2)) failed in %s%ezend-pow-assign.php on line %d diff --git a/Zend/tests/bug46811.phpt b/Zend/tests/bug46811.phpt index e98f6e7720..fe41bffff6 100644 --- a/Zend/tests/bug46811.phpt +++ b/Zend/tests/bug46811.phpt @@ -9,5 +9,5 @@ var_dump(ini_get("arg_separator.output")); ?> --EXPECTF-- bool(false) -%unicode|string%(1) "&" +string(1) "&" diff --git a/Zend/tests/bug48533.phpt b/Zend/tests/bug48533.phpt index 61a56d38ac..3b4777884e 100644 --- a/Zend/tests/bug48533.phpt +++ b/Zend/tests/bug48533.phpt @@ -31,11 +31,11 @@ $x::c(); ?> --EXPECTF-- -%unicode|string%(9) "__call::a" +string(9) "__call::a" int(2) -%unicode|string%(9) "__call::c" -%unicode|string%(15) "__callStatic::a" +string(9) "__call::c" +string(15) "__callStatic::a" Deprecated: Non-static method foo::b() should not be called statically in %s on line %d int(2) -%unicode|string%(15) "__callStatic::c" +string(15) "__callStatic::c" diff --git a/Zend/tests/bug48770.phpt b/Zend/tests/bug48770.phpt index 40fa84157b..067e892e66 100644 --- a/Zend/tests/bug48770.phpt +++ b/Zend/tests/bug48770.phpt @@ -50,4 +50,4 @@ $c->func('This should work!'); ?> --EXPECTF-- -%unicode|string%(26) "A::func: This should work!" +string(26) "A::func: This should work!" diff --git a/Zend/tests/bug48770_2.phpt b/Zend/tests/bug48770_2.phpt index dff54e1550..54ce92fa61 100644 --- a/Zend/tests/bug48770_2.phpt +++ b/Zend/tests/bug48770_2.phpt @@ -46,8 +46,8 @@ $c->func('This should work!'); ?> --EXPECTF-- -%unicode|string%(27) "A::func2: This should work!" -%unicode|string%(27) "A::func3: This should work!" +string(27) "A::func2: This should work!" +string(27) "A::func3: This should work!" Warning: call_user_func_array() expects parameter 1 to be a valid callback, cannot access private method A::func22() in %s on line %d diff --git a/Zend/tests/bug48770_3.phpt b/Zend/tests/bug48770_3.phpt index 68fe84314d..43311df533 100644 --- a/Zend/tests/bug48770_3.phpt +++ b/Zend/tests/bug48770_3.phpt @@ -45,7 +45,7 @@ $c->func('This should work!'); ?> --EXPECTF-- -%unicode|string%(27) "B::func2: This should work!" -%unicode|string%(27) "B::func3: This should work!" +string(27) "B::func2: This should work!" +string(27) "B::func3: This should work!" Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'B' does not have a method 'inexistent' in %s on line %d diff --git a/Zend/tests/bug49908.phpt b/Zend/tests/bug49908.phpt index ea05f2b567..4f2b5b7cb2 100644 --- a/Zend/tests/bug49908.phpt +++ b/Zend/tests/bug49908.phpt @@ -17,8 +17,8 @@ new Foo; ?> --EXPECTF-- -%unicode|string%(3) "Foo" -%unicode|string%(3) "Bar" +string(3) "Foo" +string(3) "Bar" Fatal error: Uncaught Exception: Bar in %s:%d Stack trace: diff --git a/Zend/tests/bug55509.phpt b/Zend/tests/bug55509.phpt index 5268789df6..4fc3299620 100644 --- a/Zend/tests/bug55509.phpt +++ b/Zend/tests/bug55509.phpt @@ -1,71 +1,71 @@ ---TEST--
-Bug #55509 (segfault on x86_64 using more than 2G memory)
---SKIPIF--
-<?php
-if (PHP_INT_SIZE == 4) {
- die('skip Not for 32-bits OS');
-}
-
-$zend_mm_enabled = getenv("USE_ZEND_ALLOC");
-if ($zend_mm_enabled === "0") {
- die("skip Zend MM disabled");
-}
-
-if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
-// check the available memory
-if (PHP_OS == 'Linux') {
- $lines = file('/proc/meminfo');
- $infos = array();
- foreach ($lines as $line) {
- $tmp = explode(":", $line);
- $index = strtolower($tmp[0]);
- $value = (int)ltrim($tmp[1], " ")*1024;
- $infos[$index] = $value;
- }
- $freeMemory = $infos['memfree']+$infos['buffers']+$infos['cached'];
- if ($freeMemory < 2100*1024*1024) {
- die('skip Not enough memory.');
- }
-}
-elseif (PHP_OS == 'FreeBSD') {
- $lines = explode("\n",`sysctl -a`);
- $infos = array();
- foreach ($lines as $line) {
- if(!$line){
- continue;
- }
- $tmp = explode(":", $line);
- $index = strtolower($tmp[0]);
- $value = trim($tmp[1], " ");
- $infos[$index] = $value;
- }
- $freeMemory = ($infos['vm.stats.vm.v_inactive_count']*$infos['hw.pagesize'])
- +($infos['vm.stats.vm.v_cache_count']*$infos['hw.pagesize'])
- +($infos['vm.stats.vm.v_free_count']*$infos['hw.pagesize']);
- if ($freeMemory < 2100*1024*1024) {
- die('skip Not enough memory.');
- }
-}
-?>
---INI--
-memory_limit=2100M
---FILE--
-<?php
-$a1 = str_repeat("1", 1024 * 1024 * 1024 * 0.5);
-echo "1\n";
-$a2 = str_repeat("2", 1024 * 1024 * 1024 * 0.5);
-echo "2\n";
-$a3 = str_repeat("3", 1024 * 1024 * 1024 * 0.5);
-echo "3\n";
-$a4 = str_repeat("4", 1024 * 1024 * 1024 * 0.5);
-echo "4\n";
-$a5 = str_repeat("5", 1024 * 1024 * 1024 * 0.5);
-echo "5\n";
-?>
---EXPECTF--
-1
-2
-3
-4
-
-Fatal error: Allowed memory size of %d bytes exhausted%s(tried to allocate %d bytes) in %sbug55509.php on line %d
+--TEST-- +Bug #55509 (segfault on x86_64 using more than 2G memory) +--SKIPIF-- +<?php +if (PHP_INT_SIZE == 4) { + die('skip Not for 32-bits OS'); +} + +$zend_mm_enabled = getenv("USE_ZEND_ALLOC"); +if ($zend_mm_enabled === "0") { + die("skip Zend MM disabled"); +} + +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +// check the available memory +if (PHP_OS == 'Linux') { + $lines = file('/proc/meminfo'); + $infos = array(); + foreach ($lines as $line) { + $tmp = explode(":", $line); + $index = strtolower($tmp[0]); + $value = (int)ltrim($tmp[1], " ")*1024; + $infos[$index] = $value; + } + $freeMemory = $infos['memfree']+$infos['buffers']+$infos['cached']; + if ($freeMemory < 2100*1024*1024) { + die('skip Not enough memory.'); + } +} +elseif (PHP_OS == 'FreeBSD') { + $lines = explode("\n",`sysctl -a`); + $infos = array(); + foreach ($lines as $line) { + if(!$line){ + continue; + } + $tmp = explode(":", $line); + $index = strtolower($tmp[0]); + $value = trim($tmp[1], " "); + $infos[$index] = $value; + } + $freeMemory = ($infos['vm.stats.vm.v_inactive_count']*$infos['hw.pagesize']) + +($infos['vm.stats.vm.v_cache_count']*$infos['hw.pagesize']) + +($infos['vm.stats.vm.v_free_count']*$infos['hw.pagesize']); + if ($freeMemory < 2100*1024*1024) { + die('skip Not enough memory.'); + } +} +?> +--INI-- +memory_limit=2100M +--FILE-- +<?php +$a1 = str_repeat("1", 1024 * 1024 * 1024 * 0.5); +echo "1\n"; +$a2 = str_repeat("2", 1024 * 1024 * 1024 * 0.5); +echo "2\n"; +$a3 = str_repeat("3", 1024 * 1024 * 1024 * 0.5); +echo "3\n"; +$a4 = str_repeat("4", 1024 * 1024 * 1024 * 0.5); +echo "4\n"; +$a5 = str_repeat("5", 1024 * 1024 * 1024 * 0.5); +echo "5\n"; +?> +--EXPECTF-- +1 +2 +3 +4 + +Fatal error: Allowed memory size of %d bytes exhausted%s(tried to allocate %d bytes) in %sbug55509.php on line %d diff --git a/Zend/tests/bug64979.phpt b/Zend/tests/bug64979.phpt index 5bc8e5a6ab..6122ccf270 100644 --- a/Zend/tests/bug64979.phpt +++ b/Zend/tests/bug64979.phpt @@ -1,30 +1,30 @@ ---TEST--
-Bug #64979 (Wrong behavior of static variables in closure generators)
---FILE--
-<?php
-
-function new_closure_gen() {
- return function() {
- static $foo = 0;
- yield ++$foo;
- };
-}
-
-$closure1 = new_closure_gen();
-$closure2 = new_closure_gen();
-
-$gen1 = $closure1();
-$gen2 = $closure1();
-$gen3 = $closure2();
-
-foreach (array($gen1, $gen2, $gen3) as $gen) {
- foreach ($gen as $val) {
- var_dump($val);
- }
-}
-
-?>
---EXPECT--
-int(1)
-int(2)
-int(1)
+--TEST-- +Bug #64979 (Wrong behavior of static variables in closure generators) +--FILE-- +<?php + +function new_closure_gen() { + return function() { + static $foo = 0; + yield ++$foo; + }; +} + +$closure1 = new_closure_gen(); +$closure2 = new_closure_gen(); + +$gen1 = $closure1(); +$gen2 = $closure1(); +$gen3 = $closure2(); + +foreach (array($gen1, $gen2, $gen3) as $gen) { + foreach ($gen as $val) { + var_dump($val); + } +} + +?> +--EXPECT-- +int(1) +int(2) +int(1) diff --git a/Zend/tests/bug71474.phpt b/Zend/tests/bug71474.phpt index e67bb9b240..72b0db91a1 100644 --- a/Zend/tests/bug71474.phpt +++ b/Zend/tests/bug71474.phpt @@ -1,23 +1,23 @@ ---TEST--
-Bug #71474: Crash because of VM stack corruption on Magento2
---FILE--
-<?php
-class foo {
- function __call($name, $args) {
- $a = $b = $c = $d = $e = $f = 1;
- }
-}
-
-function test($n, $x) {
-// var_dump($n);
- if ($n > 0) {
- $x->bug();
- test($n - 1, $x);
- }
-}
-
-test(3000, new foo());
-echo "OK\n";
-?>
---EXPECT--
-OK
+--TEST-- +Bug #71474: Crash because of VM stack corruption on Magento2 +--FILE-- +<?php +class foo { + function __call($name, $args) { + $a = $b = $c = $d = $e = $f = 1; + } +} + +function test($n, $x) { +// var_dump($n); + if ($n > 0) { + $x->bug(); + test($n - 1, $x); + } +} + +test(3000, new foo()); +echo "OK\n"; +?> +--EXPECT-- +OK diff --git a/Zend/tests/bug72918.phpt b/Zend/tests/bug72918.phpt index f3dc1d2918..403d4e69c5 100644 --- a/Zend/tests/bug72918.phpt +++ b/Zend/tests/bug72918.phpt @@ -1,22 +1,22 @@ ---TEST--
-Bug #72918 (negative offset inside a quoted string leads to parse error)
---FILE--
-<?php
-$array = [-3 => 'foo'];
-$string = 'abcde';
-
-echo "$array[-3]\n";
-echo "$string[-3]\n";
-echo <<<EOT
-$array[-3]
-$string[-3]
-
-EOT;
-?>
-===DONE===
---EXPECT--
-foo
-c
-foo
-c
-===DONE===
+--TEST-- +Bug #72918 (negative offset inside a quoted string leads to parse error) +--FILE-- +<?php +$array = [-3 => 'foo']; +$string = 'abcde'; + +echo "$array[-3]\n"; +echo "$string[-3]\n"; +echo <<<EOT +$array[-3] +$string[-3] + +EOT; +?> +===DONE=== +--EXPECT-- +foo +c +foo +c +===DONE=== diff --git a/Zend/tests/call_user_func_002.phpt b/Zend/tests/call_user_func_002.phpt index e79dd1a759..0bf3d39376 100644 --- a/Zend/tests/call_user_func_002.phpt +++ b/Zend/tests/call_user_func_002.phpt @@ -14,7 +14,7 @@ call_user_func(array($foo, '')); ?> --EXPECTF-- -%unicode|string%(3) "foo" +string(3) "foo" Warning: call_user_func() expects parameter 1 to be a valid callback, class 'foo' not found in %s on line %d diff --git a/Zend/tests/call_user_func_003.phpt b/Zend/tests/call_user_func_003.phpt index d516584eb2..102433f557 100644 --- a/Zend/tests/call_user_func_003.phpt +++ b/Zend/tests/call_user_func_003.phpt @@ -20,11 +20,11 @@ var_dump(call_user_func(function() use (&$foo) { return $foo; }, '__invoke')); ?> --EXPECTF-- -%unicode|string%(3) "OK!" +string(3) "OK!" object(Closure)#%d (1) { - [%u|b%"static"]=> + ["static"]=> array(1) { - [%u|b%"instance"]=> + ["instance"]=> object(Closure)#%d (0) { } } diff --git a/Zend/tests/cast_to_object.phpt b/Zend/tests/cast_to_object.phpt Binary files differindex f8d4878475..04d68053e2 100644 --- a/Zend/tests/cast_to_object.phpt +++ b/Zend/tests/cast_to_object.phpt diff --git a/Zend/tests/foreach_018.phpt b/Zend/tests/foreach_018.phpt new file mode 100644 index 0000000000..3c0be7be19 --- /dev/null +++ b/Zend/tests/foreach_018.phpt @@ -0,0 +1,20 @@ +--TEST-- +Foreach on stdClass with properties looking like mangled properties +--FILE-- +<?php + +$obj = (object)[ + "\0A\0b" => 42, + "\0*\0c" => 24, +]; + +foreach ($obj as $k => $v) { + var_dump($k, $v); +} + +?> +--EXPECT-- +string(1) "b" +int(42) +string(1) "c" +int(24) diff --git a/Zend/tests/generators/errors/count_error.phpt b/Zend/tests/generators/errors/count_error.phpt new file mode 100644 index 0000000000..97e03e7d71 --- /dev/null +++ b/Zend/tests/generators/errors/count_error.phpt @@ -0,0 +1,18 @@ +--TEST-- +Generators can't be counted +--FILE-- +<?php + +function gen() { yield; } + +$gen = gen(); + +try { + count($gen); +} catch (Exception $e) { + echo $e; +} + +?> +--EXPECTF-- +Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d diff --git a/Zend/tests/ns_069.inc b/Zend/tests/ns_069.inc index 4f186390ad..46d8f8f488 100644 --- a/Zend/tests/ns_069.inc +++ b/Zend/tests/ns_069.inc @@ -1,3 +1,3 @@ <?php -var_dump((binary)__NAMESPACE__); +var_dump(__NAMESPACE__); diff --git a/Zend/tests/ns_069.phpt b/Zend/tests/ns_069.phpt index 63269d0de7..cbfb927049 100644 --- a/Zend/tests/ns_069.phpt +++ b/Zend/tests/ns_069.phpt @@ -7,9 +7,9 @@ namespace foo; class Test { static function f() { - var_dump((binary)__NAMESPACE__); + var_dump(__NAMESPACE__); include __DIR__ . '/ns_069.inc'; - var_dump((binary)__NAMESPACE__); + var_dump(__NAMESPACE__); } } diff --git a/Zend/tests/object_array_cast.phpt b/Zend/tests/object_array_cast.phpt index 1cf3dbbd9c..b1c12b579d 100644 --- a/Zend/tests/object_array_cast.phpt +++ b/Zend/tests/object_array_cast.phpt @@ -14,11 +14,11 @@ var_dump($obj); ?> --EXPECT-- object(stdClass)#1 (3) { - [0]=> + ["0"]=> int(1) - [1]=> + ["1"]=> int(2) - [2]=> + ["2"]=> int(3) } array(3) { @@ -38,10 +38,10 @@ array(3) { int(3) } object(stdClass)#1 (3) { - [0]=> + ["0"]=> int(1) - [1]=> + ["1"]=> int(2) - [2]=> + ["2"]=> int(3) } diff --git a/Zend/tests/settype_object.phpt b/Zend/tests/settype_object.phpt Binary files differindex d619dce7e3..7f9e5bc64b 100644 --- a/Zend/tests/settype_object.phpt +++ b/Zend/tests/settype_object.phpt diff --git a/Zend/tests/str_offset_002.phpt b/Zend/tests/str_offset_002.phpt index 2f5e4ee890..d3a9152905 100644 --- a/Zend/tests/str_offset_002.phpt +++ b/Zend/tests/str_offset_002.phpt @@ -1,12 +1,12 @@ ---TEST--
-string offset 002
---FILE--
-<?php
-$a = "aaa";
-$x = array(&$a[1]);
-?>
---EXPECTF--
-Fatal error: Uncaught Error: Cannot create references to/from string offsets in %sstr_offset_002.php:3
-Stack trace:
-#0 {main}
- thrown in %sstr_offset_002.php on line 3
+--TEST-- +string offset 002 +--FILE-- +<?php +$a = "aaa"; +$x = array(&$a[1]); +?> +--EXPECTF-- +Fatal error: Uncaught Error: Cannot create references to/from string offsets in %sstr_offset_002.php:3 +Stack trace: +#0 {main} + thrown in %sstr_offset_002.php on line 3 diff --git a/Zend/tests/traits/bugs/case-sensitive.phpt b/Zend/tests/traits/bugs/case-sensitive.phpt index 13d4188f2f..6a65ccff03 100644 --- a/Zend/tests/traits/bugs/case-sensitive.phpt +++ b/Zend/tests/traits/bugs/case-sensitive.phpt @@ -1,23 +1,23 @@ ---TEST--
-Check for problems with case sensitivity in compositions
---FILE--
-<?php
-error_reporting(E_ALL);
-
-trait A {
- public function M1() {}
- public function M2() {}
-}
-
-trait B {
- public function M1() {}
- public function M2() {}
-}
-
-class MyClass {
- use A;
- use B;
-}
-?>
---EXPECTF--
-Fatal error: Trait method M1 has not been applied, because there are collisions with other trait methods on MyClass in %s on line %d
+--TEST-- +Check for problems with case sensitivity in compositions +--FILE-- +<?php +error_reporting(E_ALL); + +trait A { + public function M1() {} + public function M2() {} +} + +trait B { + public function M1() {} + public function M2() {} +} + +class MyClass { + use A; + use B; +} +?> +--EXPECTF-- +Fatal error: Trait method M1 has not been applied, because there are collisions with other trait methods on MyClass in %s on line %d diff --git a/Zend/tests/traits/static_001.phpt b/Zend/tests/traits/static_001.phpt index d86cb851b9..5953c008d5 100644 --- a/Zend/tests/traits/static_001.phpt +++ b/Zend/tests/traits/static_001.phpt @@ -1,22 +1,22 @@ ---TEST--
-Traits with static methods.
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return 'Test';
- }
- }
-
- class A {
- use TestTrait;
- }
-
- echo A::test();
-
-?>
---EXPECT--
+--TEST-- +Traits with static methods. +--CREDITS-- +Simas Toleikis simast@gmail.com +--FILE-- +<?php + + trait TestTrait { + public static function test() { + return 'Test'; + } + } + + class A { + use TestTrait; + } + + echo A::test(); + +?> +--EXPECT-- Test
\ No newline at end of file diff --git a/Zend/tests/traits/static_002.phpt b/Zend/tests/traits/static_002.phpt index c076085519..64ebf6bf14 100644 --- a/Zend/tests/traits/static_002.phpt +++ b/Zend/tests/traits/static_002.phpt @@ -1,23 +1,23 @@ ---TEST--
-Traits with static methods referenced using variable.
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return 'Test';
- }
- }
-
- class A {
- use TestTrait;
- }
-
- $class = "A";
- echo $class::test();
-
-?>
---EXPECT--
+--TEST-- +Traits with static methods referenced using variable. +--CREDITS-- +Simas Toleikis simast@gmail.com +--FILE-- +<?php + + trait TestTrait { + public static function test() { + return 'Test'; + } + } + + class A { + use TestTrait; + } + + $class = "A"; + echo $class::test(); + +?> +--EXPECT-- Test
\ No newline at end of file diff --git a/Zend/tests/traits/static_003.phpt b/Zend/tests/traits/static_003.phpt index fbe5421c71..01953cf724 100644 --- a/Zend/tests/traits/static_003.phpt +++ b/Zend/tests/traits/static_003.phpt @@ -1,27 +1,27 @@ ---TEST--
-Traits with late static bindings.
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return static::$test;
- }
- }
-
- class A {
- use TestTrait;
- protected static $test = "Test A";
- }
-
- class B extends A {
- protected static $test = "Test B";
- }
-
- echo B::test();
-
-?>
---EXPECT--
+--TEST-- +Traits with late static bindings. +--CREDITS-- +Simas Toleikis simast@gmail.com +--FILE-- +<?php + + trait TestTrait { + public static function test() { + return static::$test; + } + } + + class A { + use TestTrait; + protected static $test = "Test A"; + } + + class B extends A { + protected static $test = "Test B"; + } + + echo B::test(); + +?> +--EXPECT-- Test B
\ No newline at end of file diff --git a/Zend/tests/traits/static_004.phpt b/Zend/tests/traits/static_004.phpt index c360f457f0..3c3f380908 100644 --- a/Zend/tests/traits/static_004.phpt +++ b/Zend/tests/traits/static_004.phpt @@ -1,22 +1,22 @@ ---TEST--
-Traits with __callStatic magic method.
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function __callStatic($name, $arguments) {
- return $name;
- }
- }
-
- class A {
- use TestTrait;
- }
-
- echo A::Test();
-
-?>
---EXPECT--
+--TEST-- +Traits with __callStatic magic method. +--CREDITS-- +Simas Toleikis simast@gmail.com +--FILE-- +<?php + + trait TestTrait { + public static function __callStatic($name, $arguments) { + return $name; + } + } + + class A { + use TestTrait; + } + + echo A::Test(); + +?> +--EXPECT-- Test
\ No newline at end of file diff --git a/Zend/tests/traits/static_forward_static_call.phpt b/Zend/tests/traits/static_forward_static_call.phpt index 878cf1fcc1..9cda8aee1d 100644 --- a/Zend/tests/traits/static_forward_static_call.phpt +++ b/Zend/tests/traits/static_forward_static_call.phpt @@ -1,28 +1,28 @@ ---TEST--
-Traits and forward_static_call().
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return 'Forwarded '.forward_static_call(array('A', 'test'));
- }
- }
-
- class A {
- public static function test() {
- return "Test A";
- }
- }
-
- class B extends A {
- use TestTrait;
- }
-
- echo B::test();
-
-?>
---EXPECT--
+--TEST-- +Traits and forward_static_call(). +--CREDITS-- +Simas Toleikis simast@gmail.com +--FILE-- +<?php + + trait TestTrait { + public static function test() { + return 'Forwarded '.forward_static_call(array('A', 'test')); + } + } + + class A { + public static function test() { + return "Test A"; + } + } + + class B extends A { + use TestTrait; + } + + echo B::test(); + +?> +--EXPECT-- Forwarded Test A
\ No newline at end of file diff --git a/Zend/tests/traits/static_get_called_class.phpt b/Zend/tests/traits/static_get_called_class.phpt index dc29ecefa2..bd7a603712 100644 --- a/Zend/tests/traits/static_get_called_class.phpt +++ b/Zend/tests/traits/static_get_called_class.phpt @@ -1,24 +1,24 @@ ---TEST--
-Traits and get_called_class().
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return get_called_class();
- }
- }
-
- class A {
- use TestTrait;
- }
-
- class B extends A { }
-
- echo B::test();
-
-?>
---EXPECT--
+--TEST-- +Traits and get_called_class(). +--CREDITS-- +Simas Toleikis simast@gmail.com +--FILE-- +<?php + + trait TestTrait { + public static function test() { + return get_called_class(); + } + } + + class A { + use TestTrait; + } + + class B extends A { } + + echo B::test(); + +?> +--EXPECT-- B
\ No newline at end of file diff --git a/Zend/tests/traits/trait_constant_001.phpt b/Zend/tests/traits/trait_constant_001.phpt index 0fd8ff921b..590949c2f6 100644 --- a/Zend/tests/traits/trait_constant_001.phpt +++ b/Zend/tests/traits/trait_constant_001.phpt @@ -1,36 +1,36 @@ ---TEST--
-__TRAIT__: Basics, a constant denoiting the trait of definition.
---FILE--
-<?php
-
-trait TestTrait {
- public static function test() {
- return __TRAIT__;
- }
-}
-
-class Direct {
- use TestTrait;
-}
-
-class IndirectInheritance extends Direct {
-
-}
-
-trait TestTraitIndirect {
- use TestTrait;
-}
-
-class Indirect {
- use TestTraitIndirect;
-}
-
-echo Direct::test()."\n";
-echo IndirectInheritance::test()."\n";
-echo Indirect::test()."\n";
-
-?>
---EXPECT--
-TestTrait
-TestTrait
-TestTrait
+--TEST-- +__TRAIT__: Basics, a constant denoiting the trait of definition. +--FILE-- +<?php + +trait TestTrait { + public static function test() { + return __TRAIT__; + } +} + +class Direct { + use TestTrait; +} + +class IndirectInheritance extends Direct { + +} + +trait TestTraitIndirect { + use TestTrait; +} + +class Indirect { + use TestTraitIndirect; +} + +echo Direct::test()."\n"; +echo IndirectInheritance::test()."\n"; +echo Indirect::test()."\n"; + +?> +--EXPECT-- +TestTrait +TestTrait +TestTrait diff --git a/Zend/tests/traits/trait_constant_002.phpt b/Zend/tests/traits/trait_constant_002.phpt index 327dd44a64..bbafbf210e 100644 --- a/Zend/tests/traits/trait_constant_002.phpt +++ b/Zend/tests/traits/trait_constant_002.phpt @@ -1,27 +1,27 @@ ---TEST--
-__TRAIT__: Use outside of traits.
---FILE--
-<?php
-
- class MyClass {
- static function test() {
- return __TRAIT__;
- }
- }
-
- function someFun() {
- return __TRAIT__;
- }
-
-
- $t = __TRAIT__;
- var_dump($t);
- $t = MyClass::test();
- var_dump($t);
- $t = someFun();
- var_dump($t);
-?>
---EXPECT--
-string(0) ""
-string(0) ""
+--TEST-- +__TRAIT__: Use outside of traits. +--FILE-- +<?php + + class MyClass { + static function test() { + return __TRAIT__; + } + } + + function someFun() { + return __TRAIT__; + } + + + $t = __TRAIT__; + var_dump($t); + $t = MyClass::test(); + var_dump($t); + $t = someFun(); + var_dump($t); +?> +--EXPECT-- +string(0) "" +string(0) "" string(0) ""
\ No newline at end of file diff --git a/Zend/tests/unset_cv05.phpt b/Zend/tests/unset_cv05.phpt index 36fea3bc40..2992e624c3 100644 --- a/Zend/tests/unset_cv05.phpt +++ b/Zend/tests/unset_cv05.phpt @@ -12,18 +12,11 @@ include(dirname(__FILE__).'/../../ext/session/tests/skipif.inc'); --FILE-- <?php $_SESSION = "ok\n"; -echo $_SESSION; session_start(); echo $_SESSION; echo "\nok\n"; ?> --EXPECTF-- -ok - -Warning: session_start(): Cannot send session cookie - headers already sent by (output started at %sunset_cv05.php on line %d - -Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at %sunset_cv05.php:%d) in %sunset_cv05.php on line %d - Notice: Array to string conversion in %sunset_cv05.php on line %d Array ok diff --git a/Zend/tests/use_function/conditional_function_declaration.phpt b/Zend/tests/use_function/conditional_function_declaration.phpt index ccfb96103a..02ac0803f0 100644 --- a/Zend/tests/use_function/conditional_function_declaration.phpt +++ b/Zend/tests/use_function/conditional_function_declaration.phpt @@ -1,5 +1,5 @@ --TEST-- -function that is conditionally defined at runtime should not cause compiler error +function that is conditionally defined is subject to symbol use checks --FILE-- <?php @@ -13,5 +13,5 @@ use function bar\foo; echo "Done"; ?> ---EXPECT-- -Done +--EXPECTF-- +Fatal error: Cannot use function bar\foo as foo because the name is already in use in %s on line %d diff --git a/Zend/tests/use_late_binding_conflict.phpt b/Zend/tests/use_late_binding_conflict.phpt new file mode 100644 index 0000000000..c8514d0b1a --- /dev/null +++ b/Zend/tests/use_late_binding_conflict.phpt @@ -0,0 +1,13 @@ +--TEST-- +Use conflicts are detected for late-bound classes +--FILE-- +<?php + +/* Reverse declaration order disables early-binding */ +class B extends A {} +class A {} +use Foo\B; + +?> +--EXPECTF-- +Fatal error: Cannot use Foo\B as B because the name is already in use in %s on line %d diff --git a/Zend/tests/use_no_eval_conflict.phpt b/Zend/tests/use_no_eval_conflict.phpt new file mode 100644 index 0000000000..cf9014b77d --- /dev/null +++ b/Zend/tests/use_no_eval_conflict.phpt @@ -0,0 +1,13 @@ +--TEST-- +Use conflicts should not occur across eval()s +--FILE-- +<?php + +/* It is important that these two eval()s occur on the same line, + * as this forces them to have the same filename. */ +eval("class A {}"); eval("use Foo\A;"); + +?> +===DONE=== +--EXPECT-- +===DONE=== diff --git a/Zend/zend.h b/Zend/zend.h index 04c9052e28..ad441ace17 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -22,7 +22,7 @@ #ifndef ZEND_H #define ZEND_H -#define ZEND_VERSION "3.1.0-dev" +#define ZEND_VERSION "3.2.0-dev" #define ZEND_ENGINE_3 diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 2479cf0d32..277ec6ea6a 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2518,12 +2518,10 @@ void module_destructor(zend_module_entry *module) /* {{{ */ } #if HAVE_LIBDL -#if !(defined(NETWARE) && defined(APACHE_1_BUILD)) if (module->handle && !getenv("ZEND_DONT_UNLOAD_MODULES")) { DL_UNLOAD(module->handle); } #endif -#endif } /* }}} */ diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 0e04d86dff..dba945129c 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -1342,7 +1342,7 @@ simple_list: case ZEND_ASSIGN_BW_OR: BINARY_OP(" |= ", 90, 91, 90); case ZEND_ASSIGN_BW_AND: BINARY_OP(" &= ", 90, 91, 90); case ZEND_ASSIGN_BW_XOR: BINARY_OP(" ^= ", 90, 91, 90); - case ZEND_POW: BINARY_OP(" **= ", 90, 91, 90); + case ZEND_ASSIGN_POW: BINARY_OP(" **= ", 90, 91, 90); EMPTY_SWITCH_DEFAULT_CASE(); } break; diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 0fb0036b7f..1faf57cf31 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1001,7 +1001,7 @@ ZEND_FUNCTION(get_class) { zval *obj = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o!", &obj) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o", &obj) == FAILURE) { RETURN_FALSE; } @@ -1231,6 +1231,7 @@ ZEND_FUNCTION(get_object_vars) HashTable *properties; zend_string *key; zend_object *zobj; + zend_ulong num_key; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_OBJECT(obj) @@ -1251,32 +1252,50 @@ ZEND_FUNCTION(get_object_vars) if (!zobj->ce->default_properties_count && properties == zobj->properties && !ZEND_HASH_GET_APPLY_COUNT(properties)) { /* fast copy */ if (EXPECTED(zobj->handlers == &std_object_handlers)) { - if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) { - GC_REFCOUNT(properties)++; - } - RETURN_ARR(properties); + RETURN_ARR(zend_proptable_to_symtable(properties, 0)); } - RETURN_ARR(zend_array_dup(properties)); + RETURN_ARR(zend_proptable_to_symtable(properties, 1)); } else { array_init_size(return_value, zend_hash_num_elements(properties)); - ZEND_HASH_FOREACH_STR_KEY_VAL_IND(properties, key, value) { - if (key) { - if (zend_check_property_access(zobj, key) == SUCCESS) { - if (Z_ISREF_P(value) && Z_REFCOUNT_P(value) == 1) { - value = Z_REFVAL_P(value); - } - if (Z_REFCOUNTED_P(value)) { - Z_ADDREF_P(value); - } - if (ZSTR_VAL(key)[0] == 0) { - const char *prop_name, *class_name; - size_t prop_len; - zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_len); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), prop_name, prop_len, value); - } else { - zend_hash_add_new(Z_ARRVAL_P(return_value), key, value); - } + ZEND_HASH_FOREACH_KEY_VAL(properties, num_key, key, value) { + zend_bool unmangle = 0; + if (Z_TYPE_P(value) == IS_INDIRECT) { + value = Z_INDIRECT_P(value); + if (UNEXPECTED(Z_ISUNDEF_P(value))) { + continue; + } + + ZEND_ASSERT(key); + if (zend_check_property_access(zobj, key) == FAILURE) { + continue; + } + unmangle = 1; + } + + if (Z_ISREF_P(value) && Z_REFCOUNT_P(value) == 1) { + value = Z_REFVAL_P(value); + } + Z_TRY_ADDREF_P(value); + + if (UNEXPECTED(!key)) { + /* This case is only possible due to loopholes, e.g. ArrayObject */ + zend_hash_index_add(Z_ARRVAL_P(return_value), num_key, value); + } else if (unmangle && ZSTR_VAL(key)[0] == 0) { + const char *prop_name, *class_name; + size_t prop_len; + zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_len); + /* We assume here that a mangled property name is never + * numeric. This is probably a safe assumption, but + * theoretically someone might write an extension with + * private, numeric properties. Well, too bad. + */ + zend_hash_str_add_new(Z_ARRVAL_P(return_value), prop_name, prop_len, value); + } else { + if (ZEND_HANDLE_NUMERIC(key, num_key)) { + zend_hash_index_add(Z_ARRVAL_P(return_value), num_key, value); + } else { + zend_hash_add_new(Z_ARRVAL_P(return_value), key, value); } } } ZEND_HASH_FOREACH_END(); diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index eb726484f5..33e9c647ea 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -34,9 +34,6 @@ #define ZEND_CLOSURE_PROPERTY_ERROR() \ zend_throw_error(NULL, "Closure object cannot have properties") -/* reuse bit to mark "fake" closures (it wasn't used for functions before) */ -#define ZEND_ACC_FAKE_CLOSURE ZEND_ACC_INTERFACE - typedef struct _zend_closure { zend_object std; zend_function func; diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 63359dfa39..3fe46292f2 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -301,12 +301,14 @@ void zend_file_context_begin(zend_file_context *prev_context) /* {{{ */ FC(in_namespace) = 0; FC(has_bracketed_namespaces) = 0; FC(declarables).ticks = 0; + zend_hash_init(&FC(seen_symbols), 8, NULL, NULL, 0); } /* }}} */ void zend_file_context_end(zend_file_context *prev_context) /* {{{ */ { zend_end_namespace(); + zend_hash_destroy(&FC(seen_symbols)); CG(file_context) = *prev_context; } /* }}} */ @@ -318,12 +320,27 @@ void zend_init_compiler_data_structures(void) /* {{{ */ CG(active_class_entry) = NULL; CG(in_compilation) = 0; CG(start_lineno) = 0; - zend_hash_init(&CG(const_filenames), 8, NULL, NULL, 0); CG(encoding_declared) = 0; } /* }}} */ +static void zend_register_seen_symbol(zend_string *name, uint32_t kind) { + zval *zv = zend_hash_find(&FC(seen_symbols), name); + if (zv) { + Z_LVAL_P(zv) |= kind; + } else { + zval tmp; + ZVAL_LONG(&tmp, kind); + zend_hash_add_new(&FC(seen_symbols), name, &tmp); + } +} + +static zend_bool zend_have_seen_symbol(zend_string *name, uint32_t kind) { + zval *zv = zend_hash_find(&FC(seen_symbols), name); + return zv && (Z_LVAL_P(zv) & kind) != 0; +} + ZEND_API void file_handle_dtor(zend_file_handle *fh) /* {{{ */ { @@ -349,7 +366,6 @@ void shutdown_compiler(void) /* {{{ */ zend_stack_destroy(&CG(loop_var_stack)); zend_stack_destroy(&CG(delayed_oplines_stack)); zend_hash_destroy(&CG(filenames_table)); - zend_hash_destroy(&CG(const_filenames)); zend_arena_destroy(CG(arena)); } /* }}} */ @@ -1861,22 +1877,6 @@ ZEND_API size_t zend_dirname(char *path, size_t len) return len; } } -#elif defined(NETWARE) - /* - * Find the first occurrence of : from the left - * move the path pointer to the position just after : - * increment the len_adjust to the length of path till colon character(inclusive) - * If there is no character beyond : simple return len - */ - char *colonpos = NULL; - colonpos = strchr(path, ':'); - if (colonpos != NULL) { - len_adjust = ((colonpos - path) + 1); - path += len_adjust; - if (len_adjust == len) { - return len; - } - } #endif if (len == 0) { @@ -1901,20 +1901,9 @@ ZEND_API size_t zend_dirname(char *path, size_t len) } if (end < path) { /* No slash found, therefore return '.' */ -#ifdef NETWARE - if (len_adjust == 0) { - path[0] = '.'; - path[1] = '\0'; - return 1; /* only one character */ - } else { - path[0] = '\0'; - return len_adjust; - } -#else path[0] = '.'; path[1] = '\0'; return 1 + len_adjust; -#endif } /* Strip slashes which came before the file name */ @@ -5513,6 +5502,7 @@ static void zend_begin_func_decl(znode *result, zend_op_array *op_array, zend_as key = zend_build_runtime_definition_key(lcname, decl->lex_pos); zend_hash_update_ptr(CG(function_table), key, op_array); + zend_register_seen_symbol(lcname, ZEND_SYMBOL_FUNCTION); if (op_array->fn_flags & ZEND_ACC_CLOSURE) { opline = zend_emit_op_tmp(result, ZEND_DECLARE_LAMBDA_FUNCTION, NULL, NULL); @@ -5914,6 +5904,8 @@ void zend_compile_class_decl(zend_ast *ast) /* {{{ */ "because the name is already in use", ZSTR_VAL(name)); } } + + zend_register_seen_symbol(lcname, ZEND_SYMBOL_CLASS); } else { name = zend_generate_anon_class_name(decl->lex_pos); lcname = zend_string_tolower(name); @@ -6082,19 +6074,19 @@ void zend_compile_class_decl(zend_ast *ast) /* {{{ */ static HashTable *zend_get_import_ht(uint32_t type) /* {{{ */ { switch (type) { - case T_CLASS: + case ZEND_SYMBOL_CLASS: if (!FC(imports)) { FC(imports) = emalloc(sizeof(HashTable)); zend_hash_init(FC(imports), 8, NULL, str_dtor, 0); } return FC(imports); - case T_FUNCTION: + case ZEND_SYMBOL_FUNCTION: if (!FC(imports_function)) { FC(imports_function) = emalloc(sizeof(HashTable)); zend_hash_init(FC(imports_function), 8, NULL, str_dtor, 0); } return FC(imports_function); - case T_CONST: + case ZEND_SYMBOL_CONST: if (!FC(imports_const)) { FC(imports_const) = emalloc(sizeof(HashTable)); zend_hash_init(FC(imports_const), 8, NULL, str_dtor, 0); @@ -6110,11 +6102,11 @@ static HashTable *zend_get_import_ht(uint32_t type) /* {{{ */ static char *zend_get_use_type_str(uint32_t type) /* {{{ */ { switch (type) { - case T_CLASS: + case ZEND_SYMBOL_CLASS: return ""; - case T_FUNCTION: + case ZEND_SYMBOL_FUNCTION: return " function"; - case T_CONST: + case ZEND_SYMBOL_CONST: return " const"; EMPTY_SWITCH_DEFAULT_CASE() } @@ -6134,41 +6126,6 @@ static void zend_check_already_in_use(uint32_t type, zend_string *old_name, zend } /* }}} */ -static void zend_check_use_conflict( - uint32_t type, zend_string *old_name, zend_string *new_name, zend_string *lookup_name) { - switch (type) { - case T_CLASS: - { - zend_class_entry *ce = zend_hash_find_ptr(CG(class_table), lookup_name); - if (ce && ce->type == ZEND_USER_CLASS - && ce->info.user.filename == CG(compiled_filename) - ) { - zend_check_already_in_use(type, old_name, new_name, lookup_name); - } - break; - } - case T_FUNCTION: - { - zend_function *fn = zend_hash_find_ptr(CG(function_table), lookup_name); - if (fn && fn->type == ZEND_USER_FUNCTION - && fn->op_array.filename == CG(compiled_filename) - ) { - zend_check_already_in_use(type, old_name, new_name, lookup_name); - } - break; - } - case T_CONST: - { - zend_string *filename = zend_hash_find_ptr(&CG(const_filenames), lookup_name); - if (filename && filename == CG(compiled_filename)) { - zend_check_already_in_use(type, old_name, new_name, lookup_name); - } - break; - } - EMPTY_SWITCH_DEFAULT_CASE() - } -} - void zend_compile_use(zend_ast *ast) /* {{{ */ { zend_ast_list *list = zend_ast_get_list(ast); @@ -6176,7 +6133,7 @@ void zend_compile_use(zend_ast *ast) /* {{{ */ zend_string *current_ns = FC(current_namespace); uint32_t type = ast->attr; HashTable *current_import = zend_get_import_ht(type); - zend_bool case_sensitive = type == T_CONST; + zend_bool case_sensitive = type == ZEND_SYMBOL_CONST; for (i = 0; i < list->children; ++i) { zend_ast *use_ast = list->child[i]; @@ -6214,7 +6171,7 @@ void zend_compile_use(zend_ast *ast) /* {{{ */ lookup_name = zend_string_tolower(new_name); } - if (type == T_CLASS && zend_is_reserved_class_name(new_name)) { + if (type == ZEND_SYMBOL_CLASS && zend_is_reserved_class_name(new_name)) { zend_error_noreturn(E_COMPILE_ERROR, "Cannot use %s as %s because '%s' " "is a special class name", ZSTR_VAL(old_name), ZSTR_VAL(new_name), ZSTR_VAL(new_name)); } @@ -6225,11 +6182,15 @@ void zend_compile_use(zend_ast *ast) /* {{{ */ ZSTR_VAL(ns_name)[ZSTR_LEN(current_ns)] = '\\'; memcpy(ZSTR_VAL(ns_name) + ZSTR_LEN(current_ns) + 1, ZSTR_VAL(lookup_name), ZSTR_LEN(lookup_name)); - zend_check_use_conflict(type, old_name, new_name, ns_name); + if (zend_have_seen_symbol(ns_name, type)) { + zend_check_already_in_use(type, old_name, new_name, ns_name); + } zend_string_free(ns_name); } else { - zend_check_use_conflict(type, old_name, new_name, lookup_name); + if (zend_have_seen_symbol(lookup_name, type)) { + zend_check_already_in_use(type, old_name, new_name, lookup_name); + } } zend_string_addref(old_name); @@ -6302,7 +6263,7 @@ void zend_compile_const_decl(zend_ast *ast) /* {{{ */ zend_emit_op(NULL, ZEND_DECLARE_CONST, &name_node, &value_node); - zend_hash_add_ptr(&CG(const_filenames), name, CG(compiled_filename)); + zend_register_seen_symbol(name, ZEND_SYMBOL_CONST); } } /* }}}*/ diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 422404d0a3..ea528811c7 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -121,6 +121,8 @@ typedef struct _zend_file_context { HashTable *imports; HashTable *imports_function; HashTable *imports_const; + + HashTable seen_symbols; } zend_file_context; typedef union _zend_parser_stack_elem { @@ -254,6 +256,7 @@ typedef struct _zend_oparray_context { #define ZEND_ACC_CLOSURE 0x100000 +#define ZEND_ACC_FAKE_CLOSURE 0x40 #define ZEND_ACC_GENERATOR 0x800000 #define ZEND_ACC_NO_RT_ARENA 0x80000 @@ -474,6 +477,7 @@ struct _zend_execute_data { #define ZEND_CALL_ALLOCATED (1 << 7) #define ZEND_CALL_GENERATOR (1 << 8) #define ZEND_CALL_DYNAMIC (1 << 9) +#define ZEND_CALL_FAKE_CLOSURE (1 << 10) #define ZEND_CALL_INFO_SHIFT 16 @@ -963,6 +967,11 @@ static zend_always_inline int zend_check_arg_send_type(const zend_function *zf, #define ZEND_ARRAY_NOT_PACKED (1<<1) #define ZEND_ARRAY_SIZE_SHIFT 2 +/* For "use" AST nodes and the seen symbol table */ +#define ZEND_SYMBOL_CLASS (1<<0) +#define ZEND_SYMBOL_FUNCTION (1<<1) +#define ZEND_SYMBOL_CONST (1<<2) + /* Pseudo-opcodes that are used only temporarily during compilation */ #define ZEND_GOTO 253 #define ZEND_BRK 254 diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 647428f959..a2df1ef048 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -584,7 +584,7 @@ static inline void zend_assign_to_variable_reference(zval *variable_ptr, zval *v zval_dtor_func(garbage); return; } else { - GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr); + gc_check_possible_root(garbage); } } ZVAL_REF(variable_ptr, ref); @@ -1294,7 +1294,7 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim, zend_long offset; offset = zend_check_string_offset(dim, BP_VAR_W); - if (offset < (zend_long)(-Z_STRLEN_P(str))) { + if (offset < -(zend_long)Z_STRLEN_P(str)) { /* Error on negative offset */ zend_error(E_WARNING, "Illegal string offset: " ZEND_LONG_FMT, offset); if (result) { @@ -2063,12 +2063,12 @@ static zend_always_inline void i_free_compiled_variables(zend_execute_data *exec zval *end = cv + EX(func)->op_array.last_var; while (EXPECTED(cv != end)) { if (Z_REFCOUNTED_P(cv)) { - if (!Z_DELREF_P(cv)) { - zend_refcounted *r = Z_COUNTED_P(cv); + zend_refcounted *r = Z_COUNTED_P(cv); + if (!--GC_REFCOUNT(r)) { ZVAL_NULL(cv); zval_dtor_func(r); } else { - GC_ZVAL_CHECK_POSSIBLE_ROOT(cv); + gc_check_possible_root(r); } } cv++; @@ -2659,6 +2659,9 @@ static zend_never_inline zend_execute_data *zend_init_dynamic_call_object(zval * ZEND_ASSERT(GC_TYPE((zend_object*)fbc->common.prototype) == IS_OBJECT); GC_REFCOUNT((zend_object*)fbc->common.prototype)++; call_info |= ZEND_CALL_CLOSURE; + if (fbc->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { + call_info |= ZEND_CALL_FAKE_CLOSURE; + } } else if (object) { call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ @@ -2858,8 +2861,9 @@ already_compiled: } /* }}} */ -static zend_never_inline int zend_do_fcall_overloaded(zend_function *fbc, zend_execute_data *call, zval *ret) /* {{{ */ +ZEND_API int ZEND_FASTCALL zend_do_fcall_overloaded(zend_execute_data *call, zval *ret) /* {{{ */ { + zend_function *fbc = call->func; zend_object *object; /* Not sure what should be done here if it's a static method */ diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 82c6a4a415..c9628d8d26 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -101,8 +101,7 @@ static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval return variable_ptr; } else { /* we need to split */ /* optimized version of GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr) */ - if ((Z_COLLECTABLE_P(variable_ptr)) && - UNEXPECTED(!GC_INFO(garbage))) { + if (UNEXPECTED(GC_MAY_LEAK(garbage))) { gc_possible_root(garbage); } } @@ -216,12 +215,12 @@ static zend_always_inline void zend_vm_stack_free_extra_args_ex(uint32_t call_in do { p--; if (Z_REFCOUNTED_P(p)) { - if (!Z_DELREF_P(p)) { - zend_refcounted *r = Z_COUNTED_P(p); + zend_refcounted *r = Z_COUNTED_P(p); + if (!--GC_REFCOUNT(r)) { ZVAL_NULL(p); zval_dtor_func(r); } else { - GC_ZVAL_CHECK_POSSIBLE_ROOT(p); + gc_check_possible_root(r); } } } while (p != end); @@ -320,6 +319,8 @@ ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table); void zend_free_compiled_variables(zend_execute_data *execute_data); void zend_cleanup_unfinished_execution(zend_execute_data *execute_data, uint32_t op_num, uint32_t catch_op_num); +ZEND_API int ZEND_FASTCALL zend_do_fcall_overloaded(zend_execute_data *call, zval *ret); + #define CACHE_ADDR(num) \ ((void**)((char*)EX_RUN_TIME_CACHE() + (num))) diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index cba929a7fd..4a4f2f83f3 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -815,9 +815,15 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) / } if (UNEXPECTED(func->op_array.fn_flags & ZEND_ACC_CLOSURE)) { + uint32_t call_info; + ZEND_ASSERT(GC_TYPE((zend_object*)func->op_array.prototype) == IS_OBJECT); GC_REFCOUNT((zend_object*)func->op_array.prototype)++; - ZEND_ADD_CALL_FLAG(call, ZEND_CALL_CLOSURE); + call_info = ZEND_CALL_CLOSURE; + if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { + call_info |= ZEND_CALL_FAKE_CLOSURE; + } + ZEND_ADD_CALL_FLAG(call, call_info); } if (func->type == ZEND_USER_FUNCTION) { diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h index 862c18ad75..c69c641fd5 100644 --- a/Zend/zend_extensions.h +++ b/Zend/zend_extensions.h @@ -46,7 +46,7 @@ You can use the following macro to check the extension API version for compatibi /* The first number is the engine version and the rest is the date (YYYYMMDD). * This way engine 2/3 API no. is always greater than engine 1 API no.. */ -#define ZEND_EXTENSION_API_NO 320160303 +#define ZEND_EXTENSION_API_NO 320160731 typedef struct _zend_extension_version_info { int zend_extension_api_no; diff --git a/Zend/zend_gc.h b/Zend/zend_gc.h index eb8e500b03..be6b8c44fd 100644 --- a/Zend/zend_gc.h +++ b/Zend/zend_gc.h @@ -119,9 +119,6 @@ ZEND_API void gc_reset(void); ZEND_API int zend_gc_collect_cycles(void); END_EXTERN_C() -#define GC_ZVAL_CHECK_POSSIBLE_ROOT(z) \ - gc_check_possible_root((z)) - #define GC_REMOVE_FROM_BUFFER(p) do { \ zend_refcounted *_p = (zend_refcounted*)(p); \ if (GC_ADDRESS(GC_INFO(_p))) { \ @@ -129,11 +126,23 @@ END_EXTERN_C() } \ } while (0) -static zend_always_inline void gc_check_possible_root(zval *z) +#define GC_MAY_LEAK(ref) \ + ((GC_TYPE_INFO(ref) & \ + (GC_INFO_MASK | (GC_COLLECTABLE << GC_FLAGS_SHIFT))) == \ + (GC_COLLECTABLE << GC_FLAGS_SHIFT)) + +static zend_always_inline void gc_check_possible_root(zend_refcounted *ref) { - ZVAL_DEREF(z); - if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) { - gc_possible_root(Z_COUNTED_P(z)); + if (GC_TYPE(ref) == IS_REFERENCE) { + zval *zv = &((zend_reference*)ref)->val; + + if (!Z_REFCOUNTED_P(zv)) { + return; + } + ref = Z_COUNTED_P(zv); + } + if (UNEXPECTED(GC_MAY_LEAK(ref))) { + gc_possible_root(ref); } } diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index fbbf503c41..7662e263b1 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -105,8 +105,6 @@ struct _zend_compiler_globals { uint32_t compiler_options; /* set of ZEND_COMPILE_* constants */ - HashTable const_filenames; - zend_oparray_context context; zend_file_context file_context; diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index fdbdcac5a0..836c5a5a44 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -171,7 +171,7 @@ static const uint32_t uninitialized_bucket[-HT_MIN_MASK] = ZEND_API void ZEND_FASTCALL _zend_hash_init(HashTable *ht, uint32_t nSize, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC) { GC_REFCOUNT(ht) = 1; - GC_TYPE_INFO(ht) = IS_ARRAY; + GC_TYPE_INFO(ht) = IS_ARRAY | (persistent ? 0 : (GC_COLLECTABLE << GC_FLAGS_SHIFT)); ht->u.flags = (persistent ? HASH_FLAG_PERSISTENT : 0) | HASH_FLAG_APPLY_PROTECTION | HASH_FLAG_STATIC_KEYS; ht->nTableSize = zend_hash_check_size(nSize); ht->nTableMask = HT_MIN_MASK; @@ -728,9 +728,6 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht, ht->pDestructor(&p->val); } ZVAL_COPY_VALUE(&p->val, pData); - if ((zend_long)h >= (zend_long)ht->nNextFreeElement) { - ht->nNextFreeElement = h < ZEND_LONG_MAX ? h + 1 : ZEND_LONG_MAX; - } return &p->val; } else { /* we have to keep the order :( */ goto convert_to_hash; @@ -1763,7 +1760,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source) ALLOC_HASHTABLE(target); GC_REFCOUNT(target) = 1; - GC_TYPE_INFO(target) = IS_ARRAY; + GC_TYPE_INFO(target) = IS_ARRAY | (GC_COLLECTABLE << GC_FLAGS_SHIFT); target->nTableSize = source->nTableSize; target->pDestructor = source->pDestructor; @@ -2480,6 +2477,122 @@ ZEND_API int ZEND_FASTCALL _zend_handle_numeric_str_ex(const char *key, size_t l } } +/* Takes a "symtable" hashtable (contains integer and non-numeric string keys) + * and converts it to a "proptable" (contains only string keys). + * If the symtable didn't need duplicating, its refcount is incremented. + */ +ZEND_API HashTable* ZEND_FASTCALL zend_symtable_to_proptable(HashTable *ht) +{ + zend_ulong num_key; + zend_string *str_key; + zval *zv; + + if (UNEXPECTED(HT_IS_PACKED(ht))) { + goto convert; + } + + ZEND_HASH_FOREACH_KEY_VAL(ht, num_key, str_key, zv) { + if (!str_key) { + goto convert; + } + } ZEND_HASH_FOREACH_END(); + + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_REFCOUNT(ht)++; + } + + return ht; + +convert: + { + HashTable *new_ht = emalloc(sizeof(HashTable)); + + zend_hash_init(new_ht, zend_hash_num_elements(ht), NULL, ZVAL_PTR_DTOR, 0); + + ZEND_HASH_FOREACH_KEY_VAL(ht, num_key, str_key, zv) { + if (!str_key) { + str_key = zend_long_to_str(num_key); + zend_string_delref(str_key); + } + do { + if (Z_OPT_REFCOUNTED_P(zv)) { + if (Z_ISREF_P(zv) && Z_REFCOUNT_P(zv) == 1) { + zv = Z_REFVAL_P(zv); + if (!Z_OPT_REFCOUNTED_P(zv)) { + break; + } + } + Z_ADDREF_P(zv); + } + } while (0); + zend_hash_update(new_ht, str_key, zv); + } ZEND_HASH_FOREACH_END(); + + return new_ht; + } +} + +/* Takes a "proptable" hashtable (contains only string keys) and converts it to + * a "symtable" (contains integer and non-numeric string keys). + * If the proptable didn't need duplicating, its refcount is incremented. + */ +ZEND_API HashTable* ZEND_FASTCALL zend_proptable_to_symtable(HashTable *ht, zend_bool always_duplicate) +{ + zend_ulong num_key; + zend_string *str_key; + zval *zv; + + ZEND_HASH_FOREACH_KEY_VAL(ht, num_key, str_key, zv) { + /* The `str_key &&` here might seem redundant: property tables should + * only have string keys. Unfortunately, this isn't true, at the very + * least because of ArrayObject, which stores a symtable where the + * property table should be. + */ + if (str_key && ZEND_HANDLE_NUMERIC(str_key, num_key)) { + goto convert; + } + } ZEND_HASH_FOREACH_END(); + + if (always_duplicate) { + return zend_array_dup(ht); + } + + if (EXPECTED(!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE))) { + GC_REFCOUNT(ht)++; + } + + return ht; + +convert: + { + HashTable *new_ht = emalloc(sizeof(HashTable)); + + zend_hash_init(new_ht, zend_hash_num_elements(ht), NULL, ZVAL_PTR_DTOR, 0); + + ZEND_HASH_FOREACH_KEY_VAL(ht, num_key, str_key, zv) { + do { + if (Z_OPT_REFCOUNTED_P(zv)) { + if (Z_ISREF_P(zv) && Z_REFCOUNT_P(zv) == 1) { + zv = Z_REFVAL_P(zv); + if (!Z_OPT_REFCOUNTED_P(zv)) { + break; + } + } + Z_ADDREF_P(zv); + } + } while (0); + /* Again, thank ArrayObject for `!str_key ||`. */ + if (!str_key || ZEND_HANDLE_NUMERIC(str_key, num_key)) { + zend_hash_index_update(new_ht, num_key, zv); + } else { + zend_hash_update(new_ht, str_key, zv); + } + } ZEND_HASH_FOREACH_END(); + + return new_ht; + } +} + /* * Local variables: * tab-width: 4 diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index 190551d3f1..e8c01f5dbd 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -247,6 +247,8 @@ ZEND_API uint32_t zend_array_count(HashTable *ht); ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source); ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht); ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht); +ZEND_API HashTable* ZEND_FASTCALL zend_symtable_to_proptable(HashTable *ht); +ZEND_API HashTable* ZEND_FASTCALL zend_proptable_to_symtable(HashTable *ht, zend_bool always_duplicate); ZEND_API int ZEND_FASTCALL _zend_handle_numeric_str_ex(const char *key, size_t length, zend_ulong *idx); diff --git a/Zend/zend_ini_scanner.c b/Zend/zend_ini_scanner.c index 08749751eb..37b15298cf 100644 --- a/Zend/zend_ini_scanner.c +++ b/Zend/zend_ini_scanner.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.14.3 */ +/* Generated by re2c 0.13.5 */ #line 1 "Zend/zend_ini_scanner.l" /* +----------------------------------------------------------------------+ @@ -453,15 +453,16 @@ yyc_INITIAL: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, }; - YYDEBUG(1, *YYCURSOR); + + YYDEBUG(0, *YYCURSOR); YYFILL(5); yych = *YYCURSOR; YYDEBUG(-1, yych); switch (yych) { - case '\t': goto yy5; - case '\n': goto yy7; - case '\r': goto yy9; - case ' ': goto yy10; + case '\t': goto yy4; + case '\n': goto yy6; + case '\r': goto yy8; + case ' ': goto yy9; case '!': case '"': case '$': @@ -472,7 +473,7 @@ yyc_INITIAL: case '{': case '|': case '}': - case '~': goto yy11; + case '~': goto yy10; case '%': case '\'': case '*': @@ -486,29 +487,29 @@ yyc_INITIAL: case '>': case '?': case '@': - case ']': goto yy13; - case ';': goto yy14; - case '=': goto yy16; + case ']': goto yy12; + case ';': goto yy13; + case '=': goto yy15; case 'F': - case 'f': goto yy18; + case 'f': goto yy17; case 'N': - case 'n': goto yy19; + case 'n': goto yy18; case 'O': - case 'o': goto yy20; + case 'o': goto yy19; case 'T': - case 't': goto yy21; + case 't': goto yy20; case 'Y': - case 'y': goto yy22; - case '[': goto yy23; - default: goto yy3; + case 'y': goto yy21; + case '[': goto yy22; + default: goto yy2; } -yy3: - YYDEBUG(3, *YYCURSOR); +yy2: + YYDEBUG(2, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy26; -yy4: - YYDEBUG(4, *YYCURSOR); + goto yy25; +yy3: + YYDEBUG(3, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 483 "Zend/zend_ini_scanner.l" { /* Get option name */ @@ -520,94 +521,94 @@ yy4: RETURN_TOKEN(TC_LABEL, yytext, yyleng); } -#line 524 "Zend/zend_ini_scanner.c" -yy5: - YYDEBUG(5, *YYCURSOR); +#line 525 "Zend/zend_ini_scanner.c" +yy4: + YYDEBUG(4, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - goto yy64; -yy6: - YYDEBUG(6, *YYCURSOR); + goto yy63; +yy5: + YYDEBUG(5, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 629 "Zend/zend_ini_scanner.l" { /* eat whitespace */ goto restart; } -#line 538 "Zend/zend_ini_scanner.c" +#line 539 "Zend/zend_ini_scanner.c" +yy6: + YYDEBUG(6, *YYCURSOR); + ++YYCURSOR; yy7: YYDEBUG(7, *YYCURSOR); - ++YYCURSOR; -yy8: - YYDEBUG(8, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 634 "Zend/zend_ini_scanner.l" { SCNG(lineno)++; return END_OF_LINE; } -#line 550 "Zend/zend_ini_scanner.c" +#line 551 "Zend/zend_ini_scanner.c" +yy8: + YYDEBUG(8, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy66; + goto yy7; yy9: YYDEBUG(9, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy67; - goto yy8; -yy10: - YYDEBUG(10, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy26; - if (yych <= '\t') goto yy63; - goto yy67; + if (yych <= 0x08) goto yy25; + if (yych <= '\t') goto yy62; + goto yy66; } else { - if (yych == '\r') goto yy68; - goto yy26; + if (yych == '\r') goto yy67; + goto yy25; } } else { if (yych <= ';') { - if (yych <= ' ') goto yy65; - if (yych <= ':') goto yy26; - goto yy58; + if (yych <= ' ') goto yy64; + if (yych <= ':') goto yy25; + goto yy57; } else { - if (yych == '=') goto yy56; - goto yy26; + if (yych == '=') goto yy55; + goto yy25; } } -yy11: - YYDEBUG(11, *YYCURSOR); +yy10: + YYDEBUG(10, *YYCURSOR); ++YYCURSOR; - YYDEBUG(12, *YYCURSOR); + YYDEBUG(11, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 557 "Zend/zend_ini_scanner.l" { /* Disallow these chars outside option values */ return yytext[0]; } -#line 588 "Zend/zend_ini_scanner.c" +#line 589 "Zend/zend_ini_scanner.c" +yy12: + YYDEBUG(12, *YYCURSOR); + yych = *++YYCURSOR; + goto yy25; yy13: YYDEBUG(13, *YYCURSOR); - yych = *++YYCURSOR; - goto yy26; -yy14: - YYDEBUG(14, *YYCURSOR); yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); - goto yy59; - YYDEBUG(15, *YYCURSOR); + goto yy58; + YYDEBUG(14, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 650 "Zend/zend_ini_scanner.l" { return 0; } -#line 604 "Zend/zend_ini_scanner.c" -yy16: - YYDEBUG(16, *YYCURSOR); +#line 605 "Zend/zend_ini_scanner.c" +yy15: + YYDEBUG(15, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy57; -yy17: - YYDEBUG(17, *YYCURSOR); + goto yy56; +yy16: + YYDEBUG(16, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 493 "Zend/zend_ini_scanner.l" { /* Start option value */ @@ -618,61 +619,61 @@ yy17: } return '='; } -#line 622 "Zend/zend_ini_scanner.c" +#line 623 "Zend/zend_ini_scanner.c" +yy17: + YYDEBUG(17, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy52; + if (yych == 'a') goto yy52; + goto yy25; yy18: YYDEBUG(18, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy53; - if (yych == 'a') goto yy53; - goto yy26; -yy19: - YYDEBUG(19, *YYCURSOR); - yych = *++YYCURSOR; if (yych <= 'U') { - if (yych == 'O') goto yy44; - if (yych <= 'T') goto yy26; - goto yy45; + if (yych == 'O') goto yy43; + if (yych <= 'T') goto yy25; + goto yy44; } else { if (yych <= 'o') { - if (yych <= 'n') goto yy26; - goto yy44; + if (yych <= 'n') goto yy25; + goto yy43; } else { - if (yych == 'u') goto yy45; - goto yy26; + if (yych == 'u') goto yy44; + goto yy25; } } -yy20: - YYDEBUG(20, *YYCURSOR); +yy19: + YYDEBUG(19, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { - if (yych == 'F') goto yy38; - if (yych <= 'M') goto yy26; - goto yy31; + if (yych == 'F') goto yy37; + if (yych <= 'M') goto yy25; + goto yy30; } else { if (yych <= 'f') { - if (yych <= 'e') goto yy26; - goto yy38; + if (yych <= 'e') goto yy25; + goto yy37; } else { - if (yych == 'n') goto yy31; - goto yy26; + if (yych == 'n') goto yy30; + goto yy25; } } +yy20: + YYDEBUG(20, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy35; + if (yych == 'r') goto yy35; + goto yy25; yy21: YYDEBUG(21, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy36; - if (yych == 'r') goto yy36; - goto yy26; + if (yych == 'E') goto yy26; + if (yych == 'e') goto yy26; + goto yy25; yy22: YYDEBUG(22, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy27; - if (yych == 'e') goto yy27; - goto yy26; -yy23: - YYDEBUG(23, *YYCURSOR); ++YYCURSOR; - YYDEBUG(24, *YYCURSOR); + YYDEBUG(23, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 408 "Zend/zend_ini_scanner.l" { /* Section start */ @@ -684,36 +685,35 @@ yy23: } return TC_SECTION; } -#line 688 "Zend/zend_ini_scanner.c" -yy25: - YYDEBUG(25, *YYCURSOR); +#line 689 "Zend/zend_ini_scanner.c" +yy24: + YYDEBUG(24, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy26: - YYDEBUG(26, *YYCURSOR); +yy25: + YYDEBUG(25, *YYCURSOR); if (yybm[0+yych] & 16) { - goto yy25; + goto yy24; } - if (yych <= '=') goto yy4; - if (yych <= '[') goto yy28; - goto yy4; + if (yych == '[') goto yy27; + goto yy3; +yy26: + YYDEBUG(26, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy30; + if (yych == 's') goto yy30; + goto yy25; yy27: YYDEBUG(27, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy31; - if (yych == 's') goto yy31; - goto yy26; -yy28: - YYDEBUG(28, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(29, *YYCURSOR); + YYDEBUG(28, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy28; + goto yy27; } - YYDEBUG(30, *YYCURSOR); + YYDEBUG(29, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 433 "Zend/zend_ini_scanner.l" { /* Start of option with offset */ @@ -729,302 +729,302 @@ yy28: RETURN_TOKEN(TC_OFFSET, yytext, yyleng); } #line 732 "Zend/zend_ini_scanner.c" -yy31: - YYDEBUG(31, *YYCURSOR); +yy30: + YYDEBUG(30, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(32, *YYCURSOR); + YYDEBUG(31, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy31; + goto yy30; } if (yych <= '\'') { - if (yych <= 0x1F) { + if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x08) goto yy25; - if (yych <= '\t') goto yy34; + if (yych <= 0x08) goto yy24; + if (yych <= '\t') goto yy33; } else { - if (yych != '\r') goto yy25; + if (yych != '\r') goto yy24; } } else { if (yych <= '$') { - if (yych == '#') goto yy25; + if (yych == '#') goto yy24; } else { - if (yych != '&') goto yy25; + if (yych != '&') goto yy24; } } } else { if (yych <= 'Z') { if (yych <= ';') { - if (yych <= ')') goto yy33; - if (yych <= ':') goto yy25; + if (yych <= ')') goto yy32; + if (yych <= ':') goto yy24; } else { - if (yych != '=') goto yy25; + if (yych != '=') goto yy24; } } else { if (yych <= '^') { - if (yych <= '[') goto yy28; - if (yych <= ']') goto yy25; + if (yych <= '[') goto yy27; + if (yych <= ']') goto yy24; } else { - if (yych <= 'z') goto yy25; - if (yych >= 0x7F) goto yy25; + if (yych <= 'z') goto yy24; + if (yych >= 0x7F) goto yy24; } } } -yy33: - YYDEBUG(33, *YYCURSOR); +yy32: + YYDEBUG(32, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 471 "Zend/zend_ini_scanner.l" { /* TRUE value (when used outside option value/offset this causes parse error!) */ RETURN_TOKEN(BOOL_TRUE, "1", 1); } #line 782 "Zend/zend_ini_scanner.c" -yy34: - YYDEBUG(34, *YYCURSOR); +yy33: + YYDEBUG(33, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; + YYDEBUG(34, *YYCURSOR); + if (yych == '\t') goto yy33; + if (yych == ' ') goto yy33; + goto yy32; +yy35: YYDEBUG(35, *YYCURSOR); - if (yych == '\t') goto yy34; - if (yych == ' ') goto yy34; - goto yy33; + yych = *++YYCURSOR; + if (yych == 'U') goto yy36; + if (yych != 'u') goto yy25; yy36: YYDEBUG(36, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy37; - if (yych != 'u') goto yy26; + if (yych == 'E') goto yy30; + if (yych == 'e') goto yy30; + goto yy25; yy37: YYDEBUG(37, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy31; - if (yych == 'e') goto yy31; - goto yy26; + if (yych == 'F') goto yy38; + if (yych != 'f') goto yy25; yy38: YYDEBUG(38, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'F') goto yy39; - if (yych != 'f') goto yy26; -yy39: - YYDEBUG(39, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(40, *YYCURSOR); + YYDEBUG(39, *YYCURSOR); if (yych <= '&') { if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy25; - if (yych <= '\t') goto yy42; + if (yych <= 0x08) goto yy24; + if (yych <= '\t') goto yy41; } else { - if (yych != '\r') goto yy25; + if (yych != '\r') goto yy24; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy39; - if (yych >= '#') goto yy25; + if (yych <= ' ') goto yy38; + if (yych >= '#') goto yy24; } else { - if (yych == '%') goto yy25; + if (yych == '%') goto yy24; } } } else { if (yych <= '=') { if (yych <= ':') { - if (yych <= '\'') goto yy25; - if (yych >= '*') goto yy25; + if (yych <= '\'') goto yy24; + if (yych >= '*') goto yy24; } else { - if (yych == '<') goto yy25; + if (yych == '<') goto yy24; } } else { if (yych <= ']') { - if (yych == '[') goto yy28; - goto yy25; + if (yych == '[') goto yy27; + goto yy24; } else { - if (yych <= '^') goto yy41; - if (yych <= 'z') goto yy25; - if (yych >= 0x7F) goto yy25; + if (yych <= '^') goto yy40; + if (yych <= 'z') goto yy24; + if (yych >= 0x7F) goto yy24; } } } -yy41: - YYDEBUG(41, *YYCURSOR); +yy40: + YYDEBUG(40, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 475 "Zend/zend_ini_scanner.l" { /* FALSE value (when used outside option value/offset this causes parse error!)*/ RETURN_TOKEN(BOOL_FALSE, "", 0); } #line 856 "Zend/zend_ini_scanner.c" -yy42: - YYDEBUG(42, *YYCURSOR); +yy41: + YYDEBUG(41, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; + YYDEBUG(42, *YYCURSOR); + if (yych == '\t') goto yy41; + if (yych == ' ') goto yy41; + goto yy40; +yy43: YYDEBUG(43, *YYCURSOR); - if (yych == '\t') goto yy42; - if (yych == ' ') goto yy42; - goto yy41; -yy44: - YYDEBUG(44, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\'') { if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy26; - if (yych <= '\t') goto yy42; - goto yy41; + if (yych <= 0x08) goto yy25; + if (yych <= '\t') goto yy41; + goto yy40; } else { - if (yych == '\r') goto yy41; - goto yy26; + if (yych == '\r') goto yy40; + goto yy25; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy39; - if (yych <= '"') goto yy41; - goto yy26; + if (yych <= ' ') goto yy38; + if (yych <= '"') goto yy40; + goto yy25; } else { - if (yych == '%') goto yy26; - if (yych <= '&') goto yy41; - goto yy26; + if (yych == '%') goto yy25; + if (yych <= '&') goto yy40; + goto yy25; } } } else { if (yych <= 'N') { if (yych <= ';') { - if (yych <= ')') goto yy41; - if (yych <= ':') goto yy26; - goto yy41; + if (yych <= ')') goto yy40; + if (yych <= ':') goto yy25; + goto yy40; } else { - if (yych == '=') goto yy41; - if (yych <= 'M') goto yy26; - goto yy52; + if (yych == '=') goto yy40; + if (yych <= 'M') goto yy25; + goto yy51; } } else { if (yych <= 'm') { - if (yych == '^') goto yy41; - goto yy26; + if (yych == '^') goto yy40; + goto yy25; } else { - if (yych <= 'n') goto yy52; - if (yych <= 'z') goto yy26; - if (yych <= '~') goto yy41; - goto yy26; + if (yych <= 'n') goto yy51; + if (yych <= 'z') goto yy25; + if (yych <= '~') goto yy40; + goto yy25; } } } +yy44: + YYDEBUG(44, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy45; + if (yych != 'l') goto yy25; yy45: YYDEBUG(45, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'L') goto yy46; - if (yych != 'l') goto yy26; + if (yych != 'l') goto yy25; yy46: YYDEBUG(46, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy47; - if (yych != 'l') goto yy26; -yy47: - YYDEBUG(47, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(48, *YYCURSOR); + YYDEBUG(47, *YYCURSOR); if (yych <= '&') { if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy25; - if (yych <= '\t') goto yy50; + if (yych <= 0x08) goto yy24; + if (yych <= '\t') goto yy49; } else { - if (yych != '\r') goto yy25; + if (yych != '\r') goto yy24; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy47; - if (yych >= '#') goto yy25; + if (yych <= ' ') goto yy46; + if (yych >= '#') goto yy24; } else { - if (yych == '%') goto yy25; + if (yych == '%') goto yy24; } } } else { if (yych <= '=') { if (yych <= ':') { - if (yych <= '\'') goto yy25; - if (yych >= '*') goto yy25; + if (yych <= '\'') goto yy24; + if (yych >= '*') goto yy24; } else { - if (yych == '<') goto yy25; + if (yych == '<') goto yy24; } } else { if (yych <= ']') { - if (yych == '[') goto yy28; - goto yy25; + if (yych == '[') goto yy27; + goto yy24; } else { - if (yych <= '^') goto yy49; - if (yych <= 'z') goto yy25; - if (yych >= 0x7F) goto yy25; + if (yych <= '^') goto yy48; + if (yych <= 'z') goto yy24; + if (yych >= 0x7F) goto yy24; } } } -yy49: - YYDEBUG(49, *YYCURSOR); +yy48: + YYDEBUG(48, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 479 "Zend/zend_ini_scanner.l" { RETURN_TOKEN(NULL_NULL, "", 0); } #line 971 "Zend/zend_ini_scanner.c" -yy50: - YYDEBUG(50, *YYCURSOR); +yy49: + YYDEBUG(49, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; + YYDEBUG(50, *YYCURSOR); + if (yych == '\t') goto yy49; + if (yych == ' ') goto yy49; + goto yy48; +yy51: YYDEBUG(51, *YYCURSOR); - if (yych == '\t') goto yy50; - if (yych == ' ') goto yy50; - goto yy49; + yych = *++YYCURSOR; + if (yych == 'E') goto yy38; + if (yych == 'e') goto yy38; + goto yy25; yy52: YYDEBUG(52, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy39; - if (yych == 'e') goto yy39; - goto yy26; + if (yych == 'L') goto yy53; + if (yych != 'l') goto yy25; yy53: YYDEBUG(53, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy54; - if (yych != 'l') goto yy26; + if (yych == 'S') goto yy54; + if (yych != 's') goto yy25; yy54: YYDEBUG(54, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy55; - if (yych != 's') goto yy26; + if (yych == 'E') goto yy38; + if (yych == 'e') goto yy38; + goto yy25; yy55: YYDEBUG(55, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy39; - if (yych == 'e') goto yy39; - goto yy26; -yy56: - YYDEBUG(56, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; +yy56: + YYDEBUG(56, *YYCURSOR); + if (yych == '\t') goto yy55; + if (yych == ' ') goto yy55; + goto yy16; yy57: YYDEBUG(57, *YYCURSOR); - if (yych == '\t') goto yy56; - if (yych == ' ') goto yy56; - goto yy17; -yy58: - YYDEBUG(58, *YYCURSOR); ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; -yy59: - YYDEBUG(59, *YYCURSOR); +yy58: + YYDEBUG(58, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy58; + goto yy57; } - if (yych >= '\v') goto yy62; + if (yych >= '\r') goto yy61; +yy59: + YYDEBUG(59, *YYCURSOR); + ++YYCURSOR; yy60: YYDEBUG(60, *YYCURSOR); - ++YYCURSOR; -yy61: - YYDEBUG(61, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 639 "Zend/zend_ini_scanner.l" { /* Comment */ @@ -1033,96 +1033,96 @@ yy61: return END_OF_LINE; } #line 1036 "Zend/zend_ini_scanner.c" +yy61: + YYDEBUG(61, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy59; + goto yy60; yy62: YYDEBUG(62, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy60; - goto yy61; -yy63: - YYDEBUG(63, *YYCURSOR); yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; -yy64: - YYDEBUG(64, *YYCURSOR); +yy63: + YYDEBUG(63, *YYCURSOR); if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy6; - if (yych <= '\t') goto yy63; - goto yy67; + if (yych <= 0x08) goto yy5; + if (yych <= '\t') goto yy62; + goto yy66; } else { - if (yych == '\r') goto yy68; - goto yy6; + if (yych == '\r') goto yy67; + goto yy5; } } else { if (yych <= ';') { - if (yych <= ' ') goto yy63; - if (yych <= ':') goto yy6; - goto yy58; + if (yych <= ' ') goto yy62; + if (yych <= ':') goto yy5; + goto yy57; } else { - if (yych == '=') goto yy56; - goto yy6; + if (yych == '=') goto yy55; + goto yy5; } } -yy65: - YYDEBUG(65, *YYCURSOR); +yy64: + YYDEBUG(64, *YYCURSOR); yyaccept = 1; YYMARKER = ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; - YYDEBUG(66, *YYCURSOR); + YYDEBUG(65, *YYCURSOR); if (yych <= '&') { if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy25; - if (yych <= '\t') goto yy63; + if (yych <= 0x08) goto yy24; + if (yych <= '\t') goto yy62; } else { - if (yych == '\r') goto yy68; - goto yy25; + if (yych == '\r') goto yy67; + goto yy24; } } else { if (yych <= '#') { - if (yych <= ' ') goto yy65; - if (yych <= '"') goto yy4; - goto yy25; + if (yych <= ' ') goto yy64; + if (yych <= '"') goto yy3; + goto yy24; } else { - if (yych == '%') goto yy25; - goto yy4; + if (yych == '%') goto yy24; + goto yy3; } } } else { if (yych <= '=') { if (yych <= ':') { - if (yych <= '\'') goto yy25; - if (yych <= ')') goto yy4; - goto yy25; + if (yych <= '\'') goto yy24; + if (yych <= ')') goto yy3; + goto yy24; } else { - if (yych <= ';') goto yy58; - if (yych <= '<') goto yy25; - goto yy56; + if (yych <= ';') goto yy57; + if (yych <= '<') goto yy24; + goto yy55; } } else { if (yych <= ']') { - if (yych == '[') goto yy28; - goto yy25; + if (yych == '[') goto yy27; + goto yy24; } else { - if (yych <= '^') goto yy4; - if (yych <= 'z') goto yy25; - if (yych <= '~') goto yy4; - goto yy25; + if (yych <= '^') goto yy3; + if (yych <= 'z') goto yy24; + if (yych <= '~') goto yy3; + goto yy24; } } } +yy66: + YYDEBUG(66, *YYCURSOR); + yych = *++YYCURSOR; + goto yy7; yy67: YYDEBUG(67, *YYCURSOR); - yych = *++YYCURSOR; - goto yy8; -yy68: - YYDEBUG(68, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '\n') goto yy67; - goto yy8; + if ((yych = *YYCURSOR) == '\n') goto yy66; + goto yy7; } /* *********************************** */ yyc_ST_DOUBLE_QUOTES: @@ -1161,15 +1161,15 @@ yyc_ST_DOUBLE_QUOTES: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - YYDEBUG(69, *YYCURSOR); + YYDEBUG(68, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; - if (yych == '"') goto yy73; - if (yych == '$') goto yy75; - YYDEBUG(71, *YYCURSOR); + if (yych == '"') goto yy72; + if (yych == '$') goto yy74; + YYDEBUG(70, *YYCURSOR); ++YYCURSOR; -yy72: - YYDEBUG(72, *YYCURSOR); +yy71: + YYDEBUG(71, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 589 "Zend/zend_ini_scanner.l" { /* Escape double quoted string contents */ @@ -1208,13 +1208,13 @@ yy72: return TC_QUOTED_STRING; } #line 1211 "Zend/zend_ini_scanner.c" -yy73: - YYDEBUG(73, *YYCURSOR); +yy72: + YYDEBUG(72, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy79; -yy74: - YYDEBUG(74, *YYCURSOR); + goto yy78; +yy73: + YYDEBUG(73, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 584 "Zend/zend_ini_scanner.l" { /* Double quoted '"' string ends */ @@ -1222,13 +1222,13 @@ yy74: return '"'; } #line 1225 "Zend/zend_ini_scanner.c" -yy75: - YYDEBUG(75, *YYCURSOR); +yy74: + YYDEBUG(74, *YYCURSOR); yych = *++YYCURSOR; - if (yych != '{') goto yy72; - YYDEBUG(76, *YYCURSOR); + if (yych != '{') goto yy71; + YYDEBUG(75, *YYCURSOR); ++YYCURSOR; - YYDEBUG(77, *YYCURSOR); + YYDEBUG(76, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 451 "Zend/zend_ini_scanner.l" { /* Variable start */ @@ -1236,17 +1236,17 @@ yy75: return TC_DOLLAR_CURLY; } #line 1239 "Zend/zend_ini_scanner.c" -yy78: - YYDEBUG(78, *YYCURSOR); +yy77: + YYDEBUG(77, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy79: - YYDEBUG(79, *YYCURSOR); +yy78: + YYDEBUG(78, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy78; + goto yy77; } - goto yy74; + goto yy73; } /* *********************************** */ yyc_ST_OFFSET: @@ -1285,87 +1285,87 @@ yyc_ST_OFFSET: 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, }; - YYDEBUG(80, *YYCURSOR); + YYDEBUG(79, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yych <= '-') { if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x08) goto yy82; - if (yych <= '\t') goto yy84; - goto yy85; + if (yych <= 0x08) goto yy81; + if (yych <= '\t') goto yy83; + goto yy84; } else { - if (yych == '\r') goto yy85; - if (yych >= ' ') goto yy84; + if (yych == '\r') goto yy84; + if (yych >= ' ') goto yy83; } } else { if (yych <= '$') { - if (yych == '"') goto yy87; - if (yych >= '$') goto yy89; + if (yych == '"') goto yy86; + if (yych >= '$') goto yy88; } else { - if (yych == '\'') goto yy90; - if (yych >= '-') goto yy91; + if (yych == '\'') goto yy89; + if (yych >= '-') goto yy90; } } } else { if (yych <= 'Z') { if (yych <= '9') { - if (yych <= '.') goto yy92; - if (yych >= '0') goto yy93; + if (yych <= '.') goto yy91; + if (yych >= '0') goto yy92; } else { - if (yych == ';') goto yy85; - if (yych >= 'A') goto yy95; + if (yych == ';') goto yy84; + if (yych >= 'A') goto yy94; } } else { if (yych <= '^') { - if (yych <= '[') goto yy82; - if (yych <= '\\') goto yy97; - if (yych <= ']') goto yy98; + if (yych <= '[') goto yy81; + if (yych <= '\\') goto yy96; + if (yych <= ']') goto yy97; } else { - if (yych == '`') goto yy82; - if (yych <= 'z') goto yy95; + if (yych == '`') goto yy81; + if (yych <= 'z') goto yy94; } } } -yy82: - YYDEBUG(82, *YYCURSOR); +yy81: + YYDEBUG(81, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - goto yy101; -yy83: - YYDEBUG(83, *YYCURSOR); + goto yy100; +yy82: + YYDEBUG(82, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 575 "Zend/zend_ini_scanner.l" { /* Get rest as section/offset value */ RETURN_TOKEN(TC_STRING, yytext, yyleng); } #line 1343 "Zend/zend_ini_scanner.c" -yy84: - YYDEBUG(84, *YYCURSOR); +yy83: + YYDEBUG(83, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 128) { - goto yy127; + goto yy126; } - if (yych == '"') goto yy129; - if (yych == ']') goto yy130; - goto yy101; + if (yych == '"') goto yy128; + if (yych == ']') goto yy129; + goto yy100; +yy84: + YYDEBUG(84, *YYCURSOR); + ++YYCURSOR; yy85: YYDEBUG(85, *YYCURSOR); - ++YYCURSOR; -yy86: - YYDEBUG(86, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 650 "Zend/zend_ini_scanner.l" { return 0; } #line 1364 "Zend/zend_ini_scanner.c" +yy86: + YYDEBUG(86, *YYCURSOR); + ++YYCURSOR; yy87: YYDEBUG(87, *YYCURSOR); - ++YYCURSOR; -yy88: - YYDEBUG(88, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 579 "Zend/zend_ini_scanner.l" { /* Double quoted '"' string start */ @@ -1373,111 +1373,111 @@ yy88: return '"'; } #line 1376 "Zend/zend_ini_scanner.c" -yy89: - YYDEBUG(89, *YYCURSOR); +yy88: + YYDEBUG(88, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\\') { - if (yych <= 0x00) goto yy86; - if (yych <= '[') goto yy100; - goto yy105; + if (yych <= 0x00) goto yy85; + if (yych <= '[') goto yy99; + goto yy104; } else { - if (yych == '{') goto yy125; - goto yy100; + if (yych == '{') goto yy124; + goto yy99; } -yy90: - YYDEBUG(90, *YYCURSOR); +yy89: + YYDEBUG(89, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 64) { - goto yy121; + goto yy120; } - goto yy86; + goto yy85; +yy90: + YYDEBUG(90, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy100; + if (yych <= '9') goto yy118; + goto yy100; yy91: YYDEBUG(91, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy101; - if (yych <= '9') goto yy119; - goto yy101; + if (yych <= '/') goto yy100; + if (yych <= '9') goto yy116; + goto yy100; yy92: YYDEBUG(92, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy101; - if (yych <= '9') goto yy117; - goto yy101; -yy93: - YYDEBUG(93, *YYCURSOR); yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\'') { if (yych <= '\r') { - if (yych == '\n') goto yy94; - if (yych <= '\f') goto yy101; + if (yych == '\n') goto yy93; + if (yych <= '\f') goto yy100; } else { - if (yych == '"') goto yy94; - if (yych <= '&') goto yy101; + if (yych == '"') goto yy93; + if (yych <= '&') goto yy100; } } else { if (yych <= '9') { - if (yych == '.') goto yy113; - if (yych <= '/') goto yy101; - goto yy115; + if (yych == '.') goto yy112; + if (yych <= '/') goto yy100; + goto yy114; } else { if (yych <= ';') { - if (yych <= ':') goto yy101; + if (yych <= ':') goto yy100; } else { - if (yych != ']') goto yy101; + if (yych != ']') goto yy100; } } } -yy94: - YYDEBUG(94, *YYCURSOR); +yy93: + YYDEBUG(93, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 553 "Zend/zend_ini_scanner.l" { /* Get number option value as string */ RETURN_TOKEN(TC_NUMBER, yytext, yyleng); } #line 1442 "Zend/zend_ini_scanner.c" -yy95: - YYDEBUG(95, *YYCURSOR); +yy94: + YYDEBUG(94, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { - goto yy111; + goto yy110; } if (yych <= '"') { if (yych <= '\f') { - if (yych != '\n') goto yy101; + if (yych != '\n') goto yy100; } else { - if (yych <= '\r') goto yy96; - if (yych <= '!') goto yy101; + if (yych <= '\r') goto yy95; + if (yych <= '!') goto yy100; } } else { if (yych <= ':') { - if (yych != '\'') goto yy101; + if (yych != '\'') goto yy100; } else { - if (yych <= ';') goto yy96; - if (yych != ']') goto yy101; + if (yych <= ';') goto yy95; + if (yych != ']') goto yy100; } } -yy96: - YYDEBUG(96, *YYCURSOR); +yy95: + YYDEBUG(95, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 549 "Zend/zend_ini_scanner.l" { /* Get constant option value */ RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); } #line 1472 "Zend/zend_ini_scanner.c" +yy96: + YYDEBUG(96, *YYCURSOR); + yych = *++YYCURSOR; + goto yy99; yy97: YYDEBUG(97, *YYCURSOR); - yych = *++YYCURSOR; - goto yy100; + ++YYCURSOR; yy98: YYDEBUG(98, *YYCURSOR); - ++YYCURSOR; -yy99: - YYDEBUG(99, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 446 "Zend/zend_ini_scanner.l" { /* End of section or an option offset */ @@ -1485,296 +1485,294 @@ yy99: return ']'; } #line 1488 "Zend/zend_ini_scanner.c" -yy100: - YYDEBUG(100, *YYCURSOR); +yy99: + YYDEBUG(99, *YYCURSOR); yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy101: - YYDEBUG(101, *YYCURSOR); +yy100: + YYDEBUG(100, *YYCURSOR); if (yybm[0+yych] & 2) { - goto yy100; + goto yy99; } - if (yych <= '"') goto yy83; - if (yych <= '$') goto yy103; - if (yych <= ';') goto yy83; - if (yych >= ']') goto yy83; -yy102: - YYDEBUG(102, *YYCURSOR); + if (yych == '$') goto yy102; + if (yych != '\\') goto yy82; +yy101: + YYDEBUG(101, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - goto yy100; -yy103: - YYDEBUG(103, *YYCURSOR); + goto yy99; +yy102: + YYDEBUG(102, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; if (yych <= '\\') { - if (yych <= 0x00) goto yy104; - if (yych <= '[') goto yy100; - goto yy105; + if (yych <= 0x00) goto yy103; + if (yych <= '[') goto yy99; + goto yy104; } else { - if (yych != '{') goto yy100; + if (yych != '{') goto yy99; } -yy104: - YYDEBUG(104, *YYCURSOR); +yy103: + YYDEBUG(103, *YYCURSOR); YYCURSOR = YYMARKER; if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy83; + if (yyaccept <= 0) { + goto yy82; } else { - goto yy86; + goto yy85; } } else { - if (yyaccept == 2) { - goto yy94; + if (yyaccept <= 2) { + goto yy93; } else { - goto yy96; + goto yy95; } } -yy105: - YYDEBUG(105, *YYCURSOR); +yy104: + YYDEBUG(104, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 4) { - goto yy106; + goto yy105; } - if (yych == '\\') goto yy108; - goto yy100; -yy106: - YYDEBUG(106, *YYCURSOR); + if (yych == '\\') goto yy107; + goto yy99; +yy105: + YYDEBUG(105, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(107, *YYCURSOR); + YYDEBUG(106, *YYCURSOR); if (yybm[0+yych] & 4) { - goto yy106; + goto yy105; } - if (yych == '\\') goto yy110; - goto yy100; -yy108: - YYDEBUG(108, *YYCURSOR); + if (yych == '\\') goto yy109; + goto yy99; +yy107: + YYDEBUG(107, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(109, *YYCURSOR); + YYDEBUG(108, *YYCURSOR); if (yybm[0+yych] & 4) { - goto yy106; + goto yy105; } - if (yych == '\\') goto yy108; - goto yy100; -yy110: - YYDEBUG(110, *YYCURSOR); + if (yych == '\\') goto yy107; + goto yy99; +yy109: + YYDEBUG(109, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 4) { - goto yy106; + goto yy105; } - if (yych == '\\') goto yy108; - goto yy100; -yy111: - YYDEBUG(111, *YYCURSOR); + if (yych == '\\') goto yy107; + goto yy99; +yy110: + YYDEBUG(110, *YYCURSOR); yyaccept = 3; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(112, *YYCURSOR); + YYDEBUG(111, *YYCURSOR); if (yybm[0+yych] & 16) { - goto yy111; + goto yy110; } if (yych <= '$') { if (yych <= '\r') { - if (yych == '\n') goto yy96; - if (yych <= '\f') goto yy100; - goto yy96; + if (yych == '\n') goto yy95; + if (yych <= '\f') goto yy99; + goto yy95; } else { - if (yych == '"') goto yy96; - if (yych <= '#') goto yy100; - goto yy103; + if (yych == '"') goto yy95; + if (yych <= '#') goto yy99; + goto yy102; } } else { if (yych <= ';') { - if (yych == '\'') goto yy96; - if (yych <= ':') goto yy100; - goto yy96; + if (yych == '\'') goto yy95; + if (yych <= ':') goto yy99; + goto yy95; } else { - if (yych <= '[') goto yy100; - if (yych <= '\\') goto yy102; - if (yych <= ']') goto yy96; - goto yy100; + if (yych <= '[') goto yy99; + if (yych <= '\\') goto yy101; + if (yych <= ']') goto yy95; + goto yy99; } } -yy113: - YYDEBUG(113, *YYCURSOR); +yy112: + YYDEBUG(112, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(114, *YYCURSOR); + YYDEBUG(113, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy113; + goto yy112; } if (yych <= '$') { if (yych <= '\r') { - if (yych == '\n') goto yy94; - if (yych <= '\f') goto yy100; - goto yy94; + if (yych == '\n') goto yy93; + if (yych <= '\f') goto yy99; + goto yy93; } else { - if (yych == '"') goto yy94; - if (yych <= '#') goto yy100; - goto yy103; + if (yych == '"') goto yy93; + if (yych <= '#') goto yy99; + goto yy102; } } else { if (yych <= ';') { - if (yych == '\'') goto yy94; - if (yych <= ':') goto yy100; - goto yy94; + if (yych == '\'') goto yy93; + if (yych <= ':') goto yy99; + goto yy93; } else { - if (yych <= '[') goto yy100; - if (yych <= '\\') goto yy102; - if (yych <= ']') goto yy94; - goto yy100; + if (yych <= '[') goto yy99; + if (yych <= '\\') goto yy101; + if (yych <= ']') goto yy93; + goto yy99; } } -yy115: - YYDEBUG(115, *YYCURSOR); +yy114: + YYDEBUG(114, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(116, *YYCURSOR); + YYDEBUG(115, *YYCURSOR); if (yych <= '\'') { if (yych <= '!') { if (yych <= '\n') { - if (yych <= '\t') goto yy100; - goto yy94; + if (yych <= '\t') goto yy99; + goto yy93; } else { - if (yych == '\r') goto yy94; - goto yy100; + if (yych == '\r') goto yy93; + goto yy99; } } else { if (yych <= '#') { - if (yych <= '"') goto yy94; - goto yy100; + if (yych <= '"') goto yy93; + goto yy99; } else { - if (yych <= '$') goto yy103; - if (yych <= '&') goto yy100; - goto yy94; + if (yych <= '$') goto yy102; + if (yych <= '&') goto yy99; + goto yy93; } } } else { if (yych <= ':') { if (yych <= '.') { - if (yych <= '-') goto yy100; - goto yy113; + if (yych <= '-') goto yy99; + goto yy112; } else { - if (yych <= '/') goto yy100; - if (yych <= '9') goto yy115; - goto yy100; + if (yych <= '/') goto yy99; + if (yych <= '9') goto yy114; + goto yy99; } } else { if (yych <= '[') { - if (yych <= ';') goto yy94; - goto yy100; + if (yych <= ';') goto yy93; + goto yy99; } else { - if (yych <= '\\') goto yy102; - if (yych <= ']') goto yy94; - goto yy100; + if (yych <= '\\') goto yy101; + if (yych <= ']') goto yy93; + goto yy99; } } } -yy117: - YYDEBUG(117, *YYCURSOR); +yy116: + YYDEBUG(116, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(118, *YYCURSOR); + YYDEBUG(117, *YYCURSOR); if (yych <= '&') { if (yych <= '\r') { - if (yych == '\n') goto yy94; - if (yych <= '\f') goto yy100; - goto yy94; + if (yych == '\n') goto yy93; + if (yych <= '\f') goto yy99; + goto yy93; } else { if (yych <= '"') { - if (yych <= '!') goto yy100; - goto yy94; + if (yych <= '!') goto yy99; + goto yy93; } else { - if (yych == '$') goto yy103; - goto yy100; + if (yych == '$') goto yy102; + goto yy99; } } } else { if (yych <= ':') { - if (yych <= '\'') goto yy94; - if (yych <= '/') goto yy100; - if (yych <= '9') goto yy117; - goto yy100; + if (yych <= '\'') goto yy93; + if (yych <= '/') goto yy99; + if (yych <= '9') goto yy116; + goto yy99; } else { if (yych <= '[') { - if (yych <= ';') goto yy94; - goto yy100; + if (yych <= ';') goto yy93; + goto yy99; } else { - if (yych <= '\\') goto yy102; - if (yych <= ']') goto yy94; - goto yy100; + if (yych <= '\\') goto yy101; + if (yych <= ']') goto yy93; + goto yy99; } } } -yy119: - YYDEBUG(119, *YYCURSOR); +yy118: + YYDEBUG(118, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(120, *YYCURSOR); + YYDEBUG(119, *YYCURSOR); if (yych <= '&') { if (yych <= '\r') { - if (yych == '\n') goto yy94; - if (yych <= '\f') goto yy100; - goto yy94; + if (yych == '\n') goto yy93; + if (yych <= '\f') goto yy99; + goto yy93; } else { if (yych <= '"') { - if (yych <= '!') goto yy100; - goto yy94; + if (yych <= '!') goto yy99; + goto yy93; } else { - if (yych == '$') goto yy103; - goto yy100; + if (yych == '$') goto yy102; + goto yy99; } } } else { if (yych <= ':') { - if (yych <= '\'') goto yy94; - if (yych <= '/') goto yy100; - if (yych <= '9') goto yy119; - goto yy100; + if (yych <= '\'') goto yy93; + if (yych <= '/') goto yy99; + if (yych <= '9') goto yy118; + goto yy99; } else { if (yych <= '[') { - if (yych <= ';') goto yy94; - goto yy100; + if (yych <= ';') goto yy93; + goto yy99; } else { - if (yych <= '\\') goto yy102; - if (yych <= ']') goto yy94; - goto yy100; + if (yych <= '\\') goto yy101; + if (yych <= ']') goto yy93; + goto yy99; } } } -yy121: - YYDEBUG(121, *YYCURSOR); +yy120: + YYDEBUG(120, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(122, *YYCURSOR); + YYDEBUG(121, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy121; + goto yy120; } - YYDEBUG(123, *YYCURSOR); + YYDEBUG(122, *YYCURSOR); ++YYCURSOR; - YYDEBUG(124, *YYCURSOR); + YYDEBUG(123, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 418 "Zend/zend_ini_scanner.l" { /* Raw string */ @@ -1785,60 +1783,59 @@ yy121: } RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 1789 "Zend/zend_ini_scanner.c" -yy125: - YYDEBUG(125, *YYCURSOR); +#line 1787 "Zend/zend_ini_scanner.c" +yy124: + YYDEBUG(124, *YYCURSOR); ++YYCURSOR; - YYDEBUG(126, *YYCURSOR); + YYDEBUG(125, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 451 "Zend/zend_ini_scanner.l" { /* Variable start */ yy_push_state(ST_VARNAME); return TC_DOLLAR_CURLY; } -#line 1800 "Zend/zend_ini_scanner.c" -yy127: - YYDEBUG(127, *YYCURSOR); +#line 1798 "Zend/zend_ini_scanner.c" +yy126: + YYDEBUG(126, *YYCURSOR); yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(128, *YYCURSOR); + YYDEBUG(127, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy127; + goto yy126; } if (yych <= '$') { if (yych <= '\r') { - if (yych <= 0x08) goto yy100; - if (yych <= '\n') goto yy83; - if (yych <= '\f') goto yy100; - goto yy83; + if (yych == '\n') goto yy82; + if (yych <= '\f') goto yy99; + goto yy82; } else { - if (yych == '"') goto yy129; - if (yych <= '#') goto yy100; - goto yy103; + if (yych == '"') goto yy128; + if (yych <= '#') goto yy99; + goto yy102; } } else { if (yych <= ';') { - if (yych == '\'') goto yy83; - if (yych <= ':') goto yy100; - goto yy83; + if (yych == '\'') goto yy82; + if (yych <= ':') goto yy99; + goto yy82; } else { - if (yych <= '[') goto yy100; - if (yych <= '\\') goto yy102; - if (yych <= ']') goto yy130; - goto yy100; + if (yych <= '[') goto yy99; + if (yych <= '\\') goto yy101; + if (yych <= ']') goto yy129; + goto yy99; } } +yy128: + YYDEBUG(128, *YYCURSOR); + yych = *++YYCURSOR; + goto yy87; yy129: YYDEBUG(129, *YYCURSOR); - yych = *++YYCURSOR; - goto yy88; -yy130: - YYDEBUG(130, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy99; + goto yy98; } /* *********************************** */ yyc_ST_RAW: @@ -1877,42 +1874,42 @@ yyc_ST_RAW: 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, }; - YYDEBUG(131, *YYCURSOR); + YYDEBUG(130, *YYCURSOR); YYFILL(3); yych = *YYCURSOR; if (yych <= '\f') { if (yych <= 0x08) { - if (yych >= 0x01) goto yy135; + if (yych >= 0x01) goto yy134; } else { - if (yych <= '\t') goto yy137; - if (yych <= '\n') goto yy138; - goto yy135; + if (yych <= '\t') goto yy136; + if (yych <= '\n') goto yy137; + goto yy134; } } else { if (yych <= ' ') { - if (yych <= '\r') goto yy140; - if (yych <= 0x1F) goto yy135; - goto yy137; + if (yych <= '\r') goto yy139; + if (yych <= 0x1F) goto yy134; + goto yy136; } else { - if (yych == ';') goto yy141; - goto yy135; + if (yych == ';') goto yy140; + goto yy134; } } - YYDEBUG(133, *YYCURSOR); + YYDEBUG(132, *YYCURSOR); ++YYCURSOR; - YYDEBUG(134, *YYCURSOR); + YYDEBUG(133, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 645 "Zend/zend_ini_scanner.l" { /* End of option value (if EOF is reached before EOL */ BEGIN(INITIAL); return END_OF_LINE; } -#line 1911 "Zend/zend_ini_scanner.c" +#line 1908 "Zend/zend_ini_scanner.c" +yy134: + YYDEBUG(134, *YYCURSOR); + ++YYCURSOR; yy135: YYDEBUG(135, *YYCURSOR); - ++YYCURSOR; -yy136: - YYDEBUG(136, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 502 "Zend/zend_ini_scanner.l" { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ @@ -1951,30 +1948,30 @@ end_raw_value_chars: } RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 1955 "Zend/zend_ini_scanner.c" -yy137: - YYDEBUG(137, *YYCURSOR); +#line 1952 "Zend/zend_ini_scanner.c" +yy136: + YYDEBUG(136, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\r') { - if (yych <= 0x08) goto yy136; - if (yych <= '\n') goto yy149; - if (yych <= '\f') goto yy136; - goto yy149; + if (yych <= 0x08) goto yy135; + if (yych <= '\n') goto yy148; + if (yych <= '\f') goto yy135; + goto yy148; } else { if (yych <= ' ') { - if (yych <= 0x1F) goto yy136; - goto yy149; + if (yych <= 0x1F) goto yy135; + goto yy148; } else { - if (yych == ';') goto yy149; - goto yy136; + if (yych == ';') goto yy148; + goto yy135; } } +yy137: + YYDEBUG(137, *YYCURSOR); + ++YYCURSOR; yy138: YYDEBUG(138, *YYCURSOR); - ++YYCURSOR; -yy139: - YYDEBUG(139, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 543 "Zend/zend_ini_scanner.l" { /* End of option value */ @@ -1982,33 +1979,33 @@ yy139: SCNG(lineno)++; return END_OF_LINE; } -#line 1986 "Zend/zend_ini_scanner.c" +#line 1983 "Zend/zend_ini_scanner.c" +yy139: + YYDEBUG(139, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy146; + goto yy138; yy140: YYDEBUG(140, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy147; - goto yy139; -yy141: - YYDEBUG(141, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - goto yy143; -yy142: - YYDEBUG(142, *YYCURSOR); + goto yy142; +yy141: + YYDEBUG(141, *YYCURSOR); ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; -yy143: - YYDEBUG(143, *YYCURSOR); +yy142: + YYDEBUG(142, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy142; + goto yy141; } - if (yych >= '\v') goto yy146; + if (yych >= '\r') goto yy145; +yy143: + YYDEBUG(143, *YYCURSOR); + ++YYCURSOR; yy144: YYDEBUG(144, *YYCURSOR); - ++YYCURSOR; -yy145: - YYDEBUG(145, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 639 "Zend/zend_ini_scanner.l" { /* Comment */ @@ -2016,48 +2013,46 @@ yy145: SCNG(lineno)++; return END_OF_LINE; } -#line 2020 "Zend/zend_ini_scanner.c" +#line 2017 "Zend/zend_ini_scanner.c" +yy145: + YYDEBUG(145, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy143; + goto yy144; yy146: YYDEBUG(146, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '\n') goto yy144; - goto yy145; + goto yy138; yy147: YYDEBUG(147, *YYCURSOR); - yych = *++YYCURSOR; - goto yy139; -yy148: - YYDEBUG(148, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; -yy149: - YYDEBUG(149, *YYCURSOR); +yy148: + YYDEBUG(148, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy148; + goto yy147; } if (yych <= '\f') { - if (yych <= 0x08) goto yy150; - if (yych <= '\n') goto yy147; + if (yych == '\n') goto yy146; } else { - if (yych <= '\r') goto yy151; - if (yych == ';') goto yy142; + if (yych <= '\r') goto yy150; + if (yych == ';') goto yy141; } -yy150: - YYDEBUG(150, *YYCURSOR); + YYDEBUG(149, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 629 "Zend/zend_ini_scanner.l" { /* eat whitespace */ goto restart; } -#line 2056 "Zend/zend_ini_scanner.c" -yy151: - YYDEBUG(151, *YYCURSOR); +#line 2051 "Zend/zend_ini_scanner.c" +yy150: + YYDEBUG(150, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '\n') goto yy147; - goto yy139; + if ((yych = *YYCURSOR) == '\n') goto yy146; + goto yy138; } /* *********************************** */ yyc_ST_SECTION_RAW: @@ -2096,44 +2091,44 @@ yyc_ST_SECTION_RAW: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; - YYDEBUG(152, *YYCURSOR); + YYDEBUG(151, *YYCURSOR); YYFILL(3); yych = *YYCURSOR; if (yych <= '\f') { - if (yych == '\n') goto yy156; + if (yych == '\n') goto yy155; } else { - if (yych <= '\r') goto yy156; - if (yych == ']') goto yy158; + if (yych <= '\r') goto yy155; + if (yych == ']') goto yy157; } - YYDEBUG(154, *YYCURSOR); + YYDEBUG(153, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy165; -yy155: - YYDEBUG(155, *YYCURSOR); + goto yy164; +yy154: + YYDEBUG(154, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 539 "Zend/zend_ini_scanner.l" { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 2120 "Zend/zend_ini_scanner.c" -yy156: - YYDEBUG(156, *YYCURSOR); +#line 2115 "Zend/zend_ini_scanner.c" +yy155: + YYDEBUG(155, *YYCURSOR); ++YYCURSOR; - YYDEBUG(157, *YYCURSOR); + YYDEBUG(156, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 650 "Zend/zend_ini_scanner.l" { return 0; } -#line 2130 "Zend/zend_ini_scanner.c" -yy158: - YYDEBUG(158, *YYCURSOR); +#line 2125 "Zend/zend_ini_scanner.c" +yy157: + YYDEBUG(157, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy161; -yy159: - YYDEBUG(159, *YYCURSOR); + goto yy160; +yy158: + YYDEBUG(158, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 427 "Zend/zend_ini_scanner.l" { /* End of section */ @@ -2141,41 +2136,40 @@ yy159: SCNG(lineno)++; return ']'; } -#line 2145 "Zend/zend_ini_scanner.c" -yy160: - YYDEBUG(160, *YYCURSOR); +#line 2140 "Zend/zend_ini_scanner.c" +yy159: + YYDEBUG(159, *YYCURSOR); ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; -yy161: - YYDEBUG(161, *YYCURSOR); +yy160: + YYDEBUG(160, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy160; + goto yy159; } - if (yych <= 0x08) goto yy159; - if (yych <= '\n') goto yy162; - if (yych == '\r') goto yy163; - goto yy159; + if (yych == '\n') goto yy161; + if (yych == '\r') goto yy162; + goto yy158; +yy161: + YYDEBUG(161, *YYCURSOR); + yych = *++YYCURSOR; + goto yy158; yy162: YYDEBUG(162, *YYCURSOR); yych = *++YYCURSOR; - goto yy159; + if (yych == '\n') goto yy161; + goto yy158; yy163: YYDEBUG(163, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy162; - goto yy159; -yy164: - YYDEBUG(164, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy165: - YYDEBUG(165, *YYCURSOR); +yy164: + YYDEBUG(164, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy164; + goto yy163; } - goto yy155; + goto yy154; } /* *********************************** */ yyc_ST_SECTION_VALUE: @@ -2214,203 +2208,203 @@ yyc_ST_SECTION_VALUE: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, }; - YYDEBUG(166, *YYCURSOR); + YYDEBUG(165, *YYCURSOR); YYFILL(3); yych = *YYCURSOR; if (yych <= '-') { if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x08) goto yy168; - if (yych <= '\t') goto yy170; - goto yy171; + if (yych <= 0x08) goto yy167; + if (yych <= '\t') goto yy169; + goto yy170; } else { - if (yych == '\r') goto yy171; - if (yych >= ' ') goto yy170; + if (yych == '\r') goto yy170; + if (yych >= ' ') goto yy169; } } else { if (yych <= '$') { - if (yych == '"') goto yy173; - if (yych >= '$') goto yy175; + if (yych == '"') goto yy172; + if (yych >= '$') goto yy174; } else { - if (yych == '\'') goto yy176; - if (yych >= '-') goto yy177; + if (yych == '\'') goto yy175; + if (yych >= '-') goto yy176; } } } else { if (yych <= 'Z') { if (yych <= '9') { - if (yych <= '.') goto yy178; - if (yych >= '0') goto yy179; + if (yych <= '.') goto yy177; + if (yych >= '0') goto yy178; } else { - if (yych == ';') goto yy171; - if (yych >= 'A') goto yy181; + if (yych == ';') goto yy170; + if (yych >= 'A') goto yy180; } } else { if (yych <= '^') { - if (yych <= '[') goto yy168; - if (yych <= '\\') goto yy183; - if (yych <= ']') goto yy184; + if (yych <= '[') goto yy167; + if (yych <= '\\') goto yy182; + if (yych <= ']') goto yy183; } else { - if (yych == '`') goto yy168; - if (yych <= 'z') goto yy181; + if (yych == '`') goto yy167; + if (yych <= 'z') goto yy180; } } } -yy168: - YYDEBUG(168, *YYCURSOR); +yy167: + YYDEBUG(167, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - goto yy191; -yy169: - YYDEBUG(169, *YYCURSOR); + goto yy190; +yy168: + YYDEBUG(168, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 575 "Zend/zend_ini_scanner.l" { /* Get rest as section/offset value */ RETURN_TOKEN(TC_STRING, yytext, yyleng); } -#line 2272 "Zend/zend_ini_scanner.c" -yy170: - YYDEBUG(170, *YYCURSOR); +#line 2266 "Zend/zend_ini_scanner.c" +yy169: + YYDEBUG(169, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy217; - goto yy191; + if (yych == '\t') goto yy216; + goto yy190; } else { - if (yych <= ' ') goto yy217; - if (yych == '"') goto yy219; - goto yy191; + if (yych <= ' ') goto yy216; + if (yych == '"') goto yy218; + goto yy190; } +yy170: + YYDEBUG(170, *YYCURSOR); + ++YYCURSOR; yy171: YYDEBUG(171, *YYCURSOR); - ++YYCURSOR; -yy172: - YYDEBUG(172, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 650 "Zend/zend_ini_scanner.l" { return 0; } -#line 2295 "Zend/zend_ini_scanner.c" +#line 2289 "Zend/zend_ini_scanner.c" +yy172: + YYDEBUG(172, *YYCURSOR); + ++YYCURSOR; yy173: YYDEBUG(173, *YYCURSOR); - ++YYCURSOR; -yy174: - YYDEBUG(174, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 579 "Zend/zend_ini_scanner.l" { /* Double quoted '"' string start */ yy_push_state(ST_DOUBLE_QUOTES); return '"'; } -#line 2307 "Zend/zend_ini_scanner.c" -yy175: - YYDEBUG(175, *YYCURSOR); +#line 2301 "Zend/zend_ini_scanner.c" +yy174: + YYDEBUG(174, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\\') { - if (yych <= 0x00) goto yy172; - if (yych <= '[') goto yy190; - goto yy195; + if (yych <= 0x00) goto yy171; + if (yych <= '[') goto yy189; + goto yy194; } else { - if (yych == '{') goto yy215; - goto yy190; + if (yych == '{') goto yy214; + goto yy189; } -yy176: - YYDEBUG(176, *YYCURSOR); +yy175: + YYDEBUG(175, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 128) { - goto yy211; + goto yy210; } - goto yy172; + goto yy171; +yy176: + YYDEBUG(176, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy190; + if (yych <= '9') goto yy208; + goto yy190; yy177: YYDEBUG(177, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy191; - if (yych <= '9') goto yy209; - goto yy191; + if (yych <= '/') goto yy190; + if (yych <= '9') goto yy206; + goto yy190; yy178: YYDEBUG(178, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy191; - if (yych <= '9') goto yy207; - goto yy191; -yy179: - YYDEBUG(179, *YYCURSOR); yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '\'') { if (yych <= '\r') { - if (yych == '\n') goto yy180; - if (yych <= '\f') goto yy191; + if (yych == '\n') goto yy179; + if (yych <= '\f') goto yy190; } else { - if (yych == '"') goto yy180; - if (yych <= '&') goto yy191; + if (yych == '"') goto yy179; + if (yych <= '&') goto yy190; } } else { if (yych <= '9') { - if (yych == '.') goto yy203; - if (yych <= '/') goto yy191; - goto yy205; + if (yych == '.') goto yy202; + if (yych <= '/') goto yy190; + goto yy204; } else { if (yych <= ';') { - if (yych <= ':') goto yy191; + if (yych <= ':') goto yy190; } else { - if (yych != ']') goto yy191; + if (yych != ']') goto yy190; } } } -yy180: - YYDEBUG(180, *YYCURSOR); +yy179: + YYDEBUG(179, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 553 "Zend/zend_ini_scanner.l" { /* Get number option value as string */ RETURN_TOKEN(TC_NUMBER, yytext, yyleng); } -#line 2373 "Zend/zend_ini_scanner.c" -yy181: - YYDEBUG(181, *YYCURSOR); +#line 2367 "Zend/zend_ini_scanner.c" +yy180: + YYDEBUG(180, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 32) { - goto yy201; + goto yy200; } if (yych <= '"') { if (yych <= '\f') { - if (yych != '\n') goto yy191; + if (yych != '\n') goto yy190; } else { - if (yych <= '\r') goto yy182; - if (yych <= '!') goto yy191; + if (yych <= '\r') goto yy181; + if (yych <= '!') goto yy190; } } else { if (yych <= ':') { - if (yych != '\'') goto yy191; + if (yych != '\'') goto yy190; } else { - if (yych <= ';') goto yy182; - if (yych != ']') goto yy191; + if (yych <= ';') goto yy181; + if (yych != ']') goto yy190; } } -yy182: - YYDEBUG(182, *YYCURSOR); +yy181: + YYDEBUG(181, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 549 "Zend/zend_ini_scanner.l" { /* Get constant option value */ RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); } -#line 2403 "Zend/zend_ini_scanner.c" +#line 2397 "Zend/zend_ini_scanner.c" +yy182: + YYDEBUG(182, *YYCURSOR); + yych = *++YYCURSOR; + goto yy189; yy183: YYDEBUG(183, *YYCURSOR); - yych = *++YYCURSOR; - goto yy190; -yy184: - YYDEBUG(184, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy187; -yy185: - YYDEBUG(185, *YYCURSOR); + goto yy186; +yy184: + YYDEBUG(184, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 427 "Zend/zend_ini_scanner.l" { /* End of section */ @@ -2418,320 +2412,317 @@ yy185: SCNG(lineno)++; return ']'; } -#line 2422 "Zend/zend_ini_scanner.c" -yy186: - YYDEBUG(186, *YYCURSOR); +#line 2416 "Zend/zend_ini_scanner.c" +yy185: + YYDEBUG(185, *YYCURSOR); ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; -yy187: - YYDEBUG(187, *YYCURSOR); +yy186: + YYDEBUG(186, *YYCURSOR); if (yybm[0+yych] & 2) { - goto yy186; + goto yy185; } - if (yych <= 0x08) goto yy185; - if (yych <= '\n') goto yy188; - if (yych == '\r') goto yy189; - goto yy185; + if (yych == '\n') goto yy187; + if (yych == '\r') goto yy188; + goto yy184; +yy187: + YYDEBUG(187, *YYCURSOR); + yych = *++YYCURSOR; + goto yy184; yy188: YYDEBUG(188, *YYCURSOR); yych = *++YYCURSOR; - goto yy185; + if (yych == '\n') goto yy187; + goto yy184; yy189: YYDEBUG(189, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy188; - goto yy185; -yy190: - YYDEBUG(190, *YYCURSOR); yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy191: - YYDEBUG(191, *YYCURSOR); +yy190: + YYDEBUG(190, *YYCURSOR); if (yybm[0+yych] & 4) { - goto yy190; + goto yy189; } - if (yych <= '"') goto yy169; - if (yych <= '$') goto yy193; - if (yych <= ';') goto yy169; - if (yych >= ']') goto yy169; -yy192: - YYDEBUG(192, *YYCURSOR); + if (yych == '$') goto yy192; + if (yych != '\\') goto yy168; +yy191: + YYDEBUG(191, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - goto yy190; -yy193: - YYDEBUG(193, *YYCURSOR); + goto yy189; +yy192: + YYDEBUG(192, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; if (yych <= '\\') { - if (yych <= 0x00) goto yy194; - if (yych <= '[') goto yy190; - goto yy195; + if (yych <= 0x00) goto yy193; + if (yych <= '[') goto yy189; + goto yy194; } else { - if (yych != '{') goto yy190; + if (yych != '{') goto yy189; } -yy194: - YYDEBUG(194, *YYCURSOR); +yy193: + YYDEBUG(193, *YYCURSOR); YYCURSOR = YYMARKER; if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy169; + if (yyaccept <= 0) { + goto yy168; } else { - goto yy172; + goto yy171; } } else { - if (yyaccept == 2) { - goto yy180; + if (yyaccept <= 2) { + goto yy179; } else { - goto yy182; + goto yy181; } } -yy195: - YYDEBUG(195, *YYCURSOR); +yy194: + YYDEBUG(194, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 8) { - goto yy196; + goto yy195; } - if (yych == '\\') goto yy198; - goto yy190; -yy196: - YYDEBUG(196, *YYCURSOR); + if (yych == '\\') goto yy197; + goto yy189; +yy195: + YYDEBUG(195, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(197, *YYCURSOR); + YYDEBUG(196, *YYCURSOR); if (yybm[0+yych] & 8) { - goto yy196; + goto yy195; } - if (yych == '\\') goto yy200; - goto yy190; -yy198: - YYDEBUG(198, *YYCURSOR); + if (yych == '\\') goto yy199; + goto yy189; +yy197: + YYDEBUG(197, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(199, *YYCURSOR); + YYDEBUG(198, *YYCURSOR); if (yybm[0+yych] & 8) { - goto yy196; + goto yy195; } - if (yych == '\\') goto yy198; - goto yy190; -yy200: - YYDEBUG(200, *YYCURSOR); + if (yych == '\\') goto yy197; + goto yy189; +yy199: + YYDEBUG(199, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 8) { - goto yy196; + goto yy195; } - if (yych == '\\') goto yy198; - goto yy190; -yy201: - YYDEBUG(201, *YYCURSOR); + if (yych == '\\') goto yy197; + goto yy189; +yy200: + YYDEBUG(200, *YYCURSOR); yyaccept = 3; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(202, *YYCURSOR); + YYDEBUG(201, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy201; + goto yy200; } if (yych <= '$') { if (yych <= '\r') { - if (yych == '\n') goto yy182; - if (yych <= '\f') goto yy190; - goto yy182; + if (yych == '\n') goto yy181; + if (yych <= '\f') goto yy189; + goto yy181; } else { - if (yych == '"') goto yy182; - if (yych <= '#') goto yy190; - goto yy193; + if (yych == '"') goto yy181; + if (yych <= '#') goto yy189; + goto yy192; } } else { if (yych <= ';') { - if (yych == '\'') goto yy182; - if (yych <= ':') goto yy190; - goto yy182; + if (yych == '\'') goto yy181; + if (yych <= ':') goto yy189; + goto yy181; } else { - if (yych <= '[') goto yy190; - if (yych <= '\\') goto yy192; - if (yych <= ']') goto yy182; - goto yy190; + if (yych <= '[') goto yy189; + if (yych <= '\\') goto yy191; + if (yych <= ']') goto yy181; + goto yy189; } } -yy203: - YYDEBUG(203, *YYCURSOR); +yy202: + YYDEBUG(202, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(204, *YYCURSOR); + YYDEBUG(203, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy203; + goto yy202; } if (yych <= '$') { if (yych <= '\r') { - if (yych == '\n') goto yy180; - if (yych <= '\f') goto yy190; - goto yy180; + if (yych == '\n') goto yy179; + if (yych <= '\f') goto yy189; + goto yy179; } else { - if (yych == '"') goto yy180; - if (yych <= '#') goto yy190; - goto yy193; + if (yych == '"') goto yy179; + if (yych <= '#') goto yy189; + goto yy192; } } else { if (yych <= ';') { - if (yych == '\'') goto yy180; - if (yych <= ':') goto yy190; - goto yy180; + if (yych == '\'') goto yy179; + if (yych <= ':') goto yy189; + goto yy179; } else { - if (yych <= '[') goto yy190; - if (yych <= '\\') goto yy192; - if (yych <= ']') goto yy180; - goto yy190; + if (yych <= '[') goto yy189; + if (yych <= '\\') goto yy191; + if (yych <= ']') goto yy179; + goto yy189; } } -yy205: - YYDEBUG(205, *YYCURSOR); +yy204: + YYDEBUG(204, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(206, *YYCURSOR); + YYDEBUG(205, *YYCURSOR); if (yych <= '\'') { if (yych <= '!') { if (yych <= '\n') { - if (yych <= '\t') goto yy190; - goto yy180; + if (yych <= '\t') goto yy189; + goto yy179; } else { - if (yych == '\r') goto yy180; - goto yy190; + if (yych == '\r') goto yy179; + goto yy189; } } else { if (yych <= '#') { - if (yych <= '"') goto yy180; - goto yy190; + if (yych <= '"') goto yy179; + goto yy189; } else { - if (yych <= '$') goto yy193; - if (yych <= '&') goto yy190; - goto yy180; + if (yych <= '$') goto yy192; + if (yych <= '&') goto yy189; + goto yy179; } } } else { if (yych <= ':') { if (yych <= '.') { - if (yych <= '-') goto yy190; - goto yy203; + if (yych <= '-') goto yy189; + goto yy202; } else { - if (yych <= '/') goto yy190; - if (yych <= '9') goto yy205; - goto yy190; + if (yych <= '/') goto yy189; + if (yych <= '9') goto yy204; + goto yy189; } } else { if (yych <= '[') { - if (yych <= ';') goto yy180; - goto yy190; + if (yych <= ';') goto yy179; + goto yy189; } else { - if (yych <= '\\') goto yy192; - if (yych <= ']') goto yy180; - goto yy190; + if (yych <= '\\') goto yy191; + if (yych <= ']') goto yy179; + goto yy189; } } } -yy207: - YYDEBUG(207, *YYCURSOR); +yy206: + YYDEBUG(206, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(208, *YYCURSOR); + YYDEBUG(207, *YYCURSOR); if (yych <= '&') { if (yych <= '\r') { - if (yych == '\n') goto yy180; - if (yych <= '\f') goto yy190; - goto yy180; + if (yych == '\n') goto yy179; + if (yych <= '\f') goto yy189; + goto yy179; } else { if (yych <= '"') { - if (yych <= '!') goto yy190; - goto yy180; + if (yych <= '!') goto yy189; + goto yy179; } else { - if (yych == '$') goto yy193; - goto yy190; + if (yych == '$') goto yy192; + goto yy189; } } } else { if (yych <= ':') { - if (yych <= '\'') goto yy180; - if (yych <= '/') goto yy190; - if (yych <= '9') goto yy207; - goto yy190; + if (yych <= '\'') goto yy179; + if (yych <= '/') goto yy189; + if (yych <= '9') goto yy206; + goto yy189; } else { if (yych <= '[') { - if (yych <= ';') goto yy180; - goto yy190; + if (yych <= ';') goto yy179; + goto yy189; } else { - if (yych <= '\\') goto yy192; - if (yych <= ']') goto yy180; - goto yy190; + if (yych <= '\\') goto yy191; + if (yych <= ']') goto yy179; + goto yy189; } } } -yy209: - YYDEBUG(209, *YYCURSOR); +yy208: + YYDEBUG(208, *YYCURSOR); yyaccept = 2; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(210, *YYCURSOR); + YYDEBUG(209, *YYCURSOR); if (yych <= '&') { if (yych <= '\r') { - if (yych == '\n') goto yy180; - if (yych <= '\f') goto yy190; - goto yy180; + if (yych == '\n') goto yy179; + if (yych <= '\f') goto yy189; + goto yy179; } else { if (yych <= '"') { - if (yych <= '!') goto yy190; - goto yy180; + if (yych <= '!') goto yy189; + goto yy179; } else { - if (yych == '$') goto yy193; - goto yy190; + if (yych == '$') goto yy192; + goto yy189; } } } else { if (yych <= ':') { - if (yych <= '\'') goto yy180; - if (yych <= '/') goto yy190; - if (yych <= '9') goto yy209; - goto yy190; + if (yych <= '\'') goto yy179; + if (yych <= '/') goto yy189; + if (yych <= '9') goto yy208; + goto yy189; } else { if (yych <= '[') { - if (yych <= ';') goto yy180; - goto yy190; + if (yych <= ';') goto yy179; + goto yy189; } else { - if (yych <= '\\') goto yy192; - if (yych <= ']') goto yy180; - goto yy190; + if (yych <= '\\') goto yy191; + if (yych <= ']') goto yy179; + goto yy189; } } } -yy211: - YYDEBUG(211, *YYCURSOR); +yy210: + YYDEBUG(210, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(212, *YYCURSOR); + YYDEBUG(211, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy211; + goto yy210; } - YYDEBUG(213, *YYCURSOR); + YYDEBUG(212, *YYCURSOR); ++YYCURSOR; - YYDEBUG(214, *YYCURSOR); + YYDEBUG(213, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 418 "Zend/zend_ini_scanner.l" { /* Raw string */ @@ -2742,65 +2733,65 @@ yy211: } RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 2746 "Zend/zend_ini_scanner.c" -yy215: - YYDEBUG(215, *YYCURSOR); +#line 2737 "Zend/zend_ini_scanner.c" +yy214: + YYDEBUG(214, *YYCURSOR); ++YYCURSOR; - YYDEBUG(216, *YYCURSOR); + YYDEBUG(215, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 451 "Zend/zend_ini_scanner.l" { /* Variable start */ yy_push_state(ST_VARNAME); return TC_DOLLAR_CURLY; } -#line 2757 "Zend/zend_ini_scanner.c" -yy217: - YYDEBUG(217, *YYCURSOR); +#line 2748 "Zend/zend_ini_scanner.c" +yy216: + YYDEBUG(216, *YYCURSOR); yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(218, *YYCURSOR); + YYDEBUG(217, *YYCURSOR); if (yych <= '"') { if (yych <= '\f') { - if (yych <= 0x08) goto yy190; - if (yych <= '\t') goto yy217; - if (yych <= '\n') goto yy169; - goto yy190; + if (yych <= 0x08) goto yy189; + if (yych <= '\t') goto yy216; + if (yych <= '\n') goto yy168; + goto yy189; } else { if (yych <= 0x1F) { - if (yych <= '\r') goto yy169; - goto yy190; + if (yych <= '\r') goto yy168; + goto yy189; } else { - if (yych <= ' ') goto yy217; - if (yych <= '!') goto yy190; + if (yych <= ' ') goto yy216; + if (yych <= '!') goto yy189; } } } else { if (yych <= ':') { if (yych <= '$') { - if (yych <= '#') goto yy190; - goto yy193; + if (yych <= '#') goto yy189; + goto yy192; } else { - if (yych == '\'') goto yy169; - goto yy190; + if (yych == '\'') goto yy168; + goto yy189; } } else { if (yych <= '[') { - if (yych <= ';') goto yy169; - goto yy190; + if (yych <= ';') goto yy168; + goto yy189; } else { - if (yych <= '\\') goto yy192; - if (yych <= ']') goto yy169; - goto yy190; + if (yych <= '\\') goto yy191; + if (yych <= ']') goto yy168; + goto yy189; } } } -yy219: - YYDEBUG(219, *YYCURSOR); +yy218: + YYDEBUG(218, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy174; + goto yy173; } /* *********************************** */ yyc_ST_VALUE: @@ -2839,28 +2830,28 @@ yyc_ST_VALUE: 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, }; - YYDEBUG(220, *YYCURSOR); + YYDEBUG(219, *YYCURSOR); YYFILL(6); yych = *YYCURSOR; YYDEBUG(-1, yych); switch (yych) { - case 0x00: goto yy222; + case 0x00: goto yy221; case '\t': - case ' ': goto yy226; - case '\n': goto yy228; - case '\r': goto yy230; + case ' ': goto yy225; + case '\n': goto yy227; + case '\r': goto yy229; case '!': case '&': case '(': case ')': case '^': case '|': - case '~': goto yy231; - case '"': goto yy233; - case '$': goto yy235; - case '\'': goto yy236; - case '-': goto yy237; - case '.': goto yy238; + case '~': goto yy230; + case '"': goto yy232; + case '$': goto yy234; + case '\'': goto yy235; + case '-': goto yy236; + case '.': goto yy237; case '0': case '1': case '2': @@ -2870,9 +2861,9 @@ yyc_ST_VALUE: case '6': case '7': case '8': - case '9': goto yy239; - case ';': goto yy241; - case '=': goto yy242; + case '9': goto yy238; + case ';': goto yy240; + case '=': goto yy241; case 'A': case 'B': case 'C': @@ -2915,62 +2906,62 @@ yyc_ST_VALUE: case 'v': case 'w': case 'x': - case 'z': goto yy244; + case 'z': goto yy243; case 'F': - case 'f': goto yy246; + case 'f': goto yy245; case 'N': - case 'n': goto yy247; + case 'n': goto yy246; case 'O': - case 'o': goto yy248; + case 'o': goto yy247; case 'T': - case 't': goto yy249; + case 't': goto yy248; case 'Y': - case 'y': goto yy250; - default: goto yy224; + case 'y': goto yy249; + default: goto yy223; } +yy221: + YYDEBUG(221, *YYCURSOR); + ++YYCURSOR; yy222: YYDEBUG(222, *YYCURSOR); - ++YYCURSOR; -yy223: - YYDEBUG(223, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 645 "Zend/zend_ini_scanner.l" { /* End of option value (if EOF is reached before EOL */ BEGIN(INITIAL); return END_OF_LINE; } -#line 2943 "Zend/zend_ini_scanner.c" -yy224: - YYDEBUG(224, *YYCURSOR); +#line 2934 "Zend/zend_ini_scanner.c" +yy223: + YYDEBUG(223, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - goto yy252; -yy225: - YYDEBUG(225, *YYCURSOR); + goto yy251; +yy224: + YYDEBUG(224, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 571 "Zend/zend_ini_scanner.l" { /* Get everything else as option/offset value */ RETURN_TOKEN(TC_STRING, yytext, yyleng); } -#line 2956 "Zend/zend_ini_scanner.c" -yy226: - YYDEBUG(226, *YYCURSOR); +#line 2947 "Zend/zend_ini_scanner.c" +yy225: + YYDEBUG(225, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - goto yy306; -yy227: - YYDEBUG(227, *YYCURSOR); + goto yy305; +yy226: + YYDEBUG(226, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 625 "Zend/zend_ini_scanner.l" { RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng); } -#line 2969 "Zend/zend_ini_scanner.c" +#line 2960 "Zend/zend_ini_scanner.c" +yy227: + YYDEBUG(227, *YYCURSOR); + ++YYCURSOR; yy228: YYDEBUG(228, *YYCURSOR); - ++YYCURSOR; -yy229: - YYDEBUG(229, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 543 "Zend/zend_ini_scanner.l" { /* End of option value */ @@ -2978,125 +2969,125 @@ yy229: SCNG(lineno)++; return END_OF_LINE; } -#line 2982 "Zend/zend_ini_scanner.c" +#line 2973 "Zend/zend_ini_scanner.c" +yy229: + YYDEBUG(229, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy303; + goto yy228; yy230: YYDEBUG(230, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy304; - goto yy229; -yy231: - YYDEBUG(231, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy303; -yy232: - YYDEBUG(232, *YYCURSOR); + goto yy302; +yy231: + YYDEBUG(231, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 561 "Zend/zend_ini_scanner.l" { /* Boolean operators */ return yytext[0]; } -#line 3000 "Zend/zend_ini_scanner.c" +#line 2991 "Zend/zend_ini_scanner.c" +yy232: + YYDEBUG(232, *YYCURSOR); + ++YYCURSOR; yy233: YYDEBUG(233, *YYCURSOR); - ++YYCURSOR; -yy234: - YYDEBUG(234, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 579 "Zend/zend_ini_scanner.l" { /* Double quoted '"' string start */ yy_push_state(ST_DOUBLE_QUOTES); return '"'; } -#line 3012 "Zend/zend_ini_scanner.c" -yy235: - YYDEBUG(235, *YYCURSOR); +#line 3003 "Zend/zend_ini_scanner.c" +yy234: + YYDEBUG(234, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\\') { - if (yych <= 0x00) goto yy223; - if (yych <= '[') goto yy251; - goto yy258; + if (yych <= 0x00) goto yy222; + if (yych <= '[') goto yy250; + goto yy257; } else { - if (yych == '{') goto yy300; - goto yy251; + if (yych == '{') goto yy299; + goto yy250; } -yy236: - YYDEBUG(236, *YYCURSOR); +yy235: + YYDEBUG(235, *YYCURSOR); yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 128) { - goto yy296; + goto yy295; } - goto yy223; + goto yy222; +yy236: + YYDEBUG(236, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy251; + if (yych <= '9') goto yy293; + goto yy251; yy237: YYDEBUG(237, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy252; - if (yych <= '9') goto yy294; - goto yy252; + if (yych <= '/') goto yy251; + if (yych <= '9') goto yy291; + goto yy251; yy238: YYDEBUG(238, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy252; - if (yych <= '9') goto yy292; - goto yy252; -yy239: - YYDEBUG(239, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x00) goto yy240; - if (yych <= 0x08) goto yy252; + if (yych <= 0x00) goto yy239; + if (yych <= 0x08) goto yy251; } else { - if (yych != '\r') goto yy252; + if (yych != '\r') goto yy251; } } else { if (yych <= ')') { - if (yych <= '"') goto yy240; - if (yych <= '%') goto yy252; + if (yych <= '"') goto yy239; + if (yych <= '%') goto yy251; } else { - if (yych == '.') goto yy288; - goto yy252; + if (yych == '.') goto yy287; + goto yy251; } } } else { if (yych <= ']') { if (yych <= ';') { - if (yych <= '9') goto yy290; - if (yych <= ':') goto yy252; + if (yych <= '9') goto yy289; + if (yych <= ':') goto yy251; } else { - if (yych != '=') goto yy252; + if (yych != '=') goto yy251; } } else { if (yych <= '|') { - if (yych <= '^') goto yy240; - if (yych <= '{') goto yy252; + if (yych <= '^') goto yy239; + if (yych <= '{') goto yy251; } else { - if (yych != '~') goto yy252; + if (yych != '~') goto yy251; } } } -yy240: - YYDEBUG(240, *YYCURSOR); +yy239: + YYDEBUG(239, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 553 "Zend/zend_ini_scanner.l" { /* Get number option value as string */ RETURN_TOKEN(TC_NUMBER, yytext, yyleng); } -#line 3091 "Zend/zend_ini_scanner.c" -yy241: - YYDEBUG(241, *YYCURSOR); +#line 3082 "Zend/zend_ini_scanner.c" +yy240: + YYDEBUG(240, *YYCURSOR); yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); - goto yy284; -yy242: - YYDEBUG(242, *YYCURSOR); + goto yy283; +yy241: + YYDEBUG(241, *YYCURSOR); ++YYCURSOR; - YYDEBUG(243, *YYCURSOR); + YYDEBUG(242, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 565 "Zend/zend_ini_scanner.l" { /* Make = used in option value to trigger error */ @@ -3104,1223 +3095,1222 @@ yy242: BEGIN(INITIAL); return END_OF_LINE; } -#line 3108 "Zend/zend_ini_scanner.c" -yy244: - YYDEBUG(244, *YYCURSOR); +#line 3099 "Zend/zend_ini_scanner.c" +yy243: + YYDEBUG(243, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 4) { - goto yy253; + goto yy252; } if (yych <= ':') { if (yych <= '\r') { if (yych <= 0x08) { - if (yych >= 0x01) goto yy252; + if (yych >= 0x01) goto yy251; } else { - if (yych <= '\n') goto yy245; - if (yych <= '\f') goto yy252; + if (yych <= '\n') goto yy244; + if (yych <= '\f') goto yy251; } } else { if (yych <= '"') { - if (yych <= 0x1F) goto yy252; + if (yych <= 0x1F) goto yy251; } else { - if (yych <= '%') goto yy252; - if (yych >= '*') goto yy252; + if (yych <= '%') goto yy251; + if (yych >= '*') goto yy251; } } } else { if (yych <= '^') { if (yych <= '<') { - if (yych >= '<') goto yy252; + if (yych >= '<') goto yy251; } else { - if (yych <= '=') goto yy245; - if (yych <= ']') goto yy252; + if (yych <= '=') goto yy244; + if (yych <= ']') goto yy251; } } else { if (yych <= '|') { - if (yych <= '{') goto yy252; + if (yych <= '{') goto yy251; } else { - if (yych != '~') goto yy252; + if (yych != '~') goto yy251; } } } -yy245: - YYDEBUG(245, *YYCURSOR); +yy244: + YYDEBUG(244, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 549 "Zend/zend_ini_scanner.l" { /* Get constant option value */ RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); } -#line 3155 "Zend/zend_ini_scanner.c" -yy246: - YYDEBUG(246, *YYCURSOR); +#line 3146 "Zend/zend_ini_scanner.c" +yy245: + YYDEBUG(245, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '<') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '/') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - goto yy252; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + goto yy251; } else { - if (yych <= '9') goto yy253; - if (yych == ';') goto yy245; - goto yy252; + if (yych <= '9') goto yy252; + if (yych == ';') goto yy244; + goto yy251; } } } else { if (yych <= '_') { if (yych <= 'A') { - if (yych <= '=') goto yy245; - if (yych <= '@') goto yy252; - goto yy280; + if (yych <= '=') goto yy244; + if (yych <= '@') goto yy251; + goto yy279; } else { - if (yych <= 'Z') goto yy253; - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - goto yy253; + if (yych <= 'Z') goto yy252; + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + goto yy252; } } else { if (yych <= '{') { - if (yych <= '`') goto yy252; - if (yych <= 'a') goto yy280; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych <= '`') goto yy251; + if (yych <= 'a') goto yy279; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy247: - YYDEBUG(247, *YYCURSOR); +yy246: + YYDEBUG(246, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych <= '%') { if (yych <= '\f') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - if (yych <= '\n') goto yy245; - goto yy252; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + if (yych <= '\n') goto yy244; + goto yy251; } else { - if (yych <= '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - if (yych <= '"') goto yy245; - goto yy252; + if (yych <= '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + if (yych <= '"') goto yy244; + goto yy251; } } else { if (yych <= ':') { - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - if (yych <= '9') goto yy253; - goto yy252; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + if (yych <= '9') goto yy252; + goto yy251; } else { if (yych <= '<') { - if (yych <= ';') goto yy245; - goto yy252; + if (yych <= ';') goto yy244; + goto yy251; } else { - if (yych <= '=') goto yy245; - if (yych <= '@') goto yy252; - goto yy253; + if (yych <= '=') goto yy244; + if (yych <= '@') goto yy251; + goto yy252; } } } } else { if (yych <= 'n') { if (yych <= 'Z') { - if (yych <= 'O') goto yy272; - if (yych == 'U') goto yy273; - goto yy253; + if (yych <= 'O') goto yy271; + if (yych == 'U') goto yy272; + goto yy252; } else { if (yych <= '^') { - if (yych <= ']') goto yy252; - goto yy245; + if (yych <= ']') goto yy251; + goto yy244; } else { - if (yych == '`') goto yy252; - goto yy253; + if (yych == '`') goto yy251; + goto yy252; } } } else { if (yych <= 'z') { - if (yych <= 'o') goto yy272; - if (yych == 'u') goto yy273; - goto yy253; + if (yych <= 'o') goto yy271; + if (yych == 'u') goto yy272; + goto yy252; } else { if (yych <= '|') { - if (yych <= '{') goto yy252; - goto yy245; + if (yych <= '{') goto yy251; + goto yy244; } else { - if (yych == '~') goto yy245; - goto yy252; + if (yych == '~') goto yy244; + goto yy251; } } } } -yy248: - YYDEBUG(248, *YYCURSOR); +yy247: + YYDEBUG(247, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'E') { if (yych <= '%') { if (yych <= '\f') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - if (yych <= '\n') goto yy245; - goto yy252; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + if (yych <= '\n') goto yy244; + goto yy251; } else { - if (yych <= '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - if (yych <= '"') goto yy245; - goto yy252; + if (yych <= '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + if (yych <= '"') goto yy244; + goto yy251; } } else { if (yych <= ':') { - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - if (yych <= '9') goto yy253; - goto yy252; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + if (yych <= '9') goto yy252; + goto yy251; } else { if (yych <= '<') { - if (yych <= ';') goto yy245; - goto yy252; + if (yych <= ';') goto yy244; + goto yy251; } else { - if (yych <= '=') goto yy245; - if (yych <= '@') goto yy252; - goto yy253; + if (yych <= '=') goto yy244; + if (yych <= '@') goto yy251; + goto yy252; } } } } else { if (yych <= 'e') { if (yych <= 'Z') { - if (yych <= 'F') goto yy267; - if (yych == 'N') goto yy261; - goto yy253; + if (yych <= 'F') goto yy266; + if (yych == 'N') goto yy260; + goto yy252; } else { if (yych <= '^') { - if (yych <= ']') goto yy252; - goto yy245; + if (yych <= ']') goto yy251; + goto yy244; } else { - if (yych == '`') goto yy252; - goto yy253; + if (yych == '`') goto yy251; + goto yy252; } } } else { if (yych <= 'z') { - if (yych <= 'f') goto yy267; - if (yych == 'n') goto yy261; - goto yy253; + if (yych <= 'f') goto yy266; + if (yych == 'n') goto yy260; + goto yy252; } else { if (yych <= '|') { - if (yych <= '{') goto yy252; - goto yy245; + if (yych <= '{') goto yy251; + goto yy244; } else { - if (yych == '~') goto yy245; - goto yy252; + if (yych == '~') goto yy244; + goto yy251; } } } } -yy249: - YYDEBUG(249, *YYCURSOR); +yy248: + YYDEBUG(248, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych == 'R') goto yy265; - goto yy253; - } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; + if (yych <= '@') goto yy251; + if (yych == 'R') goto yy264; goto yy252; + } else { + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'r') goto yy265; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'r') goto yy264; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy250: - YYDEBUG(250, *YYCURSOR); +yy249: + YYDEBUG(249, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych == 'E') goto yy255; - goto yy253; - } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; + if (yych <= '@') goto yy251; + if (yych == 'E') goto yy254; goto yy252; + } else { + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'e') goto yy255; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'e') goto yy254; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy251: - YYDEBUG(251, *YYCURSOR); +yy250: + YYDEBUG(250, *YYCURSOR); yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy252: - YYDEBUG(252, *YYCURSOR); +yy251: + YYDEBUG(251, *YYCURSOR); if (yybm[0+yych] & 2) { - goto yy251; + goto yy250; } - if (yych <= '"') goto yy225; - if (yych <= '$') goto yy256; - goto yy225; -yy253: - YYDEBUG(253, *YYCURSOR); + if (yych == '$') goto yy255; + goto yy224; +yy252: + YYDEBUG(252, *YYCURSOR); yyaccept = 4; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(254, *YYCURSOR); + YYDEBUG(253, *YYCURSOR); if (yybm[0+yych] & 4) { - goto yy253; + goto yy252; } if (yych <= ')') { if (yych <= '\r') { if (yych <= 0x08) { - if (yych <= 0x00) goto yy245; - goto yy251; + if (yych <= 0x00) goto yy244; + goto yy250; } else { - if (yych <= '\n') goto yy245; - if (yych <= '\f') goto yy251; - goto yy245; + if (yych <= '\n') goto yy244; + if (yych <= '\f') goto yy250; + goto yy244; } } else { if (yych <= '#') { - if (yych <= 0x1F) goto yy251; - if (yych <= '"') goto yy245; - goto yy251; + if (yych <= 0x1F) goto yy250; + if (yych <= '"') goto yy244; + goto yy250; } else { - if (yych <= '$') goto yy256; - if (yych <= '%') goto yy251; - goto yy245; + if (yych <= '$') goto yy255; + if (yych <= '%') goto yy250; + goto yy244; } } } else { if (yych <= ']') { if (yych <= ';') { - if (yych <= ':') goto yy251; - goto yy245; + if (yych <= ':') goto yy250; + goto yy244; } else { - if (yych == '=') goto yy245; - goto yy251; + if (yych == '=') goto yy244; + goto yy250; } } else { if (yych <= '|') { - if (yych <= '^') goto yy245; - if (yych <= '{') goto yy251; - goto yy245; + if (yych <= '^') goto yy244; + if (yych <= '{') goto yy250; + goto yy244; } else { - if (yych == '~') goto yy245; - goto yy251; + if (yych == '~') goto yy244; + goto yy250; } } } -yy255: - YYDEBUG(255, *YYCURSOR); +yy254: + YYDEBUG(254, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych == 'S') goto yy261; - goto yy253; - } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; + if (yych <= '@') goto yy251; + if (yych == 'S') goto yy260; goto yy252; + } else { + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 's') goto yy261; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 's') goto yy260; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy256: - YYDEBUG(256, *YYCURSOR); +yy255: + YYDEBUG(255, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; if (yych <= '\\') { - if (yych <= 0x00) goto yy257; - if (yych <= '[') goto yy251; - goto yy258; + if (yych <= 0x00) goto yy256; + if (yych <= '[') goto yy250; + goto yy257; } else { - if (yych != '{') goto yy251; + if (yych != '{') goto yy250; } -yy257: - YYDEBUG(257, *YYCURSOR); +yy256: + YYDEBUG(256, *YYCURSOR); YYCURSOR = YYMARKER; if (yyaccept <= 3) { if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy225; + if (yyaccept <= 0) { + goto yy224; } else { - goto yy227; + goto yy226; } } else { - if (yyaccept == 2) { - goto yy223; + if (yyaccept <= 2) { + goto yy222; } else { - goto yy240; + goto yy239; } } } else { if (yyaccept <= 5) { - if (yyaccept == 4) { - goto yy245; + if (yyaccept <= 4) { + goto yy244; } else { - goto yy262; + goto yy261; } } else { - if (yyaccept == 6) { - goto yy269; + if (yyaccept <= 6) { + goto yy268; } else { - goto yy276; + goto yy275; } } } -yy258: - YYDEBUG(258, *YYCURSOR); +yy257: + YYDEBUG(257, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 8) { - goto yy259; + goto yy258; } - goto yy251; -yy259: - YYDEBUG(259, *YYCURSOR); + goto yy250; +yy258: + YYDEBUG(258, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(260, *YYCURSOR); + YYDEBUG(259, *YYCURSOR); if (yybm[0+yych] & 8) { - goto yy259; + goto yy258; } - if (yych <= 0x00) goto yy225; - if (yych == '\\') goto yy258; - goto yy251; -yy261: - YYDEBUG(261, *YYCURSOR); + if (yych <= 0x00) goto yy224; + if (yych == '\\') goto yy257; + goto yy250; +yy260: + YYDEBUG(260, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { - goto yy263; + goto yy262; } if (yych <= ';') { - if (yych <= 0x1F) { + if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x00) goto yy262; - if (yych <= 0x08) goto yy252; + if (yych <= 0x00) goto yy261; + if (yych <= '\t') goto yy251; } else { - if (yych != '\r') goto yy252; + if (yych != '\r') goto yy251; } } else { if (yych <= ')') { - if (yych <= '"') goto yy262; - if (yych <= '%') goto yy252; + if (yych <= '"') goto yy261; + if (yych <= '%') goto yy251; } else { - if (yych <= '/') goto yy252; - if (yych <= '9') goto yy253; - if (yych <= ':') goto yy252; + if (yych <= '/') goto yy251; + if (yych <= '9') goto yy252; + if (yych <= ':') goto yy251; } } } else { if (yych <= '_') { if (yych <= '@') { - if (yych != '=') goto yy252; + if (yych != '=') goto yy251; } else { - if (yych <= 'Z') goto yy253; - if (yych <= ']') goto yy252; - if (yych >= '_') goto yy253; + if (yych <= 'Z') goto yy252; + if (yych <= ']') goto yy251; + if (yych >= '_') goto yy252; } } else { if (yych <= '{') { - if (yych <= '`') goto yy252; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych <= '`') goto yy251; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych >= 0x7F) goto yy252; + if (yych == '}') goto yy251; + if (yych >= 0x7F) goto yy251; } } } -yy262: - YYDEBUG(262, *YYCURSOR); +yy261: + YYDEBUG(261, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 471 "Zend/zend_ini_scanner.l" { /* TRUE value (when used outside option value/offset this causes parse error!) */ RETURN_TOKEN(BOOL_TRUE, "1", 1); } -#line 3672 "Zend/zend_ini_scanner.c" -yy263: - YYDEBUG(263, *YYCURSOR); +#line 3662 "Zend/zend_ini_scanner.c" +yy262: + YYDEBUG(262, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(264, *YYCURSOR); + YYDEBUG(263, *YYCURSOR); if (yybm[0+yych] & 16) { - goto yy263; + goto yy262; } - goto yy262; -yy265: - YYDEBUG(265, *YYCURSOR); + goto yy261; +yy264: + YYDEBUG(264, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych != 'U') goto yy253; + if (yych <= '@') goto yy251; + if (yych != 'U') goto yy252; } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; - goto yy252; + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'u') goto yy266; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'u') goto yy265; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy266: - YYDEBUG(266, *YYCURSOR); +yy265: + YYDEBUG(265, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych == 'E') goto yy261; - goto yy253; - } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; + if (yych <= '@') goto yy251; + if (yych == 'E') goto yy260; goto yy252; + } else { + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'e') goto yy261; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'e') goto yy260; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy267: - YYDEBUG(267, *YYCURSOR); +yy266: + YYDEBUG(266, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych != 'F') goto yy253; + if (yych <= '@') goto yy251; + if (yych != 'F') goto yy252; } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; - goto yy252; + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'f') goto yy268; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'f') goto yy267; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy268: - YYDEBUG(268, *YYCURSOR); +yy267: + YYDEBUG(267, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 4) { - goto yy253; + goto yy252; } if (yych <= ')') { if (yych <= '\f') { if (yych <= 0x08) { - if (yych >= 0x01) goto yy252; + if (yych >= 0x01) goto yy251; } else { - if (yych <= '\t') goto yy270; - if (yych >= '\v') goto yy252; + if (yych <= '\t') goto yy269; + if (yych >= '\v') goto yy251; } } else { if (yych <= ' ') { - if (yych <= '\r') goto yy269; - if (yych <= 0x1F) goto yy252; - goto yy270; + if (yych <= '\r') goto yy268; + if (yych <= 0x1F) goto yy251; + goto yy269; } else { - if (yych <= '"') goto yy269; - if (yych <= '%') goto yy252; + if (yych <= '"') goto yy268; + if (yych <= '%') goto yy251; } } } else { if (yych <= ']') { if (yych <= ';') { - if (yych <= ':') goto yy252; + if (yych <= ':') goto yy251; } else { - if (yych != '=') goto yy252; + if (yych != '=') goto yy251; } } else { if (yych <= '|') { - if (yych <= '^') goto yy269; - if (yych <= '{') goto yy252; + if (yych <= '^') goto yy268; + if (yych <= '{') goto yy251; } else { - if (yych != '~') goto yy252; + if (yych != '~') goto yy251; } } } -yy269: - YYDEBUG(269, *YYCURSOR); +yy268: + YYDEBUG(268, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 475 "Zend/zend_ini_scanner.l" { /* FALSE value (when used outside option value/offset this causes parse error!)*/ RETURN_TOKEN(BOOL_FALSE, "", 0); } -#line 3882 "Zend/zend_ini_scanner.c" -yy270: - YYDEBUG(270, *YYCURSOR); +#line 3872 "Zend/zend_ini_scanner.c" +yy269: + YYDEBUG(269, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; + YYDEBUG(270, *YYCURSOR); + if (yych == '\t') goto yy269; + if (yych == ' ') goto yy269; + goto yy268; +yy271: YYDEBUG(271, *YYCURSOR); - if (yych == '\t') goto yy270; - if (yych == ' ') goto yy270; - goto yy269; -yy272: - YYDEBUG(272, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '<') { if (yych <= ' ') { if (yych <= '\n') { - if (yych <= 0x00) goto yy269; - if (yych <= 0x08) goto yy252; - if (yych <= '\t') goto yy270; - goto yy269; + if (yych <= 0x00) goto yy268; + if (yych <= 0x08) goto yy251; + if (yych <= '\t') goto yy269; + goto yy268; } else { - if (yych == '\r') goto yy269; - if (yych <= 0x1F) goto yy252; - goto yy270; + if (yych == '\r') goto yy268; + if (yych <= 0x1F) goto yy251; + goto yy269; } } else { if (yych <= '/') { - if (yych <= '"') goto yy269; - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy269; - goto yy252; + if (yych <= '"') goto yy268; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy268; + goto yy251; } else { - if (yych <= '9') goto yy253; - if (yych == ';') goto yy269; - goto yy252; + if (yych <= '9') goto yy252; + if (yych == ';') goto yy268; + goto yy251; } } } else { if (yych <= '_') { if (yych <= 'N') { - if (yych <= '=') goto yy269; - if (yych <= '@') goto yy252; - if (yych <= 'M') goto yy253; - goto yy279; - } else { - if (yych <= 'Z') goto yy253; - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy269; - goto yy253; + if (yych <= '=') goto yy268; + if (yych <= '@') goto yy251; + if (yych <= 'M') goto yy252; + goto yy278; + } else { + if (yych <= 'Z') goto yy252; + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy268; + goto yy252; } } else { if (yych <= 'z') { - if (yych <= '`') goto yy252; - if (yych == 'n') goto yy279; - goto yy253; + if (yych <= '`') goto yy251; + if (yych == 'n') goto yy278; + goto yy252; } else { if (yych <= '|') { - if (yych <= '{') goto yy252; - goto yy269; + if (yych <= '{') goto yy251; + goto yy268; } else { - if (yych == '~') goto yy269; - goto yy252; + if (yych == '~') goto yy268; + goto yy251; } } } } -yy273: - YYDEBUG(273, *YYCURSOR); +yy272: + YYDEBUG(272, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych != 'L') goto yy253; + if (yych <= '@') goto yy251; + if (yych != 'L') goto yy252; } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; - goto yy252; + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'l') goto yy274; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'l') goto yy273; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy274: - YYDEBUG(274, *YYCURSOR); +yy273: + YYDEBUG(273, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych != 'L') goto yy253; + if (yych <= '@') goto yy251; + if (yych != 'L') goto yy252; } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; - goto yy252; + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'l') goto yy275; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'l') goto yy274; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy275: - YYDEBUG(275, *YYCURSOR); +yy274: + YYDEBUG(274, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 4) { - goto yy253; + goto yy252; } if (yych <= ')') { if (yych <= '\f') { if (yych <= 0x08) { - if (yych >= 0x01) goto yy252; + if (yych >= 0x01) goto yy251; } else { - if (yych <= '\t') goto yy277; - if (yych >= '\v') goto yy252; + if (yych <= '\t') goto yy276; + if (yych >= '\v') goto yy251; } } else { if (yych <= ' ') { - if (yych <= '\r') goto yy276; - if (yych <= 0x1F) goto yy252; - goto yy277; + if (yych <= '\r') goto yy275; + if (yych <= 0x1F) goto yy251; + goto yy276; } else { - if (yych <= '"') goto yy276; - if (yych <= '%') goto yy252; + if (yych <= '"') goto yy275; + if (yych <= '%') goto yy251; } } } else { if (yych <= ']') { if (yych <= ';') { - if (yych <= ':') goto yy252; + if (yych <= ':') goto yy251; } else { - if (yych != '=') goto yy252; + if (yych != '=') goto yy251; } } else { if (yych <= '|') { - if (yych <= '^') goto yy276; - if (yych <= '{') goto yy252; + if (yych <= '^') goto yy275; + if (yych <= '{') goto yy251; } else { - if (yych != '~') goto yy252; + if (yych != '~') goto yy251; } } } -yy276: - YYDEBUG(276, *YYCURSOR); +yy275: + YYDEBUG(275, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 479 "Zend/zend_ini_scanner.l" { RETURN_TOKEN(NULL_NULL, "", 0); } -#line 4097 "Zend/zend_ini_scanner.c" -yy277: - YYDEBUG(277, *YYCURSOR); +#line 4087 "Zend/zend_ini_scanner.c" +yy276: + YYDEBUG(276, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; + YYDEBUG(277, *YYCURSOR); + if (yych == '\t') goto yy276; + if (yych == ' ') goto yy276; + goto yy275; +yy278: YYDEBUG(278, *YYCURSOR); - if (yych == '\t') goto yy277; - if (yych == ' ') goto yy277; - goto yy276; -yy279: - YYDEBUG(279, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych == 'E') goto yy268; - goto yy253; - } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; + if (yych <= '@') goto yy251; + if (yych == 'E') goto yy267; goto yy252; + } else { + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'e') goto yy268; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'e') goto yy267; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy280: - YYDEBUG(280, *YYCURSOR); +yy279: + YYDEBUG(279, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych != 'L') goto yy253; + if (yych <= '@') goto yy251; + if (yych != 'L') goto yy252; } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; - goto yy252; + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'l') goto yy281; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'l') goto yy280; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy281: - YYDEBUG(281, *YYCURSOR); +yy280: + YYDEBUG(280, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych != 'S') goto yy253; + if (yych <= '@') goto yy251; + if (yych != 'S') goto yy252; } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; - goto yy252; + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 's') goto yy282; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 's') goto yy281; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy282: - YYDEBUG(282, *YYCURSOR); +yy281: + YYDEBUG(281, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '=') { if (yych <= '"') { if (yych <= '\n') { - if (yych <= 0x00) goto yy245; - if (yych <= 0x08) goto yy252; - goto yy245; + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy251; + goto yy244; } else { - if (yych == '\r') goto yy245; - if (yych <= 0x1F) goto yy252; - goto yy245; + if (yych == '\r') goto yy244; + if (yych <= 0x1F) goto yy251; + goto yy244; } } else { if (yych <= '9') { - if (yych <= '%') goto yy252; - if (yych <= ')') goto yy245; - if (yych <= '/') goto yy252; - goto yy253; + if (yych <= '%') goto yy251; + if (yych <= ')') goto yy244; + if (yych <= '/') goto yy251; + goto yy252; } else { - if (yych == ';') goto yy245; - if (yych <= '<') goto yy252; - goto yy245; + if (yych == ';') goto yy244; + if (yych <= '<') goto yy251; + goto yy244; } } } else { if (yych <= '`') { if (yych <= 'Z') { - if (yych <= '@') goto yy252; - if (yych == 'E') goto yy268; - goto yy253; - } else { - if (yych <= ']') goto yy252; - if (yych <= '^') goto yy245; - if (yych <= '_') goto yy253; + if (yych <= '@') goto yy251; + if (yych == 'E') goto yy267; goto yy252; + } else { + if (yych <= ']') goto yy251; + if (yych <= '^') goto yy244; + if (yych <= '_') goto yy252; + goto yy251; } } else { if (yych <= '{') { - if (yych == 'e') goto yy268; - if (yych <= 'z') goto yy253; - goto yy252; + if (yych == 'e') goto yy267; + if (yych <= 'z') goto yy252; + goto yy251; } else { - if (yych == '}') goto yy252; - if (yych <= '~') goto yy245; - goto yy252; + if (yych == '}') goto yy251; + if (yych <= '~') goto yy244; + goto yy251; } } } -yy283: - YYDEBUG(283, *YYCURSOR); +yy282: + YYDEBUG(282, *YYCURSOR); ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; -yy284: - YYDEBUG(284, *YYCURSOR); +yy283: + YYDEBUG(283, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy283; + goto yy282; } - if (yych >= '\v') goto yy287; + if (yych >= '\r') goto yy286; +yy284: + YYDEBUG(284, *YYCURSOR); + ++YYCURSOR; yy285: YYDEBUG(285, *YYCURSOR); - ++YYCURSOR; -yy286: - YYDEBUG(286, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 639 "Zend/zend_ini_scanner.l" { /* Comment */ @@ -4328,223 +4318,223 @@ yy286: SCNG(lineno)++; return END_OF_LINE; } -#line 4332 "Zend/zend_ini_scanner.c" +#line 4322 "Zend/zend_ini_scanner.c" +yy286: + YYDEBUG(286, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy284; + goto yy285; yy287: YYDEBUG(287, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy285; - goto yy286; -yy288: - YYDEBUG(288, *YYCURSOR); yyaccept = 3; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(289, *YYCURSOR); + YYDEBUG(288, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy288; + goto yy287; } if (yych <= ')') { if (yych <= '\r') { if (yych <= 0x08) { - if (yych <= 0x00) goto yy240; - goto yy251; + if (yych <= 0x00) goto yy239; + goto yy250; } else { - if (yych <= '\n') goto yy240; - if (yych <= '\f') goto yy251; - goto yy240; + if (yych <= '\n') goto yy239; + if (yych <= '\f') goto yy250; + goto yy239; } } else { if (yych <= '#') { - if (yych <= 0x1F) goto yy251; - if (yych <= '"') goto yy240; - goto yy251; + if (yych <= 0x1F) goto yy250; + if (yych <= '"') goto yy239; + goto yy250; } else { - if (yych <= '$') goto yy256; - if (yych <= '%') goto yy251; - goto yy240; + if (yych <= '$') goto yy255; + if (yych <= '%') goto yy250; + goto yy239; } } } else { if (yych <= ']') { if (yych <= ';') { - if (yych <= ':') goto yy251; - goto yy240; + if (yych <= ':') goto yy250; + goto yy239; } else { - if (yych == '=') goto yy240; - goto yy251; + if (yych == '=') goto yy239; + goto yy250; } } else { if (yych <= '|') { - if (yych <= '^') goto yy240; - if (yych <= '{') goto yy251; - goto yy240; + if (yych <= '^') goto yy239; + if (yych <= '{') goto yy250; + goto yy239; } else { - if (yych == '~') goto yy240; - goto yy251; + if (yych == '~') goto yy239; + goto yy250; } } } -yy290: - YYDEBUG(290, *YYCURSOR); +yy289: + YYDEBUG(289, *YYCURSOR); yyaccept = 3; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(291, *YYCURSOR); + YYDEBUG(290, *YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x00) goto yy240; - if (yych <= 0x08) goto yy251; - goto yy240; + if (yych <= 0x00) goto yy239; + if (yych <= 0x08) goto yy250; + goto yy239; } else { - if (yych == '\r') goto yy240; - goto yy251; + if (yych == '\r') goto yy239; + goto yy250; } } else { if (yych <= '$') { - if (yych <= '"') goto yy240; - if (yych <= '#') goto yy251; - goto yy256; + if (yych <= '"') goto yy239; + if (yych <= '#') goto yy250; + goto yy255; } else { - if (yych <= '%') goto yy251; - if (yych <= ')') goto yy240; - if (yych <= '-') goto yy251; - goto yy288; + if (yych <= '%') goto yy250; + if (yych <= ')') goto yy239; + if (yych <= '-') goto yy250; + goto yy287; } } } else { if (yych <= '=') { if (yych <= ':') { - if (yych <= '/') goto yy251; - if (yych <= '9') goto yy290; - goto yy251; + if (yych <= '/') goto yy250; + if (yych <= '9') goto yy289; + goto yy250; } else { - if (yych == '<') goto yy251; - goto yy240; + if (yych == '<') goto yy250; + goto yy239; } } else { if (yych <= '{') { - if (yych == '^') goto yy240; - goto yy251; + if (yych == '^') goto yy239; + goto yy250; } else { - if (yych == '}') goto yy251; - if (yych <= '~') goto yy240; - goto yy251; + if (yych == '}') goto yy250; + if (yych <= '~') goto yy239; + goto yy250; } } } -yy292: - YYDEBUG(292, *YYCURSOR); +yy291: + YYDEBUG(291, *YYCURSOR); yyaccept = 3; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(293, *YYCURSOR); + YYDEBUG(292, *YYCURSOR); if (yych <= '/') { if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x00) goto yy240; - if (yych <= 0x08) goto yy251; - goto yy240; + if (yych <= 0x00) goto yy239; + if (yych <= 0x08) goto yy250; + goto yy239; } else { - if (yych == '\r') goto yy240; - goto yy251; + if (yych == '\r') goto yy239; + goto yy250; } } else { if (yych <= '$') { - if (yych <= '"') goto yy240; - if (yych <= '#') goto yy251; - goto yy256; + if (yych <= '"') goto yy239; + if (yych <= '#') goto yy250; + goto yy255; } else { - if (yych <= '%') goto yy251; - if (yych <= ')') goto yy240; - goto yy251; + if (yych <= '%') goto yy250; + if (yych <= ')') goto yy239; + goto yy250; } } } else { if (yych <= ']') { if (yych <= ';') { - if (yych <= '9') goto yy292; - if (yych <= ':') goto yy251; - goto yy240; + if (yych <= '9') goto yy291; + if (yych <= ':') goto yy250; + goto yy239; } else { - if (yych == '=') goto yy240; - goto yy251; + if (yych == '=') goto yy239; + goto yy250; } } else { if (yych <= '|') { - if (yych <= '^') goto yy240; - if (yych <= '{') goto yy251; - goto yy240; + if (yych <= '^') goto yy239; + if (yych <= '{') goto yy250; + goto yy239; } else { - if (yych == '~') goto yy240; - goto yy251; + if (yych == '~') goto yy239; + goto yy250; } } } -yy294: - YYDEBUG(294, *YYCURSOR); +yy293: + YYDEBUG(293, *YYCURSOR); yyaccept = 3; YYMARKER = ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(295, *YYCURSOR); + YYDEBUG(294, *YYCURSOR); if (yych <= '/') { if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x00) goto yy240; - if (yych <= 0x08) goto yy251; - goto yy240; + if (yych <= 0x00) goto yy239; + if (yych <= 0x08) goto yy250; + goto yy239; } else { - if (yych == '\r') goto yy240; - goto yy251; + if (yych == '\r') goto yy239; + goto yy250; } } else { if (yych <= '$') { - if (yych <= '"') goto yy240; - if (yych <= '#') goto yy251; - goto yy256; + if (yych <= '"') goto yy239; + if (yych <= '#') goto yy250; + goto yy255; } else { - if (yych <= '%') goto yy251; - if (yych <= ')') goto yy240; - goto yy251; + if (yych <= '%') goto yy250; + if (yych <= ')') goto yy239; + goto yy250; } } } else { if (yych <= ']') { if (yych <= ';') { - if (yych <= '9') goto yy294; - if (yych <= ':') goto yy251; - goto yy240; + if (yych <= '9') goto yy293; + if (yych <= ':') goto yy250; + goto yy239; } else { - if (yych == '=') goto yy240; - goto yy251; + if (yych == '=') goto yy239; + goto yy250; } } else { if (yych <= '|') { - if (yych <= '^') goto yy240; - if (yych <= '{') goto yy251; - goto yy240; + if (yych <= '^') goto yy239; + if (yych <= '{') goto yy250; + goto yy239; } else { - if (yych == '~') goto yy240; - goto yy251; + if (yych == '~') goto yy239; + goto yy250; } } } -yy296: - YYDEBUG(296, *YYCURSOR); +yy295: + YYDEBUG(295, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(297, *YYCURSOR); + YYDEBUG(296, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy296; + goto yy295; } - YYDEBUG(298, *YYCURSOR); + YYDEBUG(297, *YYCURSOR); ++YYCURSOR; - YYDEBUG(299, *YYCURSOR); + YYDEBUG(298, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 418 "Zend/zend_ini_scanner.l" { /* Raw string */ @@ -4555,66 +4545,66 @@ yy296: } RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 4559 "Zend/zend_ini_scanner.c" -yy300: - YYDEBUG(300, *YYCURSOR); +#line 4549 "Zend/zend_ini_scanner.c" +yy299: + YYDEBUG(299, *YYCURSOR); ++YYCURSOR; - YYDEBUG(301, *YYCURSOR); + YYDEBUG(300, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 451 "Zend/zend_ini_scanner.l" { /* Variable start */ yy_push_state(ST_VARNAME); return TC_DOLLAR_CURLY; } -#line 4570 "Zend/zend_ini_scanner.c" -yy302: - YYDEBUG(302, *YYCURSOR); +#line 4560 "Zend/zend_ini_scanner.c" +yy301: + YYDEBUG(301, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; +yy302: + YYDEBUG(302, *YYCURSOR); + if (yych == '\t') goto yy301; + if (yych == ' ') goto yy301; + goto yy231; yy303: YYDEBUG(303, *YYCURSOR); - if (yych == '\t') goto yy302; - if (yych == ' ') goto yy302; - goto yy232; + yych = *++YYCURSOR; + goto yy228; yy304: YYDEBUG(304, *YYCURSOR); - yych = *++YYCURSOR; - goto yy229; -yy305: - YYDEBUG(305, *YYCURSOR); yyaccept = 1; YYMARKER = ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; -yy306: - YYDEBUG(306, *YYCURSOR); +yy305: + YYDEBUG(305, *YYCURSOR); if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy227; - if (yych <= '\t') goto yy305; - goto yy304; + if (yych <= 0x08) goto yy226; + if (yych <= '\t') goto yy304; + goto yy303; } else { - if (yych == '\r') goto yy308; - goto yy227; + if (yych == '\r') goto yy307; + goto yy226; } } else { if (yych <= '"') { - if (yych <= ' ') goto yy305; - if (yych <= '!') goto yy227; + if (yych <= ' ') goto yy304; + if (yych <= '!') goto yy226; } else { - if (yych == ';') goto yy283; - goto yy227; + if (yych == ';') goto yy282; + goto yy226; } } - YYDEBUG(307, *YYCURSOR); + YYDEBUG(306, *YYCURSOR); yych = *++YYCURSOR; - goto yy234; -yy308: - YYDEBUG(308, *YYCURSOR); + goto yy233; +yy307: + YYDEBUG(307, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '\n') goto yy304; - goto yy229; + if ((yych = *YYCURSOR) == '\n') goto yy303; + goto yy228; } /* *********************************** */ yyc_ST_VARNAME: @@ -4653,49 +4643,49 @@ yyc_ST_VARNAME: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; - YYDEBUG(309, *YYCURSOR); + YYDEBUG(308, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yych <= ')') { if (yych <= '"') { if (yych <= '\f') { - if (yych <= 0x08) goto yy311; - if (yych <= '\n') goto yy313; + if (yych <= 0x08) goto yy310; + if (yych <= '\n') goto yy312; } else { - if (yych <= '\r') goto yy313; - if (yych >= '!') goto yy313; + if (yych <= '\r') goto yy312; + if (yych >= '!') goto yy312; } } else { if (yych <= '%') { - if (yych == '$') goto yy313; + if (yych == '$') goto yy312; } else { - if (yych != '\'') goto yy313; + if (yych != '\'') goto yy312; } } } else { if (yych <= '[') { if (yych <= '<') { - if (yych == ';') goto yy313; + if (yych == ';') goto yy312; } else { - if (yych <= '=') goto yy313; - if (yych >= '[') goto yy313; + if (yych <= '=') goto yy312; + if (yych >= '[') goto yy312; } } else { if (yych <= 'z') { - if (yych == '^') goto yy313; + if (yych == '^') goto yy312; } else { - if (yych == '}') goto yy315; - if (yych <= '~') goto yy313; + if (yych == '}') goto yy314; + if (yych <= '~') goto yy312; } } } -yy311: - YYDEBUG(311, *YYCURSOR); +yy310: + YYDEBUG(310, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy318; -yy312: - YYDEBUG(312, *YYCURSOR); + goto yy317; +yy311: + YYDEBUG(311, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 456 "Zend/zend_ini_scanner.l" { /* Variable name */ @@ -4707,39 +4697,39 @@ yy312: RETURN_TOKEN(TC_VARNAME, yytext, yyleng); } -#line 4711 "Zend/zend_ini_scanner.c" -yy313: - YYDEBUG(313, *YYCURSOR); +#line 4701 "Zend/zend_ini_scanner.c" +yy312: + YYDEBUG(312, *YYCURSOR); ++YYCURSOR; - YYDEBUG(314, *YYCURSOR); + YYDEBUG(313, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 650 "Zend/zend_ini_scanner.l" { return 0; } -#line 4721 "Zend/zend_ini_scanner.c" -yy315: - YYDEBUG(315, *YYCURSOR); +#line 4711 "Zend/zend_ini_scanner.c" +yy314: + YYDEBUG(314, *YYCURSOR); ++YYCURSOR; - YYDEBUG(316, *YYCURSOR); + YYDEBUG(315, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 466 "Zend/zend_ini_scanner.l" { /* Variable end */ yy_pop_state(); return '}'; } -#line 4732 "Zend/zend_ini_scanner.c" -yy317: - YYDEBUG(317, *YYCURSOR); +#line 4722 "Zend/zend_ini_scanner.c" +yy316: + YYDEBUG(316, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy318: - YYDEBUG(318, *YYCURSOR); +yy317: + YYDEBUG(317, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy317; + goto yy316; } - goto yy312; + goto yy311; } } #line 654 "Zend/zend_ini_scanner.l" diff --git a/Zend/zend_ini_scanner_defs.h b/Zend/zend_ini_scanner_defs.h index 017865f9d3..287d7bc1fb 100644 --- a/Zend/zend_ini_scanner_defs.h +++ b/Zend/zend_ini_scanner_defs.h @@ -1,4 +1,4 @@ -/* Generated by re2c 0.14.3 */ +/* Generated by re2c 0.13.5 */ #line 3 "Zend/zend_ini_scanner_defs.h" enum YYCONDTYPE { diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index 81038e4bdc..6eb4e17866 100644 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -36,8 +36,6 @@ ZEND_API zval* zend_call_method(zval *object, zend_class_entry *obj_ce, zend_fun int result; zend_fcall_info fci; zval retval; - HashTable *function_table; - zval params[2]; if (param_count > 0) { @@ -109,13 +107,6 @@ ZEND_API zval* zend_call_method(zval *object, zend_class_entry *obj_ce, zend_fun zend_error_noreturn(E_CORE_ERROR, "Couldn't execute method %s%s%s", obj_ce ? ZSTR_VAL(obj_ce->name) : "", obj_ce ? "::" : "", function_name); } } - /* copy arguments back, they might be changed by references */ - if (param_count > 0 && Z_ISREF(params[0]) && !Z_ISREF_P(arg1)) { - ZVAL_COPY_VALUE(arg1, ¶ms[0]); - } - if (param_count > 1 && Z_ISREF(params[1]) && !Z_ISREF_P(arg2)) { - ZVAL_COPY_VALUE(arg2, ¶ms[1]); - } if (!retval_ptr) { zval_ptr_dtor(&retval); return NULL; @@ -189,16 +180,6 @@ ZEND_API zval *zend_user_it_get_current_data(zend_object_iterator *_iter) } /* }}} */ -/* {{{ zend_user_it_get_current_key_default */ -#if 0 -static int zend_user_it_get_current_key_default(zend_object_iterator *_iter, char **str_key, uint *str_key_len, ulong *int_key) -{ - *int_key = _iter->index; - return HASH_KEY_IS_LONG; -} -#endif -/* }}} */ - /* {{{ zend_user_it_get_current_key */ ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, zval *key) { @@ -392,15 +373,6 @@ static int zend_implement_iterator(zend_class_entry *interface, zend_class_entry /* {{{ zend_implement_arrayaccess */ static int zend_implement_arrayaccess(zend_class_entry *interface, zend_class_entry *class_type) { -#if 0 - /* get ht from ce */ - if (ht->read_dimension != zend_std_read_dimension - || ht->write_dimension != zend_std_write_dimension - || ht->has_dimension != zend_std_has_dimension - || ht->unset_dimension != zend_std_unset_dimension) { - return FAILURE; - } -#endif return SUCCESS; } /* }}}*/ diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 3c7117930e..31be044aa9 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -327,14 +327,14 @@ top_statement: { $$ = zend_ast_create(ZEND_AST_NAMESPACE, NULL, $4); } | T_USE mixed_group_use_declaration ';' { $$ = $2; } | T_USE use_type group_use_declaration ';' { $$ = $3; $$->attr = $2; } - | T_USE use_declarations ';' { $$ = $2; $$->attr = T_CLASS; } + | T_USE use_declarations ';' { $$ = $2; $$->attr = ZEND_SYMBOL_CLASS; } | T_USE use_type use_declarations ';' { $$ = $3; $$->attr = $2; } | T_CONST const_list ';' { $$ = $2; } ; use_type: - T_FUNCTION { $$ = T_FUNCTION; } - | T_CONST { $$ = T_CONST; } + T_FUNCTION { $$ = ZEND_SYMBOL_FUNCTION; } + | T_CONST { $$ = ZEND_SYMBOL_CONST; } ; group_use_declaration: @@ -373,7 +373,7 @@ use_declarations: ; inline_use_declaration: - unprefixed_use_declaration { $$ = $1; $$->attr = T_CLASS; } + unprefixed_use_declaration { $$ = $1; $$->attr = ZEND_SYMBOL_CLASS; } | use_type unprefixed_use_declaration { $$ = $2; $$->attr = $1; } ; diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h index da0bc16933..9790c1faa3 100644 --- a/Zend/zend_multiply.h +++ b/Zend/zend_multiply.h @@ -19,10 +19,32 @@ /* $Id$ */ +#include "zend_portability.h" + #ifndef ZEND_MULTIPLY_H #define ZEND_MULTIPLY_H -#if (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__) +#if PHP_HAVE_BUILTIN_SMULL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG + +#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ + long __tmpvar; \ + if (((usedval) = __builtin_smull_overflow((a), (b), &__tmpvar))) { \ + (dval) = (double) (a) * (double) (b); \ + } \ + else (lval) = __tmpvar; \ +} while (0) + +#elif PHP_HAVE_BUILTIN_SMULLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG + +#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ + long long __tmpvar; \ + if (((usedval) = __builtin_smulll_overflow((a), (b), &__tmpvar))) { \ + (dval) = (double) (a) * (double) (b); \ + } \ + else (lval) = __tmpvar; \ +} while (0) + +#elif (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__) #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ zend_long __tmpvar; \ diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 04c828872d..2273b06fb3 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -206,10 +206,8 @@ static void zend_std_call_getter(zval *object, zval *member, zval *retval) /* {{ } /* }}} */ -static int zend_std_call_setter(zval *object, zval *member, zval *value) /* {{{ */ +static void zend_std_call_setter(zval *object, zval *member, zval *value) /* {{{ */ { - zval retval; - int result; zend_class_entry *ce = Z_OBJCE_P(object); zend_class_entry *orig_fake_scope = EG(fake_scope); @@ -218,20 +216,10 @@ static int zend_std_call_setter(zval *object, zval *member, zval *value) /* {{{ /* __set handler is called with two arguments: property name value to be set - - it should return whether the call was successful or not */ - zend_call_method_with_2_params(object, ce, &ce->__set, ZEND_SET_FUNC_NAME, &retval, member, value); + zend_call_method_with_2_params(object, ce, &ce->__set, ZEND_SET_FUNC_NAME, NULL, member, value); - if (Z_TYPE(retval) != IS_UNDEF) { - result = i_zend_is_true(&retval) ? SUCCESS : FAILURE; - zval_ptr_dtor(&retval); - EG(fake_scope) = orig_fake_scope; - return result; - } else { - EG(fake_scope) = orig_fake_scope; - return FAILURE; - } + EG(fake_scope) = orig_fake_scope; } /* }}} */ @@ -732,9 +720,7 @@ found: ZVAL_COPY(&tmp_object, object); (*guard) |= IN_SET; /* prevent circular setting */ - if (zend_std_call_setter(&tmp_object, member, value) != SUCCESS) { - /* for now, just ignore it - __set should take care of warnings, etc. */ - } + zend_std_call_setter(&tmp_object, member, value); (*guard) &= ~IN_SET; zval_ptr_dtor(&tmp_object); } else if (EXPECTED(property_offset != ZEND_WRONG_PROPERTY_OFFSET)) { diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c index 1e358996ed..07b586b6f8 100644 --- a/Zend/zend_objects.c +++ b/Zend/zend_objects.c @@ -32,7 +32,7 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce) zval *p, *end; GC_REFCOUNT(object) = 1; - GC_TYPE_INFO(object) = IS_OBJECT; + GC_TYPE_INFO(object) = IS_OBJECT | (GC_COLLECTABLE << GC_FLAGS_SHIFT); object->ce = ce; object->properties = NULL; zend_objects_store_put(object); diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c index 00d9425f18..d828f55401 100644 --- a/Zend/zend_objects_API.c +++ b/Zend/zend_objects_API.c @@ -210,12 +210,6 @@ ZEND_API void zend_object_store_set_object(zval *zobject, zend_object *object) EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(zobject)] = object; } -/* Called when the ctor was terminated by an exception */ -ZEND_API void zend_object_store_ctor_failed(zend_object *obj) -{ - GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED; -} - ZEND_API zend_object_handlers *zend_get_std_object_handlers(void) { return &std_object_handlers; diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h index dbdb02f984..ac4485fea3 100644 --- a/Zend/zend_objects_API.h +++ b/Zend/zend_objects_API.h @@ -61,7 +61,12 @@ ZEND_API void zend_objects_store_free(zend_object *object); /* See comment in zend_objects_API.c before you use this */ ZEND_API void zend_object_store_set_object(zval *zobject, zend_object *object); -ZEND_API void zend_object_store_ctor_failed(zend_object *object); + +/* Called when the ctor was terminated by an exception */ +static zend_always_inline void zend_object_store_ctor_failed(zend_object *obj) +{ + GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED; +} ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects); @@ -76,7 +81,7 @@ static zend_always_inline void zend_object_release(zend_object *obj) { if (--GC_REFCOUNT(obj) == 0) { zend_objects_store_del(obj); - } else if (UNEXPECTED(!GC_INFO(obj))) { + } else if (UNEXPECTED(GC_MAY_LEAK((zend_refcounted*)obj))) { gc_possible_root((zend_refcounted*)obj); } } diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 4159e43e53..8005577694 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -411,19 +411,6 @@ try_again: ZEND_API void ZEND_FASTCALL convert_to_null(zval *op) /* {{{ */ { - if (Z_TYPE_P(op) == IS_OBJECT) { - if (Z_OBJ_HT_P(op)->cast_object) { - zval org; - - ZVAL_COPY_VALUE(&org, op); - if (Z_OBJ_HT_P(op)->cast_object(&org, op, IS_NULL) == SUCCESS) { - zval_dtor(&org); - return; - } - ZVAL_COPY_VALUE(op, &org); - } - } - zval_ptr_dtor(op); ZVAL_NULL(op); } @@ -601,25 +588,17 @@ try_again: if (obj_ht) { zend_array *arr; + /* fast copy */ if (!Z_OBJCE_P(op)->default_properties_count && obj_ht == Z_OBJ_P(op)->properties && - !ZEND_HASH_GET_APPLY_COUNT(Z_OBJ_P(op)->properties)) { - /* fast copy */ - if (EXPECTED(Z_OBJ_P(op)->handlers == &std_object_handlers)) { - arr = obj_ht; - if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(op)->properties) & IS_ARRAY_IMMUTABLE))) { - GC_REFCOUNT(Z_OBJ_P(op)->properties)++; - } - } else { - arr = zend_array_dup(obj_ht); - } - zval_dtor(op); - ZVAL_ARR(op, arr); + !ZEND_HASH_GET_APPLY_COUNT(Z_OBJ_P(op)->properties) && + EXPECTED(Z_OBJ_P(op)->handlers == &std_object_handlers)) { + arr = zend_proptable_to_symtable(obj_ht, 0); } else { - arr = zend_array_dup(obj_ht); - zval_dtor(op); - ZVAL_ARR(op, arr); + arr = zend_proptable_to_symtable(obj_ht, 1); } + zval_dtor(op); + ZVAL_ARR(op, arr); return; } } else { @@ -658,10 +637,12 @@ try_again: case IS_ARRAY: { HashTable *ht = Z_ARR_P(op); - if (Z_IMMUTABLE_P(op)) { + ht = zend_symtable_to_proptable(ht); + if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) { /* TODO: try not to duplicate immutable arrays as well ??? */ ht = zend_array_dup(ht); } + zval_dtor(op); object_and_properties_init(op, zend_standard_class_def, ht); break; } diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index a404b79c1c..7fc11cc144 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -35,13 +35,10 @@ #include <ieeefp.h> #endif +#include "zend_portability.h" #include "zend_strtod.h" #include "zend_multiply.h" -#if 0&&HAVE_BCMATH -#include "ext/bcmath/libbcmath/src/bcmath.h" -#endif - #define LONG_SIGN_MASK (((zend_long)1) << (8*sizeof(zend_long)-1)) BEGIN_EXTERN_C() @@ -444,7 +441,23 @@ ZEND_API void zend_update_current_locale(void); static zend_always_inline void fast_long_increment_function(zval *op1) { -#if defined(__GNUC__) && defined(__i386__) +#if PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG + long lresult; + if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) { + /* switch to double */ + ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0); + } else { + Z_LVAL_P(op1) = lresult; + } +#elif PHP_HAVE_BUILTIN_SADDLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG + long long llresult; + if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), 1, &llresult))) { + /* switch to double */ + ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0); + } else { + Z_LVAL_P(op1) = llresult; + } +#elif defined(__GNUC__) && defined(__i386__) __asm__( "incl (%0)\n\t" "jno 0f\n\t" @@ -482,7 +495,23 @@ static zend_always_inline void fast_long_increment_function(zval *op1) static zend_always_inline void fast_long_decrement_function(zval *op1) { -#if defined(__GNUC__) && defined(__i386__) +#if PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG + long lresult; + if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), 1, &lresult))) { + /* switch to double */ + ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0); + } else { + Z_LVAL_P(op1) = lresult; + } +#elif PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG + long long llresult; + if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), 1, &llresult))) { + /* switch to double */ + ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0); + } else { + Z_LVAL_P(op1) = llresult; + } +#elif defined(__GNUC__) && defined(__i386__) __asm__( "decl (%0)\n\t" "jno 0f\n\t" @@ -520,7 +549,21 @@ static zend_always_inline void fast_long_decrement_function(zval *op1) static zend_always_inline void fast_long_add_function(zval *result, zval *op1, zval *op2) { -#if defined(__GNUC__) && defined(__i386__) \ +#if PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG + long lresult; + if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) { + ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); + } else { + ZVAL_LONG(result, lresult); + } +#elif PHP_HAVE_BUILTIN_SADDLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG + long long llresult; + if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) { + ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); + } else { + ZVAL_LONG(result, llresult); + } +#elif defined(__GNUC__) && defined(__i386__) \ && !(4 == __GNUC__ && 8 == __GNUC_MINOR__) \ && !(4 == __GNUC__ && 9 == __GNUC_MINOR__ && (defined(__PIC__) || defined(__PIE__))) /* Position-independent builds fail with gcc-4.9.x */ @@ -609,7 +652,21 @@ static zend_always_inline int fast_add_function(zval *result, zval *op1, zval *o static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, zval *op2) { -#if defined(__GNUC__) && defined(__i386__) && \ +#if PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG + long lresult; + if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) { + ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); + } else { + ZVAL_LONG(result, lresult); + } +#elif PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG + long long llresult; + if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) { + ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); + } else { + ZVAL_LONG(result, llresult); + } +#elif defined(__GNUC__) && defined(__i386__) && \ !(4 == __GNUC__ && 8 == __GNUC_MINOR__) && \ !(4 == __GNUC__ && 9 == __GNUC_MINOR__ && (defined(__PIC__) || defined(__PIE__))) /* Position-independent builds fail with gcc-4.9.x */ diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index 829fba1abd..9f1259f7a4 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -38,9 +38,6 @@ #ifdef ZEND_WIN32 # include "zend_config.w32.h" # define ZEND_PATHS_SEPARATOR ';' -#elif defined(NETWARE) -# include <zend_config.h> -# define ZEND_PATHS_SEPARATOR ';' #elif defined(__riscos__) # include <zend_config.h> # define ZEND_PATHS_SEPARATOR ';' @@ -53,6 +50,7 @@ #include <stdio.h> #include <assert.h> +#include <math.h> #ifdef HAVE_UNIX_H # include <unix.h> @@ -339,7 +337,7 @@ char *alloca(); #endif -#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(NETWARE)) && !(defined(ZTS) && defined(HPUX)) && !defined(DARWIN) +#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS)) && !(defined(ZTS) && defined(HPUX)) && !defined(DARWIN) # define ZEND_ALLOCA_MAX_SIZE (32 * 1024) # define ALLOCA_FLAG(name) \ zend_bool name; @@ -422,6 +420,51 @@ char *alloca(); #undef MAX #define MAX(a, b) (((a)>(b))?(a):(b)) #define MIN(a, b) (((a)<(b))?(a):(b)) + +/* We always define a function, even if there's a macro or expression we could + * alias, so that using it in contexts where we can't make function calls + * won't fail to compile on some machines and not others. + */ +static zend_always_inline double _zend_get_inf(void) /* {{{ */ +{ +#ifdef INFINITY + return INFINITY; +#elif HAVE_HUGE_VAL_INF + return HUGE_VAL; +#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) +# define _zend_DOUBLE_INFINITY_HIGH 0x7ff00000 + double val = 0.0; + ((uint32_t*)&val)[1] = _zend_DOUBLE_INFINITY_HIGH; + ((uint32_t*)&val)[0] = 0; + return val; +#elif HAVE_ATOF_ACCEPTS_INF + return atof("INF"); +#else + return 1.0/0.0; +#endif +} /* }}} */ +#define ZEND_INFINITY (_zend_get_inf()) + +static zend_always_inline double _zend_get_nan(void) /* {{{ */ +{ +#ifdef NAN + return NAN; +#elif HAVE_HUGE_VAL_NAN + return HUGE_VAL + -HUGE_VAL; +#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) +# define _zend_DOUBLE_QUIET_NAN_HIGH 0xfff80000 + double val = 0.0; + ((uint32_t*)&val)[1] = _zend_DOUBLE_QUIET_NAN_HIGH; + ((uint32_t*)&val)[0] = 0; + return val; +#elif HAVE_ATOF_ACCEPTS_NAN + return atof("NAN"); +#else + return 0.0/0.0; +#endif +} /* }}} */ +#define ZEND_NAN (_zend_get_nan()) + #define ZEND_STRL(str) (str), (sizeof(str)-1) #define ZEND_STRS(str) (str), (sizeof(str)) #define ZEND_NORMALIZE_BOOL(n) \ diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c index b3553bd3cc..680a50aea0 100644 --- a/Zend/zend_stream.c +++ b/Zend/zend_stream.c @@ -156,16 +156,7 @@ static size_t zend_stream_read(zend_file_handle *file_handle, char *buf, size_t int c = '*'; size_t n; -#ifdef NETWARE - /* - c != 4 check is there as fread of a character in NetWare LibC gives 4 upon ^D character. - Ascii value 4 is actually EOT character which is not defined anywhere in the LibC - or else we can use instead of hardcoded 4. - */ - for (n = 0; n < len && (c = zend_stream_getc(file_handle)) != EOF && c != 4 && c != '\n'; ++n) { -#else for (n = 0; n < len && (c = zend_stream_getc(file_handle)) != EOF && c != '\n'; ++n) { -#endif buf[n] = (char)c; } if (c == '\n') { diff --git a/Zend/zend_types.h b/Zend/zend_types.h index 2a108877bf..9d4f6a7d4c 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -390,24 +390,33 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) { #define Z_GC_TYPE_INFO(zval) GC_TYPE_INFO(Z_COUNTED(zval)) #define Z_GC_TYPE_INFO_P(zval_p) Z_GC_TYPE_INFO(*(zval_p)) +#define GC_FLAGS_SHIFT 8 +#define GC_INFO_SHIFT 16 +#define GC_INFO_MASK 0xffff0000 + +/* zval.value->gc.u.v.flags */ +#define GC_COLLECTABLE (1<<7) + +#define GC_ARRAY (IS_ARRAY | (GC_COLLECTABLE << GC_FLAGS_SHIFT)) +#define GC_OBJECT (IS_OBJECT | (GC_COLLECTABLE << GC_FLAGS_SHIFT)) + /* zval.u1.v.type_flags */ #define IS_TYPE_CONSTANT (1<<0) #define IS_TYPE_IMMUTABLE (1<<1) #define IS_TYPE_REFCOUNTED (1<<2) -#define IS_TYPE_COLLECTABLE (1<<3) #define IS_TYPE_COPYABLE (1<<4) /* extended types */ #define IS_INTERNED_STRING_EX IS_STRING -#define IS_STRING_EX (IS_STRING | (( IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT)) -#define IS_ARRAY_EX (IS_ARRAY | (( IS_TYPE_REFCOUNTED | IS_TYPE_COLLECTABLE | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT)) -#define IS_OBJECT_EX (IS_OBJECT | (( IS_TYPE_REFCOUNTED | IS_TYPE_COLLECTABLE ) << Z_TYPE_FLAGS_SHIFT)) -#define IS_RESOURCE_EX (IS_RESOURCE | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT)) -#define IS_REFERENCE_EX (IS_REFERENCE | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT)) +#define IS_STRING_EX (IS_STRING | (( IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT)) +#define IS_ARRAY_EX (IS_ARRAY | (( IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT)) +#define IS_OBJECT_EX (IS_OBJECT | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT)) +#define IS_RESOURCE_EX (IS_RESOURCE | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT)) +#define IS_REFERENCE_EX (IS_REFERENCE | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT)) -#define IS_CONSTANT_EX (IS_CONSTANT | ((IS_TYPE_CONSTANT | IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT)) -#define IS_CONSTANT_AST_EX (IS_CONSTANT_AST | ((IS_TYPE_CONSTANT | IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT)) +#define IS_CONSTANT_EX (IS_CONSTANT | ((IS_TYPE_CONSTANT | IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT)) +#define IS_CONSTANT_AST_EX (IS_CONSTANT_AST | ((IS_TYPE_CONSTANT | IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT)) /* zval.u1.v.const_flags */ #define IS_CONSTANT_UNQUALIFIED 0x010 @@ -463,9 +472,6 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) { #define Z_REFCOUNTED(zval) ((Z_TYPE_FLAGS(zval) & IS_TYPE_REFCOUNTED) != 0) #define Z_REFCOUNTED_P(zval_p) Z_REFCOUNTED(*(zval_p)) -#define Z_COLLECTABLE(zval) ((Z_TYPE_FLAGS(zval) & IS_TYPE_COLLECTABLE) != 0) -#define Z_COLLECTABLE_P(zval_p) Z_COLLECTABLE(*(zval_p)) - #define Z_COPYABLE(zval) ((Z_TYPE_FLAGS(zval) & IS_TYPE_COPYABLE) != 0) #define Z_COPYABLE_P(zval_p) Z_COPYABLE(*(zval_p)) @@ -482,9 +488,6 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) { #define Z_OPT_REFCOUNTED(zval) ((Z_TYPE_INFO(zval) & (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) != 0) #define Z_OPT_REFCOUNTED_P(zval_p) Z_OPT_REFCOUNTED(*(zval_p)) -#define Z_OPT_COLLECTABLE(zval) ((Z_TYPE_INFO(zval) & (IS_TYPE_COLLECTABLE << Z_TYPE_FLAGS_SHIFT)) != 0) -#define Z_OPT_COLLECTABLE_P(zval_p) Z_OPT_COLLECTABLE(*(zval_p)) - #define Z_OPT_COPYABLE(zval) ((Z_TYPE_INFO(zval) & (IS_TYPE_COPYABLE << Z_TYPE_FLAGS_SHIFT)) != 0) #define Z_OPT_COPYABLE_P(zval_p) Z_OPT_COPYABLE(*(zval_p)) diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h index 0afe68760d..b0054eedd3 100644 --- a/Zend/zend_variables.h +++ b/Zend/zend_variables.h @@ -44,10 +44,11 @@ static zend_always_inline void _zval_ptr_dtor_nogc(zval *zval_ptr ZEND_FILE_LINE static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC) { if (Z_REFCOUNTED_P(zval_ptr)) { - if (!Z_DELREF_P(zval_ptr)) { - _zval_dtor_func(Z_COUNTED_P(zval_ptr) ZEND_FILE_LINE_RELAY_CC); + zend_refcounted *ref = Z_COUNTED_P(zval_ptr); + if (!--GC_REFCOUNT(ref)) { + _zval_dtor_func(ref ZEND_FILE_LINE_RELAY_CC); } else { - GC_ZVAL_CHECK_POSSIBLE_ROOT(zval_ptr); + gc_check_possible_root(ref); } } } diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c index cc3f908e88..420bc54a7b 100644 --- a/Zend/zend_virtual_cwd.c +++ b/Zend/zend_virtual_cwd.c @@ -32,7 +32,6 @@ #include "zend.h" #include "zend_virtual_cwd.h" -#include "tsrm_strtok_r.h" #ifdef ZEND_WIN32 #include <io.h> @@ -54,10 +53,6 @@ # endif #endif -#ifdef NETWARE -#include <fsio.h> -#endif - #ifndef HAVE_REALPATH #define realpath(x,y) strcpy(y,x) #endif @@ -66,8 +61,8 @@ #include "TSRM.h" -/* Only need mutex for popen() in Windows and NetWare because it doesn't chdir() on UNIX */ -#if (defined(ZEND_WIN32) || defined(NETWARE)) && defined(ZTS) +/* Only need mutex for popen() in Windows because it doesn't chdir() on UNIX */ +#if defined(ZEND_WIN32) && defined(ZTS) MUTEX_T cwd_mutex; #endif @@ -85,63 +80,14 @@ cwd_state main_cwd_state; /* True global */ #include <direct.h> #endif -#ifdef ZEND_WIN32 -#include <tchar.h> -#define tsrm_strtok_r(a,b,c) _tcstok((a),(b)) -#define TOKENIZER_STRING "/\\" - -static int php_check_dots(const char *element, int n) -{ - while (n-- > 0) if (element[n] != '.') break; - - return (n != -1); -} - -#define IS_DIRECTORY_UP(element, len) \ - (len >= 2 && !php_check_dots(element, len)) - -#define IS_DIRECTORY_CURRENT(element, len) \ - (len == 1 && element[0] == '.') - -#elif defined(NETWARE) -/* NetWare has strtok() (in LibC) and allows both slashes in paths, like Windows -- - but rest of the stuff is like Unix */ -/* strtok() call in LibC is abending when used in a different address space -- hence using - PHP's version itself for now */ -/*#define tsrm_strtok_r(a,b,c) strtok((a),(b))*/ -#define TOKENIZER_STRING "/\\" - -#else -#define TOKENIZER_STRING "/" -#endif - -/* default macros */ - -#ifndef IS_DIRECTORY_UP -#define IS_DIRECTORY_UP(element, len) \ - (len == 2 && element[0] == '.' && element[1] == '.') -#endif - -#ifndef IS_DIRECTORY_CURRENT -#define IS_DIRECTORY_CURRENT(element, len) \ - (len == 1 && element[0] == '.') -#endif - -/* define this to check semantics */ -#define IS_DIR_OK(s) (1) - -#ifndef IS_DIR_OK -#define IS_DIR_OK(state) (php_is_dir_ok(state) == 0) -#endif - - #define CWD_STATE_COPY(d, s) \ (d)->cwd_length = (s)->cwd_length; \ (d)->cwd = (char *) emalloc((s)->cwd_length+1); \ memcpy((d)->cwd, (s)->cwd, (s)->cwd_length+1); #define CWD_STATE_FREE(s) \ - efree((s)->cwd); + efree((s)->cwd); \ + (s)->cwd_length = 0; #ifdef ZEND_WIN32 # define CWD_STATE_FREE_ERR(state) do { \ @@ -299,8 +245,8 @@ CWD_API int php_sys_stat_ex(const char *path, zend_stat_t *buf, int lstat) /* {{ WIN32_FILE_ATTRIBUTE_DATA data; LARGE_INTEGER t; const size_t path_len = strlen(path); - wchar_t *pathw = php_win32_ioutil_any_to_w(path); ALLOCA_FLAG(use_heap_large) + wchar_t *pathw = php_win32_ioutil_any_to_w(path); if (!pathw) { return -1; @@ -457,23 +403,12 @@ CWD_API void virtual_cwd_startup(void) /* {{{ */ char cwd[MAXPATHLEN]; char *result; -#ifdef NETWARE - result = getcwdpath(cwd, NULL, 1); - if(result) - { - char *c=cwd; - while(c = strchr(c, '\\')) - { - *c='/'; - ++c; - } - } -#else + #ifdef ZEND_WIN32 ZeroMemory(&cwd, sizeof(cwd)); #endif result = getcwd(cwd, sizeof(cwd)); -#endif + if (!result) { cwd[0] = '\0'; } @@ -492,7 +427,7 @@ CWD_API void virtual_cwd_startup(void) /* {{{ */ cwd_globals_ctor(&cwd_globals); #endif -#if (defined(ZEND_WIN32) || defined(NETWARE)) && defined(ZTS) +#if (defined(ZEND_WIN32)) && defined(ZTS) cwd_mutex = tsrm_mutex_alloc(); #endif } @@ -503,7 +438,7 @@ CWD_API void virtual_cwd_shutdown(void) /* {{{ */ #ifndef ZTS cwd_globals_dtor(&cwd_globals); #endif -#if (defined(ZEND_WIN32) || defined(NETWARE)) && defined(ZTS) +#if (defined(ZEND_WIN32)) && defined(ZTS) tsrm_mutex_free(cwd_mutex); #endif @@ -713,7 +648,7 @@ static inline void realpath_cache_add(const char *path, int path_len, const char memcpy(bucket->realpath, realpath, realpath_len+1); } bucket->realpath_len = realpath_len; - bucket->is_dir = is_dir; + bucket->is_dir = is_dir > 0; #ifdef ZEND_WIN32 bucket->is_rvalid = 0; bucket->is_readable = 0; @@ -1104,11 +1039,6 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i return -1; } } - -#elif defined(NETWARE) - save = 0; - tmp = do_alloca(len+1, use_heap); - memcpy(tmp, path, len+1); #else if (save && php_sys_lstat(path, &st) < 0) { if (use_realpath == CWD_REALPATH) { @@ -1346,18 +1276,6 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func resolved_path[2] = DEFAULT_SLASH; start = 3; } -#elif defined(NETWARE) - if (IS_ABSOLUTE_PATH(resolved_path, path_length)) { - /* skip VOLUME name */ - start = 0; - while (start != ':') { - if (resolved_path[start] == 0) return -1; - start++; - } - start++; - if (!IS_SLASH(resolved_path[start])) return -1; - resolved_path[start++] = DEFAULT_SLASH; - } #endif add_slash = (use_realpath != CWD_REALPATH) && path_length > 0 && IS_SLASH(resolved_path[path_length-1]); @@ -1645,7 +1563,7 @@ CWD_API int virtual_chmod(const char *filename, mode_t mode) /* {{{ */ } /* }}} */ -#if !defined(ZEND_WIN32) && !defined(NETWARE) +#if !defined(ZEND_WIN32) CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int link) /* {{{ */ { cwd_state new_state; @@ -1892,36 +1810,6 @@ CWD_API FILE *virtual_popen(const char *command, const char *type) /* {{{ */ return popen_ex(command, type, CWDG(cwd).cwd, NULL); } /* }}} */ -#elif defined(NETWARE) -/* On NetWare, the trick of prepending "cd cwd; " doesn't work so we need to perform - a VCWD_CHDIR() and mutex it - */ -CWD_API FILE *virtual_popen(const char *command, const char *type) /* {{{ */ -{ - char prev_cwd[MAXPATHLEN]; - char *getcwd_result; - FILE *retval; - - getcwd_result = VCWD_GETCWD(prev_cwd, MAXPATHLEN); - if (!getcwd_result) { - return NULL; - } - -#ifdef ZTS - tsrm_mutex_lock(cwd_mutex); -#endif - - VCWD_CHDIR(CWDG(cwd).cwd); - retval = popen(command, type); - VCWD_CHDIR(prev_cwd); - -#ifdef ZTS - tsrm_mutex_unlock(cwd_mutex); -#endif - - return retval; -} -/* }}} */ #else /* Unix */ CWD_API FILE *virtual_popen(const char *command, const char *type) /* {{{ */ { diff --git a/Zend/zend_virtual_cwd.h b/Zend/zend_virtual_cwd.h index 033f7d6ad0..538a2f8a73 100644 --- a/Zend/zend_virtual_cwd.h +++ b/Zend/zend_virtual_cwd.h @@ -73,19 +73,6 @@ typedef unsigned short mode_t; #define IS_ABSOLUTE_PATH(path, len) \ (len >= 2 && (/* is local */isalpha(path[0]) && path[1] == ':' || /* is UNC */IS_SLASH(path[0]) && IS_SLASH(path[1]))) -#elif defined(NETWARE) -#ifdef HAVE_DIRENT_H -#include <dirent.h> -#endif - -#define DEFAULT_SLASH '/' -#define DEFAULT_DIR_SEPARATOR ';' -#define IS_SLASH(c) ((c) == '/' || (c) == '\\') -#define IS_SLASH_P(c) IS_SLASH(*(c)) -/* Colon indicates volume name, either first character should be forward slash or backward slash */ -#define IS_ABSOLUTE_PATH(path, len) \ - ((strchr(path, ':') != NULL) || ((len >= 1) && ((path[0] == '/') || (path[0] == '\\')))) - #else #ifdef HAVE_DIRENT_H #include <dirent.h> @@ -193,7 +180,7 @@ CWD_API int virtual_access(const char *pathname, int mode); CWD_API int virtual_utime(const char *filename, struct utimbuf *buf); #endif CWD_API int virtual_chmod(const char *filename, mode_t mode); -#if !defined(ZEND_WIN32) && !defined(NETWARE) +#if !defined(ZEND_WIN32) CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int link); #endif @@ -217,14 +204,14 @@ typedef struct _realpath_cache_bucket { char *realpath; struct _realpath_cache_bucket *next; time_t expires; - int path_len; - int realpath_len; - int is_dir; + uint16_t path_len; + uint16_t realpath_len; + uint8_t is_dir:1; #ifdef ZEND_WIN32 - unsigned char is_rvalid; - unsigned char is_readable; - unsigned char is_wvalid; - unsigned char is_writable; + uint8_t is_rvalid:1; + uint8_t is_readable:1; + uint8_t is_wvalid:1; + uint8_t is_writable:1; #endif } realpath_cache_bucket; @@ -281,7 +268,7 @@ CWD_API realpath_cache_bucket** realpath_cache_get_buckets(void); #define VCWD_UTIME(path, time) virtual_utime(path, time) #endif #define VCWD_CHMOD(path, mode) virtual_chmod(path, mode) -#if !defined(ZEND_WIN32) && !defined(NETWARE) +#if !defined(ZEND_WIN32) #define VCWD_CHOWN(path, owner, group) virtual_chown(path, owner, group, 0) #if HAVE_LCHOWN #define VCWD_LCHOWN(path, owner, group) virtual_chown(path, owner, group, 1) @@ -336,7 +323,7 @@ CWD_API realpath_cache_bucket** realpath_cache_get_buckets(void); # endif #endif -#if !defined(ZEND_WIN32) && !defined(NETWARE) +#if !defined(ZEND_WIN32) #define VCWD_CHOWN(path, owner, group) chown(path, owner, group) #if HAVE_LCHOWN #define VCWD_LCHOWN(path, owner, group) lchown(path, owner, group) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 6e82ddba8f..8c94319570 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3508,12 +3508,12 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM) } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ - if (OP2_TYPE & (IS_VAR|IS_CV)) { - ZVAL_DEREF(function_name); - } ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT); GC_REFCOUNT((zend_object*)func->common.prototype)++; call_info |= ZEND_CALL_CLOSURE; + if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { + call_info |= ZEND_CALL_FAKE_CLOSURE; + } } else if (object) { call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ @@ -3649,7 +3649,7 @@ ZEND_VM_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL)) ZEND_ASSERT(!Z_ISREF_P(ret)); #endif - EG(current_execute_data) = call->prev_execute_data; + EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); @@ -3750,7 +3750,7 @@ ZEND_VM_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL)) } #endif - EG(current_execute_data) = call->prev_execute_data; + EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); @@ -3847,7 +3847,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL)) } #endif - EG(current_execute_data) = call->prev_execute_data; + EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); if (!RETURN_VALUE_USED(opline)) { @@ -3861,7 +3861,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL)) call->prev_execute_data = execute_data; - if (UNEXPECTED(!zend_do_fcall_overloaded(fbc, call, ret))) { + if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) { HANDLE_EXCEPTION(); } @@ -5356,20 +5356,6 @@ ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE) switch (opline->extended_value) { case IS_NULL: - /* This code is taken from convert_to_null. However, it does not seems very useful, - * because a conversion to null always results in the same value. This could only - * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */ -#if 0 - if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) { - ZVAL_DEREF(expr); - } - if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { - if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) { - break; - } - } -#endif - ZVAL_NULL(result); break; case _IS_BOOL: @@ -5520,18 +5506,11 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET) if (Z_REFCOUNTED_P(var)) { zend_refcounted *garbage = Z_COUNTED_P(var); + ZVAL_UNDEF(var); if (!--GC_REFCOUNT(garbage)) { - ZVAL_UNDEF(var); zval_dtor_func(garbage); } else { - zval *z = var; - ZVAL_DEREF(z); - if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) { - ZVAL_UNDEF(var); - gc_possible_root(Z_COUNTED_P(z)); - } else { - ZVAL_UNDEF(var); - } + gc_check_possible_root(garbage); } } else { ZVAL_UNDEF(var); @@ -5793,11 +5772,11 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR) Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -5948,11 +5927,11 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR) Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -6109,13 +6088,13 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR) p++; continue; } + if (UNEXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == FAILURE)) { + pos++; + p++; + continue; + } } - if (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) { - break; - } - pos++; - p++; + break; } if (opline->result_type & (IS_TMP_VAR|IS_CV)) { if (UNEXPECTED(!p->key)) { @@ -6137,11 +6116,11 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR) break; } p++; - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) + ) { break; } } @@ -7748,18 +7727,19 @@ ZEND_VM_C_LABEL(check_indirect): variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) { - uint32_t refcnt = Z_DELREF_P(variable_ptr); + zend_refcounted *ref = Z_COUNTED_P(variable_ptr); + uint32_t refcnt = --GC_REFCOUNT(ref); if (EXPECTED(variable_ptr != value)) { if (refcnt == 0) { SAVE_OPLINE(); - zval_dtor_func(Z_COUNTED_P(variable_ptr)); + zval_dtor_func(ref); if (UNEXPECTED(EG(exception))) { ZVAL_NULL(variable_ptr); HANDLE_EXCEPTION(); } } else { - GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr); + gc_check_possible_root(ref); } } } @@ -7822,14 +7802,7 @@ ZEND_VM_HANDLER(123, ZEND_TYPE_CHECK, CONST|TMP|VAR|CV, ANY, TYPE) SAVE_OPLINE(); value = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) { - if (OP1_TYPE != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { - zend_class_entry *ce = Z_OBJCE_P(value); - - if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) || - EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) { - result = 1; - } - } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { + if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value)); if (EXPECTED(type_name != NULL)) { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index fc1b7f571d..338d194279 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -635,7 +635,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HA ZEND_ASSERT(!Z_ISREF_P(ret)); #endif - EG(current_execute_data) = call->prev_execute_data; + EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); @@ -682,7 +682,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HAND ZEND_ASSERT(!Z_ISREF_P(ret)); #endif - EG(current_execute_data) = call->prev_execute_data; + EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); @@ -805,7 +805,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U } #endif - EG(current_execute_data) = call->prev_execute_data; + EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); @@ -884,7 +884,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U } #endif - EG(current_execute_data) = call->prev_execute_data; + EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); @@ -981,7 +981,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HA } #endif - EG(current_execute_data) = call->prev_execute_data; + EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); if (!0) { @@ -995,7 +995,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HA call->prev_execute_data = execute_data; - if (UNEXPECTED(!zend_do_fcall_overloaded(fbc, call, ret))) { + if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) { HANDLE_EXCEPTION(); } @@ -1108,7 +1108,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HAND } #endif - EG(current_execute_data) = call->prev_execute_data; + EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); if (!1) { @@ -1122,7 +1122,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HAND call->prev_execute_data = execute_data; - if (UNEXPECTED(!zend_do_fcall_overloaded(fbc, call, ret))) { + if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) { HANDLE_EXCEPTION(); } @@ -3347,20 +3347,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_O switch (opline->extended_value) { case IS_NULL: - /* This code is taken from convert_to_null. However, it does not seems very useful, - * because a conversion to null always results in the same value. This could only - * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */ -#if 0 - if (IS_CONST == IS_VAR || IS_CONST == IS_CV) { - ZVAL_DEREF(expr); - } - if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { - if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) { - break; - } - } -#endif - ZVAL_NULL(result); break; case _IS_BOOL: @@ -3539,11 +3525,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER( Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -3691,11 +3677,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -4074,14 +4060,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER( SAVE_OPLINE(); value = EX_CONSTANT(opline->op1); if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) { - if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { - zend_class_entry *ce = Z_OBJCE_P(value); - - if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) || - EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) { - result = 1; - } - } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { + if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value)); if (EXPECTED(type_name != NULL)) { @@ -5638,12 +5617,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ - if (IS_CONST & (IS_VAR|IS_CV)) { - ZVAL_DEREF(function_name); - } ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT); GC_REFCOUNT((zend_object*)func->common.prototype)++; call_info |= ZEND_CALL_CLOSURE; + if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { + call_info |= ZEND_CALL_FAKE_CLOSURE; + } } else if (object) { call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ @@ -7791,18 +7770,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HA if (Z_REFCOUNTED_P(var)) { zend_refcounted *garbage = Z_COUNTED_P(var); + ZVAL_UNDEF(var); if (!--GC_REFCOUNT(garbage)) { - ZVAL_UNDEF(var); zval_dtor_func(garbage); } else { - zval *z = var; - ZVAL_DEREF(z); - if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) { - ZVAL_UNDEF(var); - gc_possible_root(Z_COUNTED_P(z)); - } else { - ZVAL_UNDEF(var); - } + gc_check_possible_root(garbage); } } else { ZVAL_UNDEF(var); @@ -9553,12 +9525,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ - if (IS_CV & (IS_VAR|IS_CV)) { - ZVAL_DEREF(function_name); - } ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT); GC_REFCOUNT((zend_object*)func->common.prototype)++; call_info |= ZEND_CALL_CLOSURE; + if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { + call_info |= ZEND_CALL_FAKE_CLOSURE; + } } else if (object) { call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ @@ -11532,12 +11504,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ - if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) { - ZVAL_DEREF(function_name); - } ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT); GC_REFCOUNT((zend_object*)func->common.prototype)++; call_info |= ZEND_CALL_CLOSURE; + if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { + call_info |= ZEND_CALL_FAKE_CLOSURE; + } } else if (object) { call_info |= ZEND_CALL_RELEASE_THIS; GC_REFCOUNT(object)++; /* For $this pointer */ @@ -12747,20 +12719,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPC switch (opline->extended_value) { case IS_NULL: - /* This code is taken from convert_to_null. However, it does not seems very useful, - * because a conversion to null always results in the same value. This could only - * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */ -#if 0 - if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) { - ZVAL_DEREF(expr); - } - if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { - if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) { - break; - } - } -#endif - ZVAL_NULL(result); break; case _IS_BOOL: @@ -12875,11 +12833,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -13028,11 +12986,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -13352,14 +13310,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMP_HANDLER(ZE SAVE_OPLINE(); value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1); if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) { - if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { - zend_class_entry *ce = Z_OBJCE_P(value); - - if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) || - EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) { - result = 1; - } - } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { + if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value)); if (EXPECTED(type_name != NULL)) { @@ -16327,20 +16278,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPC switch (opline->extended_value) { case IS_NULL: - /* This code is taken from convert_to_null. However, it does not seems very useful, - * because a conversion to null always results in the same value. This could only - * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */ -#if 0 - if (IS_VAR == IS_VAR || IS_VAR == IS_CV) { - ZVAL_DEREF(expr); - } - if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { - if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) { - break; - } - } -#endif - ZVAL_NULL(result); break; case _IS_BOOL: @@ -16457,11 +16394,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -16612,11 +16549,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -16773,13 +16710,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE p++; continue; } + if (UNEXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == FAILURE)) { + pos++; + p++; + continue; + } } - if (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) { - break; - } - pos++; - p++; + break; } if (opline->result_type & (IS_TMP_VAR|IS_CV)) { if (UNEXPECTED(!p->key)) { @@ -16801,11 +16738,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE break; } p++; - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) + ) { break; } } @@ -17299,14 +17236,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_VAR_HANDLER(ZE SAVE_OPLINE(); value = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1); if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) { - if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { - zend_class_entry *ce = Z_OBJCE_P(value); - - if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) || - EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) { - result = 1; - } - } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { + if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value)); if (EXPECTED(type_name != NULL)) { @@ -35349,20 +35279,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCO switch (opline->extended_value) { case IS_NULL: - /* This code is taken from convert_to_null. However, it does not seems very useful, - * because a conversion to null always results in the same value. This could only - * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */ -#if 0 - if (IS_CV == IS_VAR || IS_CV == IS_CV) { - ZVAL_DEREF(expr); - } - if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { - if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) { - break; - } - } -#endif - ZVAL_NULL(result); break; case _IS_BOOL: @@ -35541,11 +35457,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -35693,11 +35609,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } - if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && - (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || - EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) && - (UNEXPECTED(!p->key) || - EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) { + if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && + (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) || + (EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF) && + EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) + ) { break; } pos++; @@ -36076,14 +35992,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEN SAVE_OPLINE(); value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var); if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) { - if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { - zend_class_entry *ce = Z_OBJCE_P(value); - - if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) || - EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) { - result = 1; - } - } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { + if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) { const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value)); if (EXPECTED(type_name != NULL)) { @@ -40570,18 +40479,19 @@ check_indirect: variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var); if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) { - uint32_t refcnt = Z_DELREF_P(variable_ptr); + zend_refcounted *ref = Z_COUNTED_P(variable_ptr); + uint32_t refcnt = --GC_REFCOUNT(ref); if (EXPECTED(variable_ptr != value)) { if (refcnt == 0) { SAVE_OPLINE(); - zval_dtor_func(Z_COUNTED_P(variable_ptr)); + zval_dtor_func(ref); if (UNEXPECTED(EG(exception))) { ZVAL_NULL(variable_ptr); HANDLE_EXCEPTION(); } } else { - GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr); + gc_check_possible_root(ref); } } } @@ -42774,18 +42684,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDL if (Z_REFCOUNTED_P(var)) { zend_refcounted *garbage = Z_COUNTED_P(var); + ZVAL_UNDEF(var); if (!--GC_REFCOUNT(garbage)) { - ZVAL_UNDEF(var); zval_dtor_func(garbage); } else { - zval *z = var; - ZVAL_DEREF(z); - if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) { - ZVAL_UNDEF(var); - gc_possible_root(Z_COUNTED_P(z)); - } else { - ZVAL_UNDEF(var); - } + gc_check_possible_root(garbage); } } else { ZVAL_UNDEF(var); @@ -53948,18 +53851,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_H if (Z_REFCOUNTED_P(var)) { zend_refcounted *garbage = Z_COUNTED_P(var); + ZVAL_UNDEF(var); if (!--GC_REFCOUNT(garbage)) { - ZVAL_UNDEF(var); zval_dtor_func(garbage); } else { - zval *z = var; - ZVAL_DEREF(z); - if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) { - ZVAL_UNDEF(var); - gc_possible_root(Z_COUNTED_P(z)); - } else { - ZVAL_UNDEF(var); - } + gc_check_possible_root(garbage); } } else { ZVAL_UNDEF(var); |