[mapguide-commits] r10033 - in trunk/MgDev/Oem/php: . build include/TSRM include/Zend include/Zend/Optimizer include/ext include/ext/date include/ext/date/lib include/ext/gd include/ext/iconv include/ext/json include/ext/libxml include/ext/mbstring include/ext/mbstring/libmbfl/mbfl include/ext/mysqli include/ext/mysqlnd include/ext/pcre/pcre2lib include/ext/pdo include/ext/random include/ext/session include/ext/sockets include/ext/sodium include/ext/spl include/ext/standard include/ext/xml include/main include/main/streams lib script
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Mon Mar 20 05:54:05 PDT 2023
Author: jng
Date: 2023-03-20 05:54:05 -0700 (Mon, 20 Mar 2023)
New Revision: 10033
Added:
trunk/MgDev/Oem/php/include/Zend/zend_atomic.h
trunk/MgDev/Oem/php/include/Zend/zend_constants_arginfo.h
trunk/MgDev/Oem/php/include/Zend/zend_mmap.h
trunk/MgDev/Oem/php/include/ext/random/
trunk/MgDev/Oem/php/include/ext/random/php_random.h
trunk/MgDev/Oem/php/include/ext/standard/file_arginfo.h
trunk/MgDev/Oem/php/include/main/php_ini_builder.h
trunk/MgDev/Oem/php/include/main/php_odbc_utils.h
trunk/MgDev/Oem/php/lib/php_zip.lib
Removed:
trunk/MgDev/Oem/php/include/main/php_stdint.h
Modified:
trunk/MgDev/Oem/php/PROVENANCE.TXT
trunk/MgDev/Oem/php/build/default.manifest
trunk/MgDev/Oem/php/build/gen_stub.php
trunk/MgDev/Oem/php/build/template.rc
trunk/MgDev/Oem/php/include/TSRM/TSRM.h
trunk/MgDev/Oem/php/include/TSRM/tsrm_win32.h
trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_call_graph.h
trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_cfg.h
trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_func_info.h
trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_inference.h
trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_optimizer.h
trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_ssa.h
trunk/MgDev/Oem/php/include/Zend/zend.h
trunk/MgDev/Oem/php/include/Zend/zend_API.h
trunk/MgDev/Oem/php/include/Zend/zend_alloc.h
trunk/MgDev/Oem/php/include/Zend/zend_ast.h
trunk/MgDev/Oem/php/include/Zend/zend_attributes.h
trunk/MgDev/Oem/php/include/Zend/zend_attributes_arginfo.h
trunk/MgDev/Oem/php/include/Zend/zend_builtin_functions_arginfo.h
trunk/MgDev/Oem/php/include/Zend/zend_compile.h
trunk/MgDev/Oem/php/include/Zend/zend_cpuinfo.h
trunk/MgDev/Oem/php/include/Zend/zend_enum.h
trunk/MgDev/Oem/php/include/Zend/zend_exceptions_arginfo.h
trunk/MgDev/Oem/php/include/Zend/zend_execute.h
trunk/MgDev/Oem/php/include/Zend/zend_extensions.h
trunk/MgDev/Oem/php/include/Zend/zend_fibers.h
trunk/MgDev/Oem/php/include/Zend/zend_generators.h
trunk/MgDev/Oem/php/include/Zend/zend_globals.h
trunk/MgDev/Oem/php/include/Zend/zend_hash.h
trunk/MgDev/Oem/php/include/Zend/zend_inheritance.h
trunk/MgDev/Oem/php/include/Zend/zend_ini.h
trunk/MgDev/Oem/php/include/Zend/zend_interfaces.h
trunk/MgDev/Oem/php/include/Zend/zend_iterators.h
trunk/MgDev/Oem/php/include/Zend/zend_llist.h
trunk/MgDev/Oem/php/include/Zend/zend_long.h
trunk/MgDev/Oem/php/include/Zend/zend_map_ptr.h
trunk/MgDev/Oem/php/include/Zend/zend_modules.h
trunk/MgDev/Oem/php/include/Zend/zend_multiply.h
trunk/MgDev/Oem/php/include/Zend/zend_object_handlers.h
trunk/MgDev/Oem/php/include/Zend/zend_observer.h
trunk/MgDev/Oem/php/include/Zend/zend_operators.h
trunk/MgDev/Oem/php/include/Zend/zend_portability.h
trunk/MgDev/Oem/php/include/Zend/zend_ptr_stack.h
trunk/MgDev/Oem/php/include/Zend/zend_smart_str.h
trunk/MgDev/Oem/php/include/Zend/zend_smart_str_public.h
trunk/MgDev/Oem/php/include/Zend/zend_string.h
trunk/MgDev/Oem/php/include/Zend/zend_type_info.h
trunk/MgDev/Oem/php/include/Zend/zend_types.h
trunk/MgDev/Oem/php/include/Zend/zend_vm.h
trunk/MgDev/Oem/php/include/Zend/zend_vm_def.h
trunk/MgDev/Oem/php/include/Zend/zend_vm_execute.h
trunk/MgDev/Oem/php/include/Zend/zend_vm_handlers.h
trunk/MgDev/Oem/php/include/Zend/zend_vm_opcodes.h
trunk/MgDev/Oem/php/include/Zend/zend_vm_trace_handlers.h
trunk/MgDev/Oem/php/include/Zend/zend_vm_trace_map.h
trunk/MgDev/Oem/php/include/Zend/zend_weakrefs.h
trunk/MgDev/Oem/php/include/ext/date/lib/timelib.h
trunk/MgDev/Oem/php/include/ext/date/lib/timelib_config.h
trunk/MgDev/Oem/php/include/ext/date/php_date.h
trunk/MgDev/Oem/php/include/ext/gd/gd_arginfo.h
trunk/MgDev/Oem/php/include/ext/gd/php_gd.h
trunk/MgDev/Oem/php/include/ext/iconv/iconv_arginfo.h
trunk/MgDev/Oem/php/include/ext/iconv/php_iconv.h
trunk/MgDev/Oem/php/include/ext/json/php_json.h
trunk/MgDev/Oem/php/include/ext/libxml/php_libxml.h
trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/eaw_table.h
trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfilter.h
trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_consts.h
trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h
trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_language.h
trunk/MgDev/Oem/php/include/ext/mbstring/mbstring.h
trunk/MgDev/Oem/php/include/ext/mbstring/php_mbregex.h
trunk/MgDev/Oem/php/include/ext/mysqli/php_mysqli_structs.h
trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd.h
trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd_portability.h
trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd_structs.h
trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2.h
trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_internal.h
trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_intmodedep.h
trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h
trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_ucp.h
trunk/MgDev/Oem/php/include/ext/pdo/php_pdo.h
trunk/MgDev/Oem/php/include/ext/pdo/php_pdo_driver.h
trunk/MgDev/Oem/php/include/ext/session/php_session.h
trunk/MgDev/Oem/php/include/ext/sockets/php_sockets.h
trunk/MgDev/Oem/php/include/ext/sodium/php_libsodium.h
trunk/MgDev/Oem/php/include/ext/spl/spl_array.h
trunk/MgDev/Oem/php/include/ext/spl/spl_directory.h
trunk/MgDev/Oem/php/include/ext/spl/spl_dllist.h
trunk/MgDev/Oem/php/include/ext/spl/spl_functions.h
trunk/MgDev/Oem/php/include/ext/spl/spl_heap.h
trunk/MgDev/Oem/php/include/ext/spl/spl_iterators.h
trunk/MgDev/Oem/php/include/ext/spl/spl_observer.h
trunk/MgDev/Oem/php/include/ext/standard/basic_functions.h
trunk/MgDev/Oem/php/include/ext/standard/basic_functions_arginfo.h
trunk/MgDev/Oem/php/include/ext/standard/credits_ext.h
trunk/MgDev/Oem/php/include/ext/standard/crypt_freesec.h
trunk/MgDev/Oem/php/include/ext/standard/file.h
trunk/MgDev/Oem/php/include/ext/standard/flock_compat.h
trunk/MgDev/Oem/php/include/ext/standard/html.h
trunk/MgDev/Oem/php/include/ext/standard/php_array.h
trunk/MgDev/Oem/php/include/ext/standard/php_dir.h
trunk/MgDev/Oem/php/include/ext/standard/php_dns.h
trunk/MgDev/Oem/php/include/ext/standard/php_image.h
trunk/MgDev/Oem/php/include/ext/standard/php_lcg.h
trunk/MgDev/Oem/php/include/ext/standard/php_mt_rand.h
trunk/MgDev/Oem/php/include/ext/standard/php_password.h
trunk/MgDev/Oem/php/include/ext/standard/php_rand.h
trunk/MgDev/Oem/php/include/ext/standard/php_random.h
trunk/MgDev/Oem/php/include/ext/standard/php_standard.h
trunk/MgDev/Oem/php/include/ext/standard/php_string.h
trunk/MgDev/Oem/php/include/ext/xml/php_xml.h
trunk/MgDev/Oem/php/include/ext/xml/xml_arginfo.h
trunk/MgDev/Oem/php/include/main/SAPI.h
trunk/MgDev/Oem/php/include/main/config.w32.h
trunk/MgDev/Oem/php/include/main/php.h
trunk/MgDev/Oem/php/include/main/php_globals.h
trunk/MgDev/Oem/php/include/main/php_main.h
trunk/MgDev/Oem/php/include/main/php_network.h
trunk/MgDev/Oem/php/include/main/php_output.h
trunk/MgDev/Oem/php/include/main/php_streams.h
trunk/MgDev/Oem/php/include/main/php_variables.h
trunk/MgDev/Oem/php/include/main/php_version.h
trunk/MgDev/Oem/php/include/main/streams/php_stream_context.h
trunk/MgDev/Oem/php/include/main/streams/php_stream_plain_wrapper.h
trunk/MgDev/Oem/php/include/main/streams/php_streams_int.h
trunk/MgDev/Oem/php/lib/php8.lib
trunk/MgDev/Oem/php/lib/php_bz2.lib
trunk/MgDev/Oem/php/lib/php_com_dotnet.lib
trunk/MgDev/Oem/php/lib/php_curl.lib
trunk/MgDev/Oem/php/lib/php_dba.lib
trunk/MgDev/Oem/php/lib/php_dl_test.lib
trunk/MgDev/Oem/php/lib/php_enchant.lib
trunk/MgDev/Oem/php/lib/php_exif.lib
trunk/MgDev/Oem/php/lib/php_ffi.lib
trunk/MgDev/Oem/php/lib/php_fileinfo.lib
trunk/MgDev/Oem/php/lib/php_ftp.lib
trunk/MgDev/Oem/php/lib/php_gd.lib
trunk/MgDev/Oem/php/lib/php_gettext.lib
trunk/MgDev/Oem/php/lib/php_gmp.lib
trunk/MgDev/Oem/php/lib/php_imap.lib
trunk/MgDev/Oem/php/lib/php_intl.lib
trunk/MgDev/Oem/php/lib/php_ldap.lib
trunk/MgDev/Oem/php/lib/php_mbstring.lib
trunk/MgDev/Oem/php/lib/php_mysqli.lib
trunk/MgDev/Oem/php/lib/php_oci8_19.lib
trunk/MgDev/Oem/php/lib/php_odbc.lib
trunk/MgDev/Oem/php/lib/php_opcache.lib
trunk/MgDev/Oem/php/lib/php_openssl.lib
trunk/MgDev/Oem/php/lib/php_pdo_firebird.lib
trunk/MgDev/Oem/php/lib/php_pdo_mysql.lib
trunk/MgDev/Oem/php/lib/php_pdo_oci.lib
trunk/MgDev/Oem/php/lib/php_pdo_odbc.lib
trunk/MgDev/Oem/php/lib/php_pdo_pgsql.lib
trunk/MgDev/Oem/php/lib/php_pdo_sqlite.lib
trunk/MgDev/Oem/php/lib/php_pgsql.lib
trunk/MgDev/Oem/php/lib/php_shmop.lib
trunk/MgDev/Oem/php/lib/php_snmp.lib
trunk/MgDev/Oem/php/lib/php_soap.lib
trunk/MgDev/Oem/php/lib/php_sockets.lib
trunk/MgDev/Oem/php/lib/php_sodium.lib
trunk/MgDev/Oem/php/lib/php_sqlite3.lib
trunk/MgDev/Oem/php/lib/php_sysvshm.lib
trunk/MgDev/Oem/php/lib/php_tidy.lib
trunk/MgDev/Oem/php/lib/php_xsl.lib
trunk/MgDev/Oem/php/lib/php_zend_test.lib
trunk/MgDev/Oem/php/script/Makefile.phpize
trunk/MgDev/Oem/php/script/config.w32.phpize.in
trunk/MgDev/Oem/php/script/confutils.js
trunk/MgDev/Oem/php/script/ext_deps.js
trunk/MgDev/Oem/php/script/phpize.js
trunk/MgDev/Oem/php/script/run-tests.php
Log:
Update PHP extension dev pack files to 8.1.17
Modified: trunk/MgDev/Oem/php/PROVENANCE.TXT
===================================================================
--- trunk/MgDev/Oem/php/PROVENANCE.TXT 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/PROVENANCE.TXT 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,6 +1,6 @@
The contents of this directory originate from the PHP 8.1.11 development package SDK with key headers patched for ACE compatbility.
-https://windows.php.net/downloads/releases/php-devel-pack-8.1.11-nts-Win32-vs16-x64.zip
-sha256: e92f740408a3a5d90143f4352b05106ee93edfea0d49b59ca8b68342189124f4
+https://windows.php.net/downloads/releases/php-devel-pack-8.1.17-nts-Win32-vs16-x64.zip
+sha256: e6211c41df519f54be6488e0d71edac67d8ce7b1340dcb9ccf84bae54e955e0a
Refer to CHANGES.TXT for details on what was patched
\ No newline at end of file
Modified: trunk/MgDev/Oem/php/build/default.manifest
===================================================================
--- trunk/MgDev/Oem/php/build/default.manifest 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/build/default.manifest 2023-03-20 12:54:05 UTC (rev 10033)
@@ -15,7 +15,7 @@
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
- <!-- Windows 10 -->
+ <!-- Windows 10 and Windows 11 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
Modified: trunk/MgDev/Oem/php/build/gen_stub.php
===================================================================
--- trunk/MgDev/Oem/php/build/gen_stub.php 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/build/gen_stub.php 2023-03-20 12:54:05 UTC (rev 10033)
@@ -15,7 +15,14 @@
use PhpParser\PrettyPrinterAbstract;
error_reporting(E_ALL);
+ini_set("precision", "-1");
+const PHP_70_VERSION_ID = 70000;
+const PHP_80_VERSION_ID = 80000;
+const PHP_81_VERSION_ID = 80100;
+const PHP_82_VERSION_ID = 80200;
+const ALL_PHP_VERSION_IDS = [PHP_70_VERSION_ID, PHP_80_VERSION_ID, PHP_81_VERSION_ID, PHP_82_VERSION_ID];
+
/**
* @return FileInfo[]
*/
@@ -45,42 +52,84 @@
return $fileInfos;
}
-function processStubFile(string $stubFile, Context $context): ?FileInfo {
+function processStubFile(string $stubFile, Context $context, bool $includeOnly = false): ?FileInfo {
try {
if (!file_exists($stubFile)) {
throw new Exception("File $stubFile does not exist");
}
- $arginfoFile = str_replace('.stub.php', '_arginfo.h', $stubFile);
- $legacyFile = str_replace('.stub.php', '_legacy_arginfo.h', $stubFile);
+ if (!$includeOnly) {
+ $stubFilenameWithoutExtension = str_replace(".stub.php", "", $stubFile);
+ $arginfoFile = "{$stubFilenameWithoutExtension}_arginfo.h";
+ $legacyFile = "{$stubFilenameWithoutExtension}_legacy_arginfo.h";
- $stubCode = file_get_contents($stubFile);
- $stubHash = computeStubHash($stubCode);
- $oldStubHash = extractStubHash($arginfoFile);
- if ($stubHash === $oldStubHash && !$context->forceParse) {
- /* Stub file did not change, do not regenerate. */
- return null;
+ $stubCode = file_get_contents($stubFile);
+ $stubHash = computeStubHash($stubCode);
+ $oldStubHash = extractStubHash($arginfoFile);
+ if ($stubHash === $oldStubHash && !$context->forceParse) {
+ /* Stub file did not change, do not regenerate. */
+ return null;
+ }
}
- initPhpParser();
- $fileInfo = parseStubFile($stubCode);
+ if (!$fileInfo = $context->parsedFiles[$stubFile] ?? null) {
+ initPhpParser();
+ $fileInfo = parseStubFile($stubCode ?? file_get_contents($stubFile));
+ $context->parsedFiles[$stubFile] = $fileInfo;
- $arginfoCode = generateArgInfoCode($fileInfo, $stubHash);
+ foreach ($fileInfo->dependencies as $dependency) {
+ // TODO add header search path for extensions?
+ $prefixes = [dirname($stubFile) . "/", dirname(__DIR__) . "/"];
+ foreach ($prefixes as $prefix) {
+ $depFile = $prefix . $dependency;
+ if (file_exists($depFile)) {
+ break;
+ }
+ $depFile = null;
+ }
+ if (!$depFile) {
+ throw new Exception("File $stubFile includes a file $dependency which does not exist");
+ }
+ processStubFile($depFile, $context, true);
+ }
+
+ $constInfos = $fileInfo->getAllConstInfos();
+ $context->allConstInfos = array_merge($context->allConstInfos, $constInfos);
+ }
+
+ if ($includeOnly) {
+ return $fileInfo;
+ }
+
+ $arginfoCode = generateArgInfoCode(
+ basename($stubFilenameWithoutExtension),
+ $fileInfo,
+ $context->allConstInfos,
+ $stubHash
+ );
if (($context->forceRegeneration || $stubHash !== $oldStubHash) && file_put_contents($arginfoFile, $arginfoCode)) {
echo "Saved $arginfoFile\n";
}
- if ($fileInfo->generateLegacyArginfo) {
+ if ($fileInfo->generateLegacyArginfoForPhpVersionId !== null && $fileInfo->generateLegacyArginfoForPhpVersionId < PHP_80_VERSION_ID) {
$legacyFileInfo = clone $fileInfo;
foreach ($legacyFileInfo->getAllFuncInfos() as $funcInfo) {
$funcInfo->discardInfoForOldPhpVersions();
}
+ foreach ($legacyFileInfo->getAllConstInfos() as $constInfo) {
+ $constInfo->discardInfoForOldPhpVersions();
+ }
foreach ($legacyFileInfo->getAllPropertyInfos() as $propertyInfo) {
$propertyInfo->discardInfoForOldPhpVersions();
}
- $arginfoCode = generateArgInfoCode($legacyFileInfo, $stubHash);
+ $arginfoCode = generateArgInfoCode(
+ basename($stubFilenameWithoutExtension),
+ $legacyFileInfo,
+ $context->allConstInfos,
+ $stubHash
+ );
if (($context->forceRegeneration || $stubHash !== $oldStubHash) && file_put_contents($legacyFile, $arginfoCode)) {
echo "Saved $legacyFile\n";
}
@@ -111,19 +160,18 @@
}
class Context {
- /** @var bool */
- public $forceParse = false;
- /** @var bool */
- public $forceRegeneration = false;
+ public bool $forceParse = false;
+ public bool $forceRegeneration = false;
+ /** @var iterable<ConstInfo> */
+ public iterable $allConstInfos = [];
+ /** @var FileInfo[] */
+ public array $parsedFiles = [];
}
class ArrayType extends SimpleType {
- /** @var Type */
- public $keyType;
+ public Type $keyType;
+ public Type $valueType;
- /** @var Type */
- public $valueType;
-
public static function createGenericArray(): self
{
return new ArrayType(Type::fromString("int|string"), Type::fromString("mixed|ref"));
@@ -160,10 +208,8 @@
}
class SimpleType {
- /** @var string */
- public $name;
- /** @var bool */
- public $isBuiltin;
+ public string $name;
+ public bool $isBuiltin;
public static function fromNode(Node $node): SimpleType {
if ($node instanceof Node\Name) {
@@ -172,6 +218,11 @@
return new SimpleType($node->toLowerString(), true);
}
+ if ($node->toLowerString() === 'true') {
+ // TODO PHP-Parser doesn't yet recognize true as a stand-alone built-in type
+ return new SimpleType($node->toLowerString(), true);
+ }
+
if ($node->toLowerString() === 'self') {
throw new Exception('The exact class name must be used instead of "self"');
}
@@ -203,7 +254,6 @@
case "float":
case "string":
case "callable":
- case "iterable":
case "object":
case "resource":
case "mixed":
@@ -215,6 +265,8 @@
return ArrayType::createGenericArray();
case "self":
throw new Exception('The exact class name must be used instead of "self"');
+ case "iterable":
+ throw new Exception('This should not happen');
}
$matches = [];
@@ -236,11 +288,66 @@
return new SimpleType($typeString, false);
}
+ /**
+ * @param mixed $value
+ */
+ public static function fromValue($value): SimpleType
+ {
+ switch (gettype($value)) {
+ case "NULL":
+ return SimpleType::null();
+ case "boolean":
+ return SimpleType::bool();
+ case "integer":
+ return SimpleType::int();
+ case "double":
+ return SimpleType::float();
+ case "string":
+ return SimpleType::string();
+ case "array":
+ return SimpleType::array();
+ case "object":
+ return SimpleType::object();
+ default:
+ throw new Exception("Type \"" . gettype($value) . "\" cannot be inferred based on value");
+ }
+ }
+
public static function null(): SimpleType
{
return new SimpleType("null", true);
}
+ public static function bool(): SimpleType
+ {
+ return new SimpleType("bool", true);
+ }
+
+ public static function int(): SimpleType
+ {
+ return new SimpleType("int", true);
+ }
+
+ public static function float(): SimpleType
+ {
+ return new SimpleType("float", true);
+ }
+
+ public static function string(): SimpleType
+ {
+ return new SimpleType("string", true);
+ }
+
+ public static function array(): SimpleType
+ {
+ return new SimpleType("array", true);
+ }
+
+ public static function object(): SimpleType
+ {
+ return new SimpleType("object", true);
+ }
+
public static function void(): SimpleType
{
return new SimpleType("void", true);
@@ -259,6 +366,26 @@
return $this->isBuiltin && $this->name === 'null';
}
+ public function isBool(): bool {
+ return $this->isBuiltin && $this->name === 'bool';
+ }
+
+ public function isInt(): bool {
+ return $this->isBuiltin && $this->name === 'int';
+ }
+
+ public function isFloat(): bool {
+ return $this->isBuiltin && $this->name === 'float';
+ }
+
+ public function isString(): bool {
+ return $this->isBuiltin && $this->name === 'string';
+ }
+
+ public function isArray(): bool {
+ return $this->isBuiltin && $this->name === 'array';
+ }
+
public function toTypeCode(): string {
assert($this->isBuiltin);
switch ($this->name) {
@@ -278,8 +405,6 @@
return "IS_VOID";
case "callable":
return "IS_CALLABLE";
- case "iterable":
- return "IS_ITERABLE";
case "mixed":
return "IS_MIXED";
case "static":
@@ -286,6 +411,12 @@
return "IS_STATIC";
case "never":
return "IS_NEVER";
+ case "null":
+ return "IS_NULL";
+ case "false":
+ return "IS_FALSE";
+ case "true":
+ return "IS_TRUE";
default:
throw new Exception("Not implemented: $this->name");
}
@@ -299,6 +430,8 @@
return "MAY_BE_NULL";
case "false":
return "MAY_BE_FALSE";
+ case "true":
+ return "MAY_BE_TRUE";
case "bool":
return "MAY_BE_BOOL";
case "int":
@@ -313,8 +446,6 @@
return "MAY_BE_OBJECT";
case "callable":
return "MAY_BE_CALLABLE";
- case "iterable":
- return "MAY_BE_ITERABLE";
case "mixed":
return "MAY_BE_ANY";
case "void":
@@ -351,6 +482,8 @@
return "MAY_BE_ARRAY_OF_NULL";
case "false":
return "MAY_BE_ARRAY_OF_FALSE";
+ case "true":
+ return "MAY_BE_ARRAY_OF_TRUE";
case "bool":
return "MAY_BE_ARRAY_OF_FALSE|MAY_BE_ARRAY_OF_TRUE";
case "int":
@@ -380,8 +513,6 @@
}
switch ($this->name) {
- case "true":
- return "MAY_BE_TRUE";
case "resource":
return "MAY_BE_RESOURCE";
case "callable":
@@ -396,11 +527,15 @@
}
public function toEscapedName(): string {
- return str_replace('\\', '\\\\', $this->name);
+ // Escape backslashes, and also encode \u and \U to avoid compilation errors in generated macros
+ return str_replace(
+ ['\\', '\\u', '\\U'],
+ ['\\\\', '\\\\165', '\\\\125'],
+ $this->name
+ );
}
public function toVarEscapedName(): string {
- $name = str_replace('_', '__', $this->name);
return str_replace('\\', '_', $this->name);
}
@@ -411,23 +546,40 @@
class Type {
/** @var SimpleType[] */
- public $types;
+ public array $types;
+ public bool $isIntersection;
public static function fromNode(Node $node): Type {
- if ($node instanceof Node\UnionType) {
- return new Type(array_map(['SimpleType', 'fromNode'], $node->types));
+ if ($node instanceof Node\UnionType || $node instanceof Node\IntersectionType) {
+ $nestedTypeObjects = array_map(['Type', 'fromNode'], $node->types);
+ $types = [];
+ foreach ($nestedTypeObjects as $typeObject) {
+ array_push($types, ...$typeObject->types);
+ }
+ return new Type($types, ($node instanceof Node\IntersectionType));
}
if ($node instanceof Node\NullableType) {
return new Type(
[
- SimpleType::fromNode($node->type),
+ ...Type::fromNode($node->type)->types,
SimpleType::null(),
- ]
+ ],
+ false
);
}
- return new Type([SimpleType::fromNode($node)]);
+ if ($node instanceof Node\Identifier && $node->toLowerString() === "iterable") {
+ return new Type(
+ [
+ SimpleType::fromString("Traversable"),
+ ArrayType::createGenericArray(),
+ ],
+ false
+ );
+ }
+
+ return new Type([SimpleType::fromNode($node)], false);
}
public static function fromString(string $typeString): self {
@@ -435,6 +587,7 @@
$simpleTypes = [];
$simpleTypeOffset = 0;
$inArray = false;
+ $isIntersection = false;
$typeStringLength = strlen($typeString);
for ($i = 0; $i < $typeStringLength; $i++) {
@@ -454,7 +607,8 @@
continue;
}
- if ($char === "|") {
+ if ($char === "|" || $char === "&") {
+ $isIntersection = ($char === "&");
$simpleTypeName = trim(substr($typeString, $simpleTypeOffset, $i - $simpleTypeOffset));
$simpleTypes[] = SimpleType::fromString($simpleTypeName);
@@ -463,14 +617,15 @@
}
}
- return new Type($simpleTypes);
+ return new Type($simpleTypes, $isIntersection);
}
/**
* @param SimpleType[] $types
*/
- private function __construct(array $types) {
+ private function __construct(array $types, bool $isIntersection) {
$this->types = $types;
+ $this->isIntersection = $isIntersection;
}
public function isScalar(): bool {
@@ -500,12 +655,17 @@
function(SimpleType $type) {
return !$type->isNull();
}
- )
+ ),
+ false
);
}
public function tryToSimpleType(): ?SimpleType {
$withoutNull = $this->getWithoutNull();
+ /* type has only null */
+ if (count($withoutNull->types) === 0) {
+ return $this->types[0];
+ }
if (count($withoutNull->types) === 1) {
return $withoutNull->types[0];
}
@@ -529,6 +689,7 @@
$optimizerTypes = [];
foreach ($this->types as $type) {
+ // TODO Support for toOptimizerMask for intersection
$optimizerTypes[] = $type->toOptimizerTypeMask();
}
@@ -557,8 +718,9 @@
public function getTypeForDoc(DOMDocument $doc): DOMElement {
if (count($this->types) > 1) {
+ $typeSort = $this->isIntersection ? "intersection" : "union";
$typeElement = $doc->createElement('type');
- $typeElement->setAttribute("class", "union");
+ $typeElement->setAttribute("class", $typeSort);
foreach ($this->types as $type) {
$unionTypeElement = $doc->createElement('type', $type->name);
@@ -601,7 +763,8 @@
return 'mixed';
}
- return implode('|', array_map(
+ $char = $this->isIntersection ? '&' : '|';
+ return implode($char, array_map(
function ($type) { return $type->name; },
$this->types)
);
@@ -610,10 +773,9 @@
class ArginfoType {
/** @var SimpleType[] $classTypes */
- public $classTypes;
-
+ public array $classTypes;
/** @var SimpleType[] $builtinTypes */
- private $builtinTypes;
+ private array $builtinTypes;
/**
* @param SimpleType[] $classTypes
@@ -649,25 +811,33 @@
const SEND_BY_REF = 1;
const SEND_PREFER_REF = 2;
- /** @var string */
- public $name;
- /** @var int */
- public $sendBy;
- /** @var bool */
- public $isVariadic;
- /** @var Type|null */
- public $type;
- /** @var Type|null */
- public $phpDocType;
- /** @var string|null */
- public $defaultValue;
+ public string $name;
+ public int $sendBy;
+ public bool $isVariadic;
+ public ?Type $type;
+ public ?Type $phpDocType;
+ public ?string $defaultValue;
+ /** @var AttributeInfo[] */
+ public array $attributes;
- public function __construct(string $name, int $sendBy, bool $isVariadic, ?Type $type, ?Type $phpDocType, ?string $defaultValue) {
+ /**
+ * @param AttributeInfo[] $attributes
+ */
+ public function __construct(
+ string $name,
+ int $sendBy,
+ bool $isVariadic,
+ ?Type $type,
+ ?Type $phpDocType,
+ ?string $defaultValue,
+ array $attributes
+ ) {
$this->name = $name;
$this->sendBy = $sendBy;
$this->isVariadic = $isVariadic;
$this->setTypes($type, $phpDocType);
$this->defaultValue = $defaultValue;
+ $this->attributes = $attributes;
}
public function equals(ArgInfo $other): bool {
@@ -733,20 +903,86 @@
private function setTypes(?Type $type, ?Type $phpDocType): void
{
- if ($phpDocType !== null && Type::equals($type, $phpDocType)) {
- throw new Exception('PHPDoc param type "' . $phpDocType->__toString() . '" is unnecessary');
- }
-
$this->type = $type;
$this->phpDocType = $phpDocType;
}
}
+interface ConstOrClassConstName {
+ public function __toString(): string;
+ public function equals(ConstOrClassConstName $const): bool;
+ public function isClassConst(): bool;
+ public function isUnknown(): bool;
+}
+
+abstract class AbstractConstName implements ConstOrClassConstName
+{
+ public function equals(ConstOrClassConstName $const): bool
+ {
+ return $this->__toString() === $const->__toString();
+ }
+
+ public function isUnknown(): bool
+ {
+ return strtolower($this->__toString()) === "unknown";
+ }
+}
+
+class ConstName extends AbstractConstName {
+ public string $const;
+
+ public function __construct(?Name $namespace, string $const)
+ {
+ if ($namespace && ($namespace = $namespace->slice(0, -1))) {
+ $const = $namespace->toString() . '\\' . $const;
+ }
+ $this->const = $const;
+ }
+
+ public function isClassConst(): bool
+ {
+ return false;
+ }
+
+ public function isUnknown(): bool
+ {
+ $name = $this->__toString();
+ if (($pos = strrpos($name, '\\')) !== false) {
+ $name = substr($name, $pos + 1);
+ }
+ return strtolower($name) === "unknown";
+ }
+
+ public function __toString(): string
+ {
+ return $this->const;
+ }
+}
+
+class ClassConstName extends AbstractConstName {
+ public Name $class;
+ public string $const;
+
+ public function __construct(Name $class, string $const)
+ {
+ $this->class = $class;
+ $this->const = $const;
+ }
+
+ public function isClassConst(): bool
+ {
+ return true;
+ }
+
+ public function __toString(): string
+ {
+ return $this->class->toString() . "::" . $this->const;
+ }
+}
+
class PropertyName {
- /** @var Name */
- public $class;
- /** @var string */
- public $property;
+ public Name $class;
+ public string $property;
public function __construct(Name $class, string $property)
{
@@ -764,6 +1000,7 @@
public function getDeclaration(): string;
public function getArgInfoName(): string;
public function getMethodSynopsisFilename(): string;
+ public function getNameForAttributes(): string;
public function __toString(): string;
public function isMethod(): bool;
public function isConstructor(): bool;
@@ -771,8 +1008,7 @@
}
class FunctionName implements FunctionOrMethodName {
- /** @var Name */
- private $name;
+ private Name $name;
public function __construct(Name $name) {
$this->name = $name;
@@ -793,6 +1029,10 @@
}
public function getDeclarationName(): string {
+ return implode('_', $this->name->parts);
+ }
+
+ public function getFunctionName(): string {
return $this->name->getLast();
}
@@ -809,6 +1049,10 @@
return implode('_', $this->name->parts);
}
+ public function getNameForAttributes(): string {
+ return strtolower($this->name->toString());
+ }
+
public function __toString(): string {
return $this->name->toString();
}
@@ -827,10 +1071,8 @@
}
class MethodName implements FunctionOrMethodName {
- /** @var Name */
- private $className;
- /** @var string */
- public $methodName;
+ public Name $className;
+ public string $methodName;
public function __construct(Name $className, string $methodName) {
$this->className = $className;
@@ -853,6 +1095,10 @@
return $this->getDeclarationClassName() . "_{$this->methodName}";
}
+ public function getNameForAttributes(): string {
+ return strtolower($this->methodName);
+ }
+
public function __toString(): string {
return "$this->className::$this->methodName";
}
@@ -881,16 +1127,11 @@
self::REFCOUNT_N,
];
- /** @var bool */
- public $byRef;
- /** @var Type|null */
- public $type;
- /** @var Type|null */
- public $phpDocType;
- /** @var bool */
- public $tentativeReturnType;
- /** @var string */
- public $refcount;
+ public bool $byRef;
+ public ?Type $type;
+ public ?Type $phpDocType;
+ public bool $tentativeReturnType;
+ public string $refcount;
public function __construct(bool $byRef, ?Type $type, ?Type $phpDocType, bool $tentativeReturnType, ?string $refcount) {
$this->byRef = $byRef;
@@ -910,10 +1151,6 @@
private function setTypes(?Type $type, ?Type $phpDocType, bool $tentativeReturnType): void
{
- if ($phpDocType !== null && Type::equals($type, $phpDocType)) {
- throw new Exception('PHPDoc return type "' . $phpDocType->__toString() . '" is unnecessary');
- }
-
$this->type = $type;
$this->phpDocType = $phpDocType;
$this->tentativeReturnType = $tentativeReturnType;
@@ -946,28 +1183,20 @@
}
class FuncInfo {
- /** @var FunctionOrMethodName */
- public $name;
- /** @var int */
- public $classFlags;
- /** @var int */
- public $flags;
- /** @var string|null */
- public $aliasType;
- /** @var FunctionName|null */
- public $alias;
- /** @var bool */
- public $isDeprecated;
- /** @var bool */
- public $verify;
+ public FunctionOrMethodName $name;
+ public int $classFlags;
+ public int $flags;
+ public ?string $aliasType;
+ public ?FunctionOrMethodName $alias;
+ public bool $isDeprecated;
+ public bool $supportsCompileTimeEval;
+ public bool $verify;
/** @var ArgInfo[] */
- public $args;
- /** @var ReturnInfo */
- public $return;
- /** @var int */
- public $numRequiredArgs;
- /** @var string|null */
- public $cond;
+ public array $args;
+ public ReturnInfo $return;
+ public int $numRequiredArgs;
+ public ?string $cond;
+ public bool $isUndocumentable;
/**
* @param ArgInfo[] $args
@@ -979,11 +1208,13 @@
?string $aliasType,
?FunctionOrMethodName $alias,
bool $isDeprecated,
+ bool $supportsCompileTimeEval,
bool $verify,
array $args,
ReturnInfo $return,
int $numRequiredArgs,
- ?string $cond
+ ?string $cond,
+ bool $isUndocumentable
) {
$this->name = $name;
$this->classFlags = $classFlags;
@@ -991,11 +1222,13 @@
$this->aliasType = $aliasType;
$this->alias = $alias;
$this->isDeprecated = $isDeprecated;
+ $this->supportsCompileTimeEval = $supportsCompileTimeEval;
$this->verify = $verify;
$this->args = $args;
$this->return = $return;
$this->numRequiredArgs = $numRequiredArgs;
$this->cond = $cond;
+ $this->isUndocumentable = $isUndocumentable;
}
public function isMethod(): bool
@@ -1128,35 +1361,42 @@
}
} else if ($this->name instanceof FunctionName) {
$namespace = $this->name->getNamespace();
- $declarationName = $this->name->getDeclarationName();
+ $functionName = $this->name->getFunctionName();
+ $declarationName = $this->alias ? $this->alias->getNonNamespacedName() : $this->name->getDeclarationName();
- if ($this->alias && $this->isDeprecated) {
+ if ($namespace) {
+ // Namespaced functions are always declared as aliases to avoid name conflicts when two functions with
+ // the same name exist in separate namespaces
+ $macro = $this->isDeprecated ? 'ZEND_NS_DEP_FALIAS' : 'ZEND_NS_FALIAS';
+
+ // Render A\B as "A\\B" in C strings for namespaces
return sprintf(
- "\tZEND_DEP_FALIAS(%s, %s, %s)\n",
- $declarationName, $this->alias->getNonNamespacedName(), $this->getArgInfoName()
+ "\t%s(\"%s\", %s, %s, %s)\n",
+ $macro, addslashes($namespace), $this->name->getFunctionName(), $declarationName, $this->getArgInfoName()
);
}
if ($this->alias) {
+ $macro = $this->isDeprecated ? 'ZEND_DEP_FALIAS' : 'ZEND_FALIAS';
+
return sprintf(
- "\tZEND_FALIAS(%s, %s, %s)\n",
- $declarationName, $this->alias->getNonNamespacedName(), $this->getArgInfoName()
+ "\t%s(%s, %s, %s)\n",
+ $macro, $functionName, $declarationName, $this->getArgInfoName()
);
}
- if ($this->isDeprecated) {
- return sprintf(
- "\tZEND_DEP_FE(%s, %s)\n", $declarationName, $this->getArgInfoName());
+ switch (true) {
+ case $this->isDeprecated:
+ $macro = 'ZEND_DEP_FE';
+ break;
+ case $this->supportsCompileTimeEval:
+ $macro = 'ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE';
+ break;
+ default:
+ $macro = 'ZEND_FE';
}
- if ($namespace) {
- // Render A\B as "A\\B" in C strings for namespaces
- return sprintf(
- "\tZEND_NS_FE(\"%s\", %s, %s)\n",
- addslashes($namespace), $declarationName, $this->getArgInfoName());
- } else {
- return sprintf("\tZEND_FE(%s, %s)\n", $declarationName, $this->getArgInfoName());
- }
+ return sprintf("\t%s(%s, %s)\n", $macro, $functionName, $this->getArgInfoName());
} else {
throw new Error("Cannot happen");
}
@@ -1180,7 +1420,7 @@
return null;
}
- return " F" . $this->return->refcount . '("' . $this->name->__toString() . '", ' . $type->toOptimizerTypeMask() . "),\n";
+ return "\tF" . $this->return->refcount . '("' . $this->name->__toString() . '", ' . $type->toOptimizerTypeMask() . "),\n";
}
public function discardInfoForOldPhpVersions(): void {
@@ -1188,6 +1428,7 @@
foreach ($this->args as $arg) {
$arg->type = null;
$arg->defaultValue = null;
+ $arg->attributes = [];
}
}
@@ -1258,14 +1499,10 @@
$methodSynopsis = $doc->createElement($synopsisType);
- $aliasedFunc = $this->aliasType === "alias" && isset($funcMap[$this->alias->__toString()]) ? $funcMap[$this->alias->__toString()] : null;
- $aliasFunc = $aliasMap[$this->name->__toString()] ?? null;
-
- if (($this->aliasType === "alias" && $aliasedFunc !== null && $aliasedFunc->isMethod() !== $this->isMethod()) ||
- ($aliasFunc !== null && $aliasFunc->isMethod() !== $this->isMethod())
- ) {
+ if ($this->isMethod()) {
+ assert($this->name instanceof MethodName);
$role = $doc->createAttribute("role");
- $role->value = $this->isMethod() ? "oop" : "procedural";
+ $role->value = addslashes($this->name->className->__toString());
$methodSynopsis->appendChild($role);
}
@@ -1336,72 +1573,545 @@
}
}
-function initializeZval(string $zvalName, $value): string
+class EvaluatedValue
{
- $code = "\tzval $zvalName;\n";
+ /** @var mixed */
+ public $value;
+ public SimpleType $type;
+ public ?string $cConstValue;
+ public bool $isUnknownConstValue;
+ public ?ConstInfo $originatingConst;
- switch (gettype($value)) {
- case "NULL":
- $code .= "\tZVAL_NULL(&$zvalName);\n";
- break;
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ public static function createFromExpression(Expr $expr, ?SimpleType $constType, ?string $cConstName, iterable $allConstInfos): EvaluatedValue
+ {
+ $originatingConst = null;
+ $isUnknownConstValue = null;
- case "boolean":
- $code .= "\tZVAL_BOOL(&$zvalName, " . ((int) $value) . ");\n";
- break;
+ $evaluator = new ConstExprEvaluator(
+ function (Expr $expr) use ($allConstInfos, &$constType, &$originatingConst, &$isUnknownConstValue) {
+ if (!$expr instanceof Expr\ConstFetch && !$expr instanceof Expr\ClassConstFetch) {
+ throw new Exception($this->getVariableTypeName() . " " . $this->getVariableLikeName() . " has an unsupported value");
+ }
- case "integer":
- $code .= "\tZVAL_LONG(&$zvalName, $value);\n";
- break;
+ if ($expr instanceof Expr\ClassConstFetch) {
+ $originatingConstName = new ClassConstName($expr->class, $expr->name->toString());
+ } else {
+ $originatingConstName = new ConstName($expr->name->getAttribute('namespacedName'), $expr->name->toString());
+ }
- case "double":
- $code .= "\tZVAL_DOUBLE(&$zvalName, $value);\n";
- break;
+ if ($originatingConstName->isUnknown()) {
+ $originatingConst = null;
+ $isUnknownConstValue = true;
- case "string":
- if ($value === "") {
+ return null;
+ }
+
+ foreach ($allConstInfos as $const) {
+ if (!$originatingConstName->equals($const->name)) {
+ continue;
+ }
+
+ if ($constType === null && $const->phpDocType) {
+ $constType = $const->phpDocType->tryToSimpleType();
+ }
+
+ $originatingConst = $const;
+ $isUnknownConstValue = false;
+
+ return null;
+ }
+
+ throw new Exception("Constant " . $originatingConstName->__toString() . " cannot be found");
+ }
+ );
+
+ $result = $evaluator->evaluateDirectly($expr);
+
+ return new EvaluatedValue(
+ $result,
+ $constType ?: SimpleType::fromValue($result),
+ $cConstName,
+ $originatingConst,
+ (bool) $isUnknownConstValue
+ );
+ }
+
+ public static function null(): EvaluatedValue
+ {
+ return new self(null, SimpleType::null(), null, null, false);
+ }
+
+ /**
+ * @param mixed $value
+ */
+ private function __construct($value, SimpleType $type, ?string $cConstName, ?ConstInfo $originatingConst, bool $isUnknownConstValue)
+ {
+ $this->value = $value;
+ $this->type = $type;
+ $this->cConstValue = $cConstName;
+ $this->originatingConst = $originatingConst;
+ $this->isUnknownConstValue = $isUnknownConstValue;
+ }
+
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ public function initializeZval(string $zvalName, iterable $allConstInfos): string
+ {
+ $cConstValue = $this->getCConstValue($allConstInfos);
+
+ $code = "\tzval $zvalName;\n";
+
+ if ($this->type->isNull()) {
+ $code .= "\tZVAL_NULL(&$zvalName);\n";
+ } elseif ($this->type->isBool()) {
+ $code .= "\t" . ($this->value ? 'ZVAL_TRUE' : 'ZVAL_FALSE') . "(&$zvalName);\n";
+ } elseif ($this->type->isInt()) {
+ $code .= "\tZVAL_LONG(&$zvalName, " . ($cConstValue ?: $this->value) . ");\n";
+ } elseif ($this->type->isFloat()) {
+ $code .= "\tZVAL_DOUBLE(&$zvalName, " . ($cConstValue ?: $this->value) . ");\n";
+ } elseif ($this->type->isString()) {
+ if (!$cConstValue && $this->value === "") {
$code .= "\tZVAL_EMPTY_STRING(&$zvalName);\n";
} else {
- $strValue = addslashes($value);
- $code .= "\tzend_string *{$zvalName}_str = zend_string_init(\"$strValue\", sizeof(\"$strValue\") - 1, 1);\n";
+ $constValue = $cConstValue ?: '"' . addslashes($this->value) . '"';
+ $code .= "\tzend_string *{$zvalName}_str = zend_string_init($constValue, strlen($constValue), 1);\n";
$code .= "\tZVAL_STR(&$zvalName, {$zvalName}_str);\n";
}
- break;
-
- case "array":
- if (empty($value)) {
+ } elseif ($this->type->isArray()) {
+ if (!$cConstValue && empty($this->value)) {
$code .= "\tZVAL_EMPTY_ARRAY(&$zvalName);\n";
} else {
throw new Exception("Unimplemented default value");
}
- break;
+ } else {
+ throw new Exception("Invalid default value");
+ }
- default:
- throw new Exception("Invalid default value");
+ return $code;
}
- return $code;
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ public function getCConstValue(iterable $allConstInfos): ?string
+ {
+ if ($this->cConstValue) {
+ return $this->cConstValue;
+ }
+
+ if ($this->originatingConst) {
+ return $this->originatingConst->getValue($allConstInfos)->getCConstValue($allConstInfos);
+ }
+
+ return null;
+ }
}
-class PropertyInfo
+abstract class VariableLike
{
- /** @var PropertyName */
- public $name;
- /** @var int */
- public $flags;
- /** @var Type|null */
- public $type;
- /** @var Type|null */
- public $phpDocType;
- /** @var Expr|null */
- public $defaultValue;
- /** @var string|null */
- public $defaultValueString;
- /** @var bool */
- public $isDocReadonly;
- /** @var string|null */
- public $link;
+ public ?Type $phpDocType;
+ public int $flags;
+ public ?string $link;
+ public ?int $phpVersionIdMinimumCompatibility;
public function __construct(
+ int $flags,
+ ?Type $phpDocType,
+ ?string $link,
+ ?int $phpVersionIdMinimumCompatibility
+ ) {
+ $this->flags = $flags;
+ $this->phpDocType = $phpDocType;
+ $this->link = $link;
+ $this->phpVersionIdMinimumCompatibility = $phpVersionIdMinimumCompatibility;
+ }
+
+ abstract protected function getVariableTypeCode(): string;
+
+ abstract protected function getVariableTypeName(): string;
+
+ abstract protected function getVariableLikeName(): string;
+
+ abstract protected function addTypeToFieldSynopsis(DOMDocument $doc, DOMElement $fieldsynopsisElement): void;
+
+ abstract protected function getFieldSynopsisDefaultLinkend(): string;
+
+ abstract protected function getFieldSynopsisName(): string;
+
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ abstract protected function getFieldSynopsisValueString(iterable $allConstInfos): ?string;
+
+ abstract public function discardInfoForOldPhpVersions(): void;
+
+ /**
+ * @return array<int, string[]>
+ */
+ protected function getFlagsByPhpVersion(): array
+ {
+ $flags = "ZEND_ACC_PUBLIC";
+ if ($this->flags & Class_::MODIFIER_PROTECTED) {
+ $flags = "ZEND_ACC_PROTECTED";
+ } elseif ($this->flags & Class_::MODIFIER_PRIVATE) {
+ $flags = "ZEND_ACC_PRIVATE";
+ }
+
+ return [
+ PHP_70_VERSION_ID => [$flags],
+ PHP_80_VERSION_ID => [$flags],
+ PHP_81_VERSION_ID => [$flags],
+ PHP_82_VERSION_ID => [$flags],
+ ];
+ }
+
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ public function getFieldSynopsisElement(DOMDocument $doc, iterable $allConstInfos): DOMElement
+ {
+ $fieldsynopsisElement = $doc->createElement("fieldsynopsis");
+
+ $this->addModifiersToFieldSynopsis($doc, $fieldsynopsisElement);
+
+ $this->addTypeToFieldSynopsis($doc, $fieldsynopsisElement);
+
+ $varnameElement = $doc->createElement("varname", $this->getFieldSynopsisName());
+ if ($this->link) {
+ $varnameElement->setAttribute("linkend", $this->link);
+ } else {
+ $varnameElement->setAttribute("linkend", $this->getFieldSynopsisDefaultLinkend());
+ }
+
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+ $fieldsynopsisElement->appendChild($varnameElement);
+
+ $valueString = $this->getFieldSynopsisValueString($allConstInfos);
+ if ($valueString) {
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+ $initializerElement = $doc->createElement("initializer", $valueString);
+ $fieldsynopsisElement->appendChild($initializerElement);
+ }
+
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+
+ return $fieldsynopsisElement;
+ }
+
+ protected function addModifiersToFieldSynopsis(DOMDocument $doc, DOMElement $fieldsynopsisElement): void
+ {
+ if ($this->flags & Class_::MODIFIER_PUBLIC) {
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+ $fieldsynopsisElement->appendChild($doc->createElement("modifier", "public"));
+ } elseif ($this->flags & Class_::MODIFIER_PROTECTED) {
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+ $fieldsynopsisElement->appendChild($doc->createElement("modifier", "protected"));
+ } elseif ($this->flags & Class_::MODIFIER_PRIVATE) {
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+ $fieldsynopsisElement->appendChild($doc->createElement("modifier", "private"));
+ }
+ }
+
+ /**
+ * @param array<int, string[]> $flags
+ * @return array<int, string[]>
+ */
+ protected function addFlagForVersionsAbove(array $flags, string $flag, int $minimumVersionId): array
+ {
+ $write = false;
+
+ foreach ($flags as $version => $versionFlags) {
+ if ($version === $minimumVersionId || $write === true) {
+ $flags[$version][] = $flag;
+ $write = true;
+ }
+ }
+
+ return $flags;
+ }
+}
+
+class ConstInfo extends VariableLike
+{
+ public ConstOrClassConstName $name;
+ public Expr $value;
+ public bool $isDeprecated;
+ public ?string $valueString;
+ public ?string $cond;
+ public ?string $cValue;
+
+ public function __construct(
+ ConstOrClassConstName $name,
+ int $flags,
+ Expr $value,
+ ?string $valueString,
+ ?Type $phpDocType,
+ bool $isDeprecated,
+ ?string $cond,
+ ?string $cValue,
+ ?string $link,
+ ?int $phpVersionIdMinimumCompatibility
+ ) {
+ $this->name = $name;
+ $this->value = $value;
+ $this->valueString = $valueString;
+ $this->isDeprecated = $isDeprecated;
+ $this->cond = $cond;
+ $this->cValue = $cValue;
+ parent::__construct($flags, $phpDocType, $link, $phpVersionIdMinimumCompatibility);
+ }
+
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ public function getValue(iterable $allConstInfos): EvaluatedValue
+ {
+ return EvaluatedValue::createFromExpression(
+ $this->value,
+ $this->phpDocType->tryToSimpleType(),
+ $this->cValue,
+ $allConstInfos
+ );
+ }
+
+ protected function getVariableTypeName(): string
+ {
+ return "constant";
+ }
+
+ protected function getVariableLikeName(): string
+ {
+ return $this->name->const;
+ }
+
+ protected function getVariableTypeCode(): string
+ {
+ return "const";
+ }
+
+ protected function getFieldSynopsisDefaultLinkend(): string
+ {
+ $className = str_replace(["\\", "_"], ["-", "-"], $this->name->class->toLowerString());
+
+ return "$className.constants." . strtolower(str_replace("_", "-", $this->name->const));
+ }
+
+ protected function getFieldSynopsisName(): string
+ {
+ return $this->name->__toString();
+ }
+
+ protected function addTypeToFieldSynopsis(DOMDocument $doc, DOMElement $fieldsynopsisElement): void
+ {
+ if ($this->phpDocType) {
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+ $fieldsynopsisElement->appendChild($this->phpDocType->getTypeForDoc($doc));
+ }
+ }
+
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ protected function getFieldSynopsisValueString(iterable $allConstInfos): ?string
+ {
+ $value = EvaluatedValue::createFromExpression($this->value, null, $this->cValue, $allConstInfos);
+ if ($value->isUnknownConstValue) {
+ return null;
+ }
+
+ if ($value->originatingConst) {
+ return $value->originatingConst->getFieldSynopsisValueString($allConstInfos);
+ }
+
+ return $this->valueString;
+ }
+
+ public function discardInfoForOldPhpVersions(): void {
+ $this->flags &= ~Class_::MODIFIER_FINAL;
+ $this->isDeprecated = false;
+ }
+
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ public function getDeclaration(iterable $allConstInfos): string
+ {
+ $type = $this->phpDocType->tryToSimpleType();
+ if ($type === null || !$type->isBuiltin) {
+ throw new Exception("Constant " . $this->name->__toString() . " must have a simple built-in type");
+ }
+
+ $value = EvaluatedValue::createFromExpression($this->value, $type, $this->cValue, $allConstInfos);
+ if ($value->isUnknownConstValue && !$value->cConstValue) {
+ throw new Exception("Constant " . $this->name->__toString() . " must have a @cvalue annotation");
+ }
+
+ $code = "";
+
+ if ($this->cond) {
+ $code .= "#if {$this->cond}\n";
+ }
+
+ if ($this->name->isClassConst()) {
+ $code .= $this->getClassConstDeclaration($value, $allConstInfos);
+ } else {
+ $code .= $this->getGlobalConstDeclaration($value, $allConstInfos);
+ }
+ $code .= $this->getValueAssertion($value);
+
+ if ($this->cond) {
+ $code .= "#endif\n";
+ }
+
+ return $code;
+ }
+
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ private function getGlobalConstDeclaration(EvaluatedValue $value, iterable $allConstInfos): string
+ {
+ $constName = str_replace('\\', '\\\\', $this->name->__toString());
+ $constValue = $value->value;
+ $cConstValue = $value->getCConstValue($allConstInfos);
+
+ $flags = "CONST_PERSISTENT";
+ if ($this->phpVersionIdMinimumCompatibility !== null && $this->phpVersionIdMinimumCompatibility < 80000) {
+ $flags .= " | CONST_CS";
+ }
+
+ if ($this->isDeprecated) {
+ $flags .= " | CONST_DEPRECATED";
+ }
+ if ($value->type->isNull()) {
+ return "\tREGISTER_NULL_CONSTANT(\"$constName\", $flags);\n";
+ }
+
+ if ($value->type->isBool()) {
+ return "\tREGISTER_BOOL_CONSTANT(\"$constName\", " . ($cConstValue ?: ($constValue ? "true" : "false")) . ", $flags);\n";
+ }
+
+ if ($value->type->isInt()) {
+ return "\tREGISTER_LONG_CONSTANT(\"$constName\", " . ($cConstValue ?: (int) $constValue) . ", $flags);\n";
+ }
+
+ if ($value->type->isFloat()) {
+ return "\tREGISTER_DOUBLE_CONSTANT(\"$constName\", " . ($cConstValue ?: (float) $constValue) . ", $flags);\n";
+ }
+
+ if ($value->type->isString()) {
+ return "\tREGISTER_STRING_CONSTANT(\"$constName\", " . ($cConstValue ?: '"' . addslashes($constValue) . '"') . ", $flags);\n";
+ }
+
+ throw new Exception("Unimplemented constant type");}
+
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ private function getClassConstDeclaration(EvaluatedValue $value, iterable $allConstInfos): string
+ {
+ $constName = $this->getVariableLikeName();
+
+ $zvalCode = $value->initializeZval("const_{$constName}_value", $allConstInfos);
+
+ $code = "\n" . $zvalCode;
+
+ $code .= "\tzend_string *const_{$constName}_name = zend_string_init_interned(\"$constName\", sizeof(\"$constName\") - 1, 1);\n";
+ $nameCode = "const_{$constName}_name";
+
+ $template = "\tzend_declare_class_constant_ex(class_entry, $nameCode, &const_{$constName}_value, %s, NULL);\n";
+ $flagsCode = generateVersionDependentFlagCode(
+ $template,
+ $this->getFlagsByPhpVersion(),
+ $this->phpVersionIdMinimumCompatibility
+ );
+ $code .= implode("", $flagsCode);
+ $code .= "\tzend_string_release(const_{$constName}_name);\n";
+
+ return $code;
+ }
+
+ private function getValueAssertion(EvaluatedValue $value): string
+ {
+ if ($value->isUnknownConstValue || $value->originatingConst || $value->cConstValue === null) {
+ return "";
+ }
+
+ $cConstValue = $value->cConstValue;
+ $constValue = $value->value;
+
+ if ($value->type->isNull()) {
+ return "\tZEND_ASSERT($cConstValue == NULL);\n";
+ }
+
+ if ($value->type->isBool()) {
+ $cValue = $constValue ? "true" : "false";
+ return "\tZEND_ASSERT($cConstValue == $cValue);\n";
+ }
+
+ if ($value->type->isInt()) {
+ $cValue = (int) $constValue;
+ return "\tZEND_ASSERT($cConstValue == $cValue);\n";
+ }
+
+ if ($value->type->isFloat()) {
+ $cValue = (float) $constValue;
+ return "\tZEND_ASSERT($cConstValue == $cValue);\n";
+ }
+
+ if ($value->type->isString()) {
+ $cValue = '"' . addslashes($constValue) . '"';
+ return "\tZEND_ASSERT(strcmp($cConstValue, $cValue) == 0);\n";
+ }
+
+ throw new Exception("Unimplemented constant type");
+ }
+
+ /**
+ * @return array<int, string[]>
+ */
+ protected function getFlagsByPhpVersion(): array
+ {
+ $flags = parent::getFlagsByPhpVersion();
+
+ if ($this->isDeprecated) {
+ $flags = $this->addFlagForVersionsAbove($flags, "ZEND_ACC_DEPRECATED", PHP_80_VERSION_ID);
+ }
+
+ if ($this->flags & Class_::MODIFIER_FINAL) {
+ $flags = $this->addFlagForVersionsAbove($flags, "ZEND_ACC_FINAL", PHP_81_VERSION_ID);
+ }
+
+ return $flags;
+ }
+
+ protected function addModifiersToFieldSynopsis(DOMDocument $doc, DOMElement $fieldsynopsisElement): void
+ {
+ parent::addModifiersToFieldSynopsis($doc, $fieldsynopsisElement);
+
+ if ($this->flags & Class_::MODIFIER_FINAL) {
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+ $fieldsynopsisElement->appendChild($doc->createElement("modifier", "final"));
+ }
+
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+ $fieldsynopsisElement->appendChild($doc->createElement("modifier", "const"));
+ }
+}
+
+class PropertyInfo extends VariableLike
+{
+ public PropertyName $name;
+ public ?Type $type;
+ public ?Expr $defaultValue;
+ public ?string $defaultValueString;
+ public bool $isDocReadonly;
+
+ public function __construct(
PropertyName $name,
int $flags,
?Type $type,
@@ -1409,39 +2119,75 @@
?Expr $defaultValue,
?string $defaultValueString,
bool $isDocReadonly,
- ?string $link
+ ?string $link,
+ ?int $phpVersionIdMinimumCompatibility
) {
$this->name = $name;
- $this->flags = $flags;
$this->type = $type;
- $this->phpDocType = $phpDocType;
$this->defaultValue = $defaultValue;
$this->defaultValueString = $defaultValueString;
$this->isDocReadonly = $isDocReadonly;
- $this->link = $link;
+ parent::__construct($flags, $phpDocType, $link, $phpVersionIdMinimumCompatibility);
}
+ protected function getVariableTypeCode(): string
+ {
+ return "property";
+ }
+
+ protected function getVariableTypeName(): string
+ {
+ return "property";
+ }
+
+ protected function getVariableLikeName(): string
+ {
+ return $this->name->property;
+ }
+
+ protected function getFieldSynopsisDefaultLinkend(): string
+ {
+ $className = str_replace(["\\", "_"], ["-", "-"], $this->name->class->toLowerString());
+
+ return "$className.props." . strtolower(str_replace("_", "-", $this->name->property));
+ }
+
+ protected function getFieldSynopsisName(): string
+ {
+ return $this->name->property;
+ }
+
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ protected function getFieldSynopsisValueString(iterable $allConstInfos): ?string
+ {
+ return $this->defaultValueString;
+ }
+
public function discardInfoForOldPhpVersions(): void {
$this->type = null;
+ $this->flags &= ~Class_::MODIFIER_READONLY;
}
- public function getDeclaration(): string {
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ public function getDeclaration(iterable $allConstInfos): string {
$code = "\n";
$propertyName = $this->name->property;
- $defaultValueConstant = false;
if ($this->defaultValue === null) {
- $defaultValue = null;
+ $defaultValue = EvaluatedValue::null();
} else {
- $defaultValue = $this->evaluateDefaultValue($defaultValueConstant);
+ $defaultValue = EvaluatedValue::createFromExpression($this->defaultValue, null, null, $allConstInfos);
+ if ($defaultValue->isUnknownConstValue || ($defaultValue->originatingConst && $defaultValue->getCConstValue($allConstInfos) === null)) {
+ echo "Skipping code generation for property $this->name, because it has an unknown constant default value\n";
+ return "";
+ }
}
- if ($defaultValueConstant) {
- echo "Skipping code generation for property $this->name, because it has a constant default value\n";
- return "";
- }
-
$typeCode = "";
if ($this->type) {
$arginfoType = $this->type->toArginfoType();
@@ -1464,12 +2210,16 @@
$typeMaskCode = $this->type->toArginfoType()->toTypeMask();
- $code .= "\tzend_type property_{$propertyName}_type = ZEND_TYPE_INIT_UNION(property_{$propertyName}_type_list, $typeMaskCode);\n";
+ if ($this->type->isIntersection) {
+ $code .= "\tzend_type property_{$propertyName}_type = ZEND_TYPE_INIT_INTERSECTION(property_{$propertyName}_type_list, $typeMaskCode);\n";
+ } else {
+ $code .= "\tzend_type property_{$propertyName}_type = ZEND_TYPE_INIT_UNION(property_{$propertyName}_type_list, $typeMaskCode);\n";
+ }
$typeCode = "property_{$propertyName}_type";
} else {
$escapedClassName = $arginfoType->classTypes[0]->toEscapedName();
$varEscapedClassName = $arginfoType->classTypes[0]->toVarEscapedName();
- $code .= "\tzend_string *property_{$propertyName}_class_{$varEscapedClassName} = zend_string_init(\"{$escapedClassName}\", sizeof(\"${escapedClassName}\")-1, 1);\n";
+ $code .= "\tzend_string *property_{$propertyName}_class_{$varEscapedClassName} = zend_string_init(\"{$escapedClassName}\", sizeof(\"{$escapedClassName}\")-1, 1);\n";
$typeCode = "(zend_type) ZEND_TYPE_INIT_CLASS(property_{$propertyName}_class_{$varEscapedClassName}, 0, " . $arginfoType->toTypeMask() . ")";
}
@@ -1482,7 +2232,7 @@
if ($this->defaultValue === null && $this->type !== null) {
$code .= "\tzval $zvalName;\n\tZVAL_UNDEF(&$zvalName);\n";
} else {
- $code .= initializeZval($zvalName, $defaultValue);
+ $code .= $defaultValue->initializeZval($zvalName, $allConstInfos);
}
$code .= "\tzend_string *property_{$propertyName}_name = zend_string_init(\"$propertyName\", sizeof(\"$propertyName\") - 1, 1);\n";
@@ -1489,111 +2239,65 @@
$nameCode = "property_{$propertyName}_name";
if ($this->type !== null) {
- $code .= "\tzend_declare_typed_property(class_entry, $nameCode, &$zvalName, " . $this->getFlagsAsString() . ", NULL, $typeCode);\n";
+ $template = "\tzend_declare_typed_property(class_entry, $nameCode, &$zvalName, %s, NULL, $typeCode);\n";
} else {
- $code .= "\tzend_declare_property_ex(class_entry, $nameCode, &$zvalName, " . $this->getFlagsAsString() . ", NULL);\n";
+ $template = "\tzend_declare_property_ex(class_entry, $nameCode, &$zvalName, %s, NULL);\n";
}
+ $flagsCode = generateVersionDependentFlagCode(
+ $template,
+ $this->getFlagsByPhpVersion(),
+ $this->phpVersionIdMinimumCompatibility
+ );
+ $code .= implode("", $flagsCode);
+
$code .= "\tzend_string_release(property_{$propertyName}_name);\n";
return $code;
}
- private function getFlagsAsString(): string
+ /**
+ * @return array<int, string[]>
+ */
+ protected function getFlagsByPhpVersion(): array
{
- $flags = "ZEND_ACC_PUBLIC";
- if ($this->flags & Class_::MODIFIER_PROTECTED) {
- $flags = "ZEND_ACC_PROTECTED";
- } elseif ($this->flags & Class_::MODIFIER_PRIVATE) {
- $flags = "ZEND_ACC_PRIVATE";
- }
+ $flags = parent::getFlagsByPhpVersion();
if ($this->flags & Class_::MODIFIER_STATIC) {
- $flags .= "|ZEND_ACC_STATIC";
+ $flags = $this->addFlagForVersionsAbove($flags, "ZEND_ACC_STATIC", PHP_70_VERSION_ID);
}
if ($this->flags & Class_::MODIFIER_READONLY) {
- $flags .= "|ZEND_ACC_READONLY";
+ $flags = $this->addFlagForVersionsAbove($flags, "ZEND_ACC_READONLY", PHP_81_VERSION_ID);
}
return $flags;
}
- public function getFieldSynopsisElement(DOMDocument $doc): DOMElement
+ protected function addModifiersToFieldSynopsis(DOMDocument $doc, DOMElement $fieldsynopsisElement): void
{
- $fieldsynopsisElement = $doc->createElement("fieldsynopsis");
+ parent::addModifiersToFieldSynopsis($doc, $fieldsynopsisElement);
- if ($this->flags & Class_::MODIFIER_PUBLIC) {
- $fieldsynopsisElement->appendChild(new DOMText("\n "));
- $fieldsynopsisElement->appendChild($doc->createElement("modifier", "public"));
- } elseif ($this->flags & Class_::MODIFIER_PROTECTED) {
- $fieldsynopsisElement->appendChild(new DOMText("\n "));
- $fieldsynopsisElement->appendChild($doc->createElement("modifier", "protected"));
- } elseif ($this->flags & Class_::MODIFIER_PRIVATE) {
- $fieldsynopsisElement->appendChild(new DOMText("\n "));
- $fieldsynopsisElement->appendChild($doc->createElement("modifier", "private"));
- }
-
if ($this->flags & Class_::MODIFIER_STATIC) {
$fieldsynopsisElement->appendChild(new DOMText("\n "));
$fieldsynopsisElement->appendChild($doc->createElement("modifier", "static"));
- } elseif ($this->flags & Class_::MODIFIER_READONLY || $this->isDocReadonly) {
- $fieldsynopsisElement->appendChild(new DOMText("\n "));
- $fieldsynopsisElement->appendChild($doc->createElement("modifier", "readonly"));
}
- $fieldsynopsisElement->appendChild(new DOMText("\n "));
- $fieldsynopsisElement->appendChild($this->getFieldSynopsisType()->getTypeForDoc($doc));
-
- $className = str_replace(["\\", "_"], ["-", "-"], $this->name->class->toLowerString());
- $varnameElement = $doc->createElement("varname", $this->name->property);
- if ($this->link) {
- $varnameElement->setAttribute("linkend", $this->link);
- } else {
- $varnameElement->setAttribute("linkend", "$className.props." . strtolower(str_replace("_", "-", $this->name->property)));
- }
- $fieldsynopsisElement->appendChild(new DOMText("\n "));
- $fieldsynopsisElement->appendChild($varnameElement);
-
- if ($this->defaultValueString) {
+ if ($this->flags & Class_::MODIFIER_READONLY || $this->isDocReadonly) {
$fieldsynopsisElement->appendChild(new DOMText("\n "));
- $initializerElement = $doc->createElement("initializer", $this->defaultValueString);
- $fieldsynopsisElement->appendChild($initializerElement);
+ $fieldsynopsisElement->appendChild($doc->createElement("modifier", "readonly"));
}
-
- $fieldsynopsisElement->appendChild(new DOMText("\n "));
-
- return $fieldsynopsisElement;
}
- private function getFieldSynopsisType(): Type {
- if ($this->phpDocType) {
- return $this->phpDocType;
- }
+ protected function addTypeToFieldSynopsis(DOMDocument $doc, DOMElement $fieldsynopsisElement): void
+ {
+ $type = $this->phpDocType ?? $this->type;
- if ($this->type) {
- return $this->type;
+ if ($type) {
+ $fieldsynopsisElement->appendChild(new DOMText("\n "));
+ $fieldsynopsisElement->appendChild($type->getTypeForDoc($doc));
}
-
- throw new Exception("A property must have a type");
}
- /** @return mixed */
- private function evaluateDefaultValue(bool &$defaultValueConstant)
- {
- $evaluator = new ConstExprEvaluator(
- function (Expr $expr) use (&$defaultValueConstant) {
- if ($expr instanceof Expr\ConstFetch) {
- $defaultValueConstant = true;
- return null;
- }
-
- throw new Exception("Property $this->name has an unsupported default value");
- }
- );
-
- return $evaluator->evaluateDirectly($this->defaultValue);
- }
-
public function __clone()
{
if ($this->type) {
@@ -1603,10 +2307,8 @@
}
class EnumCaseInfo {
- /** @var string */
- public $name;
- /** @var Expr|null */
- public $value;
+ public string $name;
+ public ?Expr $value;
public function __construct(string $name, ?Expr $value) {
$this->name = $name;
@@ -1613,53 +2315,96 @@
$this->value = $value;
}
- public function getDeclaration(): string {
+ /**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+ public function getDeclaration(iterable $allConstInfos): string {
$escapedName = addslashes($this->name);
if ($this->value === null) {
$code = "\n\tzend_enum_add_case_cstr(class_entry, \"$escapedName\", NULL);\n";
} else {
- $evaluator = new ConstExprEvaluator(function (Expr $expr) {
- throw new Exception("Enum case $this->name has an unsupported value");
- });
+ $value = EvaluatedValue::createFromExpression($this->value, null, null, $allConstInfos);
+
$zvalName = "enum_case_{$escapedName}_value";
- $code = "\n" . initializeZval($zvalName, $evaluator->evaluateDirectly($this->value));
+ $code = "\n" . $value->initializeZval($zvalName, $allConstInfos);
$code .= "\tzend_enum_add_case_cstr(class_entry, \"$escapedName\", &$zvalName);\n";
}
+
return $code;
}
}
+class AttributeInfo {
+ public string $class;
+ /** @var \PhpParser\Node\Arg[] */
+ public array $args;
+
+ /** @param \PhpParser\Node\Arg[] $args */
+ public function __construct(string $class, array $args) {
+ $this->class = $class;
+ $this->args = $args;
+ }
+
+ /** @param iterable<ConstInfo> $allConstInfos */
+ public function generateCode(string $invocation, string $nameSuffix, iterable $allConstInfos): string {
+ /* see ZEND_KNOWN_STRINGS in Zend/strings.h */
+ static $knowns = [
+ "SensitiveParameter" => "ZEND_STR_SENSITIVEPARAMETER",
+ ];
+ $code = "\n";
+ $escapedAttributeName = strtr($this->class, '\\', '_');
+ if (isset($knowns[$escapedAttributeName])) {
+ $code .= "\t" . ($this->args ? "zend_attribute *attribute_{$escapedAttributeName}_$nameSuffix = " : "") . "$invocation, ZSTR_KNOWN({$knowns[$escapedAttributeName]}), " . count($this->args) . ");\n";
+ } else {
+ $code .= "\tzend_string *attribute_name_{$escapedAttributeName}_$nameSuffix = zend_string_init_interned(\"" . addcslashes($this->class, "\\") . "\", sizeof(\"" . addcslashes($this->class, "\\") . "\") - 1, 1);\n";
+ $code .= "\t" . ($this->args ? "zend_attribute *attribute_{$escapedAttributeName}_$nameSuffix = " : "") . "$invocation, attribute_name_{$escapedAttributeName}_$nameSuffix, " . count($this->args) . ");\n";
+ $code .= "\tzend_string_release(attribute_name_{$escapedAttributeName}_$nameSuffix);\n";
+ }
+ foreach ($this->args as $i => $arg) {
+ $value = EvaluatedValue::createFromExpression($arg->value, null, null, $allConstInfos);
+ $zvalName = "attribute_{$escapedAttributeName}_{$nameSuffix}_arg$i";
+ $code .= $value->initializeZval($zvalName, $allConstInfos);
+ $code .= "\tZVAL_COPY_VALUE(&attribute_{$escapedAttributeName}_{$nameSuffix}->args[$i].value, &$zvalName);\n";
+ if ($arg->name) {
+ $code .= "\tattribute_{$escapedAttributeName}_{$nameSuffix}->args[$i].name = zend_string_init(\"{$arg->name->name}\", sizeof(\"{$arg->name->name}\") - 1, 1);\n";
+ }
+ }
+ return $code;
+ }
+}
+
class ClassInfo {
- /** @var Name */
- public $name;
- /** @var int */
- public $flags;
- /** @var string */
- public $type;
- /** @var string|null */
- public $alias;
- /** @var SimpleType|null */
- public $enumBackingType;
- /** @var bool */
- public $isDeprecated;
- /** @var bool */
- public $isStrictProperties;
- /** @var bool */
- public $isNotSerializable;
+ public Name $name;
+ public int $flags;
+ public string $type;
+ public ?string $alias;
+ public ?SimpleType $enumBackingType;
+ public bool $isDeprecated;
+ public bool $isStrictProperties;
+ /** @var AttributeInfo[] */
+ public array $attributes;
+ public bool $isNotSerializable;
/** @var Name[] */
- public $extends;
+ public array $extends;
/** @var Name[] */
- public $implements;
+ public array $implements;
+ /** @var ConstInfo[] */
+ public array $constInfos;
/** @var PropertyInfo[] */
- public $propertyInfos;
+ public array $propertyInfos;
/** @var FuncInfo[] */
- public $funcInfos;
+ public array $funcInfos;
/** @var EnumCaseInfo[] */
- public $enumCaseInfos;
+ public array $enumCaseInfos;
+ public ?string $cond;
+ public ?int $phpVersionIdMinimumCompatibility;
+ public bool $isUndocumentable;
/**
+ * @param AttributeInfo[] $attributes
* @param Name[] $extends
* @param Name[] $implements
+ * @param ConstInfo[] $constInfos
* @param PropertyInfo[] $propertyInfos
* @param FuncInfo[] $funcInfos
* @param EnumCaseInfo[] $enumCaseInfos
@@ -1672,12 +2417,17 @@
?SimpleType $enumBackingType,
bool $isDeprecated,
bool $isStrictProperties,
+ array $attributes,
bool $isNotSerializable,
array $extends,
array $implements,
+ array $constInfos,
array $propertyInfos,
array $funcInfos,
- array $enumCaseInfos
+ array $enumCaseInfos,
+ ?string $cond,
+ ?int $minimumPhpVersionIdCompatibility,
+ bool $isUndocumentable
) {
$this->name = $name;
$this->flags = $flags;
@@ -1686,15 +2436,23 @@
$this->enumBackingType = $enumBackingType;
$this->isDeprecated = $isDeprecated;
$this->isStrictProperties = $isStrictProperties;
+ $this->attributes = $attributes;
$this->isNotSerializable = $isNotSerializable;
$this->extends = $extends;
$this->implements = $implements;
+ $this->constInfos = $constInfos;
$this->propertyInfos = $propertyInfos;
$this->funcInfos = $funcInfos;
$this->enumCaseInfos = $enumCaseInfos;
+ $this->cond = $cond;
+ $this->phpVersionIdMinimumCompatibility = $minimumPhpVersionIdCompatibility;
+ $this->isUndocumentable = $isUndocumentable;
}
- public function getRegistration(): string
+ /**
+ * @param ConstInfo[] $allConstInfos
+ */
+ public function getRegistration(iterable $allConstInfos): string
{
$params = [];
foreach ($this->extends as $extends) {
@@ -1706,10 +2464,23 @@
$escapedName = implode("_", $this->name->parts);
- $code = "static zend_class_entry *register_class_$escapedName(" . (empty($params) ? "void" : implode(", ", $params)) . ")\n";
+ $code = '';
+ $php81MinimumCompatibility = $this->phpVersionIdMinimumCompatibility === null || $this->phpVersionIdMinimumCompatibility >= PHP_81_VERSION_ID;
+ $php82MinimumCompatibility = $this->phpVersionIdMinimumCompatibility === null || $this->phpVersionIdMinimumCompatibility >= PHP_82_VERSION_ID;
+
+ if ($this->type === "enum" && !$php81MinimumCompatibility) {
+ $code .= "#if (PHP_VERSION_ID >= " . PHP_81_VERSION_ID . ")\n";
+ }
+
+ if ($this->cond) {
+ $code .= "#if {$this->cond}\n";
+ }
+
+ $code .= "static zend_class_entry *register_class_$escapedName(" . (empty($params) ? "void" : implode(", ", $params)) . ")\n";
+
$code .= "{\n";
- if ($this->type == "enum") {
+ if ($this->type === "enum") {
$name = addslashes((string) $this->name);
$backingType = $this->enumBackingType
? $this->enumBackingType->toTypeCode() : "IS_UNDEF";
@@ -1732,9 +2503,8 @@
}
}
- if ($this->getFlagsAsString()) {
- $code .= "\tclass_entry->ce_flags |= " . $this->getFlagsAsString() . ";\n";
- }
+ $flagCodes = generateVersionDependentFlagCode("\tclass_entry->ce_flags |= %s;\n", $this->getFlagsByPhpVersion(), $this->phpVersionIdMinimumCompatibility);
+ $code .= implode("", $flagCodes);
$implements = array_map(
function (Name $item) {
@@ -1751,60 +2521,125 @@
$code .= "\tzend_register_class_alias(\"" . str_replace("\\", "\\\\", $this->alias) . "\", class_entry);\n";
}
+ foreach ($this->constInfos as $const) {
+ $code .= $const->getDeclaration($allConstInfos);
+ }
+
foreach ($this->enumCaseInfos as $enumCase) {
- $code .= $enumCase->getDeclaration();
+ $code .= $enumCase->getDeclaration($allConstInfos);
}
foreach ($this->propertyInfos as $property) {
- $code .= $property->getDeclaration();
+ $code .= $property->getDeclaration($allConstInfos);
}
+ if (!empty($this->attributes)) {
+ if (!$php82MinimumCompatibility) {
+ $code .= "\n#if (PHP_VERSION_ID >= " . PHP_82_VERSION_ID . ")";
+ }
+
+ foreach ($this->attributes as $attribute) {
+ $code .= $attribute->generateCode("zend_add_class_attribute(class_entry", "class_$escapedName", $allConstInfos);
+ }
+
+ if (!$php82MinimumCompatibility) {
+ $code .= "#endif\n";
+ }
+ }
+
+ if ($attributeInitializationCode = generateAttributeInitialization($this->funcInfos, $allConstInfos, $this->cond)) {
+ if (!$php82MinimumCompatibility) {
+ $code .= "#if (PHP_VERSION_ID >= " . PHP_82_VERSION_ID . ")\n";
+ }
+
+ $code .= "\n" . $attributeInitializationCode;
+
+ if (!$php82MinimumCompatibility) {
+ $code .= "#endif\n";
+ }
+ }
+
$code .= "\n\treturn class_entry;\n";
$code .= "}\n";
+ if ($this->cond) {
+ $code .= "#endif\n";
+ }
+
+ if ($this->type === "enum" && !$php81MinimumCompatibility) {
+ $code .= "#endif\n";
+ }
+
return $code;
}
- private function getFlagsAsString(): string
+ /**
+ * @return array<int, string[]>
+ */
+ private function getFlagsByPhpVersion(): array
{
- $flags = [];
+ $php70Flags = [];
if ($this->type === "trait") {
- $flags[] = "ZEND_ACC_TRAIT";
+ $php70Flags[] = "ZEND_ACC_TRAIT";
}
if ($this->flags & Class_::MODIFIER_FINAL) {
- $flags[] = "ZEND_ACC_FINAL";
+ $php70Flags[] = "ZEND_ACC_FINAL";
}
if ($this->flags & Class_::MODIFIER_ABSTRACT) {
- $flags[] = "ZEND_ACC_ABSTRACT";
+ $php70Flags[] = "ZEND_ACC_ABSTRACT";
}
if ($this->isDeprecated) {
- $flags[] = "ZEND_ACC_DEPRECATED";
+ $php70Flags[] = "ZEND_ACC_DEPRECATED";
}
+ $php80Flags = $php70Flags;
+
if ($this->isStrictProperties) {
- $flags[] = "ZEND_ACC_NO_DYNAMIC_PROPERTIES";
+ $php80Flags[] = "ZEND_ACC_NO_DYNAMIC_PROPERTIES";
}
+ $php81Flags = $php80Flags;
+
if ($this->isNotSerializable) {
- $flags[] = "ZEND_ACC_NOT_SERIALIZABLE";
+ $php81Flags[] = "ZEND_ACC_NOT_SERIALIZABLE";
}
- return implode("|", $flags);
+ $php82Flags = $php81Flags;
+
+ if ($this->flags & Class_::MODIFIER_READONLY) {
+ $php82Flags[] = "ZEND_ACC_READONLY_CLASS";
+ }
+
+ foreach ($this->attributes as $attr) {
+ if ($attr->class === "AllowDynamicProperties") {
+ $php82Flags[] = "ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES";
+ break;
+ }
+ }
+
+ return [
+ PHP_70_VERSION_ID => $php70Flags,
+ PHP_80_VERSION_ID => $php80Flags,
+ PHP_81_VERSION_ID => $php81Flags,
+ PHP_82_VERSION_ID => $php82Flags,
+ ];
}
/**
* @param array<string, ClassInfo> $classMap
+ * @param iterable<ConstInfo> $allConstInfos
+ * @param iterable<ConstInfo> $allConstInfo
*/
- public function getClassSynopsisDocument(array $classMap): ?string {
+ public function getClassSynopsisDocument(array $classMap, iterable $allConstInfos): ?string {
$doc = new DOMDocument();
$doc->formatOutput = true;
- $classSynopsis = $this->getClassSynopsisElement($doc, $classMap);
+ $classSynopsis = $this->getClassSynopsisElement($doc, $classMap, $allConstInfos);
if (!$classSynopsis) {
return null;
}
@@ -1815,9 +2650,10 @@
}
/**
- * @param ClassInfo[] $classMap
+ * @param array<string, ClassInfo> $classMap
+ * @param iterable<ConstInfo> $allConstInfos
*/
- public function getClassSynopsisElement(DOMDocument $doc, array $classMap): ?DOMElement {
+ public function getClassSynopsisElement(DOMDocument $doc, array $classMap, iterable $allConstInfos): ?DOMElement {
$classSynopsis = $doc->createElement("classsynopsis");
$classSynopsis->appendChild(new DOMText("\n "));
@@ -1876,44 +2712,63 @@
}
$classSynopsisInfo->appendChild(new DOMText("\n "));
- /** @var Name[] $parentsWithInheritedProperties */
+ /** @var array<string, Name> $parentsWithInheritedConstants */
+ $parentsWithInheritedConstants = [];
+ /** @var array<string, Name> $parentsWithInheritedProperties */
$parentsWithInheritedProperties = [];
- /** @var Name[] $parentsWithInheritedMethods */
+ /** @var array<int, array{name: Name, types: int[]}> $parentsWithInheritedMethods */
$parentsWithInheritedMethods = [];
- $this->collectInheritedMembers($parentsWithInheritedProperties, $parentsWithInheritedMethods, $classMap);
+ $this->collectInheritedMembers(
+ $parentsWithInheritedConstants,
+ $parentsWithInheritedProperties,
+ $parentsWithInheritedMethods,
+ $this->hasConstructor(),
+ $classMap
+ );
- if (!empty($this->propertyInfos)) {
+ $this->appendInheritedMemberSectionToClassSynopsis(
+ $doc,
+ $classSynopsis,
+ $parentsWithInheritedConstants,
+ "&Constants;",
+ "&InheritedConstants;"
+ );
+
+ if (!empty($this->constInfos)) {
$classSynopsis->appendChild(new DOMText("\n\n "));
- $classSynopsisInfo = $doc->createElement("classsynopsisinfo", "&Properties;");
+ $classSynopsisInfo = $doc->createElement("classsynopsisinfo", "&Constants;");
$classSynopsisInfo->setAttribute("role", "comment");
$classSynopsis->appendChild($classSynopsisInfo);
- foreach ($this->propertyInfos as $propertyInfo) {
+ foreach ($this->constInfos as $constInfo) {
$classSynopsis->appendChild(new DOMText("\n "));
- $fieldSynopsisElement = $propertyInfo->getFieldSynopsisElement($doc);
+ $fieldSynopsisElement = $constInfo->getFieldSynopsisElement($doc, $allConstInfos);
$classSynopsis->appendChild($fieldSynopsisElement);
}
}
- if (!empty($parentsWithInheritedProperties)) {
+ if (!empty($this->propertyInfos)) {
$classSynopsis->appendChild(new DOMText("\n\n "));
- $classSynopsisInfo = $doc->createElement("classsynopsisinfo", "&InheritedProperties;");
+ $classSynopsisInfo = $doc->createElement("classsynopsisinfo", "&Properties;");
$classSynopsisInfo->setAttribute("role", "comment");
$classSynopsis->appendChild($classSynopsisInfo);
- foreach ($parentsWithInheritedProperties as $parent) {
+ foreach ($this->propertyInfos as $propertyInfo) {
$classSynopsis->appendChild(new DOMText("\n "));
- $parentReference = self::getClassSynopsisReference($parent);
-
- $includeElement = $this->createIncludeElement(
- $doc,
- "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$parentReference')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))"
- );
- $classSynopsis->appendChild($includeElement);
+ $fieldSynopsisElement = $propertyInfo->getFieldSynopsisElement($doc, $allConstInfos);
+ $classSynopsis->appendChild($fieldSynopsisElement);
}
}
+ $this->appendInheritedMemberSectionToClassSynopsis(
+ $doc,
+ $classSynopsis,
+ $parentsWithInheritedProperties,
+ "&Properties;",
+ "&InheritedProperties;"
+ );
+
if (!empty($this->funcInfos)) {
$classSynopsis->appendChild(new DOMText("\n\n "));
$classSynopsisInfo = $doc->createElement("classsynopsisinfo", "&Methods;");
@@ -1921,12 +2776,13 @@
$classSynopsis->appendChild($classSynopsisInfo);
$classReference = self::getClassSynopsisReference($this->name);
+ $escapedName = addslashes($this->name->__toString());
if ($this->hasConstructor()) {
$classSynopsis->appendChild(new DOMText("\n "));
$includeElement = $this->createIncludeElement(
$doc,
- "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$classReference')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[not(@role='procedural')])"
+ "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$classReference')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='$escapedName'])"
);
$classSynopsis->appendChild($includeElement);
}
@@ -1935,7 +2791,7 @@
$classSynopsis->appendChild(new DOMText("\n "));
$includeElement = $this->createIncludeElement(
$doc,
- "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$classReference')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])"
+ "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$classReference')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='$escapedName'])"
);
$classSynopsis->appendChild($includeElement);
}
@@ -1944,7 +2800,7 @@
$classSynopsis->appendChild(new DOMText("\n "));
$includeElement = $this->createIncludeElement(
$doc,
- "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$classReference')/db:refentry/db:refsect1[@role='description']/descendant::db:destructorsynopsis[not(@role='procedural')])"
+ "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$classReference')/db:refentry/db:refsect1[@role='description']/descendant::db:destructorsynopsis[@role='$escapedName'])"
);
$classSynopsis->appendChild($includeElement);
}
@@ -1957,13 +2813,21 @@
$classSynopsis->appendChild($classSynopsisInfo);
foreach ($parentsWithInheritedMethods as $parent) {
- $classSynopsis->appendChild(new DOMText("\n "));
- $parentReference = self::getClassSynopsisReference($parent);
- $includeElement = $this->createIncludeElement(
- $doc,
- "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$parentReference')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])"
- );
- $classSynopsis->appendChild($includeElement);
+ $parentName = $parent["name"];
+ $parentMethodsynopsisTypes = $parent["types"];
+
+ $parentReference = self::getClassSynopsisReference($parentName);
+ $escapedParentName = addslashes($parentName->__toString());
+
+ foreach ($parentMethodsynopsisTypes as $parentMethodsynopsisType) {
+ $classSynopsis->appendChild(new DOMText("\n "));
+ $includeElement = $this->createIncludeElement(
+ $doc,
+ "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$parentReference')/db:refentry/db:refsect1[@role='description']/descendant::db:{$parentMethodsynopsisType}[@role='$escapedParentName'])"
+ );
+
+ $classSynopsis->appendChild($includeElement);
+ }
}
}
@@ -2021,28 +2885,79 @@
}
/**
- * @param Name[] $parentsWithInheritedProperties
- * @param Name[] $parentsWithInheritedMethods
+ * @param array<string, Name> $parentsWithInheritedConstants
+ * @param array<string, Name> $parentsWithInheritedProperties
+ * @param array<string, array{name: Name, types: int[]}> $parentsWithInheritedMethods
* @param array<string, ClassInfo> $classMap
*/
- private function collectInheritedMembers(array &$parentsWithInheritedProperties, array &$parentsWithInheritedMethods, array $classMap): void
- {
+ private function collectInheritedMembers(
+ array &$parentsWithInheritedConstants,
+ array &$parentsWithInheritedProperties,
+ array &$parentsWithInheritedMethods,
+ bool $hasConstructor,
+ array $classMap
+ ): void {
foreach ($this->extends as $parent) {
$parentInfo = $classMap[$parent->toString()] ?? null;
+ $parentName = $parent->toString();
+
if (!$parentInfo) {
- throw new Exception("Missing parent class " . $parent->toString());
+ throw new Exception("Missing parent class $parentName");
}
- if (!empty($parentInfo->propertyInfos) && !isset($parentsWithInheritedProperties[$parent->toString()])) {
- $parentsWithInheritedProperties[$parent->toString()] = $parent;
+ if (!empty($parentInfo->constInfos) && !isset($parentsWithInheritedConstants[$parentName])) {
+ $parentsWithInheritedConstants[] = $parent;
}
- if (!isset($parentsWithInheritedMethods[$parent->toString()]) && $parentInfo->hasMethods()) {
- $parentsWithInheritedMethods[$parent->toString()] = $parent;
+ if (!empty($parentInfo->propertyInfos) && !isset($parentsWithInheritedProperties[$parentName])) {
+ $parentsWithInheritedProperties[$parentName] = $parent;
}
- $parentInfo->collectInheritedMembers($parentsWithInheritedProperties, $parentsWithInheritedMethods, $classMap);
+ if (!$hasConstructor && $parentInfo->hasNonPrivateConstructor()) {
+ $parentsWithInheritedMethods[$parentName]["name"] = $parent;
+ $parentsWithInheritedMethods[$parentName]["types"][] = "constructorsynopsis";
+ }
+
+ if ($parentInfo->hasMethods()) {
+ $parentsWithInheritedMethods[$parentName]["name"] = $parent;
+ $parentsWithInheritedMethods[$parentName]["types"][] = "methodsynopsis";
+ }
+
+ if ($parentInfo->hasDestructor()) {
+ $parentsWithInheritedMethods[$parentName]["name"] = $parent;
+ $parentsWithInheritedMethods[$parentName]["types"][] = "destructorsynopsis";
+ }
+
+ $parentInfo->collectInheritedMembers(
+ $parentsWithInheritedConstants,
+ $parentsWithInheritedProperties,
+ $parentsWithInheritedMethods,
+ $hasConstructor,
+ $classMap
+ );
}
+
+ foreach ($this->implements as $parent) {
+ $parentInfo = $classMap[$parent->toString()] ?? null;
+ if (!$parentInfo) {
+ throw new Exception("Missing parent interface " . $parent->toString());
+ }
+
+ if (!empty($parentInfo->constInfos) && !isset($parentsWithInheritedConstants[$parent->toString()])) {
+ $parentsWithInheritedConstants[$parent->toString()] = $parent;
+ }
+
+ $unusedParentsWithInheritedProperties = [];
+ $unusedParentsWithInheritedMethods = [];
+
+ $parentInfo->collectInheritedMembers(
+ $parentsWithInheritedConstants,
+ $unusedParentsWithInheritedProperties,
+ $unusedParentsWithInheritedMethods,
+ $hasConstructor,
+ $classMap
+ );
+ }
}
private function hasConstructor(): bool
@@ -2056,6 +2971,17 @@
return false;
}
+ private function hasNonPrivateConstructor(): bool
+ {
+ foreach ($this->funcInfos as $funcInfo) {
+ if ($funcInfo->name->isConstructor() && !($funcInfo->flags & Class_::MODIFIER_PRIVATE)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
private function hasDestructor(): bool
{
foreach ($this->funcInfos as $funcInfo) {
@@ -2102,21 +3028,48 @@
$this->funcInfos[$key] = clone $funcInfo;
}
}
+
+ /**
+ * @param Name[] $parents
+ */
+ private function appendInheritedMemberSectionToClassSynopsis(DOMDocument $doc, DOMElement $classSynopsis, array $parents, string $label, string $inheritedLabel): void
+ {
+ if (empty($parents)) {
+ return;
+ }
+
+ $classSynopsis->appendChild(new DOMText("\n\n "));
+ $classSynopsisInfo = $doc->createElement("classsynopsisinfo", "$inheritedLabel");
+ $classSynopsisInfo->setAttribute("role", "comment");
+ $classSynopsis->appendChild($classSynopsisInfo);
+
+ foreach ($parents as $parent) {
+ $classSynopsis->appendChild(new DOMText("\n "));
+ $parentReference = self::getClassSynopsisReference($parent);
+
+ $includeElement = $this->createIncludeElement(
+ $doc,
+ "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$parentReference')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='$label']]))"
+ );
+ $classSynopsis->appendChild($includeElement);
+ }
+ }
}
class FileInfo {
+ /** @var string[] */
+ public array $dependencies = [];
+ /** @var ConstInfo[] */
+ public array $constInfos = [];
/** @var FuncInfo[] */
- public $funcInfos = [];
+ public array $funcInfos = [];
/** @var ClassInfo[] */
- public $classInfos = [];
- /** @var bool */
- public $generateFunctionEntries = false;
- /** @var string */
- public $declarationPrefix = "";
- /** @var bool */
- public $generateLegacyArginfo = false;
- /** @var bool */
- public $generateClassEntries = false;
+ public array $classInfos = [];
+ public bool $generateFunctionEntries = false;
+ public string $declarationPrefix = "";
+ public ?int $generateLegacyArginfoForPhpVersionId = null;
+ public bool $generateClassEntries = false;
+ public bool $isUndocumentable = false;
/**
* @return iterable<FuncInfo>
@@ -2129,6 +3082,19 @@
}
/**
+ * @return iterable<ConstInfo>
+ */
+ public function getAllConstInfos(): iterable {
+ $result = $this->constInfos;
+
+ foreach ($this->classInfos as $classInfo) {
+ $result = array_merge($result, $classInfo->constInfos);
+ }
+
+ return $result;
+ }
+
+ /**
* @return iterable<PropertyInfo>
*/
public function getAllPropertyInfos(): iterable {
@@ -2150,10 +3116,8 @@
}
class DocCommentTag {
- /** @var string */
- public $name;
- /** @var string|null */
- public $value;
+ public string $name;
+ public ?string $value;
public function __construct(string $name, ?string $value) {
$this->name = $name;
@@ -2228,7 +3192,8 @@
int $classFlags,
int $flags,
Node\FunctionLike $func,
- ?string $cond
+ ?string $cond,
+ bool $isUndocumentable
): FuncInfo {
try {
$comment = $func->getDocComment();
@@ -2236,6 +3201,7 @@
$aliasType = null;
$alias = null;
$isDeprecated = false;
+ $supportsCompileTimeEval = false;
$verify = true;
$docReturnType = null;
$tentativeReturnType = false;
@@ -2245,32 +3211,57 @@
if ($comment) {
$tags = parseDocComment($comment);
foreach ($tags as $tag) {
- if ($tag->name === 'prefer-ref') {
- $varName = $tag->getVariableName();
- if (!isset($paramMeta[$varName])) {
- $paramMeta[$varName] = [];
- }
- $paramMeta[$varName]['preferRef'] = true;
- } else if ($tag->name === 'alias' || $tag->name === 'implementation-alias') {
- $aliasType = $tag->name;
- $aliasParts = explode("::", $tag->getValue());
- if (count($aliasParts) === 1) {
- $alias = new FunctionName(new Name($aliasParts[0]));
- } else {
- $alias = new MethodName(new Name($aliasParts[0]), $aliasParts[1]);
- }
- } else if ($tag->name === 'deprecated') {
- $isDeprecated = true;
- } else if ($tag->name === 'no-verify') {
- $verify = false;
- } else if ($tag->name === 'tentative-return-type') {
- $tentativeReturnType = true;
- } else if ($tag->name === 'return') {
- $docReturnType = $tag->getType();
- } else if ($tag->name === 'param') {
- $docParamTypes[$tag->getVariableName()] = $tag->getType();
- } else if ($tag->name === 'refcount') {
- $refcount = $tag->getValue();
+ switch ($tag->name) {
+ case 'alias':
+ case 'implementation-alias':
+ $aliasType = $tag->name;
+ $aliasParts = explode("::", $tag->getValue());
+ if (count($aliasParts) === 1) {
+ $alias = new FunctionName(new Name($aliasParts[0]));
+ } else {
+ $alias = new MethodName(new Name($aliasParts[0]), $aliasParts[1]);
+ }
+ break;
+
+ case 'deprecated':
+ $isDeprecated = true;
+ break;
+
+ case 'no-verify':
+ $verify = false;
+ break;
+
+ case 'tentative-return-type':
+ $tentativeReturnType = true;
+ break;
+
+ case 'return':
+ $docReturnType = $tag->getType();
+ break;
+
+ case 'param':
+ $docParamTypes[$tag->getVariableName()] = $tag->getType();
+ break;
+
+ case 'refcount':
+ $refcount = $tag->getValue();
+ break;
+
+ case 'compile-time-eval':
+ $supportsCompileTimeEval = true;
+ break;
+
+ case 'prefer-ref':
+ $varName = $tag->getVariableName();
+ if (!isset($paramMeta[$varName])) {
+ $paramMeta[$varName] = [];
+ }
+ $paramMeta[$varName][$tag->name] = true;
+ break;
+
+ case 'undocumentable':
+ $isUndocumentable = true;
+ break;
}
}
}
@@ -2281,7 +3272,13 @@
$foundVariadic = false;
foreach ($func->getParams() as $i => $param) {
$varName = $param->var->name;
- $preferRef = !empty($paramMeta[$varName]['preferRef']);
+ $preferRef = !empty($paramMeta[$varName]['prefer-ref']);
+ $attributes = [];
+ foreach ($param->attrGroups as $attrGroup) {
+ foreach ($attrGroup->attrs as $attr) {
+ $attributes[] = new AttributeInfo($attr->name->toString(), $attr->args);
+ }
+ }
unset($paramMeta[$varName]);
if (isset($varNameSet[$varName])) {
@@ -2328,7 +3325,8 @@
$param->variadic,
$type,
isset($docParamTypes[$varName]) ? Type::fromString($docParamTypes[$varName]) : null,
- $param->default ? $prettyPrinter->prettyPrintExpr($param->default) : null
+ $param->default ? $prettyPrinter->prettyPrintExpr($param->default) : null,
+ $attributes
);
if (!$param->default && !$param->variadic) {
$numRequiredArgs = $i + 1;
@@ -2359,11 +3357,13 @@
$aliasType,
$alias,
$isDeprecated,
+ $supportsCompileTimeEval,
$verify,
$args,
$return,
$numRequiredArgs,
- $cond
+ $cond,
+ $isUndocumentable
);
} catch (Exception $e) {
throw new Exception($name . "(): " .$e->getMessage());
@@ -2370,6 +3370,52 @@
}
}
+function parseConstLike(
+ PrettyPrinterAbstract $prettyPrinter,
+ ConstOrClassConstName $name,
+ Node\Const_ $const,
+ int $flags,
+ ?DocComment $docComment,
+ ?string $cond,
+ ?int $phpVersionIdMinimumCompatibility
+): ConstInfo {
+ $phpDocType = null;
+ $deprecated = false;
+ $cValue = null;
+ $link = null;
+ if ($docComment) {
+ $tags = parseDocComment($docComment);
+ foreach ($tags as $tag) {
+ if ($tag->name === 'var') {
+ $phpDocType = $tag->getType();
+ } elseif ($tag->name === 'deprecated') {
+ $deprecated = true;
+ } elseif ($tag->name === 'cvalue') {
+ $cValue = $tag->value;
+ } elseif ($tag->name === 'link') {
+ $link = $tag->value;
+ }
+ }
+ }
+
+ if ($phpDocType === null) {
+ throw new Exception("Missing type for constant " . $name->__toString());
+ }
+
+ return new ConstInfo(
+ $name,
+ $flags,
+ $const->value,
+ $prettyPrinter->prettyPrintExpr($const->value),
+ Type::fromString($phpDocType),
+ $deprecated,
+ $cond,
+ $cValue,
+ $link,
+ $phpVersionIdMinimumCompatibility
+ );
+}
+
function parseProperty(
Name $class,
int $flags,
@@ -2376,7 +3422,8 @@
Stmt\PropertyProperty $property,
?Node $type,
?DocComment $comment,
- PrettyPrinterAbstract $prettyPrinter
+ PrettyPrinterAbstract $prettyPrinter,
+ ?int $phpVersionIdMinimumCompatibility
): PropertyInfo {
$phpDocType = null;
$isDocReadonly = false;
@@ -2419,17 +3466,27 @@
$property->default,
$property->default ? $prettyPrinter->prettyPrintExpr($property->default) : null,
$isDocReadonly,
- $link
+ $link,
+ $phpVersionIdMinimumCompatibility
);
}
/**
+ * @param ConstInfo[] $consts
* @param PropertyInfo[] $properties
* @param FuncInfo[] $methods
* @param EnumCaseInfo[] $enumCases
*/
function parseClass(
- Name $name, Stmt\ClassLike $class, array $properties, array $methods, array $enumCases
+ Name $name,
+ Stmt\ClassLike $class,
+ array $consts,
+ array $properties,
+ array $methods,
+ array $enumCases,
+ ?string $cond,
+ ?int $minimumPhpVersionIdCompatibility,
+ bool $isUndocumentable
): ClassInfo {
$flags = $class instanceof Class_ ? $class->flags : 0;
$comment = $class->getDocComment();
@@ -2437,6 +3494,8 @@
$isDeprecated = false;
$isStrictProperties = false;
$isNotSerializable = false;
+ $allowsDynamicProperties = false;
+ $attributes = [];
if ($comment) {
$tags = parseDocComment($comment);
@@ -2449,10 +3508,27 @@
$isStrictProperties = true;
} else if ($tag->name === 'not-serializable') {
$isNotSerializable = true;
+ } else if ($tag->name === 'undocumentable') {
+ $isUndocumentable = true;
}
}
}
+ foreach ($class->attrGroups as $attrGroup) {
+ foreach ($attrGroup->attrs as $attr) {
+ $attributes[] = new AttributeInfo($attr->name->toString(), $attr->args);
+ switch ($attr->name->toString()) {
+ case 'AllowDynamicProperties':
+ $allowsDynamicProperties = true;
+ break;
+ }
+ }
+ }
+
+ if ($isStrictProperties && $allowsDynamicProperties) {
+ throw new Exception("A class may not have '@strict-properties' and '#[\\AllowDynamicProperties]' at the same time.");
+ }
+
$extends = [];
$implements = [];
@@ -2474,6 +3550,12 @@
throw new Exception("Unknown class kind " . get_class($class));
}
+ if ($isUndocumentable) {
+ foreach ($methods as $method) {
+ $method->isUndocumentable = true;
+ }
+ }
+
return new ClassInfo(
$name,
$flags,
@@ -2483,12 +3565,17 @@
? SimpleType::fromNode($class->scalarType) : null,
$isDeprecated,
$isStrictProperties,
+ $attributes,
$isNotSerializable,
$extends,
$implements,
+ $consts,
$properties,
$methods,
- $enumCases
+ $enumCases,
+ $cond,
+ $minimumPhpVersionIdCompatibility,
+ $isUndocumentable
);
}
@@ -2550,6 +3637,22 @@
}
$cond = handlePreprocessorConditions($conds, $stmt);
+
+ if ($stmt instanceof Stmt\Const_) {
+ foreach ($stmt->consts as $const) {
+ $fileInfo->constInfos[] = parseConstLike(
+ $prettyPrinter,
+ new ConstName($const->namespacedName, $const->name->toString()),
+ $const,
+ 0,
+ $stmt->getDocComment(),
+ $cond,
+ $fileInfo->generateLegacyArginfoForPhpVersionId
+ );
+ }
+ continue;
+ }
+
if ($stmt instanceof Stmt\Function_) {
$fileInfo->funcInfos[] = parseFunctionLike(
$prettyPrinter,
@@ -2557,7 +3660,8 @@
0,
0,
$stmt,
- $cond
+ $cond,
+ $fileInfo->isUndocumentable
);
continue;
}
@@ -2564,6 +3668,7 @@
if ($stmt instanceof Stmt\ClassLike) {
$className = $stmt->namespacedName;
+ $constInfos = [];
$propertyInfos = [];
$methodInfos = [];
$enumCaseInfos = [];
@@ -2576,7 +3681,19 @@
$classFlags = $stmt instanceof Class_ ? $stmt->flags : 0;
$abstractFlag = $stmt instanceof Stmt\Interface_ ? Class_::MODIFIER_ABSTRACT : 0;
- if ($classStmt instanceof Stmt\Property) {
+ if ($classStmt instanceof Stmt\ClassConst) {
+ foreach ($classStmt->consts as $const) {
+ $constInfos[] = parseConstLike(
+ $prettyPrinter,
+ new ClassConstName($className, $const->name->toString()),
+ $const,
+ $classStmt->flags,
+ $classStmt->getDocComment(),
+ $cond,
+ $fileInfo->generateLegacyArginfoForPhpVersionId
+ );
+ }
+ } else if ($classStmt instanceof Stmt\Property) {
if (!($classStmt->flags & Class_::VISIBILITY_MODIFIER_MASK)) {
throw new Exception("Visibility modifier is required");
}
@@ -2587,7 +3704,8 @@
$property,
$classStmt->type,
$classStmt->getDocComment(),
- $prettyPrinter
+ $prettyPrinter,
+ $fileInfo->generateLegacyArginfoForPhpVersionId
);
}
} else if ($classStmt instanceof Stmt\ClassMethod) {
@@ -2600,7 +3718,8 @@
$classFlags,
$classStmt->flags | $abstractFlag,
$classStmt,
- $cond
+ $cond,
+ $fileInfo->isUndocumentable
);
} else if ($classStmt instanceof Stmt\EnumCase) {
$enumCaseInfos[] = new EnumCaseInfo(
@@ -2611,10 +3730,19 @@
}
$fileInfo->classInfos[] = parseClass(
- $className, $stmt, $propertyInfos, $methodInfos, $enumCaseInfos);
+ $className, $stmt, $constInfos, $propertyInfos, $methodInfos, $enumCaseInfos, $cond, $fileInfo->generateLegacyArginfoForPhpVersionId, $fileInfo->isUndocumentable
+ );
continue;
}
+ if ($stmt instanceof Stmt\Expression) {
+ $expr = $stmt->expr;
+ if ($expr instanceof Expr\Include_) {
+ $fileInfo->dependencies[] = (string)EvaluatedValue::createFromExpression($expr->expr, null, null, [])->value;
+ continue;
+ }
+ }
+
throw new Exception("Unexpected node {$stmt->getType()}");
}
}
@@ -2642,10 +3770,19 @@
$fileInfo->generateFunctionEntries = true;
$fileInfo->declarationPrefix = $tag->value ? $tag->value . " " : "";
} else if ($tag->name === 'generate-legacy-arginfo') {
- $fileInfo->generateLegacyArginfo = true;
+ if ($tag->value && !in_array((int) $tag->value, ALL_PHP_VERSION_IDS, true)) {
+ throw new Exception(
+ "Legacy PHP version must be one of: \"" . PHP_70_VERSION_ID . "\" (PHP 7.0), \"" . PHP_80_VERSION_ID . "\" (PHP 8.0), " .
+ "\"" . PHP_81_VERSION_ID . "\" (PHP 8.1), \"" . PHP_82_VERSION_ID . "\" (PHP 8.2), \"" . $tag->value . "\" provided"
+ );
+ }
+
+ $fileInfo->generateLegacyArginfoForPhpVersionId = $tag->value ? (int) $tag->value : PHP_70_VERSION_ID;
} else if ($tag->name === 'generate-class-entries') {
$fileInfo->generateClassEntries = true;
$fileInfo->declarationPrefix = $tag->value ? $tag->value . " " : "";
+ } else if ($tag->name === 'undocumentable') {
+ $fileInfo->isUndocumentable = true;
}
}
}
@@ -2659,12 +3796,16 @@
return $fileInfo;
}
-function funcInfoToCode(FuncInfo $funcInfo): string {
+function funcInfoToCode(FileInfo $fileInfo, FuncInfo $funcInfo): string {
$code = '';
$returnType = $funcInfo->return->type;
$isTentativeReturnType = $funcInfo->return->tentativeReturnType;
+ $php81MinimumCompatibility = $fileInfo->generateLegacyArginfoForPhpVersionId === null || $fileInfo->generateLegacyArginfoForPhpVersionId >= PHP_81_VERSION_ID;
if ($returnType !== null) {
+ if ($isTentativeReturnType && !$php81MinimumCompatibility) {
+ $code .= "#if (PHP_VERSION_ID >= " . PHP_81_VERSION_ID . ")\n";
+ }
if (null !== $simpleReturnType = $returnType->tryToSimpleType()) {
if ($simpleReturnType->isBuiltin) {
$code .= sprintf(
@@ -2703,6 +3844,12 @@
);
}
}
+ if ($isTentativeReturnType && !$php81MinimumCompatibility) {
+ $code .= sprintf(
+ "#else\nZEND_BEGIN_ARG_INFO_EX(%s, 0, %d, %d)\n#endif\n",
+ $funcInfo->getArgInfoName(), $funcInfo->return->byRef, $funcInfo->numRequiredArgs
+ );
+ }
} else {
$code .= sprintf(
"ZEND_BEGIN_ARG_INFO_EX(%s, 0, %d, %d)\n",
@@ -2772,35 +3919,50 @@
return null;
}
-/** @param iterable<FuncInfo> $funcInfos */
+/**
+ * @template T
+ * @param iterable<T> $infos
+ * @param Closure(T): string|null $codeGenerator
+ * @param ?string $parentCond
+ */
function generateCodeWithConditions(
- iterable $funcInfos, string $separator, Closure $codeGenerator): string {
+ iterable $infos, string $separator, Closure $codeGenerator, ?string $parentCond = null): string {
$code = "";
- foreach ($funcInfos as $funcInfo) {
- $funcCode = $codeGenerator($funcInfo);
- if ($funcCode === null) {
+ foreach ($infos as $info) {
+ $infoCode = $codeGenerator($info);
+ if ($infoCode === null) {
continue;
}
$code .= $separator;
- if ($funcInfo->cond) {
- $code .= "#if {$funcInfo->cond}\n";
- $code .= $funcCode;
+ if ($info->cond && $info->cond !== $parentCond) {
+ $code .= "#if {$info->cond}\n";
+ $code .= $infoCode;
$code .= "#endif\n";
} else {
- $code .= $funcCode;
+ $code .= $infoCode;
}
}
+
return $code;
}
-function generateArgInfoCode(FileInfo $fileInfo, string $stubHash): string {
+/**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+function generateArgInfoCode(
+ string $stubFilenameWithoutExtension,
+ FileInfo $fileInfo,
+ iterable $allConstInfos,
+ string $stubHash
+): string {
$code = "/* This is a generated file, edit the .stub.php file instead.\n"
. " * Stub hash: $stubHash */\n";
+
$generatedFuncInfos = [];
$code .= generateCodeWithConditions(
$fileInfo->getAllFuncInfos(), "\n",
- function (FuncInfo $funcInfo) use(&$generatedFuncInfos) {
+ static function (FuncInfo $funcInfo) use (&$generatedFuncInfos, $fileInfo) {
/* If there already is an equivalent arginfo structure, only emit a #define */
if ($generatedFuncInfo = findEquivalentFuncInfo($generatedFuncInfos, $funcInfo)) {
$code = sprintf(
@@ -2808,7 +3970,7 @@
$funcInfo->getArgInfoName(), $generatedFuncInfo->getArgInfoName()
);
} else {
- $code = funcInfoToCode($funcInfo);
+ $code = funcInfoToCode($fileInfo, $funcInfo);
}
$generatedFuncInfos[] = $funcInfo;
@@ -2822,7 +3984,7 @@
$generatedFunctionDeclarations = [];
$code .= generateCodeWithConditions(
$fileInfo->getAllFuncInfos(), "",
- function (FuncInfo $funcInfo) use($fileInfo, &$generatedFunctionDeclarations) {
+ static function (FuncInfo $funcInfo) use ($fileInfo, &$generatedFunctionDeclarations) {
$key = $funcInfo->getDeclarationKey();
if (isset($generatedFunctionDeclarations[$key])) {
return null;
@@ -2838,22 +4000,49 @@
}
foreach ($fileInfo->classInfos as $classInfo) {
- $code .= generateFunctionEntries($classInfo->name, $classInfo->funcInfos);
+ $code .= generateFunctionEntries($classInfo->name, $classInfo->funcInfos, $classInfo->cond);
}
}
+ $php82MinimumCompatibility = $fileInfo->generateLegacyArginfoForPhpVersionId === null || $fileInfo->generateLegacyArginfoForPhpVersionId >= PHP_82_VERSION_ID;
+
if ($fileInfo->generateClassEntries) {
- $code .= generateClassEntryCode($fileInfo);
+ if ($attributeInitializationCode = generateAttributeInitialization($fileInfo->funcInfos, $allConstInfos, null)) {
+ if (!$php82MinimumCompatibility) {
+ $attributeInitializationCode = "\n#if (PHP_VERSION_ID >= " . PHP_82_VERSION_ID . ")" . $attributeInitializationCode . "#endif\n";
+ }
+ }
+
+ if ($attributeInitializationCode !== "" || !empty($fileInfo->constInfos)) {
+ $code .= "\nstatic void register_{$stubFilenameWithoutExtension}_symbols(int module_number)\n";
+ $code .= "{\n";
+
+ foreach ($fileInfo->constInfos as $constInfo) {
+ $code .= $constInfo->getDeclaration($allConstInfos);
+ }
+
+ if (!empty($attributeInitializationCode !== "" && $fileInfo->constInfos)) {
+ $code .= "\n";
+ }
+
+ $code .= $attributeInitializationCode;
+ $code .= "}\n";
+ }
+
+ $code .= generateClassEntryCode($fileInfo, $allConstInfos);
}
return $code;
}
-function generateClassEntryCode(FileInfo $fileInfo): string {
+/**
+ * @param iterable<ConstInfo> $allConstInfos
+ */
+function generateClassEntryCode(FileInfo $fileInfo, iterable $allConstInfos): string {
$code = "";
foreach ($fileInfo->classInfos as $class) {
- $code .= "\n" . $class->getRegistration();
+ $code .= "\n" . $class->getRegistration($allConstInfos);
}
return $code;
@@ -2860,9 +4049,13 @@
}
/** @param FuncInfo[] $funcInfos */
-function generateFunctionEntries(?Name $className, array $funcInfos): string {
- $code = "";
+function generateFunctionEntries(?Name $className, array $funcInfos, ?string $cond = null): string {
+ $code = "\n\n";
+ if ($cond) {
+ $code .= "#if {$cond}\n";
+ }
+
$functionEntryName = "ext_functions";
if ($className) {
$underscoreName = implode("_", $className->parts);
@@ -2869,24 +4062,55 @@
$functionEntryName = "class_{$underscoreName}_methods";
}
- $code .= "\n\nstatic const zend_function_entry {$functionEntryName}[] = {\n";
- $code .= generateCodeWithConditions($funcInfos, "", function (FuncInfo $funcInfo) {
+ $code .= "static const zend_function_entry {$functionEntryName}[] = {\n";
+ $code .= generateCodeWithConditions($funcInfos, "", static function (FuncInfo $funcInfo) {
return $funcInfo->getFunctionEntry();
- });
+ }, $cond);
$code .= "\tZEND_FE_END\n";
$code .= "};\n";
+ if ($cond) {
+ $code .= "#endif\n";
+ }
+
return $code;
}
+/**
+ * @param iterable<FuncInfo> $funcInfos
+ */
+function generateAttributeInitialization(iterable $funcInfos, iterable $allConstInfos, ?string $parentCond = null): string {
+ return generateCodeWithConditions(
+ $funcInfos,
+ "",
+ static function (FuncInfo $funcInfo) use ($allConstInfos) {
+ $code = null;
-/** @param FuncInfo<string, FuncInfo> $funcInfos */
-function generateOptimizerInfo(array $funcInfos): string {
+ foreach ($funcInfo->args as $index => $arg) {
+ if ($funcInfo->name instanceof MethodName) {
+ $functionTable = "&class_entry->function_table";
+ } else {
+ $functionTable = "CG(function_table)";
+ }
+ foreach ($arg->attributes as $attribute) {
+ $code .= $attribute->generateCode("zend_add_parameter_attribute(zend_hash_str_find_ptr($functionTable, \"" . $funcInfo->name->getNameForAttributes() . "\", sizeof(\"" . $funcInfo->name->getNameForAttributes() . "\") - 1), $index", "{$funcInfo->name->getMethodSynopsisFilename()}_arg{$index}", $allConstInfos);
+ }
+ }
+
+ return $code;
+ },
+ $parentCond
+ );
+}
+
+/** @param array<string, FuncInfo> $funcMap */
+function generateOptimizerInfo(array $funcMap): string {
+
$code = "/* This is a generated file, edit the .stub.php files instead. */\n\n";
$code .= "static const func_info_t func_infos[] = {\n";
- $code .= generateCodeWithConditions($funcInfos, "", function (FuncInfo $funcInfo) {
+ $code .= generateCodeWithConditions($funcMap, "", static function (FuncInfo $funcInfo) {
return $funcInfo->getOptimizerInfo();
});
@@ -2896,14 +4120,96 @@
}
/**
- * @param ClassInfo[] $classMap
+ * @param array<int, string[]> $flagsByPhpVersions
+ * @return string[]
+ */
+function generateVersionDependentFlagCode(string $codeTemplate, array $flagsByPhpVersions, ?int $phpVersionIdMinimumCompatibility): array
+{
+ $phpVersions = ALL_PHP_VERSION_IDS;
+ sort($phpVersions);
+ $currentPhpVersion = end($phpVersions);
+
+ // No version compatibility is needed
+ if ($phpVersionIdMinimumCompatibility === null) {
+ if (empty($flagsByPhpVersions[$currentPhpVersion])) {
+ return [];
+ }
+
+ return [sprintf($codeTemplate, implode("|", $flagsByPhpVersions[$currentPhpVersion]))];
+ }
+
+ // Remove flags which depend on a PHP version below the minimally supported one
+ ksort($flagsByPhpVersions);
+ $index = array_search($phpVersionIdMinimumCompatibility, array_keys($flagsByPhpVersions));
+ if ($index === false) {
+ throw new Exception("Missing version dependent flags for PHP version ID \"$phpVersionIdMinimumCompatibility\"");
+ }
+ $flagsByPhpVersions = array_slice($flagsByPhpVersions, $index, null, true);
+
+ // Remove empty version-specific flags
+ $flagsByPhpVersions = array_filter(
+ $flagsByPhpVersions,
+ static function (array $value): bool {
+ return !empty($value);
+ });
+
+ // There are no version-specific flags
+ if (empty($flagsByPhpVersions)) {
+ return [];
+ }
+
+ // Remove version-specific flags which don't differ from the previous one
+ $previousVersionId = null;
+ foreach ($flagsByPhpVersions as $versionId => $versionFlags) {
+ if ($previousVersionId !== null && $flagsByPhpVersions[$previousVersionId] === $versionFlags) {
+ unset($flagsByPhpVersions[$versionId]);
+ } else {
+ $previousVersionId = $versionId;
+ }
+ }
+
+ $flagCount = count($flagsByPhpVersions);
+
+ // Do not add a condition unnecessarily when the only version is the same as the minimally supported one
+ if ($flagCount === 1) {
+ reset($flagsByPhpVersions);
+ $firstVersion = key($flagsByPhpVersions);
+ if ($firstVersion === $phpVersionIdMinimumCompatibility) {
+ return [sprintf($codeTemplate, implode("|", reset($flagsByPhpVersions)))];
+ }
+ }
+
+ // Add the necessary conditions around the code using the version-specific flags
+ $result = [];
+ $i = 0;
+ foreach (array_reverse($flagsByPhpVersions, true) as $version => $versionFlags) {
+ $code = "";
+
+ $if = $i === 0 ? "#if" : "#elif";
+ $endif = $i === $flagCount - 1 ? "#endif\n" : "";
+
+ $code .= "$if (PHP_VERSION_ID >= $version)\n";
+
+ $code .= sprintf($codeTemplate, implode("|", $versionFlags));
+ $code .= $endif;
+
+ $result[] = $code;
+ $i++;
+ }
+
+ return $result;
+}
+
+/**
+ * @param array<string, ClassInfo> $classMap
+ * @param iterable<ConstInfo> $allConstInfos
* @return array<string, string>
*/
-function generateClassSynopses(array $classMap): array {
+function generateClassSynopses(array $classMap, iterable $allConstInfos): array {
$result = [];
foreach ($classMap as $classInfo) {
- $classSynopsis = $classInfo->getClassSynopsisDocument($classMap);
+ $classSynopsis = $classInfo->getClassSynopsisDocument($classMap, $allConstInfos);
if ($classSynopsis !== null) {
$result[ClassInfo::getClassSynopsisFilename($classInfo->name) . ".xml"] = $classSynopsis;
}
@@ -2913,11 +4219,14 @@
}
/**
- * @param ClassInfo[] $classMap
+ * @param array<string, ClassInfo> $classMap
+ * $param iterable<ConstInfo> $allConstInfos
* @return array<string, string>
*/
-function replaceClassSynopses(string $targetDirectory, array $classMap): array
+function replaceClassSynopses(string $targetDirectory, array $classMap, iterable $allConstInfos, bool $isVerify): array
{
+ $existingClassSynopses = [];
+
$classSynopses = [];
$it = new RecursiveIteratorIterator(
@@ -2974,9 +4283,12 @@
if (!isset($classMap[$className])) {
continue;
}
+
+ $existingClassSynopses[$className] = $className;
+
$classInfo = $classMap[$className];
- $newClassSynopsis = $classInfo->getClassSynopsisElement($doc, $classMap);
+ $newClassSynopsis = $classInfo->getClassSynopsisElement($doc, $classMap, $allConstInfos);
if ($newClassSynopsis === null) {
continue;
}
@@ -2994,10 +4306,11 @@
$replacedXml = preg_replace(
[
"/REPLACED-ENTITY-([A-Za-z0-9._{}%-]+?;)/",
- "/<phpdoc:(classref|exceptionref)\s+xmlns:phpdoc=\"([a-z0-9.:\/]+)\"\s+xmlns=\"([a-z0-9.:\/]+)\"\s+xml:id=\"([a-z0-9._-]+)\"\s*>/i",
- "/<phpdoc:(classref|exceptionref)\s+xmlns:phpdoc=\"([a-z0-9.:\/]+)\"\s+xmlns=\"([a-z0-9.:\/]+)\"\s+xmlns:xi=\"([a-z0-9.:\/]+)\"\s+xml:id=\"([a-z0-9._-]+)\"\s*>/i",
- "/<phpdoc:(classref|exceptionref)\s+xmlns:phpdoc=\"([a-z0-9.:\/]+)\"\s+xmlns=\"([a-z0-9.:\/]+)\"\s+xmlns:xlink=\"([a-z0-9.:\/]+)\"\s+xmlns:xi=\"([a-z0-9.:\/]+)\"\s+xml:id=\"([a-z0-9._-]+)\"\s*>/i",
- "/<phpdoc:(classref|exceptionref)\s+xmlns=\"([a-z0-9.:\/]+)\"\s+xmlns:xlink=\"([a-z0-9.:\/]+)\"\s+xmlns:xi=\"([a-z0-9.:\/]+)\"\s+xmlns:phpdoc=\"([a-z0-9.:\/]+)\"\s+xml:id=\"([a-z0-9._-]+)\"\s*>/i",
+ '/<phpdoc:(classref|exceptionref)\s+xmlns:phpdoc=\"([^"]+)"\s+xmlns="([^"]+)"\s+xml:id="([^"]+)"\s*>/i',
+ '/<phpdoc:(classref|exceptionref)\s+xmlns:phpdoc=\"([^"]+)"\s+xmlns="([^"]+)"\s+xmlns:xi="([^"]+)"\s+xml:id="([^"]+)"\s*>/i',
+ '/<phpdoc:(classref|exceptionref)\s+xmlns:phpdoc=\"([^"]+)"\s+xmlns="([^"]+)"\s+xmlns:xlink="([^"]+)"\s+xmlns:xi="([^"]+)"\s+xml:id="([^"]+)"\s*>/i',
+ '/<phpdoc:(classref|exceptionref)\s+xmlns:phpdoc=\"([^"]+)"\s+xmlns:xlink="([^"]+)"\s+xmlns:xi="([^"]+)"\s+xmlns="([^"]+)"\s+xml:id="([^"]+)"\s*>/i',
+ '/<phpdoc:(classref|exceptionref)\s+xmlns=\"([^"]+)\"\s+xmlns:xlink="([^"]+)"\s+xmlns:xi="([^"]+)"\s+xmlns:phpdoc="([^"]+)"\s+xml:id="([^"]+)"\s*>/i',
],
[
"&$1",
@@ -3004,6 +4317,7 @@
"<phpdoc:$1 xml:id=\"$4\" xmlns:phpdoc=\"$2\" xmlns=\"$3\">",
"<phpdoc:$1 xml:id=\"$5\" xmlns:phpdoc=\"$2\" xmlns=\"$3\" xmlns:xi=\"$4\">",
"<phpdoc:$1 xml:id=\"$6\" xmlns:phpdoc=\"$2\" xmlns=\"$3\" xmlns:xlink=\"$4\" xmlns:xi=\"$5\">",
+ "<phpdoc:$1 xml:id=\"$6\" xmlns:phpdoc=\"$2\" xmlns=\"$5\" xmlns:xlink=\"$3\" xmlns:xi=\"$4\">",
"<phpdoc:$1 xml:id=\"$6\" xmlns:phpdoc=\"$5\" xmlns=\"$2\" xmlns:xlink=\"$3\" xmlns:xi=\"$4\">",
],
$replacedXml
@@ -3013,6 +4327,16 @@
}
}
+ if ($isVerify) {
+ $missingClassSynopses = array_diff_key($classMap, $existingClassSynopses);
+ foreach ($missingClassSynopses as $className => $info) {
+ /** @var ClassInfo $info */
+ if (!$info->isUndocumentable) {
+ echo "Warning: Missing class synopsis for $className\n";
+ }
+ }
+ }
+
return $classSynopses;
}
@@ -3054,7 +4378,8 @@
* @param array<string, FuncInfo> $aliasMap
* @return array<string, string>
*/
-function replaceMethodSynopses(string $targetDirectory, array $funcMap, array $aliasMap): array {
+function replaceMethodSynopses(string $targetDirectory, array $funcMap, array $aliasMap, bool $isVerify): array {
+ $existingMethodSynopses = [];
$methodSynopses = [];
$it = new RecursiveIteratorIterator(
@@ -3073,6 +4398,35 @@
continue;
}
+ if ($isVerify) {
+ $matches = [];
+ preg_match("/<refname>\s*([\w:]+)\s*<\/refname>\s*<refpurpose>\s*&Alias;\s*<(?:function|methodname)>\s*([\w:]+)\s*<\/(?:function|methodname)>\s*<\/refpurpose>/i", $xml, $matches);
+ $aliasName = $matches[1] ?? null;
+ $alias = $funcMap[$aliasName] ?? null;
+ $funcName = $matches[2] ?? null;
+ $func = $funcMap[$funcName] ?? null;
+
+ if ($alias &&
+ !$alias->isUndocumentable &&
+ ($func === null || $func->alias === null || $func->alias->__toString() !== $aliasName) &&
+ ($alias->alias === null || $alias->alias->__toString() !== $funcName)
+ ) {
+ echo "Warning: $aliasName()" . ($alias->alias ? " is an alias of " . $alias->alias->__toString() . "(), but it" : "") . " is incorrectly documented as an alias for $funcName()\n";
+ }
+
+ $matches = [];
+ preg_match("/<(?:para|simpara)>\s*(?:&info.function.alias;|&info.method.alias;|&Alias;)\s+<(?:function|methodname)>\s*([\w:]+)\s*<\/(?:function|methodname)>/i", $xml, $matches);
+ $descriptionFuncName = $matches[1] ?? null;
+ $descriptionFunc = $funcMap[$descriptionFuncName] ?? null;
+ if ($descriptionFunc && $funcName !== $descriptionFuncName) {
+ echo "Warning: Alias in the method synopsis description of $pathName doesn't match the alias in the <refpurpose>\n";
+ }
+
+ if ($aliasName) {
+ $existingMethodSynopses[$aliasName] = $aliasName;
+ }
+ }
+
if (stripos($xml, "<methodsynopsis") === false && stripos($xml, "<constructorsynopsis") === false && stripos($xml, "<destructorsynopsis") === false) {
continue;
}
@@ -3114,7 +4468,9 @@
if (!isset($funcMap[$funcName])) {
continue;
}
+
$funcInfo = $funcMap[$funcName];
+ $existingMethodSynopses[$funcInfo->name->__toString()] = $funcInfo->name->__toString();
$newMethodSynopsis = $funcInfo->getMethodSynopsisElement($funcMap, $aliasMap, $doc);
if ($newMethodSynopsis === null) {
@@ -3185,8 +4541,8 @@
$replacedXml = preg_replace(
[
"/REPLACED-ENTITY-([A-Za-z0-9._{}%-]+?;)/",
- "/<refentry\s+xmlns=\"([a-z0-9.:\/]+)\"\s+xml:id=\"([a-z0-9._-]+)\"\s*>/i",
- "/<refentry\s+xmlns=\"([a-z0-9.:\/]+)\"\s+xmlns:xlink=\"([a-z0-9.:\/]+)\"\s+xml:id=\"([a-z0-9._-]+)\"\s*>/i",
+ '/<refentry\s+xmlns="([^"]+)"\s+xml:id="([^"]+)"\s*>/i',
+ '/<refentry\s+xmlns="([^"]+)"\s+xmlns:xlink="([^"]+)"\s+xml:id="([^"]+)"\s*>/i',
],
[
"&$1",
@@ -3200,6 +4556,16 @@
}
}
+ if ($isVerify) {
+ $missingMethodSynopses = array_diff_key($funcMap, $existingMethodSynopses);
+ foreach ($missingMethodSynopses as $functionName => $info) {
+ /** @var FuncInfo $info */
+ if (!$info->isUndocumentable) {
+ echo "Warning: Missing method synopsis for $functionName()\n";
+ }
+ }
+ }
+
return $methodSynopses;
}
@@ -3275,13 +4641,13 @@
}
$isInitialized = true;
- $version = "4.13.0";
+ $version = "4.15.1";
$phpParserDir = __DIR__ . "/PHP-Parser-$version";
if (!is_dir($phpParserDir)) {
installPhpParser($version, $phpParserDir);
}
- spl_autoload_register(function(string $class) use($phpParserDir) {
+ spl_autoload_register(static function(string $class) use ($phpParserDir) {
if (strpos($class, "PhpParser\\") === 0) {
$fileName = $phpParserDir . "/lib/" . str_replace("\\", "/", $class) . ".php";
require $fileName;
@@ -3367,7 +4733,6 @@
foreach ($fileInfos as $fileInfo) {
foreach ($fileInfo->getAllFuncInfos() as $funcInfo) {
- /** @var FuncInfo $funcInfo */
$funcMap[$funcInfo->name->__toString()] = $funcInfo;
// TODO: Don't use aliasMap for methodsynopsis?
@@ -3469,7 +4834,7 @@
if ($generateClassSynopses) {
$classSynopsesDirectory = getcwd() . "/classsynopses";
- $classSynopses = generateClassSynopses($classMap);
+ $classSynopses = generateClassSynopses($classMap, $context->allConstInfos);
if (!empty($classSynopses)) {
if (!file_exists($classSynopsesDirectory)) {
mkdir($classSynopsesDirectory);
@@ -3484,7 +4849,7 @@
}
if ($replaceClassSynopses) {
- $classSynopses = replaceClassSynopses($targetSynopses, $classMap);
+ $classSynopses = replaceClassSynopses($targetSynopses, $classMap, $context->allConstInfos, $verify);
foreach ($classSynopses as $filename => $content) {
if (file_put_contents($filename, $content)) {
@@ -3511,7 +4876,7 @@
}
if ($replaceMethodSynopses) {
- $methodSynopses = replaceMethodSynopses($targetSynopses, $funcMap, $aliasMap);
+ $methodSynopses = replaceMethodSynopses($targetSynopses, $funcMap, $aliasMap, $verify);
foreach ($methodSynopses as $filename => $content) {
if (file_put_contents($filename, $content)) {
Modified: trunk/MgDev/Oem/php/build/template.rc
===================================================================
--- trunk/MgDev/Oem/php/build/template.rc 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/build/template.rc 2023-03-20 12:54:05 UTC (rev 10033)
@@ -27,7 +27,7 @@
#endif
#ifndef URL
-#define URL "http://www.php.net/"
+#define URL "https://www.php.net/"
#endif
#ifndef EXT_VERSION
Modified: trunk/MgDev/Oem/php/include/TSRM/TSRM.h
===================================================================
--- trunk/MgDev/Oem/php/include/TSRM/TSRM.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/TSRM/TSRM.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -20,7 +20,8 @@
# include "main/php_config.h"
#endif
-#include "main/php_stdint.h"
+#include <stdint.h>
+#include <stdbool.h>
#ifdef TSRM_WIN32
# ifdef TSRM_EXPORTS
@@ -79,7 +80,7 @@
#endif
/* startup/shutdown */
-TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, const char *debug_filename);
+TSRM_API bool tsrm_startup(int expected_threads, int expected_resources, int debug_level, const char *debug_filename);
TSRM_API void tsrm_shutdown(void);
/* environ lock API */
@@ -133,8 +134,8 @@
TSRM_API void *tsrm_get_ls_cache(void);
TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void);
-TSRM_API uint8_t tsrm_is_main_thread(void);
-TSRM_API uint8_t tsrm_is_shutdown(void);
+TSRM_API bool tsrm_is_main_thread(void);
+TSRM_API bool tsrm_is_shutdown(void);
TSRM_API const char *tsrm_api_name(void);
#ifdef TSRM_WIN32
Modified: trunk/MgDev/Oem/php/include/TSRM/tsrm_win32.h
===================================================================
--- trunk/MgDev/Oem/php/include/TSRM/tsrm_win32.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/TSRM/tsrm_win32.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -50,7 +50,6 @@
typedef struct {
void *addr;
- HANDLE info;
HANDLE segment;
struct shmid_ds *descriptor;
} shm_pair;
Modified: trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_call_graph.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_call_graph.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_call_graph.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -60,10 +60,10 @@
BEGIN_EXTERN_C()
-ZEND_API int zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
+ZEND_API void zend_build_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
ZEND_API void zend_analyze_call_graph(zend_arena **arena, zend_script *script, zend_call_graph *call_graph);
ZEND_API zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, const zend_op_array *op_array);
-ZEND_API int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info);
+ZEND_API void zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_flags, zend_op_array *op_array, zend_func_info *func_info);
END_EXTERN_C()
Modified: trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_cfg.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_cfg.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_cfg.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -62,7 +62,6 @@
|JMP |ADR| | |OP1| - |
|JMPZ | |ADR| |OP2|FOL|
|JMPNZ | |ADR| |OP2|FOL|
-|JMPZNZ | |ADR|ADR|OP2|EXT|
|JMPZ_EX | |ADR| |OP2|FOL|
|JMPNZ_EX | |ADR| |OP2|FOL|
|JMP_SET | |ADR| |OP2|FOL|
@@ -116,11 +115,11 @@
BEGIN_EXTERN_C()
-ZEND_API int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg);
+ZEND_API void zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cfg *cfg);
void zend_cfg_remark_reachable_blocks(const zend_op_array *op_array, zend_cfg *cfg);
-ZEND_API int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg);
-ZEND_API int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg);
-ZEND_API int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg);
+ZEND_API void zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg);
+ZEND_API void zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg);
+ZEND_API void zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg);
END_EXTERN_C()
Modified: trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_func_info.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_func_info.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_func_info.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -62,8 +62,8 @@
const zend_call_info *call_info, const zend_ssa *ssa,
zend_class_entry **ce, bool *ce_is_instanceof);
-int zend_func_info_startup(void);
-int zend_func_info_shutdown(void);
+zend_result zend_func_info_startup(void);
+zend_result zend_func_info_shutdown(void);
END_EXTERN_C()
Modified: trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_inference.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_inference.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_inference.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -40,7 +40,7 @@
{ \
if (opline->opN##_type == IS_CONST) { \
zval *zv = CRT_CONSTANT(opline->opN); \
- return (Z_TYPE_P(zv) == IS_LONG || Z_TYPE_P(zv) == IS_TRUE || Z_TYPE_P(zv) == IS_FALSE || Z_TYPE_P(zv) == IS_NULL); \
+ return (Z_TYPE_P(zv) == IS_LONG); \
} else { \
return (opline->opN##_type != IS_UNUSED && \
ssa->var_info && \
@@ -57,12 +57,6 @@
zval *zv = CRT_CONSTANT(opline->opN); \
if (Z_TYPE_P(zv) == IS_LONG) { \
return Z_LVAL_P(zv); \
- } else if (Z_TYPE_P(zv) == IS_TRUE) { \
- return 1; \
- } else if (Z_TYPE_P(zv) == IS_FALSE) { \
- return 0; \
- } else if (Z_TYPE_P(zv) == IS_NULL) { \
- return 0; \
} \
} else if (opline->opN##_type != IS_UNUSED && \
ssa->var_info && \
@@ -80,12 +74,6 @@
zval *zv = CRT_CONSTANT(opline->opN); \
if (Z_TYPE_P(zv) == IS_LONG) { \
return Z_LVAL_P(zv); \
- } else if (Z_TYPE_P(zv) == IS_TRUE) { \
- return 1; \
- } else if (Z_TYPE_P(zv) == IS_FALSE) { \
- return 0; \
- } else if (Z_TYPE_P(zv) == IS_NULL) { \
- return 0; \
} \
} else if (opline->opN##_type != IS_UNUSED && \
ssa->var_info && \
@@ -101,7 +89,7 @@
{ \
if (opline->opN##_type == IS_CONST) { \
zval *zv = CRT_CONSTANT(opline->opN); \
- if (Z_TYPE_P(zv) == IS_LONG || Z_TYPE_P(zv) == IS_TRUE || Z_TYPE_P(zv) == IS_FALSE || Z_TYPE_P(zv) == IS_NULL) { \
+ if (Z_TYPE_P(zv) == IS_LONG) { \
return 0; \
} \
} else if (opline->opN##_type != IS_UNUSED && \
@@ -118,7 +106,7 @@
{ \
if (opline->opN##_type == IS_CONST) { \
zval *zv = CRT_CONSTANT(opline->opN); \
- if (Z_TYPE_P(zv) == IS_LONG || Z_TYPE_P(zv) == IS_TRUE || Z_TYPE_P(zv) == IS_FALSE || Z_TYPE_P(zv) == IS_NULL) { \
+ if (Z_TYPE_P(zv) == IS_LONG) { \
return 0; \
} \
} else if (opline->opN##_type != IS_UNUSED && \
@@ -152,33 +140,15 @@
#define OP2_RANGE_UNDERFLOW() (_ssa_op2_range_underflow (op_array, ssa, opline, ssa_op))
#define OP2_RANGE_OVERFLOW() (_ssa_op2_range_overflow (op_array, ssa, opline, ssa_op))
+BEGIN_EXTERN_C()
+ZEND_API uint32_t ZEND_FASTCALL zend_array_type_info(const zval *zv);
+END_EXTERN_C()
+
static zend_always_inline uint32_t _const_op_type(const zval *zv) {
if (Z_TYPE_P(zv) == IS_CONSTANT_AST) {
return MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY;
} else if (Z_TYPE_P(zv) == IS_ARRAY) {
- HashTable *ht = Z_ARRVAL_P(zv);
- uint32_t tmp = MAY_BE_ARRAY;
- zend_string *str;
- zval *val;
-
- if (Z_REFCOUNTED_P(zv)) {
- tmp |= MAY_BE_RC1 | MAY_BE_RCN;
- } else {
- tmp |= MAY_BE_RCN;
- }
-
- ZEND_HASH_FOREACH_STR_KEY_VAL(ht, str, val) {
- if (str) {
- tmp |= MAY_BE_ARRAY_KEY_STRING;
- } else {
- tmp |= MAY_BE_ARRAY_KEY_LONG;
- }
- tmp |= 1 << (Z_TYPE_P(val) + MAY_BE_ARRAY_SHIFT);
- } ZEND_HASH_FOREACH_END();
- if (HT_IS_PACKED(ht)) {
- tmp &= ~(MAY_BE_ARRAY_NUMERIC_HASH|MAY_BE_ARRAY_STRING_HASH);
- }
- return tmp;
+ return zend_array_type_info(zv);
} else {
uint32_t tmp = (1 << Z_TYPE_P(zv));
@@ -246,13 +216,13 @@
BEGIN_EXTERN_C()
-ZEND_API int zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa);
-ZEND_API int zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa);
+ZEND_API void zend_ssa_find_false_dependencies(const zend_op_array *op_array, zend_ssa *ssa);
+ZEND_API void zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa);
ZEND_API int zend_ssa_inference(zend_arena **raena, const zend_op_array *op_array, const zend_script *script, zend_ssa *ssa, zend_long optimization_level);
ZEND_API uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert);
-ZEND_API int zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp);
+ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp);
ZEND_API uint32_t zend_fetch_arg_info_type(
const zend_script *script, zend_arg_info *arg_info, zend_class_entry **pce);
@@ -262,10 +232,10 @@
const zend_function *func, const zend_script *script,
zend_class_entry **ce, bool *ce_is_instanceof, bool use_tentative_return_info);
-ZEND_API int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, uint32_t t1, uint32_t t2);
-ZEND_API int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa);
+ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, uint32_t t1, uint32_t t2);
+ZEND_API bool zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa);
-ZEND_API int zend_update_type_info(
+ZEND_API zend_result zend_update_type_info(
const zend_op_array *op_array, zend_ssa *ssa, const zend_script *script,
zend_op *opline, zend_ssa_op *ssa_op, const zend_op **ssa_opcodes,
zend_long optimization_level);
Modified: trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_optimizer.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_optimizer.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_optimizer.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -88,17 +88,16 @@
zend_op_array main_op_array;
HashTable function_table;
HashTable class_table;
- uint32_t first_early_binding_opline; /* the linked list of delayed declarations */
} zend_script;
typedef void (*zend_optimizer_pass_t)(zend_script *, void *context);
BEGIN_EXTERN_C()
-ZEND_API int zend_optimize_script(zend_script *script, zend_long optimization_level, zend_long debug_level);
+ZEND_API void zend_optimize_script(zend_script *script, zend_long optimization_level, zend_long debug_level);
ZEND_API int zend_optimizer_register_pass(zend_optimizer_pass_t pass);
ZEND_API void zend_optimizer_unregister_pass(int idx);
-int zend_optimizer_startup(void);
-int zend_optimizer_shutdown(void);
+zend_result zend_optimizer_startup(void);
+zend_result zend_optimizer_shutdown(void);
END_EXTERN_C()
#endif
Modified: trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_ssa.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_ssa.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/Optimizer/zend_ssa.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -145,10 +145,11 @@
BEGIN_EXTERN_C()
-ZEND_API int zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa);
-ZEND_API int zend_ssa_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa);
+ZEND_API zend_result zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa);
+ZEND_API void zend_ssa_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa);
ZEND_API int zend_ssa_rename_op(const zend_op_array *op_array, const zend_op *opline, uint32_t k, uint32_t build_flags, int ssa_vars_count, zend_ssa_op *ssa_ops, int *var);
-int zend_ssa_unlink_use_chain(zend_ssa *ssa, int op, int var);
+void zend_ssa_unlink_use_chain(zend_ssa *ssa, int op, int var);
+void zend_ssa_replace_use_chain(zend_ssa *ssa, int op, int new_op, int var);
void zend_ssa_remove_predecessor(zend_ssa *ssa, int from, int to);
void zend_ssa_remove_defs_of_instr(zend_ssa *ssa, zend_ssa_op *ssa_op);
Modified: trunk/MgDev/Oem/php/include/Zend/zend.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -20,7 +20,7 @@
#ifndef ZEND_H
#define ZEND_H
-#define ZEND_VERSION "4.1.11"
+#define ZEND_VERSION "4.2.4"
#define ZEND_ENGINE_3
@@ -115,6 +115,7 @@
zval *default_properties_table;
HashTable *constants_table;
uint32_t ce_flags;
+ HashTable *backed_enum_table;
} zend_class_mutable_data;
typedef struct _zend_class_dependency {
@@ -183,6 +184,8 @@
/* allocated only if class implements Iterator or IteratorAggregate interface */
zend_class_iterator_funcs *iterator_funcs_ptr;
+ /* allocated only if class implements ArrayAccess interface */
+ zend_class_arrayaccess_funcs *arrayaccess_funcs_ptr;
/* handlers */
union {
@@ -295,8 +298,9 @@
ZEND_API void zend_print_flat_zval_r(zval *expr);
void zend_print_flat_zval_r_to_buf(smart_str *str, zval *expr);
-#define zend_print_variable(var) \
- zend_print_zval((var), 0)
+static zend_always_inline size_t zend_print_variable(zval *var) {
+ return zend_print_zval(var, 0);
+}
ZEND_API ZEND_COLD void zend_output_debug_string(bool trigger_break, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_API.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_API.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_API.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -95,6 +95,17 @@
#define ZEND_NS_FENTRY(ns, zend_name, name, arg_info, flags) ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, #zend_name), name, arg_info, flags)
#define ZEND_NS_RAW_FENTRY(ns, zend_name, name, arg_info, flags) ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, zend_name), name, arg_info, flags)
+/**
+ * Note that if you are asserting that a function is compile-time evaluable, you are asserting that
+ *
+ * 1. The function will always have the same result for the same arguments
+ * 2. The function does not depend on global state such as ini settings or locale (e.g. mb_strtolower), number_format(), etc.
+ * 3. The function does not have side effects. It is okay if they throw
+ * or warn on invalid arguments, as we detect this and will discard the evaluation result.
+ * 4. The function will not take an unreasonable amount of time or memory to compute on code that may be seen in practice.
+ * (e.g. str_repeat is special cased to check the length instead of using this)
+ */
+#define ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(name, arg_info) ZEND_RAW_FENTRY(#name, zif_##name, arg_info, ZEND_ACC_COMPILE_TIME_EVAL)
/* Same as ZEND_NS_NAMED_FE */
#define ZEND_NS_RAW_NAMED_FE(ns, zend_name, name, arg_info) ZEND_NS_RAW_FENTRY(ns, #zend_name, name, arg_info, 0)
@@ -292,6 +303,7 @@
class_container.interfaces = NULL; \
class_container.get_iterator = NULL; \
class_container.iterator_funcs_ptr = NULL; \
+ class_container.arrayaccess_funcs_ptr = NULL; \
class_container.info.internal.module = NULL; \
class_container.info.internal.builtin_functions = functions; \
}
@@ -309,20 +321,21 @@
#define CE_DEFAULT_PROPERTIES_TABLE(ce) \
zend_class_default_properties_table(ce)
+#define CE_BACKED_ENUM_TABLE(ce) \
+ zend_class_backed_enum_table(ce)
+
#define ZEND_FCI_INITIALIZED(fci) ((fci).size != 0)
ZEND_API int zend_next_free_module(void);
BEGIN_EXTERN_C()
-ZEND_API zend_result _zend_get_parameters_array_ex(uint32_t param_count, zval *argument_array);
+ZEND_API zend_result zend_get_parameters_array_ex(uint32_t param_count, zval *argument_array);
/* internal function to efficiently copy parameters when executing __call() */
ZEND_API zend_result zend_copy_parameters_array(uint32_t param_count, zval *argument_array);
#define zend_get_parameters_array(ht, param_count, argument_array) \
- _zend_get_parameters_array_ex(param_count, argument_array)
-#define zend_get_parameters_array_ex(param_count, argument_array) \
- _zend_get_parameters_array_ex(param_count, argument_array)
+ zend_get_parameters_array_ex(param_count, argument_array)
#define zend_parse_parameters_none() \
(EXPECTED(ZEND_NUM_ARGS() == 0) ? SUCCESS : (zend_wrong_parameters_none_error(), FAILURE))
#define zend_parse_parameters_none_throw() \
@@ -367,8 +380,9 @@
ZEND_API zend_result zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce, bool persistent);
-#define zend_register_class_alias(name, ce) \
- zend_register_class_alias_ex(name, sizeof(name)-1, ce, 1)
+static zend_always_inline zend_result zend_register_class_alias(const char *name, zend_class_entry *ce) {
+ return zend_register_class_alias_ex(name, strlen(name), ce, 1);
+}
#define zend_register_ns_class_alias(ns, name, ce) \
zend_register_class_alias_ex(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, ce, 1)
@@ -376,9 +390,10 @@
ZEND_API zend_result zend_disable_class(const char *class_name, size_t class_name_length);
ZEND_API ZEND_COLD void zend_wrong_param_count(void);
+ZEND_API ZEND_COLD void zend_wrong_property_read(zval *object, zval *property);
#define IS_CALLABLE_CHECK_SYNTAX_ONLY (1<<0)
-#define IS_CALLABLE_CHECK_SILENT (1<<3)
+#define IS_CALLABLE_SUPPRESS_DEPRECATIONS (1<<1)
ZEND_API void zend_release_fcall_info_cache(zend_fcall_info_cache *fcc);
ZEND_API zend_string *zend_get_callable_name_ex(zval *callable, zend_object *object);
@@ -439,6 +454,26 @@
}
}
+static zend_always_inline void zend_class_set_backed_enum_table(zend_class_entry *ce, HashTable *backed_enum_table)
+{
+ if (ZEND_MAP_PTR(ce->mutable_data) && ce->type == ZEND_USER_CLASS) {
+ zend_class_mutable_data *mutable_data = (zend_class_mutable_data*)ZEND_MAP_PTR_GET_IMM(ce->mutable_data);
+ mutable_data->backed_enum_table = backed_enum_table;
+ } else {
+ ce->backed_enum_table = backed_enum_table;
+ }
+}
+
+static zend_always_inline HashTable *zend_class_backed_enum_table(zend_class_entry *ce)
+{
+ if (ZEND_MAP_PTR(ce->mutable_data) && ce->type == ZEND_USER_CLASS) {
+ zend_class_mutable_data *mutable_data = (zend_class_mutable_data*)ZEND_MAP_PTR_GET_IMM(ce->mutable_data);
+ return mutable_data->backed_enum_table;
+ } else {
+ return ce->backed_enum_table;
+ }
+}
+
ZEND_API void zend_update_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name, zval *value);
ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
ZEND_API void zend_update_property_null(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length);
@@ -473,10 +508,8 @@
#define ZEND_IS_METHOD_CALL() (EX(func)->common.scope != NULL)
#define WRONG_PARAM_COUNT ZEND_WRONG_PARAM_COUNT()
-#define WRONG_PARAM_COUNT_WITH_RETVAL(ret) ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret)
#define ZEND_NUM_ARGS() EX_NUM_ARGS()
#define ZEND_WRONG_PARAM_COUNT() { zend_wrong_param_count(); return; }
-#define ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret) { zend_wrong_param_count(); return ret; }
#ifndef ZEND_WIN32
#define DLEXPORT
@@ -506,18 +539,42 @@
ZEND_API void add_assoc_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref);
ZEND_API void add_assoc_zval_ex(zval *arg, const char *key, size_t key_len, zval *value);
-#define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key, strlen(__key), __n)
-#define add_assoc_null(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key))
-#define add_assoc_bool(__arg, __key, __b) add_assoc_bool_ex(__arg, __key, strlen(__key), __b)
-#define add_assoc_resource(__arg, __key, __r) add_assoc_resource_ex(__arg, __key, strlen(__key), __r)
-#define add_assoc_double(__arg, __key, __d) add_assoc_double_ex(__arg, __key, strlen(__key), __d)
-#define add_assoc_str(__arg, __key, __str) add_assoc_str_ex(__arg, __key, strlen(__key), __str)
-#define add_assoc_string(__arg, __key, __str) add_assoc_string_ex(__arg, __key, strlen(__key), __str)
-#define add_assoc_stringl(__arg, __key, __str, __length) add_assoc_stringl_ex(__arg, __key, strlen(__key), __str, __length)
-#define add_assoc_array(__arg, __key, __arr) add_assoc_array_ex(__arg, __key, strlen(__key), __arr)
-#define add_assoc_object(__arg, __key, __obj) add_assoc_object_ex(__arg, __key, strlen(__key), __obj)
-#define add_assoc_reference(__arg, __key, __ref) add_assoc_object_ex(__arg, __key, strlen(__key), __ref)
-#define add_assoc_zval(__arg, __key, __value) add_assoc_zval_ex(__arg, __key, strlen(__key), __value)
+static zend_always_inline void add_assoc_long(zval *arg, const char *key, zend_long n) {
+ add_assoc_long_ex(arg, key, strlen(key), n);
+}
+static zend_always_inline void add_assoc_null(zval *arg, const char *key) {
+ add_assoc_null_ex(arg, key, strlen(key));
+}
+static zend_always_inline void add_assoc_bool(zval *arg, const char *key, bool b) {
+ add_assoc_bool_ex(arg, key, strlen(key), b);
+}
+static zend_always_inline void add_assoc_resource(zval *arg, const char *key, zend_resource *r) {
+ add_assoc_resource_ex(arg, key, strlen(key), r);
+}
+static zend_always_inline void add_assoc_double(zval *arg, const char *key, double d) {
+ add_assoc_double_ex(arg, key, strlen(key), d);
+}
+static zend_always_inline void add_assoc_str(zval *arg, const char *key, zend_string *str) {
+ add_assoc_str_ex(arg, key, strlen(key), str);
+}
+static zend_always_inline void add_assoc_string(zval *arg, const char *key, const char *str) {
+ add_assoc_string_ex(arg, key, strlen(key), str);
+}
+static zend_always_inline void add_assoc_stringl(zval *arg, const char *key, const char *str, size_t length) {
+ add_assoc_stringl_ex(arg, key, strlen(key), str, length);
+}
+static zend_always_inline void add_assoc_array(zval *arg, const char *key, zend_array *arr) {
+ add_assoc_array_ex(arg, key, strlen(key), arr);
+}
+static zend_always_inline void add_assoc_object(zval *arg, const char *key, zend_object *obj) {
+ add_assoc_object_ex(arg, key, strlen(key), obj);
+}
+static zend_always_inline void add_assoc_reference(zval *arg, const char *key, zend_reference *ref) {
+ add_assoc_reference_ex(arg, key, strlen(key), ref);
+}
+static zend_always_inline void add_assoc_zval(zval *arg, const char *key, zval *value) {
+ add_assoc_zval_ex(arg, key, strlen(key), value);
+}
ZEND_API void add_index_long(zval *arg, zend_ulong index, zend_long n);
ZEND_API void add_index_null(zval *arg, zend_ulong index);
@@ -568,20 +625,43 @@
ZEND_API void add_property_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref);
ZEND_API void add_property_zval_ex(zval *arg, const char *key, size_t key_len, zval *value);
-#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key), __n)
-#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key))
-#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key), __b)
-#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key), __r)
-#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key), __d)
-#define add_property_str(__arg, __key, __str) add_property_str_ex(__arg, __key, strlen(__key), __str)
-#define add_property_string(__arg, __key, __str) add_property_string_ex(__arg, __key, strlen(__key), __str)
-#define add_property_stringl(__arg, __key, __str, __length) add_property_stringl_ex(__arg, __key, strlen(__key), __str, __length)
-#define add_property_array(__arg, __key, __arr) add_property_array_ex(__arg, __key, strlen(__key), __arr)
-#define add_property_object(__arg, __key, __obj) add_property_object_ex(__arg, __key, strlen(__key), __obj)
-#define add_property_reference(__arg, __key, __ref) add_property_reference_ex(__arg, __key, strlen(__key), __ref)
-#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key), __value)
+static zend_always_inline void add_property_long(zval *arg, const char *key, zend_long n) {
+ add_property_long_ex(arg, key, strlen(key), n);
+}
+static zend_always_inline void add_property_null(zval *arg, const char *key) {
+ add_property_null_ex(arg, key, strlen(key));
+}
+static zend_always_inline void add_property_bool(zval *arg, const char *key, bool b) {
+ add_property_bool_ex(arg, key, strlen(key), b);
+}
+static zend_always_inline void add_property_resource(zval *arg, const char *key, zend_resource *r) {
+ add_property_resource_ex(arg, key, strlen(key), r);
+}
+static zend_always_inline void add_property_double(zval *arg, const char *key, double d) {
+ add_property_double_ex(arg, key, strlen(key), d);
+}
+static zend_always_inline void add_property_str(zval *arg, const char *key, zend_string *str) {
+ add_property_str_ex(arg, key, strlen(key), str);
+}
+static zend_always_inline void add_property_string(zval *arg, const char *key, const char *str) {
+ add_property_string_ex(arg, key, strlen(key), str);
+}
+static zend_always_inline void add_property_stringl(zval *arg, const char *key, const char *str, size_t length) {
+ add_property_stringl_ex(arg, key, strlen(key), str, length);
+}
+static zend_always_inline void add_property_array(zval *arg, const char *key, zend_array *arr) {
+ add_property_array_ex(arg, key, strlen(key), arr);
+}
+static zend_always_inline void add_property_object(zval *arg, const char *key, zend_object *obj) {
+ add_property_object_ex(arg, key, strlen(key), obj);
+}
+static zend_always_inline void add_property_reference(zval *arg, const char *key, zend_reference *ref) {
+ add_property_reference_ex(arg, key, strlen(key), ref);
+}
+static zend_always_inline void add_property_zval(zval *arg, const char *key, zval *value) {
+ add_property_zval_ex(arg, key, strlen(key), value);
+}
-
ZEND_API zend_result _call_user_function_impl(zval *object, zval *function_name, zval *retval_ptr, uint32_t param_count, zval params[], HashTable *named_params);
#define call_user_function(function_table, object, function_name, retval_ptr, param_count, params) \
@@ -646,6 +726,9 @@
*/
ZEND_API zend_result zend_fcall_info_call(zend_fcall_info *fci, zend_fcall_info_cache *fcc, zval *retval, zval *args);
+/* Can only return FAILURE if EG(active) is false during late engine shutdown.
+ * If the call or call setup throws, EG(exception) will be set and the retval
+ * will be UNDEF. Otherwise, the retval will be a non-UNDEF value. */
ZEND_API zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache);
/* Call the provided zend_function with the given params.
@@ -679,6 +762,13 @@
ZEND_API void zend_call_known_instance_method_with_2_params(
zend_function *fn, zend_object *object, zval *retval_ptr, zval *param1, zval *param2);
+/* Call method if it exists. Return FAILURE if method does not exist or call failed.
+ * If FAILURE is returned, retval will be UNDEF. As such, destroying retval unconditionally
+ * is legal. */
+ZEND_API zend_result zend_call_method_if_exists(
+ zend_object *object, zend_string *method_name, zval *retval,
+ uint32_t param_count, zval *params);
+
ZEND_API zend_result zend_set_hash_symbol(zval *symbol, const char *name, size_t name_length, bool is_ref, int num_symbol_tables, ...);
ZEND_API zend_result zend_delete_global_variable(zend_string *name);
@@ -689,13 +779,16 @@
ZEND_API zend_result zend_set_local_var(zend_string *name, zval *value, bool force);
ZEND_API zend_result zend_set_local_var_str(const char *name, size_t len, zval *value, bool force);
-static zend_always_inline zend_result zend_forbid_dynamic_call(const char *func_name)
+static zend_always_inline zend_result zend_forbid_dynamic_call(void)
{
zend_execute_data *ex = EG(current_execute_data);
ZEND_ASSERT(ex != NULL && ex->func != NULL);
if (ZEND_CALL_INFO(ex) & ZEND_CALL_DYNAMIC) {
- zend_throw_error(NULL, "Cannot call %s dynamically", func_name);
+ zend_string *function_or_method_name = get_active_function_or_method_name();
+ zend_throw_error(NULL, "Cannot call %.*s() dynamically",
+ (int) ZSTR_LEN(function_or_method_name), ZSTR_VAL(function_or_method_name));
+ zend_string_release(function_or_method_name);
return FAILURE;
}
@@ -702,8 +795,18 @@
return SUCCESS;
}
-ZEND_API ZEND_COLD const char *zend_get_object_type(const zend_class_entry *ce);
+ZEND_API ZEND_COLD const char *zend_get_object_type_case(const zend_class_entry *ce, bool upper_case);
+static zend_always_inline const char *zend_get_object_type(const zend_class_entry *ce)
+{
+ return zend_get_object_type_case(ce, false);
+}
+
+static zend_always_inline const char *zend_get_object_type_uc(const zend_class_entry *ce)
+{
+ return zend_get_object_type_case(ce, true);
+}
+
ZEND_API bool zend_is_iterable(zval *iterable);
ZEND_API bool zend_is_countable(zval *countable);
@@ -720,9 +823,19 @@
#define CHECK_ZVAL_STRING(z)
#endif
-#define CHECK_ZVAL_NULL_PATH(p) (Z_STRLEN_P(p) != strlen(Z_STRVAL_P(p)))
-#define CHECK_NULL_PATH(p, l) (strlen(p) != (size_t)(l))
+static zend_always_inline bool zend_str_has_nul_byte(const zend_string *str)
+{
+ return ZSTR_LEN(str) != strlen(ZSTR_VAL(str));
+}
+static zend_always_inline bool zend_char_has_nul_byte(const char *s, size_t known_length)
+{
+ return known_length != strlen(s);
+}
+/* Compatibility with PHP 8.1 and below */
+#define CHECK_ZVAL_NULL_PATH(p) zend_str_has_nul_byte(Z_STR_P(p))
+#define CHECK_NULL_PATH(p, l) zend_char_has_nul_byte(p, l)
+
#define ZVAL_STRINGL(z, s, l) do { \
ZVAL_NEW_STR(z, zend_string_init(s, l, 0)); \
} while (0)
@@ -1287,8 +1400,8 @@
_(Z_EXPECTED_ARRAY_OR_NULL, "of type ?array") \
_(Z_EXPECTED_ARRAY_OR_LONG, "of type array|int") \
_(Z_EXPECTED_ARRAY_OR_LONG_OR_NULL, "of type array|int|null") \
- _(Z_EXPECTED_ITERABLE, "of type iterable") \
- _(Z_EXPECTED_ITERABLE_OR_NULL, "of type ?iterable") \
+ _(Z_EXPECTED_ITERABLE, "of type Traversable|array") \
+ _(Z_EXPECTED_ITERABLE_OR_NULL, "of type Traversable|array|null") \
_(Z_EXPECTED_FUNC, "a valid callback") \
_(Z_EXPECTED_FUNC_OR_NULL, "a valid callback or null") \
_(Z_EXPECTED_RESOURCE, "of type resource") \
@@ -1425,6 +1538,10 @@
SEPARATE_ZVAL_NOREF(_arg); \
}
+/* get the zval* for a previously parsed argument */
+#define Z_PARAM_GET_PREV_ZVAL(dest) \
+ zend_parse_arg_zval_deref(_arg, &dest, 0);
+
/* old "|" */
#define Z_PARAM_OPTIONAL \
_optional = 1;
@@ -1587,6 +1704,10 @@
#define Z_PARAM_FUNC_OR_NULL(dest_fci, dest_fcc) \
Z_PARAM_FUNC_EX(dest_fci, dest_fcc, 1, 0)
+#define Z_PARAM_FUNC_OR_NULL_WITH_ZVAL(dest_fci, dest_fcc, dest_zp) \
+ Z_PARAM_FUNC_EX(dest_fci, dest_fcc, 1, 0) \
+ Z_PARAM_GET_PREV_ZVAL(dest_zp)
+
/* old "h" */
#define Z_PARAM_ARRAY_HT_EX2(dest, check_null, deref, separate) \
Z_PARAM_PROLOGUE(deref, separate); \
@@ -1861,7 +1982,7 @@
Z_PARAM_VARIADIC_EX(spec, dest, dest_num, 0)
#define Z_PARAM_VARIADIC_WITH_NAMED(dest, dest_num, dest_named) do { \
- int _num_varargs = _num_args - _i; \
+ uint32_t _num_varargs = _num_args - _i; \
if (EXPECTED(_num_varargs > 0)) { \
dest = _real_arg + 1; \
dest_num = _num_varargs; \
Modified: trunk/MgDev/Oem/php/include/Zend/zend_alloc.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_alloc.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_alloc.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -27,13 +27,7 @@
#include "zend.h"
#ifndef ZEND_MM_ALIGNMENT
-# define ZEND_MM_ALIGNMENT Z_UL(8)
-# define ZEND_MM_ALIGNMENT_LOG2 Z_L(3)
-#elif ZEND_MM_ALIGNMENT < 4
-# undef ZEND_MM_ALIGNMENT
-# undef ZEND_MM_ALIGNMENT_LOG2
-# define ZEND_MM_ALIGNMENT Z_UL(4)
-# define ZEND_MM_ALIGNMENT_LOG2 Z_L(2)
+# error "ZEND_MM_ALIGNMENT was not defined during configure"
#endif
#define ZEND_MM_ALIGNMENT_MASK ~(ZEND_MM_ALIGNMENT - 1)
@@ -68,19 +62,19 @@
BEGIN_EXTERN_C()
-ZEND_API char* ZEND_FASTCALL zend_strndup(const char *s, size_t length) ZEND_ATTRIBUTE_MALLOC;
+ZEND_API ZEND_ATTRIBUTE_MALLOC char* ZEND_FASTCALL zend_strndup(const char *s, size_t length);
-ZEND_API void* ZEND_FASTCALL _emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE(1);
-ZEND_API void* ZEND_FASTCALL _safe_emalloc(size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC;
-ZEND_API void* ZEND_FASTCALL _safe_malloc(size_t nmemb, size_t size, size_t offset) ZEND_ATTRIBUTE_MALLOC;
+ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(1);
+ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _safe_emalloc(size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
+ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _safe_malloc(size_t nmemb, size_t size, size_t offset);
ZEND_API void ZEND_FASTCALL _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
-ZEND_API void* ZEND_FASTCALL _ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE2(1,2);
+ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE2(1,2);
ZEND_API void* ZEND_FASTCALL _erealloc(void *ptr, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(2);
ZEND_API void* ZEND_FASTCALL _erealloc2(void *ptr, size_t size, size_t copy_size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(2);
ZEND_API void* ZEND_FASTCALL _safe_erealloc(void *ptr, size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void* ZEND_FASTCALL _safe_realloc(void *ptr, size_t nmemb, size_t size, size_t offset);
-ZEND_API char* ZEND_FASTCALL _estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC;
-ZEND_API char* ZEND_FASTCALL _estrndup(const char *s, size_t length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC;
+ZEND_API ZEND_ATTRIBUTE_MALLOC char* ZEND_FASTCALL _estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
+ZEND_API ZEND_ATTRIBUTE_MALLOC char* ZEND_FASTCALL _estrndup(const char *s, size_t length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API size_t ZEND_FASTCALL _zend_mem_block_size(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
#include "zend_alloc_sizes.h"
@@ -89,12 +83,12 @@
#if !ZEND_DEBUG && defined(HAVE_BUILTIN_CONSTANT_P)
# define _ZEND_BIN_ALLOCATOR_DEF(_num, _size, _elements, _pages, x, y) \
- ZEND_API void* ZEND_FASTCALL _emalloc_ ## _size(void) ZEND_ATTRIBUTE_MALLOC;
+ ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _emalloc_ ## _size(void);
ZEND_MM_BINS_INFO(_ZEND_BIN_ALLOCATOR_DEF, x, y)
-ZEND_API void* ZEND_FASTCALL _emalloc_large(size_t size) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE(1);
-ZEND_API void* ZEND_FASTCALL _emalloc_huge(size_t size) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE(1);
+ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _emalloc_large(size_t size) ZEND_ATTRIBUTE_ALLOC_SIZE(1);
+ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _emalloc_huge(size_t size) ZEND_ATTRIBUTE_ALLOC_SIZE(1);
# define _ZEND_BIN_ALLOCATOR_SELECTOR_START(_num, _size, _elements, _pages, size, y) \
((size <= _size) ? _emalloc_ ## _size() :
@@ -185,9 +179,10 @@
#define estrndup_rel(s, length) _estrndup((s), (length) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define zend_mem_block_size_rel(ptr) _zend_mem_block_size((ptr) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
-ZEND_API void * __zend_malloc(size_t len) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE(1);
-ZEND_API void * __zend_calloc(size_t nmemb, size_t len) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE2(1,2);
+ZEND_API ZEND_ATTRIBUTE_MALLOC void * __zend_malloc(size_t len) ZEND_ATTRIBUTE_ALLOC_SIZE(1);
+ZEND_API ZEND_ATTRIBUTE_MALLOC void * __zend_calloc(size_t nmemb, size_t len) ZEND_ATTRIBUTE_ALLOC_SIZE2(1,2);
ZEND_API void * __zend_realloc(void *p, size_t len) ZEND_ATTRIBUTE_ALLOC_SIZE(2);
+ZEND_API ZEND_ATTRIBUTE_MALLOC char * __zend_strdup(const char *s);
/* Selective persistent/non persistent allocation macros */
#define pemalloc(size, persistent) ((persistent)?__zend_malloc(size):emalloc(size))
@@ -207,7 +202,7 @@
#define safe_perealloc(ptr, nmemb, size, offset, persistent) ((persistent)?_safe_realloc((ptr), (nmemb), (size), (offset)):safe_erealloc((ptr), (nmemb), (size), (offset)))
#define perealloc_recoverable(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_recoverable((ptr), (size)))
#define perealloc2_recoverable(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc2_recoverable((ptr), (size), (copy_size)))
-#define pestrdup(s, persistent) ((persistent)?strdup(s):estrdup(s))
+#define pestrdup(s, persistent) ((persistent)?__zend_strdup(s):estrdup(s))
#define pestrndup(s, length, persistent) ((persistent)?zend_strndup((s),(length)):estrndup((s),(length)))
#define pemalloc_rel(size, persistent) ((persistent)?__zend_malloc(size):emalloc_rel(size))
@@ -229,6 +224,7 @@
ZEND_API size_t zend_memory_usage(bool real_usage);
ZEND_API size_t zend_memory_peak_usage(bool real_usage);
+ZEND_API void zend_memory_reset_peak_usage(void);
/* fast cache for HashTables */
#define ALLOC_HASHTABLE(ht) \
@@ -248,7 +244,7 @@
ZEND_API zend_mm_heap *zend_mm_startup(void);
ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, bool full_shutdown, bool silent);
-ZEND_API void* ZEND_FASTCALL _zend_mm_alloc(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC;
+ZEND_API ZEND_ATTRIBUTE_MALLOC void* ZEND_FASTCALL _zend_mm_alloc(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(2);
ZEND_API void ZEND_FASTCALL _zend_mm_free(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void* ZEND_FASTCALL _zend_mm_realloc(zend_mm_heap *heap, void *p, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void* ZEND_FASTCALL _zend_mm_realloc2(zend_mm_heap *heap, void *p, size_t size, size_t copy_size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_ast.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_ast.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_ast.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -355,6 +355,9 @@
static zend_always_inline zend_ast *zend_ast_create_binary_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) {
return zend_ast_create_ex(ZEND_AST_BINARY_OP, opcode, op0, op1);
}
+
+zend_ast *zend_ast_create_concat_op(zend_ast *op0, zend_ast *op1);
+
static zend_always_inline zend_ast *zend_ast_create_assign_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) {
return zend_ast_create_ex(ZEND_AST_ASSIGN_OP, opcode, op0, op1);
}
Added: trunk/MgDev/Oem/php/include/Zend/zend_atomic.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_atomic.h (rev 0)
+++ trunk/MgDev/Oem/php/include/Zend/zend_atomic.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -0,0 +1,179 @@
+/*
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | https://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license at php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Levi Morrison <morrison.levi at gmail.com> |
+ +----------------------------------------------------------------------+
+ */
+
+#ifndef ZEND_ATOMIC_H
+#define ZEND_ATOMIC_H
+
+#include "zend_portability.h"
+
+#include <stdbool.h>
+
+#define ZEND_GCC_PREREQ(x, y) \
+ ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || (__GNUC__ > (x)))
+
+/* Builtins are used to avoid library linkage */
+#if __has_feature(c_atomic)
+#define HAVE_C11_ATOMICS 1
+#elif ZEND_GCC_PREREQ(4, 7)
+#define HAVE_GNUC_ATOMICS 1
+#elif defined(__GNUC__)
+#define HAVE_SYNC_ATOMICS 1
+#elif !defined(ZEND_WIN32)
+#define HAVE_NO_ATOMICS 1
+#endif
+
+#undef ZEND_GCC_PREREQ
+
+/* Treat zend_atomic_* types as opaque. They have definitions only for size
+ * and alignment purposes.
+ */
+
+#if defined(ZEND_WIN32) || defined(HAVE_SYNC_ATOMICS)
+typedef struct zend_atomic_bool_s {
+ volatile char value;
+} zend_atomic_bool;
+#elif defined(HAVE_C11_ATOMICS)
+typedef struct zend_atomic_bool_s {
+ _Atomic(bool) value;
+} zend_atomic_bool;
+#else
+typedef struct zend_atomic_bool_s {
+ volatile bool value;
+} zend_atomic_bool;
+#endif
+
+BEGIN_EXTERN_C()
+
+#ifdef ZEND_WIN32
+
+#ifndef InterlockedExchange8
+#define InterlockedExchange8 _InterlockedExchange8
+#endif
+#ifndef InterlockedOr8
+#define InterlockedOr8 _InterlockedOr8
+#endif
+
+#define ZEND_ATOMIC_BOOL_INIT(obj, desired) ((obj)->value = (desired))
+
+static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
+ return InterlockedExchange8(&obj->value, desired);
+}
+
+/* On this platform it is non-const due to Iterlocked API*/
+static zend_always_inline bool zend_atomic_bool_load_ex(zend_atomic_bool *obj) {
+ /* Or'ing with false won't change the value. */
+ return InterlockedOr8(&obj->value, false);
+}
+
+static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
+ (void)InterlockedExchange8(&obj->value, desired);
+}
+
+#elif defined(HAVE_C11_ATOMICS)
+
+#define ZEND_ATOMIC_BOOL_INIT(obj, desired) __c11_atomic_init(&(obj)->value, (desired))
+
+static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
+ return __c11_atomic_exchange(&obj->value, desired, __ATOMIC_SEQ_CST);
+}
+
+static zend_always_inline bool zend_atomic_bool_load_ex(const zend_atomic_bool *obj) {
+ return __c11_atomic_load(&obj->value, __ATOMIC_SEQ_CST);
+}
+
+static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
+ __c11_atomic_store(&obj->value, desired, __ATOMIC_SEQ_CST);
+}
+
+#elif defined(HAVE_GNUC_ATOMICS)
+
+#define ZEND_ATOMIC_BOOL_INIT(obj, desired) ((obj)->value = (desired))
+
+static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
+ bool prev = false;
+ __atomic_exchange(&obj->value, &desired, &prev, __ATOMIC_SEQ_CST);
+ return prev;
+}
+
+static zend_always_inline bool zend_atomic_bool_load_ex(const zend_atomic_bool *obj) {
+ bool prev = false;
+ __atomic_load(&obj->value, &prev, __ATOMIC_SEQ_CST);
+ return prev;
+}
+
+static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
+ __atomic_store(&obj->value, &desired, __ATOMIC_SEQ_CST);
+}
+
+#elif defined(HAVE_SYNC_ATOMICS)
+
+#define ZEND_ATOMIC_BOOL_INIT(obj, desired) ((obj)->value = (desired))
+
+static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
+ bool prev = __sync_lock_test_and_set(&obj->value, desired);
+
+ /* __sync_lock_test_and_set only does an acquire barrier, so sync
+ * immediately after.
+ */
+ __sync_synchronize();
+ return prev;
+}
+
+static zend_always_inline bool zend_atomic_bool_load_ex(zend_atomic_bool *obj) {
+ /* Or'ing false won't change the value */
+ return __sync_fetch_and_or(&obj->value, false);
+}
+
+static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
+ __sync_synchronize();
+ obj->value = desired;
+ __sync_synchronize();
+}
+
+#elif defined(HAVE_NO_ATOMICS)
+
+#warning No atomics support detected. Please open an issue with platform details.
+
+#define ZEND_ATOMIC_BOOL_INIT(obj, desired) ((obj)->value = (desired))
+
+static zend_always_inline void zend_atomic_bool_store_ex(zend_atomic_bool *obj, bool desired) {
+ obj->value = desired;
+}
+
+static zend_always_inline bool zend_atomic_bool_load_ex(const zend_atomic_bool *obj) {
+ return obj->value;
+}
+
+static zend_always_inline bool zend_atomic_bool_exchange_ex(zend_atomic_bool *obj, bool desired) {
+ bool prev = obj->value;
+ obj->value = desired;
+ return prev;
+}
+
+#endif
+
+ZEND_API void zend_atomic_bool_init(zend_atomic_bool *obj, bool desired);
+ZEND_API bool zend_atomic_bool_exchange(zend_atomic_bool *obj, bool desired);
+ZEND_API void zend_atomic_bool_store(zend_atomic_bool *obj, bool desired);
+
+#if defined(ZEND_WIN32) || defined(HAVE_SYNC_ATOMICS)
+/* On these platforms it is non-const due to underlying APIs. */
+ZEND_API bool zend_atomic_bool_load(zend_atomic_bool *obj);
+#else
+ZEND_API bool zend_atomic_bool_load(const zend_atomic_bool *obj);
+#endif
+
+END_EXTERN_C()
+
+#endif
Modified: trunk/MgDev/Oem/php/include/Zend/zend_attributes.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_attributes.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_attributes.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -40,6 +40,9 @@
BEGIN_EXTERN_C()
extern ZEND_API zend_class_entry *zend_ce_attribute;
+extern ZEND_API zend_class_entry *zend_ce_allow_dynamic_properties;
+extern ZEND_API zend_class_entry *zend_ce_sensitive_parameter;
+extern ZEND_API zend_class_entry *zend_ce_sensitive_parameter_value;
typedef struct {
zend_string *name;
@@ -74,6 +77,7 @@
ZEND_API zend_string *zend_get_attribute_target_names(uint32_t targets);
ZEND_API bool zend_is_attribute_repeated(HashTable *attributes, zend_attribute *attr);
+ZEND_API zend_internal_attribute *zend_mark_internal_attribute(zend_class_entry *ce);
ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_class_entry *ce, uint32_t flags);
ZEND_API zend_internal_attribute *zend_internal_attribute_get(zend_string *lcname);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_attributes_arginfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_attributes_arginfo.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_attributes_arginfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 3fd949e1b9f49666bed3081ed1e8e711acd9f49c */
+ * Stub hash: afb6a3f1d14099066d028b1579fff074359da293 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Attribute___construct, 0, 0, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "Attribute::TARGET_ALL")
@@ -8,9 +8,28 @@
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReturnTypeWillChange___construct, 0, 0, 0)
ZEND_END_ARG_INFO()
+#define arginfo_class_AllowDynamicProperties___construct arginfo_class_ReturnTypeWillChange___construct
+#define arginfo_class_SensitiveParameter___construct arginfo_class_ReturnTypeWillChange___construct
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SensitiveParameterValue___construct, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SensitiveParameterValue_getValue, 0, 0, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SensitiveParameterValue___debugInfo, 0, 0, IS_ARRAY, 0)
+ZEND_END_ARG_INFO()
+
+
ZEND_METHOD(Attribute, __construct);
ZEND_METHOD(ReturnTypeWillChange, __construct);
+ZEND_METHOD(AllowDynamicProperties, __construct);
+ZEND_METHOD(SensitiveParameter, __construct);
+ZEND_METHOD(SensitiveParameterValue, __construct);
+ZEND_METHOD(SensitiveParameterValue, getValue);
+ZEND_METHOD(SensitiveParameterValue, __debugInfo);
static const zend_function_entry class_Attribute_methods[] = {
@@ -24,6 +43,26 @@
ZEND_FE_END
};
+
+static const zend_function_entry class_AllowDynamicProperties_methods[] = {
+ ZEND_ME(AllowDynamicProperties, __construct, arginfo_class_AllowDynamicProperties___construct, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SensitiveParameter_methods[] = {
+ ZEND_ME(SensitiveParameter, __construct, arginfo_class_SensitiveParameter___construct, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SensitiveParameterValue_methods[] = {
+ ZEND_ME(SensitiveParameterValue, __construct, arginfo_class_SensitiveParameterValue___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(SensitiveParameterValue, getValue, arginfo_class_SensitiveParameterValue_getValue, ZEND_ACC_PUBLIC)
+ ZEND_ME(SensitiveParameterValue, __debugInfo, arginfo_class_SensitiveParameterValue___debugInfo, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
static zend_class_entry *register_class_Attribute(void)
{
zend_class_entry ce, *class_entry;
@@ -32,6 +71,54 @@
class_entry = zend_register_internal_class_ex(&ce, NULL);
class_entry->ce_flags |= ZEND_ACC_FINAL;
+ zval const_TARGET_CLASS_value;
+ ZVAL_LONG(&const_TARGET_CLASS_value, ZEND_ATTRIBUTE_TARGET_CLASS);
+ zend_string *const_TARGET_CLASS_name = zend_string_init_interned("TARGET_CLASS", sizeof("TARGET_CLASS") - 1, 1);
+ zend_declare_class_constant_ex(class_entry, const_TARGET_CLASS_name, &const_TARGET_CLASS_value, ZEND_ACC_PUBLIC, NULL);
+ zend_string_release(const_TARGET_CLASS_name);
+
+ zval const_TARGET_FUNCTION_value;
+ ZVAL_LONG(&const_TARGET_FUNCTION_value, ZEND_ATTRIBUTE_TARGET_FUNCTION);
+ zend_string *const_TARGET_FUNCTION_name = zend_string_init_interned("TARGET_FUNCTION", sizeof("TARGET_FUNCTION") - 1, 1);
+ zend_declare_class_constant_ex(class_entry, const_TARGET_FUNCTION_name, &const_TARGET_FUNCTION_value, ZEND_ACC_PUBLIC, NULL);
+ zend_string_release(const_TARGET_FUNCTION_name);
+
+ zval const_TARGET_METHOD_value;
+ ZVAL_LONG(&const_TARGET_METHOD_value, ZEND_ATTRIBUTE_TARGET_METHOD);
+ zend_string *const_TARGET_METHOD_name = zend_string_init_interned("TARGET_METHOD", sizeof("TARGET_METHOD") - 1, 1);
+ zend_declare_class_constant_ex(class_entry, const_TARGET_METHOD_name, &const_TARGET_METHOD_value, ZEND_ACC_PUBLIC, NULL);
+ zend_string_release(const_TARGET_METHOD_name);
+
+ zval const_TARGET_PROPERTY_value;
+ ZVAL_LONG(&const_TARGET_PROPERTY_value, ZEND_ATTRIBUTE_TARGET_PROPERTY);
+ zend_string *const_TARGET_PROPERTY_name = zend_string_init_interned("TARGET_PROPERTY", sizeof("TARGET_PROPERTY") - 1, 1);
+ zend_declare_class_constant_ex(class_entry, const_TARGET_PROPERTY_name, &const_TARGET_PROPERTY_value, ZEND_ACC_PUBLIC, NULL);
+ zend_string_release(const_TARGET_PROPERTY_name);
+
+ zval const_TARGET_CLASS_CONSTANT_value;
+ ZVAL_LONG(&const_TARGET_CLASS_CONSTANT_value, ZEND_ATTRIBUTE_TARGET_CLASS_CONST);
+ zend_string *const_TARGET_CLASS_CONSTANT_name = zend_string_init_interned("TARGET_CLASS_CONSTANT", sizeof("TARGET_CLASS_CONSTANT") - 1, 1);
+ zend_declare_class_constant_ex(class_entry, const_TARGET_CLASS_CONSTANT_name, &const_TARGET_CLASS_CONSTANT_value, ZEND_ACC_PUBLIC, NULL);
+ zend_string_release(const_TARGET_CLASS_CONSTANT_name);
+
+ zval const_TARGET_PARAMETER_value;
+ ZVAL_LONG(&const_TARGET_PARAMETER_value, ZEND_ATTRIBUTE_TARGET_PARAMETER);
+ zend_string *const_TARGET_PARAMETER_name = zend_string_init_interned("TARGET_PARAMETER", sizeof("TARGET_PARAMETER") - 1, 1);
+ zend_declare_class_constant_ex(class_entry, const_TARGET_PARAMETER_name, &const_TARGET_PARAMETER_value, ZEND_ACC_PUBLIC, NULL);
+ zend_string_release(const_TARGET_PARAMETER_name);
+
+ zval const_TARGET_ALL_value;
+ ZVAL_LONG(&const_TARGET_ALL_value, ZEND_ATTRIBUTE_TARGET_ALL);
+ zend_string *const_TARGET_ALL_name = zend_string_init_interned("TARGET_ALL", sizeof("TARGET_ALL") - 1, 1);
+ zend_declare_class_constant_ex(class_entry, const_TARGET_ALL_name, &const_TARGET_ALL_value, ZEND_ACC_PUBLIC, NULL);
+ zend_string_release(const_TARGET_ALL_name);
+
+ zval const_IS_REPEATABLE_value;
+ ZVAL_LONG(&const_IS_REPEATABLE_value, ZEND_ATTRIBUTE_IS_REPEATABLE);
+ zend_string *const_IS_REPEATABLE_name = zend_string_init_interned("IS_REPEATABLE", sizeof("IS_REPEATABLE") - 1, 1);
+ zend_declare_class_constant_ex(class_entry, const_IS_REPEATABLE_name, &const_IS_REPEATABLE_value, ZEND_ACC_PUBLIC, NULL);
+ zend_string_release(const_IS_REPEATABLE_name);
+
zval property_flags_default_value;
ZVAL_UNDEF(&property_flags_default_value);
zend_string *property_flags_name = zend_string_init("flags", sizeof("flags") - 1, 1);
@@ -38,6 +125,13 @@
zend_declare_typed_property(class_entry, property_flags_name, &property_flags_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
zend_string_release(property_flags_name);
+ zend_string *attribute_name_Attribute_class_Attribute = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
+ zend_attribute *attribute_Attribute_class_Attribute = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_Attribute, 1);
+ zend_string_release(attribute_name_Attribute_class_Attribute);
+ zval attribute_Attribute_class_Attribute_arg0;
+ ZVAL_LONG(&attribute_Attribute_class_Attribute_arg0, ZEND_ATTRIBUTE_TARGET_CLASS);
+ ZVAL_COPY_VALUE(&attribute_Attribute_class_Attribute->args[0].value, &attribute_Attribute_class_Attribute_arg0);
+
return class_entry;
}
@@ -49,5 +143,65 @@
class_entry = zend_register_internal_class_ex(&ce, NULL);
class_entry->ce_flags |= ZEND_ACC_FINAL;
+ zend_string *attribute_name_Attribute_class_ReturnTypeWillChange = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
+ zend_attribute *attribute_Attribute_class_ReturnTypeWillChange = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_ReturnTypeWillChange, 1);
+ zend_string_release(attribute_name_Attribute_class_ReturnTypeWillChange);
+ zval attribute_Attribute_class_ReturnTypeWillChange_arg0;
+ ZVAL_LONG(&attribute_Attribute_class_ReturnTypeWillChange_arg0, ZEND_ATTRIBUTE_TARGET_METHOD);
+ ZVAL_COPY_VALUE(&attribute_Attribute_class_ReturnTypeWillChange->args[0].value, &attribute_Attribute_class_ReturnTypeWillChange_arg0);
+
return class_entry;
}
+
+static zend_class_entry *register_class_AllowDynamicProperties(void)
+{
+ zend_class_entry ce, *class_entry;
+
+ INIT_CLASS_ENTRY(ce, "AllowDynamicProperties", class_AllowDynamicProperties_methods);
+ class_entry = zend_register_internal_class_ex(&ce, NULL);
+ class_entry->ce_flags |= ZEND_ACC_FINAL;
+
+ zend_string *attribute_name_Attribute_class_AllowDynamicProperties = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
+ zend_attribute *attribute_Attribute_class_AllowDynamicProperties = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_AllowDynamicProperties, 1);
+ zend_string_release(attribute_name_Attribute_class_AllowDynamicProperties);
+ zval attribute_Attribute_class_AllowDynamicProperties_arg0;
+ ZVAL_LONG(&attribute_Attribute_class_AllowDynamicProperties_arg0, ZEND_ATTRIBUTE_TARGET_CLASS);
+ ZVAL_COPY_VALUE(&attribute_Attribute_class_AllowDynamicProperties->args[0].value, &attribute_Attribute_class_AllowDynamicProperties_arg0);
+
+ return class_entry;
+}
+
+static zend_class_entry *register_class_SensitiveParameter(void)
+{
+ zend_class_entry ce, *class_entry;
+
+ INIT_CLASS_ENTRY(ce, "SensitiveParameter", class_SensitiveParameter_methods);
+ class_entry = zend_register_internal_class_ex(&ce, NULL);
+ class_entry->ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES;
+
+ zend_string *attribute_name_Attribute_class_SensitiveParameter = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1);
+ zend_attribute *attribute_Attribute_class_SensitiveParameter = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_SensitiveParameter, 1);
+ zend_string_release(attribute_name_Attribute_class_SensitiveParameter);
+ zval attribute_Attribute_class_SensitiveParameter_arg0;
+ ZVAL_LONG(&attribute_Attribute_class_SensitiveParameter_arg0, ZEND_ATTRIBUTE_TARGET_PARAMETER);
+ ZVAL_COPY_VALUE(&attribute_Attribute_class_SensitiveParameter->args[0].value, &attribute_Attribute_class_SensitiveParameter_arg0);
+
+ return class_entry;
+}
+
+static zend_class_entry *register_class_SensitiveParameterValue(void)
+{
+ zend_class_entry ce, *class_entry;
+
+ INIT_CLASS_ENTRY(ce, "SensitiveParameterValue", class_SensitiveParameterValue_methods);
+ class_entry = zend_register_internal_class_ex(&ce, NULL);
+ class_entry->ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE;
+
+ zval property_value_default_value;
+ ZVAL_UNDEF(&property_value_default_value);
+ zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1);
+ zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PRIVATE|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ANY));
+ zend_string_release(property_value_name);
+
+ return class_entry;
+}
Modified: trunk/MgDev/Oem/php/include/Zend/zend_builtin_functions_arginfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_builtin_functions_arginfo.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_builtin_functions_arginfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: f87d92c002674c431827895a8d8b3a5da3b95482 */
+ * Stub hash: 80355bb52d643177e3a661a515d9ea915bd1e2fc */
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()
@@ -139,7 +139,7 @@
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, error_levels, IS_LONG, 0, "E_ALL")
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_restore_error_handler, 0, 0, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_restore_error_handler, 0, 0, IS_TRUE, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_set_exception_handler, 0, 0, 1)
@@ -207,7 +207,8 @@
#define arginfo_gc_collect_cycles arginfo_func_num_args
-#define arginfo_gc_enabled arginfo_restore_error_handler
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gc_enabled, 0, 0, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gc_enable, 0, 0, IS_VOID, 0)
ZEND_END_ARG_INFO()
@@ -283,10 +284,10 @@
ZEND_FE(func_get_arg, arginfo_func_get_arg)
ZEND_FE(func_get_args, arginfo_func_get_args)
ZEND_FE(strlen, arginfo_strlen)
- ZEND_FE(strcmp, arginfo_strcmp)
- ZEND_FE(strncmp, arginfo_strncmp)
- ZEND_FE(strcasecmp, arginfo_strcasecmp)
- ZEND_FE(strncasecmp, arginfo_strncasecmp)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strcmp, arginfo_strcmp)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strncmp, arginfo_strncmp)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strcasecmp, arginfo_strcasecmp)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strncasecmp, arginfo_strncasecmp)
ZEND_FE(error_reporting, arginfo_error_reporting)
ZEND_FE(define, arginfo_define)
ZEND_FE(defined, arginfo_defined)
@@ -352,6 +353,11 @@
INIT_CLASS_ENTRY(ce, "stdClass", class_stdClass_methods);
class_entry = zend_register_internal_class_ex(&ce, NULL);
+ class_entry->ce_flags |= ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES;
+ zend_string *attribute_name_AllowDynamicProperties_class_stdClass = zend_string_init_interned("AllowDynamicProperties", sizeof("AllowDynamicProperties") - 1, 1);
+ zend_add_class_attribute(class_entry, attribute_name_AllowDynamicProperties_class_stdClass, 0);
+ zend_string_release(attribute_name_AllowDynamicProperties_class_stdClass);
+
return class_entry;
}
Modified: trunk/MgDev/Oem/php/include/Zend/zend_compile.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_compile.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_compile.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -27,7 +27,10 @@
#include "zend_llist.h"
-#define SET_UNUSED(op) op ## _type = IS_UNUSED
+#define SET_UNUSED(op) do { \
+ op ## _type = IS_UNUSED; \
+ op.num = (uint32_t) -1; \
+} while (0)
#define MAKE_NOP(opline) do { \
(opline)->op1.num = 0; \
@@ -34,9 +37,9 @@
(opline)->op2.num = 0; \
(opline)->result.num = 0; \
(opline)->opcode = ZEND_NOP; \
- (opline)->op1_type = IS_UNUSED; \
- (opline)->op2_type = IS_UNUSED; \
- (opline)->result_type = IS_UNUSED; \
+ SET_UNUSED((opline)->op1); \
+ SET_UNUSED((opline)->op2); \
+ SET_UNUSED((opline)->result); \
} while (0)
#define RESET_DOC_COMMENT() do { \
@@ -237,7 +240,7 @@
/* or IS_CONSTANT_VISITED_MARK | | | */
#define ZEND_CLASS_CONST_IS_CASE (1 << 6) /* | | | X */
/* | | | */
-/* Class Flags (unused: 15,21,30,31) | | | */
+/* Class Flags (unused: 21,30,31) | | | */
/* =========== | | | */
/* | | | */
/* Special class types | | | */
@@ -266,9 +269,13 @@
/* User class has methods with static variables | | | */
#define ZEND_HAS_STATIC_IN_METHODS (1 << 14) /* X | | | */
/* | | | */
-/* Children must reuse parent get_iterator() | | | */
-#define ZEND_ACC_REUSE_GET_ITERATOR (1 << 16) /* X | | | */
+/* Objects of this class may have dynamic properties | | | */
+/* without triggering a deprecation warning | | | */
+#define ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES (1 << 15) /* X | | | */
/* | | | */
+/* Readonly class | | | */
+#define ZEND_ACC_READONLY_CLASS (1 << 16) /* X | | | */
+/* | | | */
/* Parent class is resolved (CE). | | | */
#define ZEND_ACC_RESOLVED_PARENT (1 << 17) /* X | | | */
/* | | | */
@@ -297,7 +304,7 @@
/* Class cannot be serialized or unserialized | | | */
#define ZEND_ACC_NOT_SERIALIZABLE (1 << 29) /* X | | | */
/* | | | */
-/* Function Flags (unused: 27-30) | | | */
+/* Function Flags (unused: 28-30) | | | */
/* ============== | | | */
/* | | | */
/* deprecation flag | | | */
@@ -353,6 +360,9 @@
/* method flag used by Closure::__invoke() (int only) | | | */
#define ZEND_ACC_USER_ARG_INFO (1 << 26) /* | X | | */
/* | | | */
+/* supports opcache compile-time evaluation (funcs) | | | */
+#define ZEND_ACC_COMPILE_TIME_EVAL (1 << 27) /* | X | | */
+/* | | | */
/* op_array uses strict mode types | | | */
#define ZEND_ACC_STRICT_TYPES (1U << 31) /* | X | | */
@@ -362,10 +372,14 @@
/* call through internal function handler. e.g. Closure::invoke() */
#define ZEND_ACC_CALL_VIA_HANDLER ZEND_ACC_CALL_VIA_TRAMPOLINE
+#define ZEND_SHORT_CIRCUITING_CHAIN_MASK 0x3
#define ZEND_SHORT_CIRCUITING_CHAIN_EXPR 0
#define ZEND_SHORT_CIRCUITING_CHAIN_ISSET 1
#define ZEND_SHORT_CIRCUITING_CHAIN_EMPTY 2
+// Must not clash with ZEND_SHORT_CIRCUITING_CHAIN_MASK
+#define ZEND_JMP_NULL_BP_VAR_IS 4
+
char *zend_visibility_string(uint32_t fn_flags);
typedef struct _zend_property_info {
@@ -434,15 +448,15 @@
uint32_t required_num_args;
zend_arg_info *arg_info;
HashTable *attributes;
+ uint32_t T; /* number of temporary variables */
+ ZEND_MAP_PTR_DEF(void **, run_time_cache);
/* END of common elements */
int cache_size; /* number of run_time_cache_slots * sizeof(void*) */
int last_var; /* number of CV variables */
- uint32_t T; /* number of temporary variables */
uint32_t last; /* number of opcodes */
zend_op *opcodes;
- ZEND_MAP_PTR_DEF(void **, run_time_cache);
ZEND_MAP_PTR_DEF(HashTable *, static_variables_ptr);
HashTable *static_variables;
zend_string **vars; /* names of CV variables */
@@ -489,6 +503,8 @@
uint32_t required_num_args;
zend_internal_arg_info *arg_info;
HashTable *attributes;
+ uint32_t T; /* number of temporary variables */
+ ZEND_MAP_PTR_DEF(void **, run_time_cache);
/* END of common elements */
zif_handler handler;
@@ -513,6 +529,8 @@
uint32_t required_num_args;
zend_arg_info *arg_info; /* index -1 represents the return value info, if any */
HashTable *attributes;
+ uint32_t T; /* number of temporary variables */
+ ZEND_MAP_PTR_DEF(void **, run_time_cache);
} common;
zend_op_array op_array;
@@ -552,6 +570,7 @@
/* to prevent optimization in RETURN handler and */
/* keep all local variables for "fcall_end" handler */
#define ZEND_CALL_JIT_RESERVED (1 << 29) /* reserved for tracing JIT */
+#define ZEND_CALL_NEEDS_REATTACH (1 << 30)
#define ZEND_CALL_SEND_ARG_BY_REF (1u << 31)
#define ZEND_CALL_NESTED_FUNCTION (ZEND_CALL_FUNCTION | ZEND_CALL_NESTED)
@@ -741,6 +760,12 @@
#include "zend_globals.h"
+typedef enum _zend_compile_position {
+ ZEND_COMPILE_POSITION_AT_SHEBANG = 0,
+ ZEND_COMPILE_POSITION_AT_OPEN_TAG,
+ ZEND_COMPILE_POSITION_AFTER_OPEN_TAG
+} zend_compile_position;
+
BEGIN_EXTERN_C()
void init_compiler(void);
@@ -753,7 +778,7 @@
void zend_file_context_end(zend_file_context *prev_context);
extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type);
-extern ZEND_API zend_op_array *(*zend_compile_string)(zend_string *source_string, const char *filename);
+extern ZEND_API zend_op_array *(*zend_compile_string)(zend_string *source_string, const char *filename, zend_compile_position position);
ZEND_API int ZEND_FASTCALL lex_scan(zval *zendlval, zend_parser_stack_elem *elem);
void startup_scanner(void);
@@ -792,13 +817,10 @@
zval *class_table_slot, zval *lcname, zend_string *lc_parent_name);
ZEND_API zend_result do_bind_function(zend_function *func, zval *lcname);
ZEND_API zend_result do_bind_class(zval *lcname, zend_string *lc_parent_name);
-ZEND_API uint32_t zend_build_delayed_early_binding_list(const zend_op_array *op_array);
-ZEND_API void zend_do_delayed_early_binding(zend_op_array *op_array, uint32_t first_early_binding_opline);
void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline);
ZEND_API void function_add_ref(zend_function *function);
-void zend_init_static_variables_map_ptr(zend_op_array *op_array);
zend_string *zval_make_interned_string(zval *zv);
#define INITIAL_OP_ARRAY_SIZE 64
@@ -808,7 +830,7 @@
struct _zend_arena;
ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type);
-ZEND_API zend_op_array *compile_string(zend_string *source_string, const char *filename);
+ZEND_API zend_op_array *compile_string(zend_string *source_string, const char *filename, zend_compile_position position);
ZEND_API zend_op_array *compile_filename(int type, zend_string *filename);
ZEND_API zend_ast *zend_compile_string_to_ast(
zend_string *code, struct _zend_arena **ast_arena, zend_string *filename);
@@ -961,6 +983,13 @@
#define ZEND_FETCH_DIM_WRITE 2
#define ZEND_FETCH_OBJ_FLAGS 3
+/* Used to mark what kind of operation a writing FETCH_DIM is used in,
+ * to produce a more precise error on incorrect string offset use. */
+#define ZEND_FETCH_DIM_REF 1
+#define ZEND_FETCH_DIM_DIM 2
+#define ZEND_FETCH_DIM_OBJ 3
+#define ZEND_FETCH_DIM_INCDEC 4
+
#define ZEND_ISEMPTY (1<<0)
#define ZEND_LAST_CATCH (1<<0)
@@ -990,9 +1019,15 @@
#define ZEND_ARG_TYPE_IS_TENTATIVE(arg_info) \
((ZEND_TYPE_FULL_MASK((arg_info)->type) & _ZEND_IS_TENTATIVE_BIT) != 0)
-#define ZEND_DIM_IS (1 << 0) /* isset fetch needed for null coalesce */
+#define ZEND_DIM_IS (1 << 0) /* isset fetch needed for null coalesce. Set in zend_compile.c for ZEND_AST_DIM nested within ZEND_AST_COALESCE. */
#define ZEND_DIM_ALTERNATIVE_SYNTAX (1 << 1) /* deprecated curly brace usage */
+/* Attributes for ${} encaps var in strings (ZEND_AST_DIM or ZEND_AST_VAR node) */
+/* ZEND_AST_VAR nodes can have any of the ZEND_ENCAPS_VAR_* flags */
+/* ZEND_AST_DIM flags can have ZEND_DIM_ALTERNATIVE_SYNTAX or ZEND_ENCAPS_VAR_DOLLAR_CURLY during the parse phase (ZEND_DIM_ALTERNATIVE_SYNTAX is a thrown fatal error). */
+#define ZEND_ENCAPS_VAR_DOLLAR_CURLY (1 << 0)
+#define ZEND_ENCAPS_VAR_DOLLAR_CURLY_VAR_VAR (1 << 1)
+
/* Make sure these don't clash with ZEND_FETCH_CLASS_* flags. */
#define IS_CONSTANT_CLASS 0x400 /* __CLASS__ in trait */
#define IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE 0x800
@@ -1149,6 +1184,9 @@
/* this flag is set when compiler invoked during preloading in separate process */
#define ZEND_COMPILE_PRELOAD_IN_CHILD (1<<17)
+/* ignore observer notifications, e.g. to manually notify afterwards in a post-processing step after compilation */
+#define ZEND_COMPILE_IGNORE_OBSERVER (1<<18)
+
/* The default value for CG(compiler_options) */
#define ZEND_COMPILE_DEFAULT ZEND_COMPILE_HANDLE_OP_ARRAY
Added: trunk/MgDev/Oem/php/include/Zend/zend_constants_arginfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_constants_arginfo.h (rev 0)
+++ trunk/MgDev/Oem/php/include/Zend/zend_constants_arginfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -0,0 +1,24 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: 50b960193f55c7b09316355a0c0ae1d572ca9694 */
+
+
+
+static void register_zend_constants_symbols(int module_number)
+{
+ REGISTER_LONG_CONSTANT("E_ERROR", E_ERROR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_WARNING", E_WARNING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_PARSE", E_PARSE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_NOTICE", E_NOTICE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_CORE_ERROR", E_CORE_ERROR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_CORE_WARNING", E_CORE_WARNING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_COMPILE_ERROR", E_COMPILE_ERROR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_COMPILE_WARNING", E_COMPILE_WARNING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_USER_ERROR", E_USER_ERROR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_USER_WARNING", E_USER_WARNING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_USER_NOTICE", E_USER_NOTICE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_STRICT", E_STRICT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_RECOVERABLE_ERROR", E_RECOVERABLE_ERROR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_DEPRECATED", E_DEPRECATED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_USER_DEPRECATED", E_USER_DEPRECATED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("E_ALL", E_ALL, CONST_PERSISTENT);
+}
Modified: trunk/MgDev/Oem/php/include/Zend/zend_cpuinfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_cpuinfo.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_cpuinfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -208,7 +208,7 @@
/* __builtin_cpu_supports has pclmul from gcc9 */
#if PHP_HAVE_BUILTIN_CPU_SUPPORTS && (!defined(__GNUC__) || (ZEND_GCC_VERSION >= 9000))
ZEND_NO_SANITIZE_ADDRESS
-static inline int zend_cpu_supports_pclmul() {
+static inline int zend_cpu_supports_pclmul(void) {
#if PHP_HAVE_BUILTIN_CPU_INIT
__builtin_cpu_init();
#endif
Modified: trunk/MgDev/Oem/php/include/Zend/zend_enum.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_enum.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_enum.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -29,6 +29,7 @@
void zend_register_enum_ce(void);
void zend_enum_add_interfaces(zend_class_entry *ce);
+zend_result zend_enum_build_backed_enum_table(zend_class_entry *ce);
zend_object *zend_enum_new(zval *result, zend_class_entry *ce, zend_string *case_name, zval *backing_value_zv);
void zend_verify_enum(zend_class_entry *ce);
void zend_enum_register_funcs(zend_class_entry *ce);
@@ -40,6 +41,7 @@
ZEND_API void zend_enum_add_case_cstr(zend_class_entry *ce, const char *name, zval *value);
ZEND_API zend_object *zend_enum_get_case(zend_class_entry *ce, zend_string *name);
ZEND_API zend_object *zend_enum_get_case_cstr(zend_class_entry *ce, const char *name);
+ZEND_API zend_result zend_enum_get_case_by_value(zend_object **result, zend_class_entry *ce, zend_long long_key, zend_string *string_key, bool try);
static zend_always_inline zval *zend_enum_fetch_case_name(zend_object *zobj)
{
Modified: trunk/MgDev/Oem/php/include/Zend/zend_exceptions_arginfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_exceptions_arginfo.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_exceptions_arginfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 9d1c2027ebd14e621d9b5b79056ba7300a455be8 */
+ * Stub hash: 4cf2c620393f468968a219b5bd12a2b5f6b03ecc */
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Throwable_getMessage, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()
@@ -259,6 +259,12 @@
INIT_CLASS_ENTRY(ce, "ErrorException", class_ErrorException_methods);
class_entry = zend_register_internal_class_ex(&ce, class_entry_Exception);
+ zval property_severity_default_value;
+ ZVAL_LONG(&property_severity_default_value, E_ERROR);
+ zend_string *property_severity_name = zend_string_init("severity", sizeof("severity") - 1, 1);
+ zend_declare_typed_property(class_entry, property_severity_name, &property_severity_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
+ zend_string_release(property_severity_name);
+
return class_entry;
}
Modified: trunk/MgDev/Oem/php/include/Zend/zend_execute.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_execute.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_execute.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -245,10 +245,10 @@
static zend_always_inline uint32_t zend_vm_calc_used_stack(uint32_t num_args, zend_function *func)
{
- uint32_t used_stack = ZEND_CALL_FRAME_SLOT + num_args;
+ uint32_t used_stack = ZEND_CALL_FRAME_SLOT + num_args + func->common.T;
if (EXPECTED(ZEND_USER_CODE(func->type))) {
- used_stack += func->op_array.last_var + func->op_array.T - MIN(func->op_array.num_args, num_args);
+ used_stack += func->op_array.last_var - MIN(func->op_array.num_args, num_args);
}
return used_stack * sizeof(zval);
}
@@ -349,9 +349,9 @@
ZEND_API void zend_set_timeout(zend_long seconds, bool reset_signals);
ZEND_API void zend_unset_timeout(void);
ZEND_API ZEND_NORETURN void ZEND_FASTCALL zend_timeout(void);
-ZEND_API zend_class_entry *zend_fetch_class(zend_string *class_name, int fetch_type);
-ZEND_API zend_class_entry *zend_fetch_class_with_scope(zend_string *class_name, int fetch_type, zend_class_entry *scope);
-ZEND_API zend_class_entry *zend_fetch_class_by_name(zend_string *class_name, zend_string *lcname, int fetch_type);
+ZEND_API zend_class_entry *zend_fetch_class(zend_string *class_name, uint32_t fetch_type);
+ZEND_API zend_class_entry *zend_fetch_class_with_scope(zend_string *class_name, uint32_t fetch_type, zend_class_entry *scope);
+ZEND_API zend_class_entry *zend_fetch_class_by_name(zend_string *class_name, zend_string *lcname, uint32_t fetch_type);
ZEND_API zend_function * ZEND_FASTCALL zend_fetch_function(zend_string *name);
ZEND_API zend_function * ZEND_FASTCALL zend_fetch_function_str(const char *name, size_t len);
@@ -361,6 +361,8 @@
ZEND_API zval* zend_get_compiled_variable_value(const zend_execute_data *execute_data_ptr, uint32_t var);
+ZEND_API bool zend_gcc_global_regs(void);
+
#define ZEND_USER_OPCODE_CONTINUE 0 /* execute next opcode */
#define ZEND_USER_OPCODE_RETURN 1 /* exit from executor (return from function) */
#define ZEND_USER_OPCODE_DISPATCH 2 /* call original opcode handler */
@@ -376,7 +378,10 @@
ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table);
ZEND_API void ZEND_FASTCALL zend_free_compiled_variables(zend_execute_data *execute_data);
+ZEND_API void zend_unfinished_calls_gc(zend_execute_data *execute_data, zend_execute_data *call, uint32_t op_num, zend_get_gc_buffer *buf);
ZEND_API void zend_cleanup_unfinished_execution(zend_execute_data *execute_data, uint32_t op_num, uint32_t catch_op_num);
+ZEND_API ZEND_ATTRIBUTE_DEPRECATED HashTable *zend_unfinished_execution_gc(zend_execute_data *execute_data, zend_execute_data *call, zend_get_gc_buffer *gc_buffer);
+ZEND_API HashTable *zend_unfinished_execution_gc_ex(zend_execute_data *execute_data, zend_execute_data *call, zend_get_gc_buffer *gc_buffer, bool suspended_by_yield);
zval * ZEND_FASTCALL zend_handle_named_arg(
zend_execute_data **call_ptr, zend_string *arg_name,
Modified: trunk/MgDev/Oem/php/include/Zend/zend_extensions.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_extensions.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_extensions.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -44,7 +44,7 @@
/* 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 420210902
+#define ZEND_EXTENSION_API_NO 420220829
typedef struct _zend_extension_version_info {
int zend_extension_api_no;
@@ -145,6 +145,9 @@
void zend_startup_extensions(void);
void zend_shutdown_extensions(void);
+ZEND_API size_t zend_internal_run_time_cache_reserved_size(void);
+ZEND_API void zend_init_internal_run_time_cache(void);
+
BEGIN_EXTERN_C()
ZEND_API zend_result zend_load_extension(const char *path);
ZEND_API zend_result zend_load_extension_handle(DL_HANDLE handle, const char *path);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_fibers.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_fibers.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_fibers.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -71,6 +71,7 @@
/* Coroutine functions must populate the given transfer with a new context
* and (optional) data before they return. */
typedef void (*zend_fiber_coroutine)(zend_fiber_transfer *transfer);
+typedef void (*zend_fiber_clean)(zend_fiber_context *context);
struct _zend_fiber_context {
/* Pointer to boost.context or ucontext_t data. */
@@ -82,6 +83,9 @@
/* Entrypoint function of the fiber. */
zend_fiber_coroutine function;
+ /* Cleanup function for fiber. */
+ zend_fiber_clean cleanup;
+
/* Assigned C stack. */
zend_fiber_stack *stack;
@@ -88,6 +92,9 @@
/* Fiber status. */
zend_fiber_status status;
+ /* Observer state */
+ zend_execute_data *top_observed_frame;
+
/* Reserved for extensions */
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
@@ -118,6 +125,9 @@
/* Frame on the bottom of the fiber vm stack. */
zend_execute_data *stack_bottom;
+ /* Active fiber vm stack. */
+ zend_vm_stack vm_stack;
+
/* Storage for fiber return value. */
zval result;
};
Modified: trunk/MgDev/Oem/php/include/Zend/zend_generators.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_generators.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_generators.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -92,6 +92,7 @@
static const zend_uchar ZEND_GENERATOR_FORCED_CLOSE = 0x2;
static const zend_uchar ZEND_GENERATOR_AT_FIRST_YIELD = 0x4;
static const zend_uchar ZEND_GENERATOR_DO_INIT = 0x8;
+static const zend_uchar ZEND_GENERATOR_IN_FIBER = 0x10;
void zend_register_generator_ce(void);
ZEND_API void zend_generator_close(zend_generator *generator, bool finished_execution);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_globals.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_globals.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_globals.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -25,6 +25,7 @@
#include "zend_globals_macros.h"
+#include "zend_atomic.h"
#include "zend_stack.h"
#include "zend_ptr_stack.h"
#include "zend_hash.h"
@@ -189,8 +190,8 @@
/* for extended information support */
bool no_extensions;
- bool vm_interrupt;
- bool timed_out;
+ zend_atomic_bool vm_interrupt;
+ zend_atomic_bool timed_out;
zend_long hard_timeout;
#ifdef ZEND_WIN32
@@ -266,6 +267,10 @@
uint32_t num_errors;
zend_error_info **errors;
+ /* Override filename or line number of thrown errors and exceptions */
+ zend_string *filename_override;
+ zend_long lineno_override;
+
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
Modified: trunk/MgDev/Oem/php/include/Zend/zend_hash.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_hash.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_hash.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -22,6 +22,7 @@
#define ZEND_HASH_H
#include "zend.h"
+#include "zend_sort.h"
#define HASH_KEY_IS_STRING 1
#define HASH_KEY_IS_LONG 2
@@ -170,6 +171,7 @@
ZEND_API zend_result ZEND_FASTCALL zend_hash_str_del_ind(HashTable *ht, const char *key, size_t len);
ZEND_API zend_result ZEND_FASTCALL zend_hash_index_del(HashTable *ht, zend_ulong h);
ZEND_API void ZEND_FASTCALL zend_hash_del_bucket(HashTable *ht, Bucket *p);
+ZEND_API void ZEND_FASTCALL zend_hash_packed_del_val(HashTable *ht, zval *zv);
/* Data retrieval */
ZEND_API zval* ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key);
@@ -178,7 +180,7 @@
ZEND_API zval* ZEND_FASTCALL _zend_hash_index_find(const HashTable *ht, zend_ulong h);
/* The same as zend_hash_find(), but hash value of the key must be already calculated. */
-ZEND_API zval* ZEND_FASTCALL zend_hash_find_known_hash(const HashTable *ht, zend_string *key);
+ZEND_API zval* ZEND_FASTCALL zend_hash_find_known_hash(const HashTable *ht, const zend_string *key);
static zend_always_inline zval *zend_hash_find_ex(const HashTable *ht, zend_string *key, bool known_hash)
{
@@ -192,7 +194,7 @@
#define ZEND_HASH_INDEX_FIND(_ht, _h, _ret, _not_found) do { \
if (EXPECTED(HT_FLAGS(_ht) & HASH_FLAG_PACKED)) { \
if (EXPECTED((zend_ulong)(_h) < (zend_ulong)(_ht)->nNumUsed)) { \
- _ret = &_ht->arData[_h].val; \
+ _ret = &_ht->arPacked[_h]; \
if (UNEXPECTED(Z_TYPE_P(_ret) == IS_UNDEF)) { \
goto _not_found; \
} \
@@ -215,7 +217,7 @@
#define ZEND_HASH_INDEX_LOOKUP(_ht, _h, _ret) do { \
if (EXPECTED(HT_FLAGS(_ht) & HASH_FLAG_PACKED)) { \
if (EXPECTED((zend_ulong)(_h) < (zend_ulong)(_ht)->nNumUsed)) { \
- _ret = &_ht->arData[_h].val; \
+ _ret = &_ht->arPacked[_h]; \
if (EXPECTED(Z_TYPE_P(_ret) != IS_UNDEF)) { \
break; \
} \
@@ -243,35 +245,45 @@
/* traversing */
ZEND_API HashPosition ZEND_FASTCALL zend_hash_get_current_pos(const HashTable *ht);
-#define zend_hash_has_more_elements_ex(ht, pos) \
- (zend_hash_get_current_key_type_ex(ht, pos) == HASH_KEY_NON_EXISTENT ? FAILURE : SUCCESS)
ZEND_API zend_result ZEND_FASTCALL zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos);
ZEND_API zend_result ZEND_FASTCALL zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos);
-ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos);
-ZEND_API void ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos);
+ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, const HashPosition *pos);
+ZEND_API void ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, const HashPosition *pos);
ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos);
ZEND_API zval* ZEND_FASTCALL zend_hash_get_current_data_ex(HashTable *ht, HashPosition *pos);
ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos);
ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos);
-#define zend_hash_has_more_elements(ht) \
- zend_hash_has_more_elements_ex(ht, &(ht)->nInternalPointer)
-#define zend_hash_move_forward(ht) \
- zend_hash_move_forward_ex(ht, &(ht)->nInternalPointer)
-#define zend_hash_move_backwards(ht) \
- zend_hash_move_backwards_ex(ht, &(ht)->nInternalPointer)
-#define zend_hash_get_current_key(ht, str_index, num_index) \
- zend_hash_get_current_key_ex(ht, str_index, num_index, &(ht)->nInternalPointer)
-#define zend_hash_get_current_key_zval(ht, key) \
- zend_hash_get_current_key_zval_ex(ht, key, &(ht)->nInternalPointer)
-#define zend_hash_get_current_key_type(ht) \
- zend_hash_get_current_key_type_ex(ht, &(ht)->nInternalPointer)
-#define zend_hash_get_current_data(ht) \
- zend_hash_get_current_data_ex(ht, &(ht)->nInternalPointer)
-#define zend_hash_internal_pointer_reset(ht) \
- zend_hash_internal_pointer_reset_ex(ht, &(ht)->nInternalPointer)
-#define zend_hash_internal_pointer_end(ht) \
- zend_hash_internal_pointer_end_ex(ht, &(ht)->nInternalPointer)
+static zend_always_inline zend_result zend_hash_has_more_elements_ex(HashTable *ht, HashPosition *pos) {
+ return (zend_hash_get_current_key_type_ex(ht, pos) == HASH_KEY_NON_EXISTENT ? FAILURE : SUCCESS);
+}
+static zend_always_inline zend_result zend_hash_has_more_elements(HashTable *ht) {
+ return zend_hash_has_more_elements_ex(ht, &ht->nInternalPointer);
+}
+static zend_always_inline zend_result zend_hash_move_forward(HashTable *ht) {
+ return zend_hash_move_forward_ex(ht, &ht->nInternalPointer);
+}
+static zend_always_inline zend_result zend_hash_move_backwards(HashTable *ht) {
+ return zend_hash_move_backwards_ex(ht, &ht->nInternalPointer);
+}
+static zend_always_inline int zend_hash_get_current_key(const HashTable *ht, zend_string **str_index, zend_ulong *num_index) {
+ return zend_hash_get_current_key_ex(ht, str_index, num_index, &ht->nInternalPointer);
+}
+static zend_always_inline void zend_hash_get_current_key_zval(const HashTable *ht, zval *key) {
+ zend_hash_get_current_key_zval_ex(ht, key, &ht->nInternalPointer);
+}
+static zend_always_inline int zend_hash_get_current_key_type(HashTable *ht) {
+ return zend_hash_get_current_key_type_ex(ht, &ht->nInternalPointer);
+}
+static zend_always_inline zval* zend_hash_get_current_data(HashTable *ht) {
+ return zend_hash_get_current_data_ex(ht, &ht->nInternalPointer);
+}
+static zend_always_inline void zend_hash_internal_pointer_reset(HashTable *ht) {
+ zend_hash_internal_pointer_reset_ex(ht, &ht->nInternalPointer);
+}
+static zend_always_inline void zend_hash_internal_pointer_end(HashTable *ht) {
+ zend_hash_internal_pointer_end_ex(ht, &ht->nInternalPointer);
+}
/* Copying, merging and sorting */
ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor);
@@ -284,16 +296,19 @@
typedef int (*bucket_compare_func_t)(Bucket *a, Bucket *b);
ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, bool ordered);
ZEND_API void ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, bool renumber);
-ZEND_API zval* ZEND_FASTCALL zend_hash_minmax(const HashTable *ht, bucket_compare_func_t compar, uint32_t flag);
+ZEND_API zval* ZEND_FASTCALL zend_hash_minmax(const HashTable *ht, compare_func_t compar, uint32_t flag);
-#define zend_hash_sort(ht, compare_func, renumber) \
- zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
+static zend_always_inline void ZEND_FASTCALL zend_hash_sort(HashTable *ht, bucket_compare_func_t compare_func, zend_bool renumber) {
+ zend_hash_sort_ex(ht, zend_sort, compare_func, renumber);
+}
-#define zend_hash_num_elements(ht) \
- (ht)->nNumOfElements
+static zend_always_inline uint32_t zend_hash_num_elements(const HashTable *ht) {
+ return ht->nNumOfElements;
+}
-#define zend_hash_next_free_element(ht) \
- (ht)->nNextFreeElement
+static zend_always_inline zend_long zend_hash_next_free_element(const HashTable *ht) {
+ return ht->nNextFreeElement;
+}
ZEND_API void ZEND_FASTCALL zend_hash_rehash(HashTable *ht);
@@ -319,6 +334,7 @@
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 HashTable* zend_array_to_list(HashTable *source);
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, bool always_duplicate);
@@ -958,15 +974,68 @@
#define zend_hash_get_current_data_ptr(ht) \
zend_hash_get_current_data_ptr_ex(ht, &(ht)->nInternalPointer)
+/* Common hash/packed array iterators */
+#if 0
+# define ZEND_HASH_ELEMENT_SIZE(__ht) \
+ (HT_IS_PACKED(__ht) ? sizeof(zval) : sizeof(Bucket))
+#else /* optimized version */
+# define ZEND_HASH_ELEMENT_SIZE(__ht) \
+ (sizeof(zval) + (~HT_FLAGS(__ht) & HASH_FLAG_PACKED) * ((sizeof(Bucket)-sizeof(zval))/HASH_FLAG_PACKED))
+#endif
+
+#define ZEND_HASH_ELEMENT_EX(__ht, _idx, _size) \
+ ((zval*)(((char*)(__ht)->arPacked) + ((_idx) * (_size))))
+
+#define ZEND_HASH_ELEMENT(__ht, _idx) \
+ ZEND_HASH_ELEMENT_EX(__ht, _idx, ZEND_HASH_ELEMENT_SIZE(__ht))
+
+#define ZEND_HASH_NEXT_ELEMENT(_el, _size) \
+ ((zval*)(((char*)(_el)) + (_size)))
+
+#define ZEND_HASH_PREV_ELEMENT(_el, _size) \
+ ((zval*)(((char*)(_el)) - (_size)))
+
+#define _ZEND_HASH_FOREACH_VAL(_ht) do { \
+ HashTable *__ht = (_ht); \
+ uint32_t _count = __ht->nNumUsed; \
+ size_t _size = ZEND_HASH_ELEMENT_SIZE(__ht); \
+ zval *_z = __ht->arPacked; \
+ for (; _count > 0; _z = ZEND_HASH_NEXT_ELEMENT(_z, _size), _count--) { \
+ if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;
+
+#define _ZEND_HASH_REVERSE_FOREACH_VAL(_ht) do { \
+ HashTable *__ht = (_ht); \
+ uint32_t _idx = __ht->nNumUsed; \
+ size_t _size = ZEND_HASH_ELEMENT_SIZE(__ht); \
+ zval *_z = ZEND_HASH_ELEMENT_EX(__ht, _idx, _size); \
+ for (;_idx > 0; _idx--) { \
+ _z = ZEND_HASH_PREV_ELEMENT(_z, _size); \
+ if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;
+
#define ZEND_HASH_FOREACH_FROM(_ht, indirect, _from) do { \
HashTable *__ht = (_ht); \
- Bucket *_p = __ht->arData + (_from); \
- Bucket *_end = __ht->arData + __ht->nNumUsed; \
- for (; _p != _end; _p++) { \
- zval *_z = &_p->val; \
- if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
- _z = Z_INDIRECT_P(_z); \
+ zend_ulong __h; \
+ zend_string *__key = NULL; \
+ uint32_t _idx = (_from); \
+ size_t _size = ZEND_HASH_ELEMENT_SIZE(__ht); \
+ zval *__z = ZEND_HASH_ELEMENT_EX(__ht, _idx, _size); \
+ uint32_t _count = __ht->nNumUsed - _idx; \
+ for (;_count > 0; _count--) { \
+ zval *_z = __z; \
+ if (HT_IS_PACKED(__ht)) { \
+ __z++; \
+ __h = _idx; \
+ _idx++; \
+ } else { \
+ Bucket *_p = (Bucket*)__z; \
+ __z = &(_p + 1)->val; \
+ __h = _p->h; \
+ __key = _p->key; \
+ if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
+ _z = Z_INDIRECT_P(_z); \
+ } \
} \
+ (void) __h; (void) __key; (void) _idx; \
if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;
#define ZEND_HASH_FOREACH(_ht, indirect) ZEND_HASH_FOREACH_FROM(_ht, indirect, 0)
@@ -974,14 +1043,28 @@
#define ZEND_HASH_REVERSE_FOREACH(_ht, indirect) do { \
HashTable *__ht = (_ht); \
uint32_t _idx = __ht->nNumUsed; \
- Bucket *_p = __ht->arData + _idx; \
zval *_z; \
- for (_idx = __ht->nNumUsed; _idx > 0; _idx--) { \
- _p--; \
- _z = &_p->val; \
- if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
- _z = Z_INDIRECT_P(_z); \
+ zend_ulong __h; \
+ zend_string *__key = NULL; \
+ size_t _size = ZEND_HASH_ELEMENT_SIZE(__ht); \
+ zval *__z = ZEND_HASH_ELEMENT_EX(__ht, _idx, _size); \
+ for (;_idx > 0; _idx--) { \
+ if (HT_IS_PACKED(__ht)) { \
+ __z--; \
+ _z = __z; \
+ __h = _idx - 1; \
+ } else { \
+ Bucket *_p = (Bucket*)__z; \
+ _p--; \
+ __z = &_p->val; \
+ _z = __z; \
+ __h = _p->h; \
+ __key = _p->key; \
+ if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
+ _z = Z_INDIRECT_P(_z); \
+ } \
} \
+ (void) __h; (void) __key; (void) __z; \
if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;
#define ZEND_HASH_FOREACH_END() \
@@ -989,44 +1072,23 @@
} while (0)
#define ZEND_HASH_FOREACH_END_DEL() \
- __ht->nNumOfElements--; \
- do { \
- uint32_t j = HT_IDX_TO_HASH(_idx - 1); \
- uint32_t nIndex = _p->h | __ht->nTableMask; \
- uint32_t i = HT_HASH(__ht, nIndex); \
- if (UNEXPECTED(j != i)) { \
- Bucket *prev = HT_HASH_TO_BUCKET(__ht, i); \
- while (Z_NEXT(prev->val) != j) { \
- i = Z_NEXT(prev->val); \
- prev = HT_HASH_TO_BUCKET(__ht, i); \
- } \
- Z_NEXT(prev->val) = Z_NEXT(_p->val); \
- } else { \
- HT_HASH(__ht, nIndex) = Z_NEXT(_p->val); \
- } \
- } while (0); \
- } \
- __ht->nNumUsed = _idx; \
- } while (0)
+ ZEND_HASH_MAP_FOREACH_END_DEL()
#define ZEND_HASH_FOREACH_BUCKET(ht, _bucket) \
- ZEND_HASH_FOREACH(ht, 0); \
- _bucket = _p;
+ ZEND_HASH_MAP_FOREACH_BUCKET(ht, _bucket)
#define ZEND_HASH_FOREACH_BUCKET_FROM(ht, _bucket, _from) \
- ZEND_HASH_FOREACH_FROM(ht, 0, _from); \
- _bucket = _p;
+ ZEND_HASH_MAP_FOREACH_BUCKET_FROM(ht, _bucket, _from)
#define ZEND_HASH_REVERSE_FOREACH_BUCKET(ht, _bucket) \
- ZEND_HASH_REVERSE_FOREACH(ht, 0); \
- _bucket = _p;
+ ZEND_HASH_MAP_REVERSE_FOREACH_BUCKET(ht, _bucket)
#define ZEND_HASH_FOREACH_VAL(ht, _val) \
- ZEND_HASH_FOREACH(ht, 0); \
+ _ZEND_HASH_FOREACH_VAL(ht); \
_val = _z;
#define ZEND_HASH_REVERSE_FOREACH_VAL(ht, _val) \
- ZEND_HASH_REVERSE_FOREACH(ht, 0); \
+ _ZEND_HASH_REVERSE_FOREACH_VAL(ht); \
_val = _z;
#define ZEND_HASH_FOREACH_VAL_IND(ht, _val) \
@@ -1038,7 +1100,7 @@
_val = _z;
#define ZEND_HASH_FOREACH_PTR(ht, _ptr) \
- ZEND_HASH_FOREACH(ht, 0); \
+ _ZEND_HASH_FOREACH_VAL(ht); \
_ptr = Z_PTR_P(_z);
#define ZEND_HASH_FOREACH_PTR_FROM(ht, _ptr, _from) \
@@ -1046,126 +1108,402 @@
_ptr = Z_PTR_P(_z);
#define ZEND_HASH_REVERSE_FOREACH_PTR(ht, _ptr) \
- ZEND_HASH_REVERSE_FOREACH(ht, 0); \
+ _ZEND_HASH_REVERSE_FOREACH_VAL(ht); \
_ptr = Z_PTR_P(_z);
#define ZEND_HASH_FOREACH_NUM_KEY(ht, _h) \
ZEND_HASH_FOREACH(ht, 0); \
- _h = _p->h;
+ _h = __h;
#define ZEND_HASH_REVERSE_FOREACH_NUM_KEY(ht, _h) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
- _h = _p->h;
+ _h = __h;
#define ZEND_HASH_FOREACH_STR_KEY(ht, _key) \
ZEND_HASH_FOREACH(ht, 0); \
- _key = _p->key;
+ _key = __key;
#define ZEND_HASH_REVERSE_FOREACH_STR_KEY(ht, _key) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
- _key = _p->key;
+ _key = __key;
#define ZEND_HASH_FOREACH_KEY(ht, _h, _key) \
ZEND_HASH_FOREACH(ht, 0); \
- _h = _p->h; \
- _key = _p->key;
+ _h = __h; \
+ _key = __key;
#define ZEND_HASH_REVERSE_FOREACH_KEY(ht, _h, _key) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
- _h = _p->h; \
- _key = _p->key;
+ _h = __h; \
+ _key = __key;
#define ZEND_HASH_FOREACH_NUM_KEY_VAL(ht, _h, _val) \
ZEND_HASH_FOREACH(ht, 0); \
- _h = _p->h; \
+ _h = __h; \
_val = _z;
#define ZEND_HASH_REVERSE_FOREACH_NUM_KEY_VAL(ht, _h, _val) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
- _h = _p->h; \
+ _h = __h; \
_val = _z;
#define ZEND_HASH_FOREACH_STR_KEY_VAL(ht, _key, _val) \
ZEND_HASH_FOREACH(ht, 0); \
- _key = _p->key; \
+ _key = __key; \
_val = _z;
#define ZEND_HASH_FOREACH_STR_KEY_VAL_FROM(ht, _key, _val, _from) \
ZEND_HASH_FOREACH_FROM(ht, 0, _from); \
- _key = _p->key; \
+ _key = __key; \
_val = _z;
#define ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(ht, _key, _val) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
- _key = _p->key; \
+ _key = __key; \
_val = _z;
#define ZEND_HASH_FOREACH_KEY_VAL(ht, _h, _key, _val) \
ZEND_HASH_FOREACH(ht, 0); \
- _h = _p->h; \
- _key = _p->key; \
+ _h = __h; \
+ _key = __key; \
_val = _z;
#define ZEND_HASH_REVERSE_FOREACH_KEY_VAL(ht, _h, _key, _val) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
- _h = _p->h; \
- _key = _p->key; \
+ _h = __h; \
+ _key = __key; \
_val = _z;
#define ZEND_HASH_FOREACH_STR_KEY_VAL_IND(ht, _key, _val) \
ZEND_HASH_FOREACH(ht, 1); \
- _key = _p->key; \
+ _key = __key; \
_val = _z;
#define ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL_IND(ht, _key, _val) \
ZEND_HASH_REVERSE_FOREACH(ht, 1); \
- _key = _p->key; \
+ _key = __key; \
_val = _z;
#define ZEND_HASH_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \
ZEND_HASH_FOREACH(ht, 1); \
- _h = _p->h; \
- _key = _p->key; \
+ _h = __h; \
+ _key = __key; \
_val = _z;
#define ZEND_HASH_REVERSE_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \
ZEND_HASH_REVERSE_FOREACH(ht, 1); \
- _h = _p->h; \
- _key = _p->key; \
+ _h = __h; \
+ _key = __key; \
_val = _z;
#define ZEND_HASH_FOREACH_NUM_KEY_PTR(ht, _h, _ptr) \
ZEND_HASH_FOREACH(ht, 0); \
- _h = _p->h; \
+ _h = __h; \
_ptr = Z_PTR_P(_z);
#define ZEND_HASH_REVERSE_FOREACH_NUM_KEY_PTR(ht, _h, _ptr) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
- _h = _p->h; \
+ _h = __h; \
_ptr = Z_PTR_P(_z);
#define ZEND_HASH_FOREACH_STR_KEY_PTR(ht, _key, _ptr) \
ZEND_HASH_FOREACH(ht, 0); \
- _key = _p->key; \
+ _key = __key; \
_ptr = Z_PTR_P(_z);
#define ZEND_HASH_REVERSE_FOREACH_STR_KEY_PTR(ht, _key, _ptr) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
- _key = _p->key; \
+ _key = __key; \
_ptr = Z_PTR_P(_z);
#define ZEND_HASH_FOREACH_KEY_PTR(ht, _h, _key, _ptr) \
ZEND_HASH_FOREACH(ht, 0); \
- _h = _p->h; \
- _key = _p->key; \
+ _h = __h; \
+ _key = __key; \
_ptr = Z_PTR_P(_z);
#define ZEND_HASH_REVERSE_FOREACH_KEY_PTR(ht, _h, _key, _ptr) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
+ _h = __h; \
+ _key = __key; \
+ _ptr = Z_PTR_P(_z);
+
+/* Hash array iterators */
+#define ZEND_HASH_MAP_FOREACH_FROM(_ht, indirect, _from) do { \
+ HashTable *__ht = (_ht); \
+ Bucket *_p = __ht->arData + (_from); \
+ Bucket *_end = __ht->arData + __ht->nNumUsed; \
+ ZEND_ASSERT(!HT_IS_PACKED(__ht)); \
+ for (; _p != _end; _p++) { \
+ zval *_z = &_p->val; \
+ if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
+ _z = Z_INDIRECT_P(_z); \
+ } \
+ if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;
+
+#define ZEND_HASH_MAP_FOREACH(_ht, indirect) ZEND_HASH_MAP_FOREACH_FROM(_ht, indirect, 0)
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH(_ht, indirect) do { \
+ HashTable *__ht = (_ht); \
+ uint32_t _idx = __ht->nNumUsed; \
+ Bucket *_p = __ht->arData + _idx; \
+ zval *_z; \
+ ZEND_ASSERT(!HT_IS_PACKED(__ht)); \
+ for (_idx = __ht->nNumUsed; _idx > 0; _idx--) { \
+ _p--; \
+ _z = &_p->val; \
+ if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
+ _z = Z_INDIRECT_P(_z); \
+ } \
+ if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;
+
+#define ZEND_HASH_MAP_FOREACH_END_DEL() \
+ ZEND_ASSERT(!HT_IS_PACKED(__ht)); \
+ __ht->nNumOfElements--; \
+ do { \
+ uint32_t j = HT_IDX_TO_HASH(_idx - 1); \
+ uint32_t nIndex = _p->h | __ht->nTableMask; \
+ uint32_t i = HT_HASH(__ht, nIndex); \
+ if (UNEXPECTED(j != i)) { \
+ Bucket *prev = HT_HASH_TO_BUCKET(__ht, i); \
+ while (Z_NEXT(prev->val) != j) { \
+ i = Z_NEXT(prev->val); \
+ prev = HT_HASH_TO_BUCKET(__ht, i); \
+ } \
+ Z_NEXT(prev->val) = Z_NEXT(_p->val); \
+ } else { \
+ HT_HASH(__ht, nIndex) = Z_NEXT(_p->val); \
+ } \
+ } while (0); \
+ } \
+ __ht->nNumUsed = _idx; \
+ } while (0)
+
+#define ZEND_HASH_MAP_FOREACH_BUCKET(ht, _bucket) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _bucket = _p;
+
+#define ZEND_HASH_MAP_FOREACH_BUCKET_FROM(ht, _bucket, _from) \
+ ZEND_HASH_MAP_FOREACH_FROM(ht, 0, _from); \
+ _bucket = _p;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_BUCKET(ht, _bucket) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _bucket = _p;
+
+#define ZEND_HASH_MAP_FOREACH_VAL(ht, _val) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _val = _z;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_VAL(ht, _val) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _val = _z;
+
+#define ZEND_HASH_MAP_FOREACH_VAL_IND(ht, _val) \
+ ZEND_HASH_MAP_FOREACH(ht, 1); \
+ _val = _z;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_VAL_IND(ht, _val) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 1); \
+ _val = _z;
+
+#define ZEND_HASH_MAP_FOREACH_PTR(ht, _ptr) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_MAP_FOREACH_PTR_FROM(ht, _ptr, _from) \
+ ZEND_HASH_MAP_FOREACH_FROM(ht, 0, _from); \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_PTR(ht, _ptr) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_MAP_FOREACH_NUM_KEY(ht, _h) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _h = _p->h;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_NUM_KEY(ht, _h) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _h = _p->h;
+
+#define ZEND_HASH_MAP_FOREACH_STR_KEY(ht, _key) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _key = _p->key;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY(ht, _key) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _key = _p->key;
+
+#define ZEND_HASH_MAP_FOREACH_KEY(ht, _h, _key) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
_h = _p->h; \
+ _key = _p->key;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_KEY(ht, _h, _key) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _h = _p->h; \
+ _key = _p->key;
+
+#define ZEND_HASH_MAP_FOREACH_NUM_KEY_VAL(ht, _h, _val) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _h = _p->h; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_NUM_KEY_VAL(ht, _h, _val) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _h = _p->h; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(ht, _key, _val) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
_key = _p->key; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_FOREACH_STR_KEY_VAL_FROM(ht, _key, _val, _from) \
+ ZEND_HASH_MAP_FOREACH_FROM(ht, 0, _from); \
+ _key = _p->key; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY_VAL(ht, _key, _val) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _key = _p->key; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_FOREACH_KEY_VAL(ht, _h, _key, _val) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _h = _p->h; \
+ _key = _p->key; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_KEY_VAL(ht, _h, _key, _val) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _h = _p->h; \
+ _key = _p->key; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_FOREACH_STR_KEY_VAL_IND(ht, _key, _val) \
+ ZEND_HASH_MAP_FOREACH(ht, 1); \
+ _key = _p->key; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY_VAL_IND(ht, _key, _val) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 1); \
+ _key = _p->key; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \
+ ZEND_HASH_MAP_FOREACH(ht, 1); \
+ _h = _p->h; \
+ _key = _p->key; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 1); \
+ _h = _p->h; \
+ _key = _p->key; \
+ _val = _z;
+
+#define ZEND_HASH_MAP_FOREACH_NUM_KEY_PTR(ht, _h, _ptr) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _h = _p->h; \
_ptr = Z_PTR_P(_z);
+#define ZEND_HASH_MAP_REVERSE_FOREACH_NUM_KEY_PTR(ht, _h, _ptr) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _h = _p->h; \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(ht, _key, _ptr) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _key = _p->key; \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_STR_KEY_PTR(ht, _key, _ptr) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _key = _p->key; \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_MAP_FOREACH_KEY_PTR(ht, _h, _key, _ptr) \
+ ZEND_HASH_MAP_FOREACH(ht, 0); \
+ _h = _p->h; \
+ _key = _p->key; \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_MAP_REVERSE_FOREACH_KEY_PTR(ht, _h, _key, _ptr) \
+ ZEND_HASH_MAP_REVERSE_FOREACH(ht, 0); \
+ _h = _p->h; \
+ _key = _p->key; \
+ _ptr = Z_PTR_P(_z);
+
+/* Packed array iterators */
+#define ZEND_HASH_PACKED_FOREACH_FROM(_ht, _from) do { \
+ HashTable *__ht = (_ht); \
+ zend_ulong _idx = (_from); \
+ zval *_z = __ht->arPacked + (_from); \
+ zval *_end = __ht->arPacked + __ht->nNumUsed; \
+ ZEND_ASSERT(HT_IS_PACKED(__ht)); \
+ for (;_z != _end; _z++, _idx++) { \
+ (void) _idx; \
+ if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;
+
+#define ZEND_HASH_PACKED_FOREACH(_ht) ZEND_HASH_PACKED_FOREACH_FROM(_ht, 0)
+
+#define ZEND_HASH_PACKED_REVERSE_FOREACH(_ht) do { \
+ HashTable *__ht = (_ht); \
+ zend_ulong _idx = __ht->nNumUsed; \
+ zval *_z = __ht->arPacked + _idx; \
+ ZEND_ASSERT(HT_IS_PACKED(__ht)); \
+ while (_idx > 0) { \
+ _z--; \
+ _idx--; \
+ (void) _idx; \
+ if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;
+
+#define ZEND_HASH_PACKED_FOREACH_VAL(ht, _val) \
+ ZEND_HASH_PACKED_FOREACH(ht); \
+ _val = _z;
+
+#define ZEND_HASH_PACKED_REVERSE_FOREACH_VAL(ht, _val) \
+ ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
+ _val = _z;
+
+#define ZEND_HASH_PACKED_FOREACH_PTR(ht, _ptr) \
+ ZEND_HASH_PACKED_FOREACH(ht); \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_PACKED_REVERSE_FOREACH_PTR(ht, _ptr) \
+ ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_PACKED_FOREACH_KEY(ht, _h) \
+ ZEND_HASH_PACKED_FOREACH(ht); \
+ _h = _idx;
+
+#define ZEND_HASH_PACKED_REVERSE_FOREACH_KEY(ht, _h) \
+ ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
+ _h = _idx;
+
+#define ZEND_HASH_PACKED_FOREACH_KEY_VAL(ht, _h, _val) \
+ ZEND_HASH_PACKED_FOREACH(ht); \
+ _h = _idx; \
+ _val = _z;
+
+#define ZEND_HASH_PACKED_REVERSE_FOREACH_KEY_VAL(ht, _h, _val) \
+ ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
+ _h = _idx; \
+ _val = _z;
+
+#define ZEND_HASH_PACKED_FOREACH_KEY_PTR(ht, _h, _ptr) \
+ ZEND_HASH_PACKED_FOREACH(ht); \
+ _h = _idx; \
+ _ptr = Z_PTR_P(_z);
+
+#define ZEND_HASH_PACKED_REVERSE_FOREACH_KEY_PTR(ht, _h, _ptr) \
+ ZEND_HASH_PACKED_REVERSE_FOREACH(ht); \
+ _h = _idx; \
+ _ptr = Z_PTR_P(_z);
+
/* The following macros are useful to insert a sequence of new elements
* of packed array. They may be used instead of series of
* zend_hash_next_index_insert_new()
@@ -1173,7 +1511,7 @@
*/
#define ZEND_HASH_FILL_PACKED(ht) do { \
HashTable *__fill_ht = (ht); \
- Bucket *__fill_bkt = __fill_ht->arData + __fill_ht->nNumUsed; \
+ zval *__fill_val = __fill_ht->arPacked + __fill_ht->nNumUsed; \
uint32_t __fill_idx = __fill_ht->nNumUsed; \
ZEND_ASSERT(HT_FLAGS(__fill_ht) & HASH_FLAG_PACKED);
@@ -1183,35 +1521,33 @@
__fill_ht->nNumOfElements = __fill_idx; \
__fill_ht->nNextFreeElement = __fill_idx; \
zend_hash_packed_grow(__fill_ht); \
- __fill_bkt = __fill_ht->arData + __fill_idx; \
+ __fill_val = __fill_ht->arPacked + __fill_idx; \
} \
} while (0);
#define ZEND_HASH_FILL_SET(_val) \
- ZVAL_COPY_VALUE(&__fill_bkt->val, _val)
+ ZVAL_COPY_VALUE(__fill_val, _val)
#define ZEND_HASH_FILL_SET_NULL() \
- ZVAL_NULL(&__fill_bkt->val)
+ ZVAL_NULL(__fill_val)
#define ZEND_HASH_FILL_SET_LONG(_val) \
- ZVAL_LONG(&__fill_bkt->val, _val)
+ ZVAL_LONG(__fill_val, _val)
#define ZEND_HASH_FILL_SET_DOUBLE(_val) \
- ZVAL_DOUBLE(&__fill_bkt->val, _val)
+ ZVAL_DOUBLE(__fill_val, _val)
#define ZEND_HASH_FILL_SET_STR(_val) \
- ZVAL_STR(&__fill_bkt->val, _val)
+ ZVAL_STR(__fill_val, _val)
#define ZEND_HASH_FILL_SET_STR_COPY(_val) \
- ZVAL_STR_COPY(&__fill_bkt->val, _val)
+ ZVAL_STR_COPY(__fill_val, _val)
#define ZEND_HASH_FILL_SET_INTERNED_STR(_val) \
- ZVAL_INTERNED_STR(&__fill_bkt->val, _val)
+ ZVAL_INTERNED_STR(__fill_val, _val)
#define ZEND_HASH_FILL_NEXT() do {\
- __fill_bkt->h = (__fill_idx); \
- __fill_bkt->key = NULL; \
- __fill_bkt++; \
+ __fill_val++; \
__fill_idx++; \
} while (0)
@@ -1234,8 +1570,8 @@
/* Check if an array is a list */
static zend_always_inline bool zend_array_is_list(zend_array *array)
{
- zend_long expected_idx = 0;
- zend_long num_idx;
+ zend_ulong expected_idx = 0;
+ zend_ulong num_idx;
zend_string* str_idx;
/* Empty arrays are lists */
if (zend_hash_num_elements(array) == 0) {
@@ -1243,17 +1579,25 @@
}
/* Packed arrays are lists */
- if (HT_IS_PACKED(array) && HT_IS_WITHOUT_HOLES(array)) {
- return 1;
+ if (HT_IS_PACKED(array)) {
+ if (HT_IS_WITHOUT_HOLES(array)) {
+ return 1;
+ }
+ /* Check if the list could theoretically be repacked */
+ ZEND_HASH_PACKED_FOREACH_KEY(array, num_idx) {
+ if (num_idx != expected_idx++) {
+ return 0;
+ }
+ } ZEND_HASH_FOREACH_END();
+ } else {
+ /* Check if the list could theoretically be repacked */
+ ZEND_HASH_MAP_FOREACH_KEY(array, num_idx, str_idx) {
+ if (str_idx != NULL || num_idx != expected_idx++) {
+ return 0;
+ }
+ } ZEND_HASH_FOREACH_END();
}
- /* Check if the list could theoretically be repacked */
- ZEND_HASH_FOREACH_KEY(array, num_idx, str_idx) {
- if (str_idx != NULL || num_idx != expected_idx++) {
- return 0;
- }
- } ZEND_HASH_FOREACH_END();
-
return 1;
}
Modified: trunk/MgDev/Oem/php/include/Zend/zend_inheritance.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_inheritance.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_inheritance.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -27,14 +27,15 @@
ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry *iface);
ZEND_API void zend_do_inheritance_ex(zend_class_entry *ce, zend_class_entry *parent_ce, bool checked);
-#define zend_do_inheritance(ce, parent_ce) \
- zend_do_inheritance_ex(ce, parent_ce, 0)
+static zend_always_inline void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce) {
+ zend_do_inheritance_ex(ce, parent_ce, 0);
+}
ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string *lc_parent_name, zend_string *key);
void zend_verify_abstract_class(zend_class_entry *ce);
void zend_build_properties_info_table(zend_class_entry *ce);
-zend_class_entry *zend_try_early_bind(zend_class_entry *ce, zend_class_entry *parent_ce, zend_string *lcname, zval *delayed_early_binding);
+ZEND_API zend_class_entry *zend_try_early_bind(zend_class_entry *ce, zend_class_entry *parent_ce, zend_string *lcname, zval *delayed_early_binding);
ZEND_API extern zend_class_entry* (*zend_inheritance_cache_get)(zend_class_entry *ce, zend_class_entry *parent, zend_class_entry **traits_and_interfaces);
ZEND_API extern zend_class_entry* (*zend_inheritance_cache_add)(zend_class_entry *ce, zend_class_entry *proto, zend_class_entry *parent, zend_class_entry **traits_and_interfaces, HashTable *dependencies);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_ini.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_ini.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_ini.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -90,6 +90,52 @@
ZEND_API zend_string *zend_ini_get_value(zend_string *name);
ZEND_API bool zend_ini_parse_bool(zend_string *str);
+/**
+ * Parses an ini quantity
+ *
+ * The value parameter must be a string in the form
+ *
+ * sign? digits ws* multiplier?
+ *
+ * with
+ *
+ * sign: [+-]
+ * digit: [0-9]
+ * digits: digit+
+ * ws: [ \t\n\r\v\f]
+ * multiplier: [KMG]
+ *
+ * Leading and trailing whitespaces are ignored.
+ *
+ * If the string is empty or consists only of only whitespaces, 0 is returned.
+ *
+ * Digits is parsed as decimal unless the first digit is '0', in which case
+ * digits is parsed as octal.
+ *
+ * The multiplier is case-insensitive. K, M, and G multiply the quantity by
+ * 2**10, 2**20, and 2**30, respectively.
+ *
+ * For backwards compatibility, ill-formatted values are handled as follows:
+ * - No leading digits: value is treated as '0'
+ * - Invalid multiplier: multiplier is ignored
+ * - Invalid characters between digits and multiplier: invalid characters are
+ * ignored
+ * - Integer overflow: The result of the overflow is returned
+ *
+ * In any of these cases an error string is stored in *errstr (caller must
+ * release it), otherwise *errstr is set to NULL.
+ */
+ZEND_API zend_long zend_ini_parse_quantity(zend_string *value, zend_string **errstr);
+
+/**
+ * Unsigned variant of zend_ini_parse_quantity
+ */
+ZEND_API zend_ulong zend_ini_parse_uquantity(zend_string *value, zend_string **errstr);
+
+ZEND_API zend_long zend_ini_parse_quantity_warn(zend_string *value, zend_string *setting);
+
+ZEND_API zend_ulong zend_ini_parse_uquantity_warn(zend_string *value, zend_string *setting);
+
ZEND_API zend_result zend_ini_register_displayer(const char *name, uint32_t name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));
ZEND_API ZEND_INI_DISP(zend_ini_boolean_displayer_cb);
@@ -150,8 +196,8 @@
#define INI_ORIG_STR(name) zend_ini_string((name), strlen(name), 1)
#define INI_ORIG_BOOL(name) ((bool) INI_ORIG_INT(name))
-#define REGISTER_INI_ENTRIES() zend_register_ini_entries(ini_entries, module_number)
-#define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries(module_number)
+#define REGISTER_INI_ENTRIES() zend_register_ini_entries_ex(ini_entries, module_number, type)
+#define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries_ex(module_number, type)
#define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module)
#define REGISTER_INI_DISPLAYER(name, displayer) zend_ini_register_displayer((name), strlen(name), displayer)
@@ -163,8 +209,12 @@
ZEND_API ZEND_INI_MH(OnUpdateLong);
ZEND_API ZEND_INI_MH(OnUpdateLongGEZero);
ZEND_API ZEND_INI_MH(OnUpdateReal);
+/* char* versions */
ZEND_API ZEND_INI_MH(OnUpdateString);
ZEND_API ZEND_INI_MH(OnUpdateStringUnempty);
+/* zend_string* versions */
+ZEND_API ZEND_INI_MH(OnUpdateStr);
+ZEND_API ZEND_INI_MH(OnUpdateStrNotEmpty);
END_EXTERN_C()
#define ZEND_INI_DISPLAY_ORIG 1
Modified: trunk/MgDev/Oem/php/include/Zend/zend_interfaces.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_interfaces.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_interfaces.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -40,14 +40,23 @@
ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
-#define zend_call_method_with_0_params(obj, obj_ce, fn_proxy, function_name, retval) \
- zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
+static zend_always_inline zval* zend_call_method_with_0_params(zend_object *object, zend_class_entry *obj_ce,
+ zend_function **fn_proxy, const char *function_name, zval *retval)
+{
+ return zend_call_method(object, obj_ce, fn_proxy, function_name, strlen(function_name), retval, 0, NULL, NULL);
+}
-#define zend_call_method_with_1_params(obj, obj_ce, fn_proxy, function_name, retval, arg1) \
- zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
+static zend_always_inline zval* zend_call_method_with_1_params(zend_object *object, zend_class_entry *obj_ce,
+ zend_function **fn_proxy, const char *function_name, zval *retval, zval* arg1)
+{
+ return zend_call_method(object, obj_ce, fn_proxy, function_name, strlen(function_name), retval, 1, arg1, NULL);
+}
-#define zend_call_method_with_2_params(obj, obj_ce, fn_proxy, function_name, retval, arg1, arg2) \
- zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
+static zend_always_inline zval* zend_call_method_with_2_params(zend_object *object, zend_class_entry *obj_ce,
+ zend_function **fn_proxy, const char *function_name, zval *retval, zval* arg1, zval* arg2)
+{
+ return zend_call_method(object, obj_ce, fn_proxy, function_name, strlen(function_name), retval, 2, arg1, arg2);
+}
ZEND_API void zend_user_it_rewind(zend_object_iterator *_iter);
ZEND_API zend_result zend_user_it_valid(zend_object_iterator *_iter);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_iterators.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_iterators.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_iterators.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -72,6 +72,13 @@
zend_function *zf_rewind;
} zend_class_iterator_funcs;
+typedef struct _zend_class_arrayaccess_funcs {
+ zend_function *zf_offsetget;
+ zend_function *zf_offsetexists;
+ zend_function *zf_offsetset;
+ zend_function *zf_offsetunset;
+} zend_class_arrayaccess_funcs;
+
BEGIN_EXTERN_C()
/* given a zval, returns stuff that can be used to iterate it. */
ZEND_API zend_object_iterator* zend_iterator_unwrap(zval *array_ptr);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_llist.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_llist.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_llist.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -66,11 +66,26 @@
ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos);
ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos);
-#define zend_llist_get_first(l) zend_llist_get_first_ex(l, NULL)
-#define zend_llist_get_last(l) zend_llist_get_last_ex(l, NULL)
-#define zend_llist_get_next(l) zend_llist_get_next_ex(l, NULL)
-#define zend_llist_get_prev(l) zend_llist_get_prev_ex(l, NULL)
+static zend_always_inline void *zend_llist_get_first(zend_llist *l)
+{
+ return zend_llist_get_first_ex(l, NULL);
+}
+static zend_always_inline void *zend_llist_get_last(zend_llist *l)
+{
+ return zend_llist_get_last_ex(l, NULL);
+}
+
+static zend_always_inline void *zend_llist_get_next(zend_llist *l)
+{
+ return zend_llist_get_next_ex(l, NULL);
+}
+
+static zend_always_inline void *zend_llist_get_prev(zend_llist *l)
+{
+ return zend_llist_get_prev_ex(l, NULL);
+}
+
END_EXTERN_C()
#endif /* ZEND_LLIST_H */
Modified: trunk/MgDev/Oem/php/include/Zend/zend_long.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_long.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_long.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -19,7 +19,8 @@
#ifndef ZEND_LONG_H
#define ZEND_LONG_H
-#include "main/php_stdint.h"
+#include <inttypes.h>
+#include <stdint.h>
/* This is the heart of the whole int64 enablement in zval. */
#if defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64)
Modified: trunk/MgDev/Oem/php/include/Zend/zend_map_ptr.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_map_ptr.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_map_ptr.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -24,16 +24,12 @@
#define ZEND_MAP_PTR_KIND_PTR 0
#define ZEND_MAP_PTR_KIND_PTR_OR_OFFSET 1
-//#if defined(ZTS) || defined(TSRM_WIN32)
-# define ZEND_MAP_PTR_KIND ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
-//#else
-//# define ZEND_MAP_PTR_KIND ZEND_MAP_PTR_KIND_PTR
-//#endif
+#define ZEND_MAP_PTR_KIND ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
#define ZEND_MAP_PTR(ptr) \
ptr ## __ptr
#define ZEND_MAP_PTR_DEF(type, name) \
- type * ZEND_MAP_PTR(name)
+ type ZEND_MAP_PTR(name)
#define ZEND_MAP_PTR_OFFSET2PTR(offset) \
((void**)((char*)CG(map_ptr_base) + offset))
#define ZEND_MAP_PTR_PTR2OFFSET(ptr) \
@@ -45,37 +41,23 @@
ZEND_MAP_PTR(ptr) = zend_map_ptr_new(); \
} while (0)
-#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
+#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
# define ZEND_MAP_PTR_NEW_OFFSET() \
- ((uint32_t)(uintptr_t)ZEND_MAP_PTR_PTR2OFFSET(zend_map_ptr_new()))
-# define ZEND_MAP_PTR_GET(ptr) \
- (*(ZEND_MAP_PTR(ptr)))
-# define ZEND_MAP_PTR_GET_IMM(ptr) \
- ZEND_MAP_PTR_GET(ptr)
-# define ZEND_MAP_PTR_SET(ptr, val) do { \
- (*(ZEND_MAP_PTR(ptr))) = (val); \
- } while (0)
-# define ZEND_MAP_PTR_SET_IMM(ptr, val) \
- ZEND_MAP_PTR_SET(ptr, val)
-# define ZEND_MAP_PTR_BIASED_BASE(real_base) \
- (real_base)
-#elif ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
-# define ZEND_MAP_PTR_NEW_OFFSET() \
((uint32_t)(uintptr_t)zend_map_ptr_new())
# define ZEND_MAP_PTR_IS_OFFSET(ptr) \
(((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L)
# define ZEND_MAP_PTR_GET(ptr) \
- (*(ZEND_MAP_PTR_IS_OFFSET(ptr) ? \
- ZEND_MAP_PTR_OFFSET2PTR((uintptr_t)ZEND_MAP_PTR(ptr)) : \
- ((void**)(ZEND_MAP_PTR(ptr)))))
+ ((ZEND_MAP_PTR_IS_OFFSET(ptr) ? \
+ ZEND_MAP_PTR_GET_IMM(ptr) : \
+ ((void*)(ZEND_MAP_PTR(ptr)))))
# define ZEND_MAP_PTR_GET_IMM(ptr) \
(*ZEND_MAP_PTR_OFFSET2PTR((uintptr_t)ZEND_MAP_PTR(ptr)))
# define ZEND_MAP_PTR_SET(ptr, val) do { \
- void **__p = (void**)(ZEND_MAP_PTR(ptr)); \
if (ZEND_MAP_PTR_IS_OFFSET(ptr)) { \
- __p = ZEND_MAP_PTR_OFFSET2PTR((uintptr_t)ZEND_MAP_PTR(ptr)); \
+ ZEND_MAP_PTR_SET_IMM(ptr, val); \
+ } else { \
+ ZEND_MAP_PTR_INIT(ptr, val); \
} \
- *__p = (val); \
} while (0)
# define ZEND_MAP_PTR_SET_IMM(ptr, val) do { \
void **__p = ZEND_MAP_PTR_OFFSET2PTR((uintptr_t)ZEND_MAP_PTR(ptr)); \
@@ -87,9 +69,13 @@
# error "Unknown ZEND_MAP_PTR_KIND"
#endif
+BEGIN_EXTERN_C()
+
ZEND_API void zend_map_ptr_reset(void);
ZEND_API void *zend_map_ptr_new(void);
ZEND_API void zend_map_ptr_extend(size_t last);
ZEND_API void zend_alloc_ce_cache(zend_string *type_name);
+END_EXTERN_C()
+
#endif /* ZEND_MAP_PTR_H */
Added: trunk/MgDev/Oem/php/include/Zend/zend_mmap.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_mmap.h (rev 0)
+++ trunk/MgDev/Oem/php/include/Zend/zend_mmap.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -0,0 +1,44 @@
+/*
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.00 of the Zend license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.zend.com/license/2_00.txt. |
+ | If you did not receive a copy of the Zend license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license at zend.com so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Max Kellermann <max.kellermann at ionos.com> |
+ +----------------------------------------------------------------------+
+*/
+
+#ifndef ZEND_MMAP_H
+#define ZEND_MMAP_H
+
+#include "zend_portability.h"
+
+#ifdef __linux__
+# include <sys/prctl.h>
+
+/* fallback definitions if our libc is older than the kernel */
+# ifndef PR_SET_VMA
+# define PR_SET_VMA 0x53564d41
+# endif
+# ifndef PR_SET_VMA_ANON_NAME
+# define PR_SET_VMA_ANON_NAME 0
+# endif
+#endif // __linux__
+
+/**
+ * Set a name for the specified memory area.
+ *
+ * This feature requires Linux 5.17.
+ */
+static zend_always_inline void zend_mmap_set_name(const void *start, size_t len, const char *name)
+{
+#ifdef __linux__
+ prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, (unsigned long)start, len, (unsigned long)name);
+#endif
+}
+
+#endif /* ZEND_MMAP_H */
Modified: trunk/MgDev/Oem/php/include/Zend/zend_modules.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_modules.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_modules.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -31,7 +31,7 @@
#define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module
#define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module
-#define ZEND_MODULE_API_NO 20210902
+#define ZEND_MODULE_API_NO 20220829
#ifdef ZTS
#define USING_ZTS 1
#else
Modified: trunk/MgDev/Oem/php/include/Zend/zend_multiply.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_multiply.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_multiply.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -94,6 +94,19 @@
(dval) = (double)(a) * (double)(b); \
} \
} while (0)
+# elif defined(_M_ARM64)
+# pragma intrinsic(__mulh)
+# define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
+ __int64 __high = __mulh((a), (b)); \
+ __int64 __low = (a) * (b); \
+ if ((__low >> 63I64) == __high) { \
+ (usedval) = 0; \
+ (lval) = __low; \
+ } else { \
+ (usedval) = 1; \
+ (dval) = (double)(a) * (double)(b); \
+ } \
+} while (0)
# else
# define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
zend_long __lres = (a) * (b); \
Modified: trunk/MgDev/Oem/php/include/Zend/zend_object_handlers.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_object_handlers.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_object_handlers.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -144,17 +144,17 @@
/* Cast an object to some other type.
* readobj and retval must point to distinct zvals.
*/
-typedef int (*zend_object_cast_t)(zend_object *readobj, zval *retval, int type);
+typedef zend_result (*zend_object_cast_t)(zend_object *readobj, zval *retval, int type);
/* updates *count to hold the number of elements present and returns SUCCESS.
* Returns FAILURE if the object does not have any sense of overloaded dimensions */
-typedef int (*zend_object_count_elements_t)(zend_object *object, zend_long *count);
+typedef zend_result (*zend_object_count_elements_t)(zend_object *object, zend_long *count);
-typedef int (*zend_object_get_closure_t)(zend_object *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr, bool check_only);
+typedef zend_result (*zend_object_get_closure_t)(zend_object *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr, bool check_only);
typedef HashTable *(*zend_object_get_gc_t)(zend_object *object, zval **table, int *n);
-typedef int (*zend_object_do_operation_t)(zend_uchar opcode, zval *result, zval *op1, zval *op2);
+typedef zend_result (*zend_object_do_operation_t)(zend_uchar opcode, zval *result, zval *op1, zval *op2);
struct _zend_object_handlers {
/* offset of real object header (usually zero) */
@@ -209,7 +209,7 @@
ZEND_API HashTable *zend_std_get_properties(zend_object *object);
ZEND_API HashTable *zend_std_get_gc(zend_object *object, zval **table, int *n);
ZEND_API HashTable *zend_std_get_debug_info(zend_object *object, int *is_temp);
-ZEND_API int zend_std_cast_object_tostring(zend_object *object, zval *writeobj, int type);
+ZEND_API zend_result zend_std_cast_object_tostring(zend_object *object, zval *writeobj, int type);
ZEND_API zval *zend_std_get_property_ptr_ptr(zend_object *object, zend_string *member, int type, void **cache_slot);
ZEND_API zval *zend_std_read_property(zend_object *object, zend_string *member, int type, void **cache_slot, zval *rv);
ZEND_API zval *zend_std_write_property(zend_object *object, zend_string *member, zval *value, void **cache_slot);
@@ -222,7 +222,7 @@
ZEND_API zend_function *zend_std_get_method(zend_object **obj_ptr, zend_string *method_name, const zval *key);
ZEND_API zend_string *zend_std_get_class_name(const zend_object *zobj);
ZEND_API int zend_std_compare_objects(zval *o1, zval *o2);
-ZEND_API int zend_std_get_closure(zend_object *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr, bool check_only);
+ZEND_API zend_result zend_std_get_closure(zend_object *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr, bool check_only);
ZEND_API void rebuild_object_properties(zend_object *zobj);
ZEND_API HashTable *zend_std_build_object_properties_array(zend_object *zobj);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_observer.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_observer.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_observer.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -27,6 +27,9 @@
BEGIN_EXTERN_C()
extern ZEND_API int zend_observer_fcall_op_array_extension;
+extern ZEND_API bool zend_observer_errors_observed;
+extern ZEND_API bool zend_observer_function_declared_observed;
+extern ZEND_API bool zend_observer_class_linked_observed;
#define ZEND_OBSERVER_ENABLED (zend_observer_fcall_op_array_extension != -1)
@@ -56,10 +59,16 @@
// Call during minit/startup ONLY
ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init);
+// Call during runtime, but only if you have used zend_observer_fcall_register.
+// You must not have more than one begin and one end handler active at the same time. Remove the old one first, if there is an existing one.
+ZEND_API void zend_observer_add_begin_handler(zend_function *function, zend_observer_fcall_begin_handler begin);
+ZEND_API bool zend_observer_remove_begin_handler(zend_function *function, zend_observer_fcall_begin_handler begin);
+ZEND_API void zend_observer_add_end_handler(zend_function *function, zend_observer_fcall_end_handler end);
+ZEND_API bool zend_observer_remove_end_handler(zend_function *function, zend_observer_fcall_end_handler end);
+
ZEND_API void zend_observer_startup(void); // Called by engine before MINITs
ZEND_API void zend_observer_post_startup(void); // Called by engine after MINITs
ZEND_API void zend_observer_activate(void);
-ZEND_API void zend_observer_deactivate(void);
ZEND_API void zend_observer_shutdown(void);
ZEND_API void ZEND_FASTCALL zend_observer_fcall_begin(
@@ -74,10 +83,35 @@
ZEND_API void zend_observer_fcall_end_all(void);
+typedef void (*zend_observer_function_declared_cb)(zend_op_array *op_array, zend_string *name);
+
+ZEND_API void zend_observer_function_declared_register(zend_observer_function_declared_cb cb);
+ZEND_API void ZEND_FASTCALL _zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name);
+static inline void zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name) {
+ if (UNEXPECTED(zend_observer_function_declared_observed)) {
+ _zend_observer_function_declared_notify(op_array, name);
+ }
+}
+
+typedef void (*zend_observer_class_linked_cb)(zend_class_entry *ce, zend_string *name);
+
+ZEND_API void zend_observer_class_linked_register(zend_observer_class_linked_cb cb);
+ZEND_API void ZEND_FASTCALL _zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name);
+static inline void zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name) {
+ if (UNEXPECTED(zend_observer_class_linked_observed)) {
+ _zend_observer_class_linked_notify(ce, name);
+ }
+}
+
typedef void (*zend_observer_error_cb)(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message);
ZEND_API void zend_observer_error_register(zend_observer_error_cb callback);
-void zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message);
+ZEND_API void _zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message);
+static inline void zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message) {
+ if (UNEXPECTED(zend_observer_errors_observed)) {
+ _zend_observer_error_notify(type, error_filename, error_lineno, message);
+ }
+}
typedef void (*zend_observer_fiber_init_handler)(zend_fiber_context *initializing);
typedef void (*zend_observer_fiber_switch_handler)(zend_fiber_context *from, zend_fiber_context *to);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_operators.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_operators.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_operators.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -161,19 +161,17 @@
zend_memnstr(const char *haystack, const char *needle, size_t needle_len, const char *end)
{
const char *p = haystack;
- ptrdiff_t off_p;
size_t off_s;
- if (needle_len == 0) {
- return p;
- }
+ ZEND_ASSERT(end >= p);
if (needle_len == 1) {
return (const char *)memchr(p, *needle, (end-p));
+ } else if (UNEXPECTED(needle_len == 0)) {
+ return p;
}
- off_p = end - haystack;
- off_s = (off_p > 0) ? (size_t)off_p : 0;
+ off_s = (size_t)(end - p);
if (needle_len > off_s) {
return NULL;
@@ -184,16 +182,13 @@
end -= needle_len;
while (p <= end) {
- if ((p = (const char *)memchr(p, *needle, (end-p+1))) && ne == p[needle_len-1]) {
- if (!memcmp(needle+1, p+1, needle_len-2)) {
+ if ((p = (const char *)memchr(p, *needle, (end-p+1)))) {
+ if (ne == p[needle_len-1] && !memcmp(needle+1, p+1, needle_len-2)) {
return p;
}
- }
-
- if (p == NULL) {
+ } else {
return NULL;
}
-
p++;
}
@@ -205,6 +200,10 @@
static zend_always_inline const void *zend_memrchr(const void *s, int c, size_t n)
{
+#if defined(HAVE_MEMRCHR) && !defined(i386)
+ /* On x86 memrchr() doesn't use SSE/AVX, so inlined version is faster */
+ return (const void*)memrchr(s, c, n);
+#else
const unsigned char *e;
if (0 == n) {
return NULL;
@@ -216,6 +215,7 @@
}
}
return NULL;
+#endif
}
@@ -422,18 +422,32 @@
ZEND_API int ZEND_FASTCALL string_case_compare_function(zval *op1, zval *op2);
ZEND_API int ZEND_FASTCALL string_locale_compare_function(zval *op1, zval *op2);
+ZEND_API extern const unsigned char zend_tolower_map[256];
+ZEND_API extern const unsigned char zend_toupper_map[256];
+
+#define zend_tolower_ascii(c) (zend_tolower_map[(unsigned char)(c)])
+#define zend_toupper_ascii(c) (zend_toupper_map[(unsigned char)(c)])
+
ZEND_API void ZEND_FASTCALL zend_str_tolower(char *str, size_t length);
+ZEND_API void ZEND_FASTCALL zend_str_toupper(char *str, size_t length);
ZEND_API char* ZEND_FASTCALL zend_str_tolower_copy(char *dest, const char *source, size_t length);
+ZEND_API char* ZEND_FASTCALL zend_str_toupper_copy(char *dest, const char *source, size_t length);
ZEND_API char* ZEND_FASTCALL zend_str_tolower_dup(const char *source, size_t length);
+ZEND_API char* ZEND_FASTCALL zend_str_toupper_dup(const char *source, size_t length);
ZEND_API char* ZEND_FASTCALL zend_str_tolower_dup_ex(const char *source, size_t length);
+ZEND_API char* ZEND_FASTCALL zend_str_toupper_dup_ex(const char *source, size_t length);
ZEND_API zend_string* ZEND_FASTCALL zend_string_tolower_ex(zend_string *str, bool persistent);
+ZEND_API zend_string* ZEND_FASTCALL zend_string_toupper_ex(zend_string *str, bool persistent);
-#define zend_string_tolower(str) zend_string_tolower_ex(str, 0)
+static zend_always_inline zend_string* zend_string_tolower(zend_string *str) {
+ return zend_string_tolower_ex(str, false);
+}
+static zend_always_inline zend_string* zend_string_toupper(zend_string *str) {
+ return zend_string_toupper_ex(str, false);
+}
ZEND_API int ZEND_FASTCALL zend_binary_zval_strcmp(zval *s1, zval *s2);
ZEND_API int ZEND_FASTCALL zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3);
-ZEND_API int ZEND_FASTCALL zend_binary_zval_strcasecmp(zval *s1, zval *s2);
-ZEND_API int ZEND_FASTCALL zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3);
ZEND_API int ZEND_FASTCALL zend_binary_strcmp(const char *s1, size_t len1, const char *s2, size_t len2);
ZEND_API int ZEND_FASTCALL zend_binary_strncmp(const char *s1, size_t len1, const char *s2, size_t len2, size_t length);
ZEND_API int ZEND_FASTCALL zend_binary_strcasecmp(const char *s1, size_t len1, const char *s2, size_t len2);
@@ -447,9 +461,12 @@
ZEND_API int ZEND_FASTCALL zend_compare_arrays(zval *a1, zval *a2);
ZEND_API int ZEND_FASTCALL zend_compare_objects(zval *o1, zval *o2);
-ZEND_API int ZEND_FASTCALL zend_atoi(const char *str, size_t str_len);
-ZEND_API zend_long ZEND_FASTCALL zend_atol(const char *str, size_t str_len);
+/** Deprecatd in favor of ZEND_STRTOL() */
+ZEND_ATTRIBUTE_DEPRECATED ZEND_API int ZEND_FASTCALL zend_atoi(const char *str, size_t str_len);
+/** Deprecatd in favor of ZEND_STRTOL() */
+ZEND_ATTRIBUTE_DEPRECATED ZEND_API zend_long ZEND_FASTCALL zend_atol(const char *str, size_t str_len);
+
#define convert_to_null_ex(zv) convert_to_null(zv)
#define convert_to_boolean_ex(zv) convert_to_boolean(zv)
#define convert_to_long_ex(zv) convert_to_long(zv)
@@ -898,7 +915,68 @@
}
/* }}} */
+static zend_always_inline bool zend_strnieq(const char *ptr1, const char *ptr2, size_t num)
+{
+ const char *end = ptr1 + num;
+ while (ptr1 < end) {
+ if (zend_tolower_ascii(*ptr1++) != zend_tolower_ascii(*ptr2++)) {
+ return 0;
+ }
+ }
+ return 1;
+}
+static zend_always_inline const char *
+zend_memnistr(const char *haystack, const char *needle, size_t needle_len, const char *end)
+{
+ ZEND_ASSERT(end >= haystack);
+
+ if (UNEXPECTED(needle_len == 0)) {
+ return haystack;
+ }
+
+ if (UNEXPECTED(needle_len > (size_t)(end - haystack))) {
+ return NULL;
+ }
+
+ const char first_lower = zend_tolower_ascii(*needle);
+ const char first_upper = zend_toupper_ascii(*needle);
+ const char *p_lower = (const char *)memchr(haystack, first_lower, end - haystack);
+ const char *p_upper = NULL;
+ if (first_lower != first_upper) {
+ // If the needle length is 1 we don't need to look beyond p_lower as it is a guaranteed match
+ size_t upper_search_length = end - (needle_len == 1 && p_lower != NULL ? p_lower : haystack);
+ p_upper = (const char *)memchr(haystack, first_upper, upper_search_length);
+ }
+ const char *p = !p_upper || (p_lower && p_lower < p_upper) ? p_lower : p_upper;
+
+ if (needle_len == 1) {
+ return p;
+ }
+
+ const char needle_end_lower = zend_tolower_ascii(needle[needle_len - 1]);
+ const char needle_end_upper = zend_toupper_ascii(needle[needle_len - 1]);
+ end -= needle_len;
+
+ while (p && p <= end) {
+ if (needle_end_lower == p[needle_len - 1] || needle_end_upper == p[needle_len - 1]) {
+ if (zend_strnieq(needle + 1, p + 1, needle_len - 2)) {
+ return p;
+ }
+ }
+ if (p_lower == p) {
+ p_lower = (const char *)memchr(p_lower + 1, first_lower, end - p_lower);
+ }
+ if (p_upper == p) {
+ p_upper = (const char *)memchr(p_upper + 1, first_upper, end - p_upper);
+ }
+ p = !p_upper || (p_lower && p_lower < p_upper) ? p_lower : p_upper;
+ }
+
+ return NULL;
+}
+
+
END_EXTERN_C()
#endif
Modified: trunk/MgDev/Oem/php/include/Zend/zend_portability.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_portability.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_portability.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -63,10 +63,6 @@
#include <limits.h>
-#if HAVE_ALLOCA_H && !defined(_ALLOCA_H)
-# include <alloca.h>
-#endif
-
#if defined(ZEND_WIN32) && !defined(__clang__)
#include <intrin.h>
#endif
@@ -181,6 +177,9 @@
# define ZEND_EXTENSIONS_SUPPORT 0
#endif
+#if defined(HAVE_ALLOCA_H) && !defined(_ALLOCA_H)
+# include <alloca.h>
+#endif
/* AIX requires this to be the first thing in the file. */
#ifndef __GNUC__
# ifndef HAVE_ALLOCA_H
@@ -194,8 +193,29 @@
# endif
#endif
+#if !ZEND_DEBUG && (defined(HAVE_ALLOCA) || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(HPUX)) && !defined(DARWIN)
+# define ZEND_ALLOCA_MAX_SIZE (32 * 1024)
+# define ALLOCA_FLAG(name) \
+ bool name;
+# define SET_ALLOCA_FLAG(name) \
+ name = true
+# define do_alloca_ex(size, limit, use_heap) \
+ ((use_heap = (UNEXPECTED((size) > (limit)))) ? emalloc(size) : alloca(size))
+# define do_alloca(size, use_heap) \
+ do_alloca_ex(size, ZEND_ALLOCA_MAX_SIZE, use_heap)
+# define free_alloca(p, use_heap) \
+ do { if (UNEXPECTED(use_heap)) efree(p); } while (0)
+#else
+# define ALLOCA_FLAG(name)
+# define SET_ALLOCA_FLAG(name)
+# define do_alloca(p, use_heap) emalloc(p)
+# define free_alloca(p, use_heap) efree(p)
+#endif
+
#if ZEND_GCC_VERSION >= 2096 || __has_attribute(__malloc__)
# define ZEND_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#elif defined(ZEND_WIN32)
+# define ZEND_ATTRIBUTE_MALLOC __declspec(allocator) __declspec(restrict)
#else
# define ZEND_ATTRIBUTE_MALLOC
#endif
@@ -208,6 +228,12 @@
# define ZEND_ATTRIBUTE_ALLOC_SIZE2(X,Y)
#endif
+#if ZEND_GCC_VERSION >= 3000
+# define ZEND_ATTRIBUTE_CONST __attribute__((const))
+#else
+# define ZEND_ATTRIBUTE_CONST
+#endif
+
#if ZEND_GCC_VERSION >= 2007 || __has_attribute(format)
# define ZEND_ATTRIBUTE_FORMAT(type, idx, first) __attribute__ ((format(type, idx, first)))
#else
@@ -345,25 +371,6 @@
# define XtOffsetOf(s_type, field) offsetof(s_type, field)
#endif
-#if (defined(HAVE_ALLOCA) || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(HPUX)) && !defined(DARWIN)
-# define ZEND_ALLOCA_MAX_SIZE (32 * 1024)
-# define ALLOCA_FLAG(name) \
- bool name;
-# define SET_ALLOCA_FLAG(name) \
- name = 1
-# define do_alloca_ex(size, limit, use_heap) \
- ((use_heap = (UNEXPECTED((size) > (limit)))) ? emalloc(size) : alloca(size))
-# define do_alloca(size, use_heap) \
- do_alloca_ex(size, ZEND_ALLOCA_MAX_SIZE, use_heap)
-# define free_alloca(p, use_heap) \
- do { if (UNEXPECTED(use_heap)) efree(p); } while (0)
-#else
-# define ALLOCA_FLAG(name)
-# define SET_ALLOCA_FLAG(name)
-# define do_alloca(p, use_heap) emalloc(p)
-# define free_alloca(p, use_heap) efree(p)
-#endif
-
#ifdef HAVE_SIGSETJMP
# define SETJMP(a) sigsetjmp(a, 0)
# define LONGJMP(a,b) siglongjmp(a, b)
@@ -457,6 +464,12 @@
#define ZEND_TRUTH(x) ((x) ? 1 : 0)
#define ZEND_LOG_XOR(a, b) (ZEND_TRUTH(a) ^ ZEND_TRUTH(b))
+/**
+ * Do a three-way comparison of two integers and returns -1, 0 or 1
+ * depending on whether #a is smaller, equal or larger than #b.
+ */
+#define ZEND_THREEWAY_COMPARE(a, b) ((a) == (b) ? 0 : ((a) < (b) ? -1 : 1))
+
#define ZEND_MAX_RESERVED_RESOURCES 6
/* excpt.h on Digital Unix 4.0 defines function_table */
@@ -517,7 +530,7 @@
#ifdef __SSSE3__
/* Instructions compiled directly. */
# define ZEND_INTRIN_SSSE3_NATIVE 1
-#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSSE3)) || defined(ZEND_WIN32)
+#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSSE3)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
/* Function resolved by ifunc or MINIT. */
# define ZEND_INTRIN_SSSE3_RESOLVER 1
#endif
@@ -542,7 +555,7 @@
#ifdef __SSE4_2__
/* Instructions compiled directly. */
# define ZEND_INTRIN_SSE4_2_NATIVE 1
-#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSE4_2)) || defined(ZEND_WIN32)
+#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSE4_2)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
/* Function resolved by ifunc or MINIT. */
# define ZEND_INTRIN_SSE4_2_RESOLVER 1
#endif
@@ -567,7 +580,7 @@
#ifdef __PCLMUL__
/* Instructions compiled directly. */
# define ZEND_INTRIN_PCLMUL_NATIVE 1
-#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_PCLMUL)) || defined(ZEND_WIN32)
+#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_PCLMUL)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
/* Function resolved by ifunc or MINIT. */
# define ZEND_INTRIN_PCLMUL_RESOLVER 1
#endif
@@ -593,7 +606,7 @@
#if defined(ZEND_INTRIN_SSE4_2_NATIVE) && defined(ZEND_INTRIN_PCLMUL_NATIVE)
/* Instructions compiled directly. */
# define ZEND_INTRIN_SSE4_2_PCLMUL_NATIVE 1
-#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSE4_2) && defined(PHP_HAVE_PCLMUL)) || defined(ZEND_WIN32)
+#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSE4_2) && defined(PHP_HAVE_PCLMUL)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
/* Function resolved by ifunc or MINIT. */
# define ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER 1
#endif
@@ -618,7 +631,7 @@
#ifdef __AVX2__
# define ZEND_INTRIN_AVX2_NATIVE 1
-#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_AVX2)) || defined(ZEND_WIN32)
+#elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_AVX2)) || (defined(ZEND_WIN32) && (!defined(_M_ARM64)))
# define ZEND_INTRIN_AVX2_RESOLVER 1
#endif
@@ -679,7 +692,7 @@
# define ZEND_VOIDP(ptr) (ptr)
#endif
-#if defined(__GNUC__) && ZEND_GCC_VERSION >= 9000
+#if __has_attribute(__indirect_return__)
# define ZEND_INDIRECT_RETURN __attribute__((__indirect_return__))
#else
# define ZEND_INDIRECT_RETURN
Modified: trunk/MgDev/Oem/php/include/Zend/zend_ptr_stack.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_ptr_stack.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_ptr_stack.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -48,7 +48,7 @@
do { \
stack->max += PTR_STACK_BLOCK_SIZE; \
} while (stack->top+count > stack->max); \
- stack->elements = (void **) perealloc(stack->elements, (sizeof(void *) * (stack->max)), stack->persistent); \
+ stack->elements = (void **) safe_perealloc(stack->elements, sizeof(void *), (stack->max), 0, stack->persistent); \
stack->top_element = stack->elements+stack->top; \
}
Modified: trunk/MgDev/Oem/php/include/Zend/zend_smart_str.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_smart_str.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_smart_str.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -21,29 +21,6 @@
#include "zend_globals.h"
#include "zend_smart_str_public.h"
-#define smart_str_appends_ex(dest, src, what) \
- smart_str_appendl_ex((dest), (src), strlen(src), (what))
-#define smart_str_appends(dest, src) \
- smart_str_appendl((dest), (src), strlen(src))
-#define smart_str_extend(dest, len) \
- smart_str_extend_ex((dest), (len), 0)
-#define smart_str_appendc(dest, c) \
- smart_str_appendc_ex((dest), (c), 0)
-#define smart_str_appendl(dest, src, len) \
- smart_str_appendl_ex((dest), (src), (len), 0)
-#define smart_str_append(dest, src) \
- smart_str_append_ex((dest), (src), 0)
-#define smart_str_append_smart_str(dest, src) \
- smart_str_append_smart_str_ex((dest), (src), 0)
-#define smart_str_sets(dest, src) \
- smart_str_setl((dest), (src), strlen(src));
-#define smart_str_append_long(dest, val) \
- smart_str_append_long_ex((dest), (val), 0)
-#define smart_str_append_unsigned(dest, val) \
- smart_str_append_unsigned_ex((dest), (val), 0)
-#define smart_str_free(dest) \
- smart_str_free_ex((dest), 0)
-
BEGIN_EXTERN_C()
ZEND_API void ZEND_FASTCALL smart_str_erealloc(smart_str *str, size_t len);
@@ -83,6 +60,11 @@
return ret;
}
+static zend_always_inline char* smart_str_extend(smart_str *dest, size_t length)
+{
+ return smart_str_extend_ex(dest, length, false);
+}
+
static zend_always_inline void smart_str_free_ex(smart_str *str, bool persistent) {
if (str->s) {
zend_string_release_ex(str->s, persistent);
@@ -91,6 +73,11 @@
str->a = 0;
}
+static zend_always_inline void smart_str_free(smart_str *str)
+{
+ smart_str_free_ex(str, false);
+}
+
static zend_always_inline void smart_str_0(smart_str *str) {
if (str->s) {
ZSTR_VAL(str->s)[ZSTR_LEN(str->s)] = '\0';
@@ -101,10 +88,24 @@
return str->s ? ZSTR_LEN(str->s) : 0;
}
-static zend_always_inline zend_string *smart_str_extract(smart_str *str) {
+static zend_always_inline void smart_str_trim_to_size_ex(smart_str *str, bool persistent)
+{
+ if (str->s && str->a > ZSTR_LEN(str->s)) {
+ str->s = zend_string_realloc(str->s, ZSTR_LEN(str->s), persistent);
+ str->a = ZSTR_LEN(str->s);
+ }
+}
+
+static zend_always_inline void smart_str_trim_to_size(smart_str *dest)
+{
+ smart_str_trim_to_size_ex(dest, false);
+}
+
+static zend_always_inline zend_string *smart_str_extract_ex(smart_str *str, bool persistent) {
if (str->s) {
zend_string *res;
smart_str_0(str);
+ smart_str_trim_to_size_ex(str, persistent);
res = str->s;
str->s = NULL;
return res;
@@ -113,6 +114,11 @@
}
}
+static zend_always_inline zend_string *smart_str_extract(smart_str *dest)
+{
+ return smart_str_extract_ex(dest, false);
+}
+
static zend_always_inline void smart_str_appendc_ex(smart_str *dest, char ch, bool persistent) {
size_t new_len = smart_str_alloc(dest, 1, persistent);
ZSTR_VAL(dest->s)[new_len - 1] = ch;
@@ -141,6 +147,11 @@
smart_str_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent);
}
+static zend_always_inline void smart_str_append_long(smart_str *dest, zend_long num)
+{
+ smart_str_append_long_ex(dest, num, false);
+}
+
static zend_always_inline void smart_str_append_unsigned_ex(smart_str *dest, zend_ulong num, bool persistent) {
char buf[32];
char *result = zend_print_ulong_to_buf(buf + sizeof(buf) - 1, num);
@@ -147,9 +158,43 @@
smart_str_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent);
}
+static zend_always_inline void smart_str_append_unsigned(smart_str *dest, zend_ulong num)
+{
+ smart_str_append_unsigned_ex(dest, num, false);
+}
+
+static zend_always_inline void smart_str_appendl(smart_str *dest, const char *src, size_t length)
+{
+ smart_str_appendl_ex(dest, src, length, false);
+}
+static zend_always_inline void smart_str_appends_ex(smart_str *dest, const char *src, bool persistent)
+{
+ smart_str_appendl_ex(dest, src, strlen(src), persistent);
+}
+static zend_always_inline void smart_str_appends(smart_str *dest, const char *src)
+{
+ smart_str_appendl_ex(dest, src, strlen(src), false);
+}
+static zend_always_inline void smart_str_append(smart_str *dest, const zend_string *src)
+{
+ smart_str_append_ex(dest, src, false);
+}
+static zend_always_inline void smart_str_appendc(smart_str *dest, char ch)
+{
+ smart_str_appendc_ex(dest, ch, false);
+}
+static zend_always_inline void smart_str_append_smart_str(smart_str *dest, const smart_str *src)
+{
+ smart_str_append_smart_str_ex(dest, src, false);
+}
+
static zend_always_inline void smart_str_setl(smart_str *dest, const char *src, size_t len) {
smart_str_free(dest);
smart_str_appendl(dest, src, len);
}
+static zend_always_inline void smart_str_sets(smart_str *dest, const char *src)
+{
+ smart_str_setl(dest, src, strlen(src));
+}
#endif
Modified: trunk/MgDev/Oem/php/include/Zend/zend_smart_str_public.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_smart_str_public.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_smart_str_public.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -18,6 +18,7 @@
#define ZEND_SMART_STR_PUBLIC_H
typedef struct {
+ /** See smart_str_extract() */
zend_string *s;
size_t a;
} smart_str;
Modified: trunk/MgDev/Oem/php/include/Zend/zend_string.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_string.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_string.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -339,23 +339,28 @@
}
}
+static zend_always_inline bool zend_string_equals_cstr(const zend_string *s1, const char *s2, size_t s2_length)
+{
+ return ZSTR_LEN(s1) == s2_length && !memcmp(ZSTR_VAL(s1), s2, s2_length);
+}
+
#if defined(__GNUC__) && (defined(__i386__) || (defined(__x86_64__) && !defined(__ILP32__)))
BEGIN_EXTERN_C()
-ZEND_API bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2);
+ZEND_API bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2);
END_EXTERN_C()
#else
-static zend_always_inline bool zend_string_equal_val(zend_string *s1, zend_string *s2)
+static zend_always_inline bool zend_string_equal_val(const zend_string *s1, const zend_string *s2)
{
return !memcmp(ZSTR_VAL(s1), ZSTR_VAL(s2), ZSTR_LEN(s1));
}
#endif
-static zend_always_inline bool zend_string_equal_content(zend_string *s1, zend_string *s2)
+static zend_always_inline bool zend_string_equal_content(const zend_string *s1, const zend_string *s2)
{
return ZSTR_LEN(s1) == ZSTR_LEN(s2) && zend_string_equal_val(s1, s2);
}
-static zend_always_inline bool zend_string_equals(zend_string *s1, zend_string *s2)
+static zend_always_inline bool zend_string_equals(const zend_string *s1, const zend_string *s2)
{
return s1 == s2 || zend_string_equal_content(s1, s2);
}
@@ -367,8 +372,21 @@
(ZSTR_LEN(str) == sizeof(c) - 1 && !zend_binary_strcasecmp(ZSTR_VAL(str), ZSTR_LEN(str), (c), sizeof(c) - 1))
#define zend_string_equals_literal(str, literal) \
- (ZSTR_LEN(str) == sizeof(literal)-1 && !memcmp(ZSTR_VAL(str), literal, sizeof(literal) - 1))
+ zend_string_equals_cstr(str, literal, strlen(literal))
+static zend_always_inline bool zend_string_starts_with_cstr(const zend_string *str, const char *prefix, size_t prefix_length)
+{
+ return ZSTR_LEN(str) >= prefix_length && !memcmp(ZSTR_VAL(str), prefix, prefix_length);
+}
+
+static zend_always_inline bool zend_string_starts_with(const zend_string *str, const zend_string *prefix)
+{
+ return zend_string_starts_with_cstr(str, ZSTR_VAL(prefix), ZSTR_LEN(prefix));
+}
+
+#define zend_string_starts_with_literal(str, prefix) \
+ zend_string_starts_with_cstr(str, prefix, strlen(prefix))
+
/*
* DJBX33A (Daniel J. Bernstein, Times 33 with Addition)
*
@@ -429,25 +447,25 @@
((chunk >> (8 * 7)) & 0xff);
# else
hash =
- hash * 33 * 33 * 33 * 33 +
- str[0] * 33 * 33 * 33 +
- str[1] * 33 * 33 +
- str[2] * 33 +
+ hash * Z_L(33 * 33 * 33 * 33) +
+ str[0] * Z_L(33 * 33 * 33) +
+ str[1] * Z_L(33 * 33) +
+ str[2] * Z_L(33) +
str[3];
hash =
- hash * 33 * 33 * 33 * 33 +
- str[4] * 33 * 33 * 33 +
- str[5] * 33 * 33 +
- str[6] * 33 +
+ hash * Z_L(33 * 33 * 33 * 33) +
+ str[4] * Z_L(33 * 33 * 33) +
+ str[5] * Z_L(33 * 33) +
+ str[6] * Z_L(33) +
str[7];
# endif
}
if (len >= 4) {
hash =
- hash * 33 * 33 * 33 * 33 +
- str[0] * 33 * 33 * 33 +
- str[1] * 33 * 33 +
- str[2] * 33 +
+ hash * Z_L(33 * 33 * 33 * 33) +
+ str[0] * Z_L(33 * 33 * 33) +
+ str[1] * Z_L(33 * 33) +
+ str[2] * Z_L(33) +
str[3];
len -= 4;
str += 4;
@@ -455,18 +473,18 @@
if (len >= 2) {
if (len > 2) {
hash =
- hash * 33 * 33 * 33 +
- str[0] * 33 * 33 +
- str[1] * 33 +
+ hash * Z_L(33 * 33 * 33) +
+ str[0] * Z_L(33 * 33) +
+ str[1] * Z_L(33) +
str[2];
} else {
hash =
- hash * 33 * 33 +
- str[0] * 33 +
+ hash * Z_L(33 * 33) +
+ str[0] * Z_L(33) +
str[1];
}
} else if (len != 0) {
- hash = hash * 33 + *str;
+ hash = hash * Z_L(33) + *str;
}
#else
/* variant with the hash unrolled eight times */
@@ -560,8 +578,10 @@
_(ZEND_STR_VOID, "void") \
_(ZEND_STR_NEVER, "never") \
_(ZEND_STR_FALSE, "false") \
+ _(ZEND_STR_TRUE, "true") \
_(ZEND_STR_NULL_LOWERCASE, "null") \
_(ZEND_STR_MIXED, "mixed") \
+ _(ZEND_STR_TRAVERSABLE, "Traversable") \
_(ZEND_STR_SLEEP, "__sleep") \
_(ZEND_STR_WAKEUP, "__wakeup") \
_(ZEND_STR_CASES, "cases") \
@@ -571,6 +591,8 @@
_(ZEND_STR_AUTOGLOBAL_SERVER, "_SERVER") \
_(ZEND_STR_AUTOGLOBAL_ENV, "_ENV") \
_(ZEND_STR_AUTOGLOBAL_REQUEST, "_REQUEST") \
+ _(ZEND_STR_COUNT, "count") \
+ _(ZEND_STR_SENSITIVEPARAMETER, "SensitiveParameter") \
typedef enum _zend_known_string_id {
Modified: trunk/MgDev/Oem/php/include/Zend/zend_type_info.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_type_info.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_type_info.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -38,7 +38,6 @@
/* These are used in zend_type, but not for type inference.
* They are allowed to overlap with types used during inference. */
#define MAY_BE_CALLABLE (1 << IS_CALLABLE)
-#define MAY_BE_ITERABLE (1 << IS_ITERABLE)
#define MAY_BE_VOID (1 << IS_VOID)
#define MAY_BE_NEVER (1 << IS_NEVER)
#define MAY_BE_STATIC (1 << IS_STATIC)
Modified: trunk/MgDev/Oem/php/include/Zend/zend_types.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_types.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_types.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -144,7 +144,8 @@
#define _ZEND_TYPE_NAME_BIT (1u << 24)
#define _ZEND_TYPE_LIST_BIT (1u << 22)
#define _ZEND_TYPE_KIND_MASK (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_NAME_BIT)
-/* TODO: bit 21 is not used */
+/* For BC behaviour with iterable type */
+#define _ZEND_TYPE_ITERABLE_BIT (1u << 21)
/* Whether the type list is arena allocated */
#define _ZEND_TYPE_ARENA_BIT (1u << 20)
/* Whether the type list is an intersection type */
@@ -170,6 +171,9 @@
#define ZEND_TYPE_HAS_LIST(t) \
((((t).type_mask) & _ZEND_TYPE_LIST_BIT) != 0)
+#define ZEND_TYPE_IS_ITERABLE_FALLBACK(t) \
+ ((((t).type_mask) & _ZEND_TYPE_ITERABLE_BIT) != 0)
+
#define ZEND_TYPE_IS_INTERSECTION(t) \
((((t).type_mask) & _ZEND_TYPE_INTERSECTION_BIT) != 0)
@@ -263,7 +267,7 @@
{ NULL, (_type_mask) }
#define ZEND_TYPE_INIT_CODE(code, allow_null, extra_flags) \
- ZEND_TYPE_INIT_MASK(((code) == _IS_BOOL ? MAY_BE_BOOL : ((code) == IS_MIXED ? MAY_BE_ANY : (1 << (code)))) \
+ ZEND_TYPE_INIT_MASK(((code) == _IS_BOOL ? MAY_BE_BOOL : ( (code) == IS_ITERABLE ? _ZEND_TYPE_ITERABLE_BIT : ((code) == IS_MIXED ? MAY_BE_ANY : (1 << (code))))) \
| ((allow_null) ? _ZEND_TYPE_NULLABLE_BIT : 0) | (extra_flags))
#define ZEND_TYPE_INIT_PTR(ptr, type_kind, allow_null, extra_flags) \
@@ -276,6 +280,9 @@
#define ZEND_TYPE_INIT_UNION(ptr, extra_flags) \
{ (void *) (ptr), (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_UNION_BIT) | (extra_flags) }
+#define ZEND_TYPE_INIT_INTERSECTION(ptr, extra_flags) \
+ { (void *) (ptr), (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_INTERSECTION_BIT) | (extra_flags) }
+
#define ZEND_TYPE_INIT_CLASS(class_name, allow_null, extra_flags) \
ZEND_TYPE_INIT_PTR(class_name, _ZEND_TYPE_NAME_BIT, allow_null, extra_flags)
@@ -371,7 +378,11 @@
uint32_t flags;
} u;
uint32_t nTableMask;
- Bucket *arData;
+ union {
+ uint32_t *arHash; /* hash table (allocated above this pointer) */
+ Bucket *arData; /* array of hash buckets */
+ zval *arPacked; /* packed array of zvals */
+ };
uint32_t nNumUsed;
uint32_t nNumOfElements;
uint32_t nTableSize;
@@ -385,14 +396,14 @@
* =====================
*
* +=============================+
- * | HT_HASH(ht, ht->nTableMask) |
- * | ... |
- * | HT_HASH(ht, -1) |
- * +-----------------------------+
- * ht->arData ---> | Bucket[0] |
- * | ... |
- * | Bucket[ht->nTableSize-1] |
- * +=============================+
+ * | HT_HASH(ht, ht->nTableMask) | +=============================+
+ * | ... | | HT_INVALID_IDX |
+ * | HT_HASH(ht, -1) | | HT_INVALID_IDX |
+ * +-----------------------------+ +-----------------------------+
+ * ht->arData ---> | Bucket[0] | ht->arPacked ---> | ZVAL[0] |
+ * | ... | | ... |
+ * | Bucket[ht->nTableSize-1] | | ZVAL[ht->nTableSize-1] |
+ * +=============================+ +=============================+
*/
#define HT_INVALID_IDX ((uint32_t) -1)
@@ -400,8 +411,15 @@
#define HT_MIN_MASK ((uint32_t) -2)
#define HT_MIN_SIZE 8
+/* HT_MAX_SIZE is chosen to satisfy the following constraints:
+ * - HT_SIZE_TO_MASK(HT_MAX_SIZE) != 0
+ * - HT_SIZE_EX(HT_MAX_SIZE, HT_SIZE_TO_MASK(HT_MAX_SIZE)) does not overflow or
+ * wrapparound, and is <= the addressable space size
+ * - HT_MAX_SIZE must be a power of two:
+ * (nTableSize<HT_MAX_SIZE ? nTableSize+nTableSize : nTableSize) <= HT_MAX_SIZE
+ */
#if SIZEOF_SIZE_T == 4
-# define HT_MAX_SIZE 0x04000000 /* small enough to avoid overflow checks */
+# define HT_MAX_SIZE 0x02000000
# define HT_HASH_TO_BUCKET_EX(data, idx) \
((Bucket*)((char*)(data) + (idx)))
# define HT_IDX_TO_HASH(idx) \
@@ -409,7 +427,7 @@
# define HT_HASH_TO_IDX(idx) \
((idx) / sizeof(Bucket))
#elif SIZEOF_SIZE_T == 8
-# define HT_MAX_SIZE 0x80000000
+# define HT_MAX_SIZE 0x40000000
# define HT_HASH_TO_BUCKET_EX(data, idx) \
((data) + (idx))
# define HT_IDX_TO_HASH(idx) \
@@ -423,12 +441,12 @@
#define HT_HASH_EX(data, idx) \
((uint32_t*)(data))[(int32_t)(idx)]
#define HT_HASH(ht, idx) \
- HT_HASH_EX((ht)->arData, idx)
+ HT_HASH_EX((ht)->arHash, idx)
#define HT_SIZE_TO_MASK(nTableSize) \
((uint32_t)(-((nTableSize) + (nTableSize))))
#define HT_HASH_SIZE(nTableMask) \
- (((size_t)(uint32_t)-(int32_t)(nTableMask)) * sizeof(uint32_t))
+ (((size_t)-(uint32_t)(nTableMask)) * sizeof(uint32_t))
#define HT_DATA_SIZE(nTableSize) \
((size_t)(nTableSize) * sizeof(Bucket))
#define HT_SIZE_EX(nTableSize, nTableMask) \
@@ -437,6 +455,14 @@
HT_SIZE_EX((ht)->nTableSize, (ht)->nTableMask)
#define HT_USED_SIZE(ht) \
(HT_HASH_SIZE((ht)->nTableMask) + ((size_t)(ht)->nNumUsed * sizeof(Bucket)))
+#define HT_PACKED_DATA_SIZE(nTableSize) \
+ ((size_t)(nTableSize) * sizeof(zval))
+#define HT_PACKED_SIZE_EX(nTableSize, nTableMask) \
+ (HT_PACKED_DATA_SIZE((nTableSize)) + HT_HASH_SIZE((nTableMask)))
+#define HT_PACKED_SIZE(ht) \
+ HT_PACKED_SIZE_EX((ht)->nTableSize, (ht)->nTableMask)
+#define HT_PACKED_USED_SIZE(ht) \
+ (HT_HASH_SIZE((ht)->nTableMask) + ((size_t)(ht)->nNumUsed * sizeof(zval)))
#ifdef __SSE2__
# define HT_HASH_RESET(ht) do { \
char *p = (char*)&HT_HASH(ht, (ht)->nTableMask); \
Modified: trunk/MgDev/Oem/php/include/Zend/zend_vm.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_vm.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_vm.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -29,6 +29,7 @@
ZEND_API const zend_op *zend_get_halt_op(void);
ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data *ex);
ZEND_API int zend_vm_kind(void);
+ZEND_API bool zend_gcc_global_regs(void);
void zend_vm_init(void);
void zend_vm_dtor(void);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_vm_def.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_vm_def.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_vm_def.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -405,7 +405,7 @@
}
} else if (OP1_TYPE != IS_CONST && OP1_TYPE != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
@@ -1093,7 +1093,7 @@
FREE_OP_DATA();
FREE_OP2();
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
/* assign_obj has two opcodes! */
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -1242,7 +1242,7 @@
}
FREE_OP2();
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -1273,7 +1273,7 @@
}
FREE_OP2();
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -1341,7 +1341,7 @@
} while (0);
FREE_OP2();
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -1413,7 +1413,7 @@
} while (0);
FREE_OP2();
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -1503,7 +1503,7 @@
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
}
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -1555,7 +1555,7 @@
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
}
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -1605,7 +1605,7 @@
increment_function(var_ptr);
} while (0);
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -1653,7 +1653,7 @@
decrement_function(var_ptr);
} while (0);
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -1837,7 +1837,7 @@
SAVE_OPLINE();
- if (UNEXPECTED(zend_fetch_static_property_address(&prop, NULL, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
+ if (UNEXPECTED(zend_fetch_static_property_address(&prop, NULL, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type, opline->extended_value OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
ZEND_ASSERT(EG(exception) || (type == BP_VAR_IS));
prop = &EG(uninitialized_zval);
}
@@ -1998,9 +1998,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
+ if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_DISPATCH_TO_HELPER(zend_use_tmp_in_write_context_helper);
- }
+ }
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_DIM_W);
} else {
if (OP2_TYPE == IS_UNUSED) {
@@ -2036,7 +2036,7 @@
if (OP1_TYPE == IS_CONST ||
(OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -2083,11 +2083,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) != 0) {
ZEND_VM_C_GOTO(fetch_obj_r_copy);
@@ -2119,10 +2118,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -2157,7 +2166,7 @@
zend_fetch_property_address(
result, container, OP1_TYPE, property, OP2_TYPE,
((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
FREE_OP2();
if (OP1_TYPE == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -2239,11 +2248,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (!ZEND_VM_SPEC || (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) != 0) {
ZEND_VM_C_GOTO(fetch_obj_is_copy);
@@ -2426,7 +2434,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -2489,7 +2497,7 @@
FREE_OP_DATA();
ZEND_VM_C_LABEL(exit_assign_obj):
FREE_OP2();
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
/* assign_obj has two opcodes! */
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -2670,7 +2678,7 @@
if (OP2_TYPE != IS_UNUSED) {
FREE_OP2();
}
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
/* assign_dim has two opcodes! */
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -2689,7 +2697,7 @@
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
/* zend_assign_to_variable() always takes care of op2, never free it! */
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -2724,8 +2732,8 @@
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
}
- FREE_OP2_VAR_PTR();
- FREE_OP1_VAR_PTR();
+ FREE_OP2();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -2759,9 +2767,9 @@
zend_assign_to_property_reference(container, OP1_TYPE, property, OP2_TYPE, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
FREE_OP2();
- FREE_OP_DATA_VAR_PTR();
+ FREE_OP_DATA();
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -2796,7 +2804,7 @@
ZVAL_COPY(EX_VAR(opline->result.var), prop);
}
- FREE_OP_DATA_VAR_PTR();
+ FREE_OP_DATA();
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -2865,18 +2873,24 @@
LOAD_NEXT_OPLINE();
ZEND_VM_LEAVE();
} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
- zend_detach_symbol_table(execute_data);
+ if (EX(func)->op_array.last_var > 0) {
+ zend_detach_symbol_table(execute_data);
+ call_info |= ZEND_CALL_NEEDS_REATTACH;
+ }
zend_destroy_static_vars(&EX(func)->op_array);
destroy_op_array(&EX(func)->op_array);
efree_size(EX(func), sizeof(zend_op_array));
-#ifdef ZEND_PREFER_RELOAD
- call_info = EX_CALL_INFO();
-#endif
old_execute_data = execute_data;
execute_data = EG(current_execute_data) = EX(prev_execute_data);
zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
- zend_attach_symbol_table(execute_data);
+ if (call_info & ZEND_CALL_NEEDS_REATTACH) {
+ if (EX(func)->op_array.last_var > 0) {
+ zend_attach_symbol_table(execute_data);
+ } else {
+ ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
+ }
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
@@ -2907,16 +2921,25 @@
} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
zend_array *symbol_table = EX(symbol_table);
- zend_detach_symbol_table(execute_data);
- old_execute_data = EX(prev_execute_data);
- while (old_execute_data) {
- if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
- if (old_execute_data->symbol_table == symbol_table) {
- zend_attach_symbol_table(old_execute_data);
+ if (EX(func)->op_array.last_var > 0) {
+ zend_detach_symbol_table(execute_data);
+ call_info |= ZEND_CALL_NEEDS_REATTACH;
+ }
+ if (call_info & ZEND_CALL_NEEDS_REATTACH) {
+ old_execute_data = EX(prev_execute_data);
+ while (old_execute_data) {
+ if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
+ if (old_execute_data->symbol_table == symbol_table) {
+ if (old_execute_data->func->op_array.last_var > 0) {
+ zend_attach_symbol_table(old_execute_data);
+ } else {
+ ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
+ }
+ }
+ break;
}
- break;
+ old_execute_data = old_execute_data->prev_execute_data;
}
- old_execute_data = old_execute_data->prev_execute_data;
}
EG(current_execute_data) = EX(prev_execute_data);
ZEND_VM_RETURN();
@@ -2999,41 +3022,6 @@
ZEND_VM_JMP(opline);
}
-ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, JMP_ADDR, JMP_ADDR)
-{
- USE_OPLINE
- zval *val;
- zend_uchar op1_type;
-
- val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
-
- if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
- } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- ZVAL_UNDEFINED_OP1();
- if (UNEXPECTED(EG(exception))) {
- HANDLE_EXCEPTION();
- }
- }
- ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
- }
-
- SAVE_OPLINE();
- op1_type = OP1_TYPE;
- if (i_zend_is_true(val)) {
- opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
- } else {
- opline = OP_JMP_ADDR(opline, opline->op2);
- }
- if (op1_type & (IS_TMP_VAR|IS_VAR)) {
- zval_ptr_dtor_nogc(val);
- }
- ZEND_VM_JMP(opline);
-}
-
ZEND_VM_COLD_CONST_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, JMP_ADDR)
{
USE_OPLINE
@@ -3174,7 +3162,7 @@
}
} else if (OP1_TYPE != IS_CONST && OP1_TYPE != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -3516,9 +3504,9 @@
if (OP2_TYPE == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if (OP2_TYPE == IS_CONST) {
function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
@@ -3904,9 +3892,7 @@
if (UNEXPECTED(fbc == NULL)) {
fname = (zval*)RT_CONSTANT(opline, opline->op2);
func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
- if (UNEXPECTED(func == NULL)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_undefined_function_helper);
- }
+ ZEND_ASSERT(func != NULL && "Function existence must be checked at compile time");
fbc = Z_FUNC_P(func);
if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
init_func_run_time_cache(&fbc->op_array);
@@ -3923,7 +3909,7 @@
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HOT_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL,OBSERVER))
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -3944,6 +3930,7 @@
ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
ZVAL_NULL(ret);
+ ZEND_OBSERVER_FCALL_BEGIN(call);
fbc->internal_function.handler(call, ret);
#if ZEND_DEBUG
@@ -3958,6 +3945,7 @@
zend_verify_internal_func_info(call->func, ret);
}
#endif
+ ZEND_OBSERVER_FCALL_END(call, EG(exception) ? NULL : ret);
EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
@@ -4063,6 +4051,7 @@
ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
ZVAL_NULL(ret);
+ ZEND_OBSERVER_FCALL_BEGIN(call);
fbc->internal_function.handler(call, ret);
#if ZEND_DEBUG
@@ -4077,6 +4066,7 @@
zend_verify_internal_func_info(call->func, ret);
}
#endif
+ ZEND_OBSERVER_FCALL_END(call, EG(exception) ? NULL : ret);
EG(current_execute_data) = execute_data;
@@ -4168,6 +4158,7 @@
ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
ZVAL_NULL(ret);
+ ZEND_OBSERVER_FCALL_BEGIN(call);
if (!zend_execute_internal) {
/* saves one function call if zend_execute_internal is not used */
fbc->internal_function.handler(call, ret);
@@ -4176,7 +4167,7 @@
}
#if ZEND_DEBUG
- if (!EG(exception) && call->func) {
+ if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
if (should_throw) {
zend_internal_call_arginfo_violation(call->func);
}
@@ -4187,6 +4178,7 @@
zend_verify_internal_func_info(call->func, ret);
}
#endif
+ ZEND_OBSERVER_FCALL_END(call, EG(exception) ? NULL : ret);
EG(current_execute_data) = execute_data;
@@ -4411,7 +4403,7 @@
if (return_value) {
ZVAL_NEW_REF(return_value, retval_ptr);
} else {
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
}
break;
}
@@ -4426,7 +4418,7 @@
ZVAL_REF(return_value, Z_REF_P(retval_ptr));
}
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
} while (0);
ZEND_OBSERVER_FCALL_END(execute_data, return_value);
@@ -4444,6 +4436,7 @@
zend_execute_data *gen_execute_data;
uint32_t num_args, used_stack, call_info;
+ SAVE_OPLINE();
object_init_ex(return_value, zend_ce_generator);
/*
@@ -4891,7 +4884,7 @@
}
ZVAL_REF(arg, Z_REF_P(varptr));
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE();
}
@@ -4928,7 +4921,7 @@
}
ZVAL_REF(arg, Z_REF_P(varptr));
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE();
}
@@ -5021,7 +5014,7 @@
}
ZVAL_REF(arg, Z_REF_P(varptr));
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE();
}
@@ -5596,7 +5589,7 @@
zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
if (ZEND_TYPE_IS_SET(arg_info->type)) {
SEPARATE_ARRAY(params);
- ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
HANDLE_EXCEPTION();
}
@@ -5608,7 +5601,7 @@
ZVAL_ARR(params, EX(extra_named_params));
} else {
SEPARATE_ARRAY(params);
- ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
Z_TRY_ADDREF_P(param);
zend_hash_add_new(Z_ARRVAL_P(params), name, param);
} ZEND_HASH_FOREACH_END();
@@ -5798,7 +5791,7 @@
do {
if (OP1_TYPE == IS_CONST ||
(OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
- if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
+ if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
obj = Z_REFVAL_P(obj);
if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
break;
@@ -5911,7 +5904,21 @@
ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+
+ if (ce->ce_flags & ZEND_ACC_TRAIT) {
+ zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+
value = &c->value;
+ // Enums require loading of all class constants to build the backed enum table
+ if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
+ if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+ }
if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
zval_update_constant_ex(value, c->ce);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -5947,7 +5954,7 @@
} else {
ZVAL_MAKE_REF_EX(expr_ptr, 2);
}
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
} else {
expr_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
if (OP1_TYPE == IS_TMP_VAR) {
@@ -6284,10 +6291,25 @@
if (RETURN_VALUE_USED(opline)) {
ZVAL_TRUE(EX_VAR(opline->result.var));
}
- } else if (EXPECTED(new_op_array != NULL)) {
+ } else if (UNEXPECTED(new_op_array == NULL)) {
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+ } else if (new_op_array->last == 1
+ && new_op_array->opcodes[0].opcode == ZEND_RETURN
+ && new_op_array->opcodes[0].op1_type == IS_CONST
+ && EXPECTED(zend_execute_ex == execute_ex)) {
+ if (RETURN_VALUE_USED(opline)) {
+ const zend_op *op = new_op_array->opcodes;
+
+ ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
+ }
+ zend_destroy_static_vars(new_op_array);
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ } else {
zval *return_value = NULL;
zend_execute_data *call;
-
if (RETURN_VALUE_USED(opline)) {
return_value = EX_VAR(opline->result.var);
}
@@ -6295,7 +6317,7 @@
new_op_array->scope = EX(func)->op_array.scope;
call = zend_vm_stack_push_call_frame(
- (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
+ (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
(zend_function*)new_op_array, 0,
Z_PTR(EX(This)));
@@ -6326,8 +6348,6 @@
UNDEF_RESULT();
HANDLE_EXCEPTION();
}
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_FALSE(EX_VAR(opline->result.var));
}
FREE_OP1();
ZEND_VM_NEXT_OPCODE();
@@ -6533,7 +6553,7 @@
} while (0);
FREE_OP2();
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -6578,7 +6598,7 @@
} while (0);
FREE_OP2();
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -6687,9 +6707,7 @@
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
- if (OP1_TYPE == IS_VAR) {
- FREE_OP1_VAR_PTR();
- }
+ FREE_OP1_IF_VAR();
ZEND_VM_NEXT_OPCODE();
} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -6716,21 +6734,16 @@
properties = Z_OBJPROP_P(array_ptr);
if (zend_hash_num_elements(properties) == 0) {
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
- FREE_OP1_VAR_PTR();
+ FREE_OP1_IF_VAR();
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
- FREE_OP1_VAR_PTR();
+ FREE_OP1_IF_VAR();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
-
- if (OP1_TYPE == IS_VAR) {
- FREE_OP1_VAR_PTR();
- } else {
- FREE_OP1();
- }
+ FREE_OP1();
if (UNEXPECTED(EG(exception))) {
HANDLE_EXCEPTION();
} else if (is_empty) {
@@ -6743,11 +6756,7 @@
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
ZVAL_UNDEF(EX_VAR(opline->result.var));
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- if (OP1_TYPE == IS_VAR) {
- FREE_OP1_VAR_PTR();
- } else {
- FREE_OP1();
- }
+ FREE_OP1();
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
}
@@ -6878,7 +6887,6 @@
uint32_t value_type;
HashTable *fe_ht;
HashPosition pos;
- Bucket *p;
array = EX_VAR(opline->op1.var);
if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
@@ -6886,31 +6894,54 @@
}
fe_ht = Z_ARRVAL_P(array);
pos = Z_FE_POS_P(array);
- p = fe_ht->arData + pos;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- /* reached end of iteration */
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
+ if (HT_IS_PACKED(fe_ht)) {
+ value = fe_ht->arPacked + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ pos++;
+ value++;
}
- pos++;
- value = &p->val;
- value_type = Z_TYPE_INFO_P(value);
- ZEND_ASSERT(value_type != IS_INDIRECT);
- if (EXPECTED(value_type != IS_UNDEF)) {
- break;
+ Z_FE_POS_P(array) = pos + 1;
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), pos);
}
- p++;
- }
- Z_FE_POS_P(array) = pos;
- if (RETURN_VALUE_USED(opline)) {
- if (!p->key) {
- ZVAL_LONG(EX_VAR(opline->result.var), p->h);
- } else {
- ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ } else {
+ Bucket *p;
+
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ pos++;
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ p++;
}
+ Z_FE_POS_P(array) = pos;
+ if (RETURN_VALUE_USED(opline)) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
}
-
if (EXPECTED(OP2_TYPE == IS_CV)) {
zval *variable_ptr = EX_VAR(opline->op2.var);
SAVE_OPLINE();
@@ -6945,28 +6976,49 @@
if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
fe_ht = Z_ARRVAL_P(array);
- p = fe_ht->arData + pos;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- /* reached end of iteration */
- ZEND_VM_C_GOTO(fe_fetch_w_exit);
+ if (HT_IS_PACKED(fe_ht)) {
+ value = fe_ht->arPacked + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_C_GOTO(fe_fetch_w_exit);
+ }
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ pos++;
+ value++;
}
- pos++;
- value = &p->val;
- value_type = Z_TYPE_INFO_P(value);
- ZEND_ASSERT(value_type != IS_INDIRECT);
- if (EXPECTED(value_type != IS_UNDEF)) {
- break;
+ EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), pos);
}
- p++;
- }
- EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
- if (RETURN_VALUE_USED(opline)) {
- if (!p->key) {
- ZVAL_LONG(EX_VAR(opline->result.var), p->h);
- } else {
- ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ } else {
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_C_GOTO(fe_fetch_w_exit);
+ }
+ pos++;
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ p++;
}
+ EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
+ if (RETURN_VALUE_USED(opline)) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
}
} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
zend_object_iterator *iter;
@@ -7546,9 +7598,13 @@
}
result = EX_VAR(opline->result.var);
- if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
+ uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
+ if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
ZVAL_NULL(result);
- if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
+ if (OP1_TYPE == IS_CV
+ && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
+ && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
+ ) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -7555,10 +7611,10 @@
HANDLE_EXCEPTION();
}
}
- } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
+ } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
ZVAL_FALSE(result);
} else {
- ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
+ ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
ZVAL_TRUE(result);
}
@@ -7712,7 +7768,9 @@
EG(ticks_count) = 0;
if (zend_ticks_function) {
SAVE_OPLINE();
+ zend_fiber_switch_block();
zend_ticks_function(opline->extended_value);
+ zend_fiber_switch_unblock();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -7821,7 +7879,12 @@
/* Chain potential exception from wrapping finally block */
if (Z_OBJ_P(fast_call)) {
if (ex) {
- zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
+ if (zend_is_unwind_exit(ex) || zend_is_graceful_exit(ex)) {
+ /* discard the previously thrown exception */
+ OBJ_RELEASE(Z_OBJ_P(fast_call));
+ } else {
+ zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
+ }
} else {
ex = EG(exception) = Z_OBJ_P(fast_call);
}
@@ -7861,6 +7924,19 @@
*/
const zend_live_range *range = find_live_range(
&EX(func)->op_array, throw_op_num, throw_op->op1.var);
+ /* free op1 of the corresponding RETURN */
+ for (i = throw_op_num; i < range->end; i++) {
+ if (EX(func)->op_array.opcodes[i].opcode == ZEND_FREE
+ || EX(func)->op_array.opcodes[i].opcode == ZEND_FE_FREE) {
+ /* pass */
+ } else {
+ if (EX(func)->op_array.opcodes[i].opcode == ZEND_RETURN
+ && (EX(func)->op_array.opcodes[i].op1_type & (IS_VAR|IS_TMP_VAR))) {
+ zval_ptr_dtor(EX_VAR(EX(func)->op_array.opcodes[i].op1.var));
+ }
+ break;
+ }
+ }
throw_op_num = range->end;
}
@@ -8074,7 +8150,7 @@
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
} while (0);
- FREE_OP1_VAR_PTR();
+ FREE_OP1();
}
} else {
zval *value = GET_OP1_ZVAL_PTR(BP_VAR_R);
@@ -8087,7 +8163,7 @@
}
} else if (OP1_TYPE == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
FREE_OP1_IF_VAR();
} else {
@@ -8105,7 +8181,7 @@
/* Set the new yielded key */
if (OP2_TYPE != IS_UNUSED) {
zval *key = GET_OP2_ZVAL_PTR(BP_VAR_R);
- if ((OP2_TYPE & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((OP2_TYPE & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -8321,11 +8397,10 @@
if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == varname) ||
- (EXPECTED(p->h == ZSTR_H(varname)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, varname))))) {
+ if (EXPECTED(p->key == varname) ||
+ (EXPECTED(p->h == ZSTR_H(varname)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, varname)))) {
value = (zval*)p; /* value = &p->val; */
ZEND_VM_C_GOTO(check_indirect);
@@ -8649,7 +8724,9 @@
SAVE_OPLINE_EX();
ZEND_OBSERVER_FCALL_BEGIN(execute_data);
execute_data = EX(prev_execute_data);
- LOAD_OPLINE();
+ if (execute_data) {
+ LOAD_OPLINE();
+ }
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
zend_execute_ex(call);
}
@@ -8669,6 +8746,7 @@
}
ZVAL_NULL(ret);
+ ZEND_OBSERVER_FCALL_BEGIN(call);
if (!zend_execute_internal) {
/* saves one function call if zend_execute_internal is not used */
fbc->internal_function.handler(call, ret);
@@ -8688,6 +8766,7 @@
zend_verify_internal_func_info(call->func, ret);
}
#endif
+ ZEND_OBSERVER_FCALL_END(call, EG(exception) ? NULL : ret);
EG(current_execute_data) = call->prev_execute_data;
@@ -8699,7 +8778,7 @@
execute_data = EG(current_execute_data);
- if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
+ if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
ZEND_VM_RETURN();
}
@@ -9053,7 +9132,7 @@
}
SAVE_OPLINE();
- ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
ZVAL_STR(&key_tmp, key);
if (zend_compare(op1, &key_tmp) == 0) {
FREE_OP1();
@@ -9096,7 +9175,8 @@
if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
zval retval;
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
+ zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
+ zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
count = zval_get_long(&retval);
zval_ptr_dtor(&retval);
break;
@@ -9801,35 +9881,58 @@
uint32_t value_type;
HashTable *fe_ht;
HashPosition pos;
- Bucket *p;
array = EX_VAR(opline->op1.var);
SAVE_OPLINE();
fe_ht = Z_ARRVAL_P(array);
pos = Z_FE_POS_P(array);
- p = fe_ht->arData + pos;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- /* reached end of iteration */
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
+ if (HT_IS_PACKED(fe_ht)) {
+ value = fe_ht->arPacked + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ pos++;
+ value++;
}
- pos++;
- value = &p->val;
- value_type = Z_TYPE_INFO_P(value);
- ZEND_ASSERT(value_type != IS_INDIRECT);
- if (EXPECTED(value_type != IS_UNDEF)) {
- break;
+ Z_FE_POS_P(array) = pos + 1;
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), pos);
}
- p++;
- }
- Z_FE_POS_P(array) = pos;
- if (RETURN_VALUE_USED(opline)) {
- if (!p->key) {
- ZVAL_LONG(EX_VAR(opline->result.var), p->h);
- } else {
- ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ } else {
+ Bucket *p;
+
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ pos++;
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ p++;
}
+ Z_FE_POS_P(array) = pos;
+ if (RETURN_VALUE_USED(opline)) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
}
variable_ptr = EX_VAR(opline->op2.var);
@@ -9841,9 +9944,9 @@
ZEND_VM_HELPER(zend_interrupt_helper, ANY, ANY)
{
- EG(vm_interrupt) = 0;
+ zend_atomic_bool_store_ex(&EG(vm_interrupt), false);
SAVE_OPLINE();
- if (EG(timed_out)) {
+ if (zend_atomic_bool_load_ex(&EG(timed_out))) {
zend_timeout();
} else if (zend_interrupt_function) {
zend_interrupt_function(execute_data);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_vm_execute.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_vm_execute.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_vm_execute.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -846,7 +846,7 @@
SAVE_OPLINE();
- if (UNEXPECTED(zend_fetch_static_property_address(&prop, NULL, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
+ if (UNEXPECTED(zend_fetch_static_property_address(&prop, NULL, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type, opline->extended_value OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
ZEND_ASSERT(EG(exception) || (type == BP_VAR_IS));
prop = &EG(uninitialized_zval);
}
@@ -1076,7 +1076,7 @@
ZVAL_COPY(EX_VAR(opline->result.var), prop);
}
- if ((opline+1)->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));};
+ FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -1145,18 +1145,24 @@
LOAD_NEXT_OPLINE();
ZEND_VM_LEAVE();
} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
- zend_detach_symbol_table(execute_data);
+ if (EX(func)->op_array.last_var > 0) {
+ zend_detach_symbol_table(execute_data);
+ call_info |= ZEND_CALL_NEEDS_REATTACH;
+ }
zend_destroy_static_vars(&EX(func)->op_array);
destroy_op_array(&EX(func)->op_array);
efree_size(EX(func), sizeof(zend_op_array));
-#ifdef ZEND_PREFER_RELOAD
- call_info = EX_CALL_INFO();
-#endif
old_execute_data = execute_data;
execute_data = EG(current_execute_data) = EX(prev_execute_data);
zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
- zend_attach_symbol_table(execute_data);
+ if (call_info & ZEND_CALL_NEEDS_REATTACH) {
+ if (EX(func)->op_array.last_var > 0) {
+ zend_attach_symbol_table(execute_data);
+ } else {
+ ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
+ }
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
@@ -1187,16 +1193,25 @@
} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
zend_array *symbol_table = EX(symbol_table);
- zend_detach_symbol_table(execute_data);
- old_execute_data = EX(prev_execute_data);
- while (old_execute_data) {
- if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
- if (old_execute_data->symbol_table == symbol_table) {
- zend_attach_symbol_table(old_execute_data);
+ if (EX(func)->op_array.last_var > 0) {
+ zend_detach_symbol_table(execute_data);
+ call_info |= ZEND_CALL_NEEDS_REATTACH;
+ }
+ if (call_info & ZEND_CALL_NEEDS_REATTACH) {
+ old_execute_data = EX(prev_execute_data);
+ while (old_execute_data) {
+ if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
+ if (old_execute_data->symbol_table == symbol_table) {
+ if (old_execute_data->func->op_array.last_var > 0) {
+ zend_attach_symbol_table(old_execute_data);
+ } else {
+ ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
+ }
+ }
+ break;
}
- break;
+ old_execute_data = old_execute_data->prev_execute_data;
}
- old_execute_data = old_execute_data->prev_execute_data;
}
EG(current_execute_data) = EX(prev_execute_data);
ZEND_VM_RETURN();
@@ -1335,6 +1350,70 @@
ZEND_VM_CONTINUE();
}
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_execute_data *call = EX(call);
+ zend_function *fbc = call->func;
+ zval *ret;
+ zval retval;
+
+ SAVE_OPLINE();
+ EX(call) = call->prev_execute_data;
+
+ call->prev_execute_data = execute_data;
+ EG(current_execute_data) = call;
+
+#if ZEND_DEBUG
+ bool should_throw = zend_internal_call_should_throw(fbc, call);
+#endif
+
+ ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
+ ZVAL_NULL(ret);
+
+ zend_observer_fcall_begin(call);
+ fbc->internal_function.handler(call, ret);
+
+#if ZEND_DEBUG
+ if (!EG(exception) && call->func) {
+ if (should_throw) {
+ zend_internal_call_arginfo_violation(call->func);
+ }
+ ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
+ zend_verify_internal_return_type(call->func, ret));
+ ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
+ ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
+ zend_verify_internal_func_info(call->func, ret);
+ }
+#endif
+ zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
+
+ EG(current_execute_data) = execute_data;
+ zend_vm_stack_free_args(call);
+
+ uint32_t call_info = ZEND_CALL_INFO(call);
+ if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
+ if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
+ zend_free_extra_named_params(call->extra_named_params);
+ }
+ zend_vm_stack_free_call_frame_ex(call_info, call);
+ } else {
+ EG(vm_stack_top) = (zval*)call;
+ }
+
+ if (!RETURN_VALUE_USED(opline)) {
+ i_zval_ptr_dtor(ret);
+ }
+
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zend_rethrow_exception(execute_data);
+ HANDLE_EXCEPTION();
+ }
+
+ ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_CONTINUE();
+}
+
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -1651,6 +1730,7 @@
ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
ZVAL_NULL(ret);
+ zend_observer_fcall_begin(call);
fbc->internal_function.handler(call, ret);
#if ZEND_DEBUG
@@ -1665,6 +1745,7 @@
zend_verify_internal_func_info(call->func, ret);
}
#endif
+ zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
EG(current_execute_data) = execute_data;
@@ -1764,7 +1845,7 @@
}
#if ZEND_DEBUG
- if (!EG(exception) && call->func) {
+ if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
if (should_throw) {
zend_internal_call_arginfo_violation(call->func);
}
@@ -1873,7 +1954,7 @@
}
#if ZEND_DEBUG
- if (!EG(exception) && call->func) {
+ if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
if (should_throw) {
zend_internal_call_arginfo_violation(call->func);
}
@@ -1974,6 +2055,7 @@
ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
ZVAL_NULL(ret);
+ zend_observer_fcall_begin(call);
if (!zend_execute_internal) {
/* saves one function call if zend_execute_internal is not used */
fbc->internal_function.handler(call, ret);
@@ -1982,7 +2064,7 @@
}
#if ZEND_DEBUG
- if (!EG(exception) && call->func) {
+ if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
if (should_throw) {
zend_internal_call_arginfo_violation(call->func);
}
@@ -1993,6 +2075,7 @@
zend_verify_internal_func_info(call->func, ret);
}
#endif
+ zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
EG(current_execute_data) = execute_data;
@@ -2031,6 +2114,7 @@
zend_execute_data *gen_execute_data;
uint32_t num_args, used_stack, call_info;
+ SAVE_OPLINE();
object_init_ex(return_value, zend_ce_generator);
/*
@@ -2981,7 +3065,9 @@
EG(ticks_count) = 0;
if (zend_ticks_function) {
SAVE_OPLINE();
+ zend_fiber_switch_block();
zend_ticks_function(opline->extended_value);
+ zend_fiber_switch_unblock();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -3045,7 +3131,12 @@
/* Chain potential exception from wrapping finally block */
if (Z_OBJ_P(fast_call)) {
if (ex) {
- zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
+ if (zend_is_unwind_exit(ex) || zend_is_graceful_exit(ex)) {
+ /* discard the previously thrown exception */
+ OBJ_RELEASE(Z_OBJ_P(fast_call));
+ } else {
+ zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
+ }
} else {
ex = EG(exception) = Z_OBJ_P(fast_call);
}
@@ -3085,6 +3176,19 @@
*/
const zend_live_range *range = find_live_range(
&EX(func)->op_array, throw_op_num, throw_op->op1.var);
+ /* free op1 of the corresponding RETURN */
+ for (i = throw_op_num; i < range->end; i++) {
+ if (EX(func)->op_array.opcodes[i].opcode == ZEND_FREE
+ || EX(func)->op_array.opcodes[i].opcode == ZEND_FE_FREE) {
+ /* pass */
+ } else {
+ if (EX(func)->op_array.opcodes[i].opcode == ZEND_RETURN
+ && (EX(func)->op_array.opcodes[i].op1_type & (IS_VAR|IS_TMP_VAR))) {
+ zval_ptr_dtor(EX_VAR(EX(func)->op_array.opcodes[i].op1.var));
+ }
+ break;
+ }
+ }
throw_op_num = range->end;
}
@@ -3305,7 +3409,9 @@
SAVE_OPLINE_EX();
execute_data = EX(prev_execute_data);
- LOAD_OPLINE();
+ if (execute_data) {
+ LOAD_OPLINE();
+ }
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
zend_execute_ex(call);
}
@@ -3325,6 +3431,7 @@
}
ZVAL_NULL(ret);
+
if (!zend_execute_internal) {
/* saves one function call if zend_execute_internal is not used */
fbc->internal_function.handler(call, ret);
@@ -3355,7 +3462,7 @@
execute_data = EG(current_execute_data);
- if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
+ if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
ZEND_VM_RETURN();
}
@@ -3442,7 +3549,9 @@
SAVE_OPLINE_EX();
zend_observer_fcall_begin(execute_data);
execute_data = EX(prev_execute_data);
- LOAD_OPLINE();
+ if (execute_data) {
+ LOAD_OPLINE();
+ }
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
zend_execute_ex(call);
}
@@ -3462,6 +3571,7 @@
}
ZVAL_NULL(ret);
+ zend_observer_fcall_begin(call);
if (!zend_execute_internal) {
/* saves one function call if zend_execute_internal is not used */
fbc->internal_function.handler(call, ret);
@@ -3481,6 +3591,7 @@
zend_verify_internal_func_info(call->func, ret);
}
#endif
+ zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
EG(current_execute_data) = call->prev_execute_data;
@@ -3492,7 +3603,7 @@
execute_data = EG(current_execute_data);
- if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
+ if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
ZEND_VM_RETURN();
}
@@ -3522,9 +3633,9 @@
static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
- EG(vm_interrupt) = 0;
+ zend_atomic_bool_store_ex(&EG(vm_interrupt), false);
SAVE_OPLINE();
- if (EG(timed_out)) {
+ if (zend_atomic_bool_load_ex(&EG(timed_out))) {
zend_timeout();
} else if (zend_interrupt_function) {
zend_interrupt_function(execute_data);
@@ -3672,9 +3783,7 @@
if (UNEXPECTED(fbc == NULL)) {
fname = (zval*)RT_CONSTANT(opline, opline->op2);
func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
- if (UNEXPECTED(func == NULL)) {
- ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ ZEND_ASSERT(func != NULL && "Function existence must be checked at compile time");
fbc = Z_FUNC_P(func);
if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
init_func_run_time_cache(&fbc->op_array);
@@ -3862,7 +3971,7 @@
zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
if (ZEND_TYPE_IS_SET(arg_info->type)) {
SEPARATE_ARRAY(params);
- ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
HANDLE_EXCEPTION();
}
@@ -3874,7 +3983,7 @@
ZVAL_ARR(params, EX(extra_named_params));
} else {
SEPARATE_ARRAY(params);
- ZEND_HASH_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
Z_TRY_ADDREF_P(param);
zend_hash_add_new(Z_ARRVAL_P(params), name, param);
} ZEND_HASH_FOREACH_END();
@@ -4073,41 +4182,6 @@
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *val;
- zend_uchar op1_type;
-
- val = RT_CONSTANT(opline, opline->op1);
-
- if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
- } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- ZVAL_UNDEFINED_OP1();
- if (UNEXPECTED(EG(exception))) {
- HANDLE_EXCEPTION();
- }
- }
- ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
- }
-
- SAVE_OPLINE();
- op1_type = IS_CONST;
- if (i_zend_is_true(val)) {
- opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
- } else {
- opline = OP_JMP_ADDR(opline, opline->op2);
- }
- if (op1_type & (IS_TMP_VAR|IS_VAR)) {
- zval_ptr_dtor_nogc(val);
- }
- ZEND_VM_JMP(opline);
-}
-
static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -4440,7 +4514,7 @@
if (return_value) {
ZVAL_NEW_REF(return_value, retval_ptr);
} else {
- if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
+ FREE_OP(opline->op1_type, opline->op1.var);
}
break;
}
@@ -4455,7 +4529,7 @@
ZVAL_REF(return_value, Z_REF_P(retval_ptr));
}
- if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
+ FREE_OP(opline->op1_type, opline->op1.var);
} while (0);
zend_observer_fcall_end(execute_data, return_value);
@@ -4699,7 +4773,7 @@
do {
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
- if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
+ if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
obj = Z_REFVAL_P(obj);
if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
break;
@@ -4861,10 +4935,25 @@
if (RETURN_VALUE_USED(opline)) {
ZVAL_TRUE(EX_VAR(opline->result.var));
}
- } else if (EXPECTED(new_op_array != NULL)) {
+ } else if (UNEXPECTED(new_op_array == NULL)) {
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+ } else if (new_op_array->last == 1
+ && new_op_array->opcodes[0].opcode == ZEND_RETURN
+ && new_op_array->opcodes[0].op1_type == IS_CONST
+ && EXPECTED(zend_execute_ex == execute_ex)) {
+ if (RETURN_VALUE_USED(opline)) {
+ const zend_op *op = new_op_array->opcodes;
+
+ ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
+ }
+ zend_destroy_static_vars(new_op_array);
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ } else {
zval *return_value = NULL;
zend_execute_data *call;
-
if (RETURN_VALUE_USED(opline)) {
return_value = EX_VAR(opline->result.var);
}
@@ -4872,7 +4961,7 @@
new_op_array->scope = EX(func)->op_array.scope;
call = zend_vm_stack_push_call_frame(
- (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
+ (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
(zend_function*)new_op_array, 0,
Z_PTR(EX(This)));
@@ -4903,8 +4992,6 @@
UNDEF_RESULT();
HANDLE_EXCEPTION();
}
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_FALSE(EX_VAR(opline->result.var));
}
ZEND_VM_NEXT_OPCODE();
@@ -4931,10 +5018,25 @@
if (RETURN_VALUE_USED(opline)) {
ZVAL_TRUE(EX_VAR(opline->result.var));
}
- } else if (EXPECTED(new_op_array != NULL)) {
+ } else if (UNEXPECTED(new_op_array == NULL)) {
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+ } else if (new_op_array->last == 1
+ && new_op_array->opcodes[0].opcode == ZEND_RETURN
+ && new_op_array->opcodes[0].op1_type == IS_CONST
+ && EXPECTED(zend_execute_ex == execute_ex)) {
+ if (RETURN_VALUE_USED(opline)) {
+ const zend_op *op = new_op_array->opcodes;
+
+ ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
+ }
+ zend_destroy_static_vars(new_op_array);
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ } else {
zval *return_value = NULL;
zend_execute_data *call;
-
if (RETURN_VALUE_USED(opline)) {
return_value = EX_VAR(opline->result.var);
}
@@ -4942,7 +5044,7 @@
new_op_array->scope = EX(func)->op_array.scope;
call = zend_vm_stack_push_call_frame(
- (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
+ (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
(zend_function*)new_op_array, 0,
Z_PTR(EX(This)));
@@ -4973,8 +5075,6 @@
UNDEF_RESULT();
HANDLE_EXCEPTION();
}
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_FALSE(EX_VAR(opline->result.var));
}
FREE_OP(opline->op1_type, opline->op1.var);
ZEND_VM_NEXT_OPCODE();
@@ -5083,9 +5183,6 @@
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
- if (IS_CONST == IS_VAR) {
-
- }
ZEND_VM_NEXT_OPCODE();
} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -5122,11 +5219,6 @@
} else {
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_CONST == IS_VAR) {
-
- } else {
-
- }
if (UNEXPECTED(EG(exception))) {
HANDLE_EXCEPTION();
} else if (is_empty) {
@@ -5139,11 +5231,7 @@
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
ZVAL_UNDEF(EX_VAR(opline->result.var));
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- if (IS_CONST == IS_VAR) {
- } else {
-
- }
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
}
@@ -5256,9 +5344,13 @@
}
result = EX_VAR(opline->result.var);
- if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
+ uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
+ if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
ZVAL_NULL(result);
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV
+ && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
+ && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
+ ) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -5265,10 +5357,10 @@
HANDLE_EXCEPTION();
}
}
- } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
+ } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
ZVAL_FALSE(result);
} else {
- ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
+ ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
ZVAL_TRUE(result);
}
@@ -6214,9 +6306,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_CONST == IS_UNUSED) {
@@ -6237,7 +6329,7 @@
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -6284,11 +6376,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -6320,10 +6411,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -6402,11 +6503,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -6522,7 +6622,7 @@
}
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -6695,9 +6795,9 @@
if (IS_CONST == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if (IS_CONST == IS_CONST) {
function_name = RT_CONSTANT(opline, opline->op2);
@@ -7069,7 +7169,21 @@
ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+
+ if (ce->ce_flags & ZEND_ACC_TRAIT) {
+ zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+
value = &c->value;
+ // Enums require loading of all class constants to build the backed enum table
+ if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
+ if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+ }
if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
zval_update_constant_ex(value, c->ce);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -7490,7 +7604,7 @@
}
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -7508,7 +7622,7 @@
/* Set the new yielded key */
if (IS_CONST != IS_UNUSED) {
zval *key = RT_CONSTANT(opline, opline->op2);
- if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -7706,7 +7820,7 @@
}
SAVE_OPLINE();
- ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
ZVAL_STR(&key_tmp, key);
if (zend_compare(op1, &key_tmp) == 0) {
@@ -8428,7 +8542,7 @@
}
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
@@ -8537,9 +8651,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
@@ -8560,7 +8674,7 @@
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -8607,11 +8721,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -8643,10 +8756,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -8725,11 +8848,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -8845,7 +8967,7 @@
}
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -9018,9 +9140,9 @@
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
@@ -9629,7 +9751,7 @@
}
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -9647,7 +9769,7 @@
/* Set the new yielded key */
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -9819,9 +9941,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_UNUSED == IS_UNUSED) {
@@ -10472,7 +10594,7 @@
}
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -10490,7 +10612,7 @@
/* Set the new yielded key */
if (IS_UNUSED != IS_UNUSED) {
zval *key = NULL;
- if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -10568,7 +10690,8 @@
if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
zval retval;
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
+ zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
+ zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
count = zval_get_long(&retval);
zval_ptr_dtor(&retval);
break;
@@ -10785,7 +10908,7 @@
}
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
@@ -10894,9 +11017,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_CV == IS_UNUSED) {
@@ -10917,7 +11040,7 @@
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -10964,11 +11087,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -11000,10 +11122,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -11082,11 +11214,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -11202,7 +11333,7 @@
}
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -11375,9 +11506,9 @@
if (IS_CV == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if (IS_CV == IS_CONST) {
function_name = EX_VAR(opline->op2.var);
@@ -11984,7 +12115,7 @@
}
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -12002,7 +12133,7 @@
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -14166,41 +14297,6 @@
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *val;
- zend_uchar op1_type;
-
- val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
- if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
- } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- ZVAL_UNDEFINED_OP1();
- if (UNEXPECTED(EG(exception))) {
- HANDLE_EXCEPTION();
- }
- }
- ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
- }
-
- SAVE_OPLINE();
- op1_type = (IS_TMP_VAR|IS_VAR);
- if (i_zend_is_true(val)) {
- opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
- } else {
- opline = OP_JMP_ADDR(opline, opline->op2);
- }
- if (op1_type & (IS_TMP_VAR|IS_VAR)) {
- zval_ptr_dtor_nogc(val);
- }
- ZEND_VM_JMP(opline);
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -14383,7 +14479,7 @@
do {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
- if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
+ if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
obj = Z_REFVAL_P(obj);
if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
break;
@@ -14453,10 +14549,25 @@
if (RETURN_VALUE_USED(opline)) {
ZVAL_TRUE(EX_VAR(opline->result.var));
}
- } else if (EXPECTED(new_op_array != NULL)) {
+ } else if (UNEXPECTED(new_op_array == NULL)) {
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+ } else if (new_op_array->last == 1
+ && new_op_array->opcodes[0].opcode == ZEND_RETURN
+ && new_op_array->opcodes[0].op1_type == IS_CONST
+ && EXPECTED(zend_execute_ex == execute_ex)) {
+ if (RETURN_VALUE_USED(opline)) {
+ const zend_op *op = new_op_array->opcodes;
+
+ ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
+ }
+ zend_destroy_static_vars(new_op_array);
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ } else {
zval *return_value = NULL;
zend_execute_data *call;
-
if (RETURN_VALUE_USED(opline)) {
return_value = EX_VAR(opline->result.var);
}
@@ -14464,7 +14575,7 @@
new_op_array->scope = EX(func)->op_array.scope;
call = zend_vm_stack_push_call_frame(
- (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
+ (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
(zend_function*)new_op_array, 0,
Z_PTR(EX(This)));
@@ -14495,8 +14606,6 @@
UNDEF_RESULT();
HANDLE_EXCEPTION();
}
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_FALSE(EX_VAR(opline->result.var));
}
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
ZEND_VM_NEXT_OPCODE();
@@ -14830,7 +14939,7 @@
}
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
@@ -15305,7 +15414,7 @@
if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -15352,11 +15461,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -15388,10 +15496,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -15470,11 +15588,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -15561,7 +15678,7 @@
}
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -15734,9 +15851,9 @@
if (IS_CONST == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if (IS_CONST == IS_CONST) {
function_name = RT_CONSTANT(opline, opline->op2);
@@ -16259,7 +16376,7 @@
}
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
@@ -16734,7 +16851,7 @@
if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -16781,11 +16898,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -16817,10 +16933,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -16899,11 +17025,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -16990,7 +17115,7 @@
}
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -17163,9 +17288,9 @@
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
@@ -17805,7 +17930,8 @@
if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
zval retval;
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
+ zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
+ zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
count = zval_get_long(&retval);
zval_ptr_dtor(&retval);
break;
@@ -17938,7 +18064,7 @@
}
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
@@ -18051,7 +18177,7 @@
if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -18098,11 +18224,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -18134,10 +18259,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -18216,11 +18351,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -18307,7 +18441,7 @@
}
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -18480,9 +18614,9 @@
if (IS_CV == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if (IS_CV == IS_CONST) {
function_name = EX_VAR(opline->op2.var);
@@ -18879,7 +19013,7 @@
if (return_value) {
ZVAL_NEW_REF(return_value, retval_ptr);
} else {
-
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
}
break;
}
@@ -18894,6 +19028,7 @@
ZVAL_REF(return_value, Z_REF_P(retval_ptr));
}
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
} while (0);
@@ -19162,9 +19297,6 @@
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
- if (IS_TMP_VAR == IS_VAR) {
-
- }
ZEND_VM_NEXT_OPCODE();
} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -19200,12 +19332,7 @@
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
-
- if (IS_TMP_VAR == IS_VAR) {
-
- } else {
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- }
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
if (UNEXPECTED(EG(exception))) {
HANDLE_EXCEPTION();
} else if (is_empty) {
@@ -19218,11 +19345,7 @@
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
ZVAL_UNDEF(EX_VAR(opline->result.var));
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- if (IS_TMP_VAR == IS_VAR) {
-
- } else {
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- }
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
}
@@ -19347,9 +19470,13 @@
}
result = EX_VAR(opline->result.var);
- if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
+ uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
+ if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
ZVAL_NULL(result);
- if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
+ if (IS_TMP_VAR == IS_CV
+ && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
+ && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
+ ) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -19356,10 +19483,10 @@
HANDLE_EXCEPTION();
}
}
- } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
+ } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
ZVAL_FALSE(result);
} else {
- ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
+ ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
ZVAL_TRUE(result);
}
@@ -19455,9 +19582,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_CONST == IS_UNUSED) {
@@ -19626,7 +19753,7 @@
} else {
ZVAL_MAKE_REF_EX(expr_ptr, 2);
}
-
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
} else {
expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_TMP_VAR) {
@@ -19786,6 +19913,7 @@
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
} while (0);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
}
} else {
zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
@@ -19798,7 +19926,7 @@
}
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -19816,7 +19944,7 @@
/* Set the new yielded key */
if (IS_CONST != IS_UNUSED) {
zval *key = RT_CONSTANT(opline, opline->op2);
- if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -19912,7 +20040,7 @@
}
SAVE_OPLINE();
- ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
ZVAL_STR(&key_tmp, key);
if (zend_compare(op1, &key_tmp) == 0) {
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
@@ -19931,9 +20059,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
@@ -20065,7 +20193,7 @@
} else {
ZVAL_MAKE_REF_EX(expr_ptr, 2);
}
-
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
} else {
expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_TMP_VAR) {
@@ -20225,6 +20353,7 @@
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
} while (0);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
}
} else {
zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
@@ -20237,7 +20366,7 @@
}
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -20255,7 +20384,7 @@
/* Set the new yielded key */
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -20357,9 +20486,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_UNUSED == IS_UNUSED) {
@@ -20525,7 +20654,7 @@
} else {
ZVAL_MAKE_REF_EX(expr_ptr, 2);
}
-
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
} else {
expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_TMP_VAR) {
@@ -20685,6 +20814,7 @@
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
} while (0);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
}
} else {
zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
@@ -20697,7 +20827,7 @@
}
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -20715,7 +20845,7 @@
/* Set the new yielded key */
if (IS_UNUSED != IS_UNUSED) {
zval *key = NULL;
- if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -20790,9 +20920,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_CV == IS_UNUSED) {
@@ -20924,7 +21054,7 @@
} else {
ZVAL_MAKE_REF_EX(expr_ptr, 2);
}
-
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
} else {
expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_TMP_VAR) {
@@ -21084,6 +21214,7 @@
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
} while (0);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
}
} else {
zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
@@ -21096,7 +21227,7 @@
}
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -21114,7 +21245,7 @@
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -21822,9 +21953,7 @@
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
- if (IS_VAR == IS_VAR) {
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- }
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
ZEND_VM_NEXT_OPCODE();
} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -21860,12 +21989,7 @@
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
-
- if (IS_VAR == IS_VAR) {
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- } else {
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- }
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
if (UNEXPECTED(EG(exception))) {
HANDLE_EXCEPTION();
} else if (is_empty) {
@@ -21878,11 +22002,7 @@
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
ZVAL_UNDEF(EX_VAR(opline->result.var));
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- if (IS_VAR == IS_VAR) {
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- } else {
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- }
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
}
@@ -21895,7 +22015,6 @@
uint32_t value_type;
HashTable *fe_ht;
HashPosition pos;
- Bucket *p;
array = EX_VAR(opline->op1.var);
if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
@@ -21903,31 +22022,54 @@
}
fe_ht = Z_ARRVAL_P(array);
pos = Z_FE_POS_P(array);
- p = fe_ht->arData + pos;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- /* reached end of iteration */
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
+ if (HT_IS_PACKED(fe_ht)) {
+ value = fe_ht->arPacked + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ pos++;
+ value++;
}
- pos++;
- value = &p->val;
- value_type = Z_TYPE_INFO_P(value);
- ZEND_ASSERT(value_type != IS_INDIRECT);
- if (EXPECTED(value_type != IS_UNDEF)) {
- break;
+ Z_FE_POS_P(array) = pos + 1;
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), pos);
}
- p++;
- }
- Z_FE_POS_P(array) = pos;
- if (RETURN_VALUE_USED(opline)) {
- if (!p->key) {
- ZVAL_LONG(EX_VAR(opline->result.var), p->h);
- } else {
- ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ } else {
+ Bucket *p;
+
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ pos++;
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ p++;
}
+ Z_FE_POS_P(array) = pos;
+ if (RETURN_VALUE_USED(opline)) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
}
-
if (EXPECTED(opline->op2_type == IS_CV)) {
zval *variable_ptr = EX_VAR(opline->op2.var);
SAVE_OPLINE();
@@ -21962,28 +22104,49 @@
if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
fe_ht = Z_ARRVAL_P(array);
- p = fe_ht->arData + pos;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- /* reached end of iteration */
- goto fe_fetch_w_exit;
+ if (HT_IS_PACKED(fe_ht)) {
+ value = fe_ht->arPacked + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ goto fe_fetch_w_exit;
+ }
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ pos++;
+ value++;
}
- pos++;
- value = &p->val;
- value_type = Z_TYPE_INFO_P(value);
- ZEND_ASSERT(value_type != IS_INDIRECT);
- if (EXPECTED(value_type != IS_UNDEF)) {
- break;
+ EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), pos);
}
- p++;
- }
- EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
- if (RETURN_VALUE_USED(opline)) {
- if (!p->key) {
- ZVAL_LONG(EX_VAR(opline->result.var), p->h);
- } else {
- ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ } else {
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ goto fe_fetch_w_exit;
+ }
+ pos++;
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ p++;
}
+ EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
+ if (RETURN_VALUE_USED(opline)) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
}
} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
zend_object_iterator *iter;
@@ -22235,9 +22398,13 @@
}
result = EX_VAR(opline->result.var);
- if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
+ uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
+ if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
ZVAL_NULL(result);
- if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
+ if (IS_VAR == IS_CV
+ && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
+ && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
+ ) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -22244,10 +22411,10 @@
HANDLE_EXCEPTION();
}
}
- } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
+ } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
ZVAL_FALSE(result);
} else {
- ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
+ ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
ZVAL_TRUE(result);
}
@@ -22750,9 +22917,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_CONST == IS_UNUSED) {
@@ -22790,7 +22957,7 @@
zend_fetch_property_address(
result, container, IS_VAR, property, IS_CONST,
((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -22933,7 +23100,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -23064,7 +23231,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -23195,7 +23362,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -23326,7 +23493,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -24061,7 +24228,7 @@
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -24577,7 +24744,21 @@
ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+
+ if (ce->ce_flags & ZEND_ACC_TRAIT) {
+ zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+
value = &c->value;
+ // Enums require loading of all class constants to build the backed enum table
+ if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
+ if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+ }
if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
zval_update_constant_ex(value, c->ce);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -24921,7 +25102,7 @@
}
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
} else {
@@ -24939,7 +25120,7 @@
/* Set the new yielded key */
if (IS_CONST != IS_UNUSED) {
zval *key = RT_CONSTANT(opline, opline->op2);
- if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -25035,7 +25216,7 @@
}
SAVE_OPLINE();
- ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
ZVAL_STR(&key_tmp, key);
if (zend_compare(op1, &key_tmp) == 0) {
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
@@ -25448,9 +25629,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
@@ -25488,7 +25669,7 @@
zend_fetch_property_address(
result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
if (IS_VAR == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -25632,7 +25813,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -25763,7 +25944,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -25894,7 +26075,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -26025,7 +26206,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -26720,7 +26901,7 @@
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -27219,7 +27400,7 @@
}
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
} else {
@@ -27237,7 +27418,7 @@
/* Set the new yielded key */
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -27613,9 +27794,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_UNUSED == IS_UNUSED) {
@@ -29118,7 +29299,7 @@
}
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
} else {
@@ -29136,7 +29317,7 @@
/* Set the new yielded key */
if (IS_UNUSED != IS_UNUSED) {
zval *key = NULL;
- if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -29656,9 +29837,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_CV == IS_UNUSED) {
@@ -29696,7 +29877,7 @@
zend_fetch_property_address(
result, container, IS_VAR, property, IS_CV,
((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -29839,7 +30020,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -29970,7 +30151,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -30101,7 +30282,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -30232,7 +30413,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -31000,7 +31181,7 @@
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -31497,7 +31678,7 @@
}
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
} else {
@@ -31515,7 +31696,7 @@
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -31559,35 +31740,58 @@
uint32_t value_type;
HashTable *fe_ht;
HashPosition pos;
- Bucket *p;
array = EX_VAR(opline->op1.var);
SAVE_OPLINE();
fe_ht = Z_ARRVAL_P(array);
pos = Z_FE_POS_P(array);
- p = fe_ht->arData + pos;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- /* reached end of iteration */
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
+ if (HT_IS_PACKED(fe_ht)) {
+ value = fe_ht->arPacked + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ pos++;
+ value++;
}
- pos++;
- value = &p->val;
- value_type = Z_TYPE_INFO_P(value);
- ZEND_ASSERT(value_type != IS_INDIRECT);
- if (EXPECTED(value_type != IS_UNDEF)) {
- break;
+ Z_FE_POS_P(array) = pos + 1;
+ if (0) {
+ ZVAL_LONG(EX_VAR(opline->result.var), pos);
}
- p++;
- }
- Z_FE_POS_P(array) = pos;
- if (0) {
- if (!p->key) {
- ZVAL_LONG(EX_VAR(opline->result.var), p->h);
- } else {
- ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ } else {
+ Bucket *p;
+
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ pos++;
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ p++;
}
+ Z_FE_POS_P(array) = pos;
+ if (0) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
}
variable_ptr = EX_VAR(opline->op2.var);
@@ -31604,35 +31808,58 @@
uint32_t value_type;
HashTable *fe_ht;
HashPosition pos;
- Bucket *p;
array = EX_VAR(opline->op1.var);
SAVE_OPLINE();
fe_ht = Z_ARRVAL_P(array);
pos = Z_FE_POS_P(array);
- p = fe_ht->arData + pos;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- /* reached end of iteration */
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
+ if (HT_IS_PACKED(fe_ht)) {
+ value = fe_ht->arPacked + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ pos++;
+ value++;
}
- pos++;
- value = &p->val;
- value_type = Z_TYPE_INFO_P(value);
- ZEND_ASSERT(value_type != IS_INDIRECT);
- if (EXPECTED(value_type != IS_UNDEF)) {
- break;
+ Z_FE_POS_P(array) = pos + 1;
+ if (1) {
+ ZVAL_LONG(EX_VAR(opline->result.var), pos);
}
- p++;
- }
- Z_FE_POS_P(array) = pos;
- if (1) {
- if (!p->key) {
- ZVAL_LONG(EX_VAR(opline->result.var), p->h);
- } else {
- ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ } else {
+ Bucket *p;
+
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ pos++;
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ ZEND_ASSERT(value_type != IS_INDIRECT);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ p++;
}
+ Z_FE_POS_P(array) = pos;
+ if (1) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
}
variable_ptr = EX_VAR(opline->op2.var);
@@ -31656,7 +31883,7 @@
do {
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
- if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
+ if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
obj = Z_REFVAL_P(obj);
if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
break;
@@ -32007,7 +32234,7 @@
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -32054,11 +32281,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -32090,10 +32316,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -32133,7 +32369,7 @@
zend_fetch_property_address(
result, container, IS_UNUSED, property, IS_CONST,
((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
if (IS_UNUSED == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -32215,11 +32451,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -32367,7 +32602,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -32498,7 +32733,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -32629,7 +32864,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -32760,7 +32995,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -32860,7 +33095,7 @@
}
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -33066,9 +33301,9 @@
if (IS_CONST == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if (IS_CONST == IS_CONST) {
function_name = RT_CONSTANT(opline, opline->op2);
@@ -33362,7 +33597,21 @@
ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+
+ if (ce->ce_flags & ZEND_ACC_TRAIT) {
+ zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+
value = &c->value;
+ // Enums require loading of all class constants to build the backed enum table
+ if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
+ if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+ }
if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
zval_update_constant_ex(value, c->ce);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -33568,7 +33817,7 @@
}
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -33586,7 +33835,7 @@
/* Set the new yielded key */
if (IS_CONST != IS_UNUSED) {
zval *key = RT_CONSTANT(opline, opline->op2);
- if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -33865,7 +34114,7 @@
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -33912,11 +34161,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -33948,10 +34196,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -33986,7 +34244,7 @@
zend_fetch_property_address(
result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
if (IS_UNUSED == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -34068,11 +34326,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -34220,7 +34477,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -34351,7 +34608,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -34482,7 +34739,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -34613,7 +34870,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -34713,7 +34970,7 @@
}
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -34920,9 +35177,9 @@
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
@@ -35305,7 +35562,7 @@
}
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -35323,7 +35580,7 @@
/* Set the new yielded key */
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -35847,7 +36104,7 @@
}
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -35865,7 +36122,7 @@
/* Set the new yielded key */
if (IS_UNUSED != IS_UNUSED) {
zval *key = NULL;
- if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -36335,7 +36592,7 @@
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -36382,11 +36639,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -36418,10 +36674,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -36456,7 +36722,7 @@
zend_fetch_property_address(
result, container, IS_UNUSED, property, IS_CV,
((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
if (IS_UNUSED == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -36538,11 +36804,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -36690,7 +36955,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -36821,7 +37086,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -36952,7 +37217,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -37083,7 +37348,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -37183,7 +37448,7 @@
}
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -37389,9 +37654,9 @@
if (IS_CV == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if (IS_CV == IS_CONST) {
function_name = EX_VAR(opline->op2.var);
@@ -37773,7 +38038,7 @@
}
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -37791,7 +38056,7 @@
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -38180,41 +38445,6 @@
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *val;
- zend_uchar op1_type;
-
- val = EX_VAR(opline->op1.var);
-
- if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
- } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- ZVAL_UNDEFINED_OP1();
- if (UNEXPECTED(EG(exception))) {
- HANDLE_EXCEPTION();
- }
- }
- ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
- }
-
- SAVE_OPLINE();
- op1_type = IS_CV;
- if (i_zend_is_true(val)) {
- opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
- } else {
- opline = OP_JMP_ADDR(opline, opline->op2);
- }
- if (op1_type & (IS_TMP_VAR|IS_VAR)) {
- zval_ptr_dtor_nogc(val);
- }
- ZEND_VM_JMP(opline);
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -38566,7 +38796,7 @@
do {
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
- if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
+ if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
obj = Z_REFVAL_P(obj);
if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
break;
@@ -38728,10 +38958,25 @@
if (RETURN_VALUE_USED(opline)) {
ZVAL_TRUE(EX_VAR(opline->result.var));
}
- } else if (EXPECTED(new_op_array != NULL)) {
+ } else if (UNEXPECTED(new_op_array == NULL)) {
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+ } else if (new_op_array->last == 1
+ && new_op_array->opcodes[0].opcode == ZEND_RETURN
+ && new_op_array->opcodes[0].op1_type == IS_CONST
+ && EXPECTED(zend_execute_ex == execute_ex)) {
+ if (RETURN_VALUE_USED(opline)) {
+ const zend_op *op = new_op_array->opcodes;
+
+ ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
+ }
+ zend_destroy_static_vars(new_op_array);
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ } else {
zval *return_value = NULL;
zend_execute_data *call;
-
if (RETURN_VALUE_USED(opline)) {
return_value = EX_VAR(opline->result.var);
}
@@ -38739,7 +38984,7 @@
new_op_array->scope = EX(func)->op_array.scope;
call = zend_vm_stack_push_call_frame(
- (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
+ (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
(zend_function*)new_op_array, 0,
Z_PTR(EX(This)));
@@ -38770,8 +39015,6 @@
UNDEF_RESULT();
HANDLE_EXCEPTION();
}
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_FALSE(EX_VAR(opline->result.var));
}
ZEND_VM_NEXT_OPCODE();
@@ -38880,9 +39123,6 @@
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
- if (IS_CV == IS_VAR) {
-
- }
ZEND_VM_NEXT_OPCODE();
} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -38919,11 +39159,6 @@
} else {
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_CV == IS_VAR) {
-
- } else {
-
- }
if (UNEXPECTED(EG(exception))) {
HANDLE_EXCEPTION();
} else if (is_empty) {
@@ -38936,11 +39171,7 @@
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
ZVAL_UNDEF(EX_VAR(opline->result.var));
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- if (IS_CV == IS_VAR) {
- } else {
-
- }
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
}
@@ -39053,9 +39284,13 @@
}
result = EX_VAR(opline->result.var);
- if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
+ uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
+ if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
ZVAL_NULL(result);
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
+ if (IS_CV == IS_CV
+ && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
+ && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
+ ) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -39062,10 +39297,10 @@
HANDLE_EXCEPTION();
}
}
- } else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
+ } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
ZVAL_FALSE(result);
} else {
- ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
+ ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
ZVAL_TRUE(result);
}
@@ -39601,7 +39836,7 @@
}
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
@@ -40492,9 +40727,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_CONST == IS_UNUSED) {
@@ -40530,7 +40765,7 @@
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -40577,11 +40812,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -40613,10 +40847,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -40656,7 +40900,7 @@
zend_fetch_property_address(
result, container, IS_CV, property, IS_CONST,
((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
if (IS_CV == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -40738,11 +40982,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -40890,7 +41133,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -41021,7 +41264,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -41152,7 +41395,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -41283,7 +41526,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -42017,7 +42260,7 @@
}
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -42093,7 +42336,7 @@
}
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -42266,9 +42509,9 @@
if (IS_CONST == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if (IS_CONST == IS_CONST) {
function_name = RT_CONSTANT(opline, opline->op2);
@@ -43002,7 +43245,7 @@
}
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -43020,7 +43263,7 @@
/* Set the new yielded key */
if (IS_CONST != IS_UNUSED) {
zval *key = RT_CONSTANT(opline, opline->op2);
- if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -43074,11 +43317,10 @@
if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == varname) ||
- (EXPECTED(p->h == ZSTR_H(varname)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, varname))))) {
+ if (EXPECTED(p->key == varname) ||
+ (EXPECTED(p->h == ZSTR_H(varname)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, varname)))) {
value = (zval*)p; /* value = &p->val; */
goto check_indirect;
@@ -43197,7 +43439,7 @@
}
SAVE_OPLINE();
- ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
ZVAL_STR(&key_tmp, key);
if (zend_compare(op1, &key_tmp) == 0) {
@@ -43410,7 +43652,7 @@
}
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
@@ -44275,9 +44517,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
@@ -44313,7 +44555,7 @@
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -44360,11 +44602,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -44396,10 +44637,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -44434,7 +44685,7 @@
zend_fetch_property_address(
result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
if (IS_CV == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -44516,11 +44767,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -44668,7 +44918,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -44799,7 +45049,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -44930,7 +45180,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -45061,7 +45311,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -45755,7 +46005,7 @@
}
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -45831,7 +46081,7 @@
}
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -46004,9 +46254,9 @@
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
@@ -46557,7 +46807,7 @@
}
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -46575,7 +46825,7 @@
/* Set the new yielded key */
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -47096,9 +47346,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_UNUSED == IS_UNUSED) {
@@ -48356,7 +48606,7 @@
}
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -48374,7 +48624,7 @@
/* Set the new yielded key */
if (IS_UNUSED != IS_UNUSED) {
zval *key = NULL;
- if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -48535,7 +48785,8 @@
if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
zval retval;
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
+ zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
+ zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
count = zval_get_long(&retval);
zval_ptr_dtor(&retval);
break;
@@ -48699,7 +48950,7 @@
}
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
@@ -49590,9 +49841,9 @@
#endif
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
+ }
ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
if (IS_CV == IS_UNUSED) {
@@ -49628,7 +49879,7 @@
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
- do {
+ do {
if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
container = Z_REFVAL_P(container);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -49675,11 +49926,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_r_copy;
@@ -49711,10 +49961,20 @@
}
}
+#if ZEND_DEBUG
+ /* For non-standard object handlers, verify a declared property type in debug builds.
+ * Fetch prop_info before calling read_property(), as it may deallocate the object. */
+ zend_property_info *prop_info = NULL;
+ if (zobj->handlers->read_property != zend_std_read_property) {
+ prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
+ }
+#endif
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
#if ZEND_DEBUG
- if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
- zend_verify_internal_read_property_type(zobj, name, retval);
+ if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
+ && ZEND_TYPE_IS_SET(prop_info->type)) {
+ ZVAL_OPT_DEREF(retval);
+ zend_verify_property_type(prop_info, retval, /* strict */ true);
}
#endif
@@ -49749,7 +50009,7 @@
zend_fetch_property_address(
result, container, IS_CV, property, IS_CV,
((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ BP_VAR_W, opline->extended_value, 1 OPLINE_CC EXECUTE_DATA_CC);
if (IS_CV == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
@@ -49831,11 +50091,10 @@
if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(p->key == name) ||
- (EXPECTED(p->h == ZSTR_H(name)) &&
- EXPECTED(p->key != NULL) &&
- EXPECTED(zend_string_equal_content(p->key, name))))) {
+ if (EXPECTED(p->key == name) ||
+ (EXPECTED(p->h == ZSTR_H(name)) &&
+ EXPECTED(p->key != NULL) &&
+ EXPECTED(zend_string_equal_content(p->key, name)))) {
retval = &p->val;
if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
goto fetch_obj_is_copy;
@@ -49983,7 +50242,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -50114,7 +50373,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -50245,7 +50504,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -50376,7 +50635,7 @@
}
}
- if (!zobj->ce->__set) {
+ if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
@@ -51143,7 +51402,7 @@
}
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -51219,7 +51478,7 @@
}
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
- size_t len = ZSTR_LEN(op1_str);
+ size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
@@ -51392,9 +51651,9 @@
if (IS_CV == IS_CONST &&
EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
- fbc = CACHED_PTR(opline->result.num + sizeof(void*));
+ fbc = CACHED_PTR(opline->result.num + sizeof(void*));
} else {
- zend_object *orig_obj = obj;
+ zend_object *orig_obj = obj;
if (IS_CV == IS_CONST) {
function_name = EX_VAR(opline->op2.var);
@@ -51942,7 +52201,7 @@
}
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+ } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
} else {
@@ -51960,7 +52219,7 @@
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
+ if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
key = Z_REFVAL_P(key);
}
ZVAL_COPY(&generator->key, key);
@@ -53347,11 +53606,6 @@
(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
- (void*)&&ZEND_JMPZNZ_SPEC_CONST_LABEL,
- (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
- (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
- (void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_JMPZNZ_SPEC_CV_LABEL,
(void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
@@ -54275,6 +54529,8 @@
(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
+ (void*)&&ZEND_DO_ICALL_SPEC_OBSERVER_LABEL,
+ (void*)&&ZEND_DO_ICALL_SPEC_OBSERVER_LABEL,
(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
@@ -55689,18 +55945,24 @@
LOAD_NEXT_OPLINE();
ZEND_VM_LEAVE();
} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
- zend_detach_symbol_table(execute_data);
+ if (EX(func)->op_array.last_var > 0) {
+ zend_detach_symbol_table(execute_data);
+ call_info |= ZEND_CALL_NEEDS_REATTACH;
+ }
zend_destroy_static_vars(&EX(func)->op_array);
destroy_op_array(&EX(func)->op_array);
efree_size(EX(func), sizeof(zend_op_array));
-#ifdef ZEND_PREFER_RELOAD
- call_info = EX_CALL_INFO();
-#endif
old_execute_data = execute_data;
execute_data = EG(current_execute_data) = EX(prev_execute_data);
zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
- zend_attach_symbol_table(execute_data);
+ if (call_info & ZEND_CALL_NEEDS_REATTACH) {
+ if (EX(func)->op_array.last_var > 0) {
+ zend_attach_symbol_table(execute_data);
+ } else {
+ ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
+ }
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
@@ -55731,16 +55993,25 @@
} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
zend_array *symbol_table = EX(symbol_table);
- zend_detach_symbol_table(execute_data);
- old_execute_data = EX(prev_execute_data);
- while (old_execute_data) {
- if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
- if (old_execute_data->symbol_table == symbol_table) {
- zend_attach_symbol_table(old_execute_data);
+ if (EX(func)->op_array.last_var > 0) {
+ zend_detach_symbol_table(execute_data);
+ call_info |= ZEND_CALL_NEEDS_REATTACH;
+ }
+ if (call_info & ZEND_CALL_NEEDS_REATTACH) {
+ old_execute_data = EX(prev_execute_data);
+ while (old_execute_data) {
+ if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
+ if (old_execute_data->symbol_table == symbol_table) {
+ if (old_execute_data->func->op_array.last_var > 0) {
+ zend_attach_symbol_table(old_execute_data);
+ } else {
+ ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
+ }
+ }
+ break;
}
- break;
+ old_execute_data = old_execute_data->prev_execute_data;
}
- old_execute_data = old_execute_data->prev_execute_data;
}
EG(current_execute_data) = EX(prev_execute_data);
ZEND_VM_RETURN();
@@ -55760,6 +56031,10 @@
VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_ICALL_SPEC_OBSERVER):
+ VM_TRACE(ZEND_DO_ICALL_SPEC_OBSERVER)
+ ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -55956,10 +56231,6 @@
VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_JMPZNZ_SPEC_CONST):
- VM_TRACE(ZEND_JMPZNZ_SPEC_CONST)
- ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -57233,10 +57504,6 @@
VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_JMPZNZ_SPEC_TMPVAR):
- VM_TRACE(ZEND_JMPZNZ_SPEC_TMPVAR)
- ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -59009,10 +59276,6 @@
VM_TRACE(ZEND_JMPNZ_SPEC_CV)
ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_JMPZNZ_SPEC_CV):
- VM_TRACE(ZEND_JMPZNZ_SPEC_CV)
- ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -61405,11 +61668,6 @@
ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
ZEND_JMPNZ_SPEC_CV_HANDLER,
- ZEND_JMPZNZ_SPEC_CONST_HANDLER,
- ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
- ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
- ZEND_NULL_HANDLER,
- ZEND_JMPZNZ_SPEC_CV_HANDLER,
ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
@@ -62333,6 +62591,8 @@
ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
+ ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER,
+ ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER,
ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
@@ -63640,165 +63900,217 @@
1255,
1256 | SPEC_RULE_OP1,
1261 | SPEC_RULE_OP1,
+ 3450,
1266 | SPEC_RULE_OP1,
1271 | SPEC_RULE_OP1,
- 1276 | SPEC_RULE_OP1,
- 1281 | SPEC_RULE_OP2,
- 1286,
- 1287 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
+ 1276 | SPEC_RULE_OP2,
+ 1281,
+ 1282 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
+ 1292 | SPEC_RULE_OP1,
1297 | SPEC_RULE_OP1,
- 1302 | SPEC_RULE_OP1,
- 1307 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1302 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1327 | SPEC_RULE_OP2,
1332 | SPEC_RULE_OP2,
1337 | SPEC_RULE_OP2,
- 1342 | SPEC_RULE_OP2,
- 1347,
- 1348,
+ 1342,
+ 1343,
+ 1344,
+ 1345 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
1349,
- 1350 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
- 1354,
- 1355 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
- 1365,
- 1366,
- 1367 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1392 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
- 1442 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1467 | SPEC_RULE_OP1,
- 1472,
- 1473,
- 1474 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1499 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1524 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
- 1534 | SPEC_RULE_OP1,
- 1539 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1564 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1589 | SPEC_RULE_OP1,
- 1594,
- 1595,
- 1596 | SPEC_RULE_OP1,
- 1601 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1626 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1651 | SPEC_RULE_OP1,
- 1656 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1681 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1706 | SPEC_RULE_OP1,
- 1711 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1736 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1761 | SPEC_RULE_OP1,
- 1766 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1791 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1816 | SPEC_RULE_OP1,
- 1821 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1846 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1871 | SPEC_RULE_OP1,
- 1876 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1901 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1926 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1951,
- 1952 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
- 1962,
- 1963,
- 1964,
- 1965,
- 1966,
- 1967 | SPEC_RULE_OP2,
- 1972,
- 1973 | SPEC_RULE_OP1,
- 1978 | SPEC_RULE_OP2,
- 1983 | SPEC_RULE_OP1,
- 1988 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
- 1998 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2023 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2048 | SPEC_RULE_OP1,
- 2053 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2078 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
- 2128 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2153 | SPEC_RULE_OP2,
- 2158,
+ 1350 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
+ 1360,
+ 1361,
+ 1362 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1387 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
+ 1437 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1462 | SPEC_RULE_OP1,
+ 1467,
+ 1468,
+ 1469 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1494 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1519 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
+ 1529 | SPEC_RULE_OP1,
+ 1534 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1559 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1584 | SPEC_RULE_OP1,
+ 1589,
+ 1590,
+ 1591 | SPEC_RULE_OP1,
+ 1596 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1621 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1646 | SPEC_RULE_OP1,
+ 1651 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1676 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1701 | SPEC_RULE_OP1,
+ 1706 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1731 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1756 | SPEC_RULE_OP1,
+ 1761 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1786 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1811 | SPEC_RULE_OP1,
+ 1816 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1841 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1866 | SPEC_RULE_OP1,
+ 1871 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1896 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1921 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1946,
+ 1947 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
+ 1957,
+ 1958,
+ 1959,
+ 1960,
+ 1961,
+ 1962 | SPEC_RULE_OP2,
+ 1967,
+ 1968 | SPEC_RULE_OP1,
+ 1973 | SPEC_RULE_OP2,
+ 1978 | SPEC_RULE_OP1,
+ 1983 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
+ 1993 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2018 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2043 | SPEC_RULE_OP1,
+ 2048 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2073 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
+ 2123 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2148 | SPEC_RULE_OP2,
+ 2153,
+ 2154 | SPEC_RULE_OP1,
2159 | SPEC_RULE_OP1,
- 2164 | SPEC_RULE_OP1,
- 2169,
+ 2164,
+ 2165 | SPEC_RULE_OP1,
2170 | SPEC_RULE_OP1,
2175 | SPEC_RULE_OP1,
- 2180 | SPEC_RULE_OP1,
- 2185,
- 2186,
- 2187 | SPEC_RULE_OP2,
- 2192 | SPEC_RULE_RETVAL,
- 2194 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
- 2198 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
- 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2252 | SPEC_RULE_OP1,
- 2257,
- 2258 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2283,
- 2284 | SPEC_RULE_OP1,
+ 2180,
+ 2181,
+ 2182 | SPEC_RULE_OP2,
+ 2187 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
+ 2191 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
+ 2195 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
+ 2199 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2199 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2224 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2224 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2249 | SPEC_RULE_OP1,
+ 2254,
+ 2255 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2280,
+ 2281 | SPEC_RULE_OP1,
+ 2286,
+ 2287,
+ 2288,
2289,
2290,
2291,
2292,
- 2293,
- 2294,
- 2295,
- 2296 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2321,
- 2322,
- 2323,
- 2324 | SPEC_RULE_OP1,
- 2329,
- 2330 | SPEC_RULE_ISSET,
- 2332 | SPEC_RULE_OP2,
- 2337,
- 2338 | SPEC_RULE_OP1,
- 2343 | SPEC_RULE_OBSERVER,
- 2345,
- 2346 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2371 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
+ 2293 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2318,
+ 2319,
+ 2320,
+ 2321 | SPEC_RULE_OP1,
+ 2326,
+ 2327 | SPEC_RULE_ISSET,
+ 2329 | SPEC_RULE_OP2,
+ 2334,
+ 2335 | SPEC_RULE_OP1,
+ 2340 | SPEC_RULE_OBSERVER,
+ 2342,
+ 2343 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2368 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
+ 2378,
+ 2379,
+ 2380,
2381,
- 2382,
- 2383,
- 2384,
- 2385 | SPEC_RULE_OP1,
- 2390,
- 2391,
- 2392 | SPEC_RULE_OP1,
- 2397 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2422,
- 2423 | SPEC_RULE_OP1,
+ 2382 | SPEC_RULE_OP1,
+ 2387,
+ 2388,
+ 2389 | SPEC_RULE_OP1,
+ 2394 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2419,
+ 2420 | SPEC_RULE_OP1,
+ 2425,
+ 2426,
+ 2427,
2428,
2429,
2430,
2431,
2432,
- 2433,
- 2434,
- 2435,
- 2436 | SPEC_RULE_OP1,
- 2441,
- 2442,
- 2443,
- 2444 | SPEC_RULE_OP2,
- 2449,
- 2450 | SPEC_RULE_OP1,
- 2455 | SPEC_RULE_OP1,
- 2460 | SPEC_RULE_OP1,
- 2465 | SPEC_RULE_OP1,
- 2470 | SPEC_RULE_OP1,
- 2475,
- 2476 | SPEC_RULE_OP1,
- 2481 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2506 | SPEC_RULE_OP1,
- 2511 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2536 | SPEC_RULE_OP1,
- 2541 | SPEC_RULE_OP1,
+ 2433 | SPEC_RULE_OP1,
+ 2438,
+ 2439,
+ 2440,
+ 2441 | SPEC_RULE_OP2,
+ 2446,
+ 2447 | SPEC_RULE_OP1,
+ 2452 | SPEC_RULE_OP1,
+ 2457 | SPEC_RULE_OP1,
+ 2462 | SPEC_RULE_OP1,
+ 2467 | SPEC_RULE_OP1,
+ 2472,
+ 2473 | SPEC_RULE_OP1,
+ 2478 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2503 | SPEC_RULE_OP1,
+ 2508 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2533 | SPEC_RULE_OP1,
+ 2538 | SPEC_RULE_OP1,
+ 2543,
+ 2544,
+ 2545,
2546,
- 2547,
- 2548,
- 2549,
- 3453
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
+ 3450,
};
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
zend_opcode_handler_funcs = labels;
@@ -63971,7 +64283,7 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2552 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2549 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
@@ -63979,7 +64291,7 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2577 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2574 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
@@ -63987,7 +64299,7 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2602 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2599 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
@@ -63998,17 +64310,17 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2627 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 2624 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2652 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 2649 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2677 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 2674 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
}
break;
case ZEND_MUL:
@@ -64019,17 +64331,17 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2702 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2699 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2727 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2724 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2752 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2749 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_IDENTICAL:
@@ -64040,14 +64352,14 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2777 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2774 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2852 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2849 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
- spec = 3077 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3074 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_NOT_IDENTICAL:
@@ -64058,14 +64370,14 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2927 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2924 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3002 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2999 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
- spec = 3082 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3079 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_EQUAL:
@@ -64076,12 +64388,12 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2777 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2774 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2852 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2849 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_NOT_EQUAL:
@@ -64092,12 +64404,12 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2927 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2924 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3002 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2999 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_SMALLER:
@@ -64105,12 +64417,12 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3087 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 3084 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3162 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 3159 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
}
break;
case ZEND_IS_SMALLER_OR_EQUAL:
@@ -64118,74 +64430,74 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3237 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 3234 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3312 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 3309 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
}
break;
case ZEND_QM_ASSIGN:
if (op1_info == MAY_BE_LONG) {
- spec = 3399 | SPEC_RULE_OP1;
+ spec = 3396 | SPEC_RULE_OP1;
} else if (op1_info == MAY_BE_DOUBLE) {
- spec = 3404 | SPEC_RULE_OP1;
+ spec = 3401 | SPEC_RULE_OP1;
} else if ((op->op1_type == IS_CONST) ? !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)) : (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE))))) {
- spec = 3409 | SPEC_RULE_OP1;
+ spec = 3406 | SPEC_RULE_OP1;
}
break;
case ZEND_PRE_INC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 3387 | SPEC_RULE_RETVAL;
+ spec = 3384 | SPEC_RULE_RETVAL;
} else if (op1_info == MAY_BE_LONG) {
- spec = 3389 | SPEC_RULE_RETVAL;
+ spec = 3386 | SPEC_RULE_RETVAL;
}
break;
case ZEND_PRE_DEC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 3391 | SPEC_RULE_RETVAL;
+ spec = 3388 | SPEC_RULE_RETVAL;
} else if (op1_info == MAY_BE_LONG) {
- spec = 3393 | SPEC_RULE_RETVAL;
+ spec = 3390 | SPEC_RULE_RETVAL;
}
break;
case ZEND_POST_INC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 3395;
+ spec = 3392;
} else if (op1_info == MAY_BE_LONG) {
- spec = 3396;
+ spec = 3393;
}
break;
case ZEND_POST_DEC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 3397;
+ spec = 3394;
} else if (op1_info == MAY_BE_LONG) {
- spec = 3398;
+ spec = 3395;
}
break;
case ZEND_JMP:
if (OP_JMP_ADDR(op, op->op1) > op) {
- spec = 2551;
+ spec = 2548;
}
break;
case ZEND_RECV:
if (op->op2.num == MAY_BE_ANY) {
- spec = 2550;
+ spec = 2547;
}
break;
case ZEND_SEND_VAL:
if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
- spec = 3449;
+ spec = 3446;
}
break;
case ZEND_SEND_VAR_EX:
if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
- spec = 3444 | SPEC_RULE_OP1;
+ spec = 3441 | SPEC_RULE_OP1;
}
break;
case ZEND_FE_FETCH_R:
if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
- spec = 3451 | SPEC_RULE_RETVAL;
+ spec = 3448 | SPEC_RULE_RETVAL;
}
break;
case ZEND_FETCH_DIM_R:
@@ -64193,17 +64505,17 @@
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3414 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 3411 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
}
break;
case ZEND_SEND_VAL_EX:
if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
- spec = 3450;
+ spec = 3447;
}
break;
case ZEND_SEND_VAR:
if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
- spec = 3439 | SPEC_RULE_OP1;
+ spec = 3436 | SPEC_RULE_OP1;
}
break;
case ZEND_BW_OR:
Modified: trunk/MgDev/Oem/php/include/Zend/zend_vm_handlers.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_vm_handlers.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_vm_handlers.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -575,1278 +575,1276 @@
_(1262, ZEND_JMPNZ_SPEC_TMPVAR) \
_(1263, ZEND_JMPNZ_SPEC_TMPVAR) \
_(1265, ZEND_JMPNZ_SPEC_CV) \
- _(1266, ZEND_JMPZNZ_SPEC_CONST) \
- _(1267, ZEND_JMPZNZ_SPEC_TMPVAR) \
- _(1268, ZEND_JMPZNZ_SPEC_TMPVAR) \
- _(1270, ZEND_JMPZNZ_SPEC_CV) \
- _(1271, ZEND_JMPZ_EX_SPEC_CONST) \
- _(1272, ZEND_JMPZ_EX_SPEC_TMPVAR) \
- _(1273, ZEND_JMPZ_EX_SPEC_TMPVAR) \
- _(1275, ZEND_JMPZ_EX_SPEC_CV) \
- _(1276, ZEND_JMPNZ_EX_SPEC_CONST) \
- _(1277, ZEND_JMPNZ_EX_SPEC_TMPVAR) \
- _(1278, ZEND_JMPNZ_EX_SPEC_TMPVAR) \
- _(1280, ZEND_JMPNZ_EX_SPEC_CV) \
- _(1281, ZEND_CASE_SPEC_TMPVAR_CONST) \
- _(1282, ZEND_CASE_SPEC_TMPVAR_TMPVAR) \
- _(1283, ZEND_CASE_SPEC_TMPVAR_TMPVAR) \
- _(1285, ZEND_CASE_SPEC_TMPVAR_CV) \
- _(1286, ZEND_CHECK_VAR_SPEC_CV_UNUSED) \
- _(1287, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST) \
- _(1288, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST) \
- _(1293, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED) \
- _(1294, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK) \
- _(1297, ZEND_CAST_SPEC_CONST) \
- _(1298, ZEND_CAST_SPEC_TMP) \
- _(1299, ZEND_CAST_SPEC_VAR) \
- _(1301, ZEND_CAST_SPEC_CV) \
- _(1302, ZEND_BOOL_SPEC_CONST) \
- _(1303, ZEND_BOOL_SPEC_TMPVAR) \
- _(1304, ZEND_BOOL_SPEC_TMPVAR) \
- _(1306, ZEND_BOOL_SPEC_CV) \
- _(1307, ZEND_FAST_CONCAT_SPEC_CONST_CONST) \
- _(1308, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR) \
- _(1309, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR) \
- _(1311, ZEND_FAST_CONCAT_SPEC_CONST_CV) \
+ _(1266, ZEND_JMPZ_EX_SPEC_CONST) \
+ _(1267, ZEND_JMPZ_EX_SPEC_TMPVAR) \
+ _(1268, ZEND_JMPZ_EX_SPEC_TMPVAR) \
+ _(1270, ZEND_JMPZ_EX_SPEC_CV) \
+ _(1271, ZEND_JMPNZ_EX_SPEC_CONST) \
+ _(1272, ZEND_JMPNZ_EX_SPEC_TMPVAR) \
+ _(1273, ZEND_JMPNZ_EX_SPEC_TMPVAR) \
+ _(1275, ZEND_JMPNZ_EX_SPEC_CV) \
+ _(1276, ZEND_CASE_SPEC_TMPVAR_CONST) \
+ _(1277, ZEND_CASE_SPEC_TMPVAR_TMPVAR) \
+ _(1278, ZEND_CASE_SPEC_TMPVAR_TMPVAR) \
+ _(1280, ZEND_CASE_SPEC_TMPVAR_CV) \
+ _(1281, ZEND_CHECK_VAR_SPEC_CV_UNUSED) \
+ _(1282, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST) \
+ _(1283, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST) \
+ _(1288, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED) \
+ _(1289, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK) \
+ _(1292, ZEND_CAST_SPEC_CONST) \
+ _(1293, ZEND_CAST_SPEC_TMP) \
+ _(1294, ZEND_CAST_SPEC_VAR) \
+ _(1296, ZEND_CAST_SPEC_CV) \
+ _(1297, ZEND_BOOL_SPEC_CONST) \
+ _(1298, ZEND_BOOL_SPEC_TMPVAR) \
+ _(1299, ZEND_BOOL_SPEC_TMPVAR) \
+ _(1301, ZEND_BOOL_SPEC_CV) \
+ _(1302, ZEND_FAST_CONCAT_SPEC_CONST_CONST) \
+ _(1303, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR) \
+ _(1304, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR) \
+ _(1306, ZEND_FAST_CONCAT_SPEC_CONST_CV) \
+ _(1307, ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST) \
+ _(1308, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
+ _(1309, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
+ _(1311, ZEND_FAST_CONCAT_SPEC_TMPVAR_CV) \
_(1312, ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST) \
_(1313, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
_(1314, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
_(1316, ZEND_FAST_CONCAT_SPEC_TMPVAR_CV) \
- _(1317, ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST) \
- _(1318, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
- _(1319, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \
- _(1321, ZEND_FAST_CONCAT_SPEC_TMPVAR_CV) \
- _(1327, ZEND_FAST_CONCAT_SPEC_CV_CONST) \
- _(1328, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR) \
- _(1329, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR) \
- _(1331, ZEND_FAST_CONCAT_SPEC_CV_CV) \
- _(1332, ZEND_ROPE_INIT_SPEC_UNUSED_CONST) \
- _(1333, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR) \
- _(1334, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR) \
- _(1336, ZEND_ROPE_INIT_SPEC_UNUSED_CV) \
- _(1337, ZEND_ROPE_ADD_SPEC_TMP_CONST) \
- _(1338, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR) \
- _(1339, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR) \
- _(1341, ZEND_ROPE_ADD_SPEC_TMP_CV) \
- _(1342, ZEND_ROPE_END_SPEC_TMP_CONST) \
- _(1343, ZEND_ROPE_END_SPEC_TMP_TMPVAR) \
- _(1344, ZEND_ROPE_END_SPEC_TMP_TMPVAR) \
- _(1346, ZEND_ROPE_END_SPEC_TMP_CV) \
- _(1347, ZEND_BEGIN_SILENCE_SPEC) \
- _(1348, ZEND_END_SILENCE_SPEC_TMP) \
- _(1349, ZEND_INIT_FCALL_BY_NAME_SPEC_CONST) \
- _(1350, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED) \
- _(1351, ZEND_DO_FCALL_SPEC_RETVAL_USED) \
- _(1352, ZEND_DO_FCALL_SPEC_OBSERVER) \
- _(1353, ZEND_DO_FCALL_SPEC_OBSERVER) \
- _(1354, ZEND_INIT_FCALL_SPEC_CONST) \
- _(1355, ZEND_RETURN_SPEC_CONST) \
- _(1356, ZEND_RETURN_SPEC_OBSERVER) \
- _(1357, ZEND_RETURN_SPEC_TMP) \
- _(1358, ZEND_RETURN_SPEC_OBSERVER) \
- _(1359, ZEND_RETURN_SPEC_VAR) \
- _(1360, ZEND_RETURN_SPEC_OBSERVER) \
- _(1363, ZEND_RETURN_SPEC_CV) \
- _(1364, ZEND_RETURN_SPEC_OBSERVER) \
- _(1365, ZEND_RECV_SPEC_UNUSED) \
- _(1366, ZEND_RECV_INIT_SPEC_CONST) \
- _(1367, ZEND_SEND_VAL_SPEC_CONST_CONST) \
- _(1370, ZEND_SEND_VAL_SPEC_CONST_UNUSED) \
+ _(1322, ZEND_FAST_CONCAT_SPEC_CV_CONST) \
+ _(1323, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR) \
+ _(1324, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR) \
+ _(1326, ZEND_FAST_CONCAT_SPEC_CV_CV) \
+ _(1327, ZEND_ROPE_INIT_SPEC_UNUSED_CONST) \
+ _(1328, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR) \
+ _(1329, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR) \
+ _(1331, ZEND_ROPE_INIT_SPEC_UNUSED_CV) \
+ _(1332, ZEND_ROPE_ADD_SPEC_TMP_CONST) \
+ _(1333, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR) \
+ _(1334, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR) \
+ _(1336, ZEND_ROPE_ADD_SPEC_TMP_CV) \
+ _(1337, ZEND_ROPE_END_SPEC_TMP_CONST) \
+ _(1338, ZEND_ROPE_END_SPEC_TMP_TMPVAR) \
+ _(1339, ZEND_ROPE_END_SPEC_TMP_TMPVAR) \
+ _(1341, ZEND_ROPE_END_SPEC_TMP_CV) \
+ _(1342, ZEND_BEGIN_SILENCE_SPEC) \
+ _(1343, ZEND_END_SILENCE_SPEC_TMP) \
+ _(1344, ZEND_INIT_FCALL_BY_NAME_SPEC_CONST) \
+ _(1345, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED) \
+ _(1346, ZEND_DO_FCALL_SPEC_RETVAL_USED) \
+ _(1347, ZEND_DO_FCALL_SPEC_OBSERVER) \
+ _(1348, ZEND_DO_FCALL_SPEC_OBSERVER) \
+ _(1349, ZEND_INIT_FCALL_SPEC_CONST) \
+ _(1350, ZEND_RETURN_SPEC_CONST) \
+ _(1351, ZEND_RETURN_SPEC_OBSERVER) \
+ _(1352, ZEND_RETURN_SPEC_TMP) \
+ _(1353, ZEND_RETURN_SPEC_OBSERVER) \
+ _(1354, ZEND_RETURN_SPEC_VAR) \
+ _(1355, ZEND_RETURN_SPEC_OBSERVER) \
+ _(1358, ZEND_RETURN_SPEC_CV) \
+ _(1359, ZEND_RETURN_SPEC_OBSERVER) \
+ _(1360, ZEND_RECV_SPEC_UNUSED) \
+ _(1361, ZEND_RECV_INIT_SPEC_CONST) \
+ _(1362, ZEND_SEND_VAL_SPEC_CONST_CONST) \
+ _(1365, ZEND_SEND_VAL_SPEC_CONST_UNUSED) \
+ _(1367, ZEND_SEND_VAL_SPEC_TMPVAR_CONST) \
+ _(1370, ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED) \
_(1372, ZEND_SEND_VAL_SPEC_TMPVAR_CONST) \
_(1375, ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED) \
- _(1377, ZEND_SEND_VAL_SPEC_TMPVAR_CONST) \
- _(1380, ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED) \
- _(1412, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
- _(1413, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
- _(1418, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED) \
- _(1419, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK) \
- _(1432, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
- _(1433, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
- _(1438, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED) \
- _(1439, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK) \
- _(1452, ZEND_SEND_REF_SPEC_VAR_CONST) \
- _(1455, ZEND_SEND_REF_SPEC_VAR_UNUSED) \
- _(1462, ZEND_SEND_REF_SPEC_CV_CONST) \
- _(1465, ZEND_SEND_REF_SPEC_CV_UNUSED) \
- _(1467, ZEND_NEW_SPEC_CONST_UNUSED) \
- _(1469, ZEND_NEW_SPEC_VAR_UNUSED) \
- _(1470, ZEND_NEW_SPEC_UNUSED_UNUSED) \
- _(1472, ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST) \
- _(1473, ZEND_FREE_SPEC_TMPVAR) \
- _(1474, ZEND_INIT_ARRAY_SPEC_CONST_CONST) \
- _(1475, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
- _(1476, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
- _(1477, ZEND_INIT_ARRAY_SPEC_CONST_UNUSED) \
- _(1478, ZEND_INIT_ARRAY_SPEC_CONST_CV) \
- _(1479, ZEND_INIT_ARRAY_SPEC_TMP_CONST) \
- _(1480, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
- _(1481, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
- _(1482, ZEND_INIT_ARRAY_SPEC_TMP_UNUSED) \
- _(1483, ZEND_INIT_ARRAY_SPEC_TMP_CV) \
- _(1484, ZEND_INIT_ARRAY_SPEC_VAR_CONST) \
- _(1485, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
- _(1486, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
- _(1487, ZEND_INIT_ARRAY_SPEC_VAR_UNUSED) \
- _(1488, ZEND_INIT_ARRAY_SPEC_VAR_CV) \
- _(1489, ZEND_INIT_ARRAY_SPEC_UNUSED_CONST) \
- _(1490, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
- _(1491, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
- _(1492, ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED) \
- _(1493, ZEND_INIT_ARRAY_SPEC_UNUSED_CV) \
- _(1494, ZEND_INIT_ARRAY_SPEC_CV_CONST) \
- _(1495, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
- _(1496, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
- _(1497, ZEND_INIT_ARRAY_SPEC_CV_UNUSED) \
- _(1498, ZEND_INIT_ARRAY_SPEC_CV_CV) \
- _(1499, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST) \
- _(1500, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
- _(1501, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
- _(1502, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED) \
- _(1503, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV) \
- _(1504, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST) \
- _(1505, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
- _(1506, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
- _(1507, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED) \
- _(1508, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV) \
- _(1509, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST) \
- _(1510, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
- _(1511, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
- _(1512, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED) \
- _(1513, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV) \
- _(1519, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST) \
- _(1520, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
- _(1521, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
- _(1522, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED) \
- _(1523, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV) \
- _(1524, ZEND_INCLUDE_OR_EVAL_SPEC_CONST) \
- _(1525, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
- _(1526, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
- _(1527, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
- _(1528, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
- _(1529, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
- _(1532, ZEND_INCLUDE_OR_EVAL_SPEC_CV) \
- _(1533, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
- _(1534, ZEND_UNSET_VAR_SPEC_CONST_UNUSED) \
- _(1535, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
- _(1536, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
- _(1538, ZEND_UNSET_VAR_SPEC_CV_UNUSED) \
- _(1549, ZEND_UNSET_DIM_SPEC_VAR_CONST) \
- _(1550, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
- _(1551, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
- _(1553, ZEND_UNSET_DIM_SPEC_VAR_CV) \
- _(1559, ZEND_UNSET_DIM_SPEC_CV_CONST) \
- _(1560, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
- _(1561, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
- _(1563, ZEND_UNSET_DIM_SPEC_CV_CV) \
- _(1574, ZEND_UNSET_OBJ_SPEC_VAR_CONST) \
- _(1575, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
- _(1576, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
- _(1578, ZEND_UNSET_OBJ_SPEC_VAR_CV) \
- _(1579, ZEND_UNSET_OBJ_SPEC_UNUSED_CONST) \
- _(1580, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
- _(1581, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
- _(1583, ZEND_UNSET_OBJ_SPEC_UNUSED_CV) \
- _(1584, ZEND_UNSET_OBJ_SPEC_CV_CONST) \
- _(1585, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
- _(1586, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
- _(1588, ZEND_UNSET_OBJ_SPEC_CV_CV) \
- _(1589, ZEND_FE_RESET_R_SPEC_CONST) \
- _(1590, ZEND_FE_RESET_R_SPEC_TMP) \
- _(1591, ZEND_FE_RESET_R_SPEC_VAR) \
- _(1593, ZEND_FE_RESET_R_SPEC_CV) \
- _(1594, ZEND_FE_FETCH_R_SPEC_VAR) \
- _(1595, ZEND_EXIT_SPEC) \
- _(1596, ZEND_FETCH_R_SPEC_CONST_UNUSED) \
- _(1597, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
- _(1598, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
- _(1600, ZEND_FETCH_R_SPEC_CV_UNUSED) \
- _(1601, ZEND_FETCH_DIM_R_SPEC_CONST_CONST) \
- _(1602, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
- _(1603, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
- _(1605, ZEND_FETCH_DIM_R_SPEC_CONST_CV) \
+ _(1407, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
+ _(1408, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
+ _(1413, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED) \
+ _(1414, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK) \
+ _(1427, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
+ _(1428, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
+ _(1433, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED) \
+ _(1434, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK) \
+ _(1447, ZEND_SEND_REF_SPEC_VAR_CONST) \
+ _(1450, ZEND_SEND_REF_SPEC_VAR_UNUSED) \
+ _(1457, ZEND_SEND_REF_SPEC_CV_CONST) \
+ _(1460, ZEND_SEND_REF_SPEC_CV_UNUSED) \
+ _(1462, ZEND_NEW_SPEC_CONST_UNUSED) \
+ _(1464, ZEND_NEW_SPEC_VAR_UNUSED) \
+ _(1465, ZEND_NEW_SPEC_UNUSED_UNUSED) \
+ _(1467, ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST) \
+ _(1468, ZEND_FREE_SPEC_TMPVAR) \
+ _(1469, ZEND_INIT_ARRAY_SPEC_CONST_CONST) \
+ _(1470, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
+ _(1471, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
+ _(1472, ZEND_INIT_ARRAY_SPEC_CONST_UNUSED) \
+ _(1473, ZEND_INIT_ARRAY_SPEC_CONST_CV) \
+ _(1474, ZEND_INIT_ARRAY_SPEC_TMP_CONST) \
+ _(1475, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
+ _(1476, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
+ _(1477, ZEND_INIT_ARRAY_SPEC_TMP_UNUSED) \
+ _(1478, ZEND_INIT_ARRAY_SPEC_TMP_CV) \
+ _(1479, ZEND_INIT_ARRAY_SPEC_VAR_CONST) \
+ _(1480, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
+ _(1481, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
+ _(1482, ZEND_INIT_ARRAY_SPEC_VAR_UNUSED) \
+ _(1483, ZEND_INIT_ARRAY_SPEC_VAR_CV) \
+ _(1484, ZEND_INIT_ARRAY_SPEC_UNUSED_CONST) \
+ _(1485, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
+ _(1486, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
+ _(1487, ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED) \
+ _(1488, ZEND_INIT_ARRAY_SPEC_UNUSED_CV) \
+ _(1489, ZEND_INIT_ARRAY_SPEC_CV_CONST) \
+ _(1490, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
+ _(1491, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
+ _(1492, ZEND_INIT_ARRAY_SPEC_CV_UNUSED) \
+ _(1493, ZEND_INIT_ARRAY_SPEC_CV_CV) \
+ _(1494, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST) \
+ _(1495, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
+ _(1496, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
+ _(1497, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED) \
+ _(1498, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV) \
+ _(1499, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST) \
+ _(1500, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
+ _(1501, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
+ _(1502, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED) \
+ _(1503, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV) \
+ _(1504, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST) \
+ _(1505, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
+ _(1506, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
+ _(1507, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED) \
+ _(1508, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV) \
+ _(1514, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST) \
+ _(1515, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
+ _(1516, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
+ _(1517, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED) \
+ _(1518, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV) \
+ _(1519, ZEND_INCLUDE_OR_EVAL_SPEC_CONST) \
+ _(1520, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
+ _(1521, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
+ _(1522, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
+ _(1523, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
+ _(1524, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
+ _(1527, ZEND_INCLUDE_OR_EVAL_SPEC_CV) \
+ _(1528, ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER) \
+ _(1529, ZEND_UNSET_VAR_SPEC_CONST_UNUSED) \
+ _(1530, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
+ _(1531, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
+ _(1533, ZEND_UNSET_VAR_SPEC_CV_UNUSED) \
+ _(1544, ZEND_UNSET_DIM_SPEC_VAR_CONST) \
+ _(1545, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
+ _(1546, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
+ _(1548, ZEND_UNSET_DIM_SPEC_VAR_CV) \
+ _(1554, ZEND_UNSET_DIM_SPEC_CV_CONST) \
+ _(1555, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
+ _(1556, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
+ _(1558, ZEND_UNSET_DIM_SPEC_CV_CV) \
+ _(1569, ZEND_UNSET_OBJ_SPEC_VAR_CONST) \
+ _(1570, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
+ _(1571, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
+ _(1573, ZEND_UNSET_OBJ_SPEC_VAR_CV) \
+ _(1574, ZEND_UNSET_OBJ_SPEC_UNUSED_CONST) \
+ _(1575, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(1576, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(1578, ZEND_UNSET_OBJ_SPEC_UNUSED_CV) \
+ _(1579, ZEND_UNSET_OBJ_SPEC_CV_CONST) \
+ _(1580, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
+ _(1581, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
+ _(1583, ZEND_UNSET_OBJ_SPEC_CV_CV) \
+ _(1584, ZEND_FE_RESET_R_SPEC_CONST) \
+ _(1585, ZEND_FE_RESET_R_SPEC_TMP) \
+ _(1586, ZEND_FE_RESET_R_SPEC_VAR) \
+ _(1588, ZEND_FE_RESET_R_SPEC_CV) \
+ _(1589, ZEND_FE_FETCH_R_SPEC_VAR) \
+ _(1590, ZEND_EXIT_SPEC) \
+ _(1591, ZEND_FETCH_R_SPEC_CONST_UNUSED) \
+ _(1592, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
+ _(1593, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
+ _(1595, ZEND_FETCH_R_SPEC_CV_UNUSED) \
+ _(1596, ZEND_FETCH_DIM_R_SPEC_CONST_CONST) \
+ _(1597, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
+ _(1598, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
+ _(1600, ZEND_FETCH_DIM_R_SPEC_CONST_CV) \
+ _(1601, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \
+ _(1602, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
+ _(1603, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
+ _(1605, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \
_(1606, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \
_(1607, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
_(1608, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
_(1610, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \
- _(1611, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \
- _(1612, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
- _(1613, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
- _(1615, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \
- _(1621, ZEND_FETCH_DIM_R_SPEC_CV_CONST) \
- _(1622, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
- _(1623, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
- _(1625, ZEND_FETCH_DIM_R_SPEC_CV_CV) \
- _(1626, ZEND_FETCH_OBJ_R_SPEC_CONST_CONST) \
- _(1627, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
- _(1628, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
- _(1630, ZEND_FETCH_OBJ_R_SPEC_CONST_CV) \
+ _(1616, ZEND_FETCH_DIM_R_SPEC_CV_CONST) \
+ _(1617, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
+ _(1618, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
+ _(1620, ZEND_FETCH_DIM_R_SPEC_CV_CV) \
+ _(1621, ZEND_FETCH_OBJ_R_SPEC_CONST_CONST) \
+ _(1622, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
+ _(1623, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
+ _(1625, ZEND_FETCH_OBJ_R_SPEC_CONST_CV) \
+ _(1626, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \
+ _(1627, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
+ _(1628, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
+ _(1630, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \
_(1631, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \
_(1632, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
_(1633, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
_(1635, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \
- _(1636, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \
- _(1637, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
- _(1638, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
- _(1640, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \
- _(1641, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST) \
- _(1642, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
- _(1643, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
- _(1645, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV) \
- _(1646, ZEND_FETCH_OBJ_R_SPEC_CV_CONST) \
- _(1647, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
- _(1648, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
- _(1650, ZEND_FETCH_OBJ_R_SPEC_CV_CV) \
- _(1651, ZEND_FETCH_W_SPEC_CONST_UNUSED) \
- _(1652, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
- _(1653, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
- _(1655, ZEND_FETCH_W_SPEC_CV_UNUSED) \
- _(1666, ZEND_FETCH_DIM_W_SPEC_VAR_CONST) \
- _(1667, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
- _(1668, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
- _(1669, ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED) \
- _(1670, ZEND_FETCH_DIM_W_SPEC_VAR_CV) \
- _(1676, ZEND_FETCH_DIM_W_SPEC_CV_CONST) \
- _(1677, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
- _(1678, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
- _(1679, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \
- _(1680, ZEND_FETCH_DIM_W_SPEC_CV_CV) \
- _(1691, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) \
- _(1692, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
- _(1693, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
- _(1695, ZEND_FETCH_OBJ_W_SPEC_VAR_CV) \
- _(1696, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \
- _(1697, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
- _(1698, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
- _(1700, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV) \
- _(1701, ZEND_FETCH_OBJ_W_SPEC_CV_CONST) \
- _(1702, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
- _(1703, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
- _(1705, ZEND_FETCH_OBJ_W_SPEC_CV_CV) \
- _(1706, ZEND_FETCH_RW_SPEC_CONST_UNUSED) \
- _(1707, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
- _(1708, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
- _(1710, ZEND_FETCH_RW_SPEC_CV_UNUSED) \
- _(1721, ZEND_FETCH_DIM_RW_SPEC_VAR_CONST) \
- _(1722, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
- _(1723, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
- _(1724, ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED) \
- _(1725, ZEND_FETCH_DIM_RW_SPEC_VAR_CV) \
- _(1731, ZEND_FETCH_DIM_RW_SPEC_CV_CONST) \
- _(1732, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
- _(1733, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
- _(1734, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \
- _(1735, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \
- _(1746, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) \
- _(1747, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
- _(1748, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
- _(1750, ZEND_FETCH_OBJ_RW_SPEC_VAR_CV) \
- _(1751, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \
- _(1752, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
- _(1753, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
- _(1755, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV) \
- _(1756, ZEND_FETCH_OBJ_RW_SPEC_CV_CONST) \
- _(1757, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
- _(1758, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
- _(1760, ZEND_FETCH_OBJ_RW_SPEC_CV_CV) \
- _(1761, ZEND_FETCH_IS_SPEC_CONST_UNUSED) \
- _(1762, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
- _(1763, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
- _(1765, ZEND_FETCH_IS_SPEC_CV_UNUSED) \
- _(1766, ZEND_FETCH_DIM_IS_SPEC_CONST_CONST) \
- _(1767, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
- _(1768, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
- _(1770, ZEND_FETCH_DIM_IS_SPEC_CONST_CV) \
+ _(1636, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST) \
+ _(1637, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
+ _(1638, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
+ _(1640, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV) \
+ _(1641, ZEND_FETCH_OBJ_R_SPEC_CV_CONST) \
+ _(1642, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
+ _(1643, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
+ _(1645, ZEND_FETCH_OBJ_R_SPEC_CV_CV) \
+ _(1646, ZEND_FETCH_W_SPEC_CONST_UNUSED) \
+ _(1647, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
+ _(1648, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
+ _(1650, ZEND_FETCH_W_SPEC_CV_UNUSED) \
+ _(1661, ZEND_FETCH_DIM_W_SPEC_VAR_CONST) \
+ _(1662, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
+ _(1663, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
+ _(1664, ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED) \
+ _(1665, ZEND_FETCH_DIM_W_SPEC_VAR_CV) \
+ _(1671, ZEND_FETCH_DIM_W_SPEC_CV_CONST) \
+ _(1672, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
+ _(1673, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
+ _(1674, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \
+ _(1675, ZEND_FETCH_DIM_W_SPEC_CV_CV) \
+ _(1686, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) \
+ _(1687, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
+ _(1688, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
+ _(1690, ZEND_FETCH_OBJ_W_SPEC_VAR_CV) \
+ _(1691, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \
+ _(1692, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
+ _(1693, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
+ _(1695, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV) \
+ _(1696, ZEND_FETCH_OBJ_W_SPEC_CV_CONST) \
+ _(1697, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
+ _(1698, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
+ _(1700, ZEND_FETCH_OBJ_W_SPEC_CV_CV) \
+ _(1701, ZEND_FETCH_RW_SPEC_CONST_UNUSED) \
+ _(1702, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
+ _(1703, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
+ _(1705, ZEND_FETCH_RW_SPEC_CV_UNUSED) \
+ _(1716, ZEND_FETCH_DIM_RW_SPEC_VAR_CONST) \
+ _(1717, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
+ _(1718, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
+ _(1719, ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED) \
+ _(1720, ZEND_FETCH_DIM_RW_SPEC_VAR_CV) \
+ _(1726, ZEND_FETCH_DIM_RW_SPEC_CV_CONST) \
+ _(1727, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
+ _(1728, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
+ _(1729, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \
+ _(1730, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \
+ _(1741, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) \
+ _(1742, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
+ _(1743, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
+ _(1745, ZEND_FETCH_OBJ_RW_SPEC_VAR_CV) \
+ _(1746, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \
+ _(1747, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
+ _(1748, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
+ _(1750, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV) \
+ _(1751, ZEND_FETCH_OBJ_RW_SPEC_CV_CONST) \
+ _(1752, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
+ _(1753, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
+ _(1755, ZEND_FETCH_OBJ_RW_SPEC_CV_CV) \
+ _(1756, ZEND_FETCH_IS_SPEC_CONST_UNUSED) \
+ _(1757, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
+ _(1758, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
+ _(1760, ZEND_FETCH_IS_SPEC_CV_UNUSED) \
+ _(1761, ZEND_FETCH_DIM_IS_SPEC_CONST_CONST) \
+ _(1762, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
+ _(1763, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
+ _(1765, ZEND_FETCH_DIM_IS_SPEC_CONST_CV) \
+ _(1766, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \
+ _(1767, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1768, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1770, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \
_(1771, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \
_(1772, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
_(1773, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
_(1775, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \
- _(1776, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \
- _(1777, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
- _(1778, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
- _(1780, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \
- _(1786, ZEND_FETCH_DIM_IS_SPEC_CV_CONST) \
- _(1787, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
- _(1788, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
- _(1790, ZEND_FETCH_DIM_IS_SPEC_CV_CV) \
- _(1791, ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST) \
- _(1792, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
- _(1793, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
- _(1795, ZEND_FETCH_OBJ_IS_SPEC_CONST_CV) \
+ _(1781, ZEND_FETCH_DIM_IS_SPEC_CV_CONST) \
+ _(1782, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
+ _(1783, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
+ _(1785, ZEND_FETCH_DIM_IS_SPEC_CV_CV) \
+ _(1786, ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST) \
+ _(1787, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
+ _(1788, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
+ _(1790, ZEND_FETCH_OBJ_IS_SPEC_CONST_CV) \
+ _(1791, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \
+ _(1792, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1793, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1795, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \
_(1796, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \
_(1797, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
_(1798, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
_(1800, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \
- _(1801, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \
- _(1802, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
- _(1803, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
- _(1805, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \
- _(1806, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST) \
- _(1807, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
- _(1808, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
- _(1810, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV) \
- _(1811, ZEND_FETCH_OBJ_IS_SPEC_CV_CONST) \
- _(1812, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
- _(1813, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
- _(1815, ZEND_FETCH_OBJ_IS_SPEC_CV_CV) \
- _(1816, ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED) \
- _(1817, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
- _(1818, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
- _(1820, ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED) \
- _(1821, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST) \
- _(1822, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
- _(1823, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
- _(1824, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED) \
- _(1825, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV) \
- _(1826, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST) \
- _(1827, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
- _(1828, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
- _(1829, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED) \
- _(1830, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV) \
- _(1831, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST) \
- _(1832, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
- _(1833, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
- _(1834, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED) \
- _(1835, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV) \
- _(1841, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST) \
- _(1842, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
- _(1843, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
- _(1844, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED) \
- _(1845, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV) \
- _(1846, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST) \
- _(1847, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
- _(1848, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
- _(1850, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) \
- _(1851, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) \
- _(1852, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
- _(1853, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
- _(1855, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) \
- _(1856, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) \
- _(1857, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
- _(1858, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
- _(1860, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) \
- _(1861, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \
- _(1862, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
- _(1863, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
- _(1865, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV) \
- _(1866, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST) \
- _(1867, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
- _(1868, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
- _(1870, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV) \
- _(1871, ZEND_FETCH_UNSET_SPEC_CONST_UNUSED) \
- _(1872, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
- _(1873, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
- _(1875, ZEND_FETCH_UNSET_SPEC_CV_UNUSED) \
- _(1886, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST) \
- _(1887, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
- _(1888, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
- _(1890, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV) \
- _(1896, ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST) \
- _(1897, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
- _(1898, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
- _(1900, ZEND_FETCH_DIM_UNSET_SPEC_CV_CV) \
- _(1911, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST) \
- _(1912, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
- _(1913, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
- _(1915, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV) \
- _(1916, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST) \
- _(1917, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
- _(1918, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
- _(1920, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV) \
- _(1921, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST) \
- _(1922, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
- _(1923, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
- _(1925, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV) \
- _(1926, ZEND_FETCH_LIST_R_SPEC_CONST_CONST) \
- _(1927, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
- _(1928, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
- _(1930, ZEND_FETCH_LIST_R_SPEC_CONST_CV) \
+ _(1801, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST) \
+ _(1802, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
+ _(1803, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
+ _(1805, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV) \
+ _(1806, ZEND_FETCH_OBJ_IS_SPEC_CV_CONST) \
+ _(1807, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
+ _(1808, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
+ _(1810, ZEND_FETCH_OBJ_IS_SPEC_CV_CV) \
+ _(1811, ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED) \
+ _(1812, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
+ _(1813, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
+ _(1815, ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED) \
+ _(1816, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST) \
+ _(1817, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
+ _(1818, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
+ _(1819, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED) \
+ _(1820, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV) \
+ _(1821, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST) \
+ _(1822, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1823, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1824, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED) \
+ _(1825, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV) \
+ _(1826, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST) \
+ _(1827, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1828, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1829, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED) \
+ _(1830, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV) \
+ _(1836, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST) \
+ _(1837, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
+ _(1838, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
+ _(1839, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED) \
+ _(1840, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV) \
+ _(1841, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST) \
+ _(1842, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
+ _(1843, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
+ _(1845, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) \
+ _(1846, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) \
+ _(1847, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1848, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1850, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) \
+ _(1851, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) \
+ _(1852, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1853, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1855, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) \
+ _(1856, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \
+ _(1857, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
+ _(1858, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
+ _(1860, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV) \
+ _(1861, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST) \
+ _(1862, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
+ _(1863, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
+ _(1865, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV) \
+ _(1866, ZEND_FETCH_UNSET_SPEC_CONST_UNUSED) \
+ _(1867, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
+ _(1868, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
+ _(1870, ZEND_FETCH_UNSET_SPEC_CV_UNUSED) \
+ _(1881, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST) \
+ _(1882, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
+ _(1883, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
+ _(1885, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV) \
+ _(1891, ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST) \
+ _(1892, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
+ _(1893, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
+ _(1895, ZEND_FETCH_DIM_UNSET_SPEC_CV_CV) \
+ _(1906, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST) \
+ _(1907, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
+ _(1908, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
+ _(1910, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV) \
+ _(1911, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST) \
+ _(1912, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
+ _(1913, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
+ _(1915, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV) \
+ _(1916, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST) \
+ _(1917, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
+ _(1918, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
+ _(1920, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV) \
+ _(1921, ZEND_FETCH_LIST_R_SPEC_CONST_CONST) \
+ _(1922, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
+ _(1923, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
+ _(1925, ZEND_FETCH_LIST_R_SPEC_CONST_CV) \
+ _(1926, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
+ _(1927, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1928, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1930, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
_(1931, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
_(1932, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
_(1933, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
_(1935, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
- _(1936, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
- _(1937, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1938, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1940, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
- _(1946, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
- _(1947, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1948, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1950, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
- _(1951, ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST) \
- _(1952, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
- _(1953, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
- _(1958, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED) \
- _(1959, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK) \
- _(1962, ZEND_EXT_STMT_SPEC) \
- _(1963, ZEND_EXT_FCALL_BEGIN_SPEC) \
- _(1964, ZEND_EXT_FCALL_END_SPEC) \
- _(1965, ZEND_EXT_NOP_SPEC) \
- _(1966, ZEND_TICKS_SPEC) \
- _(1967, ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST) \
- _(1970, ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED) \
- _(1972, ZEND_CATCH_SPEC_CONST) \
- _(1973, ZEND_THROW_SPEC_CONST) \
- _(1974, ZEND_THROW_SPEC_TMPVAR) \
- _(1975, ZEND_THROW_SPEC_TMPVAR) \
- _(1977, ZEND_THROW_SPEC_CV) \
- _(1978, ZEND_FETCH_CLASS_SPEC_UNUSED_CONST) \
- _(1979, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
- _(1980, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
- _(1981, ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED) \
- _(1982, ZEND_FETCH_CLASS_SPEC_UNUSED_CV) \
- _(1983, ZEND_CLONE_SPEC_CONST) \
- _(1984, ZEND_CLONE_SPEC_TMPVAR) \
- _(1985, ZEND_CLONE_SPEC_TMPVAR) \
- _(1986, ZEND_CLONE_SPEC_UNUSED) \
- _(1987, ZEND_CLONE_SPEC_CV) \
- _(1988, ZEND_RETURN_BY_REF_SPEC_CONST) \
- _(1989, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
- _(1990, ZEND_RETURN_BY_REF_SPEC_TMP) \
- _(1991, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
- _(1992, ZEND_RETURN_BY_REF_SPEC_VAR) \
- _(1993, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
- _(1996, ZEND_RETURN_BY_REF_SPEC_CV) \
- _(1997, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
- _(1998, ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST) \
- _(1999, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
- _(2000, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
- _(2002, ZEND_INIT_METHOD_CALL_SPEC_CONST_CV) \
+ _(1941, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
+ _(1942, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1943, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1945, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
+ _(1946, ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST) \
+ _(1947, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
+ _(1948, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
+ _(1953, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED) \
+ _(1954, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK) \
+ _(1957, ZEND_EXT_STMT_SPEC) \
+ _(1958, ZEND_EXT_FCALL_BEGIN_SPEC) \
+ _(1959, ZEND_EXT_FCALL_END_SPEC) \
+ _(1960, ZEND_EXT_NOP_SPEC) \
+ _(1961, ZEND_TICKS_SPEC) \
+ _(1962, ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST) \
+ _(1965, ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED) \
+ _(1967, ZEND_CATCH_SPEC_CONST) \
+ _(1968, ZEND_THROW_SPEC_CONST) \
+ _(1969, ZEND_THROW_SPEC_TMPVAR) \
+ _(1970, ZEND_THROW_SPEC_TMPVAR) \
+ _(1972, ZEND_THROW_SPEC_CV) \
+ _(1973, ZEND_FETCH_CLASS_SPEC_UNUSED_CONST) \
+ _(1974, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
+ _(1975, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
+ _(1976, ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED) \
+ _(1977, ZEND_FETCH_CLASS_SPEC_UNUSED_CV) \
+ _(1978, ZEND_CLONE_SPEC_CONST) \
+ _(1979, ZEND_CLONE_SPEC_TMPVAR) \
+ _(1980, ZEND_CLONE_SPEC_TMPVAR) \
+ _(1981, ZEND_CLONE_SPEC_UNUSED) \
+ _(1982, ZEND_CLONE_SPEC_CV) \
+ _(1983, ZEND_RETURN_BY_REF_SPEC_CONST) \
+ _(1984, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
+ _(1985, ZEND_RETURN_BY_REF_SPEC_TMP) \
+ _(1986, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
+ _(1987, ZEND_RETURN_BY_REF_SPEC_VAR) \
+ _(1988, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
+ _(1991, ZEND_RETURN_BY_REF_SPEC_CV) \
+ _(1992, ZEND_RETURN_BY_REF_SPEC_OBSERVER) \
+ _(1993, ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST) \
+ _(1994, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
+ _(1995, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
+ _(1997, ZEND_INIT_METHOD_CALL_SPEC_CONST_CV) \
+ _(1998, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \
+ _(1999, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
+ _(2000, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
+ _(2002, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \
_(2003, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \
_(2004, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
_(2005, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
_(2007, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \
- _(2008, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \
- _(2009, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
- _(2010, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
- _(2012, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \
- _(2013, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST) \
- _(2014, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
- _(2015, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
- _(2017, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV) \
- _(2018, ZEND_INIT_METHOD_CALL_SPEC_CV_CONST) \
- _(2019, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
- _(2020, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
- _(2022, ZEND_INIT_METHOD_CALL_SPEC_CV_CV) \
- _(2023, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST) \
- _(2024, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
- _(2025, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
- _(2026, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED) \
- _(2027, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV) \
- _(2033, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST) \
- _(2034, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
- _(2035, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
- _(2036, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED) \
- _(2037, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV) \
- _(2038, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST) \
- _(2039, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
- _(2040, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
- _(2041, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED) \
- _(2042, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV) \
- _(2048, ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED) \
- _(2049, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
- _(2050, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
- _(2052, ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED) \
- _(2053, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST) \
- _(2054, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
- _(2055, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
- _(2057, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV) \
+ _(2008, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST) \
+ _(2009, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
+ _(2010, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
+ _(2012, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV) \
+ _(2013, ZEND_INIT_METHOD_CALL_SPEC_CV_CONST) \
+ _(2014, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
+ _(2015, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
+ _(2017, ZEND_INIT_METHOD_CALL_SPEC_CV_CV) \
+ _(2018, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST) \
+ _(2019, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
+ _(2020, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
+ _(2021, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED) \
+ _(2022, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV) \
+ _(2028, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST) \
+ _(2029, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
+ _(2030, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
+ _(2031, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED) \
+ _(2032, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV) \
+ _(2033, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST) \
+ _(2034, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
+ _(2035, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
+ _(2036, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED) \
+ _(2037, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV) \
+ _(2043, ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED) \
+ _(2044, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
+ _(2045, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
+ _(2047, ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED) \
+ _(2048, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST) \
+ _(2049, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
+ _(2050, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
+ _(2052, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV) \
+ _(2053, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \
+ _(2054, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2055, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2057, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \
_(2058, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \
_(2059, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
_(2060, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
_(2062, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \
- _(2063, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \
- _(2064, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2065, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2067, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \
- _(2073, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST) \
- _(2074, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
- _(2075, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
- _(2077, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV) \
- _(2078, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
- _(2079, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
- _(2084, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED) \
- _(2085, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK) \
- _(2088, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
- _(2089, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
- _(2094, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED) \
- _(2095, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK) \
- _(2138, ZEND_SEND_VAR_SPEC_VAR_CONST) \
- _(2141, ZEND_SEND_VAR_SPEC_VAR_UNUSED) \
- _(2148, ZEND_SEND_VAR_SPEC_CV_CONST) \
- _(2151, ZEND_SEND_VAR_SPEC_CV_UNUSED) \
- _(2153, ZEND_INIT_USER_CALL_SPEC_CONST_CONST) \
- _(2154, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
- _(2155, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
- _(2157, ZEND_INIT_USER_CALL_SPEC_CONST_CV) \
- _(2158, ZEND_SEND_ARRAY_SPEC) \
- _(2159, ZEND_SEND_USER_SPEC_CONST) \
- _(2160, ZEND_SEND_USER_SPEC_TMP) \
- _(2161, ZEND_SEND_USER_SPEC_VAR) \
- _(2163, ZEND_SEND_USER_SPEC_CV) \
- _(2164, ZEND_STRLEN_SPEC_CONST) \
- _(2165, ZEND_STRLEN_SPEC_TMPVAR) \
- _(2166, ZEND_STRLEN_SPEC_TMPVAR) \
- _(2168, ZEND_STRLEN_SPEC_CV) \
- _(2169, ZEND_DEFINED_SPEC_CONST) \
- _(2170, ZEND_TYPE_CHECK_SPEC_CONST) \
- _(2171, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
- _(2172, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
- _(2174, ZEND_TYPE_CHECK_SPEC_CV) \
- _(2175, ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED) \
- _(2176, ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED) \
- _(2177, ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED) \
- _(2178, ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED) \
- _(2179, ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED) \
- _(2180, ZEND_FE_RESET_RW_SPEC_CONST) \
- _(2181, ZEND_FE_RESET_RW_SPEC_TMP) \
- _(2182, ZEND_FE_RESET_RW_SPEC_VAR) \
- _(2184, ZEND_FE_RESET_RW_SPEC_CV) \
- _(2185, ZEND_FE_FETCH_RW_SPEC_VAR) \
- _(2186, ZEND_FE_FREE_SPEC_TMPVAR) \
- _(2187, ZEND_INIT_DYNAMIC_CALL_SPEC_CONST) \
- _(2188, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
- _(2189, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
- _(2191, ZEND_INIT_DYNAMIC_CALL_SPEC_CV) \
- _(2192, ZEND_DO_ICALL_SPEC_RETVAL_UNUSED) \
- _(2193, ZEND_DO_ICALL_SPEC_RETVAL_USED) \
- _(2194, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED) \
- _(2195, ZEND_DO_UCALL_SPEC_RETVAL_USED) \
- _(2196, ZEND_DO_UCALL_SPEC_OBSERVER) \
- _(2197, ZEND_DO_UCALL_SPEC_OBSERVER) \
- _(2198, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \
- _(2199, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \
- _(2200, ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER) \
- _(2201, ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER) \
- _(2212, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \
- _(2213, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
- _(2214, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
- _(2216, ZEND_PRE_INC_OBJ_SPEC_VAR_CV) \
- _(2217, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \
- _(2218, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2219, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2221, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV) \
- _(2222, ZEND_PRE_INC_OBJ_SPEC_CV_CONST) \
- _(2223, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
- _(2224, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
- _(2226, ZEND_PRE_INC_OBJ_SPEC_CV_CV) \
- _(2237, ZEND_POST_INC_OBJ_SPEC_VAR_CONST) \
- _(2238, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
- _(2239, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
- _(2241, ZEND_POST_INC_OBJ_SPEC_VAR_CV) \
- _(2242, ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST) \
- _(2243, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2244, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2246, ZEND_POST_INC_OBJ_SPEC_UNUSED_CV) \
- _(2247, ZEND_POST_INC_OBJ_SPEC_CV_CONST) \
- _(2248, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
- _(2249, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
- _(2251, ZEND_POST_INC_OBJ_SPEC_CV_CV) \
- _(2252, ZEND_ECHO_SPEC_CONST) \
- _(2253, ZEND_ECHO_SPEC_TMPVAR) \
- _(2254, ZEND_ECHO_SPEC_TMPVAR) \
- _(2256, ZEND_ECHO_SPEC_CV) \
- _(2263, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
- _(2265, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
- _(2266, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
- _(2268, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
- _(2270, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
- _(2271, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
- _(2278, ZEND_INSTANCEOF_SPEC_CV_CONST) \
- _(2280, ZEND_INSTANCEOF_SPEC_CV_VAR) \
- _(2281, ZEND_INSTANCEOF_SPEC_CV_UNUSED) \
- _(2283, ZEND_GENERATOR_CREATE_SPEC) \
- _(2286, ZEND_MAKE_REF_SPEC_VAR_UNUSED) \
- _(2288, ZEND_MAKE_REF_SPEC_CV_UNUSED) \
- _(2289, ZEND_DECLARE_FUNCTION_SPEC) \
- _(2290, ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST) \
- _(2291, ZEND_DECLARE_CONST_SPEC_CONST_CONST) \
- _(2292, ZEND_DECLARE_CLASS_SPEC_CONST) \
- _(2293, ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST) \
- _(2294, ZEND_DECLARE_ANON_CLASS_SPEC) \
- _(2295, ZEND_ADD_ARRAY_UNPACK_SPEC) \
- _(2296, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST) \
- _(2297, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
- _(2298, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
- _(2300, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV) \
- _(2301, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
- _(2302, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2303, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2305, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
- _(2306, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
- _(2307, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2308, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2310, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
- _(2311, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST) \
- _(2312, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2313, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2315, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV) \
- _(2316, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST) \
- _(2317, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
- _(2318, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
- _(2320, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV) \
- _(2321, ZEND_HANDLE_EXCEPTION_SPEC) \
- _(2322, ZEND_USER_OPCODE_SPEC) \
- _(2323, ZEND_ASSERT_CHECK_SPEC) \
- _(2324, ZEND_JMP_SET_SPEC_CONST) \
- _(2325, ZEND_JMP_SET_SPEC_TMP) \
- _(2326, ZEND_JMP_SET_SPEC_VAR) \
- _(2328, ZEND_JMP_SET_SPEC_CV) \
- _(2329, ZEND_UNSET_CV_SPEC_CV_UNUSED) \
- _(2330, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET) \
- _(2331, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY) \
- _(2332, ZEND_FETCH_LIST_W_SPEC_VAR_CONST) \
- _(2333, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
- _(2334, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
- _(2336, ZEND_FETCH_LIST_W_SPEC_VAR_CV) \
- _(2337, ZEND_SEPARATE_SPEC_VAR_UNUSED) \
- _(2339, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
- _(2340, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
- _(2341, ZEND_FETCH_CLASS_NAME_SPEC_UNUSED) \
- _(2342, ZEND_FETCH_CLASS_NAME_SPEC_CV) \
- _(2343, ZEND_CALL_TRAMPOLINE_SPEC) \
- _(2344, ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER) \
- _(2345, ZEND_DISCARD_EXCEPTION_SPEC) \
- _(2346, ZEND_YIELD_SPEC_CONST_CONST) \
- _(2347, ZEND_YIELD_SPEC_CONST_TMPVAR) \
- _(2348, ZEND_YIELD_SPEC_CONST_TMPVAR) \
- _(2349, ZEND_YIELD_SPEC_CONST_UNUSED) \
- _(2350, ZEND_YIELD_SPEC_CONST_CV) \
- _(2351, ZEND_YIELD_SPEC_TMP_CONST) \
- _(2352, ZEND_YIELD_SPEC_TMP_TMPVAR) \
- _(2353, ZEND_YIELD_SPEC_TMP_TMPVAR) \
- _(2354, ZEND_YIELD_SPEC_TMP_UNUSED) \
- _(2355, ZEND_YIELD_SPEC_TMP_CV) \
- _(2356, ZEND_YIELD_SPEC_VAR_CONST) \
- _(2357, ZEND_YIELD_SPEC_VAR_TMPVAR) \
- _(2358, ZEND_YIELD_SPEC_VAR_TMPVAR) \
- _(2359, ZEND_YIELD_SPEC_VAR_UNUSED) \
- _(2360, ZEND_YIELD_SPEC_VAR_CV) \
- _(2361, ZEND_YIELD_SPEC_UNUSED_CONST) \
- _(2362, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
- _(2363, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
- _(2364, ZEND_YIELD_SPEC_UNUSED_UNUSED) \
- _(2365, ZEND_YIELD_SPEC_UNUSED_CV) \
- _(2366, ZEND_YIELD_SPEC_CV_CONST) \
- _(2367, ZEND_YIELD_SPEC_CV_TMPVAR) \
- _(2368, ZEND_YIELD_SPEC_CV_TMPVAR) \
- _(2369, ZEND_YIELD_SPEC_CV_UNUSED) \
- _(2370, ZEND_YIELD_SPEC_CV_CV) \
- _(2371, ZEND_GENERATOR_RETURN_SPEC_CONST) \
- _(2372, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
- _(2373, ZEND_GENERATOR_RETURN_SPEC_TMP) \
- _(2374, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
- _(2375, ZEND_GENERATOR_RETURN_SPEC_VAR) \
- _(2376, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
- _(2379, ZEND_GENERATOR_RETURN_SPEC_CV) \
- _(2380, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
- _(2381, ZEND_FAST_CALL_SPEC) \
- _(2382, ZEND_FAST_RET_SPEC) \
- _(2383, ZEND_RECV_VARIADIC_SPEC_UNUSED) \
- _(2384, ZEND_SEND_UNPACK_SPEC) \
- _(2385, ZEND_YIELD_FROM_SPEC_CONST) \
- _(2386, ZEND_YIELD_FROM_SPEC_TMPVAR) \
- _(2387, ZEND_YIELD_FROM_SPEC_TMPVAR) \
- _(2389, ZEND_YIELD_FROM_SPEC_CV) \
- _(2390, ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED) \
- _(2391, ZEND_BIND_GLOBAL_SPEC_CV_CONST) \
- _(2392, ZEND_COALESCE_SPEC_CONST) \
- _(2393, ZEND_COALESCE_SPEC_TMP) \
- _(2394, ZEND_COALESCE_SPEC_VAR) \
- _(2396, ZEND_COALESCE_SPEC_CV) \
- _(2397, ZEND_SPACESHIP_SPEC_CONST_CONST) \
- _(2398, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
- _(2399, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
- _(2401, ZEND_SPACESHIP_SPEC_CONST_CV) \
- _(2402, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
- _(2403, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
- _(2404, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
- _(2406, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
- _(2407, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
- _(2408, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
- _(2409, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
- _(2411, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
- _(2417, ZEND_SPACESHIP_SPEC_CV_CONST) \
- _(2418, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
- _(2419, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
- _(2421, ZEND_SPACESHIP_SPEC_CV_CV) \
- _(2422, ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED) \
- _(2423, ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED) \
- _(2426, ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED) \
- _(2428, ZEND_FETCH_STATIC_PROP_R_SPEC) \
- _(2429, ZEND_FETCH_STATIC_PROP_W_SPEC) \
- _(2430, ZEND_FETCH_STATIC_PROP_RW_SPEC) \
- _(2431, ZEND_FETCH_STATIC_PROP_IS_SPEC) \
- _(2432, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC) \
- _(2433, ZEND_FETCH_STATIC_PROP_UNSET_SPEC) \
- _(2434, ZEND_UNSET_STATIC_PROP_SPEC) \
- _(2435, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC) \
- _(2436, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST) \
- _(2438, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST) \
- _(2439, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST) \
- _(2441, ZEND_BIND_LEXICAL_SPEC_TMP_CV) \
- _(2442, ZEND_BIND_STATIC_SPEC_CV_UNUSED) \
- _(2443, ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED) \
- _(2444, ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST) \
- _(2447, ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED) \
- _(2449, ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED) \
- _(2450, ZEND_SWITCH_LONG_SPEC_CONST_CONST) \
+ _(2068, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST) \
+ _(2069, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
+ _(2070, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
+ _(2072, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV) \
+ _(2073, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
+ _(2074, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
+ _(2079, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED) \
+ _(2080, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK) \
+ _(2083, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
+ _(2084, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
+ _(2089, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED) \
+ _(2090, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK) \
+ _(2133, ZEND_SEND_VAR_SPEC_VAR_CONST) \
+ _(2136, ZEND_SEND_VAR_SPEC_VAR_UNUSED) \
+ _(2143, ZEND_SEND_VAR_SPEC_CV_CONST) \
+ _(2146, ZEND_SEND_VAR_SPEC_CV_UNUSED) \
+ _(2148, ZEND_INIT_USER_CALL_SPEC_CONST_CONST) \
+ _(2149, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
+ _(2150, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
+ _(2152, ZEND_INIT_USER_CALL_SPEC_CONST_CV) \
+ _(2153, ZEND_SEND_ARRAY_SPEC) \
+ _(2154, ZEND_SEND_USER_SPEC_CONST) \
+ _(2155, ZEND_SEND_USER_SPEC_TMP) \
+ _(2156, ZEND_SEND_USER_SPEC_VAR) \
+ _(2158, ZEND_SEND_USER_SPEC_CV) \
+ _(2159, ZEND_STRLEN_SPEC_CONST) \
+ _(2160, ZEND_STRLEN_SPEC_TMPVAR) \
+ _(2161, ZEND_STRLEN_SPEC_TMPVAR) \
+ _(2163, ZEND_STRLEN_SPEC_CV) \
+ _(2164, ZEND_DEFINED_SPEC_CONST) \
+ _(2165, ZEND_TYPE_CHECK_SPEC_CONST) \
+ _(2166, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
+ _(2167, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
+ _(2169, ZEND_TYPE_CHECK_SPEC_CV) \
+ _(2170, ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED) \
+ _(2171, ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED) \
+ _(2172, ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED) \
+ _(2173, ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED) \
+ _(2174, ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED) \
+ _(2175, ZEND_FE_RESET_RW_SPEC_CONST) \
+ _(2176, ZEND_FE_RESET_RW_SPEC_TMP) \
+ _(2177, ZEND_FE_RESET_RW_SPEC_VAR) \
+ _(2179, ZEND_FE_RESET_RW_SPEC_CV) \
+ _(2180, ZEND_FE_FETCH_RW_SPEC_VAR) \
+ _(2181, ZEND_FE_FREE_SPEC_TMPVAR) \
+ _(2182, ZEND_INIT_DYNAMIC_CALL_SPEC_CONST) \
+ _(2183, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
+ _(2184, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
+ _(2186, ZEND_INIT_DYNAMIC_CALL_SPEC_CV) \
+ _(2187, ZEND_DO_ICALL_SPEC_RETVAL_UNUSED) \
+ _(2188, ZEND_DO_ICALL_SPEC_RETVAL_USED) \
+ _(2189, ZEND_DO_ICALL_SPEC_OBSERVER) \
+ _(2190, ZEND_DO_ICALL_SPEC_OBSERVER) \
+ _(2191, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED) \
+ _(2192, ZEND_DO_UCALL_SPEC_RETVAL_USED) \
+ _(2193, ZEND_DO_UCALL_SPEC_OBSERVER) \
+ _(2194, ZEND_DO_UCALL_SPEC_OBSERVER) \
+ _(2195, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \
+ _(2196, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \
+ _(2197, ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER) \
+ _(2198, ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER) \
+ _(2209, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \
+ _(2210, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2211, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2213, ZEND_PRE_INC_OBJ_SPEC_VAR_CV) \
+ _(2214, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \
+ _(2215, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2216, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2218, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV) \
+ _(2219, ZEND_PRE_INC_OBJ_SPEC_CV_CONST) \
+ _(2220, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
+ _(2221, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
+ _(2223, ZEND_PRE_INC_OBJ_SPEC_CV_CV) \
+ _(2234, ZEND_POST_INC_OBJ_SPEC_VAR_CONST) \
+ _(2235, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2236, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2238, ZEND_POST_INC_OBJ_SPEC_VAR_CV) \
+ _(2239, ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST) \
+ _(2240, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2241, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2243, ZEND_POST_INC_OBJ_SPEC_UNUSED_CV) \
+ _(2244, ZEND_POST_INC_OBJ_SPEC_CV_CONST) \
+ _(2245, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
+ _(2246, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
+ _(2248, ZEND_POST_INC_OBJ_SPEC_CV_CV) \
+ _(2249, ZEND_ECHO_SPEC_CONST) \
+ _(2250, ZEND_ECHO_SPEC_TMPVAR) \
+ _(2251, ZEND_ECHO_SPEC_TMPVAR) \
+ _(2253, ZEND_ECHO_SPEC_CV) \
+ _(2260, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
+ _(2262, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
+ _(2263, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
+ _(2265, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
+ _(2267, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
+ _(2268, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
+ _(2275, ZEND_INSTANCEOF_SPEC_CV_CONST) \
+ _(2277, ZEND_INSTANCEOF_SPEC_CV_VAR) \
+ _(2278, ZEND_INSTANCEOF_SPEC_CV_UNUSED) \
+ _(2280, ZEND_GENERATOR_CREATE_SPEC) \
+ _(2283, ZEND_MAKE_REF_SPEC_VAR_UNUSED) \
+ _(2285, ZEND_MAKE_REF_SPEC_CV_UNUSED) \
+ _(2286, ZEND_DECLARE_FUNCTION_SPEC) \
+ _(2287, ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST) \
+ _(2288, ZEND_DECLARE_CONST_SPEC_CONST_CONST) \
+ _(2289, ZEND_DECLARE_CLASS_SPEC_CONST) \
+ _(2290, ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST) \
+ _(2291, ZEND_DECLARE_ANON_CLASS_SPEC) \
+ _(2292, ZEND_ADD_ARRAY_UNPACK_SPEC) \
+ _(2293, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST) \
+ _(2294, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
+ _(2295, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
+ _(2297, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV) \
+ _(2298, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
+ _(2299, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2300, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2302, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
+ _(2303, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
+ _(2304, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2305, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2307, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
+ _(2308, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST) \
+ _(2309, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2310, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2312, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV) \
+ _(2313, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST) \
+ _(2314, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
+ _(2315, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
+ _(2317, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV) \
+ _(2318, ZEND_HANDLE_EXCEPTION_SPEC) \
+ _(2319, ZEND_USER_OPCODE_SPEC) \
+ _(2320, ZEND_ASSERT_CHECK_SPEC) \
+ _(2321, ZEND_JMP_SET_SPEC_CONST) \
+ _(2322, ZEND_JMP_SET_SPEC_TMP) \
+ _(2323, ZEND_JMP_SET_SPEC_VAR) \
+ _(2325, ZEND_JMP_SET_SPEC_CV) \
+ _(2326, ZEND_UNSET_CV_SPEC_CV_UNUSED) \
+ _(2327, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET) \
+ _(2328, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY) \
+ _(2329, ZEND_FETCH_LIST_W_SPEC_VAR_CONST) \
+ _(2330, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
+ _(2331, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
+ _(2333, ZEND_FETCH_LIST_W_SPEC_VAR_CV) \
+ _(2334, ZEND_SEPARATE_SPEC_VAR_UNUSED) \
+ _(2336, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
+ _(2337, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
+ _(2338, ZEND_FETCH_CLASS_NAME_SPEC_UNUSED) \
+ _(2339, ZEND_FETCH_CLASS_NAME_SPEC_CV) \
+ _(2340, ZEND_CALL_TRAMPOLINE_SPEC) \
+ _(2341, ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER) \
+ _(2342, ZEND_DISCARD_EXCEPTION_SPEC) \
+ _(2343, ZEND_YIELD_SPEC_CONST_CONST) \
+ _(2344, ZEND_YIELD_SPEC_CONST_TMPVAR) \
+ _(2345, ZEND_YIELD_SPEC_CONST_TMPVAR) \
+ _(2346, ZEND_YIELD_SPEC_CONST_UNUSED) \
+ _(2347, ZEND_YIELD_SPEC_CONST_CV) \
+ _(2348, ZEND_YIELD_SPEC_TMP_CONST) \
+ _(2349, ZEND_YIELD_SPEC_TMP_TMPVAR) \
+ _(2350, ZEND_YIELD_SPEC_TMP_TMPVAR) \
+ _(2351, ZEND_YIELD_SPEC_TMP_UNUSED) \
+ _(2352, ZEND_YIELD_SPEC_TMP_CV) \
+ _(2353, ZEND_YIELD_SPEC_VAR_CONST) \
+ _(2354, ZEND_YIELD_SPEC_VAR_TMPVAR) \
+ _(2355, ZEND_YIELD_SPEC_VAR_TMPVAR) \
+ _(2356, ZEND_YIELD_SPEC_VAR_UNUSED) \
+ _(2357, ZEND_YIELD_SPEC_VAR_CV) \
+ _(2358, ZEND_YIELD_SPEC_UNUSED_CONST) \
+ _(2359, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
+ _(2360, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
+ _(2361, ZEND_YIELD_SPEC_UNUSED_UNUSED) \
+ _(2362, ZEND_YIELD_SPEC_UNUSED_CV) \
+ _(2363, ZEND_YIELD_SPEC_CV_CONST) \
+ _(2364, ZEND_YIELD_SPEC_CV_TMPVAR) \
+ _(2365, ZEND_YIELD_SPEC_CV_TMPVAR) \
+ _(2366, ZEND_YIELD_SPEC_CV_UNUSED) \
+ _(2367, ZEND_YIELD_SPEC_CV_CV) \
+ _(2368, ZEND_GENERATOR_RETURN_SPEC_CONST) \
+ _(2369, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
+ _(2370, ZEND_GENERATOR_RETURN_SPEC_TMP) \
+ _(2371, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
+ _(2372, ZEND_GENERATOR_RETURN_SPEC_VAR) \
+ _(2373, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
+ _(2376, ZEND_GENERATOR_RETURN_SPEC_CV) \
+ _(2377, ZEND_GENERATOR_RETURN_SPEC_OBSERVER) \
+ _(2378, ZEND_FAST_CALL_SPEC) \
+ _(2379, ZEND_FAST_RET_SPEC) \
+ _(2380, ZEND_RECV_VARIADIC_SPEC_UNUSED) \
+ _(2381, ZEND_SEND_UNPACK_SPEC) \
+ _(2382, ZEND_YIELD_FROM_SPEC_CONST) \
+ _(2383, ZEND_YIELD_FROM_SPEC_TMPVAR) \
+ _(2384, ZEND_YIELD_FROM_SPEC_TMPVAR) \
+ _(2386, ZEND_YIELD_FROM_SPEC_CV) \
+ _(2387, ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED) \
+ _(2388, ZEND_BIND_GLOBAL_SPEC_CV_CONST) \
+ _(2389, ZEND_COALESCE_SPEC_CONST) \
+ _(2390, ZEND_COALESCE_SPEC_TMP) \
+ _(2391, ZEND_COALESCE_SPEC_VAR) \
+ _(2393, ZEND_COALESCE_SPEC_CV) \
+ _(2394, ZEND_SPACESHIP_SPEC_CONST_CONST) \
+ _(2395, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
+ _(2396, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
+ _(2398, ZEND_SPACESHIP_SPEC_CONST_CV) \
+ _(2399, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
+ _(2400, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
+ _(2401, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
+ _(2403, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
+ _(2404, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
+ _(2405, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
+ _(2406, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
+ _(2408, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
+ _(2414, ZEND_SPACESHIP_SPEC_CV_CONST) \
+ _(2415, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
+ _(2416, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
+ _(2418, ZEND_SPACESHIP_SPEC_CV_CV) \
+ _(2419, ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED) \
+ _(2420, ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED) \
+ _(2423, ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED) \
+ _(2425, ZEND_FETCH_STATIC_PROP_R_SPEC) \
+ _(2426, ZEND_FETCH_STATIC_PROP_W_SPEC) \
+ _(2427, ZEND_FETCH_STATIC_PROP_RW_SPEC) \
+ _(2428, ZEND_FETCH_STATIC_PROP_IS_SPEC) \
+ _(2429, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC) \
+ _(2430, ZEND_FETCH_STATIC_PROP_UNSET_SPEC) \
+ _(2431, ZEND_UNSET_STATIC_PROP_SPEC) \
+ _(2432, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC) \
+ _(2433, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST) \
+ _(2435, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST) \
+ _(2436, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST) \
+ _(2438, ZEND_BIND_LEXICAL_SPEC_TMP_CV) \
+ _(2439, ZEND_BIND_STATIC_SPEC_CV_UNUSED) \
+ _(2440, ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED) \
+ _(2441, ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST) \
+ _(2444, ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED) \
+ _(2446, ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED) \
+ _(2447, ZEND_SWITCH_LONG_SPEC_CONST_CONST) \
+ _(2448, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
+ _(2449, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
_(2451, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
- _(2452, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
- _(2454, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
- _(2455, ZEND_SWITCH_STRING_SPEC_CONST_CONST) \
+ _(2452, ZEND_SWITCH_STRING_SPEC_CONST_CONST) \
+ _(2453, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
+ _(2454, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
_(2456, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
- _(2457, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
- _(2459, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
- _(2460, ZEND_IN_ARRAY_SPEC_CONST_CONST) \
- _(2461, ZEND_IN_ARRAY_SPEC_TMP_CONST) \
- _(2462, ZEND_IN_ARRAY_SPEC_VAR_CONST) \
- _(2464, ZEND_IN_ARRAY_SPEC_CV_CONST) \
- _(2465, ZEND_COUNT_SPEC_CONST_UNUSED) \
- _(2466, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
- _(2467, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
- _(2469, ZEND_COUNT_SPEC_CV_UNUSED) \
- _(2470, ZEND_GET_CLASS_SPEC_CONST_UNUSED) \
- _(2471, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
- _(2472, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
- _(2473, ZEND_GET_CLASS_SPEC_UNUSED_UNUSED) \
- _(2474, ZEND_GET_CLASS_SPEC_CV_UNUSED) \
- _(2475, ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED) \
- _(2476, ZEND_GET_TYPE_SPEC_CONST_UNUSED) \
- _(2477, ZEND_GET_TYPE_SPEC_TMP_UNUSED) \
- _(2478, ZEND_GET_TYPE_SPEC_VAR_UNUSED) \
- _(2480, ZEND_GET_TYPE_SPEC_CV_UNUSED) \
- _(2481, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST) \
- _(2482, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
- _(2483, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
- _(2485, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV) \
- _(2486, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
- _(2487, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
- _(2488, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
- _(2490, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
- _(2491, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
- _(2492, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
- _(2493, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
- _(2495, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
- _(2501, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST) \
- _(2502, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
- _(2503, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
- _(2505, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV) \
- _(2506, ZEND_MATCH_SPEC_CONST_CONST) \
+ _(2457, ZEND_IN_ARRAY_SPEC_CONST_CONST) \
+ _(2458, ZEND_IN_ARRAY_SPEC_TMP_CONST) \
+ _(2459, ZEND_IN_ARRAY_SPEC_VAR_CONST) \
+ _(2461, ZEND_IN_ARRAY_SPEC_CV_CONST) \
+ _(2462, ZEND_COUNT_SPEC_CONST_UNUSED) \
+ _(2463, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
+ _(2464, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
+ _(2466, ZEND_COUNT_SPEC_CV_UNUSED) \
+ _(2467, ZEND_GET_CLASS_SPEC_CONST_UNUSED) \
+ _(2468, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
+ _(2469, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
+ _(2470, ZEND_GET_CLASS_SPEC_UNUSED_UNUSED) \
+ _(2471, ZEND_GET_CLASS_SPEC_CV_UNUSED) \
+ _(2472, ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED) \
+ _(2473, ZEND_GET_TYPE_SPEC_CONST_UNUSED) \
+ _(2474, ZEND_GET_TYPE_SPEC_TMP_UNUSED) \
+ _(2475, ZEND_GET_TYPE_SPEC_VAR_UNUSED) \
+ _(2477, ZEND_GET_TYPE_SPEC_CV_UNUSED) \
+ _(2478, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST) \
+ _(2479, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
+ _(2480, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
+ _(2482, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV) \
+ _(2483, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
+ _(2484, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
+ _(2485, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
+ _(2487, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
+ _(2488, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
+ _(2489, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
+ _(2490, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
+ _(2492, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
+ _(2498, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST) \
+ _(2499, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
+ _(2500, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
+ _(2502, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV) \
+ _(2503, ZEND_MATCH_SPEC_CONST_CONST) \
+ _(2504, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
+ _(2505, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
_(2507, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
- _(2508, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
- _(2510, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
- _(2516, ZEND_CASE_STRICT_SPEC_TMP_CONST) \
- _(2517, ZEND_CASE_STRICT_SPEC_TMP_TMP) \
- _(2518, ZEND_CASE_STRICT_SPEC_TMP_VAR) \
- _(2520, ZEND_CASE_STRICT_SPEC_TMP_CV) \
- _(2521, ZEND_CASE_STRICT_SPEC_VAR_CONST) \
- _(2522, ZEND_CASE_STRICT_SPEC_VAR_TMP) \
- _(2523, ZEND_CASE_STRICT_SPEC_VAR_VAR) \
- _(2525, ZEND_CASE_STRICT_SPEC_VAR_CV) \
- _(2536, ZEND_MATCH_ERROR_SPEC_CONST_UNUSED) \
+ _(2513, ZEND_CASE_STRICT_SPEC_TMP_CONST) \
+ _(2514, ZEND_CASE_STRICT_SPEC_TMP_TMP) \
+ _(2515, ZEND_CASE_STRICT_SPEC_TMP_VAR) \
+ _(2517, ZEND_CASE_STRICT_SPEC_TMP_CV) \
+ _(2518, ZEND_CASE_STRICT_SPEC_VAR_CONST) \
+ _(2519, ZEND_CASE_STRICT_SPEC_VAR_TMP) \
+ _(2520, ZEND_CASE_STRICT_SPEC_VAR_VAR) \
+ _(2522, ZEND_CASE_STRICT_SPEC_VAR_CV) \
+ _(2533, ZEND_MATCH_ERROR_SPEC_CONST_UNUSED) \
+ _(2534, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
+ _(2535, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
_(2537, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
- _(2538, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
- _(2540, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
- _(2541, ZEND_JMP_NULL_SPEC_CONST) \
- _(2542, ZEND_JMP_NULL_SPEC_TMP) \
- _(2543, ZEND_JMP_NULL_SPEC_VAR) \
- _(2545, ZEND_JMP_NULL_SPEC_CV) \
- _(2546, ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED) \
- _(2547, ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED) \
- _(2548, ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED) \
- _(2549, ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED) \
- _(2550, ZEND_RECV_NOTYPE_SPEC) \
- _(2551, ZEND_JMP_FORWARD_SPEC) \
- _(2557, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2538, ZEND_JMP_NULL_SPEC_CONST) \
+ _(2539, ZEND_JMP_NULL_SPEC_TMP) \
+ _(2540, ZEND_JMP_NULL_SPEC_VAR) \
+ _(2542, ZEND_JMP_NULL_SPEC_CV) \
+ _(2543, ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED) \
+ _(2544, ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED) \
+ _(2545, ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED) \
+ _(2546, ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED) \
+ _(2547, ZEND_RECV_NOTYPE_SPEC) \
+ _(2548, ZEND_JMP_FORWARD_SPEC) \
+ _(2554, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2555, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2556, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
_(2558, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2559, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2559, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2560, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
_(2561, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2562, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
_(2563, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2564, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2566, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2572, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2569, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2570, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2571, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
_(2573, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2574, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2576, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2582, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
+ _(2579, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
+ _(2580, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2581, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2583, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2584, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2584, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
+ _(2585, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2586, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2587, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
_(2588, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2589, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2591, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2597, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
+ _(2594, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
+ _(2595, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2596, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2598, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2599, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2601, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2607, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2604, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2605, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2606, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2608, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2609, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2609, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2610, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2611, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2612, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
_(2613, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2614, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2616, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2622, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2619, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2620, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2621, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2623, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2624, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2626, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2625, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
+ _(2626, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
_(2628, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
- _(2629, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
- _(2631, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
- _(2632, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2629, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2630, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2631, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
_(2633, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2634, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2634, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2635, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
_(2636, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2637, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
_(2638, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2639, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2641, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2647, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2644, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2645, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2646, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
_(2648, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2649, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2651, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2650, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
+ _(2651, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
_(2653, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
- _(2654, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
- _(2656, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
- _(2657, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
+ _(2654, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
+ _(2655, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2656, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2658, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2659, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2659, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
+ _(2660, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2661, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2662, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
_(2663, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2664, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2666, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2672, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
+ _(2669, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
+ _(2670, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2671, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2673, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2674, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2676, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2675, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(2676, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
_(2678, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(2679, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(2681, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(2682, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2679, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2680, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2681, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2683, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2684, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2684, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2685, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2686, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2687, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
_(2688, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2689, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2691, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2697, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2694, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2695, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2696, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2698, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2699, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2701, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2707, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2704, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2705, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2706, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
_(2708, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2709, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2709, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2710, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
_(2711, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2712, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
_(2713, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2714, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2716, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2722, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2719, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2720, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2721, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
_(2723, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2724, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2726, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2732, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2729, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2730, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2731, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2733, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2734, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2734, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2735, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2736, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2737, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
_(2738, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2739, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2741, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2747, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2744, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2745, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2746, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2748, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2749, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2751, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2757, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2754, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2755, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2756, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2758, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2759, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2759, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2760, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2761, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2762, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
_(2763, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2764, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2766, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2772, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2769, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2770, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2771, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2773, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2774, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2776, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2792, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2793, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2794, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2789, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2790, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2791, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2792, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2793, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2794, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(2795, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2796, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(2797, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2798, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2799, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2800, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2804, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2805, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2806, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2807, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2808, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2809, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2801, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2802, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2803, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2804, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2805, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2806, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2807, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2808, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2809, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(2810, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2811, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(2812, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2813, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2814, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2815, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2819, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2820, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2821, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2837, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2838, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2839, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2816, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2817, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2818, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2834, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2835, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2836, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2837, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2838, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2839, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(2840, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2841, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(2842, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2843, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2844, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2845, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2849, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2850, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2851, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2867, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2868, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2869, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2846, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2847, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2848, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2864, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2865, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2866, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2867, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2868, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2869, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(2870, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2871, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(2872, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2873, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2874, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2875, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2879, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2880, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2881, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2882, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2883, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2884, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2876, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2877, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2878, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2879, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2880, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2881, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2882, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2883, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2884, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(2885, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2886, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(2887, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2888, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2889, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2890, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2894, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2895, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2896, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2912, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2913, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2914, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2891, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2892, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2893, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2909, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2910, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2911, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2912, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2913, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2914, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(2915, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(2916, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(2917, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2918, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2919, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2920, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2924, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2925, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2926, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2942, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2943, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2944, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2921, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2922, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2923, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2939, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2940, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2941, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2942, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2943, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2944, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(2945, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2946, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(2947, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2948, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2949, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2950, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2954, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2955, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2956, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2957, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2958, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2959, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2951, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2952, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2953, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2954, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2955, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2956, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2957, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2958, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2959, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(2960, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2961, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(2962, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2963, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2964, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2965, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2969, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2970, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2971, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2987, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2988, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2989, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2966, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2967, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2968, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2984, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2985, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2986, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2987, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2988, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2989, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(2990, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(2991, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(2992, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2993, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2994, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2995, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2999, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3000, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3001, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3017, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3018, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3019, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2996, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2997, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2998, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3014, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3015, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3016, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3017, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3018, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3019, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3020, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(3021, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3022, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3023, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3024, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3025, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3029, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3030, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3031, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3032, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3033, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3034, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3026, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3027, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3028, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3029, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3030, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3031, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3032, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3033, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3034, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3035, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(3036, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3037, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3038, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3039, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3040, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3044, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3045, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3046, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3062, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3063, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3064, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3041, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3042, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3043, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3059, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3060, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3061, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3062, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3063, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3064, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3065, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(3066, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3067, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3068, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3069, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3070, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3074, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3075, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3076, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3077, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
- _(3081, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV) \
- _(3082, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
- _(3086, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV) \
+ _(3071, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3072, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3073, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3074, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
+ _(3078, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV) \
+ _(3079, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
+ _(3083, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV) \
+ _(3087, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
+ _(3088, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3089, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
_(3090, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
_(3091, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
_(3092, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3093, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
- _(3094, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3095, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3099, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
- _(3100, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3101, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3102, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
- _(3103, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3104, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3096, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
+ _(3097, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3098, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3099, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
+ _(3100, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3101, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3102, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3103, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3104, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3105, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(3106, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3107, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3108, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3109, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3110, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3114, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3115, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3116, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3117, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
- _(3118, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3119, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3111, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3112, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3113, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3114, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
+ _(3115, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3116, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3117, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3118, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3119, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3120, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(3121, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3122, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3123, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3124, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3125, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3129, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3130, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3131, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3147, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
- _(3148, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3149, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3126, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3127, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3128, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3144, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
+ _(3145, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3146, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3147, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3148, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3149, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3150, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(3151, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3152, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3153, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3154, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3155, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3159, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3160, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3161, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3156, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3157, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3158, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3162, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3163, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3164, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
_(3165, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
_(3166, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
_(3167, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3168, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3169, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3170, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3174, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3175, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3176, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3177, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3178, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3179, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3171, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3172, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3173, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3174, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3175, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3176, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3177, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3178, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3179, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3180, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(3181, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3182, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3183, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3184, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3185, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3189, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3190, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3191, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3192, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3193, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3194, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3186, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3187, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3188, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3189, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3190, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3191, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3192, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3193, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3194, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3195, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(3196, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3197, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3198, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3199, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3200, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3204, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3205, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3206, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3222, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3223, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3224, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3201, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3202, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3203, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3219, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3220, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3221, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3222, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3223, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3224, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3225, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(3226, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3227, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3228, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3229, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3230, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3234, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3235, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3236, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3231, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3232, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3233, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3237, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
+ _(3238, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3239, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
_(3240, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
_(3241, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
_(3242, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3243, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
- _(3244, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3245, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3249, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
- _(3250, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3251, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3252, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(3253, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3254, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3246, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
+ _(3247, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3248, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3249, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(3250, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3251, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3252, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3253, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3254, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3255, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(3256, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3257, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3258, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3259, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3260, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3264, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3265, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3266, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3267, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(3268, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3269, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3261, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3262, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3263, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3264, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(3265, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3266, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3267, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3268, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3269, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3270, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(3271, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3272, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3273, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3274, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3275, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3279, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3280, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3281, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3297, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(3298, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3299, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3276, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3277, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3278, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3294, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(3295, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3296, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3297, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3298, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3299, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3300, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
_(3301, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3302, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3303, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3304, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3305, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3309, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3310, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3311, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3306, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3307, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3308, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3312, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3313, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3314, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
_(3315, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
_(3316, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
_(3317, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3318, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3319, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3320, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3324, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3325, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3326, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3327, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3328, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3329, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3321, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3322, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3323, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3324, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3325, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3326, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3327, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3328, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3329, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3330, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(3331, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3332, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3333, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3334, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3335, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3339, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3340, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3341, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3342, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3343, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3344, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3336, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3337, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3338, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3339, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3340, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3341, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3342, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3343, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3344, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3345, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(3346, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3347, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3348, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3349, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3350, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3354, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3355, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3356, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3372, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3373, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3374, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3351, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3352, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3353, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3369, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3370, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3371, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3372, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3373, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3374, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
_(3375, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
_(3376, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
_(3377, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3378, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3379, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3380, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3384, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3385, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3386, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3387, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
- _(3388, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
- _(3389, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED) \
- _(3390, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED) \
- _(3391, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
- _(3392, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
- _(3393, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED) \
- _(3394, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED) \
- _(3395, ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV) \
- _(3396, ZEND_POST_INC_LONG_SPEC_CV) \
- _(3397, ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV) \
- _(3398, ZEND_POST_DEC_LONG_SPEC_CV) \
- _(3399, ZEND_QM_ASSIGN_LONG_SPEC_CONST) \
+ _(3381, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3382, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3383, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3384, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
+ _(3385, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
+ _(3386, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED) \
+ _(3387, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED) \
+ _(3388, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
+ _(3389, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
+ _(3390, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED) \
+ _(3391, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED) \
+ _(3392, ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV) \
+ _(3393, ZEND_POST_INC_LONG_SPEC_CV) \
+ _(3394, ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV) \
+ _(3395, ZEND_POST_DEC_LONG_SPEC_CV) \
+ _(3396, ZEND_QM_ASSIGN_LONG_SPEC_CONST) \
+ _(3397, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
+ _(3398, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
_(3400, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
- _(3401, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
- _(3403, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
- _(3404, ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST) \
+ _(3401, ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST) \
+ _(3402, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
+ _(3403, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
_(3405, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
- _(3406, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
- _(3408, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
- _(3409, ZEND_QM_ASSIGN_NOREF_SPEC_CONST) \
+ _(3406, ZEND_QM_ASSIGN_NOREF_SPEC_CONST) \
+ _(3407, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
+ _(3408, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
_(3410, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
- _(3411, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
- _(3413, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
+ _(3412, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
+ _(3413, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
_(3415, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
- _(3416, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
- _(3418, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
- _(3419, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
+ _(3416, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
+ _(3417, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
+ _(3418, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
_(3420, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3421, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
+ _(3421, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
+ _(3422, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
_(3423, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3424, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
_(3425, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3426, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3428, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3434, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST) \
+ _(3431, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST) \
+ _(3432, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
+ _(3433, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
_(3435, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
- _(3436, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
- _(3438, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
- _(3441, ZEND_SEND_VAR_SIMPLE_SPEC_VAR) \
- _(3443, ZEND_SEND_VAR_SIMPLE_SPEC_CV) \
- _(3446, ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED) \
- _(3448, ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED) \
- _(3449, ZEND_SEND_VAL_SIMPLE_SPEC_CONST) \
- _(3450, ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST) \
- _(3451, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED) \
- _(3452, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED) \
- _(3452+1, ZEND_NULL)
+ _(3438, ZEND_SEND_VAR_SIMPLE_SPEC_VAR) \
+ _(3440, ZEND_SEND_VAR_SIMPLE_SPEC_CV) \
+ _(3443, ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED) \
+ _(3445, ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED) \
+ _(3446, ZEND_SEND_VAL_SIMPLE_SPEC_CONST) \
+ _(3447, ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST) \
+ _(3448, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED) \
+ _(3449, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED) \
+ _(3449+1, ZEND_NULL)
Modified: trunk/MgDev/Oem/php/include/Zend/zend_vm_opcodes.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_vm_opcodes.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_vm_opcodes.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -128,7 +128,6 @@
#define ZEND_JMP 42
#define ZEND_JMPZ 43
#define ZEND_JMPNZ 44
-#define ZEND_JMPZNZ 45
#define ZEND_JMPZ_EX 46
#define ZEND_JMPNZ_EX 47
#define ZEND_CASE 48
Modified: trunk/MgDev/Oem/php/include/Zend/zend_vm_trace_handlers.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_vm_trace_handlers.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_vm_trace_handlers.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -71,7 +71,7 @@
f = fopen("zend_vm_trace.log", "w+");
if (f) {
zend_hash_sort(&vm_trace_ht, (compare_func_t)zend_vm_trace_compare, 0);
- ZEND_HASH_FOREACH_STR_KEY_VAL(&vm_trace_ht, key, val) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(&vm_trace_ht, key, val) {
fprintf(f, "%s "ZEND_LONG_FMT"\n", ZSTR_VAL(key), Z_LVAL_P(val));
} ZEND_HASH_FOREACH_END();
fclose(f);
Modified: trunk/MgDev/Oem/php/include/Zend/zend_vm_trace_map.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_vm_trace_map.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_vm_trace_map.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -65,7 +65,7 @@
if (f) {
zend_hash_sort(&vm_trace_ht, (bucket_compare_func_t)zend_vm_trace_compare, 0);
prev_key = NULL;
- ZEND_HASH_FOREACH_STR_KEY_VAL(&vm_trace_ht, key, val) {
+ ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(&vm_trace_ht, key, val) {
if (prev_key) {
fprintf(f, ADDR_FMT" "ADDR_FMT" t %s\n", prev_addr, Z_LVAL_P(val) - prev_addr, ZSTR_VAL(prev_key));
}
Modified: trunk/MgDev/Oem/php/include/Zend/zend_weakrefs.h
===================================================================
--- trunk/MgDev/Oem/php/include/Zend/zend_weakrefs.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/Zend/zend_weakrefs.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -17,6 +17,8 @@
#ifndef ZEND_WEAKREFS_H
#define ZEND_WEAKREFS_H
+#include "zend_alloc.h"
+
BEGIN_EXTERN_C()
extern ZEND_API zend_class_entry *zend_ce_weakref;
@@ -40,6 +42,26 @@
}
}
+/* Because php uses the raw numbers as a hash function, raw pointers will lead to hash collisions.
+ * We have a guarantee that the lowest ZEND_MM_ALIGNED_OFFSET_LOG2 bits of a pointer are zero.
+ *
+ * E.g. On most 64-bit platforms, pointers are aligned to 8 bytes, so the least significant 3 bits are always 0 and can be discarded.
+ *
+ * NOTE: This function is only used for EG(weakrefs) and zend_weakmap->ht.
+ * It is not used for the HashTable instances associated with ZEND_WEAKREF_TAG_HT tags (created in zend_weakref_register, which uses ZEND_WEAKREF_ENCODE instead).
+ * The ZEND_WEAKREF_TAG_HT instances are used to disambiguate between multiple weak references to the same zend_object.
+ */
+static zend_always_inline zend_ulong zend_object_to_weakref_key(const zend_object *object)
+{
+ ZEND_ASSERT(((uintptr_t)object) % ZEND_MM_ALIGNMENT == 0);
+ return ((uintptr_t) object) >> ZEND_MM_ALIGNMENT_LOG2;
+}
+
+static zend_always_inline zend_object *zend_weakref_key_to_object(zend_ulong key)
+{
+ return (zend_object *) (((uintptr_t) key) << ZEND_MM_ALIGNMENT_LOG2);
+}
+
END_EXTERN_C()
#endif
Modified: trunk/MgDev/Oem/php/include/ext/date/lib/timelib.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/date/lib/timelib.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/date/lib/timelib.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
- * Copyright (c) 2015-2022 Derick Rethans
+ * Copyright (c) 2015-2023 Derick Rethans
* Copyright (c) 2018,2021 MongoDB, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -30,9 +30,9 @@
# include "timelib_config.h"
#endif
-#define TIMELIB_VERSION 202116
-#define TIMELIB_EXTENDED_VERSION 20211601
-#define TIMELIB_ASCII_VERSION "2021.16"
+#define TIMELIB_VERSION 202205
+#define TIMELIB_EXTENDED_VERSION 20220501
+#define TIMELIB_ASCII_VERSION "2022.05"
#include <stdlib.h>
#include <stdbool.h>
@@ -321,6 +321,7 @@
#define TIMELIB_ERR_INVALID_TZ_OFFSET 0x223
#define TIMELIB_ERR_FORMAT_LITERAL_MISMATCH 0x224
#define TIMELIB_ERR_MIX_ISO_WITH_NATURAL 0x225
+#define TIMELIB_ERR_NUMBER_OUT_OF_RANGE 0x226
#define TIMELIB_ZONETYPE_NONE 0
#define TIMELIB_ZONETYPE_OFFSET 1
@@ -342,10 +343,10 @@
} timelib_error_container;
typedef struct _timelib_tz_lookup_table {
- char *name;
+ const char *name;
int type;
float gmtoffset;
- char *full_tz_name;
+ const char *full_tz_name;
} timelib_tz_lookup_table;
typedef struct _timelib_tzdb_index_entry {
@@ -354,7 +355,7 @@
} timelib_tzdb_index_entry;
typedef struct _timelib_tzdb {
- char *version;
+ const char *version;
int index_size;
const timelib_tzdb_index_entry *index;
const unsigned char *data;
@@ -438,6 +439,7 @@
TIMELIB_FORMAT_WHITESPACE,
TIMELIB_FORMAT_YEAR_TWO_DIGIT,
TIMELIB_FORMAT_YEAR_FOUR_DIGIT,
+ TIMELIB_FORMAT_YEAR_EXPANDED,
TIMELIB_FORMAT_YEAR_ISO
} timelib_format_specifier_code;
@@ -583,7 +585,7 @@
*
* The returned char* is not duplicated, and should not be freed.
*/
-char *timelib_timezone_id_from_abbr(const char *abbr, timelib_long gmtoffset, int isdst);
+const char *timelib_timezone_id_from_abbr(const char *abbr, timelib_long gmtoffset, int isdst);
/* Returns an array of known time zone abbreviations
*
@@ -793,6 +795,19 @@
timelib_time_offset *timelib_get_time_zone_info(timelib_sll ts, timelib_tzinfo *tz);
/**
+ * Returns offset information with time zone 'tz' for the time stamp 'ts'.
+ *
+ * The returned information contains: the offset in seconds East of UTC (in
+ * the output parameter 'offset'), whether DST is active (in the output
+ * parameter 'is_dst'), and the transition time that got to this state (in
+ * the output parameter 'transition_time'); if NULL is passed, the value is
+ * not retrieved
+ *
+ * Returns 1 if successful, 0 for failure.
+ */
+int timelib_get_time_zone_offset_info(timelib_sll ts, timelib_tzinfo *tz, int32_t* offset, timelib_sll* transition_time, unsigned int* is_dst);
+
+/**
* Returns the UTC offset currently applicable for the information stored in 't'.
*
* The value returned is the UTC offset in seconds East.
Modified: trunk/MgDev/Oem/php/include/ext/date/lib/timelib_config.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/date/lib/timelib_config.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/date/lib/timelib_config.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,5 +1,6 @@
#include "config.w32.h"
-#include <php_stdint.h>
+#include <inttypes.h>
+#include <stdint.h>
#include "zend.h"
#define timelib_malloc emalloc
#define timelib_realloc erealloc
Modified: trunk/MgDev/Oem/php/include/ext/date/php_date.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/date/php_date.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/date/php_date.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -50,7 +50,7 @@
#define Z_PHPDATE_P(zv) php_date_obj_from_obj(Z_OBJ_P((zv)))
struct _php_timezone_obj {
- int initialized;
+ bool initialized;
int type;
union {
timelib_tzinfo *tz; /* TIMELIB_ZONETYPE_ID */
@@ -72,7 +72,9 @@
struct _php_interval_obj {
timelib_rel_time *diff;
int civil_or_wall;
- int initialized;
+ bool from_string;
+ zend_string *date_string;
+ bool initialized;
zend_object std;
};
@@ -89,8 +91,9 @@
timelib_time *end;
timelib_rel_time *interval;
int recurrences;
- int initialized;
- int include_start_date;
+ bool initialized;
+ bool include_start_date;
+ bool include_end_date;
zend_object std;
};
@@ -105,7 +108,6 @@
char *timezone;
HashTable *tzcache;
timelib_error_container *last_errors;
- int timezone_valid;
ZEND_END_MODULE_GLOBALS(date)
#define DATEG(v) ZEND_MODULE_GLOBALS_ACCESSOR(date, v)
@@ -114,13 +116,13 @@
/* Backwards compatibility wrapper */
PHPAPI zend_long php_parse_date(const char *string, zend_long *now);
-PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt);
-PHPAPI int php_idate(char format, time_t ts, int localtime);
+PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, bool gmt);
+PHPAPI int php_idate(char format, time_t ts, bool localtime);
#define _php_strftime php_strftime
-PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm);
-PHPAPI zend_string *php_format_date(const char *format, size_t format_len, time_t ts, int localtime);
+PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, bool gm);
+PHPAPI zend_string *php_format_date(const char *format, size_t format_len, time_t ts, bool localtime);
/* Mechanism to set new TZ database */
PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb);
@@ -139,7 +141,7 @@
#define PHP_DATE_INIT_FORMAT 0x02
PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object);
-PHPAPI int php_date_initialize(php_date_obj *dateobj, const char *time_str, size_t time_str_len, const char *format, zval *timezone_object, int flags);
+PHPAPI bool php_date_initialize(php_date_obj *dateobj, const char *time_str, size_t time_str_len, const char *format, zval *timezone_object, int flags);
#endif /* PHP_DATE_H */
Modified: trunk/MgDev/Oem/php/include/ext/gd/gd_arginfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/gd/gd_arginfo.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/gd/gd_arginfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 4de3d369fad259705acc5bf5de0e935b7e142ec7 */
+ * Stub hash: 68be83247e5e142879ce1bc4340c1c5b8a8f670a */
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gd_info, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()
@@ -315,7 +315,7 @@
#define arginfo_imagecolorexact arginfo_imagecolorclosest
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecolorset, 0, 5, _IS_BOOL, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagecolorset, 0, 5, IS_FALSE, 1)
ZEND_ARG_OBJ_INFO(0, image, GdImage, 0)
ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, red, IS_LONG, 0)
@@ -875,6 +875,127 @@
ZEND_FE_END
};
+static void register_gd_symbols(int module_number)
+{
+ REGISTER_LONG_CONSTANT("IMG_AVIF", PHP_IMG_AVIF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_GIF", PHP_IMG_GIF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_JPG", PHP_IMG_JPG, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_JPEG", PHP_IMG_JPEG, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_PNG", PHP_IMG_PNG, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_WBMP", PHP_IMG_WBMP, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_XPM", PHP_IMG_XPM, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_WEBP", PHP_IMG_WEBP, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_BMP", PHP_IMG_BMP, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_TGA", PHP_IMG_TGA, CONST_PERSISTENT);
+#if defined(gdWebpLossless)
+ REGISTER_LONG_CONSTANT("IMG_WEBP_LOSSLESS", gdWebpLossless, CONST_PERSISTENT);
+#endif
+ REGISTER_LONG_CONSTANT("IMG_COLOR_TILED", gdTiled, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_COLOR_STYLED", gdStyled, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_COLOR_BRUSHED", gdBrushed, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_COLOR_STYLEDBRUSHED", gdStyledBrushed, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_COLOR_TRANSPARENT", gdTransparent, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_ARC_ROUNDED", gdArc, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_ARC_PIE", gdPie, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_ARC_CHORD", gdChord, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_ARC_NOFILL", gdNoFill, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_ARC_EDGED", gdEdged, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_GD2_RAW", GD2_FMT_RAW, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_GD2_COMPRESSED", GD2_FMT_COMPRESSED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FLIP_HORIZONTAL", PHP_GD_FLIP_HORIZONTAL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FLIP_VERTICAL", PHP_GD_FLIP_VERTICAL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FLIP_BOTH", PHP_GD_FLIP_BOTH, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_EFFECT_REPLACE", gdEffectReplace, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_EFFECT_ALPHABLEND", gdEffectAlphaBlend, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_EFFECT_NORMAL", gdEffectNormal, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_EFFECT_OVERLAY", gdEffectOverlay, CONST_PERSISTENT);
+#if defined(gdEffectMultiply)
+ REGISTER_LONG_CONSTANT("IMG_EFFECT_MULTIPLY", gdEffectMultiply, CONST_PERSISTENT);
+#endif
+ REGISTER_LONG_CONSTANT("IMG_CROP_DEFAULT", GD_CROP_DEFAULT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_CROP_TRANSPARENT", GD_CROP_TRANSPARENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_CROP_BLACK", GD_CROP_BLACK, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_CROP_WHITE", GD_CROP_WHITE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_CROP_SIDES", GD_CROP_SIDES, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_CROP_THRESHOLD", GD_CROP_THRESHOLD, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_BELL", GD_BELL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_BESSEL", GD_BESSEL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_BILINEAR_FIXED", GD_BILINEAR_FIXED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_BICUBIC", GD_BICUBIC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_BICUBIC_FIXED", GD_BICUBIC_FIXED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_BLACKMAN", GD_BLACKMAN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_BOX", GD_BOX, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_BSPLINE", GD_BSPLINE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_CATMULLROM", GD_CATMULLROM, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_GAUSSIAN", GD_GAUSSIAN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_GENERALIZED_CUBIC", GD_GENERALIZED_CUBIC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_HERMITE", GD_HERMITE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_HAMMING", GD_HAMMING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_HANNING", GD_HANNING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_MITCHELL", GD_MITCHELL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_POWER", GD_POWER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_QUADRATIC", GD_QUADRATIC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_SINC", GD_SINC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_NEAREST_NEIGHBOUR", GD_NEAREST_NEIGHBOUR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_WEIGHTED4", GD_WEIGHTED4, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_TRIANGLE", GD_TRIANGLE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_AFFINE_TRANSLATE", GD_AFFINE_TRANSLATE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_AFFINE_SCALE", GD_AFFINE_SCALE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_AFFINE_ROTATE", GD_AFFINE_ROTATE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_AFFINE_SHEAR_HORIZONTAL", GD_AFFINE_SHEAR_HORIZONTAL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_AFFINE_SHEAR_VERTICAL", GD_AFFINE_SHEAR_VERTICAL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("GD_BUNDLED", GD_BUNDLED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_NEGATE", IMAGE_FILTER_NEGATE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_GRAYSCALE", IMAGE_FILTER_GRAYSCALE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_BRIGHTNESS", IMAGE_FILTER_BRIGHTNESS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_CONTRAST", IMAGE_FILTER_CONTRAST, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_COLORIZE", IMAGE_FILTER_COLORIZE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_EDGEDETECT", IMAGE_FILTER_EDGEDETECT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_GAUSSIAN_BLUR", IMAGE_FILTER_GAUSSIAN_BLUR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_SELECTIVE_BLUR", IMAGE_FILTER_SELECTIVE_BLUR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_EMBOSS", IMAGE_FILTER_EMBOSS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_MEAN_REMOVAL", IMAGE_FILTER_MEAN_REMOVAL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_SMOOTH", IMAGE_FILTER_SMOOTH, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_PIXELATE", IMAGE_FILTER_PIXELATE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMG_FILTER_SCATTER", IMAGE_FILTER_SCATTER, CONST_PERSISTENT);
+#if defined(GD_VERSION_STRING)
+ REGISTER_STRING_CONSTANT("GD_VERSION", GD_VERSION_STRING, CONST_PERSISTENT);
+#endif
+#if (defined(GD_MAJOR_VERSION) && defined(GD_MINOR_VERSION) && defined(GD_RELEASE_VERSION) && defined(GD_EXTRA_VERSION))
+ REGISTER_LONG_CONSTANT("GD_MAJOR_VERSION", GD_MAJOR_VERSION, CONST_PERSISTENT);
+#endif
+#if (defined(GD_MAJOR_VERSION) && defined(GD_MINOR_VERSION) && defined(GD_RELEASE_VERSION) && defined(GD_EXTRA_VERSION))
+ REGISTER_LONG_CONSTANT("GD_MINOR_VERSION", GD_MINOR_VERSION, CONST_PERSISTENT);
+#endif
+#if (defined(GD_MAJOR_VERSION) && defined(GD_MINOR_VERSION) && defined(GD_RELEASE_VERSION) && defined(GD_EXTRA_VERSION))
+ REGISTER_LONG_CONSTANT("GD_RELEASE_VERSION", GD_RELEASE_VERSION, CONST_PERSISTENT);
+#endif
+#if (defined(GD_MAJOR_VERSION) && defined(GD_MINOR_VERSION) && defined(GD_RELEASE_VERSION) && defined(GD_EXTRA_VERSION))
+ REGISTER_STRING_CONSTANT("GD_EXTRA_VERSION", GD_EXTRA_VERSION, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_GD_PNG)
+ REGISTER_LONG_CONSTANT("PNG_NO_FILTER", 0, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_GD_PNG)
+ REGISTER_LONG_CONSTANT("PNG_FILTER_NONE", 8, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_GD_PNG)
+ REGISTER_LONG_CONSTANT("PNG_FILTER_SUB", 16, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_GD_PNG)
+ REGISTER_LONG_CONSTANT("PNG_FILTER_UP", 32, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_GD_PNG)
+ REGISTER_LONG_CONSTANT("PNG_FILTER_AVG", 64, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_GD_PNG)
+ REGISTER_LONG_CONSTANT("PNG_FILTER_PAETH", 128, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_GD_PNG)
+ REGISTER_LONG_CONSTANT("PNG_ALL_FILTERS", 248, CONST_PERSISTENT);
+#endif
+}
+
static zend_class_entry *register_class_GdImage(void)
{
zend_class_entry ce, *class_entry;
Modified: trunk/MgDev/Oem/php/include/ext/gd/php_gd.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/gd/php_gd.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/gd/php_gd.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -55,6 +55,35 @@
#define PHP_IMG_TGA 128
#define PHP_IMG_AVIF 256
+/* Section Filters Declarations */
+/* IMPORTANT NOTE FOR NEW FILTER
+ * Do not forget to update:
+ * IMAGE_FILTER_MAX: define the last filter index
+ * IMAGE_FILTER_MAX_ARGS: define the biggest amount of arguments
+ * image_filter array in PHP_FUNCTION(imagefilter)
+ * */
+#define IMAGE_FILTER_NEGATE 0
+#define IMAGE_FILTER_GRAYSCALE 1
+#define IMAGE_FILTER_BRIGHTNESS 2
+#define IMAGE_FILTER_CONTRAST 3
+#define IMAGE_FILTER_COLORIZE 4
+#define IMAGE_FILTER_EDGEDETECT 5
+#define IMAGE_FILTER_EMBOSS 6
+#define IMAGE_FILTER_GAUSSIAN_BLUR 7
+#define IMAGE_FILTER_SELECTIVE_BLUR 8
+#define IMAGE_FILTER_MEAN_REMOVAL 9
+#define IMAGE_FILTER_SMOOTH 10
+#define IMAGE_FILTER_PIXELATE 11
+#define IMAGE_FILTER_SCATTER 12
+#define IMAGE_FILTER_MAX 12
+#define IMAGE_FILTER_MAX_ARGS 6
+
+#ifdef HAVE_GD_BUNDLED
+#define GD_BUNDLED 1
+#else
+#define GD_BUNDLED 0
+#endif
+
#ifdef PHP_WIN32
# ifdef PHP_GD_EXPORTS
# define PHP_GD_API __declspec(dllexport)
Modified: trunk/MgDev/Oem/php/include/ext/iconv/iconv_arginfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/iconv/iconv_arginfo.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/iconv/iconv_arginfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: c7198f92b39f7a15d242a74ed5f42036f858da2e */
+ * Stub hash: 4367fa431d3e4814e42d9aa514c10cae1d842d8f */
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_iconv_strlen, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
@@ -85,3 +85,11 @@
ZEND_FE(iconv_get_encoding, arginfo_iconv_get_encoding)
ZEND_FE_END
};
+
+static void register_iconv_symbols(int module_number)
+{
+ REGISTER_STRING_CONSTANT("ICONV_IMPL", PHP_ICONV_IMPL_VALUE, CONST_PERSISTENT);
+ REGISTER_STRING_CONSTANT("ICONV_VERSION", get_iconv_version(), CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("ICONV_MIME_DECODE_STRICT", PHP_ICONV_MIME_DECODE_STRICT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("ICONV_MIME_DECODE_CONTINUE_ON_ERROR", PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR, CONST_PERSISTENT);
+}
Modified: trunk/MgDev/Oem/php/include/ext/iconv/php_iconv.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/iconv/php_iconv.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/iconv/php_iconv.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -41,18 +41,6 @@
PHP_MSHUTDOWN_FUNCTION(miconv);
PHP_MINFO_FUNCTION(miconv);
-PHP_NAMED_FUNCTION(php_if_iconv);
-PHP_FUNCTION(ob_iconv_handler);
-PHP_FUNCTION(iconv_get_encoding);
-PHP_FUNCTION(iconv_set_encoding);
-PHP_FUNCTION(iconv_strlen);
-PHP_FUNCTION(iconv_substr);
-PHP_FUNCTION(iconv_strpos);
-PHP_FUNCTION(iconv_strrpos);
-PHP_FUNCTION(iconv_mime_encode);
-PHP_FUNCTION(iconv_mime_decode);
-PHP_FUNCTION(iconv_mime_decode_headers);
-
ZEND_BEGIN_MODULE_GLOBALS(iconv)
char *input_encoding;
char *internal_encoding;
Modified: trunk/MgDev/Oem/php/include/ext/json/php_json.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/json/php_json.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/json/php_json.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -97,11 +97,11 @@
ZEND_TSRMLS_CACHE_EXTERN()
#endif
-PHP_JSON_API int php_json_encode_ex(smart_str *buf, zval *val, int options, zend_long depth);
-PHP_JSON_API int php_json_encode(smart_str *buf, zval *val, int options);
-PHP_JSON_API int php_json_decode_ex(zval *return_value, const char *str, size_t str_len, zend_long options, zend_long depth);
+PHP_JSON_API zend_result php_json_encode_ex(smart_str *buf, zval *val, int options, zend_long depth);
+PHP_JSON_API zend_result php_json_encode(smart_str *buf, zval *val, int options);
+PHP_JSON_API zend_result php_json_decode_ex(zval *return_value, const char *str, size_t str_len, zend_long options, zend_long depth);
-static inline int php_json_decode(zval *return_value, const char *str, int str_len, bool assoc, zend_long depth)
+static inline zend_result php_json_decode(zval *return_value, const char *str, size_t str_len, bool assoc, zend_long depth)
{
return php_json_decode_ex(return_value, str, str_len, assoc ? PHP_JSON_OBJECT_AS_ARRAY : 0, depth);
}
Modified: trunk/MgDev/Oem/php/include/ext/libxml/php_libxml.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/libxml/php_libxml.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/libxml/php_libxml.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -43,8 +43,8 @@
smart_str error_buffer;
zend_llist *error_list;
struct _php_libxml_entity_resolver {
- zval object;
- zend_fcall_info fci;
+ zval callback;
+ zend_fcall_info fci;
zend_fcall_info_cache fcc;
} entity_loader;
bool entity_loader_disabled;
Modified: trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/eaw_table.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/eaw_table.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/eaw_table.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -14,6 +14,8 @@
* which should be displayed as double-width.
*/
+#define FIRST_DOUBLEWIDTH_CODEPOINT 0x1100
+
static const struct {
int begin;
int end;
Modified: trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfilter.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfilter.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfilter.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -141,10 +141,10 @@
MBFLAPI extern mbfl_buffer_converter * mbfl_buffer_converter_new(const mbfl_encoding *from, const mbfl_encoding *to, size_t buf_initsz);
MBFLAPI extern void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd);
-MBFLAPI extern int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode);
-MBFLAPI extern int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar);
+MBFLAPI extern void mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode);
+MBFLAPI extern void mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar);
MBFLAPI extern size_t mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string);
-MBFLAPI extern int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd);
+MBFLAPI extern void mbfl_buffer_converter_flush(mbfl_buffer_converter *convd);
MBFLAPI extern mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result);
MBFLAPI extern mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result);
MBFLAPI extern size_t mbfl_buffer_illegalchars(mbfl_buffer_converter *convd);
@@ -232,18 +232,6 @@
mbfl_strcut(mbfl_string *string, mbfl_string *result, size_t from, size_t length);
/*
- * strwidth
- */
-MBFLAPI extern size_t
-mbfl_strwidth(mbfl_string *string);
-
-/*
- * strimwidth
- */
-MBFLAPI extern mbfl_string *
-mbfl_strimwidth(mbfl_string *string, mbfl_string *marker, mbfl_string *result, size_t from, size_t width);
-
-/*
* MIME header encode
*/
struct mime_header_encoder_data; /* forward declaration */
@@ -288,16 +276,4 @@
mbfl_string *result,
const mbfl_encoding *outcode);
-/*
- * convert HTML numeric entity
- */
-MBFLAPI extern mbfl_string *
-mbfl_html_numeric_entity(mbfl_string *string, mbfl_string *result, int *convmap, int mapsize, int type);
-
-/*
- * convert of halfwidth and fullwidth for japanese
- */
-MBFLAPI extern mbfl_string *
-mbfl_ja_jp_hantozen(mbfl_string *string, mbfl_string *result, int mode);
-
#endif /* MBFL_MBFILTER_H */
Modified: trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_consts.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_consts.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_consts.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -33,7 +33,6 @@
#define MBFL_ENCTYPE_SBCS 0x00000001 /* single-byte encoding */
#define MBFL_ENCTYPE_WCS2 0x00000010 /* 2 bytes/char */
-#define MBFL_ENCTYPE_MWC2 0x00000040 /* 2+ bytes/char */
#define MBFL_ENCTYPE_WCS4 0x00000100 /* 4 bytes/char */
#define MBFL_ENCTYPE_GL_UNSAFE 0x00004000
Modified: trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_convert.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_convert.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -81,4 +81,7 @@
MBFLAPI extern void mbfl_convert_filter_devcat(mbfl_convert_filter *filter, mbfl_memory_device *src);
MBFLAPI extern int mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char *p);
+MBFLAPI extern zend_string* mb_fast_convert(unsigned char *in, size_t in_len, const mbfl_encoding *from, const mbfl_encoding *to, uint32_t replacement_char, unsigned int error_mode, unsigned int *num_errors);
+MBFLAPI extern void mb_illegal_output(uint32_t bad_cp, mb_from_wchar_fn fn, mb_convert_buf* buf);
+
#endif /* MBFL_CONVERT_H */
Modified: trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -32,6 +32,7 @@
#define MBFL_ENCODING_H
#include "mbfl_defs.h"
+#include "zend.h"
enum mbfl_no_encoding {
mbfl_no_encoding_invalid = -1,
@@ -119,8 +120,6 @@
mbfl_no_encoding_charset_max
};
-typedef enum mbfl_no_encoding mbfl_encoding_id;
-
struct _mbfl_convert_filter;
struct mbfl_convert_vtbl {
enum mbfl_no_encoding from;
@@ -132,10 +131,97 @@
void (*filter_copy)(struct _mbfl_convert_filter *src, struct _mbfl_convert_filter *dest);
};
-/*
- * encoding
- */
-typedef struct _mbfl_encoding {
+typedef struct {
+ unsigned char *out;
+ unsigned char *limit;
+ uint32_t state;
+ uint32_t errors;
+ uint32_t replacement_char;
+ unsigned int error_mode;
+ zend_string *str;
+} mb_convert_buf;
+
+typedef size_t (*mb_to_wchar_fn)(unsigned char **in, size_t *in_len, uint32_t *out, size_t out_len, unsigned int *state);
+typedef void (*mb_from_wchar_fn)(uint32_t *in, size_t in_len, mb_convert_buf *out, bool end);
+
+/* When converting encoded text to a buffer of wchars (Unicode codepoints) using `mb_to_wchar_fn`,
+ * the buffer must be at least this size (to work with all supported text encodings) */
+#define MBSTRING_MIN_WCHAR_BUFSIZE 5
+
+static inline void mb_convert_buf_init(mb_convert_buf *buf, size_t initsize, uint32_t repl_char, unsigned int err_mode)
+{
+ buf->state = buf->errors = 0;
+ buf->str = emalloc(_ZSTR_STRUCT_SIZE(initsize));
+ buf->out = (unsigned char*)ZSTR_VAL(buf->str);
+ buf->limit = buf->out + initsize;
+ buf->replacement_char = repl_char;
+ buf->error_mode = err_mode;
+}
+
+#define MB_CONVERT_BUF_ENSURE(buf, out, limit, needed) \
+ ZEND_ASSERT(out <= limit); \
+ if ((limit - out) < (needed)) { \
+ size_t oldsize = limit - (unsigned char*)ZSTR_VAL(buf->str); \
+ size_t newsize = oldsize + MAX(oldsize >> 1, needed); \
+ zend_string *newstr = erealloc(buf->str, _ZSTR_STRUCT_SIZE(newsize)); \
+ out = (unsigned char*)ZSTR_VAL(newstr) + (out - (unsigned char*)ZSTR_VAL(buf->str)); \
+ limit = (unsigned char*)ZSTR_VAL(newstr) + newsize; \
+ buf->str = newstr; \
+ }
+
+#define MB_CONVERT_BUF_STORE(buf, _out, _limit) buf->out = _out; buf->limit = _limit
+
+#define MB_CONVERT_BUF_LOAD(buf, _out, _limit) _out = buf->out; _limit = buf->limit
+
+#define MB_CONVERT_ERROR(buf, out, limit, bad_cp, conv_fn) \
+ MB_CONVERT_BUF_STORE(buf, out, limit); \
+ mb_illegal_output(bad_cp, conv_fn, buf); \
+ MB_CONVERT_BUF_LOAD(buf, out, limit)
+
+static inline unsigned char* mb_convert_buf_add(unsigned char *out, char c)
+{
+ *out++ = c;
+ return out;
+}
+
+static inline unsigned char* mb_convert_buf_add2(unsigned char *out, char c1, char c2)
+{
+ *out++ = c1;
+ *out++ = c2;
+ return out;
+}
+
+static inline unsigned char* mb_convert_buf_add3(unsigned char *out, char c1, char c2, char c3)
+{
+ *out++ = c1;
+ *out++ = c2;
+ *out++ = c3;
+ return out;
+}
+
+static inline unsigned char* mb_convert_buf_add4(unsigned char *out, char c1, char c2, char c3, char c4)
+{
+ *out++ = c1;
+ *out++ = c2;
+ *out++ = c3;
+ *out++ = c4;
+ return out;
+}
+
+static inline zend_string* mb_convert_buf_result(mb_convert_buf *buf)
+{
+ ZEND_ASSERT(buf->out <= buf->limit);
+ zend_string *ret = buf->str;
+ /* See `zend_string_alloc` in zend_string.h */
+ GC_SET_REFCOUNT(ret, 1);
+ GC_TYPE_INFO(ret) = GC_STRING;
+ ZSTR_H(ret) = 0;
+ ZSTR_LEN(ret) = buf->out - (unsigned char*)ZSTR_VAL(ret);
+ *(buf->out) = '\0';
+ return ret;
+}
+
+typedef struct {
enum mbfl_no_encoding no_encoding;
const char *name;
const char *mime_name;
@@ -144,6 +230,8 @@
unsigned int flag;
const struct mbfl_convert_vtbl *input_filter;
const struct mbfl_convert_vtbl *output_filter;
+ mb_to_wchar_fn to_wchar;
+ mb_from_wchar_fn from_wchar;
} mbfl_encoding;
MBFLAPI extern const mbfl_encoding *mbfl_name2encoding(const char *name);
Modified: trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_language.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_language.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mbstring/libmbfl/mbfl/mbfl_language.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -72,7 +72,7 @@
enum mbfl_no_language no_language;
const char *name;
const char *short_name;
- const char *(*aliases)[];
+ const char **aliases;
enum mbfl_no_encoding mail_charset;
enum mbfl_no_encoding mail_header_encoding;
enum mbfl_no_encoding mail_body_encoding;
Modified: trunk/MgDev/Oem/php/include/ext/mbstring/mbstring.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mbstring/mbstring.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mbstring/mbstring.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -53,20 +53,16 @@
PHP_RSHUTDOWN_FUNCTION(mbstring);
PHP_MINFO_FUNCTION(mbstring);
-MBSTRING_API char *php_mb_safe_strrchr_ex(const char *s, unsigned int c,
- size_t nbytes, const mbfl_encoding *enc);
-MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c,
- size_t nbytes);
+MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nbytes, const mbfl_encoding *enc);
-MBSTRING_API char *php_mb_convert_encoding_ex(
+MBSTRING_API zend_string* php_mb_convert_encoding_ex(
const char *input, size_t length,
- const mbfl_encoding *to_encoding, const mbfl_encoding *from_encoding, size_t *output_len);
-MBSTRING_API char * php_mb_convert_encoding(
+ const mbfl_encoding *to_encoding, const mbfl_encoding *from_encoding);
+MBSTRING_API zend_string* php_mb_convert_encoding(
const char *input, size_t length, const mbfl_encoding *to_encoding,
- const mbfl_encoding **from_encodings, size_t num_from_encodings, size_t *output_len);
+ const mbfl_encoding **from_encodings, size_t num_from_encodings);
-MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc);
-MBSTRING_API size_t php_mb_mbchar_bytes(const char *s);
+MBSTRING_API size_t php_mb_mbchar_bytes(const char *s, const mbfl_encoding *enc);
MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, const mbfl_encoding *encoding);
MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const mbfl_encoding *encoding);
Modified: trunk/MgDev/Oem/php/include/ext/mbstring/php_mbregex.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mbstring/php_mbregex.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mbstring/php_mbregex.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -30,6 +30,8 @@
PHP_RSHUTDOWN_FUNCTION(mb_regex);
PHP_MINFO_FUNCTION(mb_regex);
+extern char php_mb_oniguruma_version[256];
+
typedef struct _zend_mb_regex_globals zend_mb_regex_globals;
zend_mb_regex_globals *php_mb_regex_globals_alloc(void);
Modified: trunk/MgDev/Oem/php/include/ext/mysqli/php_mysqli_structs.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mysqli/php_mysqli_structs.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mysqli/php_mysqli_structs.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -26,22 +26,10 @@
#undef LIST
#endif
-#ifdef MYSQLI_USE_MYSQLND
#include "ext/mysqlnd/mysqlnd.h"
#include "mysqli_mysqlnd.h"
-#else
-#include <mysql.h>
-#if MYSQL_VERSION_ID >= 80000 && MYSQL_VERSION_ID < 100000
-typedef _Bool my_bool;
-#endif
-#include <errmsg.h>
-#include <mysqld_error.h>
-#include "mysqli_libmysql.h"
-#endif /* MYSQLI_USE_MYSQLND */
-
-
#define MYSQLI_VERSION_ID 101009
enum mysqli_status {
@@ -69,10 +57,6 @@
BIND_BUFFER param;
BIND_BUFFER result;
char *query;
-#ifndef MYSQLI_USE_MYSQLND
- /* used to manage refcount with libmysql (already implement in mysqlnd) */
- zval link_handle;
-#endif
} MY_STMT;
typedef struct {
@@ -82,9 +66,7 @@
php_stream *li_stream;
unsigned int multi_query;
bool persistent;
-#ifdef MYSQLI_USE_MYSQLND
int async_result_fetch_type;
-#endif
} MY_MYSQL;
typedef struct {
@@ -259,14 +241,13 @@
zend_long num_active_persistent;
zend_long num_inactive_persistent;
zend_long max_persistent;
- zend_long allow_persistent;
+ bool allow_persistent;
zend_ulong default_port;
char *default_host;
char *default_user;
char *default_pw;
char *default_socket;
- zend_long reconnect;
- zend_long allow_local_infile;
+ bool allow_local_infile;
char *local_infile_directory;
zend_long error_no;
char *error_msg;
Modified: trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -109,7 +109,6 @@
#define mysqlnd_query(conn, query_str, query_len) ((conn)->data)->m->query((conn)->data, (query_str), (query_len))
#define mysqlnd_async_query(conn, query_str, query_len) ((conn)->data)->m->send_query((conn)->data, (query_str), (query_len), NULL, NULL)
#define mysqlnd_reap_async_query(conn) ((conn)->data)->m->reap_query((conn)->data)
-#define mysqlnd_unbuffered_skip_result(result) (result)->m.skip_result((result))
PHPAPI enum_func_status mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long sec, long usec, int * desc_num);
Modified: trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd_portability.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd_portability.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd_portability.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -38,7 +38,7 @@
#define atoll atol
#endif
-#include "php_stdint.h"
+#include <stdint.h>
#if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG)
#define _LONG_LONG 1 /* For AIX string library */
Modified: trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd_structs.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd_structs.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/mysqlnd/mysqlnd_structs.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -352,7 +352,7 @@
-typedef enum_func_status (*func_mysqlnd_vio__init)(MYSQLND_VIO * const vio, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
+typedef void (*func_mysqlnd_vio__init)(MYSQLND_VIO * const vio, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
typedef void (*func_mysqlnd_vio__dtor)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
typedef enum_func_status (*func_mysqlnd_vio__connect)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, const bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
@@ -486,8 +486,8 @@
typedef enum_func_status (*func_mysqlnd_conn_data__send_command_do_request)(MYSQLND_CONN_DATA * const conn, const enum php_mysqlnd_server_command command, const zend_uchar * const arg, const size_t arg_len, const bool silent, const bool ignore_upsert_status);
typedef enum_func_status (*func_mysqlnd_conn_data__send_command_handle_response)(MYSQLND_CONN_DATA * const conn, const enum mysqlnd_packet_type ok_packet, const bool silent, const enum php_mysqlnd_server_command command, const bool ignore_upsert_status);
-typedef enum_func_status (*func_mysqlnd_conn_data__restart_psession)(MYSQLND_CONN_DATA * conn);
-typedef enum_func_status (*func_mysqlnd_conn_data__end_psession)(MYSQLND_CONN_DATA * conn);
+typedef void (*func_mysqlnd_conn_data__restart_psession)(MYSQLND_CONN_DATA * conn);
+typedef void (*func_mysqlnd_conn_data__end_psession)(MYSQLND_CONN_DATA * conn);
typedef enum_func_status (*func_mysqlnd_conn_data__send_close)(MYSQLND_CONN_DATA * conn);
typedef enum_func_status (*func_mysqlnd_conn_data__ssl_set)(MYSQLND_CONN_DATA * const conn, const char * key, const char * const cert, const char * const ca, const char * const capath, const char * const cipher);
@@ -632,7 +632,7 @@
typedef MYSQLND_ROW_C (*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result);
typedef uint64_t (*func_mysqlnd_res__num_rows)(const MYSQLND_RES * const result);
typedef unsigned int (*func_mysqlnd_res__num_fields)(const MYSQLND_RES * const result);
-typedef enum_func_status (*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result);
+typedef void (*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result);
typedef enum_func_status (*func_mysqlnd_res__seek_data)(MYSQLND_RES * const result, const uint64_t row);
typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__seek_field)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET field_offset);
typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__field_tell)(const MYSQLND_RES * const result);
@@ -1085,9 +1085,9 @@
-typedef enum_func_status (*func_mysqlnd_pfc__init)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
+typedef void (*func_mysqlnd_pfc__init)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info);
typedef void (*func_mysqlnd_pfc__dtor)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
-typedef enum_func_status (*func_mysqlnd_pfc__reset)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
+typedef void (*func_mysqlnd_pfc__reset)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info);
typedef enum_func_status (*func_mysqlnd_pfc__set_client_option)(MYSQLND_PFC * const pfc, enum_mysqlnd_client_option option, const char * const value);
typedef enum_func_status (*func_mysqlnd_pfc__decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, const zend_uchar * const compressed_data, const size_t compressed_data_len);
typedef enum_func_status (*func_mysqlnd_pfc__encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, const size_t uncompressed_data_len);
Modified: trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -42,9 +42,9 @@
/* The current PCRE version information. */
#define PCRE2_MAJOR 10
-#define PCRE2_MINOR 39
+#define PCRE2_MINOR 40
#define PCRE2_PRERELEASE
-#define PCRE2_DATE 2021-10-29
+#define PCRE2_DATE 2022-04-14
/* When an application links to a PCRE DLL in Windows, the symbols that are
imported have to be identified as such. When building PCRE2, the appropriate
Modified: trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_internal.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_internal.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_internal.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -7,7 +7,7 @@
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2020 University of Cambridge
+ New API code Copyright (c) 2016-2022 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -954,6 +954,13 @@
#define STRING_LIMIT_RECURSION_EQ "LIMIT_RECURSION="
#define STRING_MARK "MARK"
+#define STRING_bc "bc"
+#define STRING_bidiclass "bidiclass"
+#define STRING_sc "sc"
+#define STRING_script "script"
+#define STRING_scriptextensions "scriptextensions"
+#define STRING_scx "scx"
+
#else /* SUPPORT_UNICODE */
/* UTF-8 support is enabled; always use UTF-8 (=ASCII) character codes. This
@@ -1248,6 +1255,14 @@
#define STRING_LIMIT_RECURSION_EQ STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_R STR_E STR_C STR_U STR_R STR_S STR_I STR_O STR_N STR_EQUALS_SIGN
#define STRING_MARK STR_M STR_A STR_R STR_K
+#define STRING_bc STR_b STR_c
+#define STRING_bidiclass STR_b STR_i STR_d STR_i STR_c STR_l STR_a STR_s STR_s
+#define STRING_sc STR_s STR_c
+#define STRING_script STR_s STR_c STR_r STR_i STR_p STR_t
+#define STRING_scriptextensions STR_s STR_c STR_r STR_i STR_p STR_t STR_e STR_x STR_t STR_e STR_n STR_s STR_i STR_o STR_n STR_s
+#define STRING_scx STR_s STR_c STR_x
+
+
#endif /* SUPPORT_UNICODE */
/* -------------------- End of character and string names -------------------*/
@@ -1254,20 +1269,25 @@
/* -------------------- Definitions for compiled patterns -------------------*/
-/* Codes for different types of Unicode property */
+/* Codes for different types of Unicode property. If these definitions are
+changed, the autopossessifying table in pcre2_auto_possess.c must be updated to
+match. */
#define PT_ANY 0 /* Any property - matches all chars */
#define PT_LAMP 1 /* L& - the union of Lu, Ll, Lt */
#define PT_GC 2 /* Specified general characteristic (e.g. L) */
#define PT_PC 3 /* Specified particular characteristic (e.g. Lu) */
-#define PT_SC 4 /* Script (e.g. Han) */
-#define PT_ALNUM 5 /* Alphanumeric - the union of L and N */
-#define PT_SPACE 6 /* Perl space - Z plus 9,10,12,13 */
-#define PT_PXSPACE 7 /* POSIX space - Z plus 9,10,11,12,13 */
-#define PT_WORD 8 /* Word - L plus N plus underscore */
-#define PT_CLIST 9 /* Pseudo-property: match character list */
-#define PT_UCNC 10 /* Universal Character nameable character */
-#define PT_TABSIZE 11 /* Size of square table for autopossessify tests */
+#define PT_SC 4 /* Script only (e.g. Han) */
+#define PT_SCX 5 /* Script extensions (includes SC) */
+#define PT_ALNUM 6 /* Alphanumeric - the union of L and N */
+#define PT_SPACE 7 /* Perl space - general category Z plus 9,10,12,13 */
+#define PT_PXSPACE 8 /* POSIX space - Z plus 9,10,11,12,13 */
+#define PT_WORD 9 /* Word - L plus N plus underscore */
+#define PT_CLIST 10 /* Pseudo-property: match character list */
+#define PT_UCNC 11 /* Universal Character nameable character */
+#define PT_BIDICL 12 /* Specified bidi class */
+#define PT_BOOL 13 /* Boolean property */
+#define PT_TABSIZE 14 /* Size of square table for autopossessify tests */
/* The following special properties are used only in XCLASS items, when POSIX
classes are specified and PCRE2_UCP is set - in other words, for Unicode
@@ -1275,22 +1295,27 @@
those in the above list, and so they do not take part in the autopossessifying
table. */
-#define PT_PXGRAPH 11 /* [:graph:] - characters that mark the paper */
-#define PT_PXPRINT 12 /* [:print:] - [:graph:] plus non-control spaces */
-#define PT_PXPUNCT 13 /* [:punct:] - punctuation characters */
+#define PT_PXGRAPH 14 /* [:graph:] - characters that mark the paper */
+#define PT_PXPRINT 15 /* [:print:] - [:graph:] plus non-control spaces */
+#define PT_PXPUNCT 16 /* [:punct:] - punctuation characters */
+/* This value is used when parsing \p and \P escapes to indicate that neither
+\p{script:...} nor \p{scx:...} has been encountered. */
+
+#define PT_NOTSCRIPT 255
+
/* Flag bits and data types for the extended class (OP_XCLASS) for classes that
contain characters with values greater than 255. */
-#define XCL_NOT 0x01 /* Flag: this is a negative class */
-#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */
-#define XCL_HASPROP 0x04 /* Flag: property checks are present. */
+#define XCL_NOT 0x01 /* Flag: this is a negative class */
+#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */
+#define XCL_HASPROP 0x04 /* Flag: property checks are present. */
-#define XCL_END 0 /* Marks end of individual items */
-#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */
-#define XCL_RANGE 2 /* A range (two multibyte chars) follows */
-#define XCL_PROP 3 /* Unicode property (2-byte property code follows) */
-#define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */
+#define XCL_END 0 /* Marks end of individual items */
+#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */
+#define XCL_RANGE 2 /* A range (two multibyte chars) follows */
+#define XCL_PROP 3 /* Unicode property (2-byte property code follows) */
+#define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */
/* These are escaped items that aren't just an encoding of a particular data
value such as \n. They must have non-zero values, as check_escape() returns 0
@@ -1797,8 +1822,8 @@
uint8_t gbprop; /* ucp_gbControl, etc. (grapheme break property) */
uint8_t caseset; /* offset to multichar other cases or zero */
int32_t other_case; /* offset to other case, or zero if none */
- int16_t scriptx; /* script extension value */
- int16_t dummy; /* spare - to round to multiple of 4 bytes */
+ uint16_t scriptx_bidiclass; /* script extension (11 bit) and bidi class (5 bit) values */
+ uint16_t bprops; /* binary properties offset */
} ucd_record;
/* UCD access macros */
@@ -1815,6 +1840,14 @@
#define GET_UCD(ch) REAL_GET_UCD(ch)
#endif
+#define UCD_SCRIPTX_MASK 0x3ff
+#define UCD_BIDICLASS_SHIFT 11
+#define UCD_BPROPS_MASK 0xfff
+
+#define UCD_SCRIPTX_PROP(prop) ((prop)->scriptx_bidiclass & UCD_SCRIPTX_MASK)
+#define UCD_BIDICLASS_PROP(prop) ((prop)->scriptx_bidiclass >> UCD_BIDICLASS_SHIFT)
+#define UCD_BPROPS_PROP(prop) ((prop)->bprops & UCD_BPROPS_MASK)
+
#define UCD_CHARTYPE(ch) GET_UCD(ch)->chartype
#define UCD_SCRIPT(ch) GET_UCD(ch)->script
#define UCD_CATEGORY(ch) PRIV(ucp_gentype)[UCD_CHARTYPE(ch)]
@@ -1821,8 +1854,17 @@
#define UCD_GRAPHBREAK(ch) GET_UCD(ch)->gbprop
#define UCD_CASESET(ch) GET_UCD(ch)->caseset
#define UCD_OTHERCASE(ch) ((uint32_t)((int)ch + (int)(GET_UCD(ch)->other_case)))
-#define UCD_SCRIPTX(ch) GET_UCD(ch)->scriptx
+#define UCD_SCRIPTX(ch) UCD_SCRIPTX_PROP(GET_UCD(ch))
+#define UCD_BPROPS(ch) UCD_BPROPS_PROP(GET_UCD(ch))
+#define UCD_BIDICLASS(ch) UCD_BIDICLASS_PROP(GET_UCD(ch))
+/* The "scriptx" and bprops fields contain offsets into vectors of 32-bit words
+that form a bitmap representing a list of scripts or boolean properties. These
+macros test or set a bit in the map by number. */
+
+#define MAPBIT(map,n) ((map)[(n)/32]&(1u<<((n)%32)))
+#define MAPSET(map,n) ((map)[(n)/32]|=(1u<<((n)%32)))
+
/* Header for serialized pcre2 codes. */
typedef struct pcre2_serialized_data {
@@ -1878,6 +1920,7 @@
#endif
#define _pcre2_hspace_list PCRE2_SUFFIX(_pcre2_hspace_list_)
#define _pcre2_vspace_list PCRE2_SUFFIX(_pcre2_vspace_list_)
+#define _pcre2_ucd_boolprop_sets PCRE2_SUFFIX(_pcre2_ucd_boolprop_sets_)
#define _pcre2_ucd_caseless_sets PCRE2_SUFFIX(_pcre2_ucd_caseless_sets_)
#define _pcre2_ucd_digit_sets PCRE2_SUFFIX(_pcre2_ucd_digit_sets_)
#define _pcre2_ucd_script_sets PCRE2_SUFFIX(_pcre2_ucd_script_sets_)
@@ -1901,9 +1944,10 @@
extern const uint8_t PRIV(default_tables)[];
extern const uint32_t PRIV(hspace_list)[];
extern const uint32_t PRIV(vspace_list)[];
+extern const uint32_t PRIV(ucd_boolprop_sets)[];
extern const uint32_t PRIV(ucd_caseless_sets)[];
extern const uint32_t PRIV(ucd_digit_sets)[];
-extern const uint8_t PRIV(ucd_script_sets)[];
+extern const uint32_t PRIV(ucd_script_sets)[];
extern const ucd_record PRIV(ucd_records)[];
#if PCRE2_CODE_UNIT_WIDTH == 32
extern const ucd_record PRIV(dummy_ucd_record)[];
Modified: trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_intmodedep.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_intmodedep.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_intmodedep.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -519,7 +519,7 @@
macro because almost all calls are already within a block of UTF-32 only
code.
-These are all no-ops since all UTF-32 characters fit into one pcre_uchar. */
+These are all no-ops since all UTF-32 characters fit into one PCRE2_UCHAR. */
#define BACKCHAR(eptr) do { } while (0)
@@ -747,8 +747,8 @@
uint32_t class_range_start; /* Overall class range start */
uint32_t class_range_end; /* Overall class range end */
PCRE2_UCHAR nl[4]; /* Newline string when fixed length */
+ uint32_t req_varyopt; /* "After variable item" flag for reqbyte */
int max_lookbehind; /* Maximum lookbehind (characters) */
- int req_varyopt; /* "After variable item" flag for reqbyte */
BOOL had_accept; /* (*ACCEPT) encountered */
BOOL had_pruneorskip; /* (*PRUNE) or (*SKIP) encountered */
BOOL had_recurse; /* Had a recursion or subroutine call */
@@ -764,7 +764,7 @@
} pcre2_real_jit_stack;
/* Structure for items in a linked list that represents an explicit recursive
-call within the pattern when running pcre_dfa_match(). */
+call within the pattern when running pcre2_dfa_match(). */
typedef struct dfa_recursion_info {
struct dfa_recursion_info *prevrec;
@@ -838,6 +838,17 @@
typedef char check_heapframe_size[
((sizeof(heapframe) % sizeof(PCRE2_SIZE)) == 0)? (+1):(-1)];
+/* Structure for computing the alignment of heapframe. */
+
+typedef struct heapframe_align {
+ char unalign; /* Completely unalign the current offset */
+ heapframe frame; /* Offset is its alignment */
+} heapframe_align;
+
+/* This define is the minimum alignment required for a heapframe, in bytes. */
+
+#define HEAPFRAME_ALIGNMENT offsetof(heapframe_align, frame)
+
/* Structure for passing "static" information around between the functions
doing traditional NFA matching (pcre2_match() and friends). */
Modified: trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_jit_simd_inc.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -339,7 +339,7 @@
{
JUMPHERE(partial_quit[0]);
JUMPHERE(partial_quit[1]);
- OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0);
+ OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);
CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0);
}
else
@@ -537,7 +537,7 @@
OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));
- OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0);
+ OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0);
CMOV(SLJIT_LESS, STR_END, TMP1, 0);
}
@@ -883,14 +883,14 @@
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf && offset > 0)
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_utf));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_utf));
else
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs));
#else
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs));
#endif
}
else
@@ -904,14 +904,14 @@
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf && offset > 0)
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_mask_utf));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask_utf));
else
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_mask));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask));
#else
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_mask));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask));
#endif
}
else
@@ -922,14 +922,14 @@
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf && offset > 0)
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_2_utf));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2_utf));
else
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_2));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2));
#else
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_2));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2));
#endif
}
}
@@ -1067,7 +1067,7 @@
OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
OP2(SLJIT_ADD, SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));
- OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, STR_END, 0, SLJIT_R0, 0);
+ OP2U(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, SLJIT_R0, 0);
CMOV(SLJIT_LESS, SLJIT_R0, STR_END, 0);
}
@@ -1084,31 +1084,31 @@
if (char1a == char1b && char2a == char2b) {
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf)
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_0_utf));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_0_utf));
else
#endif
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_0));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_0));
} else {
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf)
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_1_utf));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_1_utf));
else
#endif
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_1));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_1));
}
} else {
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf)
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_default_utf));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_default_utf));
else
#endif
- sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW),
- SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_default));
+ sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W),
+ SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_default));
}
/* Restore STR_PTR register. */
@@ -1418,7 +1418,7 @@
{
JUMPHERE(partial_quit[0]);
JUMPHERE(partial_quit[1]);
- OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0);
+ OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);
CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0);
}
else
@@ -1673,7 +1673,7 @@
OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));
- OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0);
+ OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0);
CMOV(SLJIT_LESS, STR_END, TMP1, 0);
}
Modified: trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_ucp.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_ucp.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/pcre/pcre2lib/pcre2_ucp.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -7,8 +7,12 @@
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2018 University of Cambridge
+ New API code Copyright (c) 2016-2022 University of Cambridge
+This module is auto-generated from Unicode data files. DO NOT EDIT MANUALLY!
+Instead, modify the maint/GenerateUcpHeader.py script and run it to generate
+a new version of this code.
+
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
@@ -38,31 +42,27 @@
-----------------------------------------------------------------------------
*/
-
#ifndef PCRE2_UCP_H_IDEMPOTENT_GUARD
#define PCRE2_UCP_H_IDEMPOTENT_GUARD
-/* This file contains definitions of the property values that are returned by
-the UCD access macros. New values that are added for new releases of Unicode
-should always be at the end of each enum, for backwards compatibility.
+/* This file contains definitions of the Unicode property values that are
+returned by the UCD access macros and used throughout PCRE2.
-IMPORTANT: Note also that the specific numeric values of the enums have to be
-the same as the values that are generated by the maint/MultiStage2.py script,
-where the equivalent property descriptive names are listed in vectors.
+IMPORTANT: The specific values of the first two enums (general and particular
+character categories) are assumed by the table called catposstab in the file
+pcre2_auto_possess.c. They are unlikely to change, but should be checked after
+an update. */
-ALSO: The specific values of the first two enums are assumed for the table
-called catposstab in pcre2_compile.c. */
-
/* These are the general character categories. */
enum {
- ucp_C, /* Other */
- ucp_L, /* Letter */
- ucp_M, /* Mark */
- ucp_N, /* Number */
- ucp_P, /* Punctuation */
- ucp_S, /* Symbol */
- ucp_Z /* Separator */
+ ucp_C,
+ ucp_L,
+ ucp_M,
+ ucp_N,
+ ucp_P,
+ ucp_S,
+ ucp_Z,
};
/* These are the particular character categories. */
@@ -97,9 +97,100 @@
ucp_So, /* Other symbol */
ucp_Zl, /* Line separator */
ucp_Zp, /* Paragraph separator */
- ucp_Zs /* Space separator */
+ ucp_Zs, /* Space separator */
};
+/* These are Boolean properties. */
+
+enum {
+ ucp_ASCII,
+ ucp_ASCII_Hex_Digit,
+ ucp_Alphabetic,
+ ucp_Bidi_Control,
+ ucp_Bidi_Mirrored,
+ ucp_Case_Ignorable,
+ ucp_Cased,
+ ucp_Changes_When_Casefolded,
+ ucp_Changes_When_Casemapped,
+ ucp_Changes_When_Lowercased,
+ ucp_Changes_When_Titlecased,
+ ucp_Changes_When_Uppercased,
+ ucp_Dash,
+ ucp_Default_Ignorable_Code_Point,
+ ucp_Deprecated,
+ ucp_Diacritic,
+ ucp_Emoji,
+ ucp_Emoji_Component,
+ ucp_Emoji_Modifier,
+ ucp_Emoji_Modifier_Base,
+ ucp_Emoji_Presentation,
+ ucp_Extended_Pictographic,
+ ucp_Extender,
+ ucp_Grapheme_Base,
+ ucp_Grapheme_Extend,
+ ucp_Grapheme_Link,
+ ucp_Hex_Digit,
+ ucp_IDS_Binary_Operator,
+ ucp_IDS_Trinary_Operator,
+ ucp_ID_Continue,
+ ucp_ID_Start,
+ ucp_Ideographic,
+ ucp_Join_Control,
+ ucp_Logical_Order_Exception,
+ ucp_Lowercase,
+ ucp_Math,
+ ucp_Noncharacter_Code_Point,
+ ucp_Pattern_Syntax,
+ ucp_Pattern_White_Space,
+ ucp_Prepended_Concatenation_Mark,
+ ucp_Quotation_Mark,
+ ucp_Radical,
+ ucp_Regional_Indicator,
+ ucp_Sentence_Terminal,
+ ucp_Soft_Dotted,
+ ucp_Terminal_Punctuation,
+ ucp_Unified_Ideograph,
+ ucp_Uppercase,
+ ucp_Variation_Selector,
+ ucp_White_Space,
+ ucp_XID_Continue,
+ ucp_XID_Start,
+ /* This must be last */
+ ucp_Bprop_Count
+};
+
+/* Size of entries in ucd_boolprop_sets[] */
+
+#define ucd_boolprop_sets_item_size 2
+
+/* These are the bidi class values. */
+
+enum {
+ ucp_bidiAL, /* Arabic letter */
+ ucp_bidiAN, /* Arabic number */
+ ucp_bidiB, /* Paragraph separator */
+ ucp_bidiBN, /* Boundary neutral */
+ ucp_bidiCS, /* Common separator */
+ ucp_bidiEN, /* European number */
+ ucp_bidiES, /* European separator */
+ ucp_bidiET, /* European terminator */
+ ucp_bidiFSI, /* First strong isolate */
+ ucp_bidiL, /* Left to right */
+ ucp_bidiLRE, /* Left to right embedding */
+ ucp_bidiLRI, /* Left to right isolate */
+ ucp_bidiLRO, /* Left to right override */
+ ucp_bidiNSM, /* Non-spacing mark */
+ ucp_bidiON, /* Other neutral */
+ ucp_bidiPDF, /* Pop directional format */
+ ucp_bidiPDI, /* Pop directional isolate */
+ ucp_bidiR, /* Right to left */
+ ucp_bidiRLE, /* Right to left embedding */
+ ucp_bidiRLI, /* Right to left isolate */
+ ucp_bidiRLO, /* Right to left override */
+ ucp_bidiS, /* Segment separator */
+ ucp_bidiWS, /* White space */
+};
+
/* These are grapheme break properties. The Extended Pictographic property
comes from the emoji-data.txt file. */
@@ -115,191 +206,189 @@
ucp_gbT, /* 8 Hangul syllable type T */
ucp_gbLV, /* 9 Hangul syllable type LV */
ucp_gbLVT, /* 10 Hangul syllable type LVT */
- ucp_gbRegionalIndicator, /* 11 */
+ ucp_gbRegional_Indicator, /* 11 */
ucp_gbOther, /* 12 */
ucp_gbZWJ, /* 13 */
- ucp_gbExtended_Pictographic /* 14 */
+ ucp_gbExtended_Pictographic, /* 14 */
};
/* These are the script identifications. */
enum {
- ucp_Unknown,
+ /* Scripts which has characters in other scripts. */
+ ucp_Latin,
+ ucp_Greek,
+ ucp_Cyrillic,
ucp_Arabic,
- ucp_Armenian,
+ ucp_Syriac,
+ ucp_Thaana,
+ ucp_Devanagari,
ucp_Bengali,
+ ucp_Gurmukhi,
+ ucp_Gujarati,
+ ucp_Oriya,
+ ucp_Tamil,
+ ucp_Telugu,
+ ucp_Kannada,
+ ucp_Malayalam,
+ ucp_Sinhala,
+ ucp_Myanmar,
+ ucp_Georgian,
+ ucp_Hangul,
+ ucp_Mongolian,
+ ucp_Hiragana,
+ ucp_Katakana,
ucp_Bopomofo,
- ucp_Braille,
+ ucp_Han,
+ ucp_Yi,
+ ucp_Tagalog,
+ ucp_Hanunoo,
+ ucp_Buhid,
+ ucp_Tagbanwa,
+ ucp_Limbu,
+ ucp_Tai_Le,
+ ucp_Linear_B,
+ ucp_Cypriot,
ucp_Buginese,
- ucp_Buhid,
- ucp_Canadian_Aboriginal,
- ucp_Cherokee,
- ucp_Common,
ucp_Coptic,
- ucp_Cypriot,
- ucp_Cyrillic,
- ucp_Deseret,
- ucp_Devanagari,
- ucp_Ethiopic,
- ucp_Georgian,
ucp_Glagolitic,
- ucp_Gothic,
- ucp_Greek,
- ucp_Gujarati,
- ucp_Gurmukhi,
- ucp_Han,
- ucp_Hangul,
- ucp_Hanunoo,
+ ucp_Syloti_Nagri,
+ ucp_Phags_Pa,
+ ucp_Nko,
+ ucp_Kayah_Li,
+ ucp_Javanese,
+ ucp_Kaithi,
+ ucp_Mandaic,
+ ucp_Chakma,
+ ucp_Sharada,
+ ucp_Takri,
+ ucp_Duployan,
+ ucp_Grantha,
+ ucp_Khojki,
+ ucp_Linear_A,
+ ucp_Mahajani,
+ ucp_Manichaean,
+ ucp_Modi,
+ ucp_Old_Permic,
+ ucp_Psalter_Pahlavi,
+ ucp_Khudawadi,
+ ucp_Tirhuta,
+ ucp_Multani,
+ ucp_Adlam,
+ ucp_Masaram_Gondi,
+ ucp_Dogra,
+ ucp_Gunjala_Gondi,
+ ucp_Hanifi_Rohingya,
+ ucp_Sogdian,
+ ucp_Nandinagari,
+ ucp_Yezidi,
+ ucp_Cypro_Minoan,
+ ucp_Old_Uyghur,
+
+ /* Scripts which has no characters in other scripts. */
+ ucp_Unknown,
+ ucp_Common,
+ ucp_Armenian,
ucp_Hebrew,
- ucp_Hiragana,
- ucp_Inherited,
- ucp_Kannada,
- ucp_Katakana,
- ucp_Kharoshthi,
- ucp_Khmer,
+ ucp_Thai,
ucp_Lao,
- ucp_Latin,
- ucp_Limbu,
- ucp_Linear_B,
- ucp_Malayalam,
- ucp_Mongolian,
- ucp_Myanmar,
- ucp_New_Tai_Lue,
+ ucp_Tibetan,
+ ucp_Ethiopic,
+ ucp_Cherokee,
+ ucp_Canadian_Aboriginal,
ucp_Ogham,
+ ucp_Runic,
+ ucp_Khmer,
ucp_Old_Italic,
- ucp_Old_Persian,
- ucp_Oriya,
+ ucp_Gothic,
+ ucp_Deseret,
+ ucp_Inherited,
+ ucp_Ugaritic,
+ ucp_Shavian,
ucp_Osmanya,
- ucp_Runic,
- ucp_Shavian,
- ucp_Sinhala,
- ucp_Syloti_Nagri,
- ucp_Syriac,
- ucp_Tagalog,
- ucp_Tagbanwa,
- ucp_Tai_Le,
- ucp_Tamil,
- ucp_Telugu,
- ucp_Thaana,
- ucp_Thai,
- ucp_Tibetan,
+ ucp_Braille,
+ ucp_New_Tai_Lue,
ucp_Tifinagh,
- ucp_Ugaritic,
- ucp_Yi,
- /* New for Unicode 5.0 */
+ ucp_Old_Persian,
+ ucp_Kharoshthi,
ucp_Balinese,
ucp_Cuneiform,
- ucp_Nko,
- ucp_Phags_Pa,
ucp_Phoenician,
- /* New for Unicode 5.1 */
- ucp_Carian,
- ucp_Cham,
- ucp_Kayah_Li,
+ ucp_Sundanese,
ucp_Lepcha,
+ ucp_Ol_Chiki,
+ ucp_Vai,
+ ucp_Saurashtra,
+ ucp_Rejang,
ucp_Lycian,
+ ucp_Carian,
ucp_Lydian,
- ucp_Ol_Chiki,
- ucp_Rejang,
- ucp_Saurashtra,
- ucp_Sundanese,
- ucp_Vai,
- /* New for Unicode 5.2 */
+ ucp_Cham,
+ ucp_Tai_Tham,
+ ucp_Tai_Viet,
ucp_Avestan,
- ucp_Bamum,
ucp_Egyptian_Hieroglyphs,
- ucp_Imperial_Aramaic,
- ucp_Inscriptional_Pahlavi,
- ucp_Inscriptional_Parthian,
- ucp_Javanese,
- ucp_Kaithi,
+ ucp_Samaritan,
ucp_Lisu,
+ ucp_Bamum,
ucp_Meetei_Mayek,
+ ucp_Imperial_Aramaic,
ucp_Old_South_Arabian,
+ ucp_Inscriptional_Parthian,
+ ucp_Inscriptional_Pahlavi,
ucp_Old_Turkic,
- ucp_Samaritan,
- ucp_Tai_Tham,
- ucp_Tai_Viet,
- /* New for Unicode 6.0.0 */
ucp_Batak,
ucp_Brahmi,
- ucp_Mandaic,
- /* New for Unicode 6.1.0 */
- ucp_Chakma,
ucp_Meroitic_Cursive,
ucp_Meroitic_Hieroglyphs,
ucp_Miao,
- ucp_Sharada,
ucp_Sora_Sompeng,
- ucp_Takri,
- /* New for Unicode 7.0.0 */
+ ucp_Caucasian_Albanian,
ucp_Bassa_Vah,
- ucp_Caucasian_Albanian,
- ucp_Duployan,
ucp_Elbasan,
- ucp_Grantha,
- ucp_Khojki,
- ucp_Khudawadi,
- ucp_Linear_A,
- ucp_Mahajani,
- ucp_Manichaean,
+ ucp_Pahawh_Hmong,
ucp_Mende_Kikakui,
- ucp_Modi,
ucp_Mro,
+ ucp_Old_North_Arabian,
ucp_Nabataean,
- ucp_Old_North_Arabian,
- ucp_Old_Permic,
- ucp_Pahawh_Hmong,
ucp_Palmyrene,
- ucp_Psalter_Pahlavi,
ucp_Pau_Cin_Hau,
ucp_Siddham,
- ucp_Tirhuta,
ucp_Warang_Citi,
- /* New for Unicode 8.0.0 */
ucp_Ahom,
ucp_Anatolian_Hieroglyphs,
ucp_Hatran,
- ucp_Multani,
ucp_Old_Hungarian,
ucp_SignWriting,
- /* New for Unicode 10.0.0 (no update since 8.0.0) */
- ucp_Adlam,
ucp_Bhaiksuki,
ucp_Marchen,
ucp_Newa,
ucp_Osage,
ucp_Tangut,
- ucp_Masaram_Gondi,
ucp_Nushu,
ucp_Soyombo,
ucp_Zanabazar_Square,
- /* New for Unicode 11.0.0 */
- ucp_Dogra,
- ucp_Gunjala_Gondi,
- ucp_Hanifi_Rohingya,
ucp_Makasar,
ucp_Medefaidrin,
ucp_Old_Sogdian,
- ucp_Sogdian,
- /* New for Unicode 12.0.0 */
ucp_Elymaic,
- ucp_Nandinagari,
ucp_Nyiakeng_Puachue_Hmong,
ucp_Wancho,
- /* New for Unicode 13.0.0 */
ucp_Chorasmian,
ucp_Dives_Akuru,
ucp_Khitan_Small_Script,
- ucp_Yezidi,
- /* New for Unicode 14.0.0 */
- ucp_Cypro_Minoan,
- ucp_Old_Uyghur,
ucp_Tangsa,
ucp_Toto,
- ucp_Vithkuqi
+ ucp_Vithkuqi,
+
+ /* This must be last */
+ ucp_Script_Count
};
+/* Size of entries in ucd_script_sets[] */
+
+#define ucd_script_sets_item_size 3
+
#endif /* PCRE2_UCP_H_IDEMPOTENT_GUARD */
/* End of pcre2_ucp.h */
Modified: trunk/MgDev/Oem/php/include/ext/pdo/php_pdo.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/pdo/php_pdo.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/pdo/php_pdo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -53,6 +53,8 @@
#define REGISTER_PDO_CLASS_CONST_STRING(const_name, value) \
zend_declare_class_constant_stringl(php_pdo_get_dbh_ce(), const_name, sizeof(const_name)-1, value, sizeof(value)-1);
+#define LONG_CONST(c) (zend_long) c
+
#define PDO_CONSTRUCT_CHECK \
if (!dbh->driver) { \
zend_throw_error(NULL, "PDO object is not initialized, constructor was not called"); \
Modified: trunk/MgDev/Oem/php/include/ext/pdo/php_pdo_driver.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/pdo/php_pdo_driver.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/pdo/php_pdo_driver.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -672,7 +672,7 @@
PDO_API int pdo_parse_params(pdo_stmt_t *stmt, zend_string *inquery, zend_string **outquery);
PDO_API void pdo_raise_impl_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt,
- const char *sqlstate, const char *supp);
+ pdo_error_type sqlstate, const char *supp);
PDO_API void php_pdo_dbh_addref(pdo_dbh_t *dbh);
PDO_API void php_pdo_dbh_delref(pdo_dbh_t *dbh);
Added: trunk/MgDev/Oem/php/include/ext/random/php_random.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/random/php_random.h (rev 0)
+++ trunk/MgDev/Oem/php/include/ext/random/php_random.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -0,0 +1,326 @@
+/*
+ +----------------------------------------------------------------------+
+ | Copyright (c) The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | https://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license at php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Rasmus Lerdorf <rasmus at php.net> |
+ | Zeev Suraski <zeev at php.net> |
+ | Sascha Schumann <sascha at schumann.cx> |
+ | Pedro Melo <melo at ip.pt> |
+ | Sterling Hughes <sterling at php.net> |
+ | Sammy Kaye Powers <me at sammyk.me> |
+ | Go Kudo <zeriyoshi at php.net> |
+ | |
+ | Based on code from: Richard J. Wagner <rjwagner at writeme.com> |
+ | Makoto Matsumoto <matumoto at math.keio.ac.jp> |
+ | Takuji Nishimura |
+ | Shawn Cokus <Cokus at math.washington.edu> |
+ | David Blackman |
+ | Sebastiano Vigna <vigna at acm.org> |
+ | Melissa O'Neill <oneill at pcg-random.org> |
+ +----------------------------------------------------------------------+
+*/
+
+#ifndef PHP_RANDOM_H
+# define PHP_RANDOM_H
+
+PHPAPI double php_combined_lcg(void);
+
+/*
+ * A bit of tricky math here. We want to avoid using a modulus because
+ * that simply tosses the high-order bits and might skew the distribution
+ * of random values over the range. Instead we map the range directly.
+ *
+ * We need to map the range from 0...M evenly to the range a...b
+ * Let n = the random number and n' = the mapped random number
+ *
+ * Then we have: n' = a + n(b-a)/M
+ *
+ * We have a problem here in that only n==M will get mapped to b which
+ * means the chances of getting b is much much less than getting any of
+ * the other values in the range. We can fix this by increasing our range
+ * artificially and using:
+ *
+ * n' = a + n(b-a+1)/M
+ *
+ * Now we only have a problem if n==M which would cause us to produce a
+ * number of b+1 which would be bad. So we bump M up by one to make sure
+ * this will never happen, and the final algorithm looks like this:
+ *
+ * n' = a + n(b-a+1)/(M+1)
+ *
+ * -RL
+ */
+# define RAND_RANGE_BADSCALING(__n, __min, __max, __tmax) \
+ (__n) = (__min) + (zend_long) ((double) ( (double) (__max) - (__min) + 1.0) * ((__n) / ((__tmax) + 1.0)))
+
+# ifdef PHP_WIN32
+# define GENERATE_SEED() (((zend_long) (time(0) * GetCurrentProcessId())) ^ ((zend_long) (1000000.0 * php_combined_lcg())))
+# else
+# define GENERATE_SEED() (((zend_long) (time(0) * getpid())) ^ ((zend_long) (1000000.0 * php_combined_lcg())))
+# endif
+
+# define PHP_MT_RAND_MAX ((zend_long) (0x7FFFFFFF)) /* (1<<31) - 1 */
+
+# define MT_RAND_MT19937 0
+# define MT_RAND_PHP 1
+
+# define MT_N (624)
+
+PHPAPI void php_mt_srand(uint32_t seed);
+PHPAPI uint32_t php_mt_rand(void);
+PHPAPI zend_long php_mt_rand_range(zend_long min, zend_long max);
+PHPAPI zend_long php_mt_rand_common(zend_long min, zend_long max);
+
+# ifndef RAND_MAX
+# define RAND_MAX PHP_MT_RAND_MAX
+# endif
+
+# define PHP_RAND_MAX PHP_MT_RAND_MAX
+
+PHPAPI void php_srand(zend_long seed);
+PHPAPI zend_long php_rand(void);
+
+# if !defined(__SIZEOF_INT128__) || defined(PHP_RANDOM_FORCE_EMULATE_128)
+typedef struct _php_random_uint128_t {
+ uint64_t hi;
+ uint64_t lo;
+} php_random_uint128_t;
+
+static inline uint64_t php_random_uint128_hi(php_random_uint128_t num)
+{
+ return num.hi;
+}
+
+static inline uint64_t php_random_uint128_lo(php_random_uint128_t num)
+{
+ return num.lo;
+}
+
+static inline php_random_uint128_t php_random_uint128_constant(uint64_t hi, uint64_t lo)
+{
+ php_random_uint128_t r;
+
+ r.hi = hi;
+ r.lo = lo;
+
+ return r;
+}
+
+static inline php_random_uint128_t php_random_uint128_add(php_random_uint128_t num1, php_random_uint128_t num2)
+{
+ php_random_uint128_t r;
+
+ r.lo = (num1.lo + num2.lo);
+ r.hi = (num1.hi + num2.hi + (r.lo < num1.lo));
+
+ return r;
+}
+
+static inline php_random_uint128_t php_random_uint128_multiply(php_random_uint128_t num1, php_random_uint128_t num2)
+{
+ php_random_uint128_t r;
+ const uint64_t
+ x0 = num1.lo & 0xffffffffULL,
+ x1 = num1.lo >> 32,
+ y0 = num2.lo & 0xffffffffULL,
+ y1 = num2.lo >> 32,
+ z0 = (((x1 * y0) + (x0 * y0 >> 32)) & 0xffffffffULL) + x0 * y1;
+
+ r.hi = num1.hi * num2.lo + num1.lo * num2.hi;
+ r.lo = num1.lo * num2.lo;
+ r.hi += x1 * y1 + ((x1 * y0 + (x0 * y0 >> 32)) >> 32) + (z0 >> 32);
+
+ return r;
+}
+
+static inline uint64_t php_random_pcgoneseq128xslrr64_rotr64(php_random_uint128_t num)
+{
+ const uint64_t
+ v = (num.hi ^ num.lo),
+ s = num.hi >> 58U;
+
+ return (v >> s) | (v << ((-s) & 63));
+}
+# else
+typedef __uint128_t php_random_uint128_t;
+
+static inline uint64_t php_random_uint128_hi(php_random_uint128_t num)
+{
+ return (uint64_t) (num >> 64);
+}
+
+static inline uint64_t php_random_uint128_lo(php_random_uint128_t num)
+{
+ return (uint64_t) num;
+}
+
+static inline php_random_uint128_t php_random_uint128_constant(uint64_t hi, uint64_t lo)
+{
+ php_random_uint128_t r;
+
+ r = ((php_random_uint128_t) hi << 64) + lo;
+
+ return r;
+}
+
+static inline php_random_uint128_t php_random_uint128_add(php_random_uint128_t num1, php_random_uint128_t num2)
+{
+ return num1 + num2;
+}
+
+static inline php_random_uint128_t php_random_uint128_multiply(php_random_uint128_t num1, php_random_uint128_t num2)
+{
+ return num1 * num2;
+}
+
+static inline uint64_t php_random_pcgoneseq128xslrr64_rotr64(php_random_uint128_t num)
+{
+ const uint64_t
+ v = ((uint64_t) (num >> 64U)) ^ (uint64_t) num,
+ s = num >> 122U;
+
+ return (v >> s) | (v << ((-s) & 63));
+}
+# endif
+
+# define php_random_bytes_throw(b, s) php_random_bytes((b), (s), 1)
+# define php_random_bytes_silent(b, s) php_random_bytes((b), (s), 0)
+# define php_random_int_throw(min, max, result) php_random_int((min), (max), (result), 1)
+# define php_random_int_silent(min, max, result) php_random_int((min), (max), (result), 0)
+
+PHPAPI int php_random_bytes(void *bytes, size_t size, bool should_throw);
+PHPAPI int php_random_int(zend_long min, zend_long max, zend_long *result, bool should_throw);
+
+typedef struct _php_random_status_ {
+ size_t last_generated_size;
+ void *state;
+} php_random_status;
+
+typedef struct _php_random_status_state_combinedlcg {
+ int32_t state[2];
+} php_random_status_state_combinedlcg;
+
+typedef struct _php_random_status_state_mt19937 {
+ uint32_t state[MT_N];
+ uint32_t count;
+ uint8_t mode;
+} php_random_status_state_mt19937;
+
+typedef struct _php_random_status_state_pcgoneseq128xslrr64 {
+ php_random_uint128_t state;
+} php_random_status_state_pcgoneseq128xslrr64;
+
+typedef struct _php_random_status_state_xoshiro256starstar {
+ uint64_t state[4];
+} php_random_status_state_xoshiro256starstar;
+
+typedef struct _php_random_status_state_user {
+ zend_object *object;
+ zend_function *generate_method;
+} php_random_status_state_user;
+
+typedef struct _php_random_algo {
+ const size_t generate_size;
+ const size_t state_size;
+ void (*seed)(php_random_status *status, uint64_t seed);
+ uint64_t (*generate)(php_random_status *status);
+ zend_long (*range)(php_random_status *status, zend_long min, zend_long max);
+ bool (*serialize)(php_random_status *status, HashTable *data);
+ bool (*unserialize)(php_random_status *status, HashTable *data);
+} php_random_algo;
+
+extern PHPAPI const php_random_algo php_random_algo_combinedlcg;
+extern PHPAPI const php_random_algo php_random_algo_mt19937;
+extern PHPAPI const php_random_algo php_random_algo_pcgoneseq128xslrr64;
+extern PHPAPI const php_random_algo php_random_algo_xoshiro256starstar;
+extern PHPAPI const php_random_algo php_random_algo_secure;
+extern PHPAPI const php_random_algo php_random_algo_user;
+
+typedef struct _php_random_engine {
+ const php_random_algo *algo;
+ php_random_status *status;
+ zend_object std;
+} php_random_engine;
+
+typedef struct _php_random_randomizer {
+ const php_random_algo *algo;
+ php_random_status *status;
+ bool is_userland_algo;
+ zend_object std;
+} php_random_randomizer;
+
+extern PHPAPI zend_class_entry *random_ce_Random_Engine;
+extern PHPAPI zend_class_entry *random_ce_Random_CryptoSafeEngine;
+
+extern PHPAPI zend_class_entry *random_ce_Random_RandomError;
+extern PHPAPI zend_class_entry *random_ce_Random_BrokenRandomEngineError;
+extern PHPAPI zend_class_entry *random_ce_Random_RandomException;
+
+extern PHPAPI zend_class_entry *random_ce_Random_Engine_PcgOneseq128XslRr64;
+extern PHPAPI zend_class_entry *random_ce_Random_Engine_Mt19937;
+extern PHPAPI zend_class_entry *random_ce_Random_Engine_Xoshiro256StarStar;
+extern PHPAPI zend_class_entry *random_ce_Random_Engine_Secure;
+extern PHPAPI zend_class_entry *random_ce_Random_Randomizer;
+
+static inline php_random_engine *php_random_engine_from_obj(zend_object *object) {
+ return (php_random_engine *)((char *)(object) - XtOffsetOf(php_random_engine, std));
+}
+
+static inline php_random_randomizer *php_random_randomizer_from_obj(zend_object *object) {
+ return (php_random_randomizer *)((char *)(object) - XtOffsetOf(php_random_randomizer, std));
+}
+
+# define Z_RANDOM_ENGINE_P(zval) php_random_engine_from_obj(Z_OBJ_P(zval))
+
+# define Z_RANDOM_RANDOMIZER_P(zval) php_random_randomizer_from_obj(Z_OBJ_P(zval));
+
+PHPAPI php_random_status *php_random_status_alloc(const php_random_algo *algo, const bool persistent);
+PHPAPI php_random_status *php_random_status_copy(const php_random_algo *algo, php_random_status *old_status, php_random_status *new_status);
+PHPAPI void php_random_status_free(php_random_status *status, const bool persistent);
+PHPAPI php_random_engine *php_random_engine_common_init(zend_class_entry *ce, zend_object_handlers *handlers, const php_random_algo *algo);
+PHPAPI void php_random_engine_common_free_object(zend_object *object);
+PHPAPI zend_object *php_random_engine_common_clone_object(zend_object *object);
+PHPAPI zend_long php_random_range(const php_random_algo *algo, php_random_status *status, zend_long min, zend_long max);
+PHPAPI const php_random_algo *php_random_default_algo(void);
+PHPAPI php_random_status *php_random_default_status(void);
+
+PHPAPI zend_string *php_random_bin2hex_le(const void *ptr, const size_t len);
+PHPAPI bool php_random_hex2bin_le(zend_string *hexstr, void *dest);
+
+PHPAPI void php_random_combinedlcg_seed_default(php_random_status_state_combinedlcg *state);
+
+PHPAPI void php_random_mt19937_seed_default(php_random_status_state_mt19937 *state);
+
+PHPAPI void php_random_pcgoneseq128xslrr64_advance(php_random_status_state_pcgoneseq128xslrr64 *state, uint64_t advance);
+
+PHPAPI void php_random_xoshiro256starstar_jump(php_random_status_state_xoshiro256starstar *state);
+PHPAPI void php_random_xoshiro256starstar_jump_long(php_random_status_state_xoshiro256starstar *state);
+
+extern zend_module_entry random_module_entry;
+# define phpext_random_ptr &random_module_entry
+
+PHP_MINIT_FUNCTION(random);
+PHP_MSHUTDOWN_FUNCTION(random);
+PHP_RINIT_FUNCTION(random);
+
+ZEND_BEGIN_MODULE_GLOBALS(random)
+ php_random_status *combined_lcg;
+ bool combined_lcg_seeded;
+ php_random_status *mt19937;
+ bool mt19937_seeded;
+ int random_fd;
+ZEND_END_MODULE_GLOBALS(random)
+
+PHPAPI ZEND_EXTERN_MODULE_GLOBALS(random)
+
+# define RANDOM_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(random, v)
+
+#endif /* PHP_RANDOM_H */
Modified: trunk/MgDev/Oem/php/include/ext/session/php_session.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/session/php_session.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/session/php_session.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -39,29 +39,29 @@
typedef struct ps_module_struct {
const char *s_name;
- int (*s_open)(PS_OPEN_ARGS);
- int (*s_close)(PS_CLOSE_ARGS);
- int (*s_read)(PS_READ_ARGS);
- int (*s_write)(PS_WRITE_ARGS);
- int (*s_destroy)(PS_DESTROY_ARGS);
+ zend_result (*s_open)(PS_OPEN_ARGS);
+ zend_result (*s_close)(PS_CLOSE_ARGS);
+ zend_result (*s_read)(PS_READ_ARGS);
+ zend_result (*s_write)(PS_WRITE_ARGS);
+ zend_result (*s_destroy)(PS_DESTROY_ARGS);
zend_long (*s_gc)(PS_GC_ARGS);
zend_string *(*s_create_sid)(PS_CREATE_SID_ARGS);
- int (*s_validate_sid)(PS_VALIDATE_SID_ARGS);
- int (*s_update_timestamp)(PS_UPDATE_TIMESTAMP_ARGS);
+ zend_result (*s_validate_sid)(PS_VALIDATE_SID_ARGS);
+ zend_result (*s_update_timestamp)(PS_UPDATE_TIMESTAMP_ARGS);
} ps_module;
#define PS_GET_MOD_DATA() *mod_data
#define PS_SET_MOD_DATA(a) *mod_data = (a)
-#define PS_OPEN_FUNC(x) int ps_open_##x(PS_OPEN_ARGS)
-#define PS_CLOSE_FUNC(x) int ps_close_##x(PS_CLOSE_ARGS)
-#define PS_READ_FUNC(x) int ps_read_##x(PS_READ_ARGS)
-#define PS_WRITE_FUNC(x) int ps_write_##x(PS_WRITE_ARGS)
-#define PS_DESTROY_FUNC(x) int ps_delete_##x(PS_DESTROY_ARGS)
+#define PS_OPEN_FUNC(x) zend_result ps_open_##x(PS_OPEN_ARGS)
+#define PS_CLOSE_FUNC(x) zend_result ps_close_##x(PS_CLOSE_ARGS)
+#define PS_READ_FUNC(x) zend_result ps_read_##x(PS_READ_ARGS)
+#define PS_WRITE_FUNC(x) zend_result ps_write_##x(PS_WRITE_ARGS)
+#define PS_DESTROY_FUNC(x) zend_result ps_delete_##x(PS_DESTROY_ARGS)
#define PS_GC_FUNC(x) zend_long ps_gc_##x(PS_GC_ARGS)
#define PS_CREATE_SID_FUNC(x) zend_string *ps_create_sid_##x(PS_CREATE_SID_ARGS)
-#define PS_VALIDATE_SID_FUNC(x) int ps_validate_sid_##x(PS_VALIDATE_SID_ARGS)
-#define PS_UPDATE_TIMESTAMP_FUNC(x) int ps_update_timestamp_##x(PS_UPDATE_TIMESTAMP_ARGS)
+#define PS_VALIDATE_SID_FUNC(x) zend_result ps_validate_sid_##x(PS_VALIDATE_SID_ARGS)
+#define PS_UPDATE_TIMESTAMP_FUNC(x) zend_result ps_update_timestamp_##x(PS_UPDATE_TIMESTAMP_ARGS)
/* Legacy save handler module definitions */
#define PS_FUNCS(x) \
@@ -174,8 +174,9 @@
zval ps_update_timestamp;
} name;
} mod_user_names;
- int mod_user_implemented;
- int mod_user_is_open;
+ bool mod_user_implemented;
+ bool mod_user_is_open;
+ zend_string *mod_user_class_name;
const struct ps_serializer_struct *serializer;
zval http_session_vars;
bool auto_start;
@@ -185,8 +186,8 @@
zend_long sid_length;
zend_long sid_bits_per_character;
- int send_cookie;
- int define_sid;
+ bool send_cookie;
+ bool define_sid;
php_session_rfc1867_progress *rfc1867_progress;
bool rfc1867_enabled; /* session.upload_progress.enabled */
@@ -223,7 +224,7 @@
typedef struct ps_serializer_struct {
const char *name;
zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS);
- int (*decode)(PS_SERIALIZER_DECODE_ARGS);
+ zend_result (*decode)(PS_SERIALIZER_DECODE_ARGS);
} ps_serializer;
#define PS_SERIALIZER_ENCODE_NAME(x) ps_srlzr_encode_##x
@@ -232,7 +233,7 @@
#define PS_SERIALIZER_ENCODE_FUNC(x) \
zend_string *PS_SERIALIZER_ENCODE_NAME(x)(PS_SERIALIZER_ENCODE_ARGS)
#define PS_SERIALIZER_DECODE_FUNC(x) \
- int PS_SERIALIZER_DECODE_NAME(x)(PS_SERIALIZER_DECODE_ARGS)
+ zend_result PS_SERIALIZER_DECODE_NAME(x)(PS_SERIALIZER_DECODE_ARGS)
#define PS_SERIALIZER_FUNCS(x) \
PS_SERIALIZER_ENCODE_FUNC(x); \
@@ -244,30 +245,30 @@
/* default create id function */
PHPAPI zend_string *php_session_create_id(PS_CREATE_SID_ARGS);
/* Dummy PS module functions */
-PHPAPI int php_session_validate_sid(PS_VALIDATE_SID_ARGS);
-PHPAPI int php_session_update_timestamp(PS_UPDATE_TIMESTAMP_ARGS);
+PHPAPI zend_result php_session_validate_sid(PS_VALIDATE_SID_ARGS);
+PHPAPI zend_result php_session_update_timestamp(PS_UPDATE_TIMESTAMP_ARGS);
PHPAPI void session_adapt_url(const char *url, size_t url_len, char **new_url, size_t *new_len);
-PHPAPI int php_session_destroy(void);
+PHPAPI zend_result php_session_destroy(void);
PHPAPI void php_add_session_var(zend_string *name);
PHPAPI zval *php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash);
PHPAPI zval *php_get_session_var(zend_string *name);
-PHPAPI int php_session_register_module(const ps_module *);
+PHPAPI zend_result php_session_register_module(const ps_module *);
-PHPAPI int php_session_register_serializer(const char *name,
+PHPAPI zend_result php_session_register_serializer(const char *name,
zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS),
- int (*decode)(PS_SERIALIZER_DECODE_ARGS));
+ zend_result (*decode)(PS_SERIALIZER_DECODE_ARGS));
-PHPAPI int php_session_start(void);
-PHPAPI int php_session_flush(int write);
+PHPAPI zend_result php_session_start(void);
+PHPAPI zend_result php_session_flush(int write);
PHPAPI const ps_module *_php_find_ps_module(const char *name);
PHPAPI const ps_serializer *_php_find_ps_serializer(const char *name);
-PHPAPI int php_session_valid_key(const char *key);
-PHPAPI int php_session_reset_id(void);
+PHPAPI zend_result php_session_valid_key(const char *key);
+PHPAPI zend_result php_session_reset_id(void);
#define PS_ADD_VARL(name) do { \
php_add_session_var(name); \
Modified: trunk/MgDev/Oem/php/include/ext/sockets/php_sockets.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/sockets/php_sockets.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/sockets/php_sockets.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -136,4 +136,271 @@
# define ss_family __ss_family
#endif
+#ifndef MSG_EOF
+#ifdef MSG_FIN
+#define MSG_EOF MSG_FIN
#endif
+#endif
+
+#ifndef MSG_WAITALL
+#ifdef LINUX
+#define MSG_WAITALL 0x00000100
+#else
+#define MSG_WAITALL 0x00000000
+#endif
+#endif
+
+#define PHP_NORMAL_READ 0x0001
+#define PHP_BINARY_READ 0x0002
+
+#ifdef WIN32
+#define PHP_SOCKET_EINTR WSAEINTR
+#elif defined(EINTR)
+#define PHP_SOCKET_EINTR EINTR
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EBADF WSAEBADF
+#elif defined(EBADF)
+#define PHP_SOCKET_EBADF EBADF
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EACCES WSAEACCES
+#elif defined(EACCES)
+#define PHP_SOCKET_EACCES EACCES
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EFAULT WSAEFAULT
+#elif defined(EFAULT)
+#define PHP_SOCKET_EFAULT EFAULT
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EINVAL WSAEINVAL
+#elif defined(EINVAL)
+#define PHP_SOCKET_EINVAL EINVAL
+#endif
+
+#ifdef ENFILE
+#define PHP_SOCKET_ENFILE ENFILE
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EMFILE WSAEMFILE
+#elif defined(EMFILE)
+#define PHP_SOCKET_EMFILE EMFILE
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EWOULDBLOCK WSAEWOULDBLOCK
+#elif defined(EWOULDBLOCK)
+#define PHP_SOCKET_EWOULDBLOCK EWOULDBLOCK
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EINPROGRESS WSAEINPROGRESS
+#elif defined(EINPROGRESS)
+#define PHP_SOCKET_EINPROGRESS EINPROGRESS
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EALREADY WSAEALREADY
+#elif defined(EALREADY)
+#define PHP_SOCKET_EALREADY EALREADY
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ENOTSOCK WSAENOTSOCK
+#elif defined(ENOTSOCK)
+#define PHP_SOCKET_ENOTSOCK ENOTSOCK
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EDESTADDRREQ WSAEDESTADDRREQ
+#elif defined(EDESTADDRREQ)
+#define PHP_SOCKET_EDESTADDRREQ EDESTADDRREQ
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EMSGSIZE WSAEMSGSIZE
+#elif defined(EMSGSIZE)
+#define PHP_SOCKET_EMSGSIZE EMSGSIZE
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EPROTOTYPE WSAEPROTOTYPE
+#elif defined(EPROTOTYPE)
+#define PHP_SOCKET_EPROTOTYPE EPROTOTYPE
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ENOPROTOOPT WSAENOPROTOOPT
+#elif defined(ENOPROTOOPT)
+#define PHP_SOCKET_ENOPROTOOPT ENOPROTOOPT
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EPROTONOSUPPORT WSAEPROTONOSUPPORT
+#elif defined(EPROTONOSUPPORT)
+#define PHP_SOCKET_EPROTONOSUPPORT EPROTONOSUPPORT
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#elif defined(ESOCKTNOSUPPORT)
+#define PHP_SOCKET_ESOCKTNOSUPPORT ESOCKTNOSUPPORT
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EOPNOTSUPP WSAEOPNOTSUPP
+#elif defined(EOPNOTSUPP)
+#define PHP_SOCKET_EOPNOTSUPP EOPNOTSUPP
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EPFNOSUPPORT WSAEPFNOSUPPORT
+#elif defined(EPFNOSUPPORT)
+#define PHP_SOCKET_EPFNOSUPPORT EPFNOSUPPORT
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EAFNOSUPPORT WSAEAFNOSUPPORT
+#elif defined(EAFNOSUPPORT)
+#define PHP_SOCKET_EAFNOSUPPORT EAFNOSUPPORT
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EADDRINUSE WSAEADDRINUSE
+#elif defined(EADDRINUSE)
+#define PHP_SOCKET_EADDRINUSE EADDRINUSE
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EADDRNOTAVAIL WSAEADDRNOTAVAIL
+#elif defined(EADDRNOTAVAIL)
+#define PHP_SOCKET_EADDRNOTAVAIL EADDRNOTAVAIL
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ENETDOWN WSAENETDOWN
+#elif defined(ENETDOWN)
+#define PHP_SOCKET_ENETDOWN ENETDOWN
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ENETUNREACH WSAENETUNREACH
+#elif defined(ENETUNREACH)
+#define PHP_SOCKET_ENETUNREACH ENETUNREACH
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ENETRESET WSAENETRESET
+#elif defined(ENETRESET)
+#define PHP_SOCKET_ENETRESET ENETRESET
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ECONNABORTED WSAECONNABORTED
+#elif defined(ECONNABORTED)
+#define PHP_SOCKET_ECONNABORTED ECONNABORTED
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ECONNRESET WSAECONNRESET
+#elif defined(ECONNRESET)
+#define PHP_SOCKET_ECONNRESET ECONNRESET
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ENOBUFS WSAENOBUFS
+#elif defined(ENOBUFS)
+#define PHP_SOCKET_ENOBUFS ENOBUFS
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EISCONN WSAEISCONN
+#elif defined(EISCONN)
+#define PHP_SOCKET_EISCONN EISCONN
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ENOTCONN WSAENOTCONN
+#elif defined(ENOTCONN)
+#define PHP_SOCKET_ENOTCONN ENOTCONN
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ESHUTDOWN WSAESHUTDOWN
+#elif defined(ESHUTDOWN)
+#define PHP_SOCKET_ESHUTDOWN ESHUTDOWN
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ETOOMANYREFS WSAETOOMANYREFS
+#elif defined(ETOOMANYREFS)
+#define PHP_SOCKET_ETOOMANYREFS ETOOMANYREFS
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ETIMEDOUT WSAETIMEDOUT
+#elif defined(ETIMEDOUT)
+#define PHP_SOCKET_ETIMEDOUT ETIMEDOUT
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ECONNREFUSED WSAECONNREFUSED
+#elif defined(ECONNREFUSED)
+#define PHP_SOCKET_ECONNREFUSED ECONNREFUSED
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ELOOP WSAELOOP
+#elif defined(ELOOP)
+#define PHP_SOCKET_ELOOP ELOOP
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ENAMETOOLONG WSAENAMETOOLONG
+#elif defined(ENAMETOOLONG)
+#define PHP_SOCKET_ENAMETOOLONG ENAMETOOLONG
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EHOSTDOWN WSAEHOSTDOWN
+#elif defined(EHOSTDOWN)
+#define PHP_SOCKET_EHOSTDOWN EHOSTDOWN
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EHOSTUNREACH WSAEHOSTUNREACH
+#elif defined(EHOSTUNREACH)
+#define PHP_SOCKET_EHOSTUNREACH EHOSTUNREACH
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_ENOTEMPTY WSAENOTEMPTY
+#elif defined(ENOTEMPTY)
+#define PHP_SOCKET_ENOTEMPTY ENOTEMPTY
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EUSERS WSAEUSERS
+#elif defined(EUSERS)
+#define PHP_SOCKET_EUSERS EUSERS
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EDQUOT WSAEDQUOT
+#elif defined(EDQUOT)
+#define PHP_SOCKET_EDQUOT EDQUOT
+#endif
+
+#ifdef WIN32
+#define PHP_SOCKET_EREMOTE WSAEREMOTE
+#elif defined(EREMOTE)
+#define PHP_SOCKET_EREMOTE EREMOTE
+#endif
+
+#endif
Modified: trunk/MgDev/Oem/php/include/ext/sodium/php_libsodium.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/sodium/php_libsodium.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/sodium/php_libsodium.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -26,6 +26,14 @@
# include "TSRM.h"
#endif
+#define SODIUM_LIBRARY_VERSION() (char *) (void *) sodium_version_string()
+
+#define SODIUM_CRYPTO_BOX_KEYPAIRBYTES() crypto_box_SECRETKEYBYTES + crypto_box_PUBLICKEYBYTES
+
+#define SODIUM_CRYPTO_KX_KEYPAIRBYTES() crypto_kx_SECRETKEYBYTES + crypto_kx_PUBLICKEYBYTES
+
+#define SODIUM_CRYPTO_SIGN_KEYPAIRBYTES() crypto_sign_SECRETKEYBYTES + crypto_sign_PUBLICKEYBYTES
+
PHP_MINIT_FUNCTION(sodium);
PHP_MINIT_FUNCTION(sodium_password_hash);
PHP_MSHUTDOWN_FUNCTION(sodium);
@@ -33,108 +41,4 @@
PHP_RSHUTDOWN_FUNCTION(sodium);
PHP_MINFO_FUNCTION(sodium);
-PHP_FUNCTION(sodium_add);
-PHP_FUNCTION(sodium_base642bin);
-PHP_FUNCTION(sodium_bin2base64);
-PHP_FUNCTION(sodium_bin2hex);
-PHP_FUNCTION(sodium_compare);
-PHP_FUNCTION(sodium_crypto_aead_aes256gcm_decrypt);
-PHP_FUNCTION(sodium_crypto_aead_aes256gcm_encrypt);
-PHP_FUNCTION(sodium_crypto_aead_aes256gcm_is_available);
-PHP_FUNCTION(sodium_crypto_aead_aes256gcm_keygen);
-PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_decrypt);
-PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_encrypt);
-PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_ietf_decrypt);
-PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_ietf_encrypt);
-PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_ietf_keygen);
-PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_keygen);
-PHP_FUNCTION(sodium_crypto_aead_xchacha20poly1305_ietf_decrypt);
-PHP_FUNCTION(sodium_crypto_aead_xchacha20poly1305_ietf_encrypt);
-PHP_FUNCTION(sodium_crypto_aead_xchacha20poly1305_ietf_keygen);
-PHP_FUNCTION(sodium_crypto_auth);
-PHP_FUNCTION(sodium_crypto_auth_keygen);
-PHP_FUNCTION(sodium_crypto_auth_verify);
-PHP_FUNCTION(sodium_crypto_box);
-PHP_FUNCTION(sodium_crypto_box_keypair);
-PHP_FUNCTION(sodium_crypto_box_keypair_from_secretkey_and_publickey);
-PHP_FUNCTION(sodium_crypto_box_open);
-PHP_FUNCTION(sodium_crypto_box_publickey);
-PHP_FUNCTION(sodium_crypto_box_publickey_from_secretkey);
-PHP_FUNCTION(sodium_crypto_box_seal);
-PHP_FUNCTION(sodium_crypto_box_seal_open);
-PHP_FUNCTION(sodium_crypto_box_secretkey);
-PHP_FUNCTION(sodium_crypto_box_seed_keypair);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_add);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_from_hash);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_is_valid_point);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_random);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_scalar_add);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_scalar_complement);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_scalar_invert);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_scalar_mul);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_scalar_negate);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_scalar_random);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_scalar_reduce);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_scalar_sub);
-PHP_FUNCTION(sodium_crypto_core_ristretto255_sub);
-PHP_FUNCTION(sodium_crypto_generichash);
-PHP_FUNCTION(sodium_crypto_generichash_final);
-PHP_FUNCTION(sodium_crypto_generichash_init);
-PHP_FUNCTION(sodium_crypto_generichash_keygen);
-PHP_FUNCTION(sodium_crypto_generichash_update);
-PHP_FUNCTION(sodium_crypto_kdf_derive_from_key);
-PHP_FUNCTION(sodium_crypto_kdf_keygen);
-PHP_FUNCTION(sodium_crypto_kx_client_session_keys);
-PHP_FUNCTION(sodium_crypto_kx_keypair);
-PHP_FUNCTION(sodium_crypto_kx_publickey);
-PHP_FUNCTION(sodium_crypto_kx_secretkey);
-PHP_FUNCTION(sodium_crypto_kx_seed_keypair);
-PHP_FUNCTION(sodium_crypto_kx_server_session_keys);
-PHP_FUNCTION(sodium_crypto_pwhash);
-PHP_FUNCTION(sodium_crypto_pwhash_scryptsalsa208sha256);
-PHP_FUNCTION(sodium_crypto_pwhash_scryptsalsa208sha256_str);
-PHP_FUNCTION(sodium_crypto_pwhash_scryptsalsa208sha256_str_verify);
-PHP_FUNCTION(sodium_crypto_pwhash_str);
-PHP_FUNCTION(sodium_crypto_pwhash_str_needs_rehash);
-PHP_FUNCTION(sodium_crypto_pwhash_str_verify);
-PHP_FUNCTION(sodium_crypto_scalarmult);
-PHP_FUNCTION(sodium_crypto_scalarmult_base);
-PHP_FUNCTION(sodium_crypto_scalarmult_ristretto255);
-PHP_FUNCTION(sodium_crypto_scalarmult_ristretto255_base);
-PHP_FUNCTION(sodium_crypto_secretbox);
-PHP_FUNCTION(sodium_crypto_secretbox_keygen);
-PHP_FUNCTION(sodium_crypto_secretbox_open);
-PHP_FUNCTION(sodium_crypto_secretstream_xchacha20poly1305_keygen);
-PHP_FUNCTION(sodium_crypto_secretstream_xchacha20poly1305_init_push);
-PHP_FUNCTION(sodium_crypto_secretstream_xchacha20poly1305_push);
-PHP_FUNCTION(sodium_crypto_secretstream_xchacha20poly1305_init_pull);
-PHP_FUNCTION(sodium_crypto_secretstream_xchacha20poly1305_pull);
-PHP_FUNCTION(sodium_crypto_secretstream_xchacha20poly1305_rekey);
-PHP_FUNCTION(sodium_crypto_shorthash);
-PHP_FUNCTION(sodium_crypto_shorthash_keygen);
-PHP_FUNCTION(sodium_crypto_sign);
-PHP_FUNCTION(sodium_crypto_sign_detached);
-PHP_FUNCTION(sodium_crypto_sign_ed25519_pk_to_curve25519);
-PHP_FUNCTION(sodium_crypto_sign_ed25519_sk_to_curve25519);
-PHP_FUNCTION(sodium_crypto_sign_keypair);
-PHP_FUNCTION(sodium_crypto_sign_keypair_from_secretkey_and_publickey);
-PHP_FUNCTION(sodium_crypto_sign_open);
-PHP_FUNCTION(sodium_crypto_sign_publickey);
-PHP_FUNCTION(sodium_crypto_sign_publickey_from_secretkey);
-PHP_FUNCTION(sodium_crypto_sign_secretkey);
-PHP_FUNCTION(sodium_crypto_sign_seed_keypair);
-PHP_FUNCTION(sodium_crypto_sign_verify_detached);
-PHP_FUNCTION(sodium_crypto_stream);
-PHP_FUNCTION(sodium_crypto_stream_keygen);
-PHP_FUNCTION(sodium_crypto_stream_xor);
-PHP_FUNCTION(sodium_crypto_stream_xchacha20);
-PHP_FUNCTION(sodium_crypto_stream_xchacha20_keygen);
-PHP_FUNCTION(sodium_crypto_stream_xchacha20_xor);
-PHP_FUNCTION(sodium_hex2bin);
-PHP_FUNCTION(sodium_increment);
-PHP_FUNCTION(sodium_memcmp);
-PHP_FUNCTION(sodium_memzero);
-PHP_FUNCTION(sodium_pad);
-PHP_FUNCTION(sodium_unpad);
-
#endif /* PHP_LIBSODIUM_H */
Modified: trunk/MgDev/Oem/php/include/ext/spl/spl_array.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/spl/spl_array.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/spl/spl_array.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -21,6 +21,18 @@
#include "php_spl.h"
#include "spl_iterators.h"
+#define SPL_ARRAY_STD_PROP_LIST 0x00000001
+#define SPL_ARRAY_ARRAY_AS_PROPS 0x00000002
+#define SPL_ARRAY_CHILD_ARRAYS_ONLY 0x00000004
+#define SPL_ARRAY_IS_SELF 0x01000000
+#define SPL_ARRAY_USE_OTHER 0x02000000
+#define SPL_ARRAY_INT_MASK 0xFFFF0000
+#define SPL_ARRAY_CLONE_MASK 0x0100FFFF
+
+#define SPL_ARRAY_METHOD_NO_ARG 0
+#define SPL_ARRAY_METHOD_CALLBACK_ARG 1
+#define SPL_ARRAY_METHOD_SORT_FLAGS_ARG 2
+
extern PHPAPI zend_class_entry *spl_ce_ArrayObject;
extern PHPAPI zend_class_entry *spl_ce_ArrayIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator;
Modified: trunk/MgDev/Oem/php/include/ext/spl/spl_directory.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/spl/spl_directory.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/spl/spl_directory.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -30,18 +30,13 @@
PHP_MINIT_FUNCTION(spl_directory);
-typedef enum {
- SPL_FS_INFO, /* must be 0 */
- SPL_FS_DIR,
- SPL_FS_FILE
-} SPL_FS_OBJ_TYPE;
-
+/* Internal objecte structure and helpers for Directory and File SPL objects */
typedef struct _spl_filesystem_object spl_filesystem_object;
typedef void (*spl_foreign_dtor_t)(spl_filesystem_object *object);
typedef void (*spl_foreign_clone_t)(spl_filesystem_object *src, spl_filesystem_object *dst);
-PHPAPI char* spl_filesystem_object_get_path(spl_filesystem_object *intern, size_t *len);
+PHPAPI zend_string *spl_filesystem_object_get_path(spl_filesystem_object *intern);
typedef struct _spl_other_handler {
spl_foreign_dtor_t dtor;
@@ -48,12 +43,11 @@
spl_foreign_clone_t clone;
} spl_other_handler;
-/* define an overloaded iterator structure */
-typedef struct {
- zend_object_iterator intern;
- zval current;
- void *object;
-} spl_filesystem_iterator;
+typedef enum {
+ SPL_FS_INFO, /* must be 0 */
+ SPL_FS_DIR,
+ SPL_FS_FILE
+} SPL_FS_OBJ_TYPE;
struct _spl_filesystem_object {
void *oth;
@@ -96,28 +90,6 @@
zend_object std;
};
-static inline spl_filesystem_object *spl_filesystem_from_obj(zend_object *obj) /* {{{ */ {
- return (spl_filesystem_object*)((char*)(obj) - XtOffsetOf(spl_filesystem_object, std));
-}
-/* }}} */
-
-#define Z_SPLFILESYSTEM_P(zv) spl_filesystem_from_obj(Z_OBJ_P((zv)))
-
-static inline spl_filesystem_iterator* spl_filesystem_object_to_iterator(spl_filesystem_object *obj)
-{
- spl_filesystem_iterator *it;
-
- it = ecalloc(1, sizeof(spl_filesystem_iterator));
- it->object = (void *)obj;
- zend_iterator_init(&it->intern);
- return it;
-}
-
-static inline spl_filesystem_object* spl_filesystem_iterator_to_object(spl_filesystem_iterator *it)
-{
- return (spl_filesystem_object*)it->object;
-}
-
#define SPL_FILE_OBJECT_DROP_NEW_LINE 0x00000001 /* drop new lines */
#define SPL_FILE_OBJECT_READ_AHEAD 0x00000002 /* read on rewind/next */
#define SPL_FILE_OBJECT_SKIP_EMPTY 0x00000004 /* skip empty lines */
@@ -133,6 +105,7 @@
#define SPL_FILE_DIR_KEY_AS_PATHNAME 0x00000000 /* make RecursiveDirectoryTree::key() return getPathname() */
#define SPL_FILE_DIR_KEY_AS_FILENAME 0x00000100 /* make RecursiveDirectoryTree::key() return getFilename() */
#define SPL_FILE_DIR_KEY_MODE_MASK 0x00000F00 /* mask RecursiveDirectoryTree::key() */
+#define SPL_FILE_NEW_CURRENT_AND_KEY SPL_FILE_DIR_KEY_AS_FILENAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO
#define SPL_FILE_DIR_KEY(intern,mode) ((intern->flags&SPL_FILE_DIR_KEY_MODE_MASK)==mode)
#define SPL_FILE_DIR_SKIPDOTS 0x00001000 /* Tells whether it should skip dots or not */
Modified: trunk/MgDev/Oem/php/include/ext/spl/spl_dllist.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/spl/spl_dllist.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/spl/spl_dllist.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -20,6 +20,13 @@
#include "php.h"
#include "php_spl.h"
+#define SPL_DLLIST_IT_KEEP 0x00000000
+#define SPL_DLLIST_IT_FIFO 0x00000000 /* FIFO flag makes the iterator traverse the structure as a FirstInFirstOut */
+#define SPL_DLLIST_IT_DELETE 0x00000001 /* Delete flag makes the iterator delete the current element on next */
+#define SPL_DLLIST_IT_LIFO 0x00000002 /* LIFO flag makes the iterator traverse the structure as a LastInFirstOut */
+#define SPL_DLLIST_IT_MASK 0x00000003 /* Mask to isolate flags related to iterators */
+#define SPL_DLLIST_IT_FIX 0x00000004 /* Backward/Forward bit is fixed */
+
extern PHPAPI zend_class_entry *spl_ce_SplDoublyLinkedList;
extern PHPAPI zend_class_entry *spl_ce_SplQueue;
extern PHPAPI zend_class_entry *spl_ce_SplStack;
Modified: trunk/MgDev/Oem/php/include/ext/spl/spl_functions.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/spl/spl_functions.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/spl/spl_functions.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -21,9 +21,6 @@
typedef zend_object* (*create_object_func_t)(zend_class_entry *class_type);
-#define REGISTER_SPL_CLASS_CONST_LONG(class_name, const_name, value) \
- zend_declare_class_constant_long(spl_ce_ ## class_name, const_name, sizeof(const_name)-1, (zend_long)value);
-
/* sub: whether to allow subclasses/interfaces
allow = 0: allow all classes and interfaces
allow > 0: allow all that match and mask ce_flags
@@ -32,9 +29,9 @@
void spl_add_class_name(zval * list, zend_class_entry * pce, int allow, int ce_flags);
void spl_add_interfaces(zval * list, zend_class_entry * pce, int allow, int ce_flags);
void spl_add_traits(zval * list, zend_class_entry * pce, int allow, int ce_flags);
-int spl_add_classes(zend_class_entry *pce, zval *list, int sub, int allow, int ce_flags);
+void spl_add_classes(zend_class_entry *pce, zval *list, bool sub, int allow, int ce_flags);
/* caller must efree(return) */
-zend_string *spl_gen_private_prop_name(zend_class_entry *ce, char *prop_name, int prop_len);
+zend_string *spl_gen_private_prop_name(zend_class_entry *ce, char *prop_name, size_t prop_len);
#endif /* PHP_FUNCTIONS_H */
Modified: trunk/MgDev/Oem/php/include/ext/spl/spl_heap.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/spl/spl_heap.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/spl/spl_heap.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -20,6 +20,11 @@
#include "php.h"
#include "php_spl.h"
+#define SPL_PQUEUE_EXTR_MASK 0x00000003
+#define SPL_PQUEUE_EXTR_BOTH 0x00000003
+#define SPL_PQUEUE_EXTR_DATA 0x00000001
+#define SPL_PQUEUE_EXTR_PRIORITY 0x00000002
+
extern PHPAPI zend_class_entry *spl_ce_SplHeap;
extern PHPAPI zend_class_entry *spl_ce_SplMinHeap;
extern PHPAPI zend_class_entry *spl_ce_SplMaxHeap;
Modified: trunk/MgDev/Oem/php/include/ext/spl/spl_iterators.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/spl/spl_iterators.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/spl/spl_iterators.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -19,7 +19,6 @@
#include "php.h"
#include "php_spl.h"
-#include "ext/pcre/php_pcre.h"
extern PHPAPI zend_class_entry *spl_ce_AppendIterator;
extern PHPAPI zend_class_entry *spl_ce_CachingIterator;
@@ -44,11 +43,21 @@
PHP_MINIT_FUNCTION(spl_iterators);
-PHP_FUNCTION(iterator_apply);
-PHP_FUNCTION(iterator_count);
-PHP_FUNCTION(iterator_to_array);
typedef enum {
+ RIT_LEAVES_ONLY = 0,
+ RIT_SELF_FIRST = 1,
+ RIT_CHILD_FIRST = 2
+} RecursiveIteratorMode;
+
+#define RIT_CATCH_GET_CHILD CIT_CATCH_GET_CHILD
+
+typedef enum {
+ RTIT_BYPASS_CURRENT = 4,
+ RTIT_BYPASS_KEY = 8
+} RecursiveTreeIteratorFlags;
+
+typedef enum {
DIT_Default = 0,
DIT_FilterIterator = DIT_Default,
DIT_RecursiveFilterIterator = DIT_Default,
@@ -103,59 +112,6 @@
REGIT_MODE_MAX
} regex_mode;
-typedef struct _spl_cbfilter_it_intern {
- zend_fcall_info fci;
- zend_fcall_info_cache fcc;
- zend_object *object;
-} _spl_cbfilter_it_intern;
-
-typedef struct _spl_dual_it_object {
- struct {
- zval zobject;
- zend_class_entry *ce;
- zend_object *object;
- zend_object_iterator *iterator;
- } inner;
- struct {
- zval data;
- zval key;
- zend_long pos;
- } current;
- dual_it_type dit_type;
- union {
- struct {
- zend_long offset;
- zend_long count;
- } limit;
- struct {
- zend_long flags; /* CIT_* */
- zend_string *zstr;
- zval zchildren;
- zval zcache;
- } caching;
- struct {
- zval zarrayit;
- zend_object_iterator *iterator;
- } append;
- struct {
- zend_long flags;
- zend_long preg_flags;
- pcre_cache_entry *pce;
- zend_string *regex;
- regex_mode mode;
- int use_flags;
- } regex;
- _spl_cbfilter_it_intern *cbfilter;
- } u;
- zend_object std;
-} spl_dual_it_object;
-
-static inline spl_dual_it_object *spl_dual_it_from_obj(zend_object *obj) /* {{{ */ {
- return (spl_dual_it_object*)((char*)(obj) - XtOffsetOf(spl_dual_it_object, std));
-} /* }}} */
-
-#define Z_SPLDUAL_IT_P(zv) spl_dual_it_from_obj(Z_OBJ_P((zv)))
-
typedef int (*spl_iterator_apply_func_t)(zend_object_iterator *iter, void *puser);
PHPAPI int spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, void *puser);
Modified: trunk/MgDev/Oem/php/include/ext/spl/spl_observer.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/spl/spl_observer.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/spl/spl_observer.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -20,6 +20,13 @@
#include "php.h"
#include "php_spl.h"
+typedef enum {
+ MIT_NEED_ANY = 0,
+ MIT_NEED_ALL = 1,
+ MIT_KEYS_NUMERIC = 0,
+ MIT_KEYS_ASSOC = 2
+} MultipleIteratorFlags;
+
extern PHPAPI zend_class_entry *spl_ce_SplObserver;
extern PHPAPI zend_class_entry *spl_ce_SplSubject;
extern PHPAPI zend_class_entry *spl_ce_SplObjectStorage;
Modified: trunk/MgDev/Oem/php/include/ext/standard/basic_functions.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/basic_functions.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/basic_functions.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -27,6 +27,9 @@
#include "url_scanner_ex.h"
+/* for MT_N */
+#include "ext/random/php_random.h"
+
#if defined(_WIN32) && !defined(__clang__)
#include <intrin.h>
#endif
@@ -51,8 +54,6 @@
PHPAPI int _php_error_log_ex(int opt_err, const char *message, size_t message_len, const char *opt, const char *headers);
PHPAPI int php_prefix_varname(zval *result, zend_string *prefix, const char *var_name, size_t var_name_len, bool add_underscore);
-#define MT_N (624)
-
/* Deprecated type aliases -- use the standard types instead */
typedef uint32_t php_uint32;
typedef int32_t php_int32;
@@ -82,14 +83,6 @@
zend_string *CurrentStatFile, *CurrentLStatFile;
php_stream_statbuf ssb, lssb;
- /* mt_rand.c */
- uint32_t state[MT_N+1]; /* state vector + 1 extra to not violate ANSI C */
- uint32_t *next; /* next random value is computed from here */
- int left; /* can *next++ this many times before reloading */
-
- bool mt_rand_is_seeded; /* Whether mt_rand() has been seeded */
- zend_long mt_rand_mode;
-
/* syslog.c */
char *syslog_device;
Modified: trunk/MgDev/Oem/php/include/ext/standard/basic_functions_arginfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/basic_functions_arginfo.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/basic_functions_arginfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 87ed2b04b9b46ce3df78d6f9d6d62bd6b2ae8fe5 */
+ * Stub hash: e46c8ef36dc0f29d877ae6e4096135414d0a4412 */
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0)
@@ -74,7 +74,7 @@
ZEND_ARG_VARIADIC_TYPE_INFO(0, values, IS_MIXED, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_krsort, 0, 1, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_krsort, 0, 1, IS_TRUE, 0)
ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SORT_REGULAR")
ZEND_END_ARG_INFO()
@@ -100,9 +100,12 @@
#define arginfo_sort arginfo_krsort
-#define arginfo_rsort arginfo_krsort
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rsort, 0, 1, _IS_BOOL, 0)
+ ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SORT_REGULAR")
+ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_usort, 0, 2, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_usort, 0, 2, IS_TRUE, 0)
ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()
@@ -138,7 +141,7 @@
#define arginfo_max arginfo_min
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_walk, 0, 2, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_walk, 0, 2, IS_TRUE, 0)
ZEND_ARG_TYPE_MASK(1, array, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL)
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_ARG_TYPE_INFO(0, arg, IS_MIXED, 0)
@@ -186,7 +189,9 @@
ZEND_ARG_TYPE_MASK(0, step, MAY_BE_LONG|MAY_BE_DOUBLE, "1")
ZEND_END_ARG_INFO()
-#define arginfo_shuffle arginfo_natsort
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_shuffle, 0, 1, IS_TRUE, 0)
+ ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
+ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_pop, 0, 1, IS_MIXED, 0)
ZEND_ARG_TYPE_INFO(1, array, IS_ARRAY, 0)
@@ -413,7 +418,7 @@
ZEND_ARG_TYPE_INFO(0, microseconds, IS_LONG, 0)
ZEND_END_ARG_INFO()
-#if HAVE_NANOSLEEP
+#if defined(HAVE_NANOSLEEP)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_time_nanosleep, 0, 2, MAY_BE_ARRAY|MAY_BE_BOOL)
ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, nanoseconds, IS_LONG, 0)
@@ -420,7 +425,7 @@
ZEND_END_ARG_INFO()
#endif
-#if HAVE_NANOSLEEP
+#if defined(HAVE_NANOSLEEP)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_time_sleep_until, 0, 1, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, timestamp, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()
@@ -459,7 +464,7 @@
#define arginfo_forward_static_call_array arginfo_call_user_func_array
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_register_shutdown_function, 0, 1, _IS_BOOL, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_register_shutdown_function, 0, 1, IS_VOID, 0)
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0)
ZEND_END_ARG_INFO()
@@ -500,6 +505,10 @@
ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0)
ZEND_END_ARG_INFO()
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ini_parse_quantity, 0, 1, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, shorthand, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_set_include_path, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, include_path, IS_STRING, 0)
ZEND_END_ARG_INFO()
@@ -519,7 +528,7 @@
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 1, "null")
ZEND_END_ARG_INFO()
-#if HAVE_GETSERVBYNAME
+#if defined(HAVE_GETSERVBYNAME)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getservbyname, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, service, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, protocol, IS_STRING, 0)
@@ -526,7 +535,7 @@
ZEND_END_ARG_INFO()
#endif
-#if HAVE_GETSERVBYPORT
+#if defined(HAVE_GETSERVBYPORT)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getservbyport, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, port, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, protocol, IS_STRING, 0)
@@ -533,13 +542,13 @@
ZEND_END_ARG_INFO()
#endif
-#if HAVE_GETPROTOBYNAME
+#if defined(HAVE_GETPROTOBYNAME)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getprotobyname, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, protocol, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif
-#if HAVE_GETPROTOBYNUMBER
+#if defined(HAVE_GETPROTOBYNUMBER)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_getprotobynumber, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, protocol, IS_LONG, 0)
ZEND_END_ARG_INFO()
@@ -599,7 +608,7 @@
ZEND_ARG_TYPE_INFO(0, salt, IS_STRING, 0)
ZEND_END_ARG_INFO()
-#if HAVE_STRPTIME
+#if defined(HAVE_STRPTIME)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_strptime, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, timestamp, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
@@ -623,7 +632,7 @@
ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
ZEND_END_ARG_INFO()
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dns_check_record, 0, 1, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_STRING, 0, "\"MX\"")
@@ -630,11 +639,11 @@
ZEND_END_ARG_INFO()
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
#define arginfo_checkdnsrr arginfo_dns_check_record
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_dns_get_record, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "DNS_ANY")
@@ -644,7 +653,7 @@
ZEND_END_ARG_INFO()
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dns_get_mx, 0, 2, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0)
ZEND_ARG_INFO(1, hosts)
@@ -652,16 +661,16 @@
ZEND_END_ARG_INFO()
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
#define arginfo_getmxrr arginfo_dns_get_mx
#endif
-#if defined(PHP_WIN32) || HAVE_GETIFADDRS || defined(__PASE__)
+#if (defined(PHP_WIN32) || HAVE_GETIFADDRS || defined(__PASE__))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_net_get_interfaces, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_END_ARG_INFO()
#endif
-#if HAVE_FTOK
+#if defined(HAVE_FTOK)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftok, 0, 2, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, project_id, IS_STRING, 0)
@@ -672,9 +681,6 @@
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, as_number, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_lcg_value, 0, 0, IS_DOUBLE, 0)
-ZEND_END_ARG_INFO()
-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_md5, 0, 1, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, binary, _IS_BOOL, 0, "false")
@@ -700,7 +706,7 @@
#define arginfo_sha1_file arginfo_md5_file
#if defined(HAVE_SYSLOG_H)
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_openlog, 0, 3, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_openlog, 0, 3, IS_TRUE, 0)
ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, facility, IS_LONG, 0)
@@ -708,12 +714,12 @@
#endif
#if defined(HAVE_SYSLOG_H)
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_closelog, 0, 0, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_closelog, 0, 0, IS_TRUE, 0)
ZEND_END_ARG_INFO()
#endif
#if defined(HAVE_SYSLOG_H)
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_syslog, 0, 2, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_syslog, 0, 2, IS_TRUE, 0)
ZEND_ARG_TYPE_INFO(0, priority, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0)
ZEND_END_ARG_INFO()
@@ -820,7 +826,7 @@
#define arginfo_strcspn arginfo_strspn
-#if HAVE_NL_LANGINFO
+#if defined(HAVE_NL_LANGINFO)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_nl_langinfo, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, item, IS_LONG, 0)
ZEND_END_ARG_INFO()
@@ -1113,7 +1119,7 @@
ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
ZEND_END_ARG_INFO()
-#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
+#if (defined(HAVE_CHROOT) && !defined(ZTS) && defined(ENABLE_CHROOT_FUNC))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chroot, 0, 1, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
ZEND_END_ARG_INFO()
@@ -1151,7 +1157,7 @@
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, result_code, "null")
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_passthru, 0, 1, _IS_BOOL, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_passthru, 0, 1, IS_FALSE, 1)
ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, result_code, "null")
ZEND_END_ARG_INFO()
@@ -1415,7 +1421,7 @@
ZEND_ARG_TYPE_MASK(0, group, MAY_BE_STRING|MAY_BE_LONG, NULL)
ZEND_END_ARG_INFO()
-#if HAVE_LCHOWN
+#if defined(HAVE_LCHOWN)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_lchown, 0, 2, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_ARG_TYPE_MASK(0, user, MAY_BE_STRING|MAY_BE_LONG, NULL)
@@ -1422,7 +1428,7 @@
ZEND_END_ARG_INFO()
#endif
-#if HAVE_LCHOWN
+#if defined(HAVE_LCHOWN)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_lchgrp, 0, 2, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_ARG_TYPE_MASK(0, group, MAY_BE_STRING|MAY_BE_LONG, NULL)
@@ -1434,7 +1440,7 @@
ZEND_ARG_TYPE_INFO(0, permissions, IS_LONG, 0)
ZEND_END_ARG_INFO()
-#if HAVE_UTIME
+#if defined(HAVE_UTIME)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_touch, 0, 1, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mtime, IS_LONG, 1, "null")
@@ -1527,7 +1533,7 @@
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, image_info, "null")
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phpinfo, 0, 0, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phpinfo, 0, 0, IS_TRUE, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "INFO_ALL")
ZEND_END_ARG_INFO()
@@ -1535,7 +1541,7 @@
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extension, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phpcredits, 0, 0, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_phpcredits, 0, 0, IS_TRUE, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "CREDITS_ALL")
ZEND_END_ARG_INFO()
@@ -1567,19 +1573,19 @@
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, deletion_cost, IS_LONG, 0, "1")
ZEND_END_ARG_INFO()
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_readlink, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_linkinfo, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
ZEND_END_ARG_INFO()
#endif
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_symlink, 0, 2, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, target, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, link, IS_STRING, 0)
@@ -1586,7 +1592,7 @@
ZEND_END_ARG_INFO()
#endif
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
#define arginfo_link arginfo_symlink
#endif
@@ -1649,7 +1655,8 @@
#define arginfo_log1p arginfo_sin
-#define arginfo_pi arginfo_lcg_value
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pi, 0, 0, IS_DOUBLE, 0)
+ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_finite, 0, 1, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, num, IS_DOUBLE, 0)
@@ -1812,33 +1819,6 @@
#define arginfo_quoted_printable_encode arginfo_base64_encode
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mt_srand, 0, 0, IS_VOID, 0)
- ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, seed, IS_LONG, 0, "0")
- ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "MT_RAND_MT19937")
-ZEND_END_ARG_INFO()
-
-#define arginfo_srand arginfo_mt_srand
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rand, 0, 0, IS_LONG, 0)
- ZEND_ARG_TYPE_INFO(0, min, IS_LONG, 0)
- ZEND_ARG_TYPE_INFO(0, max, IS_LONG, 0)
-ZEND_END_ARG_INFO()
-
-#define arginfo_mt_rand arginfo_rand
-
-#define arginfo_mt_getrandmax arginfo_ob_get_level
-
-#define arginfo_getrandmax arginfo_ob_get_level
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_random_bytes, 0, 1, IS_STRING, 0)
- ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_random_int, 0, 2, IS_LONG, 0)
- ZEND_ARG_TYPE_INFO(0, min, IS_LONG, 0)
- ZEND_ARG_TYPE_INFO(0, max, IS_LONG, 0)
-ZEND_END_ARG_INFO()
-
#define arginfo_soundex arginfo_base64_encode
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_select, 0, 4, MAY_BE_LONG|MAY_BE_FALSE)
@@ -1951,7 +1931,7 @@
ZEND_END_ARG_INFO()
#endif
-#if HAVE_SOCKETPAIR
+#if defined(HAVE_SOCKETPAIR)
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_stream_socket_pair, 0, 3, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, domain, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0)
@@ -2021,7 +2001,7 @@
#define arginfo_stream_set_chunk_size arginfo_stream_set_write_buffer
-#if HAVE_SYS_TIME_H || defined(PHP_WIN32)
+#if (defined(HAVE_SYS_TIME_H) || defined(PHP_WIN32))
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_stream_set_timeout, 0, 2, _IS_BOOL, 0)
ZEND_ARG_INFO(0, stream)
ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0)
@@ -2029,7 +2009,7 @@
ZEND_END_ARG_INFO()
#endif
-#if HAVE_SYS_TIME_H || defined(PHP_WIN32)
+#if (defined(HAVE_SYS_TIME_H) || defined(PHP_WIN32))
#define arginfo_socket_set_timeout arginfo_stream_set_timeout
#endif
@@ -2175,6 +2155,8 @@
#define arginfo_memory_get_peak_usage arginfo_memory_get_usage
+#define arginfo_memory_reset_peak_usage arginfo_flush
+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_version_compare, 0, 2, MAY_BE_LONG|MAY_BE_BOOL)
ZEND_ARG_TYPE_INFO(0, version1, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, version2, IS_STRING, 0)
@@ -2332,10 +2314,10 @@
ZEND_FUNCTION(flush);
ZEND_FUNCTION(sleep);
ZEND_FUNCTION(usleep);
-#if HAVE_NANOSLEEP
+#if defined(HAVE_NANOSLEEP)
ZEND_FUNCTION(time_nanosleep);
#endif
-#if HAVE_NANOSLEEP
+#if defined(HAVE_NANOSLEEP)
ZEND_FUNCTION(time_sleep_until);
#endif
ZEND_FUNCTION(get_current_user);
@@ -2355,6 +2337,7 @@
ZEND_FUNCTION(ini_get_all);
ZEND_FUNCTION(ini_set);
ZEND_FUNCTION(ini_restore);
+ZEND_FUNCTION(ini_parse_quantity);
ZEND_FUNCTION(set_include_path);
ZEND_FUNCTION(get_include_path);
ZEND_FUNCTION(print_r);
@@ -2361,16 +2344,16 @@
ZEND_FUNCTION(connection_aborted);
ZEND_FUNCTION(connection_status);
ZEND_FUNCTION(ignore_user_abort);
-#if HAVE_GETSERVBYNAME
+#if defined(HAVE_GETSERVBYNAME)
ZEND_FUNCTION(getservbyname);
#endif
-#if HAVE_GETSERVBYPORT
+#if defined(HAVE_GETSERVBYPORT)
ZEND_FUNCTION(getservbyport);
#endif
-#if HAVE_GETPROTOBYNAME
+#if defined(HAVE_GETPROTOBYNAME)
ZEND_FUNCTION(getprotobyname);
#endif
-#if HAVE_GETPROTOBYNUMBER
+#if defined(HAVE_GETPROTOBYNUMBER)
ZEND_FUNCTION(getprotobynumber);
#endif
ZEND_FUNCTION(register_tick_function);
@@ -2388,7 +2371,7 @@
ZEND_FUNCTION(get_browser);
ZEND_FUNCTION(crc32);
ZEND_FUNCTION(crypt);
-#if HAVE_STRPTIME
+#if defined(HAVE_STRPTIME)
ZEND_FUNCTION(strptime);
#endif
#if defined(HAVE_GETHOSTNAME)
@@ -2397,23 +2380,22 @@
ZEND_FUNCTION(gethostbyaddr);
ZEND_FUNCTION(gethostbyname);
ZEND_FUNCTION(gethostbynamel);
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_FUNCTION(dns_check_record);
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_FUNCTION(dns_get_record);
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_FUNCTION(dns_get_mx);
#endif
-#if defined(PHP_WIN32) || HAVE_GETIFADDRS || defined(__PASE__)
+#if (defined(PHP_WIN32) || HAVE_GETIFADDRS || defined(__PASE__))
ZEND_FUNCTION(net_get_interfaces);
#endif
-#if HAVE_FTOK
+#if defined(HAVE_FTOK)
ZEND_FUNCTION(ftok);
#endif
ZEND_FUNCTION(hrtime);
-ZEND_FUNCTION(lcg_value);
ZEND_FUNCTION(md5);
ZEND_FUNCTION(md5_file);
ZEND_FUNCTION(getmyuid);
@@ -2457,7 +2439,7 @@
ZEND_FUNCTION(hex2bin);
ZEND_FUNCTION(strspn);
ZEND_FUNCTION(strcspn);
-#if HAVE_NL_LANGINFO
+#if defined(HAVE_NL_LANGINFO)
ZEND_FUNCTION(nl_langinfo);
#endif
ZEND_FUNCTION(strcoll);
@@ -2527,7 +2509,7 @@
ZEND_FUNCTION(dir);
ZEND_FUNCTION(closedir);
ZEND_FUNCTION(chdir);
-#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
+#if (defined(HAVE_CHROOT) && !defined(ZTS) && defined(ENABLE_CHROOT_FUNC))
ZEND_FUNCTION(chroot);
#endif
ZEND_FUNCTION(getcwd);
@@ -2606,14 +2588,14 @@
ZEND_FUNCTION(lstat);
ZEND_FUNCTION(chown);
ZEND_FUNCTION(chgrp);
-#if HAVE_LCHOWN
+#if defined(HAVE_LCHOWN)
ZEND_FUNCTION(lchown);
#endif
-#if HAVE_LCHOWN
+#if defined(HAVE_LCHOWN)
ZEND_FUNCTION(lchgrp);
#endif
ZEND_FUNCTION(chmod);
-#if HAVE_UTIME
+#if defined(HAVE_UTIME)
ZEND_FUNCTION(touch);
#endif
ZEND_FUNCTION(clearstatcache);
@@ -2644,16 +2626,16 @@
ZEND_FUNCTION(iptcembed);
ZEND_FUNCTION(iptcparse);
ZEND_FUNCTION(levenshtein);
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_FUNCTION(readlink);
#endif
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_FUNCTION(linkinfo);
#endif
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_FUNCTION(symlink);
#endif
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_FUNCTION(link);
#endif
ZEND_FUNCTION(mail);
@@ -2729,12 +2711,6 @@
#endif
ZEND_FUNCTION(quoted_printable_decode);
ZEND_FUNCTION(quoted_printable_encode);
-ZEND_FUNCTION(mt_srand);
-ZEND_FUNCTION(rand);
-ZEND_FUNCTION(mt_rand);
-ZEND_FUNCTION(mt_getrandmax);
-ZEND_FUNCTION(random_bytes);
-ZEND_FUNCTION(random_int);
ZEND_FUNCTION(soundex);
ZEND_FUNCTION(stream_select);
ZEND_FUNCTION(stream_context_create);
@@ -2757,7 +2733,7 @@
#if defined(HAVE_SHUTDOWN)
ZEND_FUNCTION(stream_socket_shutdown);
#endif
-#if HAVE_SOCKETPAIR
+#if defined(HAVE_SOCKETPAIR)
ZEND_FUNCTION(stream_socket_pair);
#endif
ZEND_FUNCTION(stream_copy_to_stream);
@@ -2777,7 +2753,7 @@
ZEND_FUNCTION(sapi_windows_vt100_support);
#endif
ZEND_FUNCTION(stream_set_chunk_size);
-#if HAVE_SYS_TIME_H || defined(PHP_WIN32)
+#if (defined(HAVE_SYS_TIME_H) || defined(PHP_WIN32))
ZEND_FUNCTION(stream_set_timeout);
#endif
ZEND_FUNCTION(gettype);
@@ -2824,6 +2800,7 @@
ZEND_FUNCTION(unserialize);
ZEND_FUNCTION(memory_get_usage);
ZEND_FUNCTION(memory_get_peak_usage);
+ZEND_FUNCTION(memory_reset_peak_usage);
ZEND_FUNCTION(version_compare);
#if defined(PHP_WIN32)
ZEND_FUNCTION(sapi_windows_cp_set);
@@ -2870,7 +2847,7 @@
ZEND_FE(array_push, arginfo_array_push)
ZEND_FE(krsort, arginfo_krsort)
ZEND_FE(ksort, arginfo_ksort)
- ZEND_FE(count, arginfo_count)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(count, arginfo_count)
ZEND_FALIAS(sizeof, count, arginfo_sizeof)
ZEND_FE(natsort, arginfo_natsort)
ZEND_FE(natcasesort, arginfo_natcasesort)
@@ -2888,12 +2865,12 @@
ZEND_FE(current, arginfo_current)
ZEND_FALIAS(pos, current, arginfo_pos)
ZEND_FE(key, arginfo_key)
- ZEND_FE(min, arginfo_min)
- ZEND_FE(max, arginfo_max)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(min, arginfo_min)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(max, arginfo_max)
ZEND_FE(array_walk, arginfo_array_walk)
ZEND_FE(array_walk_recursive, arginfo_array_walk_recursive)
- ZEND_FE(in_array, arginfo_in_array)
- ZEND_FE(array_search, arginfo_array_search)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(in_array, arginfo_in_array)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_search, arginfo_array_search)
ZEND_FE(extract, arginfo_extract)
ZEND_FE(compact, arginfo_compact)
ZEND_FE(array_fill, arginfo_array_fill)
@@ -2905,21 +2882,21 @@
ZEND_FE(array_unshift, arginfo_array_unshift)
ZEND_FE(array_splice, arginfo_array_splice)
ZEND_FE(array_slice, arginfo_array_slice)
- ZEND_FE(array_merge, arginfo_array_merge)
- ZEND_FE(array_merge_recursive, arginfo_array_merge_recursive)
- ZEND_FE(array_replace, arginfo_array_replace)
- ZEND_FE(array_replace_recursive, arginfo_array_replace_recursive)
- ZEND_FE(array_keys, arginfo_array_keys)
- ZEND_FE(array_key_first, arginfo_array_key_first)
- ZEND_FE(array_key_last, arginfo_array_key_last)
- ZEND_FE(array_values, arginfo_array_values)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_merge, arginfo_array_merge)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_merge_recursive, arginfo_array_merge_recursive)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_replace, arginfo_array_replace)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_replace_recursive, arginfo_array_replace_recursive)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_keys, arginfo_array_keys)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_key_first, arginfo_array_key_first)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_key_last, arginfo_array_key_last)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_values, arginfo_array_values)
ZEND_FE(array_count_values, arginfo_array_count_values)
ZEND_FE(array_column, arginfo_array_column)
ZEND_FE(array_reverse, arginfo_array_reverse)
ZEND_FE(array_pad, arginfo_array_pad)
- ZEND_FE(array_flip, arginfo_array_flip)
- ZEND_FE(array_change_key_case, arginfo_array_change_key_case)
- ZEND_FE(array_unique, arginfo_array_unique)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_flip, arginfo_array_flip)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_change_key_case, arginfo_array_change_key_case)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_unique, arginfo_array_unique)
ZEND_FE(array_intersect_key, arginfo_array_intersect_key)
ZEND_FE(array_intersect_ukey, arginfo_array_intersect_ukey)
ZEND_FE(array_intersect, arginfo_array_intersect)
@@ -2928,11 +2905,11 @@
ZEND_FE(array_uintersect_assoc, arginfo_array_uintersect_assoc)
ZEND_FE(array_intersect_uassoc, arginfo_array_intersect_uassoc)
ZEND_FE(array_uintersect_uassoc, arginfo_array_uintersect_uassoc)
- ZEND_FE(array_diff_key, arginfo_array_diff_key)
- ZEND_FE(array_diff_ukey, arginfo_array_diff_ukey)
- ZEND_FE(array_diff, arginfo_array_diff)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_diff_key, arginfo_array_diff_key)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_diff_ukey, arginfo_array_diff_ukey)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_diff, arginfo_array_diff)
ZEND_FE(array_udiff, arginfo_array_udiff)
- ZEND_FE(array_diff_assoc, arginfo_array_diff_assoc)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(array_diff_assoc, arginfo_array_diff_assoc)
ZEND_FE(array_diff_uassoc, arginfo_array_diff_uassoc)
ZEND_FE(array_udiff_assoc, arginfo_array_udiff_assoc)
ZEND_FE(array_udiff_uassoc, arginfo_array_udiff_uassoc)
@@ -2948,8 +2925,8 @@
ZEND_FE(array_chunk, arginfo_array_chunk)
ZEND_FE(array_combine, arginfo_array_combine)
ZEND_FE(array_is_list, arginfo_array_is_list)
- ZEND_FE(base64_encode, arginfo_base64_encode)
- ZEND_FE(base64_decode, arginfo_base64_decode)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(base64_encode, arginfo_base64_encode)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(base64_decode, arginfo_base64_decode)
ZEND_FE(constant, arginfo_constant)
ZEND_FE(ip2long, arginfo_ip2long)
ZEND_FE(long2ip, arginfo_long2ip)
@@ -2961,10 +2938,10 @@
ZEND_FE(flush, arginfo_flush)
ZEND_FE(sleep, arginfo_sleep)
ZEND_FE(usleep, arginfo_usleep)
-#if HAVE_NANOSLEEP
+#if defined(HAVE_NANOSLEEP)
ZEND_FE(time_nanosleep, arginfo_time_nanosleep)
#endif
-#if HAVE_NANOSLEEP
+#if defined(HAVE_NANOSLEEP)
ZEND_FE(time_sleep_until, arginfo_time_sleep_until)
#endif
ZEND_FE(get_current_user, arginfo_get_current_user)
@@ -2986,6 +2963,7 @@
ZEND_FE(ini_set, arginfo_ini_set)
ZEND_FALIAS(ini_alter, ini_set, arginfo_ini_alter)
ZEND_FE(ini_restore, arginfo_ini_restore)
+ ZEND_FE(ini_parse_quantity, arginfo_ini_parse_quantity)
ZEND_FE(set_include_path, arginfo_set_include_path)
ZEND_FE(get_include_path, arginfo_get_include_path)
ZEND_FE(print_r, arginfo_print_r)
@@ -2992,16 +2970,16 @@
ZEND_FE(connection_aborted, arginfo_connection_aborted)
ZEND_FE(connection_status, arginfo_connection_status)
ZEND_FE(ignore_user_abort, arginfo_ignore_user_abort)
-#if HAVE_GETSERVBYNAME
+#if defined(HAVE_GETSERVBYNAME)
ZEND_FE(getservbyname, arginfo_getservbyname)
#endif
-#if HAVE_GETSERVBYPORT
+#if defined(HAVE_GETSERVBYPORT)
ZEND_FE(getservbyport, arginfo_getservbyport)
#endif
-#if HAVE_GETPROTOBYNAME
+#if defined(HAVE_GETPROTOBYNAME)
ZEND_FE(getprotobyname, arginfo_getprotobyname)
#endif
-#if HAVE_GETPROTOBYNUMBER
+#if defined(HAVE_GETPROTOBYNUMBER)
ZEND_FE(getprotobynumber, arginfo_getprotobynumber)
#endif
ZEND_FE(register_tick_function, arginfo_register_tick_function)
@@ -3017,9 +2995,9 @@
ZEND_FE(sys_getloadavg, arginfo_sys_getloadavg)
#endif
ZEND_FE(get_browser, arginfo_get_browser)
- ZEND_FE(crc32, arginfo_crc32)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(crc32, arginfo_crc32)
ZEND_FE(crypt, arginfo_crypt)
-#if HAVE_STRPTIME
+#if defined(HAVE_STRPTIME)
ZEND_DEP_FE(strptime, arginfo_strptime)
#endif
#if defined(HAVE_GETHOSTNAME)
@@ -3028,29 +3006,28 @@
ZEND_FE(gethostbyaddr, arginfo_gethostbyaddr)
ZEND_FE(gethostbyname, arginfo_gethostbyname)
ZEND_FE(gethostbynamel, arginfo_gethostbynamel)
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_FE(dns_check_record, arginfo_dns_check_record)
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_FALIAS(checkdnsrr, dns_check_record, arginfo_checkdnsrr)
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_FE(dns_get_record, arginfo_dns_get_record)
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_FE(dns_get_mx, arginfo_dns_get_mx)
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
+#if (defined(PHP_WIN32) || defined(HAVE_DNS_SEARCH_FUNC))
ZEND_FALIAS(getmxrr, dns_get_mx, arginfo_getmxrr)
#endif
-#if defined(PHP_WIN32) || HAVE_GETIFADDRS || defined(__PASE__)
+#if (defined(PHP_WIN32) || HAVE_GETIFADDRS || defined(__PASE__))
ZEND_FE(net_get_interfaces, arginfo_net_get_interfaces)
#endif
-#if HAVE_FTOK
+#if defined(HAVE_FTOK)
ZEND_FE(ftok, arginfo_ftok)
#endif
ZEND_FE(hrtime, arginfo_hrtime)
- ZEND_FE(lcg_value, arginfo_lcg_value)
ZEND_FE(md5, arginfo_md5)
ZEND_FE(md5_file, arginfo_md5_file)
ZEND_FE(getmyuid, arginfo_getmyuid)
@@ -3090,25 +3067,25 @@
ZEND_FE(get_html_translation_table, arginfo_get_html_translation_table)
ZEND_FE(assert, arginfo_assert)
ZEND_FE(assert_options, arginfo_assert_options)
- ZEND_FE(bin2hex, arginfo_bin2hex)
- ZEND_FE(hex2bin, arginfo_hex2bin)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(bin2hex, arginfo_bin2hex)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(hex2bin, arginfo_hex2bin)
ZEND_FE(strspn, arginfo_strspn)
ZEND_FE(strcspn, arginfo_strcspn)
-#if HAVE_NL_LANGINFO
+#if defined(HAVE_NL_LANGINFO)
ZEND_FE(nl_langinfo, arginfo_nl_langinfo)
#endif
ZEND_FE(strcoll, arginfo_strcoll)
- ZEND_FE(trim, arginfo_trim)
- ZEND_FE(rtrim, arginfo_rtrim)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(trim, arginfo_trim)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(rtrim, arginfo_rtrim)
ZEND_FALIAS(chop, rtrim, arginfo_chop)
- ZEND_FE(ltrim, arginfo_ltrim)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(ltrim, arginfo_ltrim)
ZEND_FE(wordwrap, arginfo_wordwrap)
- ZEND_FE(explode, arginfo_explode)
- ZEND_FE(implode, arginfo_implode)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(explode, arginfo_explode)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(implode, arginfo_implode)
ZEND_FALIAS(join, implode, arginfo_join)
ZEND_FE(strtok, arginfo_strtok)
- ZEND_FE(strtoupper, arginfo_strtoupper)
- ZEND_FE(strtolower, arginfo_strtolower)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strtoupper, arginfo_strtoupper)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strtolower, arginfo_strtolower)
ZEND_FE(basename, arginfo_basename)
ZEND_FE(dirname, arginfo_dirname)
ZEND_FE(pathinfo, arginfo_pathinfo)
@@ -3115,32 +3092,32 @@
ZEND_FE(stristr, arginfo_stristr)
ZEND_FE(strstr, arginfo_strstr)
ZEND_FALIAS(strchr, strstr, arginfo_strchr)
- ZEND_FE(strpos, arginfo_strpos)
- ZEND_FE(stripos, arginfo_stripos)
- ZEND_FE(strrpos, arginfo_strrpos)
- ZEND_FE(strripos, arginfo_strripos)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strpos, arginfo_strpos)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(stripos, arginfo_stripos)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strrpos, arginfo_strrpos)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strripos, arginfo_strripos)
ZEND_FE(strrchr, arginfo_strrchr)
- ZEND_FE(str_contains, arginfo_str_contains)
- ZEND_FE(str_starts_with, arginfo_str_starts_with)
- ZEND_FE(str_ends_with, arginfo_str_ends_with)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(str_contains, arginfo_str_contains)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(str_starts_with, arginfo_str_starts_with)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(str_ends_with, arginfo_str_ends_with)
ZEND_FE(chunk_split, arginfo_chunk_split)
- ZEND_FE(substr, arginfo_substr)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(substr, arginfo_substr)
ZEND_FE(substr_replace, arginfo_substr_replace)
ZEND_FE(quotemeta, arginfo_quotemeta)
- ZEND_FE(ord, arginfo_ord)
- ZEND_FE(chr, arginfo_chr)
- ZEND_FE(ucfirst, arginfo_ucfirst)
- ZEND_FE(lcfirst, arginfo_lcfirst)
- ZEND_FE(ucwords, arginfo_ucwords)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(ord, arginfo_ord)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(chr, arginfo_chr)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(ucfirst, arginfo_ucfirst)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(lcfirst, arginfo_lcfirst)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(ucwords, arginfo_ucwords)
ZEND_FE(strtr, arginfo_strtr)
- ZEND_FE(strrev, arginfo_strrev)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(strrev, arginfo_strrev)
ZEND_FE(similar_text, arginfo_similar_text)
ZEND_FE(addcslashes, arginfo_addcslashes)
ZEND_FE(addslashes, arginfo_addslashes)
ZEND_FE(stripcslashes, arginfo_stripcslashes)
ZEND_FE(stripslashes, arginfo_stripslashes)
- ZEND_FE(str_replace, arginfo_str_replace)
- ZEND_FE(str_ireplace, arginfo_str_ireplace)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(str_replace, arginfo_str_replace)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(str_ireplace, arginfo_str_ireplace)
ZEND_FE(hebrev, arginfo_hebrev)
ZEND_FE(nl2br, arginfo_nl2br)
ZEND_FE(strip_tags, arginfo_strip_tags)
@@ -3158,16 +3135,16 @@
ZEND_FE(str_rot13, arginfo_str_rot13)
ZEND_FE(str_shuffle, arginfo_str_shuffle)
ZEND_FE(str_word_count, arginfo_str_word_count)
- ZEND_FE(str_split, arginfo_str_split)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(str_split, arginfo_str_split)
ZEND_FE(strpbrk, arginfo_strpbrk)
ZEND_FE(substr_compare, arginfo_substr_compare)
- ZEND_FE(utf8_encode, arginfo_utf8_encode)
- ZEND_FE(utf8_decode, arginfo_utf8_decode)
+ ZEND_DEP_FE(utf8_encode, arginfo_utf8_encode)
+ ZEND_DEP_FE(utf8_decode, arginfo_utf8_decode)
ZEND_FE(opendir, arginfo_opendir)
ZEND_FE(dir, arginfo_dir)
ZEND_FE(closedir, arginfo_closedir)
ZEND_FE(chdir, arginfo_chdir)
-#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
+#if (defined(HAVE_CHROOT) && !defined(ZTS) && defined(ENABLE_CHROOT_FUNC))
ZEND_FE(chroot, arginfo_chroot)
#endif
ZEND_FE(getcwd, arginfo_getcwd)
@@ -3248,14 +3225,14 @@
ZEND_FE(lstat, arginfo_lstat)
ZEND_FE(chown, arginfo_chown)
ZEND_FE(chgrp, arginfo_chgrp)
-#if HAVE_LCHOWN
+#if defined(HAVE_LCHOWN)
ZEND_FE(lchown, arginfo_lchown)
#endif
-#if HAVE_LCHOWN
+#if defined(HAVE_LCHOWN)
ZEND_FE(lchgrp, arginfo_lchgrp)
#endif
ZEND_FE(chmod, arginfo_chmod)
-#if HAVE_UTIME
+#if defined(HAVE_UTIME)
ZEND_FE(touch, arginfo_touch)
#endif
ZEND_FE(clearstatcache, arginfo_clearstatcache)
@@ -3278,25 +3255,25 @@
ZEND_FE(getimagesize, arginfo_getimagesize)
ZEND_FE(getimagesizefromstring, arginfo_getimagesizefromstring)
ZEND_FE(phpinfo, arginfo_phpinfo)
- ZEND_FE(phpversion, arginfo_phpversion)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(phpversion, arginfo_phpversion)
ZEND_FE(phpcredits, arginfo_phpcredits)
- ZEND_FE(php_sapi_name, arginfo_php_sapi_name)
- ZEND_FE(php_uname, arginfo_php_uname)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(php_sapi_name, arginfo_php_sapi_name)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(php_uname, arginfo_php_uname)
ZEND_FE(php_ini_scanned_files, arginfo_php_ini_scanned_files)
ZEND_FE(php_ini_loaded_file, arginfo_php_ini_loaded_file)
ZEND_FE(iptcembed, arginfo_iptcembed)
ZEND_FE(iptcparse, arginfo_iptcparse)
ZEND_FE(levenshtein, arginfo_levenshtein)
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_FE(readlink, arginfo_readlink)
#endif
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_FE(linkinfo, arginfo_linkinfo)
#endif
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_FE(symlink, arginfo_symlink)
#endif
-#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
+#if (defined(HAVE_SYMLINK) || defined(PHP_WIN32))
ZEND_FE(link, arginfo_link)
#endif
ZEND_FE(mail, arginfo_mail)
@@ -3319,12 +3296,12 @@
ZEND_FE(acosh, arginfo_acosh)
ZEND_FE(expm1, arginfo_expm1)
ZEND_FE(log1p, arginfo_log1p)
- ZEND_FE(pi, arginfo_pi)
- ZEND_FE(is_finite, arginfo_is_finite)
- ZEND_FE(is_nan, arginfo_is_nan)
- ZEND_FE(intdiv, arginfo_intdiv)
- ZEND_FE(is_infinite, arginfo_is_infinite)
- ZEND_FE(pow, arginfo_pow)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(pi, arginfo_pi)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(is_finite, arginfo_is_finite)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(is_nan, arginfo_is_nan)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(intdiv, arginfo_intdiv)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(is_infinite, arginfo_is_infinite)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(pow, arginfo_pow)
ZEND_FE(exp, arginfo_exp)
ZEND_FE(log, arginfo_log)
ZEND_FE(log10, arginfo_log10)
@@ -3332,12 +3309,12 @@
ZEND_FE(hypot, arginfo_hypot)
ZEND_FE(deg2rad, arginfo_deg2rad)
ZEND_FE(rad2deg, arginfo_rad2deg)
- ZEND_FE(bindec, arginfo_bindec)
- ZEND_FE(hexdec, arginfo_hexdec)
- ZEND_FE(octdec, arginfo_octdec)
- ZEND_FE(decbin, arginfo_decbin)
- ZEND_FE(decoct, arginfo_decoct)
- ZEND_FE(dechex, arginfo_dechex)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(bindec, arginfo_bindec)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(hexdec, arginfo_hexdec)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(octdec, arginfo_octdec)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(decbin, arginfo_decbin)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(decoct, arginfo_decoct)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(dechex, arginfo_dechex)
ZEND_FE(base_convert, arginfo_base_convert)
ZEND_FE(number_format, arginfo_number_format)
ZEND_FE(fmod, arginfo_fmod)
@@ -3372,14 +3349,6 @@
#endif
ZEND_FE(quoted_printable_decode, arginfo_quoted_printable_decode)
ZEND_FE(quoted_printable_encode, arginfo_quoted_printable_encode)
- ZEND_FE(mt_srand, arginfo_mt_srand)
- ZEND_FALIAS(srand, mt_srand, arginfo_srand)
- ZEND_FE(rand, arginfo_rand)
- ZEND_FE(mt_rand, arginfo_mt_rand)
- ZEND_FE(mt_getrandmax, arginfo_mt_getrandmax)
- ZEND_FALIAS(getrandmax, mt_getrandmax, arginfo_getrandmax)
- ZEND_FE(random_bytes, arginfo_random_bytes)
- ZEND_FE(random_int, arginfo_random_int)
ZEND_FE(soundex, arginfo_soundex)
ZEND_FE(stream_select, arginfo_stream_select)
ZEND_FE(stream_context_create, arginfo_stream_context_create)
@@ -3402,7 +3371,7 @@
#if defined(HAVE_SHUTDOWN)
ZEND_FE(stream_socket_shutdown, arginfo_stream_socket_shutdown)
#endif
-#if HAVE_SOCKETPAIR
+#if defined(HAVE_SOCKETPAIR)
ZEND_FE(stream_socket_pair, arginfo_stream_socket_pair)
#endif
ZEND_FE(stream_copy_to_stream, arginfo_stream_copy_to_stream)
@@ -3425,10 +3394,10 @@
ZEND_FE(sapi_windows_vt100_support, arginfo_sapi_windows_vt100_support)
#endif
ZEND_FE(stream_set_chunk_size, arginfo_stream_set_chunk_size)
-#if HAVE_SYS_TIME_H || defined(PHP_WIN32)
+#if (defined(HAVE_SYS_TIME_H) || defined(PHP_WIN32))
ZEND_FE(stream_set_timeout, arginfo_stream_set_timeout)
#endif
-#if HAVE_SYS_TIME_H || defined(PHP_WIN32)
+#if (defined(HAVE_SYS_TIME_H) || defined(PHP_WIN32))
ZEND_FALIAS(socket_set_timeout, stream_set_timeout, arginfo_socket_set_timeout)
#endif
ZEND_FE(gettype, arginfo_gettype)
@@ -3459,10 +3428,10 @@
ZEND_FE(uniqid, arginfo_uniqid)
#endif
ZEND_FE(parse_url, arginfo_parse_url)
- ZEND_FE(urlencode, arginfo_urlencode)
- ZEND_FE(urldecode, arginfo_urldecode)
- ZEND_FE(rawurlencode, arginfo_rawurlencode)
- ZEND_FE(rawurldecode, arginfo_rawurldecode)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(urlencode, arginfo_urlencode)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(urldecode, arginfo_urldecode)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(rawurlencode, arginfo_rawurlencode)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(rawurldecode, arginfo_rawurldecode)
ZEND_FE(get_headers, arginfo_get_headers)
ZEND_FE(stream_bucket_make_writeable, arginfo_stream_bucket_make_writeable)
ZEND_FE(stream_bucket_prepend, arginfo_stream_bucket_prepend)
@@ -3475,11 +3444,12 @@
ZEND_FE(var_dump, arginfo_var_dump)
ZEND_FE(var_export, arginfo_var_export)
ZEND_FE(debug_zval_dump, arginfo_debug_zval_dump)
- ZEND_FE(serialize, arginfo_serialize)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(serialize, arginfo_serialize)
ZEND_FE(unserialize, arginfo_unserialize)
ZEND_FE(memory_get_usage, arginfo_memory_get_usage)
ZEND_FE(memory_get_peak_usage, arginfo_memory_get_peak_usage)
- ZEND_FE(version_compare, arginfo_version_compare)
+ ZEND_FE(memory_reset_peak_usage, arginfo_memory_reset_peak_usage)
+ ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE(version_compare, arginfo_version_compare)
#if defined(PHP_WIN32)
ZEND_FE(sapi_windows_cp_set, arginfo_sapi_windows_cp_set)
#endif
@@ -3511,6 +3481,247 @@
ZEND_FE_END
};
+static void register_basic_functions_symbols(int module_number)
+{
+ REGISTER_LONG_CONSTANT("EXTR_OVERWRITE", PHP_EXTR_OVERWRITE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("EXTR_SKIP", PHP_EXTR_SKIP, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("EXTR_PREFIX_SAME", PHP_EXTR_PREFIX_SAME, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("EXTR_PREFIX_ALL", PHP_EXTR_PREFIX_ALL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("EXTR_PREFIX_INVALID", PHP_EXTR_PREFIX_INVALID, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("EXTR_PREFIX_IF_EXISTS", PHP_EXTR_PREFIX_IF_EXISTS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("EXTR_IF_EXISTS", PHP_EXTR_IF_EXISTS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("EXTR_REFS", PHP_EXTR_REFS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SORT_ASC", PHP_SORT_ASC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SORT_DESC", PHP_SORT_DESC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SORT_REGULAR", PHP_SORT_REGULAR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SORT_NUMERIC", PHP_SORT_NUMERIC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SORT_STRING", PHP_SORT_STRING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SORT_LOCALE_STRING", PHP_SORT_LOCALE_STRING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SORT_NATURAL", PHP_SORT_NATURAL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SORT_FLAG_CASE", PHP_SORT_FLAG_CASE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("CASE_LOWER", PHP_CASE_LOWER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("CASE_UPPER", PHP_CASE_UPPER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("COUNT_NORMAL", PHP_COUNT_NORMAL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("COUNT_RECURSIVE", PHP_COUNT_RECURSIVE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("ARRAY_FILTER_USE_BOTH", ARRAY_FILTER_USE_BOTH, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("ARRAY_FILTER_USE_KEY", ARRAY_FILTER_USE_KEY, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("CONNECTION_ABORTED", PHP_CONNECTION_ABORTED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("CONNECTION_NORMAL", PHP_CONNECTION_NORMAL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("CONNECTION_TIMEOUT", PHP_CONNECTION_TIMEOUT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("INI_USER", ZEND_INI_USER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("INI_PERDIR", ZEND_INI_PERDIR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("INI_SYSTEM", ZEND_INI_SYSTEM, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("INI_ALL", ZEND_INI_ALL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("INI_SCANNER_NORMAL", ZEND_INI_SCANNER_NORMAL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("INI_SCANNER_RAW", ZEND_INI_SCANNER_RAW, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("INI_SCANNER_TYPED", ZEND_INI_SCANNER_TYPED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_URL_SCHEME", PHP_URL_SCHEME, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_URL_HOST", PHP_URL_HOST, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_URL_PORT", PHP_URL_PORT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_URL_USER", PHP_URL_USER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_URL_PASS", PHP_URL_PASS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_URL_PATH", PHP_URL_PATH, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_URL_QUERY", PHP_URL_QUERY, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_URL_FRAGMENT", PHP_URL_FRAGMENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_QUERY_RFC1738", PHP_QUERY_RFC1738, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_QUERY_RFC3986", PHP_QUERY_RFC3986, CONST_PERSISTENT);
+ REGISTER_DOUBLE_CONSTANT("M_E", M_E, CONST_PERSISTENT);
+ ZEND_ASSERT(M_E == 2.718281828459045);
+ REGISTER_DOUBLE_CONSTANT("M_LOG2E", M_LOG2E, CONST_PERSISTENT);
+ ZEND_ASSERT(M_LOG2E == 1.4426950408889634);
+ REGISTER_DOUBLE_CONSTANT("M_LOG10E", M_LOG10E, CONST_PERSISTENT);
+ ZEND_ASSERT(M_LOG10E == 0.4342944819032518);
+ REGISTER_DOUBLE_CONSTANT("M_LN2", M_LN2, CONST_PERSISTENT);
+ ZEND_ASSERT(M_LN2 == 0.6931471805599453);
+ REGISTER_DOUBLE_CONSTANT("M_LN10", M_LN10, CONST_PERSISTENT);
+ ZEND_ASSERT(M_LN10 == 2.302585092994046);
+ REGISTER_DOUBLE_CONSTANT("M_PI", M_PI, CONST_PERSISTENT);
+ ZEND_ASSERT(M_PI == 3.141592653589793);
+ REGISTER_DOUBLE_CONSTANT("M_PI_2", M_PI_2, CONST_PERSISTENT);
+ ZEND_ASSERT(M_PI_2 == 1.5707963267948966);
+ REGISTER_DOUBLE_CONSTANT("M_PI_4", M_PI_4, CONST_PERSISTENT);
+ ZEND_ASSERT(M_PI_4 == 0.7853981633974483);
+ REGISTER_DOUBLE_CONSTANT("M_1_PI", M_1_PI, CONST_PERSISTENT);
+ ZEND_ASSERT(M_1_PI == 0.3183098861837907);
+ REGISTER_DOUBLE_CONSTANT("M_2_PI", M_2_PI, CONST_PERSISTENT);
+ ZEND_ASSERT(M_2_PI == 0.6366197723675814);
+ REGISTER_DOUBLE_CONSTANT("M_SQRTPI", M_SQRTPI, CONST_PERSISTENT);
+ ZEND_ASSERT(M_SQRTPI == 1.772453850905516);
+ REGISTER_DOUBLE_CONSTANT("M_2_SQRTPI", M_2_SQRTPI, CONST_PERSISTENT);
+ ZEND_ASSERT(M_2_SQRTPI == 1.1283791670955126);
+ REGISTER_DOUBLE_CONSTANT("M_LNPI", M_LNPI, CONST_PERSISTENT);
+ ZEND_ASSERT(M_LNPI == 1.1447298858494002);
+ REGISTER_DOUBLE_CONSTANT("M_EULER", M_EULER, CONST_PERSISTENT);
+ ZEND_ASSERT(M_EULER == 0.5772156649015329);
+ REGISTER_DOUBLE_CONSTANT("M_SQRT2", M_SQRT2, CONST_PERSISTENT);
+ ZEND_ASSERT(M_SQRT2 == 1.4142135623730951);
+ REGISTER_DOUBLE_CONSTANT("M_SQRT1_2", M_SQRT1_2, CONST_PERSISTENT);
+ ZEND_ASSERT(M_SQRT1_2 == 0.7071067811865476);
+ REGISTER_DOUBLE_CONSTANT("M_SQRT3", M_SQRT3, CONST_PERSISTENT);
+ ZEND_ASSERT(M_SQRT3 == 1.7320508075688772);
+ REGISTER_DOUBLE_CONSTANT("INF", ZEND_INFINITY, CONST_PERSISTENT);
+ REGISTER_DOUBLE_CONSTANT("NAN", ZEND_NAN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_UP", PHP_ROUND_HALF_UP, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_DOWN", PHP_ROUND_HALF_DOWN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_EVEN", PHP_ROUND_HALF_EVEN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_ODD", PHP_ROUND_HALF_ODD, CONST_PERSISTENT);
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_A", PHP_DNS_A, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_NS", PHP_DNS_NS, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_CNAME", PHP_DNS_CNAME, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_SOA", PHP_DNS_SOA, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_PTR", PHP_DNS_PTR, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_HINFO", PHP_DNS_HINFO, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS))) && (!defined(PHP_WIN32))
+ REGISTER_LONG_CONSTANT("DNS_CAA", PHP_DNS_CAA, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_MX", PHP_DNS_MX, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_TXT", PHP_DNS_TXT, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_SRV", PHP_DNS_SRV, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_NAPTR", PHP_DNS_NAPTR, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_AAAA", PHP_DNS_AAAA, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_A6", PHP_DNS_A6, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_ANY", PHP_DNS_ANY, CONST_PERSISTENT);
+#endif
+#if (defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS)))
+ REGISTER_LONG_CONSTANT("DNS_ALL", PHP_DNS_ALL, CONST_PERSISTENT);
+#endif
+ REGISTER_LONG_CONSTANT("IMAGETYPE_GIF", IMAGE_FILETYPE_GIF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_JPEG", IMAGE_FILETYPE_JPEG, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_PNG", IMAGE_FILETYPE_PNG, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_SWF", IMAGE_FILETYPE_SWF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_PSD", IMAGE_FILETYPE_PSD, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_BMP", IMAGE_FILETYPE_BMP, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_TIFF_II", IMAGE_FILETYPE_TIFF_II, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_TIFF_MM", IMAGE_FILETYPE_TIFF_MM, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_JPC", IMAGE_FILETYPE_JPC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_JP2", IMAGE_FILETYPE_JP2, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_JPX", IMAGE_FILETYPE_JPX, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_JB2", IMAGE_FILETYPE_JB2, CONST_PERSISTENT);
+#if (defined(HAVE_ZLIB) && !defined(COMPILE_DL_ZLIB))
+ REGISTER_LONG_CONSTANT("IMAGETYPE_SWC", IMAGE_FILETYPE_SWC, CONST_PERSISTENT);
+#endif
+ REGISTER_LONG_CONSTANT("IMAGETYPE_IFF", IMAGE_FILETYPE_IFF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_WBMP", IMAGE_FILETYPE_WBMP, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_JPEG2000", IMAGE_FILETYPE_JPC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_XBM", IMAGE_FILETYPE_XBM, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_ICO", IMAGE_FILETYPE_ICO, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_WEBP", IMAGE_FILETYPE_WEBP, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_AVIF", IMAGE_FILETYPE_AVIF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_UNKNOWN", IMAGE_FILETYPE_UNKNOWN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("IMAGETYPE_COUNT", IMAGE_FILETYPE_COUNT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_EMERG", LOG_EMERG, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_ALERT", LOG_ALERT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_CRIT", LOG_CRIT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_ERR", LOG_ERR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_WARNING", LOG_WARNING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_NOTICE", LOG_NOTICE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_INFO", LOG_INFO, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_DEBUG", LOG_DEBUG, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_KERN", LOG_KERN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_USER", LOG_USER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_MAIL", LOG_MAIL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_DAEMON", LOG_DAEMON, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_AUTH", LOG_AUTH, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_SYSLOG", LOG_SYSLOG, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_LPR", LOG_LPR, CONST_PERSISTENT);
+#if defined(LOG_NEWS)
+ REGISTER_LONG_CONSTANT("LOG_NEWS", LOG_NEWS, CONST_PERSISTENT);
+#endif
+#if defined(LOG_UUCP)
+ REGISTER_LONG_CONSTANT("LOG_UUCP", LOG_UUCP, CONST_PERSISTENT);
+#endif
+#if defined(LOG_CRON)
+ REGISTER_LONG_CONSTANT("LOG_CRON", LOG_CRON, CONST_PERSISTENT);
+#endif
+#if defined(LOG_AUTHPRIV)
+ REGISTER_LONG_CONSTANT("LOG_AUTHPRIV", LOG_AUTHPRIV, CONST_PERSISTENT);
+#endif
+#if !defined(PHP_WIN32)
+ REGISTER_LONG_CONSTANT("LOG_LOCAL0", LOG_LOCAL0, CONST_PERSISTENT);
+#endif
+#if !defined(PHP_WIN32)
+ REGISTER_LONG_CONSTANT("LOG_LOCAL1", LOG_LOCAL1, CONST_PERSISTENT);
+#endif
+#if !defined(PHP_WIN32)
+ REGISTER_LONG_CONSTANT("LOG_LOCAL2", LOG_LOCAL2, CONST_PERSISTENT);
+#endif
+#if !defined(PHP_WIN32)
+ REGISTER_LONG_CONSTANT("LOG_LOCAL3", LOG_LOCAL3, CONST_PERSISTENT);
+#endif
+#if !defined(PHP_WIN32)
+ REGISTER_LONG_CONSTANT("LOG_LOCAL4", LOG_LOCAL4, CONST_PERSISTENT);
+#endif
+#if !defined(PHP_WIN32)
+ REGISTER_LONG_CONSTANT("LOG_LOCAL5", LOG_LOCAL5, CONST_PERSISTENT);
+#endif
+#if !defined(PHP_WIN32)
+ REGISTER_LONG_CONSTANT("LOG_LOCAL6", LOG_LOCAL6, CONST_PERSISTENT);
+#endif
+#if !defined(PHP_WIN32)
+ REGISTER_LONG_CONSTANT("LOG_LOCAL7", LOG_LOCAL7, CONST_PERSISTENT);
+#endif
+ REGISTER_LONG_CONSTANT("LOG_PID", LOG_PID, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_CONS", LOG_CONS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_ODELAY", LOG_ODELAY, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOG_NDELAY", LOG_NDELAY, CONST_PERSISTENT);
+#if defined(LOG_NOWAIT)
+ REGISTER_LONG_CONSTANT("LOG_NOWAIT", LOG_NOWAIT, CONST_PERSISTENT);
+#endif
+#if defined(LOG_PERROR)
+ REGISTER_LONG_CONSTANT("LOG_PERROR", LOG_PERROR, CONST_PERSISTENT);
+#endif
+ REGISTER_LONG_CONSTANT("STR_PAD_LEFT", PHP_STR_PAD_LEFT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STR_PAD_RIGHT", PHP_STR_PAD_RIGHT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STR_PAD_BOTH", PHP_STR_PAD_BOTH, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PATHINFO_DIRNAME", PHP_PATHINFO_DIRNAME, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PATHINFO_BASENAME", PHP_PATHINFO_BASENAME, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PATHINFO_EXTENSION", PHP_PATHINFO_EXTENSION, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PATHINFO_FILENAME", PHP_PATHINFO_FILENAME, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PATHINFO_ALL", PHP_PATHINFO_ALL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("CHAR_MAX", CHAR_MAX, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_CTYPE", LC_CTYPE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_NUMERIC", LC_NUMERIC, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_TIME", LC_TIME, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_COLLATE", LC_COLLATE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_MONETARY", LC_MONETARY, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LC_ALL", LC_ALL, CONST_PERSISTENT);
+#if defined(LC_MESSAGES)
+ REGISTER_LONG_CONSTANT("LC_MESSAGES", LC_MESSAGES, CONST_PERSISTENT);
+#endif
+
+
+ zend_add_parameter_attribute(zend_hash_str_find_ptr(CG(function_table), "crypt", sizeof("crypt") - 1), 0, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0);
+
+ zend_add_parameter_attribute(zend_hash_str_find_ptr(CG(function_table), "password_hash", sizeof("password_hash") - 1), 0, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0);
+
+ zend_add_parameter_attribute(zend_hash_str_find_ptr(CG(function_table), "password_verify", sizeof("password_verify") - 1), 0, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0);
+}
+
static zend_class_entry *register_class___PHP_Incomplete_Class(void)
{
zend_class_entry ce, *class_entry;
@@ -3517,8 +3728,12 @@
INIT_CLASS_ENTRY(ce, "__PHP_Incomplete_Class", class___PHP_Incomplete_Class_methods);
class_entry = zend_register_internal_class_ex(&ce, NULL);
- class_entry->ce_flags |= ZEND_ACC_FINAL;
+ class_entry->ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES;
+ zend_string *attribute_name_AllowDynamicProperties_class___PHP_Incomplete_Class = zend_string_init_interned("AllowDynamicProperties", sizeof("AllowDynamicProperties") - 1, 1);
+ zend_add_class_attribute(class_entry, attribute_name_AllowDynamicProperties_class___PHP_Incomplete_Class, 0);
+ zend_string_release(attribute_name_AllowDynamicProperties_class___PHP_Incomplete_Class);
+
return class_entry;
}
Modified: trunk/MgDev/Oem/php/include/ext/standard/credits_ext.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/credits_ext.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/credits_ext.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -55,6 +55,7 @@
CREDIT_LINE("PostgreSQL driver for PDO", "Edin Kadribasic, Ilia Alshanetsky");
CREDIT_LINE("PostgreSQL", "Jouni Ahto, Zeev Suraski, Yasuo Ohgaki, Chris Kings-Lynne");
CREDIT_LINE("Pspell", "Vlad Krupin");
+CREDIT_LINE("random", "Go Kudo, Tim Düsterhus, Guilliam Xavier, Christoph M. Becker, Jakub Zelenka, Bob Weinand, Máté Kocsis, and Original RNG implementators");
CREDIT_LINE("Readline", "Thies C. Arntzen");
CREDIT_LINE("Reflection", "Marcus Boerger, Timm Friebe, George Schlossnagle, Andrei Zmievski, Johannes Schlueter");
CREDIT_LINE("Sessions", "Sascha Schumann, Andrei Zmievski");
Modified: trunk/MgDev/Oem/php/include/ext/standard/crypt_freesec.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/crypt_freesec.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/crypt_freesec.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,14 +1,8 @@
#ifndef _CRYPT_FREESEC_H
#define _CRYPT_FREESEC_H
-#ifdef PHP_WIN32
-# ifndef inline
-# define inline __inline
-# endif
-#endif
+#include <stdint.h>
-#include "php_stdint.h"
-
#define MD5_HASH_MAX_LEN 120
struct php_crypt_extended_data {
Modified: trunk/MgDev/Oem/php/include/ext/standard/file.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/file.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/file.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -48,16 +48,17 @@
zval *wouldblock, zval *return_value);
#define PHP_CSV_NO_ESCAPE EOF
-PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, int escape_char, size_t buf_len, char *buf, zval *return_value);
+PHPAPI HashTable *php_bc_fgetcsv_empty_line(void);
+PHPAPI HashTable *php_fgetcsv(php_stream *stream, char delimiter, char enclosure, int escape_char, size_t buf_len, char *buf);
PHPAPI ssize_t php_fputcsv(php_stream *stream, zval *fields, char delimiter, char enclosure, int escape_char, zend_string *eol_str);
#define META_DEF_BUFSIZE 8192
-#define PHP_FILE_USE_INCLUDE_PATH 1
-#define PHP_FILE_IGNORE_NEW_LINES 2
-#define PHP_FILE_SKIP_EMPTY_LINES 4
-#define PHP_FILE_APPEND 8
-#define PHP_FILE_NO_DEFAULT_CONTEXT 16
+#define PHP_FILE_USE_INCLUDE_PATH (1 << 0)
+#define PHP_FILE_IGNORE_NEW_LINES (1 << 1)
+#define PHP_FILE_SKIP_EMPTY_LINES (1 << 2)
+#define PHP_FILE_APPEND (1 << 3)
+#define PHP_FILE_NO_DEFAULT_CONTEXT (1 << 4)
typedef enum _php_meta_tags_token {
TOK_EOF = 0,
@@ -96,7 +97,7 @@
HashTable *stream_filters; /* per-request copy of stream_filters_hash */
HashTable *wrapper_errors; /* key: wrapper address; value: linked list of char* */
int pclose_wait;
-#if defined(HAVE_GETHOSTBYNAME_R)
+#ifdef HAVE_GETHOSTBYNAME_R
struct hostent tmp_host_info;
char *tmp_host_buf;
size_t tmp_host_buf_len;
Added: trunk/MgDev/Oem/php/include/ext/standard/file_arginfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/file_arginfo.h (rev 0)
+++ trunk/MgDev/Oem/php/include/ext/standard/file_arginfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -0,0 +1,127 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: e9a566d5ef96f781074027b1b3ff1824d0208b47 */
+
+
+
+static void register_file_symbols(int module_number)
+{
+ REGISTER_LONG_CONSTANT("SEEK_SET", SEEK_SET, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SEEK_CUR", SEEK_CUR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SEEK_END", SEEK_END, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOCK_SH", PHP_LOCK_SH, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOCK_EX", PHP_LOCK_EX, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOCK_UN", PHP_LOCK_UN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOCK_NB", PHP_LOCK_NB, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_CONNECT", PHP_STREAM_NOTIFY_CONNECT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_AUTH_REQUIRED", PHP_STREAM_NOTIFY_AUTH_REQUIRED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_AUTH_RESULT", PHP_STREAM_NOTIFY_AUTH_RESULT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_MIME_TYPE_IS", PHP_STREAM_NOTIFY_MIME_TYPE_IS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_FILE_SIZE_IS", PHP_STREAM_NOTIFY_FILE_SIZE_IS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_REDIRECTED", PHP_STREAM_NOTIFY_REDIRECTED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_PROGRESS", PHP_STREAM_NOTIFY_PROGRESS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_FAILURE", PHP_STREAM_NOTIFY_FAILURE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_COMPLETED", PHP_STREAM_NOTIFY_COMPLETED, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_RESOLVE", PHP_STREAM_NOTIFY_RESOLVE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_INFO", PHP_STREAM_NOTIFY_SEVERITY_INFO, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_WARN", PHP_STREAM_NOTIFY_SEVERITY_WARN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_NOTIFY_SEVERITY_ERR", PHP_STREAM_NOTIFY_SEVERITY_ERR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_FILTER_READ", PHP_STREAM_FILTER_READ, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_FILTER_WRITE", PHP_STREAM_FILTER_WRITE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_FILTER_ALL", PHP_STREAM_FILTER_ALL, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CLIENT_PERSISTENT", PHP_STREAM_CLIENT_PERSISTENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CLIENT_ASYNC_CONNECT", PHP_STREAM_CLIENT_ASYNC_CONNECT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CLIENT_CONNECT", PHP_STREAM_CLIENT_CONNECT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_ANY_CLIENT", STREAM_CRYPTO_METHOD_ANY_CLIENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv2_CLIENT", STREAM_CRYPTO_METHOD_SSLv2_CLIENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv3_CLIENT", STREAM_CRYPTO_METHOD_SSLv3_CLIENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv23_CLIENT", STREAM_CRYPTO_METHOD_SSLv23_CLIENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLS_CLIENT", STREAM_CRYPTO_METHOD_TLS_CLIENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT", STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT", STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT", STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT", STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_ANY_SERVER", STREAM_CRYPTO_METHOD_ANY_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv2_SERVER", STREAM_CRYPTO_METHOD_SSLv2_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv3_SERVER", STREAM_CRYPTO_METHOD_SSLv3_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_SSLv23_SERVER", STREAM_CRYPTO_METHOD_SSLv23_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLS_SERVER", STREAM_CRYPTO_METHOD_TLS_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_0_SERVER", STREAM_CRYPTO_METHOD_TLSv1_0_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_1_SERVER", STREAM_CRYPTO_METHOD_TLSv1_1_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_2_SERVER", STREAM_CRYPTO_METHOD_TLSv1_2_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_METHOD_TLSv1_3_SERVER", STREAM_CRYPTO_METHOD_TLSv1_3_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_SSLv3", STREAM_CRYPTO_METHOD_SSLv3_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_TLSv1_0", STREAM_CRYPTO_METHOD_TLSv1_0_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_TLSv1_1", STREAM_CRYPTO_METHOD_TLSv1_1_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_TLSv1_2", STREAM_CRYPTO_METHOD_TLSv1_2_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_CRYPTO_PROTO_TLSv1_3", STREAM_CRYPTO_METHOD_TLSv1_3_SERVER, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_SHUT_RD", STREAM_SHUT_RD, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_SHUT_WR", STREAM_SHUT_WR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_SHUT_RDWR", STREAM_SHUT_RDWR, CONST_PERSISTENT);
+#if defined(PF_INET)
+ REGISTER_LONG_CONSTANT("STREAM_PF_INET", PF_INET, CONST_PERSISTENT);
+#endif
+#if (!defined(PF_INET) && defined(AF_INET))
+ REGISTER_LONG_CONSTANT("STREAM_PF_INET", AF_INET, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_IPV6) && defined(PF_INET6)
+ REGISTER_LONG_CONSTANT("STREAM_PF_INET6", PF_INET6, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_IPV6) && (!defined(PF_INET6) && defined(AF_INET6))
+ REGISTER_LONG_CONSTANT("STREAM_PF_INET6", AF_INET6, CONST_PERSISTENT);
+#endif
+#if defined(PF_UNIX)
+ REGISTER_LONG_CONSTANT("STREAM_PF_UNIX", PF_UNIX, CONST_PERSISTENT);
+#endif
+#if (!defined(PF_UNIX) && defined(AF_UNIX))
+ REGISTER_LONG_CONSTANT("STREAM_PF_UNIX", AF_UNIX, CONST_PERSISTENT);
+#endif
+#if defined(IPPROTO_IP)
+ REGISTER_LONG_CONSTANT("STREAM_IPPROTO_IP", IPPROTO_IP, CONST_PERSISTENT);
+#endif
+#if (defined(IPPROTO_TCP) || defined(PHP_WIN32))
+ REGISTER_LONG_CONSTANT("STREAM_IPPROTO_TCP", IPPROTO_TCP, CONST_PERSISTENT);
+#endif
+#if (defined(IPPROTO_UDP) || defined(PHP_WIN32))
+ REGISTER_LONG_CONSTANT("STREAM_IPPROTO_UDP", IPPROTO_UDP, CONST_PERSISTENT);
+#endif
+#if (defined(IPPROTO_ICMP) || defined(PHP_WIN32))
+ REGISTER_LONG_CONSTANT("STREAM_IPPROTO_ICMP", IPPROTO_ICMP, CONST_PERSISTENT);
+#endif
+#if (defined(IPPROTO_RAW) || defined(PHP_WIN32))
+ REGISTER_LONG_CONSTANT("STREAM_IPPROTO_RAW", IPPROTO_RAW, CONST_PERSISTENT);
+#endif
+ REGISTER_LONG_CONSTANT("STREAM_SOCK_STREAM", SOCK_STREAM, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_SOCK_DGRAM", SOCK_DGRAM, CONST_PERSISTENT);
+#if defined(SOCK_RAW)
+ REGISTER_LONG_CONSTANT("STREAM_SOCK_RAW", SOCK_RAW, CONST_PERSISTENT);
+#endif
+#if defined(SOCK_SEQPACKET)
+ REGISTER_LONG_CONSTANT("STREAM_SOCK_SEQPACKET", SOCK_SEQPACKET, CONST_PERSISTENT);
+#endif
+#if defined(SOCK_RDM)
+ REGISTER_LONG_CONSTANT("STREAM_SOCK_RDM", SOCK_RDM, CONST_PERSISTENT);
+#endif
+ REGISTER_LONG_CONSTANT("STREAM_PEEK", STREAM_PEEK, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_OOB", STREAM_OOB, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_SERVER_BIND", STREAM_XPORT_BIND, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("STREAM_SERVER_LISTEN", STREAM_XPORT_LISTEN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FILE_USE_INCLUDE_PATH", PHP_FILE_USE_INCLUDE_PATH, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FILE_IGNORE_NEW_LINES", PHP_FILE_IGNORE_NEW_LINES, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FILE_SKIP_EMPTY_LINES", PHP_FILE_SKIP_EMPTY_LINES, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FILE_APPEND", PHP_FILE_APPEND, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FILE_NO_DEFAULT_CONTEXT", PHP_FILE_NO_DEFAULT_CONTEXT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FILE_TEXT", 0, CONST_PERSISTENT | CONST_DEPRECATED);
+ REGISTER_LONG_CONSTANT("FILE_BINARY", 0, CONST_PERSISTENT | CONST_DEPRECATED);
+#if defined(HAVE_FNMATCH)
+ REGISTER_LONG_CONSTANT("FNM_NOESCAPE", FNM_NOESCAPE, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_FNMATCH)
+ REGISTER_LONG_CONSTANT("FNM_PATHNAME", FNM_PATHNAME, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_FNMATCH)
+ REGISTER_LONG_CONSTANT("FNM_PERIOD", FNM_PERIOD, CONST_PERSISTENT);
+#endif
+#if defined(HAVE_FNMATCH) && defined(FNM_CASEFOLD)
+ REGISTER_LONG_CONSTANT("FNM_CASEFOLD", FNM_CASEFOLD, CONST_PERSISTENT);
+#endif
+}
Modified: trunk/MgDev/Oem/php/include/ext/standard/flock_compat.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/flock_compat.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/flock_compat.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -17,7 +17,7 @@
#ifndef FLOCK_COMPAT_H
#define FLOCK_COMPAT_H
-#if HAVE_STRUCT_FLOCK
+#ifdef HAVE_STRUCT_FLOCK
#include <unistd.h>
#include <fcntl.h>
#include <sys/file.h>
@@ -57,17 +57,16 @@
# define ftruncate(a, b) chsize(a, b)
#endif /* defined(PHP_WIN32) */
-#if !HAVE_INET_ATON
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#ifndef PHP_WIN32
+#ifndef HAVE_INET_ATON
+# ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+# endif
+# ifdef HAVE_ARPA_INET_H
+# include <arpa/inet.h>
+# endif
+# ifndef PHP_WIN32
extern int inet_aton(const char *, struct in_addr *);
+# endif
#endif
-#endif
#endif /* FLOCK_COMPAT_H */
Modified: trunk/MgDev/Oem/php/include/ext/standard/html.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/html.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/html.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -47,6 +47,6 @@
PHPAPI zend_string *php_escape_html_entities(const unsigned char *old, size_t oldlen, int all, int flags, const char *hint_charset);
PHPAPI zend_string *php_escape_html_entities_ex(const unsigned char *old, size_t oldlen, int all, int flags, const char *hint_charset, bool double_encode, bool quiet);
PHPAPI zend_string *php_unescape_html_entities(zend_string *str, int all, int flags, const char *hint_charset);
-PHPAPI unsigned int php_next_utf8_char(const unsigned char *str, size_t str_len, size_t *cursor, int *status);
+PHPAPI unsigned int php_next_utf8_char(const unsigned char *str, size_t str_len, size_t *cursor, zend_result *status);
#endif /* HTML_H */
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_array.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_array.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_array.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -20,6 +20,8 @@
#ifndef PHP_ARRAY_H
#define PHP_ARRAY_H
+# include "ext/random/php_random.h"
+
PHP_MINIT_FUNCTION(array);
PHP_MSHUTDOWN_FUNCTION(array);
@@ -29,6 +31,22 @@
PHPAPI int php_multisort_compare(const void *a, const void *b);
PHPAPI zend_long php_count_recursive(HashTable *ht);
+PHPAPI bool php_array_data_shuffle(const php_random_algo *algo, php_random_status *status, zval *array);
+PHPAPI bool php_array_pick_keys(const php_random_algo *algo, php_random_status *status, zval *input, zend_long num_req, zval *retval, bool silent);
+
+#define PHP_EXTR_OVERWRITE 0
+#define PHP_EXTR_SKIP 1
+#define PHP_EXTR_PREFIX_SAME 2
+#define PHP_EXTR_PREFIX_ALL 3
+#define PHP_EXTR_PREFIX_INVALID 4
+#define PHP_EXTR_PREFIX_IF_EXISTS 5
+#define PHP_EXTR_IF_EXISTS 6
+
+#define PHP_EXTR_REFS 0x100
+
+#define PHP_CASE_LOWER 0
+#define PHP_CASE_UPPER 1
+
#define PHP_SORT_REGULAR 0
#define PHP_SORT_NUMERIC 1
#define PHP_SORT_STRING 2
@@ -38,8 +56,8 @@
#define PHP_SORT_NATURAL 6
#define PHP_SORT_FLAG_CASE 8
-#define COUNT_NORMAL 0
-#define COUNT_RECURSIVE 1
+#define PHP_COUNT_NORMAL 0
+#define PHP_COUNT_RECURSIVE 1
#define ARRAY_FILTER_USE_BOTH 1
#define ARRAY_FILTER_USE_KEY 2
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_dir.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_dir.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_dir.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -20,9 +20,6 @@
/* directory functions */
PHP_MINIT_FUNCTION(dir);
PHP_RINIT_FUNCTION(dir);
-PHP_FUNCTION(closedir);
-PHP_FUNCTION(rewinddir);
-PHP_FUNCTION(readdir);
#define PHP_SCANDIR_SORT_ASCENDING 0
#define PHP_SCANDIR_SORT_DESCENDING 1
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_dns.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_dns.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_dns.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -29,7 +29,7 @@
#elif defined(HAVE_RES_NSEARCH)
#define php_dns_search(res, dname, class, type, answer, anslen) \
res_nsearch(res, dname, class, type, answer, anslen);
-#if HAVE_RES_NDESTROY
+#ifdef HAVE_RES_NDESTROY
#define php_dns_free_handle(res) \
res_ndestroy(res); \
php_dns_free_res(res)
@@ -52,16 +52,37 @@
#define HAVE_DNS_SEARCH_FUNC 1
#endif
-#if HAVE_DNS_SEARCH_FUNC && HAVE_DN_EXPAND && HAVE_DN_SKIPNAME
+#if defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_DN_EXPAND) && defined(HAVE_DN_SKIPNAME)
#define HAVE_FULL_DNS_FUNCS 1
#endif
-#if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
-# if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
-PHP_MINIT_FUNCTION(dns);
-# endif
-#endif /* defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC */
+#if defined(PHP_WIN32) || (defined(HAVE_DNS_SEARCH_FUNC) && defined(HAVE_FULL_DNS_FUNCS))
+#define PHP_DNS_A 0x00000001
+#define PHP_DNS_NS 0x00000002
+#define PHP_DNS_CNAME 0x00000010
+#define PHP_DNS_SOA 0x00000020
+#define PHP_DNS_PTR 0x00000800
+#define PHP_DNS_HINFO 0x00001000
+#if !defined(PHP_WIN32)
+# define PHP_DNS_CAA 0x00002000
+#endif
+#define PHP_DNS_MX 0x00004000
+#define PHP_DNS_TXT 0x00008000
+#define PHP_DNS_A6 0x01000000
+#define PHP_DNS_SRV 0x02000000
+#define PHP_DNS_NAPTR 0x04000000
+#define PHP_DNS_AAAA 0x08000000
+#define PHP_DNS_ANY 0x10000000
+#if defined(PHP_WIN32)
+# define PHP_DNS_NUM_TYPES 12 /* Number of DNS Types Supported by PHP currently */
+# define PHP_DNS_ALL (PHP_DNS_A|PHP_DNS_NS|PHP_DNS_CNAME|PHP_DNS_SOA|PHP_DNS_PTR|PHP_DNS_HINFO|PHP_DNS_MX|PHP_DNS_TXT|PHP_DNS_A6|PHP_DNS_SRV|PHP_DNS_NAPTR|PHP_DNS_AAAA)
+#else
+# define PHP_DNS_NUM_TYPES 13 /* Number of DNS Types Supported by PHP currently */
+# define PHP_DNS_ALL (PHP_DNS_A|PHP_DNS_NS|PHP_DNS_CNAME|PHP_DNS_SOA|PHP_DNS_PTR|PHP_DNS_HINFO|PHP_DNS_CAA|PHP_DNS_MX|PHP_DNS_TXT|PHP_DNS_A6|PHP_DNS_SRV|PHP_DNS_NAPTR|PHP_DNS_AAAA)
+#endif
+#endif
+
#ifndef INT16SZ
#define INT16SZ 2
#endif
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_image.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_image.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_image.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -44,13 +44,11 @@
IMAGE_FILETYPE_ICO,
IMAGE_FILETYPE_WEBP,
IMAGE_FILETYPE_AVIF,
-/* WHEN EXTENDING: PLEASE ALSO REGISTER IN image.c:PHP_MINIT_FUNCTION(imagetypes) */
+/* WHEN EXTENDING: PLEASE ALSO REGISTER IN basic_function.stub.php */
IMAGE_FILETYPE_COUNT
} image_filetype;
/* }}} */
-PHP_MINIT_FUNCTION(imagetypes);
-
PHPAPI int php_getimagetype(php_stream *stream, const char *input, char *filetype);
PHPAPI char * php_image_type_to_mime_type(int image_type);
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_lcg.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_lcg.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_lcg.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,38 +1 @@
-/*
- +----------------------------------------------------------------------+
- | Copyright (c) The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | https://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license at php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Sascha Schumann <sascha at schumann.cx> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef PHP_LCG_H
-#define PHP_LCG_H
-
-#include "ext/standard/basic_functions.h"
-
-typedef struct {
- int32_t s1;
- int32_t s2;
- int seeded;
-} php_lcg_globals;
-
-PHPAPI double php_combined_lcg(void);
-
-PHP_MINIT_FUNCTION(lcg);
-
-#ifdef ZTS
-#define LCG(v) ZEND_TSRMG(lcg_globals_id, php_lcg_globals *, v)
-#else
-#define LCG(v) (lcg_globals.v)
-#endif
-
-#endif
+#include "ext/random/php_random.h"
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_mt_rand.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_mt_rand.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_mt_rand.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,40 +1 @@
-/*
- +----------------------------------------------------------------------+
- | Copyright (c) The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | https://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license at php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus at php.net> |
- | Zeev Suraski <zeev at php.net> |
- | Pedro Melo <melo at ip.pt> |
- | Sterling Hughes <sterling at php.net> |
- | |
- | Based on code from: Shawn Cokus <Cokus at math.washington.edu> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_MT_RAND_H
-#define PHP_MT_RAND_H
-
-#include "php_lcg.h"
-#include "php_rand.h"
-
-#define PHP_MT_RAND_MAX ((zend_long) (0x7FFFFFFF)) /* (1<<31) - 1 */
-
-#define MT_RAND_MT19937 0
-#define MT_RAND_PHP 1
-
-PHPAPI void php_mt_srand(uint32_t seed);
-PHPAPI uint32_t php_mt_rand(void);
-PHPAPI zend_long php_mt_rand_range(zend_long min, zend_long max);
-PHPAPI zend_long php_mt_rand_common(zend_long min, zend_long max);
-
-PHP_MINIT_FUNCTION(mt_rand);
-
-#endif /* PHP_MT_RAND_H */
+#include "ext/random/php_random.h"
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_password.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_password.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_password.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -24,7 +24,7 @@
#define PHP_PASSWORD_DEFAULT PHP_PASSWORD_BCRYPT
#define PHP_PASSWORD_BCRYPT_COST 10
-#if HAVE_ARGON2LIB
+#ifdef HAVE_ARGON2LIB
/**
* When updating these values, synchronize ext/sodium/sodium_pwhash.c values.
* Note that libargon expresses memlimit in KB, while libsoidum uses bytes.
@@ -44,7 +44,7 @@
} php_password_algo;
extern const php_password_algo php_password_algo_bcrypt;
-#if HAVE_ARGON2LIB
+#ifdef HAVE_ARGON2LIB
extern const php_password_algo php_password_algo_argon2i;
extern const php_password_algo php_password_algo_argon2id;
#endif
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_rand.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_rand.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_rand.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,72 +1 @@
-/*
- +----------------------------------------------------------------------+
- | Copyright (c) The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | https://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license at php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus at php.net> |
- | Zeev Suraski <zeev at php.net> |
- | Pedro Melo <melo at ip.pt> |
- | Sterling Hughes <sterling at php.net> |
- | |
- | Based on code from: Shawn Cokus <Cokus at math.washington.edu> |
- +----------------------------------------------------------------------+
- */
-
-#ifndef PHP_RAND_H
-#define PHP_RAND_H
-
-#include "php_lcg.h"
-#include "php_mt_rand.h"
-
-/* System Rand functions */
-#ifndef RAND_MAX
-#define RAND_MAX PHP_MT_RAND_MAX
-#endif
-
-#define PHP_RAND_MAX PHP_MT_RAND_MAX
-
-/*
- * A bit of tricky math here. We want to avoid using a modulus because
- * that simply tosses the high-order bits and might skew the distribution
- * of random values over the range. Instead we map the range directly.
- *
- * We need to map the range from 0...M evenly to the range a...b
- * Let n = the random number and n' = the mapped random number
- *
- * Then we have: n' = a + n(b-a)/M
- *
- * We have a problem here in that only n==M will get mapped to b which
- # means the chances of getting b is much much less than getting any of
- # the other values in the range. We can fix this by increasing our range
- # artificially and using:
- #
- # n' = a + n(b-a+1)/M
- *
- # Now we only have a problem if n==M which would cause us to produce a
- # number of b+1 which would be bad. So we bump M up by one to make sure
- # this will never happen, and the final algorithm looks like this:
- #
- # n' = a + n(b-a+1)/(M+1)
- *
- * -RL
- */
-#define RAND_RANGE_BADSCALING(__n, __min, __max, __tmax) \
- (__n) = (__min) + (zend_long) ((double) ( (double) (__max) - (__min) + 1.0) * ((__n) / ((__tmax) + 1.0)))
-
-#ifdef PHP_WIN32
-#define GENERATE_SEED() (((zend_long) (time(0) * GetCurrentProcessId())) ^ ((zend_long) (1000000.0 * php_combined_lcg())))
-#else
-#define GENERATE_SEED() (((zend_long) (time(0) * getpid())) ^ ((zend_long) (1000000.0 * php_combined_lcg())))
-#endif
-
-PHPAPI void php_srand(zend_long seed);
-PHPAPI zend_long php_rand(void);
-
-#endif /* PHP_RAND_H */
+#include "ext/random/php_random.h"
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_random.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_random.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_random.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,50 +1 @@
-/*
- +----------------------------------------------------------------------+
- | Copyright (c) The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | https://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license at php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Sammy Kaye Powers <me at sammyk.me> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef PHP_RANDOM_H
-#define PHP_RANDOM_H
-
-BEGIN_EXTERN_C()
-
-PHP_MINIT_FUNCTION(random);
-PHP_MSHUTDOWN_FUNCTION(random);
-
-typedef struct {
- int fd;
-} php_random_globals;
-
-#define php_random_bytes_throw(b, s) php_random_bytes((b), (s), 1)
-#define php_random_bytes_silent(b, s) php_random_bytes((b), (s), 0)
-
-#define php_random_int_throw(min, max, result) \
- php_random_int((min), (max), (result), 1)
-#define php_random_int_silent(min, max, result) \
- php_random_int((min), (max), (result), 0)
-
-PHPAPI int php_random_bytes(void *bytes, size_t size, bool should_throw);
-PHPAPI int php_random_int(zend_long min, zend_long max, zend_long *result, bool should_throw);
-
-#ifdef ZTS
-# define RANDOM_G(v) ZEND_TSRMG(random_globals_id, php_random_globals *, v)
-extern PHPAPI int random_globals_id;
-#else
-# define RANDOM_G(v) random_globals.v
-extern PHPAPI php_random_globals random_globals;
-#endif
-
-END_EXTERN_C()
-
-#endif
+#include "ext/random/php_random.h"
\ No newline at end of file
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_standard.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_standard.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_standard.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -42,13 +42,11 @@
#include "dl.h"
#include "php_crypt.h"
#include "head.h"
-#include "php_lcg.h"
#include "php_output.h"
#include "php_array.h"
#include "php_assert.h"
#include "php_versioning.h"
#include "php_password.h"
-#include "php_random.h"
#include "php_version.h"
#define PHP_STANDARD_VERSION PHP_VERSION
Modified: trunk/MgDev/Oem/php/include/ext/standard/php_string.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/standard/php_string.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/standard/php_string.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -18,14 +18,16 @@
#ifndef PHP_STRING_H
#define PHP_STRING_H
-#if defined(ZTS)
+# include "ext/random/php_random.h"
+
+#ifdef ZTS
PHP_MINIT_FUNCTION(localeconv);
PHP_MSHUTDOWN_FUNCTION(localeconv);
#endif
-#if HAVE_NL_LANGINFO
+#ifdef HAVE_NL_LANGINFO
PHP_MINIT_FUNCTION(nl_langinfo);
#endif
-#if ZEND_INTRIN_SSE4_2_FUNC_PTR
+#ifdef ZEND_INTRIN_SSE4_2_FUNC_PTR
PHP_MINIT_FUNCTION(string_intrin);
#endif
@@ -33,7 +35,7 @@
strnatcmp_ex(a, strlen(a), b, strlen(b), 0)
#define strnatcasecmp(a, b) \
strnatcmp_ex(a, strlen(a), b, strlen(b), 1)
-PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, int fold_case);
+PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, bool is_case_insensitive);
PHPAPI struct lconv *localeconv_r(struct lconv *out);
PHPAPI char *php_strtoupper(char *s, size_t len);
PHPAPI char *php_strtolower(char *s, size_t len);
@@ -63,7 +65,9 @@
PHPAPI int string_natural_compare_function(zval *result, zval *op1, zval *op2);
PHPAPI int string_natural_case_compare_function(zval *result, zval *op1, zval *op2);
-#if defined(_REENTRANT)
+PHPAPI bool php_binary_string_shuffle(const php_random_algo *algo, php_random_status *status, char *str, zend_long len);
+
+#ifdef _REENTRANT
# ifdef PHP_WIN32
# include <wchar.h>
# endif
@@ -74,6 +78,16 @@
# define php_mb_reset() php_ignore_value(mblen(NULL, 0))
#endif
-void register_string_constants(INIT_FUNC_ARGS);
+#define PHP_STR_PAD_LEFT 0
+#define PHP_STR_PAD_RIGHT 1
+#define PHP_STR_PAD_BOTH 2
+#define PHP_PATHINFO_DIRNAME 1
+#define PHP_PATHINFO_BASENAME 2
+#define PHP_PATHINFO_EXTENSION 4
+#define PHP_PATHINFO_FILENAME 8
+#define PHP_PATHINFO_ALL (PHP_PATHINFO_DIRNAME | PHP_PATHINFO_BASENAME | PHP_PATHINFO_EXTENSION | PHP_PATHINFO_FILENAME)
+#define PHP_STR_STRSPN 0
+#define PHP_STR_STRCSPN 1
+
#endif /* PHP_STRING_H */
Modified: trunk/MgDev/Oem/php/include/ext/xml/php_xml.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/xml/php_xml.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/xml/php_xml.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -39,4 +39,11 @@
#define phpext_xml_ptr xml_module_ptr
+enum php_xml_option {
+ PHP_XML_OPTION_CASE_FOLDING = 1,
+ PHP_XML_OPTION_TARGET_ENCODING,
+ PHP_XML_OPTION_SKIP_TAGSTART,
+ PHP_XML_OPTION_SKIP_WHITE
+};
+
#endif /* PHP_XML_H */
Modified: trunk/MgDev/Oem/php/include/ext/xml/xml_arginfo.h
===================================================================
--- trunk/MgDev/Oem/php/include/ext/xml/xml_arginfo.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/ext/xml/xml_arginfo.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 19ecc0e3b7a82f8b992a311788919154cdb28a5d */
+ * Stub hash: 97ce33bf2fbe970f7ca1c1845fbf5063dbd118dd */
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create, 0, 0, XMLParser, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null")
@@ -10,18 +10,18 @@
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\":\"")
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_object, 0, 2, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_object, 0, 2, IS_TRUE, 0)
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_element_handler, 0, 3, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_element_handler, 0, 3, IS_TRUE, 0)
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
ZEND_ARG_INFO(0, start_handler)
ZEND_ARG_INFO(0, end_handler)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_character_data_handler, 0, 2, _IS_BOOL, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_character_data_handler, 0, 2, IS_TRUE, 0)
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
ZEND_ARG_INFO(0, handler)
ZEND_END_ARG_INFO()
@@ -138,6 +138,36 @@
ZEND_FE_END
};
+static void register_xml_symbols(int module_number)
+{
+ REGISTER_LONG_CONSTANT("XML_ERROR_NONE", XML_ERROR_NONE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_NO_MEMORY", XML_ERROR_NO_MEMORY, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_SYNTAX", XML_ERROR_SYNTAX, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_NO_ELEMENTS", XML_ERROR_NO_ELEMENTS, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_INVALID_TOKEN", XML_ERROR_INVALID_TOKEN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_UNCLOSED_TOKEN", XML_ERROR_UNCLOSED_TOKEN, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_PARTIAL_CHAR", XML_ERROR_PARTIAL_CHAR, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_TAG_MISMATCH", XML_ERROR_TAG_MISMATCH, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_DUPLICATE_ATTRIBUTE", XML_ERROR_DUPLICATE_ATTRIBUTE, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_JUNK_AFTER_DOC_ELEMENT", XML_ERROR_JUNK_AFTER_DOC_ELEMENT, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_PARAM_ENTITY_REF", XML_ERROR_PARAM_ENTITY_REF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_UNDEFINED_ENTITY", XML_ERROR_UNDEFINED_ENTITY, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_RECURSIVE_ENTITY_REF", XML_ERROR_RECURSIVE_ENTITY_REF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_ASYNC_ENTITY", XML_ERROR_ASYNC_ENTITY, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_BAD_CHAR_REF", XML_ERROR_BAD_CHAR_REF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_BINARY_ENTITY_REF", XML_ERROR_BINARY_ENTITY_REF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF", XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_MISPLACED_XML_PI", XML_ERROR_MISPLACED_XML_PI, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_UNKNOWN_ENCODING", XML_ERROR_UNKNOWN_ENCODING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_INCORRECT_ENCODING", XML_ERROR_INCORRECT_ENCODING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_UNCLOSED_CDATA_SECTION", XML_ERROR_UNCLOSED_CDATA_SECTION, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_ERROR_EXTERNAL_ENTITY_HANDLING", XML_ERROR_EXTERNAL_ENTITY_HANDLING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_OPTION_CASE_FOLDING", PHP_XML_OPTION_CASE_FOLDING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_OPTION_TARGET_ENCODING", PHP_XML_OPTION_TARGET_ENCODING, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_TAGSTART", PHP_XML_OPTION_SKIP_TAGSTART, CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_WHITE", PHP_XML_OPTION_SKIP_WHITE, CONST_PERSISTENT);
+}
+
static zend_class_entry *register_class_XMLParser(void)
{
zend_class_entry ce, *class_entry;
Modified: trunk/MgDev/Oem/php/include/main/SAPI.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/SAPI.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/SAPI.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -238,7 +238,7 @@
void (*register_server_variables)(zval *track_vars_array);
void (*log_message)(const char *message, int syslog_type_int);
- double (*get_request_time)(void);
+ zend_result (*get_request_time)(double *request_time);
void (*terminate_process)(void);
char *php_ini_path_override;
Modified: trunk/MgDev/Oem/php/include/main/config.w32.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/config.w32.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/config.w32.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -27,6 +27,10 @@
#define DEFAULT_SHORT_OPEN_TAG "1"
/* Platform-Specific Configuration. Should not be changed. */
+/* Alignment for Zend memory allocator */
+#define ZEND_MM_ALIGNMENT (size_t)8
+#define ZEND_MM_ALIGNMENT_LOG2 (size_t)3
+#define ZEND_MM_NEED_EIGHT_BYTE_REALIGNMENT 0
#define PHP_SIGCHILD 0
#define HAVE_GETSERVBYNAME 1
#define HAVE_GETSERVBYPORT 1
@@ -445,12 +449,6 @@
#define HAVE_EXIF 1
/* Using MySQL native driver */
-#define MYSQLI_USE_MYSQLND 1
-
-/* Have MySQLi library */
-#define HAVE_MYSQLILIB 1
-
-/* Using MySQL native driver */
#define PDO_USE_MYSQLND 1
/* Have PostgreSQL library */
Modified: trunk/MgDev/Oem/php/include/main/php.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/php.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -22,7 +22,7 @@
#include <dmalloc.h>
#endif
-#define PHP_API_VERSION 20210902
+#define PHP_API_VERSION 20220829
#define PHP_HAVE_STREAMS
#define YYDEBUG 0
#define PHP_DEFAULT_CHARSET "UTF-8"
@@ -183,6 +183,10 @@
#define explicit_bzero php_explicit_bzero
#endif
+BEGIN_EXTERN_C()
+PHPAPI int php_safe_bcmp(const zend_string *a, const zend_string *b);
+END_EXTERN_C()
+
#ifndef HAVE_STRTOK_R
BEGIN_EXTERN_C()
char *strtok_r(char *s, const char *delim, char **last);
@@ -215,8 +219,6 @@
#include <stdarg.h>
-#include "php_stdint.h"
-
#include "zend_hash.h"
#include "zend_alloc.h"
#include "zend_stack.h"
@@ -301,9 +303,9 @@
PHPAPI size_t php_write(void *buf, size_t size);
PHPAPI size_t php_printf(const char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 1, 2);
PHPAPI size_t php_printf_unchecked(const char *format, ...);
-PHPAPI int php_during_module_startup(void);
-PHPAPI int php_during_module_shutdown(void);
-PHPAPI int php_get_module_initialized(void);
+PHPAPI bool php_during_module_startup(void);
+PHPAPI bool php_during_module_shutdown(void);
+PHPAPI bool php_get_module_initialized(void);
#ifdef HAVE_SYSLOG_H
#include "php_syslog.h"
#define php_log_err(msg) php_log_err_with_severity(msg, LOG_NOTICE)
@@ -348,6 +350,7 @@
#define phpin zendin
#define php_memnstr zend_memnstr
+#define php_memnistr zend_memnistr
/* functions */
BEGIN_EXTERN_C()
Modified: trunk/MgDev/Oem/php/include/main/php_globals.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_globals.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/php_globals.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -153,6 +153,7 @@
char *request_order;
bool mail_x_header;
+ bool mail_mixed_lf_and_crlf;
char *mail_log;
bool in_error_log;
@@ -165,6 +166,7 @@
char *syslog_ident;
bool have_called_openlog;
zend_long syslog_filter;
+ zend_long error_log_mode;
};
Added: trunk/MgDev/Oem/php/include/main/php_ini_builder.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_ini_builder.h (rev 0)
+++ trunk/MgDev/Oem/php/include/main/php_ini_builder.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -0,0 +1,95 @@
+/*
+ +----------------------------------------------------------------------+
+ | Copyright (c) The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | https://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license at php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Max Kellermann <max.kellermann at ionos.com> |
+ +----------------------------------------------------------------------+
+*/
+
+#ifndef PHP_INI_BUILDER_H
+#define PHP_INI_BUILDER_H
+
+#include "php.h"
+
+/**
+ * A class which helps with constructing INI entries from the command
+ * line.
+ */
+struct php_ini_builder {
+ char *value;
+ size_t length;
+};
+
+BEGIN_EXTERN_C()
+
+static inline void php_ini_builder_init(struct php_ini_builder *b)
+{
+ b->value = NULL;
+ b->length = 0;
+}
+
+static inline void php_ini_builder_deinit(struct php_ini_builder *b)
+{
+ free(b->value);
+}
+
+/**
+ * Null-terminate the buffer and return it.
+ */
+static inline char *php_ini_builder_finish(struct php_ini_builder *b)
+{
+ if (b->value != NULL) {
+ /* null-terminate the string */
+ b->value[b->length] = '\0';
+ }
+
+ return b->value;
+}
+
+/**
+ * Make room for more data.
+ *
+ * @param delta the number of bytes to be appended
+ */
+static inline void php_ini_builder_realloc(struct php_ini_builder *b, size_t delta)
+{
+ /* reserve enough space for the null terminator */
+ b->value = realloc(b->value, b->length + delta + 1);
+}
+
+/**
+ * Prepend a string.
+ *
+ * @param src the source string
+ * @param length the size of the source string
+ */
+PHPAPI void php_ini_builder_prepend(struct php_ini_builder *b, const char *src, size_t length);
+
+#define php_ini_builder_prepend_literal(b, l) php_ini_builder_prepend(b, l, strlen(l))
+
+/**
+ * Append an unquoted name/value pair.
+ */
+PHPAPI void php_ini_builder_unquoted(struct php_ini_builder *b, const char *name, size_t name_length, const char *value, size_t value_length);
+
+/**
+ * Append a quoted name/value pair.
+ */
+PHPAPI void php_ini_builder_quoted(struct php_ini_builder *b, const char *name, size_t name_length, const char *value, size_t value_length);
+
+/**
+ * Parse an INI entry from the command-line option "--define".
+ */
+PHPAPI void php_ini_builder_define(struct php_ini_builder *b, const char *arg);
+
+END_EXTERN_C()
+
+#endif
Modified: trunk/MgDev/Oem/php/include/main/php_main.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_main.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/php_main.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -23,24 +23,23 @@
#include "SAPI.h"
BEGIN_EXTERN_C()
-PHPAPI int php_request_startup(void);
+PHPAPI zend_result php_request_startup(void);
PHPAPI void php_request_shutdown(void *dummy);
-PHPAPI int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint32_t num_additional_modules);
+PHPAPI zend_result php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_module);
PHPAPI void php_module_shutdown(void);
PHPAPI int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals);
-PHPAPI int php_register_extensions(zend_module_entry * const * ptr, int count);
+PHPAPI zend_result php_register_extensions(zend_module_entry * const * ptr, int count);
-PHPAPI int php_execute_script(zend_file_handle *primary_file);
+PHPAPI bool php_execute_script(zend_file_handle *primary_file);
PHPAPI int php_execute_simple_script(zend_file_handle *primary_file, zval *ret);
-PHPAPI int php_handle_special_queries(void);
-PHPAPI int php_lint_script(zend_file_handle *file);
+PHPAPI zend_result php_lint_script(zend_file_handle *file);
PHPAPI void php_handle_aborted_connection(void);
PHPAPI int php_handle_auth_data(const char *auth);
PHPAPI void php_html_puts(const char *str, size_t siz);
-PHPAPI int php_stream_open_for_zend_ex(zend_file_handle *handle, int mode);
+PHPAPI zend_result php_stream_open_for_zend_ex(zend_file_handle *handle, int mode);
/* environment module */
extern int php_init_environ(void);
@@ -48,7 +47,7 @@
#ifdef ZTS
PHPAPI void php_reserve_tsrm_memory(void);
-PHPAPI int php_tsrm_startup(void);
+PHPAPI bool php_tsrm_startup(void);
#endif
END_EXTERN_C()
Modified: trunk/MgDev/Oem/php/include/main/php_network.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_network.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/php_network.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -211,18 +211,37 @@
/* emit warning and suggestion for unsafe select(2) usage */
PHPAPI void _php_emit_fd_setsize_warning(int max_fd);
+static inline bool _php_check_fd_setsize(php_socket_t *max_fd, int setsize)
+{
#ifdef PHP_WIN32
+ (void)(max_fd); // Unused
+ if (setsize + 1 >= FD_SETSIZE) {
+ _php_emit_fd_setsize_warning(setsize);
+ return false;
+ }
+#else
+ (void)(setsize); // Unused
+ if (*max_fd >= FD_SETSIZE) {
+ _php_emit_fd_setsize_warning(*max_fd);
+ *max_fd = FD_SETSIZE - 1;
+ return false;
+ }
+#endif
+ return true;
+}
+
+#ifdef PHP_WIN32
/* it is safe to FD_SET too many fd's under win32; the macro will simply ignore
* descriptors that go beyond the default FD_SETSIZE */
# define PHP_SAFE_FD_SET(fd, set) FD_SET(fd, set)
# define PHP_SAFE_FD_CLR(fd, set) FD_CLR(fd, set)
# define PHP_SAFE_FD_ISSET(fd, set) FD_ISSET(fd, set)
-# define PHP_SAFE_MAX_FD(m, n) do { if (n + 1 >= FD_SETSIZE) { _php_emit_fd_setsize_warning(n); }} while(0)
+# define PHP_SAFE_MAX_FD(m, n) _php_check_fd_setsize(&m, n)
#else
# define PHP_SAFE_FD_SET(fd, set) do { if (fd < FD_SETSIZE) FD_SET(fd, set); } while(0)
# define PHP_SAFE_FD_CLR(fd, set) do { if (fd < FD_SETSIZE) FD_CLR(fd, set); } while(0)
# define PHP_SAFE_FD_ISSET(fd, set) ((fd < FD_SETSIZE) && FD_ISSET(fd, set))
-# define PHP_SAFE_MAX_FD(m, n) do { if (m >= FD_SETSIZE) { _php_emit_fd_setsize_warning(m); m = FD_SETSIZE - 1; }} while(0)
+# define PHP_SAFE_MAX_FD(m, n) _php_check_fd_setsize(&m, n)
#endif
Added: trunk/MgDev/Oem/php/include/main/php_odbc_utils.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_odbc_utils.h (rev 0)
+++ trunk/MgDev/Oem/php/include/main/php_odbc_utils.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -0,0 +1,22 @@
+/*
+ +----------------------------------------------------------------------+
+ | Copyright (c) The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | https://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license at php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Calvin Buckley <calvin at cmpct.info> |
+ +----------------------------------------------------------------------+
+*/
+
+#include "php.h"
+
+PHPAPI bool php_odbc_connstr_is_quoted(const char *str);
+PHPAPI bool php_odbc_connstr_should_quote(const char *str);
+PHPAPI size_t php_odbc_connstr_estimate_quote_length(const char *in_str);
+PHPAPI size_t php_odbc_connstr_quote(char *out_str, const char *in_str, size_t out_str_size);
Modified: trunk/MgDev/Oem/php/include/main/php_output.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_output.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/php_output.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -241,22 +241,4 @@
END_EXTERN_C()
-
-PHP_FUNCTION(ob_start);
-PHP_FUNCTION(ob_flush);
-PHP_FUNCTION(ob_clean);
-PHP_FUNCTION(ob_end_flush);
-PHP_FUNCTION(ob_end_clean);
-PHP_FUNCTION(ob_get_flush);
-PHP_FUNCTION(ob_get_clean);
-PHP_FUNCTION(ob_get_contents);
-PHP_FUNCTION(ob_get_length);
-PHP_FUNCTION(ob_get_level);
-PHP_FUNCTION(ob_get_status);
-PHP_FUNCTION(ob_implicit_flush);
-PHP_FUNCTION(ob_list_handlers);
-
-PHP_FUNCTION(output_add_rewrite_var);
-PHP_FUNCTION(output_reset_rewrite_vars);
-
#endif
Deleted: trunk/MgDev/Oem/php/include/main/php_stdint.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_stdint.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/php_stdint.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,51 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | Copyright (c) The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | https://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license at php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Michael Wallner <mike at php.net> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef PHP_STDINT_H
-#define PHP_STDINT_H
-
-/* C99 requires these for C++ to get the definitions
- * of INT64_MAX and other macros used by Zend/zend_long.h
- * C11 drops this requirement, so these effectively
- * just backport that piece of behavior.
- *
- * These defines are placed here instead of
- * with the include below, because sys/types
- * and inttypes may include stdint themselves.
- * And these definitions MUST come first.
- */
-#ifdef __cplusplus
-# ifndef __STDC_LIMIT_MACROS
-# define __STDC_LIMIT_MACROS
-# endif
-# ifndef __STDC_CONSTANT_MACROS
-# define __STDC_CONSTANT_MACROS
-# endif
-# ifndef __STDC_FORMAT_MACROS
-# define __STDC_FORMAT_MACROS
-# endif
-#endif
-
-#include <inttypes.h>
-#include <stdint.h>
-
-#if defined(_MSC_VER)
-# ifndef u_char
-typedef unsigned __int8 u_char;
-# endif
-#endif /* !_MSC_VER */
-
-#endif /* PHP_STDINT_H */
Modified: trunk/MgDev/Oem/php/include/main/php_streams.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_streams.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/php_streams.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -65,7 +65,7 @@
#define php_stream_fopen_with_path_rel(filename, mode, path, opened, options) _php_stream_fopen_with_path((filename), (mode), (path), (opened), (options) STREAMS_REL_CC)
-#define php_stream_fopen_from_fd_rel(fd, mode, persistent_id) _php_stream_fopen_from_fd((fd), (mode), (persistent_id) STREAMS_REL_CC)
+#define php_stream_fopen_from_fd_rel(fd, mode, persistent_id, zero_position) _php_stream_fopen_from_fd((fd), (mode), (persistent_id), (zero_position) STREAMS_REL_CC)
#define php_stream_fopen_from_file_rel(file, mode) _php_stream_fopen_from_file((file), (mode) STREAMS_REL_CC)
#define php_stream_fopen_from_pipe_rel(file, mode) _php_stream_fopen_from_pipe((file), (mode) STREAMS_REL_CC)
@@ -185,6 +185,9 @@
* Currently for internal use only. */
#define PHP_STREAM_FLAG_SUPPRESS_ERRORS 0x100
+/* Do not close handle except it is explicitly closed by user (e.g. fclose) */
+#define PHP_STREAM_FLAG_NO_RSCR_DTOR_CLOSE 0x200
+
#define PHP_STREAM_FLAG_WAS_WRITTEN 0x80000000
struct _php_stream {
@@ -314,7 +317,7 @@
#define php_stream_write_string(stream, str) _php_stream_write(stream, str, strlen(str))
#define php_stream_write(stream, buf, count) _php_stream_write(stream, (buf), (count))
-PHPAPI int _php_stream_fill_read_buffer(php_stream *stream, size_t size);
+PHPAPI zend_result _php_stream_fill_read_buffer(php_stream *stream, size_t size);
#define php_stream_fill_read_buffer(stream, size) _php_stream_fill_read_buffer((stream), (size))
PHPAPI ssize_t _php_stream_printf(php_stream *stream, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3);
@@ -322,7 +325,7 @@
/* php_stream_printf macro & function require */
#define php_stream_printf _php_stream_printf
-PHPAPI int _php_stream_eof(php_stream *stream);
+PHPAPI bool _php_stream_eof(php_stream *stream);
#define php_stream_eof(stream) _php_stream_eof((stream))
PHPAPI int _php_stream_getc(php_stream *stream);
@@ -343,8 +346,8 @@
#define php_stream_get_line(stream, buf, maxlen, retlen) _php_stream_get_line((stream), (buf), (maxlen), (retlen))
PHPAPI zend_string *php_stream_get_record(php_stream *stream, size_t maxlen, const char *delim, size_t delim_len);
-/* CAREFUL! this is equivalent to puts NOT fputs! */
-PHPAPI int _php_stream_puts(php_stream *stream, const char *buf);
+/* Returns true if buffer has been appended, false on error */
+PHPAPI bool _php_stream_puts(php_stream *stream, const char *buf);
#define php_stream_puts(stream, buf) _php_stream_puts((stream), (buf))
PHPAPI int _php_stream_stat(php_stream *stream, php_stream_statbuf *ssb);
@@ -466,7 +469,7 @@
ZEND_ATTRIBUTE_DEPRECATED
PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC);
#define php_stream_copy_to_stream(src, dest, maxlen) _php_stream_copy_to_stream((src), (dest), (maxlen) STREAMS_CC)
-PHPAPI int _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC);
+PHPAPI zend_result _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC);
#define php_stream_copy_to_stream_ex(src, dest, maxlen, len) _php_stream_copy_to_stream_ex((src), (dest), (maxlen), (len) STREAMS_CC)
@@ -568,15 +571,15 @@
#define STREAM_OPEN_FOR_ZEND_STREAM 0x00010000
int php_init_stream_wrappers(int module_number);
-int php_shutdown_stream_wrappers(int module_number);
+void php_shutdown_stream_wrappers(int module_number);
void php_shutdown_stream_hashes(void);
PHP_RSHUTDOWN_FUNCTION(streams);
BEGIN_EXTERN_C()
-PHPAPI int php_register_url_stream_wrapper(const char *protocol, const php_stream_wrapper *wrapper);
-PHPAPI int php_unregister_url_stream_wrapper(const char *protocol);
-PHPAPI int php_register_url_stream_wrapper_volatile(zend_string *protocol, php_stream_wrapper *wrapper);
-PHPAPI int php_unregister_url_stream_wrapper_volatile(zend_string *protocol);
+PHPAPI zend_result php_register_url_stream_wrapper(const char *protocol, const php_stream_wrapper *wrapper);
+PHPAPI zend_result php_unregister_url_stream_wrapper(const char *protocol);
+PHPAPI zend_result php_register_url_stream_wrapper_volatile(zend_string *protocol, php_stream_wrapper *wrapper);
+PHPAPI zend_result php_unregister_url_stream_wrapper_volatile(zend_string *protocol);
PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC);
PHPAPI php_stream_wrapper *php_stream_locate_url_wrapper(const char *path, const char **path_for_open, int options);
PHPAPI const char *php_stream_locate_eol(php_stream *stream, zend_string *buf);
Modified: trunk/MgDev/Oem/php/include/main/php_variables.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_variables.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/php_variables.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -36,6 +36,7 @@
/* binary-safe version */
PHPAPI void php_register_variable_safe(const char *var, const char *val, size_t val_len, zval *track_vars_array);
PHPAPI void php_register_variable_ex(const char *var, zval *val, zval *track_vars_array);
+PHPAPI void php_register_known_variable(const char *var, size_t var_len, zval *value, zval *track_vars_array);
PHPAPI void php_build_argv(const char *s, zval *track_vars_array);
PHPAPI int php_hash_environment(void);
Modified: trunk/MgDev/Oem/php/include/main/php_version.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/php_version.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/php_version.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -1,8 +1,8 @@
/* automatically generated by configure */
/* edit configure.ac to change version number */
#define PHP_MAJOR_VERSION 8
-#define PHP_MINOR_VERSION 1
-#define PHP_RELEASE_VERSION 11
+#define PHP_MINOR_VERSION 2
+#define PHP_RELEASE_VERSION 4
#define PHP_EXTRA_VERSION ""
-#define PHP_VERSION "8.1.11"
-#define PHP_VERSION_ID 80111
+#define PHP_VERSION "8.2.4"
+#define PHP_VERSION_ID 80204
Modified: trunk/MgDev/Oem/php/include/main/streams/php_stream_context.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/streams/php_stream_context.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/streams/php_stream_context.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -57,7 +57,7 @@
PHPAPI php_stream_context *php_stream_context_alloc(void);
PHPAPI zval *php_stream_context_get_option(php_stream_context *context,
const char *wrappername, const char *optionname);
-PHPAPI int php_stream_context_set_option(php_stream_context *context,
+PHPAPI void php_stream_context_set_option(php_stream_context *context,
const char *wrappername, const char *optionname, zval *optionvalue);
PHPAPI php_stream_notifier *php_stream_notification_alloc(void);
Modified: trunk/MgDev/Oem/php/include/main/streams/php_stream_plain_wrapper.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/streams/php_stream_plain_wrapper.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/streams/php_stream_plain_wrapper.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -32,8 +32,8 @@
PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STREAMS_DC);
#define php_stream_fopen_from_file(file, mode) _php_stream_fopen_from_file((file), (mode) STREAMS_CC)
-PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode, const char *persistent_id STREAMS_DC);
-#define php_stream_fopen_from_fd(fd, mode, persistent_id) _php_stream_fopen_from_fd((fd), (mode), (persistent_id) STREAMS_CC)
+PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode, const char *persistent_id, bool zero_position STREAMS_DC);
+#define php_stream_fopen_from_fd(fd, mode, persistent_id) _php_stream_fopen_from_fd((fd), (mode), (persistent_id), false STREAMS_CC)
PHPAPI php_stream *_php_stream_fopen_from_pipe(FILE *file, const char *mode STREAMS_DC);
#define php_stream_fopen_from_pipe(file, mode) _php_stream_fopen_from_pipe((file), (mode) STREAMS_CC)
Modified: trunk/MgDev/Oem/php/include/main/streams/php_streams_int.h
===================================================================
--- trunk/MgDev/Oem/php/include/main/streams/php_streams_int.h 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/include/main/streams/php_streams_int.h 2023-03-20 12:54:05 UTC (rev 10033)
@@ -60,6 +60,3 @@
* any other function that expects standard modes and you allow non-standard
* ones. result should be a char[5]. */
void php_stream_mode_sanitize_fdopen_fopencookie(php_stream *stream, char *result);
-
-void php_stream_tidy_wrapper_error_log(php_stream_wrapper *wrapper);
-void php_stream_display_wrapper_errors(php_stream_wrapper *wrapper, const char *path, const char *caption);
Modified: trunk/MgDev/Oem/php/lib/php8.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_bz2.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_com_dotnet.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_curl.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_dba.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_dl_test.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_enchant.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_exif.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_ffi.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_fileinfo.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_ftp.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_gd.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_gettext.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_gmp.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_imap.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_intl.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_ldap.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_mbstring.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_mysqli.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_oci8_19.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_odbc.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_opcache.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_openssl.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_pdo_firebird.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_pdo_mysql.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_pdo_oci.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_pdo_odbc.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_pdo_pgsql.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_pdo_sqlite.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_pgsql.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_shmop.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_snmp.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_soap.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_sockets.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_sodium.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_sqlite3.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_sysvshm.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_tidy.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_xsl.lib
===================================================================
(Binary files differ)
Modified: trunk/MgDev/Oem/php/lib/php_zend_test.lib
===================================================================
(Binary files differ)
Added: trunk/MgDev/Oem/php/lib/php_zip.lib
===================================================================
(Binary files differ)
Index: trunk/MgDev/Oem/php/lib/php_zip.lib
===================================================================
--- trunk/MgDev/Oem/php/lib/php_zip.lib 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/lib/php_zip.lib 2023-03-20 12:54:05 UTC (rev 10033)
Property changes on: trunk/MgDev/Oem/php/lib/php_zip.lib
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: trunk/MgDev/Oem/php/script/Makefile.phpize
===================================================================
--- trunk/MgDev/Oem/php/script/Makefile.phpize 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/script/Makefile.phpize 2023-03-20 12:54:05 UTC (rev 10033)
@@ -42,12 +42,20 @@
_EXTENSION_DLL=$(EXT_TARGETS)
!endif
+!if $(PHP_TEST_INI_PATH) == ""
test: set-tmp-env
- $(DEBUGGER_CMD) $(DEBUGGER_ARGS) "$(PHP_PREFIX)\php.exe" -d open_basedir= -d output_buffering=0 run-tests.php $(TESTS) -p "$(PHP_PREFIX)\php.exe" -d extension=$(BUILD_DIR)\$(_EXTENSION_DLL)
+ $(DEBUGGER_CMD) $(DEBUGGER_ARGS) "$(PHP_PREFIX)\php.exe" -d open_basedir= -d output_buffering=0 run-tests.php -p "$(PHP_PREFIX)\php.exe" -d extension=$(BUILD_DIR)\$(_EXTENSION_DLL) $(TESTS)
run: set-tmp-env
$(DEBUGGER_CMD) $(DEBUGGER_ARGS) "$(PHP_PREFIX)\php.exe" -n -d extension=$(BUILD_DIR)\\$(_EXTENSION_DLL) $(ARGS)
+!else
+test: set-tmp-env
+ $(DEBUGGER_CMD) $(DEBUGGER_ARGS) "$(PHP_PREFIX)\php.exe" -n -d open_basedir= -d output_buffering=0 -d memory_limit=-1 run-tests.php -p "$(PHP_PREFIX)\php.exe" -n -c $(PHP_TEST_INI_PATH) $(TESTS)
+run: set-tmp-env
+ $(DEBUGGER_CMD) $(DEBUGGER_ARGS) "$(PHP_PREFIX)\php.exe" -n -c $(PHP_TEST_INI_PATH) $(ARGS)
+!endif
+
!if $(MT) == ""
_VC_MANIFEST_EMBED_EXE=
_VC_MANIFEST_EMBED_DLL=
Modified: trunk/MgDev/Oem/php/script/config.w32.phpize.in
===================================================================
--- trunk/MgDev/Oem/php/script/config.w32.phpize.in 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/script/config.w32.phpize.in 2023-03-20 12:54:05 UTC (rev 10033)
@@ -14,8 +14,10 @@
toolset_setup_compiler();
-// do we use x64 or 80x86 version of compiler?
-X64 = toolset_is_64();
+HOST_ARCH = toolset_host_arch();
+TARGET_ARCH = toolset_target_arch();
+// for compatible only
+X64 = TARGET_ARCH != 'x86';
toolset_setup_arch();
toolset_setup_linker();
@@ -128,6 +130,12 @@
ARG_WITH("codegen-arch", "Architecture for code generation", "no");
toolset_setup_codegen_arch();
+ARG_ENABLE("test-ini", "Enable automatic php.ini generation. The test.ini will be put \
+ into the build dir and used to automatically load the shared extensions.", "no");
+
+ARG_WITH("test-ini-ext-exclude", "Comma separated list of shared extensions to \
+ be excluded from the test.ini", "no");
+
ARG_ENABLE("native-intrinsics", "Comma separated list of intrinsic optimizations to enable. \
Available optimization names are sse, sse2, sse3, ssse3, sse4.1, sse4.2, avx, avx2. \
SSE and SSE2 are enabled by default. The best optimization specified will \
Modified: trunk/MgDev/Oem/php/script/confutils.js
===================================================================
--- trunk/MgDev/Oem/php/script/confutils.js 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/script/confutils.js 2023-03-20 12:54:05 UTC (rev 10033)
@@ -95,10 +95,10 @@
if (!MODE_PHPIZE) {
/* defaults; we pick up the precise versions from configure.ac */
var PHP_VERSION = 8;
- var PHP_MINOR_VERSION = 1;
+ var PHP_MINOR_VERSION = 2;
var PHP_RELEASE_VERSION = 0;
var PHP_EXTRA_VERSION = "";
- var PHP_VERSION_STRING = "8.1.0";
+ var PHP_VERSION_STRING = "8.2.0";
}
/* Get version numbers and DEFINE as a string */
@@ -168,9 +168,13 @@
}
var version = execute(command + '" 2>&1"');
- if (what == "64") {
- if (version.match(/x64/)) {
- return 1;
+ if (what == "arch") {
+ if (version.match(/x86/)) {
+ return "x86";
+ } else if (version.match(/x64/)) {
+ return "x64";
+ } else if (version.match(/ARM64/)) {
+ return "arm64";
}
} else {
if (version.match(/(\d+\.\d+(\.\d+)?(\.\d+)?)/)) {
@@ -450,14 +454,9 @@
}
var snapshot_build_exclusions = new Array(
- 'debug', 'lzf-better-compression',
- 'php-build', 'snapshot-template', 'ereg',
- 'pcre-regex', 'fastcgi', 'force-cgi-redirect',
- 'path-info-check', 'zts', 'ipv6', 'memory-limit',
- 'zend-multibyte', 'fd-setsize', 'memory-manager',
- 'pgi', 'pgo', 'all-shared', 'config-profile',
- 'sanitizer'
- );
+ 'debug', 'lzf-better-compression', 'php-build', 'snapshot-template', 'zts',
+ 'ipv6', 'fd-setsize', 'pgi', 'pgo', 'all-shared', 'config-profile', 'sanitizer'
+ );
var force;
// Now set any defaults we might have missed out earlier
@@ -1077,7 +1076,7 @@
var thanks = "";
var logo = "";
var debug = "";
- var project_url = "http://www.php.net";
+ var project_url = "https://www.php.net";
var project_header = creditspath + "/php_" + basename + ".h";
var versioning = "";
@@ -1098,7 +1097,7 @@
if (thanks == null) {
thanks = "";
} else {
- thanks = "Thanks to " + thanks;
+ thanks = "Thanks to " + thanks.replace(/([<>&|%])/g, "^$1").replace(/"/g, '\\"\\"');
}
credits.Close();
}
@@ -1105,7 +1104,7 @@
if (creditspath.match(new RegExp("pecl"))) {
/* PECL project url - this will eventually work correctly for all */
- project_url = "http://pecl.php.net/" + basename;
+ project_url = "https://pecl.php.net/" + basename;
/* keep independent versioning PECL-specific for now */
if (FSO.FileExists(project_header)) {
@@ -1670,7 +1669,7 @@
}
if (PHP_ANALYZER == "clang") {
- var analyzer_base_args = X64 ? "-m64" : "-m32";
+ var analyzer_base_args = TARGET_ARCH == 'x86' ? "-m32" : "-m64";
var analyzer_base_flags = "";
analyzer_base_args += " --analyze";
@@ -1693,10 +1692,14 @@
analyzer_base_flags += " -D _MSC_VER=" + probe_binary(PATH_PROG('cl', null));
}
- if (X64) {
+ if (TARGET_ARCH == 'x64') {
analyzer_base_flags += " -D _M_X64 -D _WIN64";
+ } else if (TARGET_ARCH == 'ARM64') {
+ analyzer_base_flags += " -D _M_ARM64 -D _WIN64";
+ } else if (TARGET_ARCH == 'x86') {
+ analyzer_base_flags += " -D _M_IX86 ";
} else {
- analyzer_base_flags += " -D _M_IX86 ";
+ ERROR("analyzer is not supported at arch " + TARGET_ARCH);
}
analyzer_base_flags += " -D _WIN32 -D WIN32 -D _WINDOWS";
@@ -1708,8 +1711,8 @@
analyzer_base_flags += " -I " + "\"" + vc_incs[i] + "\"";
}
- var cppcheck_platform = X64 ? "win64" : "win32A";
- var cppcheck_lib = "win32\\build\\cppcheck_" + (X64 ? "x64" : "x86") + ".cfg";
+ var cppcheck_platform = TARGET_ARCH == 'x86' ? "win32A" : "win64";
+ var cppcheck_lib = "win32\\build\\cppcheck_" + (TARGET_ARCH == 'x86' ? "x86" : "x64") + ".cfg"; // use x64 for arm64 yet
analyzer_base_args += "--enable=warning,performance,portability,information,missingInclude " +
"--platform=" + cppcheck_platform + " " +
"--library=windows.cfg --library=microsoft_sal.cfg " +
@@ -1960,7 +1963,8 @@
ar[k++] = ['Build type', PHP_DEBUG == "yes" ? "Debug" : "Release"];
ar[k++] = ['Thread Safety', PHP_ZTS == "yes" ? "Yes" : "No"];
ar[k++] = ['Compiler', COMPILER_NAME_LONG];
- ar[k++] = ['Architecture', X64 ? 'x64' : 'x86'];
+ ar[k++] = ['Target Architecture', TARGET_ARCH];
+ ar[k++] = ['Host Architecture', HOST_ARCH];
if (PHP_PGO == "yes") {
ar[k++] = ['Optimization', "PGO"];
} else if (PHP_PGI == "yes") {
@@ -2083,9 +2087,7 @@
}
STDOUT.WriteLine("Generating files...");
- if (!MODE_PHPIZE) {
- generate_tmp_php_ini();
- }
+ generate_tmp_php_ini();
generate_makefile();
if (!MODE_PHPIZE) {
generate_internal_functions();
@@ -2528,11 +2530,9 @@
handle_analyzer_makefile_flags(MF, keys[i], val);
}
- if (!MODE_PHPIZE) {
- var val = "yes" == PHP_TEST_INI ? PHP_TEST_INI_PATH : "";
- /* Be sure it's done after generate_tmp_php_ini(). */
- MF.WriteLine("PHP_TEST_INI_PATH=\"" + val + "\"");
- }
+ var val = "yes" == PHP_TEST_INI ? PHP_TEST_INI_PATH : "";
+ /* Be sure it's done after generate_tmp_php_ini(). */
+ MF.WriteLine("PHP_TEST_INI_PATH=\"" + val + "\"");
MF.WriteBlankLines(1);
if (MODE_PHPIZE) {
@@ -3101,9 +3101,11 @@
version = probe_binary(PHP_CL).substr(0, 5).replace('.', '');
- if (version >= 1930) {
+ if (version >= 1940) {
return name;
- } if (version >= 1920) {
+ } else if (version >= 1930) {
+ name = short ? "VS17" : "Visual C++ 2022";
+ } else if (version >= 1920) {
/* NOTE - VS is intentional. Due to changes in recent Visual Studio
versioning scheme referring to the exact VC++ version is
hardly predictable. From this version on, it refers to
@@ -3131,10 +3133,32 @@
}
-function toolset_is_64()
+function toolset_host_arch()
{
+ var command = 'cmd /c "where cl.exe"';
+ var clpath = execute(command).split(/\n/)[0].replace(/\s$/, '');
+
+ var command = 'cmd /c "dumpbin "' + clpath + '" /nologo /headers"';
+ var full = execute(command);
+
+ /*
+ output is something like
+ FILE HEADER VALUES
+ 8664 machine (x64)
+ */
+ var matches = full.match(/FILE HEADER VALUES\s+[A-F0-9]{3,4}\smachine \((x64|x86|ARM64)\)/);
+
+ if(!matches){
+ ERROR("Unsupported toolset host");
+ }
+
+ return matches[1].toLowerCase();
+}
+
+function toolset_target_arch()
+{
if (VS_TOOLSET) {
- return probe_binary(PHP_CL, 64);
+ return probe_binary(PHP_CL, 'arch');
} else if (CLANG_TOOLSET) {
/*var command = 'cmd /c ""' + PHP_CL + '" -v"';
var full = execute(command + '" 2>&1"');
@@ -3144,26 +3168,22 @@
/* Even executed within an environment setup with vcvars32.bat,
clang-cl doesn't recognize the arch toolset. But as it needs
the VS environment, checking the arch of cl.exe is correct. */
- return probe_binary(PATH_PROG('cl', null), 64);
+ return probe_binary(PATH_PROG('cl', null), 'arch');
} else if (ICC_TOOLSET) {
- var command = 'cmd /c ""' + PHP_CL + '" -v"';
+ var command = 'cmd /c "where cl"';
var full = execute(command + '" 2>&1"');
return null != full.match(/Intel\(R\) 64/);
}
- ERROR("Unsupported toolset");
+ ERROR("Unsupported toolset target");
}
function toolset_setup_arch()
{
- if (X64) {
- STDOUT.WriteLine(" Detected 64-bit compiler");
- } else {
- STDOUT.WriteLine(" Detected 32-bit compiler");
- }
- AC_DEFINE('PHP_BUILD_ARCH', X64 ? 'x64' : 'x86', "Detected compiler architecture");
- DEFINE("PHP_ARCHITECTURE", X64 ? 'x64' : 'x86');
+ STDOUT.WriteLine(" Detected " + TARGET_ARCH + " compiler" + (TARGET_ARCH == HOST_ARCH ? "" : " (cross compile from " + HOST_ARCH + ")"));
+ AC_DEFINE('PHP_BUILD_ARCH', TARGET_ARCH, "Detected compiler architecture");
+ DEFINE("PHP_ARCHITECTURE", TARGET_ARCH);
}
function toolset_setup_codegen_arch()
@@ -3177,7 +3197,7 @@
if ("IA32" != arc) {
ERROR("Only IA32 arch is supported by --with-codegen-arch, got '" + arc + "'");
- } else if (X64) {
+ } else if (TARGET_ARCH != 'x86') {
ERROR("IA32 arch is only supported with 32-bit build");
}
ADD_FLAG("CFLAGS", "/arch:" + arc);
@@ -3237,10 +3257,10 @@
// fun stuff: MS deprecated ANSI stdio and similar functions
// disable annoying warnings. In addition, time_t defaults
// to 64-bit. Ask for 32-bit.
- if (X64) {
+ if (TARGET_ARCH == 'x86') {
+ ADD_FLAG('CFLAGS', ' /wd4996 /D_USE_32BIT_TIME_T=1 ');
+ } else {
ADD_FLAG('CFLAGS', ' /wd4996 ');
- } else {
- ADD_FLAG('CFLAGS', ' /wd4996 /D_USE_32BIT_TIME_T=1 ');
}
if (PHP_DEBUG == "yes") {
@@ -3292,10 +3312,10 @@
ADD_FLAG("CFLAGS", "/Zc:wchar_t");
} else if (CLANG_TOOLSET) {
- if (X64) {
+ if (TARGET_ARCH == 'x86') {
+ ADD_FLAG('CFLAGS', '-m32');
+ } else {
ADD_FLAG('CFLAGS', '-m64');
- } else {
- ADD_FLAG('CFLAGS', '-m32');
}
ADD_FLAG("CFLAGS", " /fallback ");
ADD_FLAG("CFLAGS", "-Xclang -fmodules");
@@ -3325,6 +3345,14 @@
ERROR("Can't enable intrinsics, --with-codegen-arch passed with an incompatible option. ")
}
+ if (TARGET_ARCH == 'arm64') {
+ /* arm64 supports neon */
+ configure_subst.Add("PHP_SIMD_SCALE", 'NEON');
+ /* all offically supported arm64 cpu supports crc32 (TODO: to be confirmed) */
+ AC_DEFINE('HAVE_ARCH64_CRC32', 1);
+ return;
+ }
+
if ("no" == PHP_NATIVE_INTRINSICS || "yes" == PHP_NATIVE_INTRINSICS) {
PHP_NATIVE_INTRINSICS = default_enabled;
}
@@ -3352,7 +3380,7 @@
}
}
}
- if (!X64) {
+ if (TARGET_ARCH == 'x86') {
/* SSE2 is currently the default on 32-bit. It could change later,
for now no need to pass it. But, if SSE only was chosen,
/arch:SSE is required. */
@@ -3423,7 +3451,7 @@
{
if (PHP_DEBUG == "yes") {
ADD_FLAG("CFLAGS", "/LDd /MDd /Od /D _DEBUG /D ZEND_DEBUG=1 " +
- (X64?"/Zi":"/ZI"));
+ (TARGET_ARCH == 'x86'?"/ZI":"/Zi"));
ADD_FLAG("LDFLAGS", "/debug");
// Avoid problems when linking to release libraries that use the release
// version of the libc
@@ -3458,11 +3486,16 @@
} else {
PHP_OBJECT_OUT_DIR = FSO.GetAbsolutePathName(".") + '\\';
- if (X64) {
+ if (TARGET_ARCH == 'x64') {
PHP_OBJECT_OUT_DIR += 'x64\\';
if (!FSO.FolderExists(PHP_OBJECT_OUT_DIR)) {
FSO.CreateFolder(PHP_OBJECT_OUT_DIR);
}
+ } else if (TARGET_ARCH == 'arm64') {
+ PHP_OBJECT_OUT_DIR += 'arm64\\';
+ if (!FSO.FolderExists(PHP_OBJECT_OUT_DIR)) {
+ FSO.CreateFolder(PHP_OBJECT_OUT_DIR);
+ }
}
}
}
@@ -3519,7 +3552,7 @@
if (FSO.FolderExists("..\\php_build")) {
PHP_PHP_BUILD = "..\\php_build";
} else {
- if (X64) {
+ if (TARGET_ARCH != 'x86') {
if (FSO.FolderExists("..\\win64build")) {
PHP_PHP_BUILD = "..\\win64build";
} else if (FSO.FolderExists("..\\php-win64-dev\\php_build")) {
@@ -3681,7 +3714,7 @@
ERROR("Failed to determine clang lib path");
}
- if (X64) {
+ if (TARGET_ARCH != 'x86') {
ret = PROGRAM_FILES + "\\LLVM\\lib\\clang\\" + ver + "\\lib";
if (!FSO.FolderExists(ret)) {
ret = null;
@@ -3718,10 +3751,13 @@
ADD_FLAG(cflags_name, "-fsanitize=address,undefined");
}
if (!!libs_name) {
- if (X64) {
+ if (TARGET_ARCH == 'x64') {
ADD_FLAG(libs_name, "clang_rt.asan_dynamic-x86_64.lib clang_rt.asan_dynamic_runtime_thunk-x86_64.lib");
+ } else if (TARGET_ARCH == 'x86') {
+ ADD_FLAG(libs_name, "clang_rt.asan_dynamic-i386.lib clang_rt.asan_dynamic_runtime_thunk-i386.lib");
} else {
- ADD_FLAG(libs_name, "clang_rt.asan_dynamic-i386.lib clang_rt.asan_dynamic_runtime_thunk-i386.lib");
+ // TODO: support arm64?
+ ERROR("Failed to determine clang lib path");
}
}
Modified: trunk/MgDev/Oem/php/script/ext_deps.js
===================================================================
--- trunk/MgDev/Oem/php/script/ext_deps.js 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/script/ext_deps.js 2023-03-20 12:54:05 UTC (rev 10033)
@@ -60,6 +60,8 @@
PHP_PCRE_SHARED=false;
PHP_PGSQL=true;
PHP_PGSQL_SHARED=true;
+PHP_RANDOM=true;
+PHP_RANDOM_SHARED=false;
PHP_READLINE=true;
PHP_READLINE_SHARED=false;
PHP_REFLECTION=true;
@@ -89,7 +91,7 @@
PHP_ZEND_TEST=true;
PHP_ZEND_TEST_SHARED=true;
PHP_ZIP=true;
-PHP_ZIP_SHARED=false;
+PHP_ZIP_SHARED=true;
PHP_ZLIB=true;
PHP_ZLIB_SHARED=false;
PHP_LIBXML=true;
Modified: trunk/MgDev/Oem/php/script/phpize.js
===================================================================
--- trunk/MgDev/Oem/php/script/phpize.js 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/script/phpize.js 2023-03-20 12:54:05 UTC (rev 10033)
@@ -2,10 +2,10 @@
var PHP_ZTS="No"
var VC_VERSION=1929
var PHP_VERSION=8
-var PHP_MINOR_VERSION=1
-var PHP_RELEASE_VERSION=11
+var PHP_MINOR_VERSION=2
+var PHP_RELEASE_VERSION=4
var PHP_EXTRA_VERSION=""
-var PHP_VERSION_STRING="8.1.11"
+var PHP_VERSION_STRING="8.2.4"
/* Generated extensions list with mode (static/shared) */
PHP_BCMATH_SHARED=false;
@@ -39,6 +39,7 @@
PHP_OPENSSL_SHARED=true;
PHP_PCRE_SHARED=false;
PHP_PGSQL_SHARED=true;
+PHP_RANDOM_SHARED=false;
PHP_READLINE_SHARED=false;
PHP_REFLECTION_SHARED=false;
PHP_SESSION_SHARED=false;
@@ -53,7 +54,7 @@
PHP_TIDY_SHARED=true;
PHP_TOKENIZER_SHARED=false;
PHP_ZEND_TEST_SHARED=true;
-PHP_ZIP_SHARED=false;
+PHP_ZIP_SHARED=true;
PHP_ZLIB_SHARED=false;
PHP_LIBXML_SHARED=false;
PHP_DOM_SHARED=false;
Modified: trunk/MgDev/Oem/php/script/run-tests.php
===================================================================
--- trunk/MgDev/Oem/php/script/run-tests.php 2023-03-20 12:44:29 UTC (rev 10032)
+++ trunk/MgDev/Oem/php/script/run-tests.php 2023-03-20 12:54:05 UTC (rev 10033)
@@ -23,7 +23,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: d772c85f95272ae802fd52d7a4ead33d8e254b66 $ */
+/* $Id: e7cc6a7f28c525cc1ab5a3191e2438b4fbd1e478 $ */
/* Temporary variables while this file is being refactored. */
/** @var ?JUnit */
@@ -127,6 +127,9 @@
--color
--no-color Do/Don't colorize the result type in the test result.
+ --progress
+ --no-progress Do/Don't show the current progress.
+
--repeat [n]
Run the tests multiple times in the same process and check the
output of the last execution (CLI SAPI only).
@@ -152,14 +155,14 @@
$cfgfiles, $cfgtypes, $conf_passed, $end_time, $environment,
$exts_skipped, $exts_tested, $exts_to_test, $failed_tests_file,
$ignored_by_ext, $ini_overwrites, $is_switch, $colorize,
- $just_save_results, $log_format, $matches, $no_clean, $no_file_cache,
- $optionals, $output_file, $pass_option_n, $pass_options,
+ $log_format, $matches, $no_clean, $no_file_cache,
+ $optionals, $pass_option_n, $pass_options,
$pattern_match, $php, $php_cgi, $phpdbg, $preload, $redir_tests,
$repeat, $result_tests_file, $slow_min_ms, $start_time, $switch,
$temp_source, $temp_target, $test_cnt, $test_dirs,
$test_files, $test_idx, $test_list, $test_results, $testfile,
$user_tests, $valgrind, $sum_results, $shuffle, $file_cache, $num_repeats,
- $bless;
+ $bless, $show_progress;
// Parallel testing
global $workers, $workerID;
global $context_line_count;
@@ -228,14 +231,14 @@
// fail to reattach to the OpCache because it will be using the
// wrong path.
die("TEMP environment is NOT set");
- } else {
- if (count($environment) == 1) {
- // Not having other environment variables, only having TEMP, is
- // probably ok, but strange and may make a difference in the
- // test pass rate, so warn the user.
- echo "WARNING: Only 1 environment variable will be available to tests(TEMP environment variable)" . PHP_EOL;
- }
}
+
+ if (count($environment) == 1) {
+ // Not having other environment variables, only having TEMP, is
+ // probably ok, but strange and may make a difference in the
+ // test pass rate, so warn the user.
+ echo "WARNING: Only 1 environment variable will be available to tests(TEMP environment variable)" , PHP_EOL;
+ }
}
if (IS_WINDOWS && empty($environment["SystemRoot"])) {
@@ -313,9 +316,6 @@
$no_file_cache = '-d opcache.file_cache= -d opcache.file_cache_only=0';
- define('PHP_QA_EMAIL', 'qa-reports at lists.php.net');
- define('QA_SUBMISSION_PAGE', 'http://qa.php.net/buildtest-process.php');
- define('QA_REPORTS_PAGE', 'http://qa.php.net/reports');
define('TRAVIS_CI', (bool) getenv('TRAVIS'));
// Determine the tests to be run.
@@ -363,6 +363,7 @@
$workers = null;
$context_line_count = 3;
$num_repeats = 1;
+ $show_progress = true;
$cfgtypes = ['show', 'keep'];
$cfgfiles = ['skip', 'php', 'clean', 'out', 'diff', 'exp', 'mem'];
@@ -422,7 +423,7 @@
switch ($switch) {
case 'j':
$workers = substr($argv[$i], 2);
- if (!preg_match('/^\d+$/', $workers) || $workers == 0) {
+ if ($workers == 0 || !preg_match('/^\d+$/', $workers)) {
error("'$workers' is not a valid number of workers, try e.g. -j16 for 16 workers");
}
$workers = intval($workers, 10);
@@ -439,10 +440,8 @@
$matches = [];
if (preg_match('/^#.*\[(.*)\]\:\s+(.*)$/', $test, $matches)) {
$redir_tests[] = [$matches[1], $matches[2]];
- } else {
- if (strlen($test)) {
- $test_files[] = trim($test);
- }
+ } elseif (strlen($test)) {
+ $test_files[] = trim($test);
}
}
}
@@ -584,7 +583,7 @@
$environment['SKIP_MSAN'] = 1;
}
- $lsanSuppressions = __DIR__ . '/azure/lsan-suppressions.txt';
+ $lsanSuppressions = __DIR__ . '/.github/lsan-suppressions.txt';
if (file_exists($lsanSuppressions)) {
$environment['LSAN_OPTIONS'] = 'suppressions=' . $lsanSuppressions
. ':print_suppressions=0';
@@ -605,8 +604,14 @@
$repeat = true;
}
break;
+ case '--progress':
+ $show_progress = true;
+ break;
+ case '--no-progress':
+ $show_progress = false;
+ break;
case '--version':
- echo '$Id: d772c85f95272ae802fd52d7a4ead33d8e254b66 $' . "\n";
+ echo '$Id: e7cc6a7f28c525cc1ab5a3191e2438b4fbd1e478 $' . "\n";
exit(1);
default:
@@ -627,27 +632,21 @@
if (!$testfile && strpos($argv[$i], '*') !== false && function_exists('glob')) {
if (substr($argv[$i], -5) == '.phpt') {
$pattern_match = glob($argv[$i]);
+ } elseif (preg_match("/\*$/", $argv[$i])) {
+ $pattern_match = glob($argv[$i] . '.phpt');
} else {
- if (preg_match("/\*$/", $argv[$i])) {
- $pattern_match = glob($argv[$i] . '.phpt');
- } else {
- die('Cannot find test file "' . $argv[$i] . '".' . PHP_EOL);
- }
+ die('Cannot find test file "' . $argv[$i] . '".' . PHP_EOL);
}
if (is_array($pattern_match)) {
$test_files = array_merge($test_files, $pattern_match);
}
+ } elseif (is_dir($testfile)) {
+ find_files($testfile);
+ } elseif (substr($testfile, -5) == '.phpt') {
+ $test_files[] = $testfile;
} else {
- if (is_dir($testfile)) {
- find_files($testfile);
- } else {
- if (substr($testfile, -5) == '.phpt') {
- $test_files[] = $testfile;
- } else {
- die('Cannot find test file "' . $argv[$i] . '".' . PHP_EOL);
- }
- }
+ die('Cannot find test file "' . $argv[$i] . '".' . PHP_EOL);
}
}
}
@@ -731,7 +730,7 @@
echo get_summary(false);
if ($output_file != '' && $just_save_results) {
- save_or_mail_results();
+ save_results($output_file, /* prompt_to_save_results: */ false);
}
} else {
// Compile a list of all test files (*.phpt).
@@ -793,7 +792,7 @@
show_end($end_time);
show_summary();
- save_or_mail_results();
+ save_results($output_file, /* prompt_to_save_results: */ true);
}
$junit->saveXML();
@@ -854,11 +853,11 @@
$info_params = [];
settings2array($ini_overwrites, $info_params);
$info_params = settings2params($info_params);
- $php_info = `$php $pass_options $info_params $no_file_cache "$info_file"`;
- define('TESTED_PHP_VERSION', `$php -n -r "echo PHP_VERSION;"`);
+ $php_info = shell_exec("$php $pass_options $info_params $no_file_cache \"$info_file\"");
+ define('TESTED_PHP_VERSION', shell_exec("$php -n -r \"echo PHP_VERSION;\""));
if ($php_cgi && $php != $php_cgi) {
- $php_info_cgi = `$php_cgi $pass_options $info_params $no_file_cache -q "$info_file"`;
+ $php_info_cgi = shell_exec("$php_cgi $pass_options $info_params $no_file_cache -q \"$info_file\"");
$php_info_sep = "\n---------------------------------------------------------------------";
$php_cgi_info = "$php_info_sep\nPHP : $php_cgi $php_info_cgi$php_info_sep";
} else {
@@ -866,7 +865,7 @@
}
if ($phpdbg) {
- $phpdbg_info = `$phpdbg $pass_options $info_params $no_file_cache -qrr "$info_file"`;
+ $phpdbg_info = shell_exec("$phpdbg $pass_options $info_params $no_file_cache -qrr \"$info_file\"");
$php_info_sep = "\n---------------------------------------------------------------------";
$phpdbg_info = "$php_info_sep\nPHP : $phpdbg $phpdbg_info$php_info_sep";
} else {
@@ -894,7 +893,7 @@
}
?>
PHP);
- $exts_to_test = explode(',', `$php $pass_options $info_params $no_file_cache "$info_file"`);
+ $exts_to_test = explode(',', shell_exec("$php $pass_options $info_params $no_file_cache \"$info_file\""));
// check for extensions that need special handling and regenerate
$info_params_ex = [
'session' => ['session.auto_start=0'],
@@ -929,134 +928,101 @@
";
}
-function save_or_mail_results(): void
+function save_results(string $output_file, bool $prompt_to_save_results): void
{
- global $sum_results, $just_save_results, $failed_test_summary,
- $PHP_FAILED_TESTS, $php, $output_file;
+ global $sum_results, $failed_test_summary,
+ $PHP_FAILED_TESTS, $php;
- /* We got failed Tests, offer the user to send an e-mail to QA team, unless NO_INTERACTION is set */
- if (!getenv('NO_INTERACTION') && !TRAVIS_CI) {
+ if (getenv('NO_INTERACTION') || TRAVIS_CI) {
+ return;
+ }
+
+ if ($prompt_to_save_results) {
+ /* We got failed Tests, offer the user to save a QA report */
$fp = fopen("php://stdin", "r+");
if ($sum_results['FAILED'] || $sum_results['BORKED'] || $sum_results['WARNED'] || $sum_results['LEAKED']) {
echo "\nYou may have found a problem in PHP.";
}
- echo "\nThis report can be automatically sent to the PHP QA team at\n";
- echo QA_REPORTS_PAGE . " and http://news.php.net/php.qa.reports\n";
+ echo "\nThis report can be saved and used to open an issue on the bug tracker at\n";
+ echo "https://github.com/php/php-src/issues\n";
echo "This gives us a better understanding of PHP's behavior.\n";
- echo "If you don't want to send the report immediately you can choose\n";
- echo "option \"s\" to save it. You can then email it to " . PHP_QA_EMAIL . " later.\n";
- echo "Do you want to send this report now? [Yns]: ";
+ echo "Do you want to save this report in a file? [Yn]: ";
flush();
$user_input = fgets($fp, 10);
- $just_save_results = (!empty($user_input) && strtolower($user_input[0]) === 's');
+ fclose($fp);
+ if (!(strlen(trim($user_input)) == 0 || strtolower($user_input[0]) == 'y')) {
+ return;
+ }
}
+ /**
+ * Collect information about the host system for our report
+ * Fetch phpinfo() output so that we can see the PHP environment
+ * Make an archive of all the failed tests
+ */
+ $failed_tests_data = '';
+ $sep = "\n" . str_repeat('=', 80) . "\n";
+ $failed_tests_data .= $failed_test_summary . "\n";
+ $failed_tests_data .= get_summary(true) . "\n";
- if ($just_save_results || !getenv('NO_INTERACTION') || TRAVIS_CI) {
- if ($just_save_results || TRAVIS_CI || strlen(trim($user_input)) == 0 || strtolower($user_input[0]) == 'y') {
- /*
- * Collect information about the host system for our report
- * Fetch phpinfo() output so that we can see the PHP environment
- * Make an archive of all the failed tests
- * Send an email
- */
- if ($just_save_results) {
- $user_input = 's';
- }
+ if ($sum_results['FAILED']) {
+ foreach ($PHP_FAILED_TESTS['FAILED'] as $test_info) {
+ $failed_tests_data .= $sep . $test_info['name'] . $test_info['info'];
+ $failed_tests_data .= $sep . file_get_contents(realpath($test_info['output']));
+ $failed_tests_data .= $sep . file_get_contents(realpath($test_info['diff']));
+ $failed_tests_data .= $sep . "\n\n";
+ }
+ }
- /* Ask the user to provide an email address, so that QA team can contact the user */
- if (TRAVIS_CI) {
- $user_email = 'travis at php dot net';
- } elseif (!strncasecmp($user_input, 'y', 1) || strlen(trim($user_input)) == 0) {
- echo "\nPlease enter your email address.\n(Your address will be mangled so that it will not go out on any\nmailinglist in plain text): ";
- flush();
- $user_email = trim(fgets($fp, 1024));
- $user_email = str_replace("@", " at ", str_replace(".", " dot ", $user_email));
- }
+ $failed_tests_data .= "\n" . $sep . 'BUILD ENVIRONMENT' . $sep;
+ $failed_tests_data .= "OS:\n" . PHP_OS . " - " . php_uname() . "\n\n";
+ $ldd = $autoconf = $sys_libtool = $libtool = $compiler = 'N/A';
- $failed_tests_data = '';
- $sep = "\n" . str_repeat('=', 80) . "\n";
- $failed_tests_data .= $failed_test_summary . "\n";
- $failed_tests_data .= get_summary(true) . "\n";
+ if (!IS_WINDOWS) {
+ /* If PHP_AUTOCONF is set, use it; otherwise, use 'autoconf'. */
+ if (getenv('PHP_AUTOCONF')) {
+ $autoconf = shell_exec(getenv('PHP_AUTOCONF') . ' --version');
+ } else {
+ $autoconf = shell_exec('autoconf --version');
+ }
- if ($sum_results['FAILED']) {
- foreach ($PHP_FAILED_TESTS['FAILED'] as $test_info) {
- $failed_tests_data .= $sep . $test_info['name'] . $test_info['info'];
- $failed_tests_data .= $sep . file_get_contents(realpath($test_info['output']));
- $failed_tests_data .= $sep . file_get_contents(realpath($test_info['diff']));
- $failed_tests_data .= $sep . "\n\n";
- }
- $status = "failed";
- } else {
- $status = "success";
- }
+ /* Always use the generated libtool - Mac OSX uses 'glibtool' */
+ $libtool = shell_exec(INIT_DIR . '/libtool --version');
- $failed_tests_data .= "\n" . $sep . 'BUILD ENVIRONMENT' . $sep;
- $failed_tests_data .= "OS:\n" . PHP_OS . " - " . php_uname() . "\n\n";
- $ldd = $autoconf = $sys_libtool = $libtool = $compiler = 'N/A';
+ /* Use shtool to find out if there is glibtool present (MacOSX) */
+ $sys_libtool_path = shell_exec(__DIR__ . '/build/shtool path glibtool libtool');
- if (!IS_WINDOWS) {
- /* If PHP_AUTOCONF is set, use it; otherwise, use 'autoconf'. */
- if (getenv('PHP_AUTOCONF')) {
- $autoconf = shell_exec(getenv('PHP_AUTOCONF') . ' --version');
- } else {
- $autoconf = shell_exec('autoconf --version');
- }
+ if ($sys_libtool_path) {
+ $sys_libtool = shell_exec(str_replace("\n", "", $sys_libtool_path) . ' --version');
+ }
- /* Always use the generated libtool - Mac OSX uses 'glibtool' */
- $libtool = shell_exec(INIT_DIR . '/libtool --version');
+ /* Try the most common flags for 'version' */
+ $flags = ['-v', '-V', '--version'];
+ $cc_status = 0;
- /* Use shtool to find out if there is glibtool present (MacOSX) */
- $sys_libtool_path = shell_exec(__DIR__ . '/build/shtool path glibtool libtool');
-
- if ($sys_libtool_path) {
- $sys_libtool = shell_exec(str_replace("\n", "", $sys_libtool_path) . ' --version');
- }
-
- /* Try the most common flags for 'version' */
- $flags = ['-v', '-V', '--version'];
- $cc_status = 0;
-
- foreach ($flags as $flag) {
- system(getenv('CC') . " $flag >/dev/null 2>&1", $cc_status);
- if ($cc_status == 0) {
- $compiler = shell_exec(getenv('CC') . " $flag 2>&1");
- break;
- }
- }
-
- $ldd = shell_exec("ldd $php 2>/dev/null");
+ foreach ($flags as $flag) {
+ system(getenv('CC') . " $flag >/dev/null 2>&1", $cc_status);
+ if ($cc_status == 0) {
+ $compiler = shell_exec(getenv('CC') . " $flag 2>&1");
+ break;
}
+ }
- $failed_tests_data .= "Autoconf:\n$autoconf\n";
- $failed_tests_data .= "Bundled Libtool:\n$libtool\n";
- $failed_tests_data .= "System Libtool:\n$sys_libtool\n";
- $failed_tests_data .= "Compiler:\n$compiler\n";
- $failed_tests_data .= "Bison:\n" . shell_exec('bison --version 2>/dev/null') . "\n";
- $failed_tests_data .= "Libraries:\n$ldd\n";
- $failed_tests_data .= "\n";
+ $ldd = shell_exec("ldd $php 2>/dev/null");
+ }
- if (isset($user_email)) {
- $failed_tests_data .= "User's E-mail: " . $user_email . "\n\n";
- }
+ $failed_tests_data .= "Autoconf:\n$autoconf\n";
+ $failed_tests_data .= "Bundled Libtool:\n$libtool\n";
+ $failed_tests_data .= "System Libtool:\n$sys_libtool\n";
+ $failed_tests_data .= "Compiler:\n$compiler\n";
+ $failed_tests_data .= "Bison:\n" . shell_exec('bison --version 2>/dev/null') . "\n";
+ $failed_tests_data .= "Libraries:\n$ldd\n";
+ $failed_tests_data .= "\n";
+ $failed_tests_data .= $sep . "PHPINFO" . $sep;
+ $failed_tests_data .= shell_exec($php . ' -ddisplay_errors=stderr -dhtml_errors=0 -i 2> /dev/null');
- $failed_tests_data .= $sep . "PHPINFO" . $sep;
- $failed_tests_data .= shell_exec($php . ' -ddisplay_errors=stderr -dhtml_errors=0 -i 2> /dev/null');
-
- if (($just_save_results || !mail_qa_team($failed_tests_data, $status)) && !TRAVIS_CI) {
- file_put_contents($output_file, $failed_tests_data);
-
- if (!$just_save_results) {
- echo "\nThe test script was unable to automatically send the report to PHP's QA Team\n";
- }
-
- echo "Please send " . $output_file . " to " . PHP_QA_EMAIL . " manually, thank you.\n";
- } elseif (!getenv('NO_INTERACTION') && !TRAVIS_CI) {
- fwrite($fp, "\nThank you for helping to make PHP better.\n");
- fclose($fp);
- }
- }
- }
+ file_put_contents($output_file, $failed_tests_data);
+ echo "Report saved to: ", $output_file, "\n";
}
function get_binary(string $php, string $sapi, string $sapi_path): ?string
@@ -1099,7 +1065,9 @@
}
// Otherwise we're only interested in *.phpt files.
- if (substr($name, -5) == '.phpt') {
+ // (but not those starting with a dot, which are hidden on
+ // many platforms)
+ if (substr($name, -5) == '.phpt' && substr($name, 0, 1) !== '.') {
if ($ignore) {
$ignored_by_ext++;
} else {
@@ -1119,9 +1087,9 @@
{
if (is_array($name)) {
return $name[0] . ':' . $name[1];
- } else {
- return $name;
}
+
+ return $name;
}
/**
* @param array|string $a
@@ -1139,55 +1107,9 @@
if ($ta == $tb) {
return strcmp($a, $b);
- } else {
- return $tb - $ta;
}
-}
-//
-// Send Email to QA Team
-//
-
-function mail_qa_team(string $data, bool $status = false): bool
-{
- $url_bits = parse_url(QA_SUBMISSION_PAGE);
-
- if ($proxy = getenv('http_proxy')) {
- $proxy = parse_url($proxy);
- $path = $url_bits['host'] . $url_bits['path'];
- $host = $proxy['host'];
- if (empty($proxy['port'])) {
- $proxy['port'] = 80;
- }
- $port = $proxy['port'];
- } else {
- $path = $url_bits['path'];
- $host = $url_bits['host'];
- $port = empty($url_bits['port']) ? 80 : $port = $url_bits['port'];
- }
-
- $data = "php_test_data=" . urlencode(base64_encode(str_replace("\00", '[0x0]', $data)));
- $data_length = strlen($data);
-
- $fs = fsockopen($host, $port, $errno, $errstr, 10);
-
- if (!$fs) {
- return false;
- }
-
- $php_version = urlencode(TESTED_PHP_VERSION);
-
- echo "\nPosting to " . QA_SUBMISSION_PAGE . "\n";
- fwrite($fs, "POST " . $path . "?status=$status&version=$php_version HTTP/1.1\r\n");
- fwrite($fs, "Host: " . $host . "\r\n");
- fwrite($fs, "User-Agent: QA Browser 0.1\r\n");
- fwrite($fs, "Content-Type: application/x-www-form-urlencoded\r\n");
- fwrite($fs, "Content-Length: " . $data_length . "\r\n\r\n");
- fwrite($fs, $data);
- fwrite($fs, "\r\n\r\n");
- fclose($fs);
-
- return true;
+ return $tb - $ta;
}
//
@@ -1198,10 +1120,8 @@
{
global $DETAILED;
- if ($filename_copy && $filename_copy != $filename) {
- if (file_put_contents($filename_copy, $text) === false) {
- error("Cannot open file '" . $filename_copy . "' (save_text)");
- }
+ if ($filename_copy && $filename_copy != $filename && file_put_contents($filename_copy, $text) === false) {
+ error("Cannot open file '" . $filename_copy . "' (save_text)");
}
if (file_put_contents($filename, $text) === false) {
@@ -1294,12 +1214,16 @@
if ($n === false) {
break;
- } elseif ($n === 0) {
+ }
+
+ if ($n === 0) {
/* timed out */
$data .= "\n ** ERROR: process timed out **\n";
proc_terminate($proc, 9);
return $data;
- } elseif ($n > 0) {
+ }
+
+ if ($n > 0) {
if ($captureStdOut) {
$line = fread($pipes[1], 8192);
} elseif ($captureStdErr) {
@@ -1417,7 +1341,7 @@
*/
function run_all_tests_parallel(array $test_files, array $env, $redir_tested): void
{
- global $workers, $test_idx, $test_cnt, $test_results, $failed_tests_file, $result_tests_file, $PHP_FAILED_TESTS, $shuffle, $SHOW_ONLY_GROUPS, $valgrind;
+ global $workers, $test_idx, $test_cnt, $test_results, $failed_tests_file, $result_tests_file, $PHP_FAILED_TESTS, $shuffle, $SHOW_ONLY_GROUPS, $valgrind, $show_progress;
global $junit;
@@ -1528,9 +1452,6 @@
"constants" => [
"INIT_DIR" => INIT_DIR,
"TEST_PHP_SRCDIR" => TEST_PHP_SRCDIR,
- "PHP_QA_EMAIL" => PHP_QA_EMAIL,
- "QA_SUBMISSION_PAGE" => QA_SUBMISSION_PAGE,
- "QA_REPORTS_PAGE" => QA_REPORTS_PAGE,
"TRAVIS_CI" => TRAVIS_CI
]
])) . "\n";
@@ -1583,6 +1504,10 @@
kill_children($workerProcs);
error("Could not find worker stdout in array of worker stdouts, THIS SHOULD NOT HAPPEN.");
}
+ if (feof($workerSock)) {
+ kill_children($workerProcs);
+ error("Worker $i died unexpectedly");
+ }
while (false !== ($rawMessage = fgets($workerSock))) {
// work around fgets truncating things
if (($rawMessageBuffers[$i] ?? '') !== '') {
@@ -1656,8 +1581,7 @@
]);
} else {
proc_terminate($workerProcs[$i]);
- unset($workerProcs[$i]);
- unset($workerSocks[$i]);
+ unset($workerProcs[$i], $workerSocks[$i]);
goto escape;
}
break;
@@ -1668,13 +1592,13 @@
}
$test_idx++;
- if (!$SHOW_ONLY_GROUPS) {
+ if ($show_progress) {
clear_show_test();
}
echo $resultText;
- if (!$SHOW_ONLY_GROUPS) {
+ if ($show_progress) {
show_test($test_idx, count($workerProcs) . "/$workers concurrent test workers running");
}
@@ -1724,7 +1648,7 @@
}
}
- if (!$SHOW_ONLY_GROUPS) {
+ if ($show_progress) {
clear_show_test();
}
@@ -1870,6 +1794,7 @@
global $num_repeats;
// Parallel testing
global $workerID;
+ global $show_progress;
// Temporary
/** @var JUnit */
@@ -1885,14 +1810,9 @@
$org_file = $file;
$orig_php = $php;
- if (isset($env['TEST_PHP_CGI_EXECUTABLE'])) {
- $php_cgi = $env['TEST_PHP_CGI_EXECUTABLE'];
- }
+ $php_cgi = $env['TEST_PHP_CGI_EXECUTABLE'] ?? null;
+ $phpdbg = $env['TEST_PHPDBG_EXECUTABLE'] ?? null;
- if (isset($env['TEST_PHPDBG_EXECUTABLE'])) {
- $phpdbg = $env['TEST_PHPDBG_EXECUTABLE'];
- }
-
if (is_array($file)) {
$file = $file[0];
}
@@ -1986,7 +1906,7 @@
}
}
- if (!$SHOW_ONLY_GROUPS && !$workerID) {
+ if ($show_progress && !$workerID) {
show_test($test_idx, $shortname);
}
@@ -2151,6 +2071,9 @@
// Make sure warnings still show up on the second run.
$ini_settings['opcache.record_warnings'] = '1';
}
+ if (extension_loaded('posix') && posix_getuid() === 0) {
+ $ini_settings['opcache.preload_user'] = 'root';
+ }
// Any special ini settings
// these may overwrite the test defaults...
@@ -2289,17 +2212,17 @@
$junit->markTestAs('PASS', $shortname, $tested);
return 'REDIR';
- } else {
- $bork_info = "Redirect info must contain exactly one TEST string to be used as redirect directory.";
- show_result("BORK", $bork_info, '', '', $temp_filenames);
- $PHP_FAILED_TESTS['BORKED'][] = [
- 'name' => $file,
- 'test_name' => '',
- 'output' => '',
- 'diff' => '',
- 'info' => "$bork_info [$file]",
- ];
}
+
+ $bork_info = "Redirect info must contain exactly one TEST string to be used as redirect directory.";
+ show_result("BORK", $bork_info, '', '', $temp_filenames);
+ $PHP_FAILED_TESTS['BORKED'][] = [
+ 'name' => $file,
+ 'test_name' => '',
+ 'output' => '',
+ 'diff' => '',
+ 'info' => "$bork_info [$file]",
+ ];
}
if (is_array($org_file) || $test->hasSection('REDIRECTTEST')) {
@@ -2516,7 +2439,9 @@
];
}
- if ($test->sectionNotEmpty('CLEAN') && (!$no_clean || $cfg['keep']['clean'])) {
+ // Remember CLEAN output to report borked test if it otherwise passes.
+ $clean_output = null;
+ if ((!$no_clean || $cfg['keep']['clean']) && $test->sectionNotEmpty('CLEAN')) {
show_file_block('clean', $test->getSection('CLEAN'));
save_text($test_clean, trim($test->getSection('CLEAN')), $temp_clean);
@@ -2523,7 +2448,7 @@
if (!$no_clean) {
$extra = !IS_WINDOWS ?
"unset REQUEST_METHOD; unset QUERY_STRING; unset PATH_TRANSLATED; unset SCRIPT_FILENAME; unset REQUEST_METHOD;" : "";
- system_with_timeout("$extra $php $pass_options $extra_options -q $orig_ini_settings $no_file_cache \"$test_clean\"", $env);
+ $clean_output = system_with_timeout("$extra $orig_php $pass_options -q $orig_ini_settings $no_file_cache \"$test_clean\"", $env);
}
if (!$cfg['keep']['clean']) {
@@ -2579,6 +2504,8 @@
}
}
+ $wanted_headers = null;
+ $output_headers = null;
$failed_headers = false;
if ($test->hasSection('EXPECTHEADERS')) {
@@ -2658,42 +2585,24 @@
$wanted_re = $temp;
// Stick to basics
- $wanted_re = str_replace('%e', '\\' . DIRECTORY_SEPARATOR, $wanted_re);
- $wanted_re = str_replace('%s', '[^\r\n]+', $wanted_re);
- $wanted_re = str_replace('%S', '[^\r\n]*', $wanted_re);
- $wanted_re = str_replace('%a', '.+', $wanted_re);
- $wanted_re = str_replace('%A', '.*', $wanted_re);
- $wanted_re = str_replace('%w', '\s*', $wanted_re);
- $wanted_re = str_replace('%i', '[+-]?\d+', $wanted_re);
- $wanted_re = str_replace('%d', '\d+', $wanted_re);
- $wanted_re = str_replace('%x', '[0-9a-fA-F]+', $wanted_re);
- $wanted_re = str_replace('%f', '[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?', $wanted_re);
- $wanted_re = str_replace('%c', '.', $wanted_re);
- $wanted_re = str_replace('%0', '\x00', $wanted_re);
- // %f allows two points "-.0.0" but that is the best *simple* expression
+ $wanted_re = strtr($wanted_re, [
+ '%e' => preg_quote(DIRECTORY_SEPARATOR, '/'),
+ '%s' => '[^\r\n]+',
+ '%S' => '[^\r\n]*',
+ '%a' => '.+',
+ '%A' => '.*',
+ '%w' => '\s*',
+ '%i' => '[+-]?\d+',
+ '%d' => '\d+',
+ '%x' => '[0-9a-fA-F]+',
+ '%f' => '[+-]?(?:\d+|(?=\.\d))(?:\.\d+)?(?:[Ee][+-]?\d+)?',
+ '%c' => '.',
+ '%0' => '\x00',
+ ]);
}
- if (preg_match("/^$wanted_re\$/s", $output)) {
+ if (preg_match('/^' . $wanted_re . '$/s', $output)) {
$passed = true;
- if (!$cfg['keep']['php'] && !$leaked) {
- @unlink($test_file);
- @unlink($preload_filename);
- }
- @unlink($tmp_post);
-
- if (!$leaked && !$failed_headers) {
- if ($test->hasSection('XFAIL')) {
- $warn = true;
- $info = " (warn: XFAIL section but test passes)";
- } elseif ($test->hasSection('XLEAK')) {
- $warn = true;
- $info = " (warn: XLEAK section but test passes)";
- } else {
- show_result("PASS", $tested, $tested_file, '', $temp_filenames);
- $junit->markTestAs('PASS', $shortname, $tested);
- return 'PASSED';
- }
- }
}
} else {
$wanted = trim($test->getSection('EXPECT'));
@@ -2703,29 +2612,46 @@
// compare and leave on success
if (!strcmp($output, $wanted)) {
$passed = true;
+ }
- if (!$cfg['keep']['php'] && !$leaked) {
- @unlink($test_file);
- @unlink($preload_filename);
+ $wanted_re = null;
+ }
+
+ if ($passed) {
+ if (!$cfg['keep']['php'] && !$leaked) {
+ @unlink($test_file);
+ @unlink($preload_filename);
+ }
+ @unlink($tmp_post);
+
+ if (!$leaked && !$failed_headers) {
+ // If the test passed and CLEAN produced output, report test as borked.
+ if ($clean_output) {
+ show_result("BORK", $output, $tested_file, 'reason: invalid output from CLEAN', $temp_filenames);
+ $PHP_FAILED_TESTS['BORKED'][] = [
+ 'name' => $file,
+ 'test_name' => '',
+ 'output' => '',
+ 'diff' => '',
+ 'info' => "$clean_output [$file]",
+ ];
+
+ $junit->markTestAs('BORK', $shortname, $tested, null, $clean_output);
+ return 'BORKED';
}
- @unlink($tmp_post);
- if (!$leaked && !$failed_headers) {
- if ($test->hasSection('XFAIL')) {
- $warn = true;
- $info = " (warn: XFAIL section but test passes)";
- } elseif ($test->hasSection('XLEAK')) {
- $warn = true;
- $info = " (warn: XLEAK section but test passes)";
- } else {
- show_result("PASS", $tested, $tested_file, '', $temp_filenames);
- $junit->markTestAs('PASS', $shortname, $tested);
- return 'PASSED';
- }
+ if ($test->hasSection('XFAIL')) {
+ $warn = true;
+ $info = " (warn: XFAIL section but test passes)";
+ } elseif ($test->hasSection('XLEAK')) {
+ $warn = true;
+ $info = " (warn: XLEAK section but test passes)";
+ } else {
+ show_result("PASS", $tested, $tested_file, '', $temp_filenames);
+ $junit->markTestAs('PASS', $shortname, $tested);
+ return 'PASSED';
}
}
-
- $wanted_re = null;
}
// Test failed so we need to report details.
@@ -2739,6 +2665,8 @@
}
}
+ $restype = [];
+
if ($leaked) {
$restype[] = $test->hasSection('XLEAK') ?
'XLEAK' : 'LEAK';
@@ -2772,12 +2700,19 @@
}
// write .diff
- $diff = generate_diff($wanted, $wanted_re, $output);
+ if (!empty($environment['TEST_PHP_DIFF_CMD'])) {
+ $diff = generate_diff_external($environment['TEST_PHP_DIFF_CMD'], $exp_filename, $output_filename);
+ } else {
+ $diff = generate_diff($wanted, $wanted_re, $output);
+ }
+
if (is_array($IN_REDIRECT)) {
$orig_shortname = str_replace(TEST_PHP_SRCDIR . '/', '', $file);
$diff = "# original source file: $orig_shortname\n" . $diff;
}
- show_file_block('diff', $diff);
+ if (!$SHOW_ONLY_GROUPS || array_intersect($restype, $SHOW_ONLY_GROUPS)) {
+ show_file_block('diff', $diff);
+ }
if (strpos($log_format, 'D') !== false && file_put_contents($diff_filename, $diff) === false) {
error("Cannot create test diff - $diff_filename");
}
@@ -2810,11 +2745,14 @@
"gdb")
gdb --args {$orig_cmd}
;;
+"lldb")
+ lldb -- {$orig_cmd}
+ ;;
"valgrind")
- USE_ZEND_ALLOC=0 valgrind $2 ${orig_cmd}
+ USE_ZEND_ALLOC=0 valgrind $2 {$orig_cmd}
;;
"rr")
- rr record $2 ${orig_cmd}
+ rr record $2 {$orig_cmd}
;;
*)
{$orig_cmd}
@@ -2858,9 +2796,9 @@
{
if ($is_reg) {
return preg_match('/^' . $l1 . '$/s', $l2);
- } else {
- return !strcmp($l1, $l2);
}
+
+ return !strcmp($l1, $l2);
}
function count_array_diff(
@@ -2936,20 +2874,20 @@
$idx1++;
$idx2++;
continue;
+ }
+
+ $c1 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1 + 1, $idx2, $cnt1, $cnt2, 10);
+ $c2 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $idx2 + 1, $cnt1, $cnt2, 10);
+
+ if ($c1 > $c2) {
+ $old1[$idx1] = sprintf("{$line_number_spec}- ", $idx1 + 1) . $w[$idx1++];
+ } elseif ($c2 > 0) {
+ $old2[$idx2] = sprintf("{$line_number_spec}+ ", $idx2 + 1) . $ar2[$idx2++];
} else {
- $c1 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1 + 1, $idx2, $cnt1, $cnt2, 10);
- $c2 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $idx2 + 1, $cnt1, $cnt2, 10);
-
- if ($c1 > $c2) {
- $old1[$idx1] = sprintf("{$line_number_spec}- ", $idx1 + 1) . $w[$idx1++];
- } elseif ($c2 > 0) {
- $old2[$idx2] = sprintf("{$line_number_spec}+ ", $idx2 + 1) . $ar2[$idx2++];
- } else {
- $old1[$idx1] = sprintf("{$line_number_spec}- ", $idx1 + 1) . $w[$idx1++];
- $old2[$idx2] = sprintf("{$line_number_spec}+ ", $idx2 + 1) . $ar2[$idx2++];
- }
- $last_printed_context_line = $idx1;
+ $old1[$idx1] = sprintf("{$line_number_spec}- ", $idx1 + 1) . $w[$idx1++];
+ $old2[$idx2] = sprintf("{$line_number_spec}+ ", $idx2 + 1) . $ar2[$idx2++];
}
+ $last_printed_context_line = $idx1;
}
$mapping[$idx2] = $idx1;
@@ -3030,6 +2968,13 @@
return $diff;
}
+function generate_diff_external(string $diff_cmd, string $exp_file, string $output_file): string
+{
+ $retval = shell_exec("{$diff_cmd} {$exp_file} {$output_file}");
+
+ return is_string($retval) ? $retval : 'Could not run external diff tool set through PHP_TEST_DIFF_CMD environment variable';
+}
+
function generate_diff(string $wanted, ?string $wanted_re, string $output): string
{
$w = explode("\n", $wanted);
@@ -3305,11 +3250,11 @@
function show_redirect_start(string $tests, string $tested, string $tested_file): void
{
- global $SHOW_ONLY_GROUPS;
+ global $SHOW_ONLY_GROUPS, $show_progress;
if (!$SHOW_ONLY_GROUPS || in_array('REDIRECT', $SHOW_ONLY_GROUPS)) {
echo "REDIRECT $tests ($tested [$tested_file]) begin\n";
- } else {
+ } elseif ($show_progress) {
clear_show_test();
}
}
@@ -3316,11 +3261,11 @@
function show_redirect_ends(string $tests, string $tested, string $tested_file): void
{
- global $SHOW_ONLY_GROUPS;
+ global $SHOW_ONLY_GROUPS, $show_progress;
if (!$SHOW_ONLY_GROUPS || in_array('REDIRECT', $SHOW_ONLY_GROUPS)) {
echo "REDIRECT $tests ($tested [$tested_file]) done\n";
- } else {
+ } elseif ($show_progress) {
clear_show_test();
}
}
@@ -3362,7 +3307,7 @@
string $extra = '',
?array $temp_filenames = null
): void {
- global $SHOW_ONLY_GROUPS, $colorize;
+ global $SHOW_ONLY_GROUPS, $colorize, $show_progress;
if (!$SHOW_ONLY_GROUPS || in_array($result, $SHOW_ONLY_GROUPS)) {
if ($colorize) {
@@ -3384,10 +3329,9 @@
} else {
echo "$result $tested [$tested_file] $extra\n";
}
- } elseif (!$SHOW_ONLY_GROUPS) {
+ } elseif ($show_progress) {
clear_show_test();
}
-
}
class BorkageException extends Exception
@@ -3741,8 +3685,8 @@
return $this->extensions[$php];
}
- $extDir = `$php -d display_errors=0 -r "echo ini_get('extension_dir');"`;
- $extensions = explode(",", `$php -d display_errors=0 -r "echo implode(',', get_loaded_extensions());"`);
+ $extDir = shell_exec("$php -d display_errors=0 -r \"echo ini_get('extension_dir');\"");
+ $extensions = explode(",", shell_exec("$php -d display_errors=0 -r \"echo implode(',', get_loaded_extensions());\""));
$extensions = array_map('strtolower', $extensions);
if (in_array('zend opcache', $extensions)) {
$extensions[] = 'opcache';
More information about the mapguide-commits
mailing list