summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2015-07-21 12:27:50 +0200
committerAnatol Belski <ab@php.net>2015-07-21 12:27:50 +0200
commitb148ef44965651fcbe93e8ee35a14edc087ef17c (patch)
treef5c53fb3d448d0174610d077e0bf3c8bd76834b2
parentad8a73dd55c087de465ad80e8715611693bb1460 (diff)
parent6065b29fe41f09e01dd06ba21980e0344f13230c (diff)
downloadphp-git-b148ef44965651fcbe93e8ee35a14edc087ef17c.tar.gz
Merge branch 'master' into PHP-7.0.0
* master: (204 commits) Reverted ad4533fdbabcc3e545277e30023b2fdce16297a0 update UPGRADING updated NEWS fix comment libwebp support for linux Replaced libvpx by libwebp (first draft; Windows only) update news with bug #70022 Change E_ERROR and some E_WARNING to E_RECOVERABLE_ERROR. Add tests for json_last_error()/json_last_error_msg() failures updated NEWS updated NEWS Exclude opcache from a few opcode related tests updated NEWS updated NEWS Fix #66387: Stack overflow with imagefilltoborder Fix various Windows issues (e.g. dir separators) Remove bogus exception_save() from FETCH_CLASS Fix readline/libedit build Do not use readline when not having a tty This is important for e.g. run-tests.php Add show_unexecuted option to phpdbg_end_oplog() ... Conflicts: Zend/tests/temporary_cleaning_001.phpt Zend/tests/temporary_cleaning_003.phpt Zend/tests/temporary_cleaning_004.phpt Zend/tests/temporary_cleaning_005.phpt Zend/zend_compile.c Zend/zend_compile.h sapi/phpdbg/phpdbg_opcode.c
-rw-r--r--.travis.yml1
-rw-r--r--UPGRADING3
-rw-r--r--Zend/tests/assert/expect_empty_stmt_bug.phpt11
-rw-r--r--Zend/tests/bug69640.phpt2
-rw-r--r--Zend/tests/bug69732.phpt7
-rw-r--r--Zend/tests/bug69996.phpt25
-rw-r--r--Zend/tests/bug70012.phpt32
-rw-r--r--Zend/tests/bug70089.phpt37
-rw-r--r--Zend/tests/closure_033.phpt2
-rw-r--r--Zend/tests/nested_method_and_function.phpt29
-rw-r--r--Zend/tests/temporary_cleaning_001.phpt25
-rw-r--r--Zend/tests/temporary_cleaning_003.phpt21
-rw-r--r--Zend/tests/temporary_cleaning_004.phpt46
-rw-r--r--Zend/tests/temporary_cleaning_005.phpt50
-rw-r--r--Zend/tests/temporary_cleaning_006.phpt20
-rw-r--r--Zend/tests/temporary_cleaning_007.phpt22
-rw-r--r--Zend/tests/try/catch_002.phpt (renamed from Zend/tests/catch_002.phpt)0
-rw-r--r--Zend/tests/try/catch_003.phpt (renamed from Zend/tests/catch_003.phpt)0
-rw-r--r--Zend/tests/try/catch_004.phpt (renamed from Zend/tests/catch_004.phpt)0
-rw-r--r--Zend/tests/try/catch_finally_001.phpt (renamed from Zend/tests/catch_finally_001.phpt)0
-rw-r--r--Zend/tests/try/catch_finally_002.phpt (renamed from Zend/tests/catch_finally_002.phpt)0
-rw-r--r--Zend/tests/try/catch_finally_003.phpt (renamed from Zend/tests/catch_finally_003.phpt)0
-rw-r--r--Zend/tests/try/catch_finally_004.phpt (renamed from Zend/tests/catch_finally_004.phpt)0
-rw-r--r--Zend/tests/try/catch_finally_005.phpt (renamed from Zend/tests/catch_finally_005.phpt)0
-rw-r--r--Zend/tests/try/catch_finally_006.phpt (renamed from Zend/tests/catch_finally_006.phpt)0
-rw-r--r--Zend/tests/try/finally_goto_001.phpt (renamed from Zend/tests/finally_goto_001.phpt)0
-rw-r--r--Zend/tests/try/finally_goto_002.phpt (renamed from Zend/tests/finally_goto_002.phpt)0
-rw-r--r--Zend/tests/try/finally_goto_003.phpt (renamed from Zend/tests/finally_goto_003.phpt)0
-rw-r--r--Zend/tests/try/finally_goto_004.phpt (renamed from Zend/tests/finally_goto_004.phpt)0
-rw-r--r--Zend/tests/try/finally_goto_005.phpt15
-rw-r--r--Zend/tests/try/try_catch_finally_001.phpt (renamed from Zend/tests/try_catch_finally_001.phpt)0
-rw-r--r--Zend/tests/try/try_catch_finally_002.phpt (renamed from Zend/tests/try_catch_finally_002.phpt)0
-rw-r--r--Zend/tests/try/try_catch_finally_003.phpt (renamed from Zend/tests/try_catch_finally_003.phpt)0
-rw-r--r--Zend/tests/try/try_catch_finally_004.phpt (renamed from Zend/tests/try_catch_finally_004.phpt)0
-rw-r--r--Zend/tests/try/try_catch_finally_005.phpt (renamed from Zend/tests/try_catch_finally_005.phpt)0
-rw-r--r--Zend/tests/try/try_catch_finally_006.phpt (renamed from Zend/tests/try_catch_finally_006.phpt)0
-rw-r--r--Zend/tests/try/try_catch_finally_007.phpt (renamed from Zend/tests/try_catch_finally_007.phpt)0
-rw-r--r--Zend/tests/try/try_finally_001.phpt (renamed from Zend/tests/try_finally_001.phpt)0
-rw-r--r--Zend/tests/try/try_finally_002.phpt (renamed from Zend/tests/try_finally_002.phpt)0
-rw-r--r--Zend/tests/try/try_finally_003.phpt (renamed from Zend/tests/try_finally_003.phpt)0
-rw-r--r--Zend/tests/try/try_finally_004.phpt (renamed from Zend/tests/try_finally_004.phpt)0
-rw-r--r--Zend/tests/try/try_finally_005.phpt (renamed from Zend/tests/try_finally_005.phpt)0
-rw-r--r--Zend/tests/try/try_finally_006.phpt (renamed from Zend/tests/try_finally_006.phpt)0
-rw-r--r--Zend/tests/try/try_finally_007.phpt (renamed from Zend/tests/try_finally_007.phpt)0
-rw-r--r--Zend/tests/try/try_finally_008.phpt (renamed from Zend/tests/try_finally_008.phpt)0
-rw-r--r--Zend/tests/try/try_finally_009.phpt (renamed from Zend/tests/try_finally_009.phpt)0
-rw-r--r--Zend/tests/try/try_finally_010.phpt (renamed from Zend/tests/try_finally_010.phpt)0
-rw-r--r--Zend/tests/try/try_finally_011.phpt (renamed from Zend/tests/try_finally_011.phpt)0
-rw-r--r--Zend/tests/try/try_finally_012.phpt32
-rw-r--r--Zend/zend.c6
-rw-r--r--Zend/zend_API.c2
-rw-r--r--Zend/zend_alloc.c14
-rw-r--r--Zend/zend_alloc.h2
-rw-r--r--Zend/zend_ast.c4
-rw-r--r--Zend/zend_compile.c161
-rw-r--r--Zend/zend_compile.h7
-rw-r--r--Zend/zend_exceptions.c3
-rw-r--r--Zend/zend_execute.c37
-rw-r--r--Zend/zend_inheritance.c13
-rw-r--r--Zend/zend_language_scanner.c719
-rw-r--r--Zend/zend_language_scanner.l37
-rw-r--r--Zend/zend_list.c12
-rw-r--r--Zend/zend_operators.c14
-rw-r--r--Zend/zend_operators.h6
-rw-r--r--Zend/zend_portability.h10
-rw-r--r--Zend/zend_types.h9
-rw-r--r--Zend/zend_vm_def.h515
-rw-r--r--Zend/zend_vm_execute.h2628
-rw-r--r--Zend/zend_vm_gen.php28
-rw-r--r--configure.in4
-rw-r--r--ext/curl/interface.c6
-rw-r--r--ext/date/tests/bug66985.phpt2
-rw-r--r--ext/dom/document.c1
-rw-r--r--ext/dom/documenttype.c2
-rw-r--r--ext/gd/config.m448
-rw-r--r--ext/gd/config.w3215
-rw-r--r--ext/gd/gd.c10
-rw-r--r--ext/gd/gd_ctx.c7
-rw-r--r--ext/gd/libgd/gd.c24
-rw-r--r--ext/gd/libgd/gd_arc.c8
-rw-r--r--ext/gd/libgd/gd_crop.c6
-rw-r--r--ext/gd/libgd/gd_interpolation.c16
-rw-r--r--ext/gd/libgd/gd_webp.c227
-rw-r--r--ext/gd/libgd/webpimg.c900
-rw-r--r--ext/gd/libgd/webpimg.h181
-rw-r--r--ext/gd/tests/bug53154.phpt21
-rw-r--r--ext/gd/tests/bug53156.phpt57
-rw-r--r--ext/gd/tests/bug53640.phpt22
-rw-r--r--ext/gd/tests/bug66339.phpt31
-rw-r--r--ext/gd/tests/bug66387.phpt15
-rw-r--r--ext/gd/tests/bug66590.phpt27
-rw-r--r--ext/gd/tests/bug66590_1.phpt17
-rw-r--r--ext/gd/tests/bug66882.phpt14
-rw-r--r--ext/gd/tests/bug67447.phpt26
-rw-r--r--ext/gd/tests/bug69024.phpt15
-rw-r--r--ext/gd/tests/bug70047.phpt15
-rw-r--r--ext/gd/tests/bug70102.phpt30
-rw-r--r--ext/gd/tests/imagefilledellipse_basic.phpt25
-rw-r--r--ext/gd/tests/imagewebp_nullbyte_injection.phpt6
-rw-r--r--ext/gd/tests/similarity.inc64
-rw-r--r--ext/gd/tests/webp_basic.phpt35
-rw-r--r--ext/intl/collator/collator_sort.c2
-rw-r--r--ext/intl/msgformat/msgformat_format.c3
-rw-r--r--ext/intl/msgformat/msgformat_parse.c3
-rw-r--r--ext/intl/tests/calendar_before_after_error.phpt4
-rw-r--r--ext/intl/tests/calendar_equals_error.phpt8
-rw-r--r--ext/intl/tests/calendar_get_Least_Greatest_Minimum_Maximum_error.phpt8
-rw-r--r--ext/intl/tests/calendar_get_getActualMaximum_Minumum_error2.phpt6
-rw-r--r--ext/intl/tests/calendar_isEquivalentTo_error.phpt8
-rw-r--r--ext/intl/tests/calendar_setTimeZone_error.phpt2
-rw-r--r--ext/intl/tests/timezone_hasSameRules_error.phpt4
-rw-r--r--ext/json/json_parser.tab.c994
-rw-r--r--ext/json/json_parser.tab.h72
-rw-r--r--ext/json/json_scanner.c1095
-rw-r--r--ext/json/php_json_scanner_defs.h2
-rw-r--r--ext/json/tests/json_last_error_error.phpt22
-rw-r--r--ext/json/tests/json_last_error_msg_error.phpt21
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8.c15
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c14
-rw-r--r--ext/mbstring/php_mbregex.c6
-rw-r--r--ext/mysqli/tests/mysqli_fetch_object.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_fetch_object_oo.phpt6
-rw-r--r--ext/mysqlnd/mysqlnd_debug.h1
-rw-r--r--ext/mysqlnd/mysqlnd_wireprotocol.c6
-rw-r--r--ext/oci8/oci8.c45
-rw-r--r--ext/oci8/oci8_interface.c90
-rw-r--r--ext/oci8/oci8_statement.c97
-rw-r--r--ext/oci8/php_oci8_int.h4
-rw-r--r--ext/opcache/Optimizer/optimize_temp_vars_5.c8
-rw-r--r--ext/opcache/ZendAccelerator.c11
-rw-r--r--ext/opcache/zend_accelerator_util_funcs.c4
-rw-r--r--ext/opcache/zend_file_cache.c61
-rw-r--r--ext/pdo/tests/bug65946.phpt3
-rw-r--r--ext/pdo_mysql/php_pdo_mysql_int.h7
-rw-r--r--ext/pdo_oci/oci_statement.c49
-rw-r--r--ext/pdo_oci/tests/bug44301.phpt2
-rw-r--r--ext/pdo_oci/tests/bug57702.phpt24
-rw-r--r--ext/pdo_sqlite/sqlite_statement.c2
-rw-r--r--ext/pgsql/pgsql.c9
-rw-r--r--ext/posix/config.m42
-rw-r--r--ext/posix/php_posix.h4
-rw-r--r--ext/posix/posix.c90
-rw-r--r--ext/posix/tests/posix_setrlimit.phpt18
-rw-r--r--ext/readline/readline_cli.c2
-rw-r--r--ext/shmop/tests/002.phpt119
-rw-r--r--ext/simplexml/simplexml.c8
-rw-r--r--ext/soap/php_http.c4
-rw-r--r--ext/sockets/conversions.c8
-rw-r--r--ext/spl/spl_directory.c1
-rw-r--r--ext/spl/spl_observer.c2
-rw-r--r--ext/spl/tests/bug70053.phpt21
-rw-r--r--ext/spl/tests/spl_fileinfo_getextension_leadingdot.phpt13
-rw-r--r--ext/standard/array.c121
-rw-r--r--ext/standard/basic_functions.c3
-rw-r--r--ext/standard/crypt_freesec.c8
-rw-r--r--ext/standard/css.c2
-rw-r--r--ext/standard/exec.c4
-rw-r--r--ext/standard/image.c8
-rw-r--r--ext/standard/iptc.c1
-rw-r--r--ext/standard/php_string.h2
-rw-r--r--ext/standard/string.c9
-rw-r--r--ext/standard/tests/general_functions/bug70018-win32.phpt31
-rw-r--r--ext/standard/tests/general_functions/bug70018.phpt21
-rw-r--r--ext/standard/tests/image/bug70096.phpt31
-rw-r--r--ext/standard/tests/network/getprotobyname_basic.phpt10
-rw-r--r--ext/standard/tests/network/getprotobyname_error.phpt16
-rw-r--r--ext/standard/tests/network/getprotobynumber_basic.phpt10
-rw-r--r--ext/standard/tests/network/getprotobynumber_error.phpt16
-rw-r--r--ext/standard/tests/strings/basename_variation.phpt8
-rw-r--r--ext/standard/var.c2
-rw-r--r--ext/tidy/tidy.c3
-rw-r--r--ext/tokenizer/tests/parse_errors.phpt42
-rw-r--r--ext/tokenizer/tokenizer.c36
-rwxr-xr-xext/tokenizer/tokenizer_data_gen.sh4
-rw-r--r--ext/wddx/wddx.c30
-rw-r--r--ext/xsl/xsltprocessor.c25
-rw-r--r--ext/zlib/zlib_filter.c16
-rw-r--r--main/php.h6
-rw-r--r--main/spprintf.c17
-rw-r--r--php.ini-development1
-rw-r--r--php.ini-production1
-rwxr-xr-xrun-tests.php123
-rw-r--r--sapi/phpdbg/config.m42
-rw-r--r--sapi/phpdbg/create-test.php150
-rw-r--r--sapi/phpdbg/phpdbg.c125
-rw-r--r--sapi/phpdbg/phpdbg.h5
-rw-r--r--sapi/phpdbg/phpdbg_bp.c85
-rw-r--r--sapi/phpdbg/phpdbg_cmd.c14
-rw-r--r--sapi/phpdbg/phpdbg_frame.c6
-rw-r--r--sapi/phpdbg/phpdbg_info.c26
-rw-r--r--sapi/phpdbg/phpdbg_io.c1
-rw-r--r--sapi/phpdbg/phpdbg_lexer.c1004
-rw-r--r--sapi/phpdbg/phpdbg_lexer.h1
-rw-r--r--sapi/phpdbg/phpdbg_lexer.l3
-rw-r--r--sapi/phpdbg/phpdbg_opcode.c87
-rw-r--r--sapi/phpdbg/phpdbg_opcode.h1
-rw-r--r--sapi/phpdbg/phpdbg_print.c89
-rw-r--r--sapi/phpdbg/phpdbg_prompt.c95
-rw-r--r--sapi/phpdbg/phpdbg_utils.c36
-rw-r--r--sapi/phpdbg/tests/basic_run.phpt8
-rw-r--r--sapi/phpdbg/tests/breakpoints_001.phpt33
-rw-r--r--sapi/phpdbg/tests/breakpoints_002.phpt40
-rw-r--r--sapi/phpdbg/tests/breakpoints_003.phpt33
-rw-r--r--sapi/phpdbg/tests/breakpoints_004.phpt41
-rw-r--r--sapi/phpdbg/tests/breakpoints_005.phpt28
-rw-r--r--sapi/phpdbg/tests/breakpoints_006.phpt26
-rw-r--r--sapi/phpdbg/tests/breakpoints_007.phpt25
-rw-r--r--sapi/phpdbg/tests/breakpoints_008.phpt34
-rw-r--r--sapi/phpdbg/tests/clean_001.phpt60
-rw-r--r--sapi/phpdbg/tests/clear_001.phpt44
-rw-r--r--sapi/phpdbg/tests/commands/0001_basic.test8
-rw-r--r--sapi/phpdbg/tests/commands/0002_set.test21
-rw-r--r--sapi/phpdbg/tests/commands/0101_info.test19
-rw-r--r--sapi/phpdbg/tests/commands/0102_print.test27
-rw-r--r--sapi/phpdbg/tests/commands/0103_register.test28
-rw-r--r--sapi/phpdbg/tests/commands/0104_clean.test14
-rw-r--r--sapi/phpdbg/tests/commands/0105_clear.test18
-rw-r--r--sapi/phpdbg/tests/commands/0106_compile.test18
-rw-r--r--sapi/phpdbg/tests/commands/0107_compile.test17
-rw-r--r--sapi/phpdbg/tests/exceptions_001.phpt46
-rw-r--r--sapi/phpdbg/tests/exceptions_002.phpt51
-rw-r--r--sapi/phpdbg/tests/info_001.phpt78
-rw-r--r--sapi/phpdbg/tests/info_002.phpt31
-rw-r--r--sapi/phpdbg/tests/phpdbg_oplog_001.phpt58
-rw-r--r--sapi/phpdbg/tests/phpdbg_oplog_002.phpt16
-rw-r--r--sapi/phpdbg/tests/print_001.phpt67
-rw-r--r--sapi/phpdbg/tests/print_002.phpt51
-rw-r--r--sapi/phpdbg/tests/run-tests.php597
-rw-r--r--sapi/phpdbg/tests/run_001.phpt56
-rw-r--r--tests/classes/type_hinting_004.phpt12
-rwxr-xr-xtravis/compile.sh1
232 files changed, 6658 insertions, 6783 deletions
diff --git a/.travis.yml b/.travis.yml
index 86ae36afd5..94056f4ca9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -50,4 +50,3 @@ before_script:
# Run PHPs run-tests.php
script:
- ./sapi/cli/php run-tests.php -p `pwd`/sapi/cli/php $(if [ $ENABLE_DEBUG == 1 ]; then echo "-d opcache.enable_cli=1 -d zend_extension=`pwd`/modules/opcache.so"; fi) -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP" --offline --show-diff --set-timeout 120
- - ./sapi/cli/php sapi/phpdbg/tests/run-tests.php -diff2stdout --phpdbg sapi/phpdbg/phpdbg
diff --git a/UPGRADING b/UPGRADING
index 8467074a75..a14f711acb 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -695,6 +695,9 @@ out, that the corresponding SDK isn't available anymore.
Mhash is not an extension anymore, use function_exists("mhash") to check whether
it is avaliable.
+- GD
+ The bundled libgd requires libwebp instead of libvpx for the WebP functionality.
+
========================================
10. New Global Constants
========================================
diff --git a/Zend/tests/assert/expect_empty_stmt_bug.phpt b/Zend/tests/assert/expect_empty_stmt_bug.phpt
new file mode 100644
index 0000000000..f5dcff3ba5
--- /dev/null
+++ b/Zend/tests/assert/expect_empty_stmt_bug.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Empty statement in assert() shouldn't segfault
+--FILE--
+<?php
+
+assert((function () { return true;; })());
+echo "ok";
+
+?>
+--EXPECT--
+ok
diff --git a/Zend/tests/bug69640.phpt b/Zend/tests/bug69640.phpt
index e7ff7c99c1..bdc7814712 100644
--- a/Zend/tests/bug69640.phpt
+++ b/Zend/tests/bug69640.phpt
@@ -5,4 +5,4 @@ Bug #69640 Unhandled Error thrown from userland do not produce any output
throw new \ParseError('I mess everything up! :trollface:');
?>
--EXPECTF--
-Fatal error: I mess everything up! :trollface: in %sbug69640.php on line 2
+Parse error: I mess everything up! :trollface: in %sbug69640.php on line 2
diff --git a/Zend/tests/bug69732.phpt b/Zend/tests/bug69732.phpt
index bc6206d113..8d5fccd712 100644
--- a/Zend/tests/bug69732.phpt
+++ b/Zend/tests/bug69732.phpt
@@ -24,7 +24,8 @@ Notice: Undefined property: wpq::$interesting in %sbug69732.php on line 6
Notice: Indirect modification of overloaded property wpq::$interesting has no effect in %sbug69732.php on line 16
-Notice: Only variables should be assigned by reference in %sbug69732.php on line 16
+Fatal error: Uncaught Error: Cannot assign by reference to overloaded object in %s:%d
+Stack trace:
+#0 {main}
+ thrown in %s on line %d
-Notice: Undefined property: wpq::$interesting in %sbug69732.php on line 6
-XXX
diff --git a/Zend/tests/bug69996.phpt b/Zend/tests/bug69996.phpt
new file mode 100644
index 0000000000..178e36837a
--- /dev/null
+++ b/Zend/tests/bug69996.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #69996 (Changing the property of a cloned object affects the original)
+--FILE--
+<?php
+
+function method($cache) {
+ $prepared = clone $cache;
+ var_dump($prepared->data);
+ $prepared->data = "bad";
+ return $prepared;
+}
+
+$cache = new stdClass();
+$cache->data = "good";
+
+for ($i = 0; $i < 5; ++$i) {
+ method($cache);
+}
+?>
+--EXPECT--
+string(4) "good"
+string(4) "good"
+string(4) "good"
+string(4) "good"
+string(4) "good"
diff --git a/Zend/tests/bug70012.phpt b/Zend/tests/bug70012.phpt
new file mode 100644
index 0000000000..5337649d2d
--- /dev/null
+++ b/Zend/tests/bug70012.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #70012 (Exception lost with nested finally block)
+--FILE--
+<?php
+try {
+ echo "Outer try\n";
+ try {
+ echo " Middle try\n";
+ throw new Exception();
+ } finally {
+ echo " Middle finally\n";
+ try {
+ echo " Inner try\n";
+ } finally {
+ echo " Inner finally\n";
+ }
+ }
+ echo "Outer shouldnt get here\n";
+} catch (Exception $e) {
+ echo "Outer catch\n";
+} finally {
+ echo "Outer finally\n";
+}
+?>
+--EXPECT--
+Outer try
+ Middle try
+ Middle finally
+ Inner try
+ Inner finally
+Outer catch
+Outer finally
diff --git a/Zend/tests/bug70089.phpt b/Zend/tests/bug70089.phpt
new file mode 100644
index 0000000000..c61db00c9e
--- /dev/null
+++ b/Zend/tests/bug70089.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Bug #70089 (segfault in PHP 7 at ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER ())
+--INI--
+opcache.enable=0
+--FILE--
+<?php
+function dummy($a) {
+}
+
+try {
+ chr(0)[0][] = 1;
+} catch (Error $e) {
+ var_dump($e->getMessage());
+}
+try {
+ unset(chr(0)[0][0]);
+} catch (Error $e) {
+ var_dump($e->getMessage());
+}
+eval("function runtimetest(&\$a) {} ");
+try {
+ runtimetest(chr(0)[0]);
+} catch (Error $e) {
+ var_dump($e->getMessage());
+}
+
+try {
+ ++chr(0)[0];
+} catch (Error $e) {
+ var_dump($e->getMessage());
+}
+?>
+--EXPECTF--
+string(36) "Cannot use string offset as an array"
+string(27) "Cannot unset string offsets"
+string(41) "Only variables can be passed by reference"
+string(64) "Cannot increment/decrement overloaded objects nor string offsets"
diff --git a/Zend/tests/closure_033.phpt b/Zend/tests/closure_033.phpt
index d92716aacc..c83a53898d 100644
--- a/Zend/tests/closure_033.phpt
+++ b/Zend/tests/closure_033.phpt
@@ -23,7 +23,7 @@ $o->func();
?>
===DONE===
--EXPECTF--
-Test::{closure}()
+{closure}()
Fatal error: Uncaught Error: Call to private method Test::func() from context '' in %sclosure_033.php:%d
Stack trace:
diff --git a/Zend/tests/nested_method_and_function.phpt b/Zend/tests/nested_method_and_function.phpt
new file mode 100644
index 0000000000..46d55ddc52
--- /dev/null
+++ b/Zend/tests/nested_method_and_function.phpt
@@ -0,0 +1,29 @@
+--TEST--
+active_class_entry must be always correct (__METHOD__ should not depend on declaring function ce)
+--FILE--
+<?php
+
+namespace Baz;
+
+class Foo {
+ public static function bar() {
+ function foo() {
+ var_dump(__FUNCTION__);
+ var_dump(__METHOD__);
+ }
+
+ foo();
+
+ var_dump(__FUNCTION__);
+ var_dump(__METHOD__);
+ }
+}
+
+Foo::bar();
+
+?>
+--EXPECT--
+string(7) "Baz\foo"
+string(7) "Baz\foo"
+string(3) "bar"
+string(12) "Baz\Foo::bar"
diff --git a/Zend/tests/temporary_cleaning_001.phpt b/Zend/tests/temporary_cleaning_001.phpt
new file mode 100644
index 0000000000..40340bc3da
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_001.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Temporary leak on exception
+--XFAIL--
+See Bug #62210 and attempt to fix it in "tmp_livelibess" branch
+--FILE--
+<?php
+
+function ops() {
+ throw new Exception();
+}
+
+try {
+ $x = 2;
+ $y = new stdClass;
+ while ($x-- && new stdClass) {
+ $r = [$x] + ($y ? ((array) $x) + [2] : ops());
+ $y = (array) $y;
+ }
+} catch (Exception $e) {
+}
+
+?>
+==DONE==
+--EXPECT--
+==DONE==
diff --git a/Zend/tests/temporary_cleaning_003.phpt b/Zend/tests/temporary_cleaning_003.phpt
new file mode 100644
index 0000000000..0f7d9450eb
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_003.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Fundamental memory leak test on temporaries
+--XFAIL--
+See Bug #62210 and attempt to fix it in "tmp_livelibess" branch
+--FILE--
+<?php
+
+function ops() {
+ throw new Exception();
+}
+
+try{
+ $x = 1;
+ $r = [$x] + ops();
+} catch (Exception $e) {
+}
+
+?>
+==DONE==
+--EXPECT--
+==DONE==
diff --git a/Zend/tests/temporary_cleaning_004.phpt b/Zend/tests/temporary_cleaning_004.phpt
new file mode 100644
index 0000000000..e2b093654f
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_004.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Temporary leak with switch
+--XFAIL--
+See Bug #62210 and attempt to fix it in "tmp_livelibess" branch
+--FILE--
+<?php
+
+function ops() {
+ throw new Exception();
+}
+
+$a = [new stdClass, new stdClass];
+switch ($a[0]) {
+ case false:
+ break;
+ default:
+ try {
+ $x = 2;
+ $y = new stdClass;
+ while ($x-- && new stdClass) {
+ $r = [$x] + ($y ? ((array) $x) + [2] : ops());
+ $y = (array) $y;
+ }
+ } catch (Exception $e) {
+ }
+}
+
+try {
+ switch ($a[0]) {
+ case false:
+ break;
+ default:
+ $x = 2;
+ $y = new stdClass;
+ while ($x-- && new stdClass) {
+ $r = [$x] + ($y ? ((array) $x) + [2] : ops());
+ $y = (array) $y;
+ }
+ }
+} catch (Exception $e) {
+}
+
+?>
+==DONE==
+--EXPECT--
+==DONE==
diff --git a/Zend/tests/temporary_cleaning_005.phpt b/Zend/tests/temporary_cleaning_005.phpt
new file mode 100644
index 0000000000..f671c32543
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_005.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Temporary leak with foreach
+--XFAIL--
+See Bug #62210 and attempt to fix it in "tmp_livelibess" branch
+--FILE--
+<?php
+
+function ops() {
+ throw new Exception();
+}
+
+$a = [new stdClass, new stdClass];
+foreach ([$a, [new stdClass]] as $b) {
+ switch ($b[0]) {
+ case false:
+ break;
+ default:
+ try {
+ $x = 2;
+ $y = new stdClass;
+ while ($x-- && new stdClass) {
+ $r = [$x] + ($y ? ((array) $x) + [2] : ops());
+ $y = (array) $y;
+ }
+ } catch (Exception $e) {
+ }
+ }
+}
+
+foreach ([$a, [new stdClass]] as $b) {
+ try {
+ switch ($b[0]) {
+ case false:
+ break;
+ default:
+ $x = 2;
+ $y = new stdClass;
+ while ($x-- && new stdClass) {
+ $r = [$x] + ($y ? ((array) $x) + [2] : ops());
+ $y = (array) $y;
+ }
+ }
+ } catch (Exception $e) {
+ }
+}
+
+?>
+==DONE==
+--EXPECT--
+==DONE==
diff --git a/Zend/tests/temporary_cleaning_006.phpt b/Zend/tests/temporary_cleaning_006.phpt
new file mode 100644
index 0000000000..435e7b12dd
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_006.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Exception after separation during indirect write to fcall result
+--XFAIL--
+See Bug #62210 and attempt to fix it in "tmp_livelibess" branch
+--FILE--
+<?php
+
+function throwing() { throw new Exception; }
+
+function getArray($x) { return [$x]; }
+
+try {
+ getArray(0)[throwing()] = 1;
+} catch (Exception $e) {
+ echo "Exception\n";
+}
+
+?>
+--EXPECT--
+Exception
diff --git a/Zend/tests/temporary_cleaning_007.phpt b/Zend/tests/temporary_cleaning_007.phpt
new file mode 100644
index 0000000000..0e29ed6c33
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_007.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Exception inside a foreach loop with return
+--FILE--
+<?php
+class saboteurTestController {
+ public function isConsistent() { throw new \Exception(); }
+}
+
+$controllers = array(new saboteurTestController(),new saboteurTestController());
+foreach ($controllers as $controller) {
+ try {
+ if ($controller->isConsistent()) {
+ return $controller;
+ }
+ } catch (\Exception $e) {
+ echo "Exception\n";
+ }
+}
+?>
+--EXPECT--
+Exception
+Exception
diff --git a/Zend/tests/catch_002.phpt b/Zend/tests/try/catch_002.phpt
index 11d736abe2..11d736abe2 100644
--- a/Zend/tests/catch_002.phpt
+++ b/Zend/tests/try/catch_002.phpt
diff --git a/Zend/tests/catch_003.phpt b/Zend/tests/try/catch_003.phpt
index 414d50f815..414d50f815 100644
--- a/Zend/tests/catch_003.phpt
+++ b/Zend/tests/try/catch_003.phpt
diff --git a/Zend/tests/catch_004.phpt b/Zend/tests/try/catch_004.phpt
index 54920b8947..54920b8947 100644
--- a/Zend/tests/catch_004.phpt
+++ b/Zend/tests/try/catch_004.phpt
diff --git a/Zend/tests/catch_finally_001.phpt b/Zend/tests/try/catch_finally_001.phpt
index 0c3f597a0a..0c3f597a0a 100644
--- a/Zend/tests/catch_finally_001.phpt
+++ b/Zend/tests/try/catch_finally_001.phpt
diff --git a/Zend/tests/catch_finally_002.phpt b/Zend/tests/try/catch_finally_002.phpt
index c54477ff8c..c54477ff8c 100644
--- a/Zend/tests/catch_finally_002.phpt
+++ b/Zend/tests/try/catch_finally_002.phpt
diff --git a/Zend/tests/catch_finally_003.phpt b/Zend/tests/try/catch_finally_003.phpt
index 24e468d335..24e468d335 100644
--- a/Zend/tests/catch_finally_003.phpt
+++ b/Zend/tests/try/catch_finally_003.phpt
diff --git a/Zend/tests/catch_finally_004.phpt b/Zend/tests/try/catch_finally_004.phpt
index a2c22beab1..a2c22beab1 100644
--- a/Zend/tests/catch_finally_004.phpt
+++ b/Zend/tests/try/catch_finally_004.phpt
diff --git a/Zend/tests/catch_finally_005.phpt b/Zend/tests/try/catch_finally_005.phpt
index c2fd55df27..c2fd55df27 100644
--- a/Zend/tests/catch_finally_005.phpt
+++ b/Zend/tests/try/catch_finally_005.phpt
diff --git a/Zend/tests/catch_finally_006.phpt b/Zend/tests/try/catch_finally_006.phpt
index 216219b6a5..216219b6a5 100644
--- a/Zend/tests/catch_finally_006.phpt
+++ b/Zend/tests/try/catch_finally_006.phpt
diff --git a/Zend/tests/finally_goto_001.phpt b/Zend/tests/try/finally_goto_001.phpt
index 990f78d4c7..990f78d4c7 100644
--- a/Zend/tests/finally_goto_001.phpt
+++ b/Zend/tests/try/finally_goto_001.phpt
diff --git a/Zend/tests/finally_goto_002.phpt b/Zend/tests/try/finally_goto_002.phpt
index a6bd9e307f..a6bd9e307f 100644
--- a/Zend/tests/finally_goto_002.phpt
+++ b/Zend/tests/try/finally_goto_002.phpt
diff --git a/Zend/tests/finally_goto_003.phpt b/Zend/tests/try/finally_goto_003.phpt
index 8529ff7865..8529ff7865 100644
--- a/Zend/tests/finally_goto_003.phpt
+++ b/Zend/tests/try/finally_goto_003.phpt
diff --git a/Zend/tests/finally_goto_004.phpt b/Zend/tests/try/finally_goto_004.phpt
index d88ceedf52..d88ceedf52 100644
--- a/Zend/tests/finally_goto_004.phpt
+++ b/Zend/tests/try/finally_goto_004.phpt
diff --git a/Zend/tests/try/finally_goto_005.phpt b/Zend/tests/try/finally_goto_005.phpt
new file mode 100644
index 0000000000..36b4155d81
--- /dev/null
+++ b/Zend/tests/try/finally_goto_005.phpt
@@ -0,0 +1,15 @@
+--TEST--
+There must be a difference between label: try { ... } and try { label: ... }
+--FILE--
+<?php
+
+label: try {
+ goto label;
+} finally {
+ print "success";
+ return; // don't loop
+}
+
+?>
+--EXPECT--
+success
diff --git a/Zend/tests/try_catch_finally_001.phpt b/Zend/tests/try/try_catch_finally_001.phpt
index 3d478f461a..3d478f461a 100644
--- a/Zend/tests/try_catch_finally_001.phpt
+++ b/Zend/tests/try/try_catch_finally_001.phpt
diff --git a/Zend/tests/try_catch_finally_002.phpt b/Zend/tests/try/try_catch_finally_002.phpt
index 79efcb3de8..79efcb3de8 100644
--- a/Zend/tests/try_catch_finally_002.phpt
+++ b/Zend/tests/try/try_catch_finally_002.phpt
diff --git a/Zend/tests/try_catch_finally_003.phpt b/Zend/tests/try/try_catch_finally_003.phpt
index 7ec8ec82db..7ec8ec82db 100644
--- a/Zend/tests/try_catch_finally_003.phpt
+++ b/Zend/tests/try/try_catch_finally_003.phpt
diff --git a/Zend/tests/try_catch_finally_004.phpt b/Zend/tests/try/try_catch_finally_004.phpt
index eb8d0966a1..eb8d0966a1 100644
--- a/Zend/tests/try_catch_finally_004.phpt
+++ b/Zend/tests/try/try_catch_finally_004.phpt
diff --git a/Zend/tests/try_catch_finally_005.phpt b/Zend/tests/try/try_catch_finally_005.phpt
index dafeb6bbe0..dafeb6bbe0 100644
--- a/Zend/tests/try_catch_finally_005.phpt
+++ b/Zend/tests/try/try_catch_finally_005.phpt
diff --git a/Zend/tests/try_catch_finally_006.phpt b/Zend/tests/try/try_catch_finally_006.phpt
index dab6af6a58..dab6af6a58 100644
--- a/Zend/tests/try_catch_finally_006.phpt
+++ b/Zend/tests/try/try_catch_finally_006.phpt
diff --git a/Zend/tests/try_catch_finally_007.phpt b/Zend/tests/try/try_catch_finally_007.phpt
index ad33c68131..ad33c68131 100644
--- a/Zend/tests/try_catch_finally_007.phpt
+++ b/Zend/tests/try/try_catch_finally_007.phpt
diff --git a/Zend/tests/try_finally_001.phpt b/Zend/tests/try/try_finally_001.phpt
index 33744d064c..33744d064c 100644
--- a/Zend/tests/try_finally_001.phpt
+++ b/Zend/tests/try/try_finally_001.phpt
diff --git a/Zend/tests/try_finally_002.phpt b/Zend/tests/try/try_finally_002.phpt
index 99a34f62fb..99a34f62fb 100644
--- a/Zend/tests/try_finally_002.phpt
+++ b/Zend/tests/try/try_finally_002.phpt
diff --git a/Zend/tests/try_finally_003.phpt b/Zend/tests/try/try_finally_003.phpt
index b0fee7c6d7..b0fee7c6d7 100644
--- a/Zend/tests/try_finally_003.phpt
+++ b/Zend/tests/try/try_finally_003.phpt
diff --git a/Zend/tests/try_finally_004.phpt b/Zend/tests/try/try_finally_004.phpt
index 08930a40c5..08930a40c5 100644
--- a/Zend/tests/try_finally_004.phpt
+++ b/Zend/tests/try/try_finally_004.phpt
diff --git a/Zend/tests/try_finally_005.phpt b/Zend/tests/try/try_finally_005.phpt
index 8664d6b1bf..8664d6b1bf 100644
--- a/Zend/tests/try_finally_005.phpt
+++ b/Zend/tests/try/try_finally_005.phpt
diff --git a/Zend/tests/try_finally_006.phpt b/Zend/tests/try/try_finally_006.phpt
index f53e6b5bc1..f53e6b5bc1 100644
--- a/Zend/tests/try_finally_006.phpt
+++ b/Zend/tests/try/try_finally_006.phpt
diff --git a/Zend/tests/try_finally_007.phpt b/Zend/tests/try/try_finally_007.phpt
index 634937495c..634937495c 100644
--- a/Zend/tests/try_finally_007.phpt
+++ b/Zend/tests/try/try_finally_007.phpt
diff --git a/Zend/tests/try_finally_008.phpt b/Zend/tests/try/try_finally_008.phpt
index cee37aedab..cee37aedab 100644
--- a/Zend/tests/try_finally_008.phpt
+++ b/Zend/tests/try/try_finally_008.phpt
diff --git a/Zend/tests/try_finally_009.phpt b/Zend/tests/try/try_finally_009.phpt
index b29930a75e..b29930a75e 100644
--- a/Zend/tests/try_finally_009.phpt
+++ b/Zend/tests/try/try_finally_009.phpt
diff --git a/Zend/tests/try_finally_010.phpt b/Zend/tests/try/try_finally_010.phpt
index 91eb7821ee..91eb7821ee 100644
--- a/Zend/tests/try_finally_010.phpt
+++ b/Zend/tests/try/try_finally_010.phpt
diff --git a/Zend/tests/try_finally_011.phpt b/Zend/tests/try/try_finally_011.phpt
index 8a9dc62ca4..8a9dc62ca4 100644
--- a/Zend/tests/try_finally_011.phpt
+++ b/Zend/tests/try/try_finally_011.phpt
diff --git a/Zend/tests/try/try_finally_012.phpt b/Zend/tests/try/try_finally_012.phpt
new file mode 100644
index 0000000000..32fec7ab29
--- /dev/null
+++ b/Zend/tests/try/try_finally_012.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Try finally (exception in "return" statement)
+--FILE--
+<?php
+class A {
+ public $x = 1;
+ public $y = 2;
+ function __destruct() {
+ throw new Exception();
+ }
+}
+function foo() {
+ foreach(new A() as $a) {
+ try {
+ return $a;
+ } catch (Exception $e) {
+ echo "exception in foo\n";
+ } finally {
+ echo "finally\n";
+ }
+ }
+}
+try {
+ foo();
+} catch (Exception $e) {
+ echo "exception in main\n";
+}
+?>
+--EXPECT--
+finally
+exception in main
+
diff --git a/Zend/zend.c b/Zend/zend.c
index e5fd2e8bee..168658655c 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -882,7 +882,7 @@ void zenderror(const char *error) /* {{{ */
return;
}
- zend_throw_exception(zend_ce_parse_error, error, E_PARSE);
+ zend_throw_exception(zend_ce_parse_error, error, 0);
}
/* }}} */
@@ -1328,7 +1328,7 @@ ZEND_API void zend_type_error(const char *format, ...) /* {{{ */
va_start(va, format);
zend_vspprintf(&message, 0, format, va);
- zend_throw_exception(zend_ce_type_error, message, E_ERROR);
+ zend_throw_exception(zend_ce_type_error, message, 0);
efree(message);
va_end(va);
} /* }}} */
@@ -1341,7 +1341,7 @@ ZEND_API void zend_internal_type_error(zend_bool throw_exception, const char *fo
va_start(va, format);
zend_vspprintf(&message, 0, format, va);
if (throw_exception) {
- zend_throw_exception(zend_ce_type_error, message, E_ERROR);
+ zend_throw_exception(zend_ce_type_error, message, 0);
} else {
zend_error(E_WARNING, message);
}
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index c84ab13792..d8e560c844 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -3923,7 +3923,7 @@ ZEND_API int zend_update_static_property(zend_class_entry *scope, const char *na
if (Z_ISREF_P(property)) {
zval_dtor(property);
ZVAL_COPY_VALUE(property, value);
- if (Z_REFCOUNT_P(value) > 0) {
+ if (Z_REFCOUNTED_P(value) && Z_REFCOUNT_P(value) > 0) {
zval_opt_copy_ctor(property);
}
} else {
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index 58e19c1d39..f0a3b2021e 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -2443,6 +2443,20 @@ ZEND_API zend_mm_heap *zend_mm_set_heap(zend_mm_heap *new_heap)
return (zend_mm_heap*)old_heap;
}
+ZEND_API zend_mm_heap *zend_mm_get_heap(void)
+{
+ return AG(mm_heap);
+}
+
+ZEND_API int zend_mm_is_custom_heap(zend_mm_heap *new_heap)
+{
+#if ZEND_MM_CUSTOM
+ return AG(mm_heap)->use_custom_heap;
+#else
+ return 0;
+#endif
+}
+
ZEND_API void zend_mm_set_custom_handlers(zend_mm_heap *heap,
void* (*_malloc)(size_t),
void (*_free)(void*),
diff --git a/Zend/zend_alloc.h b/Zend/zend_alloc.h
index 6c12b4247d..eebddca0c9 100644
--- a/Zend/zend_alloc.h
+++ b/Zend/zend_alloc.h
@@ -280,7 +280,9 @@ ZEND_API size_t ZEND_FASTCALL _zend_mm_block_size(zend_mm_heap *heap, void *p ZE
#define zend_mm_block_size_rel(heap, p) _zend_mm_block_size((heap), (p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
ZEND_API zend_mm_heap *zend_mm_set_heap(zend_mm_heap *new_heap);
+ZEND_API zend_mm_heap *zend_mm_get_heap(void);
+ZEND_API int zend_mm_is_custom_heap(zend_mm_heap *new_heap);
ZEND_API void zend_mm_set_custom_handlers(zend_mm_heap *heap,
void* (*_malloc)(size_t),
void (*_free)(void*),
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index 714a1443b0..d36ce0b2ad 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -783,6 +783,10 @@ static void zend_ast_export_var_list(smart_str *str, zend_ast_list *list, int in
static void zend_ast_export_stmt(smart_str *str, zend_ast *ast, int indent)
{
+ if (!ast) {
+ return;
+ }
+
if (ast->kind == ZEND_AST_STMT_LIST ||
ast->kind == ZEND_AST_TRAIT_ADAPTATIONS) {
zend_ast_list *list = (zend_ast_list*)ast;
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 78266f6172..91175af6b3 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -1598,6 +1598,10 @@ int zendlex(zend_parser_stack_elem *elem) /* {{{ */
again:
ZVAL_UNDEF(&zv);
retval = lex_scan(&zv);
+ if (EG(exception)) {
+ return T_ERROR;
+ }
+
switch (retval) {
case T_COMMENT:
case T_DOC_COMMENT:
@@ -2749,7 +2753,8 @@ uint32_t zend_compile_args(zend_ast *ast, zend_function *fbc) /* {{{ */
}
} else {
zend_compile_expr(&arg_node, arg);
- if (arg_node.op_type & (IS_VAR|IS_CV)) {
+ ZEND_ASSERT(arg_node.op_type != IS_CV);
+ if (arg_node.op_type == IS_VAR) {
opcode = ZEND_SEND_VAR_NO_REF;
if (fbc && ARG_MUST_BE_SENT_BY_REF(fbc, arg_num)) {
flags |= ZEND_ARG_SEND_BY_REF;
@@ -3509,9 +3514,20 @@ void zend_compile_unset(zend_ast *ast) /* {{{ */
}
/* }}} */
-static void zend_free_foreach_and_switch_variables(void) /* {{{ */
+static void zend_free_foreach_and_switch_variables(uint32_t flags) /* {{{ */
{
+ uint32_t start_op_number = get_next_op_number(CG(active_op_array));
+
zend_stack_apply(&CG(loop_var_stack), ZEND_STACK_APPLY_TOPDOWN, (int (*)(void *element)) generate_free_loop_var);
+
+ if (flags) {
+ uint32_t end_op_number = get_next_op_number(CG(active_op_array));
+
+ while (start_op_number < end_op_number) {
+ CG(active_op_array)->opcodes[start_op_number].extended_value |= flags;
+ start_op_number++;
+ }
+ }
}
/* }}} */
@@ -3533,7 +3549,7 @@ void zend_compile_return(zend_ast *ast) /* {{{ */
zend_compile_expr(&expr_node, expr_ast);
}
- zend_free_foreach_and_switch_variables();
+ zend_free_foreach_and_switch_variables(ZEND_FREE_ON_RETURN);
if (CG(context).in_finally) {
opline = zend_emit_op(NULL, ZEND_DISCARD_EXCEPTION, NULL, NULL);
@@ -3636,6 +3652,118 @@ void zend_compile_break_continue(zend_ast *ast) /* {{{ */
}
/* }}} */
+void zend_resolve_goto_label(zend_op_array *op_array, znode *label_node, zend_op *pass2_opline) /* {{{ */
+{
+ zend_label *dest;
+ int current, distance, free_vars;
+ zval *label;
+ znode *loop_var = NULL;
+
+ if (pass2_opline) {
+ label = RT_CONSTANT(op_array, pass2_opline->op2);
+ } else {
+ label = &label_node->u.constant;
+ }
+ if (CG(context).labels == NULL ||
+ (dest = zend_hash_find_ptr(CG(context).labels, Z_STR_P(label))) == NULL) {
+
+ if (pass2_opline) {
+ CG(in_compilation) = 1;
+ CG(active_op_array) = op_array;
+ CG(zend_lineno) = pass2_opline->lineno;
+ zend_error_noreturn(E_COMPILE_ERROR, "'goto' to undefined label '%s'", Z_STRVAL_P(label));
+ } else {
+ /* Label is not defined. Delay to pass 2. */
+ zend_op *opline;
+
+ current = CG(context).current_brk_cont;
+ while (current != -1) {
+ if (op_array->brk_cont_array[current].start >= 0) {
+ zend_emit_op(NULL, ZEND_NOP, NULL, NULL);
+ }
+ current = op_array->brk_cont_array[current].parent;
+ }
+ opline = zend_emit_op(NULL, ZEND_GOTO, NULL, label_node);
+ opline->extended_value = CG(context).current_brk_cont;
+ return;
+ }
+ }
+
+ zval_dtor(label);
+ ZVAL_NULL(label);
+
+ /* Check that we are not moving into loop or switch */
+ if (pass2_opline) {
+ current = pass2_opline->extended_value;
+ } else {
+ current = CG(context).current_brk_cont;
+ }
+ if (!pass2_opline) {
+ loop_var = zend_stack_top(&CG(loop_var_stack));
+ }
+ for (distance = 0, free_vars = 0; current != dest->brk_cont; distance++) {
+ if (current == -1) {
+ if (pass2_opline) {
+ CG(in_compilation) = 1;
+ CG(active_op_array) = op_array;
+ CG(zend_lineno) = pass2_opline->lineno;
+ }
+ zend_error_noreturn(E_COMPILE_ERROR, "'goto' into loop or switch statement is disallowed");
+ }
+ if (op_array->brk_cont_array[current].start >= 0) {
+ if (pass2_opline) {
+ free_vars++;
+ } else {
+ generate_free_loop_var(loop_var);
+ loop_var--;
+ }
+ }
+ current = op_array->brk_cont_array[current].parent;
+ }
+
+ if (pass2_opline) {
+ if (free_vars) {
+ current = pass2_opline->extended_value;
+ while (current != dest->brk_cont) {
+ if (op_array->brk_cont_array[current].start >= 0) {
+ zend_op *brk_opline = &op_array->opcodes[op_array->brk_cont_array[current].brk];
+
+ if (brk_opline->opcode == ZEND_FREE) {
+ (pass2_opline - free_vars)->opcode = ZEND_FREE;
+ (pass2_opline - free_vars)->op1_type = brk_opline->op1_type;
+ if (op_array->fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK) {
+ (pass2_opline - free_vars)->op1.var = brk_opline->op1.var;
+ } else {
+ (pass2_opline - free_vars)->op1.var = (uint32_t)(zend_intptr_t)ZEND_CALL_VAR_NUM(NULL, op_array->last_var + brk_opline->op1.var);
+ ZEND_VM_SET_OPCODE_HANDLER(pass2_opline - free_vars);
+ }
+ free_vars--;
+ } else if (brk_opline->opcode == ZEND_FE_FREE) {
+ (pass2_opline - free_vars)->opcode = ZEND_FE_FREE;
+ (pass2_opline - free_vars)->op1_type = brk_opline->op1_type;
+ if (op_array->fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK) {
+ (pass2_opline - free_vars)->op1.var = brk_opline->op1.var;
+ } else {
+ (pass2_opline - free_vars)->op1.var = (uint32_t)(zend_intptr_t)ZEND_CALL_VAR_NUM(NULL, op_array->last_var + brk_opline->op1.var);
+ ZEND_VM_SET_OPCODE_HANDLER(pass2_opline - free_vars);
+ }
+ free_vars--;
+ }
+ }
+ current = op_array->brk_cont_array[current].parent;
+ }
+ }
+ pass2_opline->opcode = ZEND_JMP;
+ pass2_opline->op1.opline_num = dest->opline_num;
+ SET_UNUSED(pass2_opline->op2);
+ pass2_opline->extended_value = 0;
+ } else {
+ zend_op *opline = zend_emit_op(NULL, ZEND_JMP, NULL, NULL);
+ opline->op1.opline_num = dest->opline_num;
+ }
+}
+/* }}} */
+
void zend_compile_goto(zend_ast *ast) /* {{{ */
{
zend_ast *label_ast = ast->child[0];
@@ -3989,14 +4117,26 @@ void zend_compile_try(zend_ast *ast) /* {{{ */
uint32_t i;
zend_op *opline;
- uint32_t try_catch_offset = zend_add_try_element(
- get_next_op_number(CG(active_op_array)));
+ uint32_t try_catch_offset;
uint32_t *jmp_opnums = safe_emalloc(sizeof(uint32_t), catches->children, 0);
if (catches->children == 0 && !finally_ast) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use try without catch or finally");
}
+ /* label: try { } must not be equal to try { label: } */
+ if (CG(context).labels) {
+ zend_label *label;
+ ZEND_HASH_REVERSE_FOREACH_PTR(CG(context).labels, label) {
+ if (label->opline_num == get_next_op_number(CG(active_op_array))) {
+ zend_emit_op(NULL, ZEND_NOP, NULL, NULL);
+ }
+ break;
+ } ZEND_HASH_FOREACH_END();
+ }
+
+ try_catch_offset = zend_add_try_element(get_next_op_number(CG(active_op_array)));
+
zend_compile_stmt(try_ast);
if (catches->children != 0) {
@@ -4710,6 +4850,7 @@ void zend_compile_func_decl(znode *result, zend_ast *ast) /* {{{ */
zend_bool is_method = decl->kind == ZEND_AST_METHOD;
zend_op_array *orig_op_array = CG(active_op_array);
+ zend_class_entry *orig_ce = CG(active_class_entry);
zend_op_array *op_array = zend_arena_alloc(&CG(arena), sizeof(zend_op_array));
zend_oparray_context orig_oparray_context;
@@ -4734,6 +4875,11 @@ void zend_compile_func_decl(znode *result, zend_ast *ast) /* {{{ */
}
CG(active_op_array) = op_array;
+
+ if (!is_method) {
+ CG(active_class_entry) = NULL;
+ }
+
zend_oparray_context_begin(&orig_oparray_context);
if (CG(compiler_options) & ZEND_COMPILE_EXTENDED_INFO) {
@@ -4769,6 +4915,7 @@ void zend_compile_func_decl(znode *result, zend_ast *ast) /* {{{ */
/* Pop the loop variable stack separator */
zend_stack_del_top(&CG(loop_var_stack));
+ CG(active_class_entry) = orig_ce;
CG(active_op_array) = orig_op_array;
}
/* }}} */
@@ -5577,9 +5724,9 @@ static zend_bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */
if (strcmp(ZSTR_VAL(dirname), ".") == 0) {
dirname = zend_string_extend(dirname, MAXPATHLEN, 0);
#if HAVE_GETCWD
- VCWD_GETCWD(ZSTR_VAL(dirname), MAXPATHLEN);
+ ZEND_IGNORE_VALUE(VCWD_GETCWD(ZSTR_VAL(dirname), MAXPATHLEN));
#elif HAVE_GETWD
- VCWD_GETWD(ZSTR_VAL(dirname));
+ ZEND_IGNORE_VALUE(VCWD_GETWD(ZSTR_VAL(dirname)));
#endif
}
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index a3bc17f425..74a72f5c84 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -875,7 +875,9 @@ ZEND_API void zend_assert_valid_class_name(const zend_string *const_name);
#define ZEND_FETCH_ARG_MASK 0x000fffff
-#define ZEND_MEMBER_FUNC_CALL 1<<0
+#define ZEND_FREE_ON_RETURN (1<<0)
+
+#define ZEND_MEMBER_FUNC_CALL (1<<0)
#define ZEND_ARG_SEND_BY_REF (1<<0)
#define ZEND_ARG_COMPILE_TIME_BOUND (1<<1)
@@ -951,7 +953,8 @@ static zend_always_inline int zend_check_arg_send_type(const zend_function *zf,
#define ZEND_ARRAY_SIZE_SHIFT 2
/* Pseudo-opcodes that are used only temporarily during compilation */
-#define ZEND_BRK 254
+#define ZEND_GOTO 253
+#define ZEND_BRK 254
#define ZEND_CONT 255
diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c
index 1c35281177..5d6cc59259 100644
--- a/Zend/zend_exceptions.c
+++ b/Zend/zend_exceptions.c
@@ -965,9 +965,8 @@ ZEND_API void zend_exception_error(zend_object *ex, int severity) /* {{{ */
zend_string *message = zval_get_string(GET_PROPERTY(&exception, "message"));
zend_string *file = zval_get_string(GET_PROPERTY_SILENT(&exception, "file"));
zend_long line = zval_get_long(GET_PROPERTY_SILENT(&exception, "line"));
- zend_long code = zval_get_long(GET_PROPERTY_SILENT(&exception, "code"));
- zend_error_helper(code? code : E_ERROR, ZSTR_VAL(file), line, "%s", ZSTR_VAL(message));
+ zend_error_helper(E_PARSE, ZSTR_VAL(file), line, "%s", ZSTR_VAL(message));
zend_string_release(file);
zend_string_release(message);
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 50af005c22..2d1bd5e3d0 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -88,18 +88,17 @@ static const zend_internal_function zend_pass_function = {
#undef zval_ptr_dtor
#define zval_ptr_dtor(zv) i_zval_ptr_dtor(zv ZEND_FILE_LINE_CC)
-#define PZVAL_LOCK(z) if (Z_REFCOUNTED_P(z)) Z_ADDREF_P((z))
-#define SELECTIVE_PZVAL_LOCK(pzv, opline) if (RETURN_VALUE_USED(opline)) { PZVAL_LOCK(pzv); }
-
#define READY_TO_DESTROY(zv) \
(zv && Z_REFCOUNTED_P(zv) && Z_REFCOUNT_P(zv) == 1)
-#define EXTRACT_ZVAL_PTR(zv) do { \
- zval *__zv = (zv); \
- if (Z_TYPE_P(__zv) == IS_INDIRECT) { \
- ZVAL_COPY(__zv, Z_INDIRECT_P(__zv)); \
- } \
- } while (0)
+#define EXTRACT_ZVAL_PTR(zv, check_null) do { \
+ zval *__zv = (zv); \
+ if (Z_TYPE_P(__zv) == IS_INDIRECT) { \
+ if (!(check_null) || Z_INDIRECT_P(__zv)) { \
+ ZVAL_COPY(__zv, Z_INDIRECT_P(__zv)); \
+ } \
+ } \
+} while (0)
#define FREE_OP(should_free) \
if (should_free) { \
@@ -1110,6 +1109,12 @@ fast_assign:
}
} else {
if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_REFCOUNT(zobj->properties)--;
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
if (property) {
goto fast_assign;
@@ -2563,11 +2568,21 @@ void zend_cleanup_unfinished_execution(zend_execute_data *execute_data, uint32_t
# endif
#endif
-#define ZEND_VM_NEXT_OPCODE() \
+#define ZEND_VM_NEXT_OPCODE_EX(check_exception, skip) \
CHECK_SYMBOL_TABLES() \
- ZEND_VM_INC_OPCODE(); \
+ if (check_exception) { \
+ OPLINE = EX(opline) + (skip); \
+ } else { \
+ OPLINE = opline + (skip); \
+ } \
ZEND_VM_CONTINUE()
+#define ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION() \
+ ZEND_VM_NEXT_OPCODE_EX(1, 1)
+
+#define ZEND_VM_NEXT_OPCODE() \
+ ZEND_VM_NEXT_OPCODE_EX(0, 1)
+
#define ZEND_VM_SET_NEXT_OPCODE(new_op) \
CHECK_SYMBOL_TABLES() \
OPLINE = new_op
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index 64e7407f12..c794c969c0 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -821,7 +821,13 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
do {
dst--;
src--;
- ZVAL_MAKE_REF(src);
+ if (parent_ce->type == ZEND_INTERNAL_CLASS) {
+ if (!Z_ISREF_P(src)) {
+ ZVAL_NEW_PERSISTENT_REF(src, src);
+ }
+ } else {
+ ZVAL_MAKE_REF(src);
+ }
ZVAL_COPY_VALUE(dst, src);
Z_ADDREF_P(dst);
if (Z_CONSTANT_P(Z_REFVAL_P(dst))) {
@@ -831,6 +837,8 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
ce->default_static_members_count += parent_ce->default_static_members_count;
if (ce->type == ZEND_USER_CLASS) {
ce->static_members_table = ce->default_static_members_table;
+ } else {
+ ce->ce_flags &= ~ZEND_ACC_CONSTANTS_UPDATED;
}
}
@@ -1192,7 +1200,8 @@ static int zend_traits_copy_functions(zend_string *fnname, zend_function *fn, ze
if (exclude_table == NULL || zend_hash_find(exclude_table, fnname) == NULL) {
/* is not in hashtable, thus, function is not to be excluded */
- fn_copy = *fn;
+ /* And how about ZEND_OVERLOADED_FUNCTION? */
+ memcpy(&fn_copy, fn, fn->type == ZEND_USER_FUNCTION? sizeof(zend_op_array) : sizeof(zend_internal_function));
/* apply aliases which have not alias name, just setting visibility */
if (ce->trait_aliases) {
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index 6bfe1dd7b3..a73cf88356 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -1011,8 +1011,9 @@ static int zend_scan_escape_string(zval *zendlval, char *str, int len, char quot
if (!valid) {
zend_throw_exception(zend_ce_parse_error,
- "Invalid UTF-8 codepoint escape sequence", E_PARSE);
+ "Invalid UTF-8 codepoint escape sequence", 0);
zval_ptr_dtor(zendlval);
+ ZVAL_UNDEF(zendlval);
return FAILURE;
}
@@ -1022,8 +1023,9 @@ static int zend_scan_escape_string(zval *zendlval, char *str, int len, char quot
/* per RFC 3629, UTF-8 can only represent 21 bits */
if (codepoint > 0x10FFFF || errno) {
zend_throw_exception(zend_ce_parse_error,
- "Invalid UTF-8 codepoint escape sequence: Codepoint too large", E_PARSE);
+ "Invalid UTF-8 codepoint escape sequence: Codepoint too large", 0);
zval_ptr_dtor(zendlval);
+ ZVAL_UNDEF(zendlval);
return FAILURE;
}
@@ -1115,7 +1117,7 @@ restart:
SCNG(yy_text) = YYCURSOR;
-#line 1119 "Zend/zend_language_scanner.c"
+#line 1121 "Zend/zend_language_scanner.c"
{
YYCTYPE yych;
unsigned int yyaccept = 0;
@@ -1169,7 +1171,7 @@ yyc_INITIAL:
yy3:
YYDEBUG(3, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1807 "Zend/zend_language_scanner.l"
+#line 1812 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
RETURN_TOKEN(END);
@@ -1214,7 +1216,7 @@ inline_char_handler:
HANDLE_NEWLINES(yytext, yyleng);
RETURN_TOKEN(T_INLINE_HTML);
}
-#line 1218 "Zend/zend_language_scanner.c"
+#line 1220 "Zend/zend_language_scanner.c"
yy4:
YYDEBUG(4, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1232,7 +1234,7 @@ yy5:
yy6:
YYDEBUG(6, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1798 "Zend/zend_language_scanner.l"
+#line 1803 "Zend/zend_language_scanner.l"
{
if (CG(short_tags)) {
BEGIN(ST_IN_SCRIPTING);
@@ -1241,18 +1243,18 @@ yy6:
goto inline_char_handler;
}
}
-#line 1245 "Zend/zend_language_scanner.c"
+#line 1247 "Zend/zend_language_scanner.c"
yy7:
YYDEBUG(7, *YYCURSOR);
++YYCURSOR;
YYDEBUG(8, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1785 "Zend/zend_language_scanner.l"
+#line 1790 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
RETURN_TOKEN(T_OPEN_TAG_WITH_ECHO);
}
-#line 1256 "Zend/zend_language_scanner.c"
+#line 1258 "Zend/zend_language_scanner.c"
yy9:
YYDEBUG(9, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1283,13 +1285,13 @@ yy13:
yy14:
YYDEBUG(14, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1791 "Zend/zend_language_scanner.l"
+#line 1796 "Zend/zend_language_scanner.l"
{
HANDLE_NEWLINE(yytext[yyleng-1]);
BEGIN(ST_IN_SCRIPTING);
RETURN_TOKEN(T_OPEN_TAG);
}
-#line 1293 "Zend/zend_language_scanner.c"
+#line 1295 "Zend/zend_language_scanner.c"
yy15:
YYDEBUG(15, *YYCURSOR);
++YYCURSOR;
@@ -1359,7 +1361,7 @@ yyc_ST_BACKQUOTE:
yy19:
YYDEBUG(19, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2221 "Zend/zend_language_scanner.l"
+#line 2222 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
RETURN_TOKEN(END);
@@ -1397,9 +1399,7 @@ yy19:
yyleng = YYCURSOR - SCNG(yy_text);
- if (zend_scan_escape_string(zendlval, yytext, yyleng, '`') == FAILURE) {
- RETURN_TOKEN(T_ERROR);
- }
+ zend_scan_escape_string(zendlval, yytext, yyleng, '`');
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
#line 1406 "Zend/zend_language_scanner.c"
@@ -1413,7 +1413,7 @@ yy21:
++YYCURSOR;
YYDEBUG(22, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2163 "Zend/zend_language_scanner.l"
+#line 2166 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
RETURN_TOKEN('`');
@@ -1428,7 +1428,7 @@ yy24:
++YYCURSOR;
YYDEBUG(25, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2150 "Zend/zend_language_scanner.l"
+#line 2153 "Zend/zend_language_scanner.l"
{
Z_LVAL_P(zendlval) = (zend_long) '{';
yy_push_state(ST_IN_SCRIPTING);
@@ -1451,7 +1451,7 @@ yy26:
yy28:
YYDEBUG(28, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1872 "Zend/zend_language_scanner.l"
+#line 1877 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
@@ -1462,7 +1462,7 @@ yy29:
++YYCURSOR;
YYDEBUG(30, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1593 "Zend/zend_language_scanner.l"
+#line 1595 "Zend/zend_language_scanner.l"
{
yy_push_state(ST_LOOKING_FOR_VARNAME);
RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
@@ -1481,7 +1481,7 @@ yy33:
++YYCURSOR;
YYDEBUG(34, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1865 "Zend/zend_language_scanner.l"
+#line 1870 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 1);
yy_push_state(ST_VAR_OFFSET);
@@ -1506,7 +1506,7 @@ yy36:
++YYCURSOR;
YYDEBUG(37, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1856 "Zend/zend_language_scanner.l"
+#line 1861 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 3);
yy_push_state(ST_LOOKING_FOR_PROPERTY);
@@ -1581,7 +1581,7 @@ yy40:
yy41:
YYDEBUG(41, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2169 "Zend/zend_language_scanner.l"
+#line 2172 "Zend/zend_language_scanner.l"
{
if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1627,12 +1627,10 @@ yy41:
double_quotes_scan_done:
yyleng = YYCURSOR - SCNG(yy_text);
- if (zend_scan_escape_string(zendlval, yytext, yyleng, '"') == FAILURE) {
- RETURN_TOKEN(T_ERROR);
- }
+ zend_scan_escape_string(zendlval, yytext, yyleng, '"');
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
-#line 1636 "Zend/zend_language_scanner.c"
+#line 1634 "Zend/zend_language_scanner.c"
yy42:
YYDEBUG(42, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1643,12 +1641,12 @@ yy43:
++YYCURSOR;
YYDEBUG(44, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2158 "Zend/zend_language_scanner.l"
+#line 2161 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
RETURN_TOKEN('"');
}
-#line 1652 "Zend/zend_language_scanner.c"
+#line 1650 "Zend/zend_language_scanner.c"
yy45:
YYDEBUG(45, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1658,14 +1656,14 @@ yy46:
++YYCURSOR;
YYDEBUG(47, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2150 "Zend/zend_language_scanner.l"
+#line 2153 "Zend/zend_language_scanner.l"
{
Z_LVAL_P(zendlval) = (zend_long) '{';
yy_push_state(ST_IN_SCRIPTING);
yyless(1);
RETURN_TOKEN(T_CURLY_OPEN);
}
-#line 1669 "Zend/zend_language_scanner.c"
+#line 1667 "Zend/zend_language_scanner.c"
yy48:
YYDEBUG(48, *YYCURSOR);
yyaccept = 0;
@@ -1681,23 +1679,23 @@ yy48:
yy50:
YYDEBUG(50, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1872 "Zend/zend_language_scanner.l"
+#line 1877 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
}
-#line 1690 "Zend/zend_language_scanner.c"
+#line 1688 "Zend/zend_language_scanner.c"
yy51:
YYDEBUG(51, *YYCURSOR);
++YYCURSOR;
YYDEBUG(52, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1593 "Zend/zend_language_scanner.l"
+#line 1595 "Zend/zend_language_scanner.l"
{
yy_push_state(ST_LOOKING_FOR_VARNAME);
RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
}
-#line 1701 "Zend/zend_language_scanner.c"
+#line 1699 "Zend/zend_language_scanner.c"
yy53:
YYDEBUG(53, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1711,14 +1709,14 @@ yy55:
++YYCURSOR;
YYDEBUG(56, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1865 "Zend/zend_language_scanner.l"
+#line 1870 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 1);
yy_push_state(ST_VAR_OFFSET);
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
}
-#line 1722 "Zend/zend_language_scanner.c"
+#line 1720 "Zend/zend_language_scanner.c"
yy57:
YYDEBUG(57, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1736,14 +1734,14 @@ yy58:
++YYCURSOR;
YYDEBUG(59, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1856 "Zend/zend_language_scanner.l"
+#line 1861 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 3);
yy_push_state(ST_LOOKING_FOR_PROPERTY);
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
}
-#line 1747 "Zend/zend_language_scanner.c"
+#line 1745 "Zend/zend_language_scanner.c"
}
/* *********************************** */
yyc_ST_END_HEREDOC:
@@ -1754,7 +1752,7 @@ yyc_ST_END_HEREDOC:
++YYCURSOR;
YYDEBUG(63, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2136 "Zend/zend_language_scanner.l"
+#line 2139 "Zend/zend_language_scanner.l"
{
zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
@@ -1767,7 +1765,7 @@ yyc_ST_END_HEREDOC:
BEGIN(ST_IN_SCRIPTING);
RETURN_TOKEN(T_END_HEREDOC);
}
-#line 1771 "Zend/zend_language_scanner.c"
+#line 1769 "Zend/zend_language_scanner.c"
/* *********************************** */
yyc_ST_HEREDOC:
{
@@ -1829,7 +1827,7 @@ yy66:
yy67:
YYDEBUG(67, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2265 "Zend/zend_language_scanner.l"
+#line 2264 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -1899,12 +1897,10 @@ yy67:
heredoc_scan_done:
yyleng = YYCURSOR - SCNG(yy_text);
- if (zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0) == FAILURE) {
- RETURN_TOKEN(T_ERROR);
- }
+ zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0);
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
-#line 1908 "Zend/zend_language_scanner.c"
+#line 1904 "Zend/zend_language_scanner.c"
yy68:
YYDEBUG(68, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1919,14 +1915,14 @@ yy70:
++YYCURSOR;
YYDEBUG(71, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2150 "Zend/zend_language_scanner.l"
+#line 2153 "Zend/zend_language_scanner.l"
{
Z_LVAL_P(zendlval) = (zend_long) '{';
yy_push_state(ST_IN_SCRIPTING);
yyless(1);
RETURN_TOKEN(T_CURLY_OPEN);
}
-#line 1930 "Zend/zend_language_scanner.c"
+#line 1926 "Zend/zend_language_scanner.c"
yy72:
YYDEBUG(72, *YYCURSOR);
yyaccept = 0;
@@ -1942,23 +1938,23 @@ yy72:
yy74:
YYDEBUG(74, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1872 "Zend/zend_language_scanner.l"
+#line 1877 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
}
-#line 1951 "Zend/zend_language_scanner.c"
+#line 1947 "Zend/zend_language_scanner.c"
yy75:
YYDEBUG(75, *YYCURSOR);
++YYCURSOR;
YYDEBUG(76, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1593 "Zend/zend_language_scanner.l"
+#line 1595 "Zend/zend_language_scanner.l"
{
yy_push_state(ST_LOOKING_FOR_VARNAME);
RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
}
-#line 1962 "Zend/zend_language_scanner.c"
+#line 1958 "Zend/zend_language_scanner.c"
yy77:
YYDEBUG(77, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1972,14 +1968,14 @@ yy79:
++YYCURSOR;
YYDEBUG(80, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1865 "Zend/zend_language_scanner.l"
+#line 1870 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 1);
yy_push_state(ST_VAR_OFFSET);
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
}
-#line 1983 "Zend/zend_language_scanner.c"
+#line 1979 "Zend/zend_language_scanner.c"
yy81:
YYDEBUG(81, *YYCURSOR);
yych = *++YYCURSOR;
@@ -1997,14 +1993,14 @@ yy82:
++YYCURSOR;
YYDEBUG(83, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1856 "Zend/zend_language_scanner.l"
+#line 1861 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 3);
yy_push_state(ST_LOOKING_FOR_PROPERTY);
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
}
-#line 2008 "Zend/zend_language_scanner.c"
+#line 2004 "Zend/zend_language_scanner.c"
}
/* *********************************** */
yyc_ST_IN_SCRIPTING:
@@ -2187,12 +2183,12 @@ yy86:
yy87:
YYDEBUG(87, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1895 "Zend/zend_language_scanner.l"
+#line 1900 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, yytext, yyleng);
RETURN_TOKEN(T_STRING);
}
-#line 2196 "Zend/zend_language_scanner.c"
+#line 2192 "Zend/zend_language_scanner.c"
yy88:
YYDEBUG(88, *YYCURSOR);
yych = *++YYCURSOR;
@@ -2424,11 +2420,11 @@ yy101:
yy102:
YYDEBUG(102, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1582 "Zend/zend_language_scanner.l"
+#line 1584 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(yytext[0]);
}
-#line 2432 "Zend/zend_language_scanner.c"
+#line 2428 "Zend/zend_language_scanner.c"
yy103:
YYDEBUG(103, *YYCURSOR);
++YYCURSOR;
@@ -2437,12 +2433,12 @@ yy103:
yy104:
YYDEBUG(104, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1297 "Zend/zend_language_scanner.l"
+#line 1299 "Zend/zend_language_scanner.l"
{
HANDLE_NEWLINES(yytext, yyleng);
RETURN_TOKEN(T_WHITESPACE);
}
-#line 2446 "Zend/zend_language_scanner.c"
+#line 2442 "Zend/zend_language_scanner.c"
yy105:
YYDEBUG(105, *YYCURSOR);
yych = *++YYCURSOR;
@@ -2453,11 +2449,11 @@ yy106:
++YYCURSOR;
YYDEBUG(107, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1322 "Zend/zend_language_scanner.l"
+#line 1324 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_NS_SEPARATOR);
}
-#line 2461 "Zend/zend_language_scanner.c"
+#line 2457 "Zend/zend_language_scanner.c"
yy108:
YYDEBUG(108, *YYCURSOR);
yyaccept = 1;
@@ -2686,18 +2682,18 @@ yy131:
++YYCURSOR;
YYDEBUG(132, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1587 "Zend/zend_language_scanner.l"
+#line 1589 "Zend/zend_language_scanner.l"
{
yy_push_state(ST_IN_SCRIPTING);
RETURN_TOKEN('{');
}
-#line 2695 "Zend/zend_language_scanner.c"
+#line 2691 "Zend/zend_language_scanner.c"
yy133:
YYDEBUG(133, *YYCURSOR);
++YYCURSOR;
YYDEBUG(134, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1599 "Zend/zend_language_scanner.l"
+#line 1601 "Zend/zend_language_scanner.l"
{
RESET_DOC_COMMENT();
if (!zend_stack_is_empty(&SCNG(state_stack))) {
@@ -2705,7 +2701,7 @@ yy133:
}
RETURN_TOKEN('}');
}
-#line 2709 "Zend/zend_language_scanner.c"
+#line 2705 "Zend/zend_language_scanner.c"
yy135:
YYDEBUG(135, *YYCURSOR);
yyaccept = 2;
@@ -2733,7 +2729,7 @@ yy135:
yy136:
YYDEBUG(136, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1652 "Zend/zend_language_scanner.l"
+#line 1654 "Zend/zend_language_scanner.l"
{
char *end;
if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
@@ -2743,8 +2739,9 @@ yy136:
* Because the lexing itself doesn't do that for us
*/
if (end != yytext + yyleng) {
- zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", E_PARSE);
- RETURN_TOKEN(T_ERROR);
+ zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0);
+ ZVAL_UNDEF(zendlval);
+ RETURN_TOKEN(T_LNUMBER);
}
} else {
errno = 0;
@@ -2760,22 +2757,24 @@ yy136:
/* Also not an assert for the same reason */
if (end != yytext + yyleng) {
zend_throw_exception(zend_ce_parse_error,
- "Invalid numeric literal", E_PARSE);
- RETURN_TOKEN(T_ERROR);
+ "Invalid numeric literal", 0);
+ ZVAL_UNDEF(zendlval);
+ RETURN_TOKEN(T_DNUMBER);
}
ZEND_ASSERT(!errno);
RETURN_TOKEN(T_DNUMBER);
}
/* Also not an assert for the same reason */
if (end != yytext + yyleng) {
- zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", E_PARSE);
- RETURN_TOKEN(T_ERROR);
+ zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0);
+ ZVAL_UNDEF(zendlval);
+ RETURN_TOKEN(T_DNUMBER);
}
}
ZEND_ASSERT(!errno);
RETURN_TOKEN(T_LNUMBER);
}
-#line 2779 "Zend/zend_language_scanner.c"
+#line 2778 "Zend/zend_language_scanner.c"
yy137:
YYDEBUG(137, *YYCURSOR);
yyaccept = 2;
@@ -2803,7 +2802,7 @@ yy139:
yy140:
YYDEBUG(140, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1901 "Zend/zend_language_scanner.l"
+#line 1906 "Zend/zend_language_scanner.l"
{
while (YYCURSOR < YYLIMIT) {
switch (*YYCURSOR++) {
@@ -2832,14 +2831,14 @@ yy140:
RETURN_TOKEN(T_COMMENT);
}
-#line 2836 "Zend/zend_language_scanner.c"
+#line 2835 "Zend/zend_language_scanner.c"
yy141:
YYDEBUG(141, *YYCURSOR);
++YYCURSOR;
yy142:
YYDEBUG(142, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1969 "Zend/zend_language_scanner.l"
+#line 1974 "Zend/zend_language_scanner.l"
{
register char *s, *t;
char *end;
@@ -2907,14 +2906,14 @@ yy142:
}
RETURN_TOKEN(T_CONSTANT_ENCAPSED_STRING);
}
-#line 2911 "Zend/zend_language_scanner.c"
+#line 2910 "Zend/zend_language_scanner.c"
yy143:
YYDEBUG(143, *YYCURSOR);
++YYCURSOR;
yy144:
YYDEBUG(144, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2038 "Zend/zend_language_scanner.l"
+#line 2043 "Zend/zend_language_scanner.l"
{
int bprefix = (yytext[0] != '"') ? 1 : 0;
@@ -2922,9 +2921,7 @@ yy144:
switch (*YYCURSOR++) {
case '"':
yyleng = YYCURSOR - SCNG(yy_text);
- if (zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"') == FAILURE) {
- RETURN_TOKEN(T_ERROR);
- }
+ zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"');
RETURN_TOKEN(T_CONSTANT_ENCAPSED_STRING);
case '$':
if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
@@ -2957,24 +2954,24 @@ yy144:
BEGIN(ST_DOUBLE_QUOTES);
RETURN_TOKEN('"');
}
-#line 2961 "Zend/zend_language_scanner.c"
+#line 2958 "Zend/zend_language_scanner.c"
yy145:
YYDEBUG(145, *YYCURSOR);
++YYCURSOR;
YYDEBUG(146, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2130 "Zend/zend_language_scanner.l"
+#line 2133 "Zend/zend_language_scanner.l"
{
BEGIN(ST_BACKQUOTE);
RETURN_TOKEN('`');
}
-#line 2972 "Zend/zend_language_scanner.c"
+#line 2969 "Zend/zend_language_scanner.c"
yy147:
YYDEBUG(147, *YYCURSOR);
++YYCURSOR;
YYDEBUG(148, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2398 "Zend/zend_language_scanner.l"
+#line 2395 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
RETURN_TOKEN(END);
@@ -2983,7 +2980,7 @@ yy147:
zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
goto restart;
}
-#line 2987 "Zend/zend_language_scanner.c"
+#line 2984 "Zend/zend_language_scanner.c"
yy149:
YYDEBUG(149, *YYCURSOR);
++YYCURSOR;
@@ -3010,7 +3007,7 @@ yy151:
yy153:
YYDEBUG(153, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1743 "Zend/zend_language_scanner.l"
+#line 1748 "Zend/zend_language_scanner.l"
{
const char *end;
@@ -3019,7 +3016,7 @@ yy153:
ZEND_ASSERT(end == yytext + yyleng);
RETURN_TOKEN(T_DNUMBER);
}
-#line 3023 "Zend/zend_language_scanner.c"
+#line 3020 "Zend/zend_language_scanner.c"
yy154:
YYDEBUG(154, *YYCURSOR);
yyaccept = 2;
@@ -3115,7 +3112,7 @@ yy163:
}
YYDEBUG(165, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1624 "Zend/zend_language_scanner.l"
+#line 1626 "Zend/zend_language_scanner.l"
{
char *bin = yytext + 2; /* Skip "0b" */
int len = yyleng - 2;
@@ -3143,7 +3140,7 @@ yy163:
RETURN_TOKEN(T_DNUMBER);
}
}
-#line 3147 "Zend/zend_language_scanner.c"
+#line 3144 "Zend/zend_language_scanner.c"
yy166:
YYDEBUG(166, *YYCURSOR);
++YYCURSOR;
@@ -3155,7 +3152,7 @@ yy166:
}
YYDEBUG(168, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1694 "Zend/zend_language_scanner.l"
+#line 1699 "Zend/zend_language_scanner.l"
{
char *hex = yytext + 2; /* Skip "0x" */
int len = yyleng - 2;
@@ -3183,7 +3180,7 @@ yy166:
RETURN_TOKEN(T_DNUMBER);
}
}
-#line 3187 "Zend/zend_language_scanner.c"
+#line 3184 "Zend/zend_language_scanner.c"
yy169:
YYDEBUG(169, *YYCURSOR);
++YYCURSOR;
@@ -3208,12 +3205,12 @@ yy169:
yy171:
YYDEBUG(171, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1872 "Zend/zend_language_scanner.l"
+#line 1877 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
}
-#line 3217 "Zend/zend_language_scanner.c"
+#line 3214 "Zend/zend_language_scanner.c"
yy172:
YYDEBUG(172, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3227,11 +3224,11 @@ yy173:
}
YYDEBUG(174, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1570 "Zend/zend_language_scanner.l"
+#line 1572 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_LOGICAL_XOR);
}
-#line 3235 "Zend/zend_language_scanner.c"
+#line 3232 "Zend/zend_language_scanner.c"
yy175:
YYDEBUG(175, *YYCURSOR);
++YYCURSOR;
@@ -3240,71 +3237,71 @@ yy175:
}
YYDEBUG(176, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1562 "Zend/zend_language_scanner.l"
+#line 1564 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_LOGICAL_OR);
}
-#line 3248 "Zend/zend_language_scanner.c"
+#line 3245 "Zend/zend_language_scanner.c"
yy177:
YYDEBUG(177, *YYCURSOR);
++YYCURSOR;
YYDEBUG(178, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1550 "Zend/zend_language_scanner.l"
+#line 1552 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_XOR_EQUAL);
}
-#line 3258 "Zend/zend_language_scanner.c"
+#line 3255 "Zend/zend_language_scanner.c"
yy179:
YYDEBUG(179, *YYCURSOR);
++YYCURSOR;
YYDEBUG(180, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1554 "Zend/zend_language_scanner.l"
+#line 1556 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_BOOLEAN_OR);
}
-#line 3268 "Zend/zend_language_scanner.c"
+#line 3265 "Zend/zend_language_scanner.c"
yy181:
YYDEBUG(181, *YYCURSOR);
++YYCURSOR;
YYDEBUG(182, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1546 "Zend/zend_language_scanner.l"
+#line 1548 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_OR_EQUAL);
}
-#line 3278 "Zend/zend_language_scanner.c"
+#line 3275 "Zend/zend_language_scanner.c"
yy183:
YYDEBUG(183, *YYCURSOR);
++YYCURSOR;
YYDEBUG(184, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1558 "Zend/zend_language_scanner.l"
+#line 1560 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_BOOLEAN_AND);
}
-#line 3288 "Zend/zend_language_scanner.c"
+#line 3285 "Zend/zend_language_scanner.c"
yy185:
YYDEBUG(185, *YYCURSOR);
++YYCURSOR;
YYDEBUG(186, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1542 "Zend/zend_language_scanner.l"
+#line 1544 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_AND_EQUAL);
}
-#line 3298 "Zend/zend_language_scanner.c"
+#line 3295 "Zend/zend_language_scanner.c"
yy187:
YYDEBUG(187, *YYCURSOR);
++YYCURSOR;
YYDEBUG(188, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1530 "Zend/zend_language_scanner.l"
+#line 1532 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_MOD_EQUAL);
}
-#line 3308 "Zend/zend_language_scanner.c"
+#line 3305 "Zend/zend_language_scanner.c"
yy189:
YYDEBUG(189, *YYCURSOR);
yyaccept = 4;
@@ -3313,7 +3310,7 @@ yy189:
yy190:
YYDEBUG(190, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1930 "Zend/zend_language_scanner.l"
+#line 1935 "Zend/zend_language_scanner.l"
{
int doc_com;
@@ -3346,7 +3343,7 @@ yy190:
RETURN_TOKEN(T_COMMENT);
}
-#line 3350 "Zend/zend_language_scanner.c"
+#line 3347 "Zend/zend_language_scanner.c"
yy191:
YYDEBUG(191, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3356,11 +3353,11 @@ yy192:
++YYCURSOR;
YYDEBUG(193, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1522 "Zend/zend_language_scanner.l"
+#line 1524 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_DIV_EQUAL);
}
-#line 3364 "Zend/zend_language_scanner.c"
+#line 3361 "Zend/zend_language_scanner.c"
yy194:
YYDEBUG(194, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3384,62 +3381,62 @@ yy197:
if ((yych = *YYCURSOR) == '=') goto yy201;
YYDEBUG(198, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1514 "Zend/zend_language_scanner.l"
+#line 1516 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_POW);
}
-#line 3392 "Zend/zend_language_scanner.c"
+#line 3389 "Zend/zend_language_scanner.c"
yy199:
YYDEBUG(199, *YYCURSOR);
++YYCURSOR;
YYDEBUG(200, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1510 "Zend/zend_language_scanner.l"
+#line 1512 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_MUL_EQUAL);
}
-#line 3402 "Zend/zend_language_scanner.c"
+#line 3399 "Zend/zend_language_scanner.c"
yy201:
YYDEBUG(201, *YYCURSOR);
++YYCURSOR;
YYDEBUG(202, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1518 "Zend/zend_language_scanner.l"
+#line 1520 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_POW_EQUAL);
}
-#line 3412 "Zend/zend_language_scanner.c"
+#line 3409 "Zend/zend_language_scanner.c"
yy203:
YYDEBUG(203, *YYCURSOR);
++YYCURSOR;
if ((yych = *YYCURSOR) == '=') goto yy207;
YYDEBUG(204, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1578 "Zend/zend_language_scanner.l"
+#line 1580 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_SR);
}
-#line 3423 "Zend/zend_language_scanner.c"
+#line 3420 "Zend/zend_language_scanner.c"
yy205:
YYDEBUG(205, *YYCURSOR);
++YYCURSOR;
YYDEBUG(206, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1498 "Zend/zend_language_scanner.l"
+#line 1500 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_IS_GREATER_OR_EQUAL);
}
-#line 3433 "Zend/zend_language_scanner.c"
+#line 3430 "Zend/zend_language_scanner.c"
yy207:
YYDEBUG(207, *YYCURSOR);
++YYCURSOR;
YYDEBUG(208, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1538 "Zend/zend_language_scanner.l"
+#line 1540 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_SR_EQUAL);
}
-#line 3443 "Zend/zend_language_scanner.c"
+#line 3440 "Zend/zend_language_scanner.c"
yy209:
YYDEBUG(209, *YYCURSOR);
yyaccept = 5;
@@ -3450,53 +3447,53 @@ yy209:
yy210:
YYDEBUG(210, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1574 "Zend/zend_language_scanner.l"
+#line 1576 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_SL);
}
-#line 3458 "Zend/zend_language_scanner.c"
+#line 3455 "Zend/zend_language_scanner.c"
yy211:
YYDEBUG(211, *YYCURSOR);
++YYCURSOR;
if ((yych = *YYCURSOR) == '>') goto yy215;
YYDEBUG(212, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1494 "Zend/zend_language_scanner.l"
+#line 1496 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL);
}
-#line 3469 "Zend/zend_language_scanner.c"
+#line 3466 "Zend/zend_language_scanner.c"
yy213:
YYDEBUG(213, *YYCURSOR);
++YYCURSOR;
yy214:
YYDEBUG(214, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1486 "Zend/zend_language_scanner.l"
+#line 1488 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_IS_NOT_EQUAL);
}
-#line 3480 "Zend/zend_language_scanner.c"
+#line 3477 "Zend/zend_language_scanner.c"
yy215:
YYDEBUG(215, *YYCURSOR);
++YYCURSOR;
YYDEBUG(216, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1490 "Zend/zend_language_scanner.l"
+#line 1492 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_SPACESHIP);
}
-#line 3490 "Zend/zend_language_scanner.c"
+#line 3487 "Zend/zend_language_scanner.c"
yy217:
YYDEBUG(217, *YYCURSOR);
++YYCURSOR;
YYDEBUG(218, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1534 "Zend/zend_language_scanner.l"
+#line 1536 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_SL_EQUAL);
}
-#line 3500 "Zend/zend_language_scanner.c"
+#line 3497 "Zend/zend_language_scanner.c"
yy219:
YYDEBUG(219, *YYCURSOR);
++YYCURSOR;
@@ -3601,7 +3598,7 @@ yy228:
yy229:
YYDEBUG(229, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2082 "Zend/zend_language_scanner.l"
+#line 2085 "Zend/zend_language_scanner.l"
{
char *s;
int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -3648,7 +3645,7 @@ yy229:
RETURN_TOKEN(T_START_HEREDOC);
}
-#line 3652 "Zend/zend_language_scanner.c"
+#line 3649 "Zend/zend_language_scanner.c"
yy230:
YYDEBUG(230, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3688,31 +3685,31 @@ yy233:
++YYCURSOR;
YYDEBUG(235, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1478 "Zend/zend_language_scanner.l"
+#line 1480 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_IS_NOT_IDENTICAL);
}
-#line 3696 "Zend/zend_language_scanner.c"
+#line 3693 "Zend/zend_language_scanner.c"
yy236:
YYDEBUG(236, *YYCURSOR);
++YYCURSOR;
YYDEBUG(237, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1502 "Zend/zend_language_scanner.l"
+#line 1504 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_PLUS_EQUAL);
}
-#line 3706 "Zend/zend_language_scanner.c"
+#line 3703 "Zend/zend_language_scanner.c"
yy238:
YYDEBUG(238, *YYCURSOR);
++YYCURSOR;
YYDEBUG(239, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1466 "Zend/zend_language_scanner.l"
+#line 1468 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_INC);
}
-#line 3716 "Zend/zend_language_scanner.c"
+#line 3713 "Zend/zend_language_scanner.c"
yy240:
YYDEBUG(240, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3731,42 +3728,42 @@ yy242:
}
YYDEBUG(243, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1454 "Zend/zend_language_scanner.l"
+#line 1456 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_LIST);
}
-#line 3739 "Zend/zend_language_scanner.c"
+#line 3736 "Zend/zend_language_scanner.c"
yy244:
YYDEBUG(244, *YYCURSOR);
++YYCURSOR;
if ((yych = *YYCURSOR) == '=') goto yy248;
YYDEBUG(245, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1482 "Zend/zend_language_scanner.l"
+#line 1484 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_IS_EQUAL);
}
-#line 3750 "Zend/zend_language_scanner.c"
+#line 3747 "Zend/zend_language_scanner.c"
yy246:
YYDEBUG(246, *YYCURSOR);
++YYCURSOR;
YYDEBUG(247, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1450 "Zend/zend_language_scanner.l"
+#line 1452 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_DOUBLE_ARROW);
}
-#line 3760 "Zend/zend_language_scanner.c"
+#line 3757 "Zend/zend_language_scanner.c"
yy248:
YYDEBUG(248, *YYCURSOR);
++YYCURSOR;
YYDEBUG(249, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1474 "Zend/zend_language_scanner.l"
+#line 1476 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_IS_IDENTICAL);
}
-#line 3770 "Zend/zend_language_scanner.c"
+#line 3767 "Zend/zend_language_scanner.c"
yy250:
YYDEBUG(250, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3896,11 +3893,11 @@ yy266:
}
YYDEBUG(269, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1780 "Zend/zend_language_scanner.l"
+#line 1785 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_NS_C);
}
-#line 3904 "Zend/zend_language_scanner.c"
+#line 3901 "Zend/zend_language_scanner.c"
yy270:
YYDEBUG(270, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3920,11 +3917,11 @@ yy271:
}
YYDEBUG(274, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1776 "Zend/zend_language_scanner.l"
+#line 1781 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_DIR);
}
-#line 3928 "Zend/zend_language_scanner.c"
+#line 3925 "Zend/zend_language_scanner.c"
yy275:
YYDEBUG(275, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3949,11 +3946,11 @@ yy277:
}
YYDEBUG(280, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1768 "Zend/zend_language_scanner.l"
+#line 1773 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_LINE);
}
-#line 3957 "Zend/zend_language_scanner.c"
+#line 3954 "Zend/zend_language_scanner.c"
yy281:
YYDEBUG(281, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3988,11 +3985,11 @@ yy285:
}
YYDEBUG(288, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1764 "Zend/zend_language_scanner.l"
+#line 1769 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_METHOD_C);
}
-#line 3996 "Zend/zend_language_scanner.c"
+#line 3993 "Zend/zend_language_scanner.c"
yy289:
YYDEBUG(289, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4043,11 +4040,11 @@ yy296:
}
YYDEBUG(299, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1760 "Zend/zend_language_scanner.l"
+#line 1765 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_FUNC_C);
}
-#line 4051 "Zend/zend_language_scanner.c"
+#line 4048 "Zend/zend_language_scanner.c"
yy300:
YYDEBUG(300, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4067,11 +4064,11 @@ yy301:
}
YYDEBUG(304, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1772 "Zend/zend_language_scanner.l"
+#line 1777 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_FILE);
}
-#line 4075 "Zend/zend_language_scanner.c"
+#line 4072 "Zend/zend_language_scanner.c"
yy305:
YYDEBUG(305, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4101,11 +4098,11 @@ yy308:
}
YYDEBUG(311, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1756 "Zend/zend_language_scanner.l"
+#line 1761 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_TRAIT_C);
}
-#line 4109 "Zend/zend_language_scanner.c"
+#line 4106 "Zend/zend_language_scanner.c"
yy312:
YYDEBUG(312, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4135,11 +4132,11 @@ yy315:
}
YYDEBUG(318, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1752 "Zend/zend_language_scanner.l"
+#line 1757 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_CLASS_C);
}
-#line 4143 "Zend/zend_language_scanner.c"
+#line 4140 "Zend/zend_language_scanner.c"
yy319:
YYDEBUG(319, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4201,11 +4198,11 @@ yy330:
}
YYDEBUG(331, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1418 "Zend/zend_language_scanner.l"
+#line 1420 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_HALT_COMPILER);
}
-#line 4209 "Zend/zend_language_scanner.c"
+#line 4206 "Zend/zend_language_scanner.c"
yy332:
YYDEBUG(332, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4225,11 +4222,11 @@ yy334:
}
YYDEBUG(335, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1398 "Zend/zend_language_scanner.l"
+#line 1400 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_USE);
}
-#line 4233 "Zend/zend_language_scanner.c"
+#line 4230 "Zend/zend_language_scanner.c"
yy336:
YYDEBUG(336, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4248,11 +4245,11 @@ yy338:
}
YYDEBUG(339, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1446 "Zend/zend_language_scanner.l"
+#line 1448 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_UNSET);
}
-#line 4256 "Zend/zend_language_scanner.c"
+#line 4253 "Zend/zend_language_scanner.c"
yy340:
YYDEBUG(340, *YYCURSOR);
++YYCURSOR;
@@ -4424,11 +4421,11 @@ yy355:
++YYCURSOR;
YYDEBUG(357, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1346 "Zend/zend_language_scanner.l"
+#line 1348 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_INT_CAST);
}
-#line 4432 "Zend/zend_language_scanner.c"
+#line 4429 "Zend/zend_language_scanner.c"
yy358:
YYDEBUG(358, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4472,11 +4469,11 @@ yy363:
++YYCURSOR;
YYDEBUG(366, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1350 "Zend/zend_language_scanner.l"
+#line 1352 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_DOUBLE_CAST);
}
-#line 4480 "Zend/zend_language_scanner.c"
+#line 4477 "Zend/zend_language_scanner.c"
yy367:
YYDEBUG(367, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4546,11 +4543,11 @@ yy377:
++YYCURSOR;
YYDEBUG(380, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1354 "Zend/zend_language_scanner.l"
+#line 1356 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_STRING_CAST);
}
-#line 4554 "Zend/zend_language_scanner.c"
+#line 4551 "Zend/zend_language_scanner.c"
yy381:
YYDEBUG(381, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4583,11 +4580,11 @@ yy384:
++YYCURSOR;
YYDEBUG(387, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1358 "Zend/zend_language_scanner.l"
+#line 1360 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ARRAY_CAST);
}
-#line 4591 "Zend/zend_language_scanner.c"
+#line 4588 "Zend/zend_language_scanner.c"
yy388:
YYDEBUG(388, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4625,11 +4622,11 @@ yy392:
++YYCURSOR;
YYDEBUG(395, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1362 "Zend/zend_language_scanner.l"
+#line 1364 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_OBJECT_CAST);
}
-#line 4633 "Zend/zend_language_scanner.c"
+#line 4630 "Zend/zend_language_scanner.c"
yy396:
YYDEBUG(396, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4670,11 +4667,11 @@ yy401:
++YYCURSOR;
YYDEBUG(403, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1366 "Zend/zend_language_scanner.l"
+#line 1368 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_BOOL_CAST);
}
-#line 4678 "Zend/zend_language_scanner.c"
+#line 4675 "Zend/zend_language_scanner.c"
yy404:
YYDEBUG(404, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4734,11 +4731,11 @@ yy412:
++YYCURSOR;
YYDEBUG(415, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1370 "Zend/zend_language_scanner.l"
+#line 1372 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_UNSET_CAST);
}
-#line 4742 "Zend/zend_language_scanner.c"
+#line 4739 "Zend/zend_language_scanner.c"
yy416:
YYDEBUG(416, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4752,11 +4749,11 @@ yy417:
}
YYDEBUG(418, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1342 "Zend/zend_language_scanner.l"
+#line 1344 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_VAR);
}
-#line 4760 "Zend/zend_language_scanner.c"
+#line 4757 "Zend/zend_language_scanner.c"
yy419:
YYDEBUG(419, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4776,11 +4773,11 @@ yy421:
}
YYDEBUG(422, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1334 "Zend/zend_language_scanner.l"
+#line 1336 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_NEW);
}
-#line 4784 "Zend/zend_language_scanner.c"
+#line 4781 "Zend/zend_language_scanner.c"
yy423:
YYDEBUG(423, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4819,11 +4816,11 @@ yy429:
}
YYDEBUG(430, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1394 "Zend/zend_language_scanner.l"
+#line 1396 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_NAMESPACE);
}
-#line 4827 "Zend/zend_language_scanner.c"
+#line 4824 "Zend/zend_language_scanner.c"
yy431:
YYDEBUG(431, *YYCURSOR);
++YYCURSOR;
@@ -4832,22 +4829,22 @@ yy431:
yy432:
YYDEBUG(432, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1963 "Zend/zend_language_scanner.l"
+#line 1968 "Zend/zend_language_scanner.l"
{
BEGIN(INITIAL);
RETURN_TOKEN(T_CLOSE_TAG); /* implicit ';' at php-end tag */
}
-#line 4841 "Zend/zend_language_scanner.c"
+#line 4838 "Zend/zend_language_scanner.c"
yy433:
YYDEBUG(433, *YYCURSOR);
++YYCURSOR;
YYDEBUG(434, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1330 "Zend/zend_language_scanner.l"
+#line 1332 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_COALESCE);
}
-#line 4851 "Zend/zend_language_scanner.c"
+#line 4848 "Zend/zend_language_scanner.c"
yy435:
YYDEBUG(435, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4878,11 +4875,11 @@ yy439:
++YYCURSOR;
YYDEBUG(440, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1526 "Zend/zend_language_scanner.l"
+#line 1528 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_CONCAT_EQUAL);
}
-#line 4886 "Zend/zend_language_scanner.c"
+#line 4883 "Zend/zend_language_scanner.c"
yy441:
YYDEBUG(441, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4891,21 +4888,21 @@ yy441:
++YYCURSOR;
YYDEBUG(443, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1326 "Zend/zend_language_scanner.l"
+#line 1328 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ELLIPSIS);
}
-#line 4899 "Zend/zend_language_scanner.c"
+#line 4896 "Zend/zend_language_scanner.c"
yy444:
YYDEBUG(444, *YYCURSOR);
++YYCURSOR;
YYDEBUG(445, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1318 "Zend/zend_language_scanner.l"
+#line 1320 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM);
}
-#line 4909 "Zend/zend_language_scanner.c"
+#line 4906 "Zend/zend_language_scanner.c"
yy446:
YYDEBUG(446, *YYCURSOR);
++YYCURSOR;
@@ -4927,32 +4924,32 @@ yy448:
++YYCURSOR;
YYDEBUG(449, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1506 "Zend/zend_language_scanner.l"
+#line 1508 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_MINUS_EQUAL);
}
-#line 4935 "Zend/zend_language_scanner.c"
+#line 4932 "Zend/zend_language_scanner.c"
yy450:
YYDEBUG(450, *YYCURSOR);
++YYCURSOR;
YYDEBUG(451, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1470 "Zend/zend_language_scanner.l"
+#line 1472 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_DEC);
}
-#line 4945 "Zend/zend_language_scanner.c"
+#line 4942 "Zend/zend_language_scanner.c"
yy452:
YYDEBUG(452, *YYCURSOR);
++YYCURSOR;
YYDEBUG(453, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1292 "Zend/zend_language_scanner.l"
+#line 1294 "Zend/zend_language_scanner.l"
{
yy_push_state(ST_LOOKING_FOR_PROPERTY);
RETURN_TOKEN(T_OBJECT_OPERATOR);
}
-#line 4956 "Zend/zend_language_scanner.c"
+#line 4953 "Zend/zend_language_scanner.c"
yy454:
YYDEBUG(454, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4997,11 +4994,11 @@ yy459:
}
YYDEBUG(460, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1442 "Zend/zend_language_scanner.l"
+#line 1444 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_PUBLIC);
}
-#line 5005 "Zend/zend_language_scanner.c"
+#line 5002 "Zend/zend_language_scanner.c"
yy461:
YYDEBUG(461, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5056,11 +5053,11 @@ yy468:
}
YYDEBUG(469, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1438 "Zend/zend_language_scanner.l"
+#line 1440 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_PROTECTED);
}
-#line 5064 "Zend/zend_language_scanner.c"
+#line 5061 "Zend/zend_language_scanner.c"
yy470:
YYDEBUG(470, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5090,11 +5087,11 @@ yy474:
}
YYDEBUG(475, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1434 "Zend/zend_language_scanner.l"
+#line 1436 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_PRIVATE);
}
-#line 5098 "Zend/zend_language_scanner.c"
+#line 5095 "Zend/zend_language_scanner.c"
yy476:
YYDEBUG(476, *YYCURSOR);
++YYCURSOR;
@@ -5103,11 +5100,11 @@ yy476:
}
YYDEBUG(477, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1268 "Zend/zend_language_scanner.l"
+#line 1270 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_PRINT);
}
-#line 5111 "Zend/zend_language_scanner.c"
+#line 5108 "Zend/zend_language_scanner.c"
yy478:
YYDEBUG(478, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5132,11 +5129,11 @@ yy481:
}
YYDEBUG(482, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1260 "Zend/zend_language_scanner.l"
+#line 1262 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_GOTO);
}
-#line 5140 "Zend/zend_language_scanner.c"
+#line 5137 "Zend/zend_language_scanner.c"
yy483:
YYDEBUG(483, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5160,11 +5157,11 @@ yy486:
}
YYDEBUG(487, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1406 "Zend/zend_language_scanner.l"
+#line 1408 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_GLOBAL);
}
-#line 5168 "Zend/zend_language_scanner.c"
+#line 5165 "Zend/zend_language_scanner.c"
yy488:
YYDEBUG(488, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5201,11 +5198,11 @@ yy494:
}
YYDEBUG(495, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1252 "Zend/zend_language_scanner.l"
+#line 1254 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_BREAK);
}
-#line 5209 "Zend/zend_language_scanner.c"
+#line 5206 "Zend/zend_language_scanner.c"
yy496:
YYDEBUG(496, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5245,11 +5242,11 @@ yy502:
}
YYDEBUG(503, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1236 "Zend/zend_language_scanner.l"
+#line 1238 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_SWITCH);
}
-#line 5253 "Zend/zend_language_scanner.c"
+#line 5250 "Zend/zend_language_scanner.c"
yy504:
YYDEBUG(504, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5273,11 +5270,11 @@ yy507:
}
YYDEBUG(508, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1422 "Zend/zend_language_scanner.l"
+#line 1424 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_STATIC);
}
-#line 5281 "Zend/zend_language_scanner.c"
+#line 5278 "Zend/zend_language_scanner.c"
yy509:
YYDEBUG(509, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5304,11 +5301,11 @@ yy512:
}
YYDEBUG(513, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1232 "Zend/zend_language_scanner.l"
+#line 1234 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_AS);
}
-#line 5312 "Zend/zend_language_scanner.c"
+#line 5309 "Zend/zend_language_scanner.c"
yy514:
YYDEBUG(514, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5327,11 +5324,11 @@ yy516:
}
YYDEBUG(517, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1458 "Zend/zend_language_scanner.l"
+#line 1460 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ARRAY);
}
-#line 5335 "Zend/zend_language_scanner.c"
+#line 5332 "Zend/zend_language_scanner.c"
yy518:
YYDEBUG(518, *YYCURSOR);
++YYCURSOR;
@@ -5340,11 +5337,11 @@ yy518:
}
YYDEBUG(519, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1566 "Zend/zend_language_scanner.l"
+#line 1568 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_LOGICAL_AND);
}
-#line 5348 "Zend/zend_language_scanner.c"
+#line 5345 "Zend/zend_language_scanner.c"
yy520:
YYDEBUG(520, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5378,11 +5375,11 @@ yy525:
}
YYDEBUG(526, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1426 "Zend/zend_language_scanner.l"
+#line 1428 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ABSTRACT);
}
-#line 5386 "Zend/zend_language_scanner.c"
+#line 5383 "Zend/zend_language_scanner.c"
yy527:
YYDEBUG(527, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5406,11 +5403,11 @@ yy530:
}
YYDEBUG(531, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1192 "Zend/zend_language_scanner.l"
+#line 1194 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_WHILE);
}
-#line 5414 "Zend/zend_language_scanner.c"
+#line 5411 "Zend/zend_language_scanner.c"
yy532:
YYDEBUG(532, *YYCURSOR);
++YYCURSOR;
@@ -5419,11 +5416,11 @@ yy532:
}
YYDEBUG(533, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1176 "Zend/zend_language_scanner.l"
+#line 1178 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_IF);
}
-#line 5427 "Zend/zend_language_scanner.c"
+#line 5424 "Zend/zend_language_scanner.c"
yy534:
YYDEBUG(534, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5475,11 +5472,11 @@ yy539:
}
YYDEBUG(540, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1410 "Zend/zend_language_scanner.l"
+#line 1412 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ISSET);
}
-#line 5483 "Zend/zend_language_scanner.c"
+#line 5480 "Zend/zend_language_scanner.c"
yy541:
YYDEBUG(541, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5533,11 +5530,11 @@ yy547:
yy548:
YYDEBUG(548, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1378 "Zend/zend_language_scanner.l"
+#line 1380 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_INCLUDE);
}
-#line 5541 "Zend/zend_language_scanner.c"
+#line 5538 "Zend/zend_language_scanner.c"
yy549:
YYDEBUG(549, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5566,11 +5563,11 @@ yy553:
}
YYDEBUG(554, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1382 "Zend/zend_language_scanner.l"
+#line 1384 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_INCLUDE_ONCE);
}
-#line 5574 "Zend/zend_language_scanner.c"
+#line 5571 "Zend/zend_language_scanner.c"
yy555:
YYDEBUG(555, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5604,11 +5601,11 @@ yy560:
}
YYDEBUG(561, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1276 "Zend/zend_language_scanner.l"
+#line 1278 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_INTERFACE);
}
-#line 5612 "Zend/zend_language_scanner.c"
+#line 5609 "Zend/zend_language_scanner.c"
yy562:
YYDEBUG(562, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5658,11 +5655,11 @@ yy568:
}
YYDEBUG(569, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1402 "Zend/zend_language_scanner.l"
+#line 1404 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_INSTEADOF);
}
-#line 5666 "Zend/zend_language_scanner.c"
+#line 5663 "Zend/zend_language_scanner.c"
yy570:
YYDEBUG(570, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5691,11 +5688,11 @@ yy574:
}
YYDEBUG(575, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1228 "Zend/zend_language_scanner.l"
+#line 1230 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_INSTANCEOF);
}
-#line 5699 "Zend/zend_language_scanner.c"
+#line 5696 "Zend/zend_language_scanner.c"
yy576:
YYDEBUG(576, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5739,11 +5736,11 @@ yy583:
}
YYDEBUG(584, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1288 "Zend/zend_language_scanner.l"
+#line 1290 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_IMPLEMENTS);
}
-#line 5747 "Zend/zend_language_scanner.c"
+#line 5744 "Zend/zend_language_scanner.c"
yy585:
YYDEBUG(585, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5771,11 +5768,11 @@ yy586:
}
YYDEBUG(588, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1160 "Zend/zend_language_scanner.l"
+#line 1162 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_TRY);
}
-#line 5779 "Zend/zend_language_scanner.c"
+#line 5776 "Zend/zend_language_scanner.c"
yy589:
YYDEBUG(589, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5794,11 +5791,11 @@ yy591:
}
YYDEBUG(592, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1280 "Zend/zend_language_scanner.l"
+#line 1282 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_TRAIT);
}
-#line 5802 "Zend/zend_language_scanner.c"
+#line 5799 "Zend/zend_language_scanner.c"
yy593:
YYDEBUG(593, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5817,11 +5814,11 @@ yy595:
}
YYDEBUG(596, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1172 "Zend/zend_language_scanner.l"
+#line 1174 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_THROW);
}
-#line 5825 "Zend/zend_language_scanner.c"
+#line 5822 "Zend/zend_language_scanner.c"
yy597:
YYDEBUG(597, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5854,11 +5851,11 @@ yy600:
yy601:
YYDEBUG(601, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1156 "Zend/zend_language_scanner.l"
+#line 1158 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_YIELD);
}
-#line 5862 "Zend/zend_language_scanner.c"
+#line 5859 "Zend/zend_language_scanner.c"
yy602:
YYDEBUG(602, *YYCURSOR);
++YYCURSOR;
@@ -5900,11 +5897,11 @@ yy607:
++YYCURSOR;
YYDEBUG(608, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1152 "Zend/zend_language_scanner.l"
+#line 1154 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_YIELD_FROM);
}
-#line 5908 "Zend/zend_language_scanner.c"
+#line 5905 "Zend/zend_language_scanner.c"
yy609:
YYDEBUG(609, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5965,11 +5962,11 @@ yy615:
yy616:
YYDEBUG(616, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1386 "Zend/zend_language_scanner.l"
+#line 1388 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_REQUIRE);
}
-#line 5973 "Zend/zend_language_scanner.c"
+#line 5970 "Zend/zend_language_scanner.c"
yy617:
YYDEBUG(617, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5998,11 +5995,11 @@ yy621:
}
YYDEBUG(622, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1390 "Zend/zend_language_scanner.l"
+#line 1392 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_REQUIRE_ONCE);
}
-#line 6006 "Zend/zend_language_scanner.c"
+#line 6003 "Zend/zend_language_scanner.c"
yy623:
YYDEBUG(623, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6021,11 +6018,11 @@ yy625:
}
YYDEBUG(626, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1148 "Zend/zend_language_scanner.l"
+#line 1150 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_RETURN);
}
-#line 6029 "Zend/zend_language_scanner.c"
+#line 6026 "Zend/zend_language_scanner.c"
yy627:
YYDEBUG(627, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6115,11 +6112,11 @@ yy636:
}
YYDEBUG(637, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1256 "Zend/zend_language_scanner.l"
+#line 1258 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_CONTINUE);
}
-#line 6123 "Zend/zend_language_scanner.c"
+#line 6120 "Zend/zend_language_scanner.c"
yy638:
YYDEBUG(638, *YYCURSOR);
++YYCURSOR;
@@ -6128,11 +6125,11 @@ yy638:
}
YYDEBUG(639, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1144 "Zend/zend_language_scanner.l"
+#line 1146 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_CONST);
}
-#line 6136 "Zend/zend_language_scanner.c"
+#line 6133 "Zend/zend_language_scanner.c"
yy640:
YYDEBUG(640, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6157,11 +6154,11 @@ yy643:
}
YYDEBUG(644, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1338 "Zend/zend_language_scanner.l"
+#line 1340 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_CLONE);
}
-#line 6165 "Zend/zend_language_scanner.c"
+#line 6162 "Zend/zend_language_scanner.c"
yy645:
YYDEBUG(645, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6175,11 +6172,11 @@ yy646:
}
YYDEBUG(647, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1272 "Zend/zend_language_scanner.l"
+#line 1274 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_CLASS);
}
-#line 6183 "Zend/zend_language_scanner.c"
+#line 6180 "Zend/zend_language_scanner.c"
yy648:
YYDEBUG(648, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6225,11 +6222,11 @@ yy655:
}
YYDEBUG(656, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1462 "Zend/zend_language_scanner.l"
+#line 1464 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_CALLABLE);
}
-#line 6233 "Zend/zend_language_scanner.c"
+#line 6230 "Zend/zend_language_scanner.c"
yy657:
YYDEBUG(657, *YYCURSOR);
++YYCURSOR;
@@ -6238,11 +6235,11 @@ yy657:
}
YYDEBUG(658, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1244 "Zend/zend_language_scanner.l"
+#line 1246 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_CASE);
}
-#line 6246 "Zend/zend_language_scanner.c"
+#line 6243 "Zend/zend_language_scanner.c"
yy659:
YYDEBUG(659, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6256,11 +6253,11 @@ yy660:
}
YYDEBUG(661, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1164 "Zend/zend_language_scanner.l"
+#line 1166 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_CATCH);
}
-#line 6264 "Zend/zend_language_scanner.c"
+#line 6261 "Zend/zend_language_scanner.c"
yy662:
YYDEBUG(662, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6311,11 +6308,11 @@ yy670:
}
YYDEBUG(671, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1140 "Zend/zend_language_scanner.l"
+#line 1142 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_FUNCTION);
}
-#line 6319 "Zend/zend_language_scanner.c"
+#line 6316 "Zend/zend_language_scanner.c"
yy672:
YYDEBUG(672, *YYCURSOR);
++YYCURSOR;
@@ -6339,11 +6336,11 @@ yy672:
yy673:
YYDEBUG(673, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1204 "Zend/zend_language_scanner.l"
+#line 1206 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_FOR);
}
-#line 6347 "Zend/zend_language_scanner.c"
+#line 6344 "Zend/zend_language_scanner.c"
yy674:
YYDEBUG(674, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6367,11 +6364,11 @@ yy677:
}
YYDEBUG(678, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1212 "Zend/zend_language_scanner.l"
+#line 1214 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_FOREACH);
}
-#line 6375 "Zend/zend_language_scanner.c"
+#line 6372 "Zend/zend_language_scanner.c"
yy679:
YYDEBUG(679, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6405,11 +6402,11 @@ yy681:
yy682:
YYDEBUG(682, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1430 "Zend/zend_language_scanner.l"
+#line 1432 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_FINAL);
}
-#line 6413 "Zend/zend_language_scanner.c"
+#line 6410 "Zend/zend_language_scanner.c"
yy683:
YYDEBUG(683, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6423,11 +6420,11 @@ yy684:
}
YYDEBUG(685, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1168 "Zend/zend_language_scanner.l"
+#line 1170 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_FINALLY);
}
-#line 6431 "Zend/zend_language_scanner.c"
+#line 6428 "Zend/zend_language_scanner.c"
yy686:
YYDEBUG(686, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6458,11 +6455,11 @@ yy688:
}
YYDEBUG(689, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1200 "Zend/zend_language_scanner.l"
+#line 1202 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_DO);
}
-#line 6466 "Zend/zend_language_scanner.c"
+#line 6463 "Zend/zend_language_scanner.c"
yy690:
YYDEBUG(690, *YYCURSOR);
++YYCURSOR;
@@ -6471,11 +6468,11 @@ yy690:
}
YYDEBUG(691, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1136 "Zend/zend_language_scanner.l"
+#line 1138 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_EXIT);
}
-#line 6479 "Zend/zend_language_scanner.c"
+#line 6476 "Zend/zend_language_scanner.c"
yy692:
YYDEBUG(692, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6510,11 +6507,11 @@ yy697:
}
YYDEBUG(698, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1248 "Zend/zend_language_scanner.l"
+#line 1250 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_DEFAULT);
}
-#line 6518 "Zend/zend_language_scanner.c"
+#line 6515 "Zend/zend_language_scanner.c"
yy699:
YYDEBUG(699, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6538,11 +6535,11 @@ yy702:
}
YYDEBUG(703, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1220 "Zend/zend_language_scanner.l"
+#line 1222 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_DECLARE);
}
-#line 6546 "Zend/zend_language_scanner.c"
+#line 6543 "Zend/zend_language_scanner.c"
yy704:
YYDEBUG(704, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6622,11 +6619,11 @@ yy715:
}
YYDEBUG(716, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1284 "Zend/zend_language_scanner.l"
+#line 1286 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_EXTENDS);
}
-#line 6630 "Zend/zend_language_scanner.c"
+#line 6627 "Zend/zend_language_scanner.c"
yy717:
YYDEBUG(717, *YYCURSOR);
++YYCURSOR;
@@ -6635,11 +6632,11 @@ yy717:
}
YYDEBUG(718, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1132 "Zend/zend_language_scanner.l"
+#line 1134 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_EXIT);
}
-#line 6643 "Zend/zend_language_scanner.c"
+#line 6640 "Zend/zend_language_scanner.c"
yy719:
YYDEBUG(719, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6653,11 +6650,11 @@ yy720:
}
YYDEBUG(721, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1374 "Zend/zend_language_scanner.l"
+#line 1376 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_EVAL);
}
-#line 6661 "Zend/zend_language_scanner.c"
+#line 6658 "Zend/zend_language_scanner.c"
yy722:
YYDEBUG(722, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6727,11 +6724,11 @@ yy731:
}
YYDEBUG(732, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1196 "Zend/zend_language_scanner.l"
+#line 1198 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ENDWHILE);
}
-#line 6735 "Zend/zend_language_scanner.c"
+#line 6732 "Zend/zend_language_scanner.c"
yy733:
YYDEBUG(733, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6760,11 +6757,11 @@ yy737:
}
YYDEBUG(738, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1240 "Zend/zend_language_scanner.l"
+#line 1242 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ENDSWITCH);
}
-#line 6768 "Zend/zend_language_scanner.c"
+#line 6765 "Zend/zend_language_scanner.c"
yy739:
YYDEBUG(739, *YYCURSOR);
++YYCURSOR;
@@ -6773,11 +6770,11 @@ yy739:
}
YYDEBUG(740, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1184 "Zend/zend_language_scanner.l"
+#line 1186 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ENDIF);
}
-#line 6781 "Zend/zend_language_scanner.c"
+#line 6778 "Zend/zend_language_scanner.c"
yy741:
YYDEBUG(741, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6806,11 +6803,11 @@ yy742:
yy743:
YYDEBUG(743, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1208 "Zend/zend_language_scanner.l"
+#line 1210 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ENDFOR);
}
-#line 6814 "Zend/zend_language_scanner.c"
+#line 6811 "Zend/zend_language_scanner.c"
yy744:
YYDEBUG(744, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6834,11 +6831,11 @@ yy747:
}
YYDEBUG(748, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1216 "Zend/zend_language_scanner.l"
+#line 1218 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ENDFOREACH);
}
-#line 6842 "Zend/zend_language_scanner.c"
+#line 6839 "Zend/zend_language_scanner.c"
yy749:
YYDEBUG(749, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6872,11 +6869,11 @@ yy754:
}
YYDEBUG(755, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1224 "Zend/zend_language_scanner.l"
+#line 1226 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ENDDECLARE);
}
-#line 6880 "Zend/zend_language_scanner.c"
+#line 6877 "Zend/zend_language_scanner.c"
yy756:
YYDEBUG(756, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6895,11 +6892,11 @@ yy758:
}
YYDEBUG(759, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1414 "Zend/zend_language_scanner.l"
+#line 1416 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_EMPTY);
}
-#line 6903 "Zend/zend_language_scanner.c"
+#line 6900 "Zend/zend_language_scanner.c"
yy760:
YYDEBUG(760, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6928,11 +6925,11 @@ yy761:
yy762:
YYDEBUG(762, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1188 "Zend/zend_language_scanner.l"
+#line 1190 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ELSE);
}
-#line 6936 "Zend/zend_language_scanner.c"
+#line 6933 "Zend/zend_language_scanner.c"
yy763:
YYDEBUG(763, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6946,11 +6943,11 @@ yy764:
}
YYDEBUG(765, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1180 "Zend/zend_language_scanner.l"
+#line 1182 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ELSEIF);
}
-#line 6954 "Zend/zend_language_scanner.c"
+#line 6951 "Zend/zend_language_scanner.c"
yy766:
YYDEBUG(766, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6964,11 +6961,11 @@ yy767:
}
YYDEBUG(768, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1264 "Zend/zend_language_scanner.l"
+#line 1266 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_ECHO);
}
-#line 6972 "Zend/zend_language_scanner.c"
+#line 6969 "Zend/zend_language_scanner.c"
}
/* *********************************** */
yyc_ST_LOOKING_FOR_PROPERTY:
@@ -7041,12 +7038,12 @@ yy771:
yy772:
YYDEBUG(772, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1297 "Zend/zend_language_scanner.l"
+#line 1299 "Zend/zend_language_scanner.l"
{
HANDLE_NEWLINES(yytext, yyleng);
RETURN_TOKEN(T_WHITESPACE);
}
-#line 7050 "Zend/zend_language_scanner.c"
+#line 7047 "Zend/zend_language_scanner.c"
yy773:
YYDEBUG(773, *YYCURSOR);
++YYCURSOR;
@@ -7054,13 +7051,13 @@ yy773:
yy774:
YYDEBUG(774, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1312 "Zend/zend_language_scanner.l"
+#line 1314 "Zend/zend_language_scanner.l"
{
yyless(0);
yy_pop_state();
goto restart;
}
-#line 7064 "Zend/zend_language_scanner.c"
+#line 7061 "Zend/zend_language_scanner.c"
yy775:
YYDEBUG(775, *YYCURSOR);
++YYCURSOR;
@@ -7069,13 +7066,13 @@ yy775:
yy776:
YYDEBUG(776, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1306 "Zend/zend_language_scanner.l"
+#line 1308 "Zend/zend_language_scanner.l"
{
yy_pop_state();
zend_copy_value(zendlval, yytext, yyleng);
RETURN_TOKEN(T_STRING);
}
-#line 7079 "Zend/zend_language_scanner.c"
+#line 7076 "Zend/zend_language_scanner.c"
yy777:
YYDEBUG(777, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7096,11 +7093,11 @@ yy780:
++YYCURSOR;
YYDEBUG(781, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1302 "Zend/zend_language_scanner.l"
+#line 1304 "Zend/zend_language_scanner.l"
{
RETURN_TOKEN(T_OBJECT_OPERATOR);
}
-#line 7104 "Zend/zend_language_scanner.c"
+#line 7101 "Zend/zend_language_scanner.c"
yy782:
YYDEBUG(782, *YYCURSOR);
++YYCURSOR;
@@ -7185,14 +7182,14 @@ yy786:
yy787:
YYDEBUG(787, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1617 "Zend/zend_language_scanner.l"
+#line 1619 "Zend/zend_language_scanner.l"
{
yyless(0);
yy_pop_state();
yy_push_state(ST_IN_SCRIPTING);
goto restart;
}
-#line 7196 "Zend/zend_language_scanner.c"
+#line 7193 "Zend/zend_language_scanner.c"
yy788:
YYDEBUG(788, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7217,7 +7214,7 @@ yy792:
++YYCURSOR;
YYDEBUG(793, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1608 "Zend/zend_language_scanner.l"
+#line 1610 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 1);
zend_copy_value(zendlval, yytext, yyleng);
@@ -7225,7 +7222,7 @@ yy792:
yy_push_state(ST_IN_SCRIPTING);
RETURN_TOKEN(T_STRING_VARNAME);
}
-#line 7229 "Zend/zend_language_scanner.c"
+#line 7226 "Zend/zend_language_scanner.c"
}
/* *********************************** */
yyc_ST_NOWDOC:
@@ -7236,7 +7233,7 @@ yyc_ST_NOWDOC:
++YYCURSOR;
YYDEBUG(797, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2341 "Zend/zend_language_scanner.l"
+#line 2338 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -7292,7 +7289,7 @@ nowdoc_scan_done:
HANDLE_NEWLINES(yytext, yyleng - newline);
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
-#line 7296 "Zend/zend_language_scanner.c"
+#line 7293 "Zend/zend_language_scanner.c"
/* *********************************** */
yyc_ST_VAR_OFFSET:
{
@@ -7399,7 +7396,7 @@ yy800:
yy801:
YYDEBUG(801, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1722 "Zend/zend_language_scanner.l"
+#line 1727 "Zend/zend_language_scanner.l"
{ /* Offset could be treated as a long */
if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) {
char *end;
@@ -7415,7 +7412,7 @@ string:
}
RETURN_TOKEN(T_NUM_STRING);
}
-#line 7419 "Zend/zend_language_scanner.c"
+#line 7416 "Zend/zend_language_scanner.c"
yy802:
YYDEBUG(802, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7435,23 +7432,23 @@ yy803:
yy804:
YYDEBUG(804, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1882 "Zend/zend_language_scanner.l"
+#line 1887 "Zend/zend_language_scanner.l"
{
/* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
RETURN_TOKEN(yytext[0]);
}
-#line 7444 "Zend/zend_language_scanner.c"
+#line 7441 "Zend/zend_language_scanner.c"
yy805:
YYDEBUG(805, *YYCURSOR);
++YYCURSOR;
YYDEBUG(806, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1877 "Zend/zend_language_scanner.l"
+#line 1882 "Zend/zend_language_scanner.l"
{
yy_pop_state();
RETURN_TOKEN(']');
}
-#line 7455 "Zend/zend_language_scanner.c"
+#line 7452 "Zend/zend_language_scanner.c"
yy807:
YYDEBUG(807, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7461,7 +7458,7 @@ yy808:
++YYCURSOR;
YYDEBUG(809, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1887 "Zend/zend_language_scanner.l"
+#line 1892 "Zend/zend_language_scanner.l"
{
/* Invalid rule to return a more explicit parse error with proper line number */
yyless(0);
@@ -7469,7 +7466,7 @@ yy808:
ZVAL_NULL(zendlval);
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
-#line 7473 "Zend/zend_language_scanner.c"
+#line 7470 "Zend/zend_language_scanner.c"
yy810:
YYDEBUG(810, *YYCURSOR);
++YYCURSOR;
@@ -7478,18 +7475,18 @@ yy810:
yy811:
YYDEBUG(811, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1895 "Zend/zend_language_scanner.l"
+#line 1900 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, yytext, yyleng);
RETURN_TOKEN(T_STRING);
}
-#line 7487 "Zend/zend_language_scanner.c"
+#line 7484 "Zend/zend_language_scanner.c"
yy812:
YYDEBUG(812, *YYCURSOR);
++YYCURSOR;
YYDEBUG(813, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2398 "Zend/zend_language_scanner.l"
+#line 2395 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
RETURN_TOKEN(END);
@@ -7498,7 +7495,7 @@ yy812:
zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
goto restart;
}
-#line 7502 "Zend/zend_language_scanner.c"
+#line 7499 "Zend/zend_language_scanner.c"
yy814:
YYDEBUG(814, *YYCURSOR);
++YYCURSOR;
@@ -7534,12 +7531,12 @@ yy816:
yy818:
YYDEBUG(818, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1872 "Zend/zend_language_scanner.l"
+#line 1877 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
}
-#line 7543 "Zend/zend_language_scanner.c"
+#line 7540 "Zend/zend_language_scanner.c"
yy819:
YYDEBUG(819, *YYCURSOR);
++YYCURSOR;
@@ -7579,12 +7576,12 @@ yy824:
yy826:
YYDEBUG(826, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1738 "Zend/zend_language_scanner.l"
+#line 1743 "Zend/zend_language_scanner.l"
{ /* Offset must be treated as a string */
ZVAL_STRINGL(zendlval, yytext, yyleng);
RETURN_TOKEN(T_NUM_STRING);
}
-#line 7588 "Zend/zend_language_scanner.c"
+#line 7585 "Zend/zend_language_scanner.c"
yy827:
YYDEBUG(827, *YYCURSOR);
++YYCURSOR;
@@ -7607,6 +7604,6 @@ yy829:
goto yy826;
}
}
-#line 2407 "Zend/zend_language_scanner.l"
+#line 2404 "Zend/zend_language_scanner.l"
}
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index a20f7d57f6..47958b7182 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1009,8 +1009,9 @@ static int zend_scan_escape_string(zval *zendlval, char *str, int len, char quot
if (!valid) {
zend_throw_exception(zend_ce_parse_error,
- "Invalid UTF-8 codepoint escape sequence", E_PARSE);
+ "Invalid UTF-8 codepoint escape sequence", 0);
zval_ptr_dtor(zendlval);
+ ZVAL_UNDEF(zendlval);
return FAILURE;
}
@@ -1020,8 +1021,9 @@ static int zend_scan_escape_string(zval *zendlval, char *str, int len, char quot
/* per RFC 3629, UTF-8 can only represent 21 bits */
if (codepoint > 0x10FFFF || errno) {
zend_throw_exception(zend_ce_parse_error,
- "Invalid UTF-8 codepoint escape sequence: Codepoint too large", E_PARSE);
+ "Invalid UTF-8 codepoint escape sequence: Codepoint too large", 0);
zval_ptr_dtor(zendlval);
+ ZVAL_UNDEF(zendlval);
return FAILURE;
}
@@ -1658,8 +1660,9 @@ NEWLINE ("\r"|"\n"|"\r\n")
* Because the lexing itself doesn't do that for us
*/
if (end != yytext + yyleng) {
- zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", E_PARSE);
- RETURN_TOKEN(T_ERROR);
+ zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0);
+ ZVAL_UNDEF(zendlval);
+ RETURN_TOKEN(T_LNUMBER);
}
} else {
errno = 0;
@@ -1675,16 +1678,18 @@ NEWLINE ("\r"|"\n"|"\r\n")
/* Also not an assert for the same reason */
if (end != yytext + yyleng) {
zend_throw_exception(zend_ce_parse_error,
- "Invalid numeric literal", E_PARSE);
- RETURN_TOKEN(T_ERROR);
+ "Invalid numeric literal", 0);
+ ZVAL_UNDEF(zendlval);
+ RETURN_TOKEN(T_DNUMBER);
}
ZEND_ASSERT(!errno);
RETURN_TOKEN(T_DNUMBER);
}
/* Also not an assert for the same reason */
if (end != yytext + yyleng) {
- zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", E_PARSE);
- RETURN_TOKEN(T_ERROR);
+ zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0);
+ ZVAL_UNDEF(zendlval);
+ RETURN_TOKEN(T_DNUMBER);
}
}
ZEND_ASSERT(!errno);
@@ -2042,9 +2047,7 @@ inline_char_handler:
switch (*YYCURSOR++) {
case '"':
yyleng = YYCURSOR - SCNG(yy_text);
- if (zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"') == FAILURE) {
- RETURN_TOKEN(T_ERROR);
- }
+ zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"');
RETURN_TOKEN(T_CONSTANT_ENCAPSED_STRING);
case '$':
if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
@@ -2211,9 +2214,7 @@ inline_char_handler:
double_quotes_scan_done:
yyleng = YYCURSOR - SCNG(yy_text);
- if (zend_scan_escape_string(zendlval, yytext, yyleng, '"') == FAILURE) {
- RETURN_TOKEN(T_ERROR);
- }
+ zend_scan_escape_string(zendlval, yytext, yyleng, '"');
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
@@ -2255,9 +2256,7 @@ double_quotes_scan_done:
yyleng = YYCURSOR - SCNG(yy_text);
- if (zend_scan_escape_string(zendlval, yytext, yyleng, '`') == FAILURE) {
- RETURN_TOKEN(T_ERROR);
- }
+ zend_scan_escape_string(zendlval, yytext, yyleng, '`');
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
@@ -2331,9 +2330,7 @@ double_quotes_scan_done:
heredoc_scan_done:
yyleng = YYCURSOR - SCNG(yy_text);
- if (zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0) == FAILURE) {
- RETURN_TOKEN(T_ERROR);
- }
+ zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0);
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
index 261489b4a1..e38246ee87 100644
--- a/Zend/zend_list.c
+++ b/Zend/zend_list.c
@@ -102,12 +102,14 @@ ZEND_API zend_resource* zend_register_resource(void *rsrc_pointer, int rsrc_type
ZEND_API void *zend_fetch_resource2(zend_resource *res, const char *resource_type_name, int resource_type1, int resource_type2)
{
- if (resource_type1 == res->type) {
- return res->ptr;
- }
+ if (res) {
+ if (resource_type1 == res->type) {
+ return res->ptr;
+ }
- if (resource_type2 == res->type) {
- return res->ptr;
+ if (resource_type2 == res->type) {
+ return res->ptr;
+ }
}
if (resource_type_name) {
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index 64c2620bf3..77916f25a3 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -1760,7 +1760,7 @@ static inline void zend_free_obj_get_result(zval *op) /* {{{ */
}
/* }}} */
-static zend_always_inline int i_compare_function(zval *result, zval *op1, zval *op2) /* {{{ */
+ZEND_API int ZEND_FASTCALL compare_function(zval *result, zval *op1, zval *op2) /* {{{ */
{
int ret;
int converted = 0;
@@ -1942,15 +1942,9 @@ static zend_always_inline int i_compare_function(zval *result, zval *op1, zval *
}
/* }}} */
-ZEND_API int ZEND_FASTCALL compare_function(zval *result, zval *op1, zval *op2) /* {{{ */
-{
- return i_compare_function(result, op1, op2);
-}
-/* }}} */
-
ZEND_API int zval_compare_function(zval *result, zval *op1, zval *op2) /* {{{ */
{
- return i_compare_function(result, op1, op2);
+ return compare_function(result, op1, op2);
}
/* }}} */
@@ -2888,7 +2882,7 @@ static zend_always_inline void zend_memnstr_ex_pre(unsigned int td[], const char
}
/* }}} */
-ZEND_API const char* ZEND_FASTCALL zend_memnstr_ex(const char *haystack, const char *needle, size_t needle_len, char *end) /* {{{ */
+ZEND_API const char* ZEND_FASTCALL zend_memnstr_ex(const char *haystack, const char *needle, size_t needle_len, const char *end) /* {{{ */
{
unsigned int td[256];
register size_t i;
@@ -2919,7 +2913,7 @@ ZEND_API const char* ZEND_FASTCALL zend_memnstr_ex(const char *haystack, const c
}
/* }}} */
-ZEND_API const char* ZEND_FASTCALL zend_memnrstr_ex(const char *haystack, const char *needle, size_t needle_len, char *end) /* {{{ */
+ZEND_API const char* ZEND_FASTCALL zend_memnrstr_ex(const char *haystack, const char *needle, size_t needle_len, const char *end) /* {{{ */
{
unsigned int td[256];
register size_t i;
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
index 541d6f978f..21bf9dd67f 100644
--- a/Zend/zend_operators.h
+++ b/Zend/zend_operators.h
@@ -89,8 +89,8 @@ ZEND_API zend_bool ZEND_FASTCALL instanceof_function(const zend_class_entry *ins
*/
ZEND_API zend_uchar ZEND_FASTCALL _is_numeric_string_ex(const char *str, size_t length, zend_long *lval, double *dval, int allow_errors, int *oflow_info);
-ZEND_API const char* ZEND_FASTCALL zend_memnstr_ex(const char *haystack, const char *needle, size_t needle_len, char *end);
-ZEND_API const char* ZEND_FASTCALL zend_memnrstr_ex(const char *haystack, const char *needle, size_t needle_len, char *end);
+ZEND_API const char* ZEND_FASTCALL zend_memnstr_ex(const char *haystack, const char *needle, size_t needle_len, const char *end);
+ZEND_API const char* ZEND_FASTCALL zend_memnrstr_ex(const char *haystack, const char *needle, size_t needle_len, const char *end);
#if SIZEOF_ZEND_LONG == 4
# define ZEND_DOUBLE_FITS_LONG(d) (!((d) > ZEND_LONG_MAX || (d) < ZEND_LONG_MIN))
@@ -141,7 +141,7 @@ static zend_always_inline zend_uchar is_numeric_string(const char *str, size_t l
ZEND_API zend_uchar ZEND_FASTCALL is_numeric_str_function(const zend_string *str, zend_long *lval, double *dval);
static zend_always_inline const char *
-zend_memnstr(const char *haystack, const char *needle, size_t needle_len, char *end)
+zend_memnstr(const char *haystack, const char *needle, size_t needle_len, const char *end)
{
const char *p = haystack;
const char ne = needle[needle_len-1];
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h
index 214ece53e6..2464f48c0f 100644
--- a/Zend/zend_portability.h
+++ b/Zend/zend_portability.h
@@ -93,7 +93,7 @@
# define __has_builtin(x) 0
#endif
-#if defined(ZEND_WIN32)
+#if defined(ZEND_WIN32) && !defined(__clang__)
# define ZEND_ASSUME(c) __assume(c)
#elif ((defined(__GNUC__) && ZEND_GCC_VERSION >= 4005) || __has_builtin(__builtin_unreachable)) && PHP_HAVE_BUILTIN_EXPECT
# define ZEND_ASSUME(c) do { \
@@ -117,6 +117,12 @@
# define EMPTY_SWITCH_DEFAULT_CASE() default: ZEND_ASSUME(0); break;
#endif
+#if defined(__GNUC__) && __GNUC__ >= 4
+# define ZEND_IGNORE_VALUE(x) (({ __typeof__ (x) __x = (x); (void) __x; }))
+#else
+# define ZEND_IGNORE_VALUE(x) ((void) (x))
+#endif
+
/* all HAVE_XXX test have to be after the include of zend_config above */
#if defined(HAVE_LIBDL) && !defined(ZEND_WIN32)
@@ -219,7 +225,7 @@ char *alloca();
# define ZEND_FASTCALL __attribute__((fastcall))
#elif defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER == 1700
# define ZEND_FASTCALL __fastcall
-#elif defined(_MSC_VER) && _MSC_VER >= 1800
+#elif defined(_MSC_VER) && _MSC_VER >= 1800 && !defined(__clang__)
# define ZEND_FASTCALL __vectorcall
#else
# define ZEND_FASTCALL
diff --git a/Zend/zend_types.h b/Zend/zend_types.h
index 7d7961cb10..c8fd149320 100644
--- a/Zend/zend_types.h
+++ b/Zend/zend_types.h
@@ -477,6 +477,9 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
#define Z_OPT_IMMUTABLE(zval) ((Z_TYPE_INFO(zval) & (IS_TYPE_IMMUTABLE << Z_TYPE_FLAGS_SHIFT)) != 0)
#define Z_OPT_IMMUTABLE_P(zval_p) Z_OPT_IMMUTABLE(*(zval_p))
+#define Z_OPT_ISREF(zval) (Z_OPT_TYPE(zval) == IS_REFERENCE)
+#define Z_OPT_ISREF_P(zval_p) Z_OPT_ISREF(*(zval_p))
+
#define Z_ISREF(zval) (Z_TYPE(zval) == IS_REFERENCE)
#define Z_ISREF_P(zval_p) Z_ISREF(*(zval_p))
@@ -871,6 +874,12 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) {
} \
} while (0)
+#define ZVAL_OPT_DEREF(z) do { \
+ if (UNEXPECTED(Z_OPT_ISREF_P(z))) { \
+ (z) = Z_REFVAL_P(z); \
+ } \
+ } while (0)
+
#define ZVAL_MAKE_REF(zv) do { \
zval *__zv = (zv); \
if (!Z_ISREF_P(__zv)) { \
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index b553a864a8..3000e5ddfe 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -65,8 +65,7 @@ ZEND_VM_HANDLER(1, ZEND_ADD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
add_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(2, ZEND_SUB, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -109,8 +108,7 @@ ZEND_VM_HANDLER(2, ZEND_SUB, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
sub_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(3, ZEND_MUL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -156,8 +154,7 @@ ZEND_VM_HANDLER(3, ZEND_MUL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
mul_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(4, ZEND_DIV, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -172,8 +169,7 @@ ZEND_VM_HANDLER(4, ZEND_DIV, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
fast_div_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(5, ZEND_MOD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -211,8 +207,7 @@ ZEND_VM_HANDLER(5, ZEND_MOD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
mod_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(6, ZEND_SL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -227,8 +222,7 @@ ZEND_VM_HANDLER(6, ZEND_SL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
shift_left_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(7, ZEND_SR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -243,8 +237,7 @@ ZEND_VM_HANDLER(7, ZEND_SR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
shift_right_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -304,8 +297,7 @@ ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
FREE_OP1();
} while (0);
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(15, ZEND_IS_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
@@ -324,7 +316,7 @@ ZEND_VM_HANDLER(15, ZEND_IS_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
ZEND_VM_SMART_BRANCH(result, (OP1_TYPE|OP2_TYPE) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((OP1_TYPE|OP2_TYPE) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -345,7 +337,7 @@ ZEND_VM_HANDLER(16, ZEND_IS_NOT_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
ZEND_VM_SMART_BRANCH(result, (OP1_TYPE|OP2_TYPE) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((OP1_TYPE|OP2_TYPE) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -415,8 +407,7 @@ ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -484,8 +475,7 @@ ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(19, ZEND_IS_SMALLER, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -535,8 +525,7 @@ ZEND_VM_HANDLER(19, ZEND_IS_SMALLER, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(20, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -586,8 +575,7 @@ ZEND_VM_HANDLER(20, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(170, ZEND_SPACESHIP, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -602,8 +590,7 @@ ZEND_VM_HANDLER(170, ZEND_SPACESHIP, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
compare_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(9, ZEND_BW_OR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -618,8 +605,7 @@ ZEND_VM_HANDLER(9, ZEND_BW_OR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(10, ZEND_BW_AND, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -634,8 +620,7 @@ ZEND_VM_HANDLER(10, ZEND_BW_AND, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(11, ZEND_BW_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -650,8 +635,7 @@ ZEND_VM_HANDLER(11, ZEND_BW_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(14, ZEND_BOOL_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -666,8 +650,7 @@ ZEND_VM_HANDLER(14, ZEND_BOOL_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(12, ZEND_BW_NOT, CONST|TMPVAR|CV, ANY)
@@ -679,8 +662,7 @@ ZEND_VM_HANDLER(12, ZEND_BW_NOT, CONST|TMPVAR|CV, ANY)
bitwise_not_function(EX_VAR(opline->result.var),
GET_OP1_ZVAL_PTR(BP_VAR_R));
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(13, ZEND_BOOL_NOT, CONST|TMPVAR|CV, ANY)
@@ -693,17 +675,17 @@ ZEND_VM_HANDLER(13, ZEND_BOOL_NOT, CONST|TMPVAR|CV, ANY)
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_FALSE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
+ ZVAL_TRUE(EX_VAR(opline->result.var));
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- ZVAL_TRUE(EX_VAR(opline->result.var));
} else {
SAVE_OPLINE();
ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
FREE_OP1();
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -770,9 +752,7 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|
FREE_OP2();
FREE_OP1_VAR_PTR();
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
ZEND_VM_HELPER_EX(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV, binary_op_type binary_op)
@@ -843,9 +823,7 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMPVAR|
FREE_OP2();
FREE_OP(free_op_data1);
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
ZEND_VM_HELPER_EX(zend_binary_assign_op_helper, VAR|CV, CONST|TMPVAR|CV, binary_op_type binary_op)
@@ -882,8 +860,7 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_helper, VAR|CV, CONST|TMPVAR|CV, binary_
FREE_OP2();
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(23, ZEND_ASSIGN_ADD, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
@@ -1174,8 +1151,7 @@ ZEND_VM_HELPER_EX(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|C
FREE_OP2();
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -1252,8 +1228,7 @@ ZEND_VM_HELPER_EX(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|
FREE_OP2();
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -1309,8 +1284,7 @@ ZEND_VM_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY)
}
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY)
@@ -1356,8 +1330,7 @@ ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY)
}
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY)
@@ -1396,8 +1369,7 @@ ZEND_VM_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY)
increment_function(var_ptr);
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY)
@@ -1436,8 +1408,7 @@ ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY)
decrement_function(var_ptr);
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMPVAR|CV, ANY)
@@ -1467,8 +1438,7 @@ ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMPVAR|CV, ANY)
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED|CONST|VAR, int type)
@@ -1521,8 +1491,7 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED|CONST|V
zend_string_release(name);
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -1619,8 +1588,7 @@ ZEND_VM_C_LABEL(fetch_var_return):
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(80, ZEND_FETCH_R, CONST|TMPVAR|CV, UNUSED|CONST|VAR)
@@ -1670,8 +1638,7 @@ ZEND_VM_HANDLER(81, ZEND_FETCH_DIM_R, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
FREE_OP2();
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMPVAR|UNUSED|CV)
@@ -1690,11 +1657,10 @@ ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMPVAR|UNUSED|CV)
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMPVAR|UNUSED|CV)
@@ -1713,11 +1679,10 @@ ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMPVAR|UNUSED|CV)
zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(90, ZEND_FETCH_DIM_IS, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -1731,8 +1696,7 @@ ZEND_VM_HANDLER(90, ZEND_FETCH_DIM_IS, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
FREE_OP2();
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|CV)
@@ -1758,7 +1722,7 @@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUS
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
FREE_OP2();
FREE_OP1_VAR_PTR();
@@ -1774,8 +1738,7 @@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUS
FREE_OP2();
FREE_OP1();
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMPVAR|CV)
@@ -1795,11 +1758,10 @@ ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMPVAR|CV)
zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMP|VAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -1872,8 +1834,7 @@ ZEND_VM_C_LABEL(fetch_obj_r_no_object):
FREE_OP2();
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -1901,11 +1862,10 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|CV, CONST|TMPVAR|CV)
zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -1932,11 +1892,10 @@ ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|CV, CONST|TMPVAR|CV)
zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -2009,8 +1968,7 @@ ZEND_VM_C_LABEL(fetch_obj_is_no_object):
FREE_OP2();
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -2046,11 +2004,10 @@ ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|CV, CONST|TMPV
zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_OBJ_R);
}
@@ -2081,11 +2038,10 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|CV, CONST|TMPVAR|CV)
zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(98, ZEND_FETCH_LIST, CONST|TMPVAR|CV, CONST)
@@ -2129,8 +2085,7 @@ ZEND_VM_C_LABEL(try_fetch_list):
}
ZVAL_NULL(EX_VAR(opline->result.var));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -2160,9 +2115,7 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|CV, CONST|TMPVAR|CV)
FREE_OP2();
FREE_OP1_VAR_PTR();
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
ZEND_VM_HANDLER(147, ZEND_ASSIGN_DIM, VAR|CV, CONST|TMPVAR|UNUSED|CV)
@@ -2268,9 +2221,7 @@ ZEND_VM_C_LABEL(assign_dim_clean):
}
FREE_OP1_VAR_PTR();
/* assign_dim has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
ZEND_VM_HANDLER(38, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV)
@@ -2298,8 +2249,7 @@ ZEND_VM_HANDLER(38, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV)
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV)
@@ -2317,12 +2267,19 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV)
FREE_UNFETCHED_OP1();
HANDLE_EXCEPTION();
}
+ if (OP1_TYPE == IS_VAR &&
+ UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
+ UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
+ zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
+ FREE_OP2_VAR_PTR();
+ HANDLE_EXCEPTION();
+ }
if (OP2_TYPE == IS_VAR &&
(value_ptr == &EG(uninitialized_zval) ||
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
- if (!OP2_FREE) {
- PZVAL_LOCK(value_ptr); /* undo the effect of get_zval_ptr_ptr() */
+ if (!OP2_FREE && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op2.var)) != IS_INDIRECT)) { /* undo the effect of get_zval_ptr_ptr() */
+ Z_TRY_ADDREF_P(value_ptr);
}
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -2338,14 +2295,6 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV)
FREE_OP2_VAR_PTR();
HANDLE_EXCEPTION();
}
- if (OP1_TYPE == IS_VAR &&
- UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
- UNEXPECTED(!Z_ISREF_P(variable_ptr))) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- FREE_OP2_VAR_PTR();
- FREE_OP1_VAR_PTR();
- HANDLE_EXCEPTION();
- }
if ((OP1_TYPE == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
(OP2_TYPE == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
variable_ptr = &EG(uninitialized_zval);
@@ -2360,8 +2309,7 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV)
FREE_OP1_VAR_PTR();
FREE_OP2_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
@@ -2412,8 +2360,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
HANDLE_EXCEPTION_LEAVE();
}
- LOAD_OPLINE();
- ZEND_VM_INC_OPCODE();
+ LOAD_NEXT_OPLINE();
ZEND_VM_LEAVE();
} else if (ZEND_CALL_KIND_EX(call_info) == ZEND_CALL_NESTED_CODE) {
zend_detach_symbol_table(execute_data);
@@ -2429,8 +2376,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
HANDLE_EXCEPTION_LEAVE();
}
- LOAD_OPLINE();
- ZEND_VM_INC_OPCODE();
+ LOAD_NEXT_OPLINE();
ZEND_VM_LEAVE();
} else {
if (ZEND_CALL_KIND_EX(call_info) == ZEND_CALL_TOP_FUNCTION) {
@@ -2484,11 +2430,9 @@ ZEND_VM_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, ANY)
ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if (OP1_TYPE == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- }
+ if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
@@ -2521,16 +2465,12 @@ ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, ANY)
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if (OP1_TYPE == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
- }
- ZEND_VM_NEXT_OPCODE();
+ if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
}
}
@@ -2642,16 +2582,12 @@ ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, ANY)
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
- if (OP1_TYPE == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
- }
- ZEND_VM_NEXT_OPCODE();
+ if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
}
}
@@ -2673,12 +2609,14 @@ ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, ANY)
ZEND_VM_HANDLER(70, ZEND_FREE, TMPVAR, ANY)
{
+ zval *var;
USE_OPLINE
SAVE_OPLINE();
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ var = EX_VAR(opline->op1.var);
+ zval_ptr_dtor_nogc(var);
+ ZVAL_NULL(var);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(127, ZEND_FE_FREE, TMPVAR, ANY)
@@ -2690,10 +2628,11 @@ ZEND_VM_HANDLER(127, ZEND_FE_FREE, TMPVAR, ANY)
var = EX_VAR(opline->op1.var);
if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) {
zend_hash_iterator_del(Z_FE_ITER_P(var));
+ Z_FE_ITER_P(var) = (uint32_t)-1;
}
zval_ptr_dtor_nogc(var);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZVAL_NULL(var);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
@@ -2760,8 +2699,7 @@ ZEND_VM_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
} while (0);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(54, ZEND_ROPE_INIT, UNUSED, CONST|TMPVAR|CV)
@@ -2791,7 +2729,7 @@ ZEND_VM_HANDLER(54, ZEND_ROPE_INIT, UNUSED, CONST|TMPVAR|CV)
}
rope[0] = _zval_get_string_func(var);
FREE_OP2();
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -2824,7 +2762,7 @@ ZEND_VM_HANDLER(55, ZEND_ROPE_ADD, TMP, CONST|TMPVAR|CV)
}
rope[opline->extended_value] = _zval_get_string_func(var);
FREE_OP2();
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -2888,13 +2826,9 @@ ZEND_VM_HANDLER(109, ZEND_FETCH_CLASS, ANY, CONST|TMPVAR|UNUSED|CV)
USE_OPLINE
SAVE_OPLINE();
- if (EG(exception)) {
- zend_exception_save();
- }
if (OP2_TYPE == IS_UNUSED) {
Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_free_op free_op2;
zval *class_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
@@ -2925,8 +2859,7 @@ ZEND_VM_C_LABEL(try_class_name):
}
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -3048,8 +2981,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR
FREE_OP2();
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, CONST|VAR, CONST|TMPVAR|UNUSED|CV)
@@ -3181,8 +3113,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, CONST|VAR, CONST|TMPVAR|UNUSE
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST)
@@ -3246,8 +3177,7 @@ ZEND_VM_C_LABEL(try_function_name):
called_scope = zend_fetch_class_by_name(lcname, NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(called_scope == NULL)) {
zend_string_release(lcname);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
mname = zend_string_init(Z_STRVAL_P(function_name) + (cname_length + sizeof("::") - 1), mname_length, 0);
@@ -3346,8 +3276,7 @@ ZEND_VM_C_LABEL(try_function_name):
object = NULL;
called_scope = zend_fetch_class_by_name(Z_STR_P(obj), NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(called_scope == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (called_scope->get_static_method) {
@@ -3416,8 +3345,7 @@ ZEND_VM_C_LABEL(try_function_name):
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV)
@@ -3473,8 +3401,7 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV)
EX(call) = call;
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST)
@@ -3960,8 +3887,7 @@ ZEND_VM_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV, UNUSED)
}
#endif
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY)
@@ -4268,13 +4194,16 @@ ZEND_VM_HANDLER(117, ZEND_SEND_VAR, VAR|CV, ANY)
varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
- varptr = GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
+ arg = ZEND_CALL_VAR(EX(call), opline->result.var);
+ ZVAL_NULL(arg);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (OP1_TYPE == IS_CV) {
- ZVAL_DEREF(varptr);
+ ZVAL_OPT_DEREF(varptr);
ZVAL_COPY(arg, varptr);
} else /* if (OP1_TYPE == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
@@ -4295,7 +4224,7 @@ ZEND_VM_HANDLER(117, ZEND_SEND_VAR, VAR|CV, ANY)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR|CV, ANY)
+ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR, ANY)
{
USE_OPLINE
zend_free_op free_op1;
@@ -4307,27 +4236,22 @@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR|CV, ANY)
}
}
- varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
- if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
- SAVE_OPLINE();
- varptr = GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
- CHECK_EXCEPTION();
- }
+ varptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
+
if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
(Z_VAR_FLAGS_P(varptr) & IS_VAR_RET_REF)) &&
(Z_ISREF_P(varptr) || Z_TYPE_P(varptr) == IS_OBJECT)) {
ZVAL_MAKE_REF(varptr);
- if (OP1_TYPE == IS_CV) {
- Z_ADDREF_P(varptr);
- }
} else {
if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
!(opline->extended_value & ZEND_ARG_SEND_SILENT) :
!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
SAVE_OPLINE();
zend_error(E_NOTICE, "Only variables should be passed by reference");
- CHECK_EXCEPTION();
+ arg = ZEND_CALL_VAR(EX(call), opline->result.var);
+ ZVAL_COPY_VALUE(arg, varptr);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -4391,13 +4315,16 @@ ZEND_VM_C_LABEL(send_var_by_ref):
varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
- varptr = GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
+ arg = ZEND_CALL_VAR(EX(call), opline->result.var);
+ ZVAL_NULL(arg);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (OP1_TYPE == IS_CV) {
- ZVAL_DEREF(varptr);
+ ZVAL_OPT_DEREF(varptr);
ZVAL_COPY(arg, varptr);
} else /* if (OP1_TYPE == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
@@ -4576,8 +4503,7 @@ ZEND_VM_C_LABEL(unpack_iter_dtor):
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(119, ZEND_SEND_ARRAY, ANY, ANY)
@@ -4678,8 +4604,7 @@ ZEND_VM_C_LABEL(send_array):
} ZEND_HASH_FOREACH_END();
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, ANY)
@@ -4715,8 +4640,7 @@ ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, ANY)
Z_OBJ(EX(call)->This) = NULL;
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZVAL_NEW_REF(arg, arg);
@@ -4735,8 +4659,7 @@ ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, ANY)
ZVAL_COPY_VALUE(param, arg);
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(63, ZEND_RECV, ANY, ANY)
@@ -4837,8 +4760,7 @@ ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, ANY, ANY)
array_init(params);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(52, ZEND_BOOL, CONST|TMPVAR|CV, ANY)
@@ -4851,17 +4773,17 @@ ZEND_VM_HANDLER(52, ZEND_BOOL, CONST|TMPVAR|CV, ANY)
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- ZVAL_FALSE(EX_VAR(opline->result.var));
} else {
SAVE_OPLINE();
ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
FREE_OP1();
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -4954,8 +4876,7 @@ ZEND_VM_HANDLER(48, ZEND_CASE, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(68, ZEND_NEW, CONST|VAR, ANY)
@@ -4972,8 +4893,7 @@ ZEND_VM_HANDLER(68, ZEND_NEW, CONST|VAR, ANY)
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
}
@@ -5008,8 +4928,7 @@ ZEND_VM_HANDLER(68, ZEND_NEW, CONST|VAR, ANY)
ZVAL_COPY(EX_VAR(opline->result.var), &object_zval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -5091,8 +5010,7 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|CV, ANY)
}
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, VAR|CONST|UNUSED, CONST)
@@ -5118,8 +5036,7 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, VAR|CONST|UNUSED, CONST)
/* non-qualified constant - allow text substitution */
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
HANDLE_EXCEPTION();
@@ -5300,8 +5217,7 @@ ZEND_VM_C_LABEL(num_index):
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
@@ -5391,8 +5307,7 @@ ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY)
}
FREE_OP1_IF_VAR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (opline->extended_value == IS_ARRAY) {
@@ -5435,8 +5350,7 @@ ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY)
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY)
@@ -5594,8 +5508,7 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED|CONST|VAR)
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
@@ -5646,8 +5559,7 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED|CONST|VAR)
zend_string_release(Z_STR(tmp));
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -5746,8 +5658,7 @@ ZEND_VM_C_LABEL(num_index_dim):
FREE_OP2();
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -5791,8 +5702,7 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|CV, CONST|TMPVAR|CV)
FREE_OP2();
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, ANY)
@@ -5814,8 +5724,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, ANY)
Z_FE_POS_P(result) = 0;
FREE_OP1_IF_VAR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
HashPosition pos = 0;
@@ -5848,8 +5757,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, ANY)
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
FREE_OP1_IF_VAR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
@@ -5890,8 +5798,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, ANY)
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -5959,8 +5866,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, ANY)
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
@@ -5995,8 +5901,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, ANY)
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
@@ -6053,8 +5958,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, ANY)
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -6503,8 +6407,7 @@ ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED|CONST|VAR)
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -6547,8 +6450,7 @@ ZEND_VM_C_LABEL(is_var_return):
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -6686,8 +6588,7 @@ ZEND_VM_C_LABEL(isset_dim_obj_exit):
FREE_OP1();
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR|CV)
@@ -6734,13 +6635,11 @@ ZEND_VM_C_LABEL(isset_no_object):
FREE_OP1();
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(79, ZEND_EXIT, CONST|TMPVAR|UNUSED|CV, ANY)
{
-#if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
USE_OPLINE
SAVE_OPLINE();
@@ -6764,7 +6663,6 @@ ZEND_VM_HANDLER(79, ZEND_EXIT, CONST|TMPVAR|UNUSED|CV, ANY)
} while (0);
FREE_OP1();
}
-#endif
zend_bailout();
ZEND_VM_NEXT_OPCODE(); /* Never reached */
}
@@ -6846,8 +6744,7 @@ ZEND_VM_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, ANY)
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, ANY)
@@ -6885,8 +6782,7 @@ ZEND_VM_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, ANY)
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(22, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY)
@@ -6898,8 +6794,9 @@ ZEND_VM_HANDLER(22, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY)
value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
SAVE_OPLINE();
- value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if ((OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) && Z_ISREF_P(value)) {
@@ -6924,30 +6821,36 @@ ZEND_VM_HANDLER(22, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY)
ZEND_VM_HANDLER(101, ZEND_EXT_STMT, ANY, ANY)
{
+ USE_OPLINE
+
if (!EG(no_extensions)) {
SAVE_OPLINE();
zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, EX(func));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(102, ZEND_EXT_FCALL_BEGIN, ANY, ANY)
{
+ USE_OPLINE
+
if (!EG(no_extensions)) {
SAVE_OPLINE();
zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, EX(func));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(103, ZEND_EXT_FCALL_END, ANY, ANY)
{
+ USE_OPLINE
+
if (!EG(no_extensions)) {
SAVE_OPLINE();
zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, EX(func));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -6958,8 +6861,7 @@ ZEND_VM_HANDLER(139, ZEND_DECLARE_CLASS, ANY, ANY)
SAVE_OPLINE();
Z_CE_P(EX_VAR(opline->result.var)) = do_bind_class(&EX(func)->op_array, opline, EG(class_table), 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(140, ZEND_DECLARE_INHERITED_CLASS, ANY, ANY)
@@ -6968,8 +6870,7 @@ ZEND_VM_HANDLER(140, ZEND_DECLARE_INHERITED_CLASS, ANY, ANY)
SAVE_OPLINE();
Z_CE_P(EX_VAR(opline->result.var)) = do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), Z_CE_P(EX_VAR(opline->extended_value)), 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(145, ZEND_DECLARE_INHERITED_CLASS_DELAYED, ANY, ANY)
@@ -6983,8 +6884,7 @@ ZEND_VM_HANDLER(145, ZEND_DECLARE_INHERITED_CLASS_DELAYED, ANY, ANY)
Z_CE_P(zce) != Z_CE_P(orig_zce))) {
do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), Z_CE_P(EX_VAR(opline->extended_value)), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(171, ZEND_DECLARE_ANON_CLASS, ANY, ANY)
@@ -7005,8 +6905,7 @@ ZEND_VM_HANDLER(171, ZEND_DECLARE_ANON_CLASS, ANY, ANY)
zend_verify_abstract_class(ce);
}
ce->ce_flags |= ZEND_ACC_ANON_BOUND;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(172, ZEND_DECLARE_ANON_INHERITED_CLASS, ANY, ANY)
@@ -7025,8 +6924,7 @@ ZEND_VM_HANDLER(172, ZEND_DECLARE_ANON_INHERITED_CLASS, ANY, ANY)
zend_do_inheritance(ce, Z_CE_P(EX_VAR(opline->extended_value)));
ce->ce_flags |= ZEND_ACC_ANON_BOUND;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(141, ZEND_DECLARE_FUNCTION, ANY, ANY)
@@ -7035,8 +6933,7 @@ ZEND_VM_HANDLER(141, ZEND_DECLARE_FUNCTION, ANY, ANY)
SAVE_OPLINE();
do_bind_function(&EX(func)->op_array, opline, EG(function_table), 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(105, ZEND_TICKS, ANY, ANY)
@@ -7048,7 +6945,7 @@ ZEND_VM_HANDLER(105, ZEND_TICKS, ANY, ANY)
if (zend_ticks_function) {
SAVE_OPLINE();
zend_ticks_function(opline->extended_value);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -7076,8 +6973,7 @@ ZEND_VM_C_LABEL(try_instanceof):
if (UNEXPECTED(ce == NULL)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -7097,17 +6993,20 @@ ZEND_VM_C_LABEL(try_instanceof):
FREE_OP1();
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(104, ZEND_EXT_NOP, ANY, ANY)
{
+ USE_OPLINE
+
ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(0, ZEND_NOP, ANY, ANY)
{
+ USE_OPLINE
+
ZEND_VM_NEXT_OPCODE();
}
@@ -7123,8 +7022,7 @@ ZEND_VM_HANDLER(144, ZEND_ADD_INTERFACE, ANY, CONST)
} else {
iface = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_INTERFACE);
if (UNEXPECTED(iface == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), iface);
}
@@ -7134,8 +7032,7 @@ ZEND_VM_HANDLER(144, ZEND_ADD_INTERFACE, ANY, CONST)
}
zend_do_implement_interface(ce, iface);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(154, ZEND_ADD_TRAIT, ANY, ANY)
@@ -7152,8 +7049,7 @@ ZEND_VM_HANDLER(154, ZEND_ADD_TRAIT, ANY, ANY)
EX_CONSTANT(opline->op2) + 1,
ZEND_FETCH_CLASS_TRAIT);
if (UNEXPECTED(trait == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (!(trait->ce_flags & ZEND_ACC_TRAIT)) {
zend_error_noreturn(E_ERROR, "%s cannot use %s - it is not a trait", ZSTR_VAL(ce->name), ZSTR_VAL(trait->name));
@@ -7163,8 +7059,7 @@ ZEND_VM_HANDLER(154, ZEND_ADD_TRAIT, ANY, ANY)
zend_do_implement_trait(ce, trait);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(155, ZEND_BIND_TRAITS, ANY, ANY)
@@ -7174,8 +7069,7 @@ ZEND_VM_HANDLER(155, ZEND_BIND_TRAITS, ANY, ANY)
SAVE_OPLINE();
zend_do_bind_traits(ce);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
@@ -7206,6 +7100,18 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
}
}
+ if (catch_op_num) {
+ if ((EX(func)->op_array.opcodes[op_num].opcode == ZEND_FREE && (EX(func)->op_array.opcodes[op_num].extended_value & ZEND_FREE_ON_RETURN))
+ || (EX(func)->op_array.opcodes[op_num].opcode == ZEND_FE_FREE && (EX(func)->op_array.opcodes[op_num].extended_value & ZEND_FREE_ON_RETURN))
+ ) {
+ /* exceptions thrown because of TMP variable destruction on "return"
+ * statement should't be caught in the same function.
+ * See: Zend/tests/try_finally_012.phpt
+ */
+ catch_op_num = 0;
+ }
+ }
+
i_cleanup_unfinished_execution(execute_data, op_num, catch_op_num);
if (finally_op_num && (!catch_op_num || catch_op_num >= finally_op_num)) {
@@ -7248,8 +7154,7 @@ ZEND_VM_HANDLER(146, ZEND_VERIFY_ABSTRACT_CLASS, ANY, ANY)
SAVE_OPLINE();
zend_verify_abstract_class(Z_CE_P(EX_VAR(opline->op1.var)));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY)
@@ -7317,8 +7222,7 @@ ZEND_VM_HANDLER(143, ZEND_DECLARE_CONST, CONST, CONST)
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED)
@@ -7340,8 +7244,7 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED)
EG(scope), EX(called_scope), Z_OBJ(EX(This)) ? &EX(This) : NULL);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(156, ZEND_SEPARATE, VAR, UNUSED)
@@ -7620,10 +7523,13 @@ ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ANY, ANY)
ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->op2.opline_num]);
ZEND_VM_CONTINUE();
}
- /* set no delayed exception */
- Z_OBJ_P(fast_call) = NULL;
- /* set return address */
- fast_call->u2.lineno = opline - EX(func)->op_array.opcodes;
+ if (opline->extended_value == ZEND_FAST_CALL_FROM_FINALLY && UNEXPECTED(Z_OBJ_P(fast_call) != NULL)) {
+ fast_call->u2.lineno = (uint32_t)-1;
+ } else {
+ Z_OBJ_P(fast_call) = NULL;
+ /* set return address */
+ fast_call->u2.lineno = opline - EX(func)->op_array.opcodes;
+ }
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op1));
ZEND_VM_CONTINUE();
}
@@ -7676,8 +7582,7 @@ ZEND_VM_HANDLER(166, ZEND_POW, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
pow_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
FREE_OP2();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(167, ZEND_ASSIGN_POW, VAR|CV, CONST|TMPVAR|CV)
@@ -7806,8 +7711,7 @@ ZEND_VM_C_LABEL(try_strlen):
} while (0);
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(123, ZEND_TYPE_CHECK, CONST|TMP|VAR|CV, ANY)
@@ -7843,8 +7747,7 @@ ZEND_VM_HANDLER(123, ZEND_TYPE_CHECK, CONST|TMP|VAR|CV, ANY)
FREE_OP1();
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(122, ZEND_DEFINED, CONST, ANY)
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index b04a54c1e3..130c2cf5ab 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -311,11 +311,11 @@ static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op*
#ifdef ZEND_VM_FP_GLOBAL_REG
-register zend_execute_data *execute_data __asm__(ZEND_VM_FP_GLOBAL_REG);
+register zend_execute_data* volatile execute_data __asm__(ZEND_VM_FP_GLOBAL_REG);
#endif
#ifdef ZEND_VM_IP_GLOBAL_REG
-register const zend_op *opline __asm__(ZEND_VM_IP_GLOBAL_REG);
+register const zend_op* volatile opline __asm__(ZEND_VM_IP_GLOBAL_REG);
#endif
#ifdef ZEND_VM_FP_GLOBAL_REG
@@ -348,23 +348,24 @@ typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_H
#undef DCL_OPLINE
#undef USE_OPLINE
#undef LOAD_OPLINE
+#undef LOAD_OPLINE_EX
#undef SAVE_OPLINE
#define DCL_OPLINE
#ifdef ZEND_VM_IP_GLOBAL_REG
# define OPLINE opline
# define USE_OPLINE
# define LOAD_OPLINE() opline = EX(opline)
+# define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
# define SAVE_OPLINE() EX(opline) = opline
#else
# define OPLINE EX(opline)
# define USE_OPLINE const zend_op *opline = EX(opline);
# define LOAD_OPLINE()
+# define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()
# define SAVE_OPLINE()
#endif
-#undef CHECK_EXCEPTION
#undef HANDLE_EXCEPTION
#undef HANDLE_EXCEPTION_LEAVE
-#define CHECK_EXCEPTION() LOAD_OPLINE()
#define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()
#define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()
#if defined(ZEND_VM_FP_GLOBAL_REG)
@@ -498,8 +499,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
HANDLE_EXCEPTION_LEAVE();
}
- LOAD_OPLINE();
- ZEND_VM_INC_OPCODE();
+ LOAD_NEXT_OPLINE();
ZEND_VM_LEAVE();
} else if (ZEND_CALL_KIND_EX(call_info) == ZEND_CALL_NESTED_CODE) {
zend_detach_symbol_table(execute_data);
@@ -515,8 +515,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
HANDLE_EXCEPTION_LEAVE();
}
- LOAD_OPLINE();
- ZEND_VM_INC_OPCODE();
+ LOAD_NEXT_OPLINE();
ZEND_VM_LEAVE();
} else {
if (ZEND_CALL_KIND_EX(call_info) == ZEND_CALL_TOP_FUNCTION) {
@@ -1091,8 +1090,7 @@ unpack_iter_dtor:
}
FREE_OP(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1193,8 +1191,7 @@ send_array:
} ZEND_HASH_FOREACH_END();
}
FREE_OP(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1256,8 +1253,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_HANDLER(ZEN
array_init(params);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1295,30 +1291,36 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEN
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
+ USE_OPLINE
+
if (!EG(no_extensions)) {
SAVE_OPLINE();
zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, EX(func));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
+ USE_OPLINE
+
if (!EG(no_extensions)) {
SAVE_OPLINE();
zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, EX(func));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
+ USE_OPLINE
+
if (!EG(no_extensions)) {
SAVE_OPLINE();
zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, EX(func));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -1329,8 +1331,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_HANDLER(ZEN
SAVE_OPLINE();
Z_CE_P(EX_VAR(opline->result.var)) = do_bind_class(&EX(func)->op_array, opline, EG(class_table), 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1339,8 +1340,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_SPEC_H
SAVE_OPLINE();
Z_CE_P(EX_VAR(opline->result.var)) = do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), Z_CE_P(EX_VAR(opline->extended_value)), 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1354,8 +1354,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_DELAYE
Z_CE_P(zce) != Z_CE_P(orig_zce))) {
do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), Z_CE_P(EX_VAR(opline->extended_value)), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1376,8 +1375,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLE
zend_verify_abstract_class(ce);
}
ce->ce_flags |= ZEND_ACC_ANON_BOUND;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1396,8 +1394,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_INHERITED_CLASS_S
zend_do_inheritance(ce, Z_CE_P(EX_VAR(opline->extended_value)));
ce->ce_flags |= ZEND_ACC_ANON_BOUND;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1406,8 +1403,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(
SAVE_OPLINE();
do_bind_function(&EX(func)->op_array, opline, EG(function_table), 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1419,7 +1415,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE
if (zend_ticks_function) {
SAVE_OPLINE();
zend_ticks_function(opline->extended_value);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -1427,11 +1423,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
+ USE_OPLINE
+
ZEND_VM_NEXT_OPCODE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
+ USE_OPLINE
+
ZEND_VM_NEXT_OPCODE();
}
@@ -1449,8 +1449,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OP
EX_CONSTANT(opline->op2) + 1,
ZEND_FETCH_CLASS_TRAIT);
if (UNEXPECTED(trait == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (!(trait->ce_flags & ZEND_ACC_TRAIT)) {
zend_error_noreturn(E_ERROR, "%s cannot use %s - it is not a trait", ZSTR_VAL(ce->name), ZSTR_VAL(trait->name));
@@ -1460,8 +1459,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OP
zend_do_implement_trait(ce, trait);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1471,8 +1469,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_
SAVE_OPLINE();
zend_do_bind_traits(ce);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1503,6 +1500,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(
}
}
+ if (catch_op_num) {
+ if ((EX(func)->op_array.opcodes[op_num].opcode == ZEND_FREE && (EX(func)->op_array.opcodes[op_num].extended_value & ZEND_FREE_ON_RETURN))
+ || (EX(func)->op_array.opcodes[op_num].opcode == ZEND_FE_FREE && (EX(func)->op_array.opcodes[op_num].extended_value & ZEND_FREE_ON_RETURN))
+ ) {
+ /* exceptions thrown because of TMP variable destruction on "return"
+ * statement should't be caught in the same function.
+ * See: Zend/tests/try_finally_012.phpt
+ */
+ catch_op_num = 0;
+ }
+ }
+
i_cleanup_unfinished_execution(execute_data, op_num, catch_op_num);
if (finally_op_num && (!catch_op_num || catch_op_num >= finally_op_num)) {
@@ -1545,8 +1554,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HAN
SAVE_OPLINE();
zend_verify_abstract_class(Z_CE_P(EX_VAR(opline->op1.var)));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -1607,10 +1615,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OP
ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->op2.opline_num]);
ZEND_VM_CONTINUE();
}
- /* set no delayed exception */
- Z_OBJ_P(fast_call) = NULL;
- /* set return address */
- fast_call->u2.lineno = opline - EX(func)->op_array.opcodes;
+ if (opline->extended_value == ZEND_FAST_CALL_FROM_FINALLY && UNEXPECTED(Z_OBJ_P(fast_call) != NULL)) {
+ fast_call->u2.lineno = (uint32_t)-1;
+ } else {
+ Z_OBJ_P(fast_call) = NULL;
+ /* set return address */
+ fast_call->u2.lineno = opline - EX(func)->op_array.opcodes;
+ }
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op1));
ZEND_VM_CONTINUE();
}
@@ -1847,13 +1858,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_CONST_HANDLER
USE_OPLINE
SAVE_OPLINE();
- if (EG(exception)) {
- zend_exception_save();
- }
if (IS_CONST == IS_UNUSED) {
Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zval *class_name = EX_CONSTANT(opline->op2);
@@ -1883,8 +1890,7 @@ try_class_name:
zend_throw_error(NULL, "Class name must be a valid object or a string");
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -1949,8 +1955,7 @@ try_function_name:
called_scope = zend_fetch_class_by_name(lcname, NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(called_scope == NULL)) {
zend_string_release(lcname);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
mname = zend_string_init(Z_STRVAL_P(function_name) + (cname_length + sizeof("::") - 1), mname_length, 0);
@@ -2049,8 +2054,7 @@ try_function_name:
object = NULL;
called_scope = zend_fetch_class_by_name(Z_STR_P(obj), NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(called_scope == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (called_scope->get_static_method) {
@@ -2119,8 +2123,7 @@ try_function_name:
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -2262,8 +2265,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_INTERFACE_SPEC_CONST_HANDL
} else {
iface = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_INTERFACE);
if (UNEXPECTED(iface == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), iface);
}
@@ -2273,8 +2275,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_INTERFACE_SPEC_CONST_HANDL
}
zend_do_implement_interface(ce, iface);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -2282,13 +2283,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLE
USE_OPLINE
SAVE_OPLINE();
- if (EG(exception)) {
- zend_exception_save();
- }
if (IS_UNUSED == IS_UNUSED) {
Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zval *class_name = NULL;
@@ -2318,8 +2315,7 @@ try_class_name:
zend_throw_error(NULL, "Class name must be a valid object or a string");
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -2328,13 +2324,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_CV_HANDLER(ZE
USE_OPLINE
SAVE_OPLINE();
- if (EG(exception)) {
- zend_exception_save();
- }
if (IS_CV == IS_UNUSED) {
Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zval *class_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
@@ -2364,8 +2356,7 @@ try_class_name:
zend_throw_error(NULL, "Class name must be a valid object or a string");
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -2402,8 +2393,7 @@ try_function_name:
called_scope = zend_fetch_class_by_name(lcname, NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(called_scope == NULL)) {
zend_string_release(lcname);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
mname = zend_string_init(Z_STRVAL_P(function_name) + (cname_length + sizeof("::") - 1), mname_length, 0);
@@ -2502,8 +2492,7 @@ try_function_name:
object = NULL;
called_scope = zend_fetch_class_by_name(Z_STR_P(obj), NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(called_scope == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (called_scope->get_static_method) {
@@ -2572,8 +2561,7 @@ try_function_name:
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -2581,13 +2569,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLE
USE_OPLINE
SAVE_OPLINE();
- if (EG(exception)) {
- zend_exception_save();
- }
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_free_op free_op2;
zval *class_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
@@ -2618,8 +2602,7 @@ try_class_name:
}
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -2656,8 +2639,7 @@ try_function_name:
called_scope = zend_fetch_class_by_name(lcname, NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(called_scope == NULL)) {
zend_string_release(lcname);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
mname = zend_string_init(Z_STRVAL_P(function_name) + (cname_length + sizeof("::") - 1), mname_length, 0);
@@ -2756,8 +2738,7 @@ try_function_name:
object = NULL;
called_scope = zend_fetch_class_by_name(Z_STR_P(obj), NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(called_scope == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (called_scope->get_static_method) {
@@ -2826,8 +2807,7 @@ try_function_name:
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -2839,8 +2819,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND
bitwise_not_function(EX_VAR(opline->result.var),
EX_CONSTANT(opline->op1));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -2853,17 +2832,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZE
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_FALSE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
+ ZVAL_TRUE(EX_VAR(opline->result.var));
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- ZVAL_TRUE(EX_VAR(opline->result.var));
} else {
SAVE_OPLINE();
ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -2894,8 +2873,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_O
zend_string_release(str);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -2910,11 +2888,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_O
ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if (IS_CONST == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
@@ -2947,16 +2923,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if (IS_CONST == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
- }
- ZEND_VM_NEXT_OPCODE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
}
}
@@ -3068,16 +3040,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZE
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
- if (IS_CONST == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
- }
- ZEND_VM_NEXT_OPCODE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
}
}
@@ -3350,17 +3318,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_O
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- ZVAL_FALSE(EX_VAR(opline->result.var));
} else {
SAVE_OPLINE();
ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -3379,8 +3347,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OP
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
}
@@ -3415,8 +3382,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OP
ZVAL_COPY(EX_VAR(opline->result.var), &object_zval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -3498,8 +3464,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
}
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -3557,8 +3522,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_O
if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (opline->extended_value == IS_ARRAY) {
@@ -3600,8 +3564,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_O
}
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -3751,8 +3714,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
}
Z_FE_POS_P(result) = 0;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
HashPosition pos = 0;
@@ -3784,8 +3746,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
@@ -3825,8 +3786,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -3893,8 +3853,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
@@ -3928,8 +3887,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
@@ -3986,8 +3944,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -4005,7 +3962,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
USE_OPLINE
SAVE_OPLINE();
@@ -4029,7 +3985,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_O
} while (0);
}
-#endif
zend_bailout();
ZEND_VM_NEXT_OPCODE(); /* Never reached */
}
@@ -4067,8 +4022,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEN
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4105,8 +4059,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZE
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4118,8 +4071,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(Z
value = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
SAVE_OPLINE();
- value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
@@ -4269,8 +4223,7 @@ try_strlen:
} while (0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4306,8 +4259,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4370,8 +4322,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(Z
add_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4414,8 +4365,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(Z
sub_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4461,8 +4411,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(Z
mul_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4477,8 +4426,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(Z
fast_div_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4516,8 +4464,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(Z
mod_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4532,8 +4479,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZE
shift_left_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4548,8 +4494,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZE
shift_right_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4609,8 +4554,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CONST_HANDLE
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4629,7 +4573,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_CONST) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CONST|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -4650,7 +4594,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CO
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_CONST) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CONST|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -4720,8 +4664,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HAND
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4789,8 +4732,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4840,8 +4782,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HA
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4891,8 +4832,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4907,8 +4847,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HAN
compare_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4923,8 +4862,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4939,8 +4877,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLE
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4955,8 +4892,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLE
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4971,8 +4907,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HAND
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -5025,8 +4960,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
zend_string_release(name);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -5122,8 +5056,7 @@ fetch_var_return:
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5173,8 +5106,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_H
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5188,8 +5120,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5215,7 +5146,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
@@ -5231,8 +5162,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5304,8 +5234,7 @@ fetch_obj_r_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5377,8 +5306,7 @@ fetch_obj_is_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5414,11 +5342,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -5465,8 +5392,7 @@ try_fetch_list:
}
ZVAL_NULL(EX_VAR(opline->result.var));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5533,8 +5459,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_H
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5653,8 +5578,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CO
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5786,8 +5710,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5842,8 +5765,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5909,8 +5831,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CONST_HANDLER(
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -5936,8 +5857,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_CONST_CONS
/* non-qualified constant - allow text substitution */
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
HANDLE_EXCEPTION();
@@ -6118,8 +6038,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -6179,8 +6098,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_CONST_HAN
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = EX_CONSTANT(opline->op1);
@@ -6231,8 +6149,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_CONST_HAN
zend_string_release(Z_STR(tmp));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -6292,8 +6209,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_C
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -6335,8 +6251,7 @@ is_var_return:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -6474,8 +6389,7 @@ isset_dim_obj_exit:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -6521,8 +6435,7 @@ isset_no_object:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -6558,8 +6471,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -6715,8 +6627,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(Z
pow_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -6735,7 +6646,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HA
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CONST|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -6756,7 +6667,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TM
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CONST|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -6918,7 +6829,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HA
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CONST|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -6939,7 +6850,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VA
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CONST|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -6994,8 +6905,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
zend_string_release(name);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -7091,8 +7001,7 @@ fetch_var_return:
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -7157,8 +7066,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_VAR_HANDL
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = EX_CONSTANT(opline->op1);
@@ -7209,8 +7117,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_VAR_HANDL
zend_string_release(Z_STR(tmp));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -7270,8 +7177,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_V
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -7313,8 +7219,7 @@ is_var_return:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -7509,8 +7414,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
zend_string_release(name);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -7606,8 +7510,7 @@ fetch_var_return:
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -7669,7 +7572,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
@@ -7685,8 +7588,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -7818,8 +7720,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -7867,8 +7768,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_
}
#endif
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -7967,8 +7867,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8028,8 +7927,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HA
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = EX_CONSTANT(opline->op1);
@@ -8080,8 +7978,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HA
zend_string_release(Z_STR(tmp));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8141,8 +8038,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_U
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -8184,8 +8080,7 @@ is_var_return:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -8208,8 +8103,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_C
EG(scope), EX(called_scope), Z_OBJ(EX(This)) ? &EX(This) : NULL);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8393,8 +8287,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND
add_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8437,8 +8330,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND
sub_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8484,8 +8376,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND
mul_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8500,8 +8391,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND
fast_div_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8539,8 +8429,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND
mod_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8555,8 +8444,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_
shift_left_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8571,8 +8459,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_
shift_right_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8632,8 +8519,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(Z
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8652,7 +8538,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CV_HAN
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_CV) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CONST|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -8673,7 +8559,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_CV) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CONST|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -8743,8 +8629,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8812,8 +8697,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HAN
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8863,8 +8747,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CV_HANDL
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8914,8 +8797,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8930,8 +8812,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLE
compare_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8946,8 +8827,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZE
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8962,8 +8842,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CV_HANDLER(Z
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8978,8 +8857,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(Z
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8994,8 +8872,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9009,8 +8886,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HAND
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9024,8 +8900,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HAN
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9051,7 +8926,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
@@ -9067,8 +8942,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9140,8 +9014,7 @@ fetch_obj_r_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9213,8 +9086,7 @@ fetch_obj_is_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9250,11 +9122,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -9324,8 +9195,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9444,8 +9314,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9577,8 +9446,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9633,8 +9501,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9751,8 +9618,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEN
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9851,8 +9717,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10020,8 +9885,7 @@ isset_dim_obj_exit:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10067,8 +9931,7 @@ isset_no_object:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10224,8 +10087,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND
pow_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10268,8 +10130,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(
add_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10312,8 +10173,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(
sub_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10359,8 +10219,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER(
mul_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10375,8 +10234,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10414,8 +10272,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(
mod_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10430,8 +10287,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(Z
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10446,8 +10302,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(Z
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10507,8 +10362,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDL
} while (0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10576,8 +10430,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HAN
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10645,8 +10498,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10696,8 +10548,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_H
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10747,8 +10598,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10763,8 +10613,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HA
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10779,8 +10628,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLE
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10795,8 +10643,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDL
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10811,8 +10658,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDL
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10827,8 +10673,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HAN
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10842,8 +10687,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10857,8 +10701,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10884,7 +10727,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
zval_ptr_dtor_nogc(free_op2);
@@ -10900,8 +10743,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
zval_ptr_dtor_nogc(free_op2);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10974,8 +10816,7 @@ fetch_obj_r_no_object:
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11048,8 +10889,7 @@ fetch_obj_is_no_object:
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11085,11 +10925,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -11159,8 +10998,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
} while (0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11280,8 +11118,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TM
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11413,8 +11250,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11470,8 +11306,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV
EX(call) = call;
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11537,8 +11372,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11637,8 +11471,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11806,8 +11639,7 @@ isset_dim_obj_exit:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11854,8 +11686,7 @@ isset_no_object:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11870,8 +11701,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -12172,8 +12002,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPC
if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (opline->extended_value == IS_ARRAY) {
@@ -12216,8 +12045,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPC
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -12238,8 +12066,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
}
Z_FE_POS_P(result) = 0;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
HashPosition pos = 0;
@@ -12271,8 +12098,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
@@ -12313,8 +12139,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -12381,8 +12206,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
@@ -12416,8 +12240,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
@@ -12474,8 +12297,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -12535,8 +12357,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -12574,8 +12395,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -12587,8 +12407,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEN
value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
SAVE_OPLINE();
- value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
@@ -12732,8 +12553,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMP_HANDLER(ZE
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -12752,7 +12572,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HA
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_TMP_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -12773,7 +12593,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONS
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_TMP_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -12801,7 +12621,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CO
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
@@ -12817,8 +12637,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CO
zval_ptr_dtor_nogc(free_op1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -12890,8 +12709,7 @@ fetch_obj_r_no_object:
} while (0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -12927,11 +12745,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CO
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -12964,7 +12781,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLE
}
rope[opline->extended_value] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -13119,8 +12936,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -13311,7 +13127,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HAND
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_TMP_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -13332,7 +13148,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_TMP_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -13494,7 +13310,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HAND
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -13515,7 +13331,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -13684,7 +13500,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UN
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
@@ -13700,8 +13516,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UN
zval_ptr_dtor_nogc(free_op1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -13749,8 +13564,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UN
}
#endif
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -13849,8 +13663,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -14041,7 +13854,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDL
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_TMP_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -14062,7 +13875,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_H
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_TMP_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -14090,7 +13903,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
@@ -14106,8 +13919,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV
zval_ptr_dtor_nogc(free_op1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -14179,8 +13991,7 @@ fetch_obj_r_no_object:
} while (0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -14216,11 +14027,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -14253,7 +14063,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(Z
}
rope[opline->extended_value] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -14408,8 +14218,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -14607,7 +14416,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TM
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
zval_ptr_dtor_nogc(free_op2);
@@ -14623,8 +14432,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TM
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -14697,8 +14505,7 @@ fetch_obj_r_no_object:
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -14734,11 +14541,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TM
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -14771,7 +14577,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDL
}
rope[opline->extended_value] = _zval_get_string_func(var);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -14926,8 +14732,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -15004,8 +14809,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -15051,8 +14855,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -15091,8 +14894,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND
increment_function(var_ptr);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -15131,8 +14933,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND
decrement_function(var_ptr);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -15341,13 +15142,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND
varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
- varptr = GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
+ arg = ZEND_CALL_VAR(EX(call), opline->result.var);
+ ZVAL_NULL(arg);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_VAR == IS_CV) {
- ZVAL_DEREF(varptr);
+ ZVAL_OPT_DEREF(varptr);
ZVAL_COPY(arg, varptr);
} else /* if (IS_VAR == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
@@ -15381,26 +15185,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDL
}
varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
- SAVE_OPLINE();
- varptr = GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
- CHECK_EXCEPTION();
- }
+
if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
(Z_VAR_FLAGS_P(varptr) & IS_VAR_RET_REF)) &&
(Z_ISREF_P(varptr) || Z_TYPE_P(varptr) == IS_OBJECT)) {
ZVAL_MAKE_REF(varptr);
- if (IS_VAR == IS_CV) {
- Z_ADDREF_P(varptr);
- }
} else {
if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
!(opline->extended_value & ZEND_ARG_SEND_SILENT) :
!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
SAVE_OPLINE();
zend_error(E_NOTICE, "Only variables should be passed by reference");
- CHECK_EXCEPTION();
+ arg = ZEND_CALL_VAR(EX(call), opline->result.var);
+ ZVAL_COPY_VALUE(arg, varptr);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -15464,13 +15263,16 @@ send_var_by_ref:
varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
- varptr = GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
+ arg = ZEND_CALL_VAR(EX(call), opline->result.var);
+ ZVAL_NULL(arg);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_VAR == IS_CV) {
- ZVAL_DEREF(varptr);
+ ZVAL_OPT_DEREF(varptr);
ZVAL_COPY(arg, varptr);
} else /* if (IS_VAR == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
@@ -15524,8 +15326,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEN
Z_OBJ(EX(call)->This) = NULL;
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZVAL_NEW_REF(arg, arg);
@@ -15544,8 +15345,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEN
ZVAL_COPY_VALUE(param, arg);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -15562,8 +15362,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCO
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
}
@@ -15598,8 +15397,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCO
ZVAL_COPY(EX_VAR(opline->result.var), &object_zval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -15659,8 +15457,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPC
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (opline->extended_value == IS_ARRAY) {
@@ -15703,8 +15500,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPC
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -15726,8 +15522,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
Z_FE_POS_P(result) = 0;
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
HashPosition pos = 0;
@@ -15760,8 +15555,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
@@ -15802,8 +15596,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -15871,8 +15664,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
@@ -15907,8 +15699,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
@@ -15965,8 +15756,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -16392,8 +16182,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -16431,8 +16220,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -16444,8 +16232,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEN
value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
SAVE_OPLINE();
- value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
@@ -16591,8 +16380,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_VAR_HANDLER(ZE
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -16611,7 +16399,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HA
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -16632,7 +16420,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONS
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -16699,9 +16487,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -16771,9 +16557,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
FREE_OP(free_op_data1);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -16809,8 +16593,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17100,8 +16883,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
} while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17177,8 +16959,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
} while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17207,11 +16988,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HAN
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17230,11 +17010,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HA
zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17260,7 +17039,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CO
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
@@ -17276,8 +17055,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CO
zval_ptr_dtor_nogc(free_op1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17297,11 +17075,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST
zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17373,8 +17150,7 @@ fetch_obj_r_no_object:
} while (0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17402,11 +17178,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HAN
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17433,11 +17208,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HA
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17473,11 +17247,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CO
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -17508,11 +17281,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17542,9 +17314,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HAND
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17650,9 +17420,7 @@ assign_dim_clean:
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_dim has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17680,8 +17448,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER(
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17813,8 +17580,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17840,8 +17606,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_
/* non-qualified constant - allow text substitution */
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
HANDLE_EXCEPTION();
@@ -18022,8 +17787,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -18152,8 +17916,7 @@ num_index_dim:
} while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -18196,8 +17959,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDL
} while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -18363,7 +18125,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HAND
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -18384,7 +18146,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -18414,8 +18176,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER(ZE
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -18576,7 +18337,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HAND
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -18597,7 +18358,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -18627,8 +18388,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZE
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -18647,11 +18407,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLE
HANDLE_EXCEPTION();
}
if (IS_VAR == IS_VAR &&
+ UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
+ UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
+ zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
+ if (free_op2) {zval_ptr_dtor_nogc(free_op2);};
+ HANDLE_EXCEPTION();
+ }
+ if (IS_VAR == IS_VAR &&
(value_ptr == &EG(uninitialized_zval) ||
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
- if (!(free_op2 != NULL)) {
- PZVAL_LOCK(value_ptr); /* undo the effect of get_zval_ptr_ptr() */
+ if (!(free_op2 != NULL) && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op2.var)) != IS_INDIRECT)) { /* undo the effect of get_zval_ptr_ptr() */
+ Z_TRY_ADDREF_P(value_ptr);
}
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -18667,14 +18434,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLE
if (free_op2) {zval_ptr_dtor_nogc(free_op2);};
HANDLE_EXCEPTION();
}
- if (IS_VAR == IS_VAR &&
- UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
- UNEXPECTED(!Z_ISREF_P(variable_ptr))) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- if (free_op2) {zval_ptr_dtor_nogc(free_op2);};
- if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- HANDLE_EXCEPTION();
- }
if ((IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
(IS_VAR == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
variable_ptr = &EG(uninitialized_zval);
@@ -18689,8 +18448,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLE
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
if (free_op2) {zval_ptr_dtor_nogc(free_op2);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -18902,9 +18660,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
FREE_OP(free_op_data1);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19143,11 +18899,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HA
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19166,11 +18921,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_H
zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19196,7 +18950,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UN
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
@@ -19212,8 +18966,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UN
zval_ptr_dtor_nogc(free_op1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19319,9 +19072,7 @@ assign_dim_clean:
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_dim has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19453,8 +19204,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19502,8 +19252,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UN
}
#endif
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19602,8 +19351,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19812,7 +19560,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDL
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -19833,7 +19581,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_H
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -19900,9 +19648,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -19972,9 +19718,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
FREE_OP(free_op_data1);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -20010,8 +19754,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20301,8 +20044,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
} while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20378,8 +20120,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
} while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20408,11 +20149,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLE
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20431,11 +20171,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDL
zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20461,7 +20200,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
@@ -20477,8 +20216,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV
zval_ptr_dtor_nogc(free_op1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20498,11 +20236,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HA
zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20574,8 +20311,7 @@ fetch_obj_r_no_object:
} while (0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20603,11 +20339,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLE
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20634,11 +20369,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDL
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20674,11 +20408,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -20709,11 +20442,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HA
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20743,9 +20475,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20851,9 +20581,7 @@ assign_dim_clean:
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_dim has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20881,8 +20609,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEN
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20900,12 +20627,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
HANDLE_EXCEPTION();
}
+ if (IS_VAR == IS_VAR &&
+ UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
+ UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
+ zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
+
+ HANDLE_EXCEPTION();
+ }
if (IS_CV == IS_VAR &&
(value_ptr == &EG(uninitialized_zval) ||
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
- if (!0) {
- PZVAL_LOCK(value_ptr); /* undo the effect of get_zval_ptr_ptr() */
+ if (!0 && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op2.var)) != IS_INDIRECT)) { /* undo the effect of get_zval_ptr_ptr() */
+ Z_TRY_ADDREF_P(value_ptr);
}
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -20921,14 +20655,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER
HANDLE_EXCEPTION();
}
- if (IS_VAR == IS_VAR &&
- UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
- UNEXPECTED(!Z_ISREF_P(variable_ptr))) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
-
- if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- HANDLE_EXCEPTION();
- }
if ((IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
(IS_CV == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
variable_ptr = &EG(uninitialized_zval);
@@ -20942,8 +20668,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -21075,8 +20800,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -21175,8 +20899,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -21305,8 +21028,7 @@ num_index_dim:
} while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -21349,8 +21071,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(
} while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -21562,9 +21283,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval_ptr_dtor_nogc(free_op2);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -21635,9 +21354,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval_ptr_dtor_nogc(free_op2);
FREE_OP(free_op_data1);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -21674,8 +21391,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
zval_ptr_dtor_nogc(free_op2);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -21966,8 +21682,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval_ptr_dtor_nogc(free_op2);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22044,8 +21759,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval_ptr_dtor_nogc(free_op2);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22074,11 +21788,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HA
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22097,11 +21810,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_H
zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22127,7 +21839,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TM
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
zval_ptr_dtor_nogc(free_op2);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
@@ -22143,8 +21855,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TM
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22164,11 +21875,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVA
zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22241,8 +21951,7 @@ fetch_obj_r_no_object:
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22270,11 +21979,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HA
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22301,11 +22009,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_H
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22341,11 +22048,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TM
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -22376,11 +22082,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVA
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22410,9 +22115,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_HAN
zval_ptr_dtor_nogc(free_op2);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22518,9 +22221,7 @@ assign_dim_clean:
}
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
/* assign_dim has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22652,8 +22353,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
call->prev_execute_data = EX(call);
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22752,8 +22452,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22883,8 +22582,7 @@ num_index_dim:
zval_ptr_dtor_nogc(free_op2);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22928,8 +22626,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HAND
zval_ptr_dtor_nogc(free_op2);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23015,13 +22712,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
}
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
USE_OPLINE
SAVE_OPLINE();
@@ -23045,7 +22740,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_
} while (0);
}
-#endif
zend_bailout();
ZEND_VM_NEXT_OPCODE(); /* Never reached */
}
@@ -23112,9 +22806,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -23184,9 +22876,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
FREE_OP(free_op_data1);
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23476,8 +23166,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23553,8 +23242,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23636,8 +23324,7 @@ fetch_obj_r_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23665,11 +23352,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23696,11 +23382,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23772,8 +23457,7 @@ fetch_obj_is_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23809,11 +23493,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -23844,11 +23527,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CO
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23878,9 +23560,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_H
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23910,7 +23590,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HA
}
rope[0] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -24032,8 +23712,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -24059,8 +23738,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CON
/* non-qualified constant - allow text substitution */
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
HANDLE_EXCEPTION();
@@ -24271,8 +23949,7 @@ num_index_dim:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -24315,8 +23992,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HA
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -24453,8 +24129,7 @@ isset_dim_obj_exit:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -24500,8 +24175,7 @@ isset_no_object:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -24994,9 +24668,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
FREE_OP(free_op_data1);
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -25264,8 +24936,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED
}
#endif
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -25502,9 +25173,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -25574,9 +25243,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
FREE_OP(free_op_data1);
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -25866,8 +25533,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -25943,8 +25609,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26026,8 +25691,7 @@ fetch_obj_r_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26055,11 +25719,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HAN
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26086,11 +25749,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HA
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26162,8 +25824,7 @@ fetch_obj_is_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26199,11 +25860,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -26234,11 +25894,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26268,9 +25927,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HAND
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26300,7 +25957,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDL
}
rope[0] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -26422,8 +26079,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26552,8 +26208,7 @@ num_index_dim:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26596,8 +26251,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDL
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26734,8 +26388,7 @@ isset_dim_obj_exit:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26781,8 +26434,7 @@ isset_no_object:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26988,9 +26640,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval_ptr_dtor_nogc(free_op2);
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -27061,9 +26711,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval_ptr_dtor_nogc(free_op2);
FREE_OP(free_op_data1);
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27354,8 +27002,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27432,8 +27079,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27516,8 +27162,7 @@ fetch_obj_r_no_object:
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27545,11 +27190,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27576,11 +27220,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVA
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
zval_ptr_dtor_nogc(free_op2);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27653,8 +27296,7 @@ fetch_obj_is_no_object:
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27690,11 +27332,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -27725,11 +27366,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TM
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
zval_ptr_dtor_nogc(free_op2);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27759,9 +27399,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
zval_ptr_dtor_nogc(free_op2);
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27791,7 +27429,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_H
}
rope[0] = _zval_get_string_func(var);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
ZEND_VM_NEXT_OPCODE();
@@ -27914,8 +27552,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28045,8 +27682,7 @@ num_index_dim:
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28090,8 +27726,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_H
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28228,8 +27863,7 @@ isset_dim_obj_exit:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28276,8 +27910,7 @@ isset_no_object:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28289,8 +27922,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OP
bitwise_not_function(EX_VAR(opline->result.var),
_get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28303,17 +27935,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_FALSE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
+ ZVAL_TRUE(EX_VAR(opline->result.var));
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- ZVAL_TRUE(EX_VAR(opline->result.var));
} else {
SAVE_OPLINE();
ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -28360,8 +27992,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_HANDLER(ZEND_O
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28406,8 +28037,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_HANDLER(ZEND_O
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28445,8 +28075,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_
increment_function(var_ptr);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28484,8 +28113,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_
decrement_function(var_ptr);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28514,8 +28142,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCO
zend_string_release(str);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28530,11 +28157,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCO
ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if (IS_CV == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
@@ -28567,16 +28192,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPC
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if (IS_CV == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
- }
- ZEND_VM_NEXT_OPCODE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
}
}
@@ -28688,16 +28309,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
- if (IS_CV == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
- }
- ZEND_VM_NEXT_OPCODE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
}
}
@@ -28922,13 +28539,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_
varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
- varptr = GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
+ arg = ZEND_CALL_VAR(EX(call), opline->result.var);
+ ZVAL_NULL(arg);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_CV == IS_CV) {
- ZVAL_DEREF(varptr);
+ ZVAL_OPT_DEREF(varptr);
ZVAL_COPY(arg, varptr);
} else /* if (IS_CV == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
@@ -28949,48 +28569,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
-
- zval *varptr, *arg;
-
- if (!(opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND)) {
- if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
- ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
- }
-
- varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
- SAVE_OPLINE();
- varptr = GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
- CHECK_EXCEPTION();
- }
- if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
- (Z_VAR_FLAGS_P(varptr) & IS_VAR_RET_REF)) &&
- (Z_ISREF_P(varptr) || Z_TYPE_P(varptr) == IS_OBJECT)) {
-
- ZVAL_MAKE_REF(varptr);
- if (IS_CV == IS_CV) {
- Z_ADDREF_P(varptr);
- }
- } else {
- if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
- !(opline->extended_value & ZEND_ARG_SEND_SILENT) :
- !ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
- SAVE_OPLINE();
- zend_error(E_NOTICE, "Only variables should be passed by reference");
- CHECK_EXCEPTION();
- }
- }
-
- arg = ZEND_CALL_VAR(EX(call), opline->result.var);
- ZVAL_COPY_VALUE(arg, varptr);
-
- ZEND_VM_NEXT_OPCODE();
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -29044,13 +28622,16 @@ send_var_by_ref:
varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
- varptr = GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
+ arg = ZEND_CALL_VAR(EX(call), opline->result.var);
+ ZVAL_NULL(arg);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_CV == IS_CV) {
- ZVAL_DEREF(varptr);
+ ZVAL_OPT_DEREF(varptr);
ZVAL_COPY(arg, varptr);
} else /* if (IS_CV == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
@@ -29103,8 +28684,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND
EX(call)->called_scope = NULL;
Z_OBJ(EX(call)->This) = NULL;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZVAL_NEW_REF(arg, arg);
@@ -29122,8 +28702,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND
}
ZVAL_COPY_VALUE(param, arg);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -29136,17 +28715,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCO
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- ZVAL_FALSE(EX_VAR(opline->result.var));
} else {
SAVE_OPLINE();
ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -29229,8 +28808,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
}
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -29288,8 +28866,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCO
if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if (opline->extended_value == IS_ARRAY) {
@@ -29331,8 +28908,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCO
}
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -29482,8 +29058,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
}
Z_FE_POS_P(result) = 0;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
HashPosition pos = 0;
@@ -29515,8 +29090,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
@@ -29556,8 +29130,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -29624,8 +29197,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (IS_CV == IS_VAR || IS_CV == IS_CV) {
@@ -29659,8 +29231,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
}
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
@@ -29717,8 +29288,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
if (is_empty) {
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
} else {
@@ -29736,7 +29306,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
USE_OPLINE
SAVE_OPLINE();
@@ -29760,7 +29329,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCO
} while (0);
}
-#endif
zend_bailout();
ZEND_VM_NEXT_OPCODE(); /* Never reached */
}
@@ -29798,8 +29366,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_O
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -29836,8 +29403,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -29849,8 +29415,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND
value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
SAVE_OPLINE();
- value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
- CHECK_EXCEPTION();
+ GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
@@ -30000,8 +29567,7 @@ try_strlen:
} while (0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30037,8 +29603,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEN
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30081,8 +29646,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND
add_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30125,8 +29689,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND
sub_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30172,8 +29735,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND
mul_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30188,8 +29750,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND
fast_div_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30227,8 +29788,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND
mod_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30243,8 +29803,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_
shift_left_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30259,8 +29818,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_
shift_right_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30320,8 +29878,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(Z
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30340,7 +29897,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HAN
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_CONST) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CV|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -30361,7 +29918,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_CONST) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CV|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -30431,8 +29988,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30500,8 +30056,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HAN
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30551,8 +30106,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CONST_HANDL
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30602,8 +30156,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CO
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30618,8 +30171,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLE
compare_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30634,8 +30186,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZE
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30650,8 +30201,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CONST_HANDLER(Z
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30666,8 +30216,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(Z
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -30682,8 +30231,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -30748,9 +30296,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -30820,9 +30366,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
FREE_OP(free_op_data1);
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -30858,8 +30402,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31149,8 +30692,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31226,8 +30768,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31290,8 +30831,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
zend_string_release(name);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -31387,8 +30927,7 @@ fetch_var_return:
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31438,8 +30977,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HAND
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31458,11 +30996,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HAND
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31481,11 +31018,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HAN
zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31499,8 +31035,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HAN
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31526,7 +31061,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CON
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
@@ -31542,8 +31077,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CON
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31563,11 +31097,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_
zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31639,8 +31172,7 @@ fetch_obj_r_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31668,11 +31200,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HAND
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31699,11 +31230,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HAN
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31775,8 +31305,7 @@ fetch_obj_is_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31812,11 +31341,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CON
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -31847,11 +31375,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31895,8 +31422,7 @@ try_fetch_list:
}
ZVAL_NULL(EX_VAR(opline->result.var));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31926,9 +31452,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDL
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32034,9 +31558,7 @@ assign_dim_clean:
}
/* assign_dim has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32064,8 +31586,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_HANDLER(Z
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32132,8 +31653,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32252,8 +31772,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32319,8 +31838,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEN
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32419,8 +31937,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32480,8 +31997,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_CONST_HANDLE
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
@@ -32532,8 +32048,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_CONST_HANDLE
zend_string_release(Z_STR(tmp));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32631,8 +32146,7 @@ num_index_dim:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32675,8 +32189,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32736,8 +32249,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONS
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -32779,8 +32291,7 @@ is_var_return:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -32918,8 +32429,7 @@ isset_dim_obj_exit:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32965,8 +32475,7 @@ isset_no_object:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32991,8 +32500,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -33012,8 +32520,7 @@ try_instanceof:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -33169,8 +32676,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND
pow_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -33275,7 +32781,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDL
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CV|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -33296,7 +32802,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_H
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CV|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -33326,8 +32832,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_HANDLER(ZEN
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -33487,7 +32992,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDL
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CV|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -33508,7 +33013,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_H
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_VAR) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CV|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -33563,8 +33068,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
zend_string_release(name);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -33660,8 +33164,7 @@ fetch_var_return:
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -33725,8 +33228,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEN
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -33744,12 +33246,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER
HANDLE_EXCEPTION();
}
+ if (IS_CV == IS_VAR &&
+ UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
+ UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
+ zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
+ if (free_op2) {zval_ptr_dtor_nogc(free_op2);};
+ HANDLE_EXCEPTION();
+ }
if (IS_VAR == IS_VAR &&
(value_ptr == &EG(uninitialized_zval) ||
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
- if (!(free_op2 != NULL)) {
- PZVAL_LOCK(value_ptr); /* undo the effect of get_zval_ptr_ptr() */
+ if (!(free_op2 != NULL) && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op2.var)) != IS_INDIRECT)) { /* undo the effect of get_zval_ptr_ptr() */
+ Z_TRY_ADDREF_P(value_ptr);
}
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -33765,14 +33274,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER
if (free_op2) {zval_ptr_dtor_nogc(free_op2);};
HANDLE_EXCEPTION();
}
- if (IS_CV == IS_VAR &&
- UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
- UNEXPECTED(!Z_ISREF_P(variable_ptr))) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- if (free_op2) {zval_ptr_dtor_nogc(free_op2);};
-
- HANDLE_EXCEPTION();
- }
if ((IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
(IS_VAR == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
variable_ptr = &EG(uninitialized_zval);
@@ -33786,8 +33287,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER
if (free_op2) {zval_ptr_dtor_nogc(free_op2);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -33816,8 +33316,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER(
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
@@ -33868,8 +33367,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER(
zend_string_release(Z_STR(tmp));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -33929,8 +33427,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -33972,8 +33469,7 @@ is_var_return:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -33999,8 +33495,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -34020,8 +33515,7 @@ try_instanceof:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -34232,9 +33726,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
FREE_OP(free_op_data1);
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -34507,8 +33999,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
zend_string_release(name);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -34604,8 +34095,7 @@ fetch_var_return:
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -34660,11 +34150,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HAN
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -34683,11 +34172,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HA
zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -34713,7 +34201,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNU
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
@@ -34729,8 +34217,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNU
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -34836,9 +34323,7 @@ assign_dim_clean:
}
/* assign_dim has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -34886,8 +34371,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNU
}
#endif
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -34986,8 +34470,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35047,8 +34530,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDL
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
@@ -35099,8 +34581,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDL
zend_string_release(Z_STR(tmp));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35160,8 +34641,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUS
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -35203,8 +34683,7 @@ is_var_return:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -35389,8 +34868,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OP
add_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35433,8 +34911,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OP
sub_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35480,8 +34957,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OP
mul_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35496,8 +34972,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OP
fast_div_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35535,8 +35010,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OP
mod_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35551,8 +35025,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPC
shift_left_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35567,8 +35040,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPC
shift_right_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35628,8 +35100,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35648,7 +35119,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLE
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_CV) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CV|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -35669,7 +35140,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HA
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_CV) & (IS_VAR|IS_TMP_VAR));
ZVAL_BOOL(EX_VAR(opline->result.var), result);
if ((IS_CV|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -35739,8 +35210,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZE
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35808,8 +35278,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLE
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35859,8 +35328,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35910,8 +35378,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35926,8 +35393,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(Z
compare_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35942,8 +35408,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35958,8 +35423,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35974,8 +35438,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35990,8 +35453,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZE
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -36056,9 +35518,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -36128,9 +35588,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
FREE_OP(free_op_data1);
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -36166,8 +35624,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36457,8 +35914,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36534,8 +35990,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36559,8 +36014,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36579,11 +36033,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36602,11 +36055,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLE
zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36620,8 +36072,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLE
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36647,7 +36098,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
@@ -36663,8 +36114,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36684,11 +36134,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HAN
zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36760,8 +36209,7 @@ fetch_obj_r_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36789,11 +36237,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36820,11 +36267,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLE
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36896,8 +36342,7 @@ fetch_obj_is_no_object:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36933,11 +36378,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -36968,11 +36412,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HAN
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37002,9 +36445,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER(
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37110,9 +36551,7 @@ assign_dim_clean:
}
/* assign_dim has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37140,8 +36579,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37160,11 +36598,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(
HANDLE_EXCEPTION();
}
if (IS_CV == IS_VAR &&
+ UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
+ UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
+ zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
+
+ HANDLE_EXCEPTION();
+ }
+ if (IS_CV == IS_VAR &&
(value_ptr == &EG(uninitialized_zval) ||
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
- if (!0) {
- PZVAL_LOCK(value_ptr); /* undo the effect of get_zval_ptr_ptr() */
+ if (!0 && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op2.var)) != IS_INDIRECT)) { /* undo the effect of get_zval_ptr_ptr() */
+ Z_TRY_ADDREF_P(value_ptr);
}
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -37180,14 +36625,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(
HANDLE_EXCEPTION();
}
- if (IS_CV == IS_VAR &&
- UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
- UNEXPECTED(!Z_ISREF_P(variable_ptr))) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
-
-
- HANDLE_EXCEPTION();
- }
if ((IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
(IS_CV == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
variable_ptr = &EG(uninitialized_zval);
@@ -37200,8 +36637,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37268,8 +36704,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37388,8 +36823,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA
EX(call) = call;
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37455,8 +36889,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_O
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37555,8 +36988,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37685,8 +37117,7 @@ num_index_dim:
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37729,8 +37160,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37867,8 +37297,7 @@ isset_dim_obj_exit:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -37914,8 +37343,7 @@ isset_no_object:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38071,8 +37499,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OP
pow_function(EX_VAR(opline->result.var), op1, op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38120,8 +37547,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_TMPVAR_HANDLER(ZEN
add_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38164,8 +37590,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEN
sub_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38211,8 +37636,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEN
mul_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38227,8 +37651,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEN
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38266,8 +37689,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEN
mod_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38282,8 +37704,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38298,8 +37719,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38359,8 +37779,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(
} while (0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38428,8 +37847,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLE
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38497,8 +37915,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HA
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38548,8 +37965,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HAND
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38599,8 +38015,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TM
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38615,8 +38030,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDL
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38631,8 +38045,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(Z
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38647,8 +38060,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38663,8 +38075,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38679,8 +38090,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLE
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -38745,9 +38155,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval_ptr_dtor_nogc(free_op2);
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -38818,9 +38226,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval_ptr_dtor_nogc(free_op2);
FREE_OP(free_op_data1);
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -38857,8 +38263,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39149,8 +38554,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39227,8 +38631,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39252,8 +38655,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HAN
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39272,11 +38674,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HAN
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39295,11 +38696,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HA
zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39313,8 +38713,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HA
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39340,7 +38739,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP
}
zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
zval_ptr_dtor_nogc(free_op2);
@@ -39356,8 +38755,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP
zval_ptr_dtor_nogc(free_op2);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39377,11 +38775,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR
zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39454,8 +38851,7 @@ fetch_obj_r_no_object:
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39483,11 +38879,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HAN
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39514,11 +38909,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HA
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39591,8 +38985,7 @@ fetch_obj_is_no_object:
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39628,11 +39021,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -39663,11 +39055,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
- EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
+ EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39697,9 +39088,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_HAND
zval_ptr_dtor_nogc(free_op2);
/* assign_obj has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39805,9 +39194,7 @@ assign_dim_clean:
}
/* assign_dim has two opcodes! */
- CHECK_EXCEPTION();
- ZEND_VM_INC_OPCODE();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39874,8 +39261,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
} while (0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39995,8 +39381,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40062,8 +39447,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZE
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40162,8 +39546,7 @@ num_index:
} else {
zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40293,8 +39676,7 @@ num_index_dim:
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40338,8 +39720,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40476,8 +39857,7 @@ isset_dim_obj_exit:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40524,8 +39904,7 @@ isset_no_object:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40540,8 +39919,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEN
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40558,8 +39936,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEN
bitwise_not_function(EX_VAR(opline->result.var),
_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1));
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40572,17 +39949,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(Z
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_FALSE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
+ ZVAL_TRUE(EX_VAR(opline->result.var));
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- ZVAL_TRUE(EX_VAR(opline->result.var));
} else {
SAVE_OPLINE();
ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -40614,8 +39991,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40630,11 +40006,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_
ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
} else {
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
@@ -40667,16 +40041,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
- if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
- }
- ZEND_VM_NEXT_OPCODE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
}
}
@@ -40788,16 +40158,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(Z
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
- if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
- if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
- }
- ZEND_VM_NEXT_OPCODE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ GET_OP1_UNDEF_CV(val, BP_VAR_R);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
}
}
@@ -40819,12 +40185,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(Z
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
+ zval *var;
USE_OPLINE
SAVE_OPLINE();
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ var = EX_VAR(opline->op1.var);
+ zval_ptr_dtor_nogc(var);
+ ZVAL_NULL(var);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40836,10 +40204,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZE
var = EX_VAR(opline->op1.var);
if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) {
zend_hash_iterator_del(Z_FE_ITER_P(var));
+ Z_FE_ITER_P(var) = (uint32_t)-1;
}
zval_ptr_dtor_nogc(var);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZVAL_NULL(var);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40852,17 +40221,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(val, BP_VAR_R);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- ZVAL_FALSE(EX_VAR(opline->result.var));
} else {
SAVE_OPLINE();
ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -40945,8 +40314,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
}
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41080,7 +40448,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
USE_OPLINE
SAVE_OPLINE();
@@ -41104,7 +40471,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_
} while (0);
zval_ptr_dtor_nogc(free_op1);
}
-#endif
zend_bailout();
ZEND_VM_NEXT_OPCODE(); /* Never reached */
}
@@ -41149,8 +40515,7 @@ try_strlen:
} while (0);
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41193,8 +40558,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(
add_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41237,8 +40601,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(
sub_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41284,8 +40647,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(
mul_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41300,8 +40662,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41339,8 +40700,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(
mod_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41355,8 +40715,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(Z
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41371,8 +40730,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(Z
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41432,8 +40790,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDL
zval_ptr_dtor_nogc(free_op1);
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41501,8 +40858,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HAN
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41570,8 +40926,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41621,8 +40976,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_H
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41672,8 +41026,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41688,8 +41041,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HA
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41704,8 +41056,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLE
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41720,8 +41071,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDL
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41736,8 +41086,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDL
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41752,8 +41101,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HAN
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -41806,8 +41154,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
zend_string_release(name);
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -41904,8 +41251,7 @@ fetch_var_return:
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41955,8 +41301,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -41970,8 +41315,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42043,8 +41387,7 @@ fetch_obj_is_no_object:
} while (0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42088,8 +41431,7 @@ try_fetch_list:
}
ZVAL_NULL(EX_VAR(opline->result.var));
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42156,8 +41498,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
} while (0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42277,8 +41618,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42344,8 +41684,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42374,8 +41713,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_CONST_HA
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
@@ -42426,8 +41764,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_CONST_HA
zend_string_release(Z_STR(tmp));
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42487,8 +41824,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -42531,8 +41867,7 @@ is_var_return:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -42670,8 +42005,7 @@ isset_dim_obj_exit:
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42717,8 +42051,7 @@ isset_no_object:
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42743,8 +42076,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -42764,8 +42096,7 @@ try_instanceof:
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42780,8 +42111,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -42834,8 +42164,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
zend_string_release(name);
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -42932,8 +42261,7 @@ fetch_var_return:
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42998,8 +42326,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_VAR_HAND
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
@@ -43050,8 +42377,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_VAR_HAND
zend_string_release(Z_STR(tmp));
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43111,8 +42437,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -43155,8 +42480,7 @@ is_var_return:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -43182,8 +42506,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -43203,8 +42526,7 @@ try_instanceof:
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -43257,8 +42579,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
zend_string_release(name);
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -43355,8 +42676,7 @@ fetch_var_return:
} else {
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43421,8 +42741,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_H
} else {
ZVAL_UNDEF(var);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
@@ -43473,8 +42792,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_H
zend_string_release(Z_STR(tmp));
}
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43534,8 +42852,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_
} else {
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
}
@@ -43578,8 +42895,7 @@ is_var_return:
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
}
@@ -43623,8 +42939,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CV_HANDLER(ZEN
add_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43667,8 +42982,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEN
sub_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43714,8 +43028,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CV_HANDLER(ZEN
mul_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43730,8 +43043,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEN
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43769,8 +43081,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEN
mod_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43785,8 +43096,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43801,8 +43111,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43862,8 +43171,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(
zval_ptr_dtor_nogc(free_op1);
} while (0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43931,8 +43239,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLE
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44000,8 +43307,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HA
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44051,8 +43357,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HAND
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44102,8 +43407,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44118,8 +43422,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDL
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44134,8 +43437,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER(Z
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44150,8 +43452,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER(
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44166,8 +43467,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER(
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44182,8 +43482,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLE
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44197,8 +43496,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HAN
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44212,8 +43510,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HA
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44285,8 +43582,7 @@ fetch_obj_is_no_object:
} while (0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44353,8 +43649,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
} while (0);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44474,8 +43769,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44541,8 +43835,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZE
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44679,8 +43972,7 @@ isset_dim_obj_exit:
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44726,8 +44018,7 @@ isset_no_object:
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44742,8 +44033,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEN
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44786,8 +44076,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER
add_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44830,8 +44119,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER
sub_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44877,8 +44165,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER
mul_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44893,8 +44180,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44932,8 +44218,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER
mod_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44948,8 +44233,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -44964,8 +44248,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45025,8 +44308,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HAND
zval_ptr_dtor_nogc(free_op1);
} while (0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45094,8 +44376,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HA
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45163,8 +44444,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVA
ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45214,8 +44494,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_
ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45265,8 +44544,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA
ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45281,8 +44559,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_H
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45297,8 +44574,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDL
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45313,8 +44589,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HAND
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45329,8 +44604,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HAND
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45345,8 +44619,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HA
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45360,8 +44633,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45375,8 +44647,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVA
zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45449,8 +44720,7 @@ fetch_obj_is_no_object:
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45517,8 +44787,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
} while (0);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45639,8 +44908,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45706,8 +44974,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLE
compare_function(result, op1, op2);
ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45844,8 +45111,7 @@ isset_dim_obj_exit:
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45892,8 +45158,7 @@ isset_no_object:
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -45908,12 +45173,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
+ USE_OPLINE
+
zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
ZEND_VM_NEXT_OPCODE(); /* Never reached */
}
@@ -48592,11 +47858,11 @@ void zend_init_opcodes_handlers(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
- ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
- ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
- ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
- ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
@@ -50296,7 +49562,7 @@ ZEND_API int zend_vm_call_opcode_handler(zend_execute_data* ex)
LOAD_OPLINE();
#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- ret = (opline) ? 0 : -1;
+ ret = opline? ((execute_data != ex)? (int)(execute_data->prev_execute_data != ex) + 1 : 0) : -1;
#else
ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
#endif
diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php
index ff181ce1e7..ed194486a4 100644
--- a/Zend/zend_vm_gen.php
+++ b/Zend/zend_vm_gen.php
@@ -921,6 +921,8 @@ function gen_null_handler($f) {
$done = 1;
out($f,"static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)\n");
out($f,"{\n");
+ out($f,"\tUSE_OPLINE\n");
+ out($f,"\n");
out($f,"\tzend_error_noreturn(E_ERROR, \"Invalid opcode %d/%d/%d.\", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);\n");
out($f,"\tZEND_VM_NEXT_OPCODE(); /* Never reached */\n");
out($f,"}\n\n");
@@ -1030,11 +1032,11 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
case ZEND_VM_KIND_CALL:
out($f,"\n");
out($f,"#ifdef ZEND_VM_FP_GLOBAL_REG\n");
- out($f,"register zend_execute_data *execute_data __asm__(ZEND_VM_FP_GLOBAL_REG);\n");
+ out($f,"register zend_execute_data* volatile execute_data __asm__(ZEND_VM_FP_GLOBAL_REG);\n");
out($f,"#endif\n");
out($f,"\n");
out($f,"#ifdef ZEND_VM_IP_GLOBAL_REG\n");
- out($f,"register const zend_op *opline __asm__(ZEND_VM_IP_GLOBAL_REG);\n");
+ out($f,"register const zend_op* volatile opline __asm__(ZEND_VM_IP_GLOBAL_REG);\n");
out($f,"#endif\n");
out($f,"\n");
out($f,"#ifdef ZEND_VM_FP_GLOBAL_REG\n");
@@ -1067,23 +1069,24 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"#undef DCL_OPLINE\n");
out($f,"#undef USE_OPLINE\n");
out($f,"#undef LOAD_OPLINE\n");
+ out($f,"#undef LOAD_OPLINE_EX\n");
out($f,"#undef SAVE_OPLINE\n");
out($f,"#define DCL_OPLINE\n");
out($f,"#ifdef ZEND_VM_IP_GLOBAL_REG\n");
out($f,"# define OPLINE opline\n");
out($f,"# define USE_OPLINE\n");
out($f,"# define LOAD_OPLINE() opline = EX(opline)\n");
+ out($f,"# define LOAD_NEXT_OPLINE() opline = EX(opline) + 1\n");
out($f,"# define SAVE_OPLINE() EX(opline) = opline\n");
out($f,"#else\n");
out($f,"# define OPLINE EX(opline)\n");
out($f,"# define USE_OPLINE const zend_op *opline = EX(opline);\n");
out($f,"# define LOAD_OPLINE()\n");
+ out($f,"# define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()\n");
out($f,"# define SAVE_OPLINE()\n");
out($f,"#endif\n");
- out($f,"#undef CHECK_EXCEPTION\n");
out($f,"#undef HANDLE_EXCEPTION\n");
out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
- out($f,"#define CHECK_EXCEPTION() LOAD_OPLINE()\n");
out($f,"#define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()\n");
out($f,"#define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()\n");
out($f,"#if defined(ZEND_VM_FP_GLOBAL_REG)\n");
@@ -1105,16 +1108,16 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"#undef DCL_OPLINE\n");
out($f,"#undef USE_OPLINE\n");
out($f,"#undef LOAD_OPLINE\n");
+ out($f,"#undef LOAD_NEXT_OPLINE\n");
out($f,"#undef SAVE_OPLINE\n");
out($f,"#define OPLINE opline\n");
out($f,"#define DCL_OPLINE const zend_op *opline;\n");
out($f,"#define USE_OPLINE\n");
out($f,"#define LOAD_OPLINE() opline = EX(opline)\n");
+ out($f,"#define LOAD_NEXT_OPLINE() opline = EX(opline) + 1\n");
out($f,"#define SAVE_OPLINE() EX(opline) = opline\n");
- out($f,"#undef CHECK_EXCEPTION\n");
out($f,"#undef HANDLE_EXCEPTION\n");
out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
- out($f,"#define CHECK_EXCEPTION() LOAD_OPLINE()\n");
out($f,"#define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()\n");
out($f,"#define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()\n");
out($f,"#define ZEND_VM_CONTINUE() goto zend_vm_continue\n");
@@ -1130,21 +1133,20 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"#undef DCL_OPLINE\n");
out($f,"#undef USE_OPLINE\n");
out($f,"#undef LOAD_OPLINE\n");
+ out($f,"#undef LOAD_NEXT_OPLINE()\n");
out($f,"#undef SAVE_OPLINE\n");
out($f,"#define OPLINE opline\n");
out($f,"#define DCL_OPLINE const zend_op *opline;\n");
out($f,"#define USE_OPLINE\n");
out($f,"#define LOAD_OPLINE() opline = EX(opline)\n");
+ out($f,"#define LOAD_NEXT_OPLINE() opline = EX(opline) + 1\n");
out($f,"#define SAVE_OPLINE() EX(opline) = opline\n");
- out($f,"#undef CHECK_EXCEPTION\n");
out($f,"#undef HANDLE_EXCEPTION\n");
out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
if (ZEND_VM_SPEC) {
- out($f,"#define CHECK_EXCEPTION() if (UNEXPECTED(EG(exception) != NULL)) goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
} else {
- out($f,"#define CHECK_EXCEPTION() if (UNEXPECTED(EG(exception) != NULL)) goto ZEND_HANDLE_EXCEPTION_HANDLER\n");
out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_HANDLER\n");
out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_HANDLER\n");
}
@@ -1187,7 +1189,7 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
// Emit array of labels of opcode handlers and code for
// zend_opcode_handlers initialization
$prolog = $m[1];
- out($f,$prolog."if (execute_data == NULL) {\n");
+ out($f,$prolog."if (UNEXPECTED(execute_data == NULL)) {\n");
out($f,$prolog."\tstatic const void* labels[] = {\n");
gen_labels($f, $spec, $kind, $prolog."\t\t");
out($f,$prolog."\t};\n");
@@ -1604,7 +1606,7 @@ function gen_vm($def, $skel) {
out($f, "\tLOAD_OPLINE();\n");
out($f,"#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)\n");
out($f, "\t((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n");
- out($f, "\tret = (opline) ? 0 : -1;\n");
+ out($f, "\tret = opline? ((execute_data != ex)? (int)(execute_data->prev_execute_data != ex) + 1 : 0) : -1;\n");
out($f, "#else\n");
out($f, "\tret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n");
out($f, "#endif\n");
@@ -1632,16 +1634,16 @@ function gen_vm($def, $skel) {
out($f,"#undef DCL_OPLINE\n");
out($f,"#undef USE_OPLINE\n");
out($f,"#undef LOAD_OPLINE\n");
+ out($f,"#undef LOAD_NEXT_OPLINE()\n");
out($f,"#undef SAVE_OPLINE\n");
out($f,"#define OPLINE EX(opline)\n");
out($f,"#define DCL_OPLINE\n");
out($f,"#define USE_OPLINE const zend_op *opline = EX(opline);\n");
out($f,"#define LOAD_OPLINE()\n");
+ out($f,"#define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()\n");
out($f,"#define SAVE_OPLINE()\n");
- out($f,"#undef CHECK_EXCEPTION\n");
out($f,"#undef HANDLE_EXCEPTION\n");
out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
- out($f,"#define CHECK_EXCEPTION() LOAD_OPLINE()\n");
out($f,"#define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()\n");
out($f,"#define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()\n");
out($f,"#undef ZEND_VM_CONTINUE\n");
diff --git a/configure.in b/configure.in
index 9b234e776e..04d1a782c8 100644
--- a/configure.in
+++ b/configure.in
@@ -1420,9 +1420,7 @@ AC_PROVIDE_IFELSE([PHP_REQUIRE_CXX], [], [
])
AC_PROG_LIBTOOL
-if test "$enable_debug" != "yes"; then
- PHP_SET_LIBTOOL_VARIABLE([--silent])
-fi
+PHP_SET_LIBTOOL_VARIABLE([--silent])
dnl libtool 1.4.3 needs this.
PHP_SET_LIBTOOL_VARIABLE([--preserve-dup-deps])
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index 676c6adb81..3ac13074a8 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -2904,7 +2904,11 @@ PHP_FUNCTION(curl_getinfo)
if (ZEND_NUM_ARGS() < 2) {
char *s_code;
- zend_long l_code;
+ /* libcurl expects long datatype. So far no cases are known where
+ it would be an issue. Using zend_long would truncate a 64-bit
+ var on Win64, so the exact long datatype fits everywhere, as
+ long as there's no 32-bit int overflow. */
+ long l_code;
double d_code;
#if LIBCURL_VERSION_NUM > 0x071301
struct curl_certinfo *ci = NULL;
diff --git a/ext/date/tests/bug66985.phpt b/ext/date/tests/bug66985.phpt
index 0045ca29d6..37dcd3e80d 100644
--- a/ext/date/tests/bug66985.phpt
+++ b/ext/date/tests/bug66985.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #66986 (Some timezones are no longer valid in PHP 5.5.10)
+Bug #66985 (Some timezones are no longer valid in PHP 5.5.10)
--FILE--
<?php
$zones = array(
diff --git a/ext/dom/document.c b/ext/dom/document.c
index 0ab0e498c8..001b477354 100644
--- a/ext/dom/document.c
+++ b/ext/dom/document.c
@@ -133,6 +133,7 @@ ZEND_END_ARG_INFO();
ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_savexml, 0, 0, 0)
ZEND_ARG_OBJ_INFO(0, node, DOMNode, 1)
+ ZEND_ARG_INFO(0, options)
ZEND_END_ARG_INFO();
ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_construct, 0, 0, 0)
diff --git a/ext/dom/documenttype.c b/ext/dom/documenttype.c
index c65902e759..30fd590536 100644
--- a/ext/dom/documenttype.c
+++ b/ext/dom/documenttype.c
@@ -193,7 +193,7 @@ int dom_documenttype_internal_subset_read(dom_object *obj, zval *retval)
#ifdef LIBXML2_NEW_BUFFER
smart_str_appendl(&ret_buf, (const char *) xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff));
#else
- smart_str_appendl(&ret_buf, buff->buffer->content, buff->buffer->use);
+ smart_str_appendl(&ret_buf, (char *) buff->buffer->content, buff->buffer->use);
#endif
(void)xmlOutputBufferClose(buff);
diff --git a/ext/gd/config.m4 b/ext/gd/config.m4
index 36688e127a..1864d258be 100644
--- a/ext/gd/config.m4
+++ b/ext/gd/config.m4
@@ -9,9 +9,9 @@ dnl
PHP_ARG_WITH(gd, for GD support,
[ --with-gd[=DIR] Include GD support. DIR is the GD library base
install directory [BUNDLED]])
-if test -z "$PHP_VPX_DIR"; then
- PHP_ARG_WITH(vpx-dir, for the location of libvpx,
- [ --with-vpx-dir[=DIR] GD: Set the path to libvpx install prefix], no, no)
+if test -z "$PHP_WEBP_DIR"; then
+ PHP_ARG_WITH(webp-dir, for the location of libwebp,
+ [ --with-webp-dir[=DIR] GD: Set the path to libwebp install prefix], no, no)
fi
if test -z "$PHP_JPEG_DIR"; then
@@ -69,29 +69,37 @@ AC_DEFUN([PHP_GD_ZLIB],[
fi
])
-AC_DEFUN([PHP_GD_VPX],[
- if test "$PHP_VPX_DIR" != "no"; then
+AC_DEFUN([PHP_GD_WEBP],[
+ if test "$PHP_WEBP_DIR" != "no"; then
- for i in $PHP_VPX_DIR /usr/local /usr; do
- test -f $i/include/vpx_codec.h || test -f $i/include/vpx/vpx_codec.h && GD_VPX_DIR=$i && break
+ for i in $PHP_WEBP_DIR /usr/local /usr; do
+ test -f $i/include/webp/decode.h && GD_WEBP_DIR=$i && break
done
- if test -z "$GD_VPX_DIR"; then
- AC_MSG_ERROR([vpx_codec.h not found.])
+ if test -z "$GD_WEBP_DIR"; then
+ AC_MSG_ERROR([webp/decode.h not found.])
fi
- PHP_CHECK_LIBRARY(vpx,vpx_codec_destroy,
+ for i in $PHP_WEBP_DIR /usr/local /usr; do
+ test -f $i/include/webp/encode.h && GD_WEBP_DIR=$i && break
+ done
+
+ if test -z "$GD_WEBP_DIR"; then
+ AC_MSG_ERROR([webp/encode.h not found.])
+ fi
+
+ PHP_CHECK_LIBRARY(webp,WebPGetInfo,
[
- PHP_ADD_INCLUDE($GD_VPX_DIR/include)
+ PHP_ADD_INCLUDE($GD_WEBP_DIR/include)
PHP_ADD_LIBRARY(pthread)
- PHP_ADD_LIBRARY_WITH_PATH(vpx, $GD_VPX_DIR/$PHP_LIBDIR, GD_SHARED_LIBADD)
+ PHP_ADD_LIBRARY_WITH_PATH(webp, $GD_WEBP_DIR/$PHP_LIBDIR, GD_SHARED_LIBADD)
],[
- AC_MSG_ERROR([Problem with libvpx.(a|so). Please check config.log for more information.])
+ AC_MSG_ERROR([Problem with libwebp.(a|so). Please check config.log for more information.])
],[
- -L$GD_VPX_DIR/$PHP_LIBDIR
+ -L$GD_WEBP_DIR/$PHP_LIBDIR
])
else
- AC_MSG_RESULT([If configure fails try --with-vpx-dir=<DIR>])
+ AC_MSG_RESULT([If configure fails try --with-webp-dir=<DIR>])
fi
])
@@ -242,7 +250,7 @@ dnl PNG is required by GD library
dnl Various checks for GD features
PHP_GD_ZLIB
PHP_GD_TTSTR
- PHP_GD_VPX
+ PHP_GD_WEBP
PHP_GD_JPEG
PHP_GD_PNG
PHP_GD_XPM
@@ -253,7 +261,7 @@ fi
if test "$PHP_GD" = "yes"; then
GD_MODULE_TYPE=builtin
extra_sources="libgd/gd.c libgd/gd_gd.c libgd/gd_gd2.c libgd/gd_io.c libgd/gd_io_dp.c \
- libgd/gd_io_file.c libgd/gd_ss.c libgd/gd_io_ss.c libgd/webpimg.c libgd/gd_webp.c \
+ libgd/gd_io_file.c libgd/gd_ss.c libgd/gd_io_ss.c libgd/gd_webp.c \
libgd/gd_png.c libgd/gd_jpeg.c libgd/gdxpm.c libgd/gdfontt.c libgd/gdfonts.c \
libgd/gdfontmb.c libgd/gdfontl.c libgd/gdfontg.c libgd/gdtables.c libgd/gdft.c \
libgd/gdcache.c libgd/gdkanji.c libgd/wbmp.c libgd/gd_wbmp.c libgd/gdhelpers.c \
@@ -275,9 +283,9 @@ dnl Make sure the libgd/ is first in the include path
dnl Depending which libraries were included to PHP configure,
dnl enable the support in bundled GD library
- if test -n "$GD_VPX_DIR"; then
+ if test -n "$GD_WEBP_DIR"; then
AC_DEFINE(HAVE_GD_WEBP, 1, [ ])
- GDLIB_CFLAGS="$GDLIB_CFLAGS -DHAVE_LIBVPX"
+ GDLIB_CFLAGS="$GDLIB_CFLAGS -DHAVE_LIBWEBP"
fi
if test -n "$GD_JPEG_DIR"; then
@@ -310,7 +318,7 @@ else
dnl Various checks for GD features
PHP_GD_ZLIB
PHP_GD_TTSTR
- PHP_GD_VPX
+ PHP_GD_WEBP
PHP_GD_JPEG
PHP_GD_PNG
PHP_GD_XPM
diff --git a/ext/gd/config.w32 b/ext/gd/config.w32
index a51f027d38..d9716bae36 100644
--- a/ext/gd/config.w32
+++ b/ext/gd/config.w32
@@ -2,7 +2,7 @@
// vim:ft=javascript
ARG_WITH("gd", "Bundled GD support", "yes,shared");
-ARG_WITH("libvpx", "vpx support", "yes");
+ARG_WITH("libwebp", "webp support", "yes");
if (PHP_GD != "no") {
if (
@@ -21,12 +21,13 @@ if (PHP_GD != "no") {
CHECK_HEADER_ADD_INCLUDE("xpm.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\X11")
) {
- if (PHP_LIBVPX != "no") {
- if (CHECK_LIB("vpxmt.lib", "gd", PHP_GD) &&
- CHECK_HEADER_ADD_INCLUDE("vp8.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\vpx")) {
- ADD_FLAG("CFLAGS_GD", "/D HAVE_LIBVPX /D HAVE_GD_WEBP");
+ if (PHP_LIBWEBP != "no") {
+ if (CHECK_LIB("libwebp.lib", "gd", PHP_GD) &&
+ CHECK_HEADER_ADD_INCLUDE("decode.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\webp") &&
+ CHECK_HEADER_ADD_INCLUDE("encode.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\webp")) {
+ ADD_FLAG("CFLAGS_GD", "/D HAVE_LIBWEBP /D HAVE_GD_WEBP");
} else {
- WARNING("libvpx not enabled; libraries and headers not found");
+ WARNING("libwebp not enabled; libraries and headers not found");
}
}
CHECK_LIB("User32.lib", "gd", PHP_GD);
@@ -38,7 +39,7 @@ if (PHP_GD != "no") {
gdft.c gd_gd2.c gd_gd.c gd_gif_in.c gd_gif_out.c gdhelpers.c gd_io.c gd_io_dp.c \
gd_io_file.c gd_io_ss.c gd_jpeg.c gdkanji.c gd_png.c gd_ss.c \
gdtables.c gd_topal.c gd_wbmp.c gdxpm.c wbmp.c xbm.c gd_security.c gd_transform.c \
- gd_filter.c gd_pixelate.c gd_arc.c gd_rotate.c gd_color.c webpimg.c gd_webp.c \
+ gd_filter.c gd_pixelate.c gd_arc.c gd_rotate.c gd_color.c gd_webp.c \
gd_crop.c gd_interpolation.c gd_matrix.c", "gd");
AC_DEFINE('HAVE_LIBGD', 1, 'GD support');
ADD_FLAG("CFLAGS_GD", " \
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
index 9fcbb176c0..3f3c629dac 100644
--- a/ext/gd/gd.c
+++ b/ext/gd/gd.c
@@ -1294,6 +1294,11 @@ PHP_FUNCTION(gd_info)
add_assoc_bool(return_value, "XPM Support", 0);
#endif
add_assoc_bool(return_value, "XBM Support", 1);
+#ifdef HAVE_GD_WEBP
+ add_assoc_bool(return_value, "WebP Support", 1);
+#else
+ add_assoc_bool(return_value, "WebP Support", 0);
+#endif
#if defined(USE_GD_JISX0208)
add_assoc_bool(return_value, "JIS-mapped Japanese Font Support", 1);
#else
@@ -2435,7 +2440,7 @@ PHP_FUNCTION(imagecreatefromwebp)
_php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WEBP, "WEBP", gdImageCreateFromWebp, gdImageCreateFromWebpCtx);
}
/* }}} */
-#endif /* HAVE_GD_VPX */
+#endif /* HAVE_GD_WEBP */
/* {{{ proto resource imagecreatefromxbm(string filename)
Create a new image from XBM file or URL */
@@ -3852,10 +3857,9 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int
if (extended && EXT) { /* parse extended info */
zval *item;
zend_string *key;
- zend_ulong num_key;
/* walk the assoc array */
- ZEND_HASH_FOREACH_KEY_VAL(HASH_OF(EXT), num_key, key, item) {
+ ZEND_HASH_FOREACH_STR_KEY_VAL(HASH_OF(EXT), key, item) {
if (key == NULL) {
continue;
}
diff --git a/ext/gd/gd_ctx.c b/ext/gd/gd_ctx.c
index c848e438c7..5f7c5ae924 100644
--- a/ext/gd/gd_ctx.c
+++ b/ext/gd/gd_ctx.c
@@ -134,6 +134,11 @@ static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type,
php_error_docref(NULL, E_WARNING, "Invalid 2nd parameter, it must a filename or a stream");
RETURN_FALSE;
}
+ } else if (argc > 1 && file != NULL) {
+ stream = php_stream_open_wrapper(file, "wb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL);
+ if (stream == NULL) {
+ RETURN_FALSE;
+ }
} else {
ctx = emalloc(sizeof(gdIOCtx));
ctx->putC = _php_image_output_putc;
@@ -181,7 +186,7 @@ static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type,
q = i;
}
if (image_type == PHP_GDIMG_TYPE_XBM) {
- (*func_p)(im, file, q, ctx);
+ (*func_p)(im, file ? file : "", q, ctx);
} else {
(*func_p)(im, q, ctx);
}
diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c
index 3164a2cc9e..b427831672 100644
--- a/ext/gd/libgd/gd.c
+++ b/ext/gd/libgd/gd.c
@@ -1772,9 +1772,13 @@ void gdImageFillToBorder (gdImagePtr im, int x, int y, int border, int color)
if (x >= im->sx) {
x = im->sx - 1;
+ } else if (x < 0) {
+ x = 0;
}
if (y >= im->sy) {
y = im->sy - 1;
+ } else if (y < 0) {
+ y = 0;
}
for (i = x; i >= 0; i--) {
@@ -2042,7 +2046,9 @@ void gdImageRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
t=y1;
y1 = y2;
y2 = t;
-
+ }
+
+ if (x2 < x1) {
t = x1;
x1 = x2;
x2 = t;
@@ -2093,12 +2099,16 @@ void gdImageRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
return;
} else {
- y1v = y1h + 1;
- y2v = y2h - 1;
- gdImageLine(im, x1h, y1h, x2h, y1h, color);
- gdImageLine(im, x1h, y2h, x2h, y2h, color);
- gdImageLine(im, x1v, y1v, x1v, y2v, color);
- gdImageLine(im, x2v, y1v, x2v, y2v, color);
+ if (x1 == x2 || y1 == y2) {
+ gdImageLine(im, x1, y1, x2, y2, color);
+ } else {
+ y1v = y1h + 1;
+ y2v = y2h - 1;
+ gdImageLine(im, x1h, y1h, x2h, y1h, color);
+ gdImageLine(im, x1h, y2h, x2h, y2h, color);
+ gdImageLine(im, x1v, y1v, x1v, y2v, color);
+ gdImageLine(im, x2v, y1v, x2v, y2v, color);
+ }
}
}
diff --git a/ext/gd/libgd/gd_arc.c b/ext/gd/libgd/gd_arc.c
index 545dcb3fc5..1c74871388 100644
--- a/ext/gd/libgd/gd_arc.c
+++ b/ext/gd/libgd/gd_arc.c
@@ -58,7 +58,7 @@ void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
int x=0,mx1=0,mx2=0,my1=0,my2=0;
long aq,bq,dx,dy,r,rx,ry,a,b;
int i;
- int old_y1,old_y2;
+ int old_y2;
a=w>>1;
b=h>>1;
@@ -79,7 +79,6 @@ void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
ry = 0;
x = a;
old_y2=-2;
- old_y1=-2;
while (x > 0){
if (r > 0) {
my1++;my2--;
@@ -95,15 +94,10 @@ void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
if(old_y2!=my2){
for(i=mx1;i<=mx2;i++){
gdImageSetPixel(im,i,my1,c);
- }
- }
- if(old_y2!=my2){
- for(i=mx1;i<=mx2;i++){
gdImageSetPixel(im,i,my2,c);
}
}
old_y2 = my2;
- old_y1 = my1;
}
}
diff --git a/ext/gd/libgd/gd_crop.c b/ext/gd/libgd/gd_crop.c
index 84edb5d1f7..8331521446 100644
--- a/ext/gd/libgd/gd_crop.c
+++ b/ext/gd/libgd/gd_crop.c
@@ -80,14 +80,14 @@ printf("rect->x: %i\nrect->y: %i\nrect->width: %i\nrect->height: %i\n", crop->x,
y = crop->y;
if (src->trueColor) {
unsigned int dst_y = 0;
- while (y < (crop->y + (crop->height - 1))) {
+ while (y < (crop->y + crop->height)) {
/* TODO: replace 4 w/byte per channel||pitch once available */
memcpy(dst->tpixels[dst_y++], src->tpixels[y++] + crop->x, crop->width * 4);
}
} else {
int x;
- for (y = crop->y; y < (crop->y + (crop->height - 1)); y++) {
- for (x = crop->x; x < (crop->x + (crop->width - 1)); x++) {
+ for (y = crop->y; y < (crop->y + crop->height); y++) {
+ for (x = crop->x; x < (crop->x + crop->width); x++) {
dst->pixels[y - crop->y][x - crop->x] = src->pixels[y][x];
}
}
diff --git a/ext/gd/libgd/gd_interpolation.c b/ext/gd/libgd/gd_interpolation.c
index ed2fc188f9..f70169dddc 100644
--- a/ext/gd/libgd/gd_interpolation.c
+++ b/ext/gd/libgd/gd_interpolation.c
@@ -1059,6 +1059,11 @@ gdImagePtr gdImageScaleTwoPass(const gdImagePtr src, const unsigned int src_widt
gdImagePtr tmp_im;
gdImagePtr dst;
+ /* Convert to truecolor if it isn't; this code requires it. */
+ if (!src->trueColor) {
+ gdImagePaletteToTrueColor(src);
+ }
+
tmp_im = gdImageCreateTrueColor(new_width, src_height);
if (tmp_im == NULL) {
return NULL;
@@ -1068,12 +1073,12 @@ gdImagePtr gdImageScaleTwoPass(const gdImagePtr src, const unsigned int src_widt
dst = gdImageCreateTrueColor(new_width, new_height);
if (dst == NULL) {
- gdFree(tmp_im);
+ gdImageDestroy(tmp_im);
return NULL;
}
gdImageSetInterpolationMethod(dst, src->interpolation_id);
_gdScaleVert(tmp_im, new_width, src_height, dst, new_width, new_height);
- gdFree(tmp_im);
+ gdImageDestroy(tmp_im);
return dst;
}
@@ -2173,10 +2178,13 @@ gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, in
/* no interpolation needed here */
switch (angle_rounded) {
- case 9000:
+ case -27000:
+ case 9000:
return gdImageRotate90(src, 0);
- case 18000:
+ case -18000:
+ case 18000:
return gdImageRotate180(src, 0);
+ case -9000:
case 27000:
return gdImageRotate270(src, 0);
}
diff --git a/ext/gd/libgd/gd_webp.c b/ext/gd/libgd/gd_webp.c
index bf9ac9dd0e..eef65f79fb 100644
--- a/ext/gd/libgd/gd_webp.c
+++ b/ext/gd/libgd/gd_webp.c
@@ -1,28 +1,14 @@
+#ifdef HAVE_LIBWEBP
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "gd.h"
-
-
-#ifdef HAVE_LIBVPX
-#include "webpimg.h"
#include "gdhelpers.h"
+#include "webp/decode.h"
+#include "webp/encode.h"
-extern void gd_YUV420toRGBA(uint8* Y,
- uint8* U,
- uint8* V,
- gdImagePtr im);
-
-extern void gd_RGBAToYUV420(gdImagePtr im2,
- uint8* Y,
- uint8* U,
- uint8* V);
-
-const char * gdWebpGetVersionString()
-{
- return "not defined";
-}
+#define GD_WEBP_ALLOC_STEP (4*1024)
gdImagePtr gdImageCreateFromWebp (FILE * inFile)
{
@@ -34,42 +20,28 @@ gdImagePtr gdImageCreateFromWebp (FILE * inFile)
return im;
}
+
gdImagePtr gdImageCreateFromWebpPtr (int size, void *data)
{
- int width, height, ret;
- unsigned char *Y = NULL;
- unsigned char *U = NULL;
- unsigned char *V = NULL;
gdImagePtr im;
-
- ret = WebPDecode(data, size, &Y, &U, &V, &width, &height);
- if (ret != webp_success) {
- if (Y) free(Y);
- if (U) free(U);
- if (V) free(V);
- php_gd_error("WebP decode: fail to decode input data");
- return NULL;
- }
- im = gdImageCreateTrueColor(width, height);
- if (!im) {
- return NULL;
- }
- gd_YUV420toRGBA(Y, U, V, im);
+ gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
+ if (!in)
+ return 0;
+ im = gdImageCreateFromWebpCtx(in);
+ in->gd_free(in);
return im;
}
-#define GD_WEBP_ALLOC_STEP (4*1024)
-
gdImagePtr gdImageCreateFromWebpCtx (gdIOCtx * infile)
{
- int width, height, ret;
- unsigned char *filedata = NULL;
+ int width, height;
+ uint8_t *filedata = NULL;
+ uint8_t *argb = NULL;
unsigned char *read, *temp;
- unsigned char *Y = NULL;
- unsigned char *U = NULL;
- unsigned char *V = NULL;
size_t size = 0, n;
gdImagePtr im;
+ int x, y;
+ uint8_t *p;
do {
temp = gdRealloc(filedata, size+GD_WEBP_ALLOC_STEP);
@@ -80,31 +52,106 @@ gdImagePtr gdImageCreateFromWebpCtx (gdIOCtx * infile)
if (filedata) {
gdFree(filedata);
}
- php_gd_error("WebP decode: realloc failed");
+ zend_error(E_ERROR, "WebP decode: realloc failed");
return NULL;
}
n = gdGetBuf(read, GD_WEBP_ALLOC_STEP, infile);
- /* differs from upstream where gdGetBuf return 0 instead of EOF */
if (n>0 && n!=EOF) {
size += n;
}
} while (n>0 && n!=EOF);
- ret = WebPDecode(filedata, size, &Y, &U, &V, &width, &height);
- gdFree(filedata);
- if (ret != webp_success) {
- if (Y) free(Y);
- if (U) free(U);
- if (V) free(V);
- php_gd_error("WebP decode: fail to decode input data");
+ if (WebPGetInfo(filedata,size, &width, &height) == 0) {
+ zend_error(E_ERROR, "gd-webp cannot get webp info");
+ gdFree(temp);
return NULL;
}
+
im = gdImageCreateTrueColor(width, height);
- gd_YUV420toRGBA(Y, U, V, im);
+ if (!im) {
+ gdFree(temp);
+ return NULL;
+ }
+ argb = WebPDecodeARGB(filedata, size, &width, &height);
+ if (!argb) {
+ zend_error(E_ERROR, "gd-webp cannot allocate temporary buffer");
+ gdFree(temp);
+ gdImageDestroy(im);
+ return NULL;
+ }
+ for (y = 0, p = argb; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ register uint8_t a = gdAlphaMax - (*(p++) >> 1);
+ register uint8_t r = *(p++);
+ register uint8_t g = *(p++);
+ register uint8_t b = *(p++);
+ im->tpixels[y][x] = gdTrueColorAlpha(r, g, b, a);
+ }
+ }
+ gdFree(filedata);
+ /* do not use gdFree here, in case gdFree/alloc is mapped to something else than libc */
+ free(argb);
+ gdFree(temp);
+ im->saveAlphaFlag = 1;
return im;
}
+void gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quantization)
+{
+ uint8_t *argb;
+ int x, y;
+ uint8_t *p;
+ uint8_t *out;
+ size_t out_size;
+
+ if (im == NULL) {
+ return;
+ }
+
+ if (!gdImageTrueColor(im)) {
+ zend_error(E_ERROR, "Paletter image not supported by webp");
+ return;
+ }
+
+ if (quantization == -1) {
+ quantization = 80;
+ }
+
+ argb = (uint8_t *)gdMalloc(gdImageSX(im) * 4 * gdImageSY(im));
+ if (!argb) {
+ return;
+ }
+ p = argb;
+ for (y = 0; y < gdImageSY(im); y++) {
+ for (x = 0; x < gdImageSX(im); x++) {
+ register int c;
+ register char a;
+ c = im->tpixels[y][x];
+ a = gdTrueColorGetAlpha(c);
+ if (a == 127) {
+ a = 0;
+ } else {
+ a = 255 - ((a << 1) + (a >> 6));
+ }
+ *(p++) = gdTrueColorGetRed(c);
+ *(p++) = gdTrueColorGetGreen(c);
+ *(p++) = gdTrueColorGetBlue(c);
+ *(p++) = a;
+ }
+ }
+ out_size = WebPEncodeRGBA(argb, gdImageSX(im), gdImageSY(im), gdImageSX(im) * 4, quantization, &out);
+ if (out_size == 0) {
+ zend_error(E_ERROR, "gd-webp encoding failed");
+ goto freeargb;
+ }
+ gdPutBuf(out, out_size, outfile);
+ free(out);
+
+freeargb:
+ gdFree(argb);
+}
+
void gdImageWebpEx (gdImagePtr im, FILE * outFile, int quantization)
{
gdIOCtx *out = gdNewFileCtx(outFile);
@@ -115,7 +162,7 @@ void gdImageWebpEx (gdImagePtr im, FILE * outFile, int quantization)
void gdImageWebp (gdImagePtr im, FILE * outFile)
{
gdIOCtx *out = gdNewFileCtx(outFile);
- gdImageWebpCtx(im, out, -1);
+ gdImageWebpCtx(im, out, -1);
out->gd_free(out);
}
@@ -139,74 +186,4 @@ void * gdImageWebpPtrEx (gdImagePtr im, int *size, int quantization)
out->gd_free(out);
return rv;
}
-
-/*
- * Maps normalized QP (quality) to VP8 QP
- */
-int mapQualityToVP8QP(int quality) {
-#define MIN_QUALITY 0
-#define MAX_QUALITY 100
-#define MIN_VP8QP 1
-#define MAX_VP8QP 63
- const float scale = MAX_VP8QP - MIN_VP8QP;
- const float vp8qp =
- scale * (MAX_QUALITY - quality) / (MAX_QUALITY - MIN_QUALITY) + MIN_VP8QP;
- if (quality < MIN_QUALITY || quality > MAX_QUALITY) {
- php_gd_error("Wrong quality value %d.", quality);
- return -1;
- }
-
- return (int)(vp8qp + 0.5);
-}
-
-/* This routine is based in part on code from Dale Lutz (Safe Software Inc.)
- * and in part on demo code from Chapter 15 of "PNG: The Definitive Guide"
- * (http://www.cdrom.com/pub/png/pngbook.html).
- */
-void gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quantization)
-{
- int width = im->sx;
- int height = im->sy;
- int colors = im->colorsTotal;
- int *open = im->open;
-
- int yuv_width, yuv_height, yuv_nbytes, ret;
- int vp8_quality;
- unsigned char *Y = NULL,
- *U = NULL,
- *V = NULL;
- unsigned char *filedata = NULL;
-
- /* Conversion to Y,U,V buffer */
- yuv_width = (width + 1) >> 1;
- yuv_height = (height + 1) >> 1;
- yuv_nbytes = width * height + 2 * yuv_width * yuv_height;
-
- if ((Y = (unsigned char *)gdCalloc(yuv_nbytes, sizeof(unsigned char))) == NULL) {
- php_gd_error("gd-webp error: cannot allocate Y buffer");
- return;
- }
- vp8_quality = mapQualityToVP8QP(quantization);
-
- U = Y + width * height;
- V = U + yuv_width * yuv_height;
- gd_RGBAToYUV420(im, Y, U, V);
-
- /* Encode Y,U,V and write data to file */
- ret = WebPEncode(Y, U, V, width, height, width, yuv_width, yuv_height, yuv_width,
- vp8_quality, &filedata, &yuv_nbytes, NULL);
- gdFree(Y);
-
- if (ret != webp_success) {
- if (filedata) {
- free(filedata);
- }
- php_gd_error("gd-webp error: WebP Encoder failed");
- return;
- }
-
- gdPutBuf (filedata, yuv_nbytes, outfile);
- free(filedata);
-}
-
-#endif /* HAVE_LIBVPX */
+#endif /* HAVE_LIBWEBP */
diff --git a/ext/gd/libgd/webpimg.c b/ext/gd/libgd/webpimg.c
deleted file mode 100644
index 9d801a29a3..0000000000
--- a/ext/gd/libgd/webpimg.c
+++ /dev/null
@@ -1,900 +0,0 @@
-/*===========================================================================*
- - Copyright 2010 Google Inc.
- -
- - This code is licensed under the same terms as WebM:
- - Software License Agreement: http://www.webmproject.org/license/software/
- - Additional IP Rights Grant: http://www.webmproject.org/license/additional/
- *===========================================================================*/
-
-/*
- * Encoding/Decoding of WebP still image compression format.
- *
- * 1. WebPDecode: Takes an array of bytes (string) corresponding to the WebP
- * encoded image and generates output in the YUV format with
- * the color components U, V subsampled to 1/2 resolution along
- * each dimension.
- *
- * 2. YUV420toRGBA: Converts from YUV (with color subsampling) such as produced
- * by the WebPDecode routine into 32 bits per pixel RGBA data
- * array. This data array can be directly used by the Leptonica
- * Pix in-memory image format.
- *
- * 3. WebPEncode: Takes a Y, U, V data buffers (with color components U and V
- * subsampled to 1/2 resolution) and generates the WebP string
- *
- * 4. RGBAToYUV420: Generates Y, U, V data (with color subsampling) from 32 bits
- * per pixel RGBA data buffer. The resulting YUV data can be
- * directly fed into the WebPEncode routine.
- *
- * 5. AdjustColorspace:
- *
- * 6. AdjustColorspaceBack:
- */
-#include "gd.h"
-#ifdef HAVE_LIBVPX
-#include "webpimg.h"
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-
-#include "vpx/vpx_decoder.h"
-#include "vpx/vp8dx.h"
-#include "vpx/vpx_encoder.h"
-#include "vpx/vp8cx.h"
-#include "gd.h"
-
-/*---------------------------------------------------------------------*
- * color conversions *
- *---------------------------------------------------------------------*/
-
-#ifndef inline
-# define inline __inline
-#endif
-static inline int clip(float v, int a, int b) {
- return (v > b) ? b : (v < 0) ? 0 : (int)(v);
-}
-enum {
- COLOR_RED = 0,
- COLOR_GREEN = 1,
- COLOR_BLUE = 2,
- ALPHA_CHANNEL = 3
-};
-
-/* endian neutral extractions of RGBA from a 32 bit pixel */
-static const uint32 RED_SHIFT =
- 8 * (sizeof(uint32) - 1 - COLOR_RED); /* 24 */
-static const uint32 GREEN_SHIFT =
- 8 * (sizeof(uint32) - 1 - COLOR_GREEN); /* 16 */
-static const uint32 BLUE_SHIFT =
- 8 * (sizeof(uint32) - 1 - COLOR_BLUE); /* 8 */
-static const uint32 ALPHA_SHIFT =
- 8 * (sizeof(uint32) - 1 - ALPHA_CHANNEL); /* 0 */
-
-static inline int GetRed(const uint32* rgba) {
- return gdTrueColorGetRed(*rgba);
-}
-
-static inline int GetGreen(const uint32* rgba) {
- return gdTrueColorGetGreen(*rgba);
-}
-
-static inline int GetBlue(const uint32* rgba) {
- return gdTrueColorGetBlue(*rgba);
-}
-
-enum { YUV_FRAC = 16 };
-
-static inline int clip_uv(int v) {
- v = (v + (257 << (YUV_FRAC + 2 - 1))) >> (YUV_FRAC + 2);
- return ((v & ~0xff) == 0) ? v : v < 0 ? 0u : 255u;
-}
-
-
-/* YUV <-----> RGB conversions */
-/* The exact naming is Y'CbCr, following the ITU-R BT.601 standard.
- * More information at: http://en.wikipedia.org/wiki/YCbCr
- */
-static inline int GetLumaY(int r, int g, int b) {
- const int kRound = (1 << (YUV_FRAC - 1)) + (16 << YUV_FRAC);
- // Y = 0.2569 * R + 0.5044 * G + 0.0979 * B + 16
- const int luma = 16839 * r + 33059 * g + 6420 * b;
- return (luma + kRound) >> YUV_FRAC;
-}
-
-static inline int GetLumaYfromPtr(uint32* rgba) {
- const int r = GetRed(rgba);
- const int g = GetGreen(rgba);
- const int b = GetBlue(rgba);
- return GetLumaY(r, g, b);
-}
-
-static inline int GetChromaU(int r, int g, int b) {
- // U = -0.1483 * R - 0.2911 * G + 0.4394 * B + 128
- return clip_uv(-9719 * r - 19081 * g + 28800 * b);
-}
-
-static inline int GetChromaV(int r, int g, int b) {
- // V = 0.4394 * R - 0.3679 * G - 0.0715 * B + 128
- return clip_uv(+28800 * r - 24116 * g - 4684 * b);
-}
-
-/* Converts YUV to RGB and writes into a 32 bit pixel in endian
- * neutral fashion
- */
-enum { RGB_FRAC = 16, RGB_HALF = (1 << RGB_FRAC) / 2,
- RGB_RANGE_MIN = -227, RGB_RANGE_MAX = 256 + 226 };
-
-static int init_done = 0;
-static int16_t kVToR[256], kUToB[256];
-static int32_t kVToG[256], kUToG[256];
-static uint8_t kClip[RGB_RANGE_MAX - RGB_RANGE_MIN];
-
-static void InitTables() {
- int i;
- for (i = 0; i < 256; ++i) {
- kVToR[i] = (89858 * (i - 128) + RGB_HALF) >> RGB_FRAC;
- kUToG[i] = -22014 * (i - 128) + RGB_HALF;
- kVToG[i] = -45773 * (i - 128);
- kUToB[i] = (113618 * (i - 128) + RGB_HALF) >> RGB_FRAC;
- }
- for (i = RGB_RANGE_MIN; i < RGB_RANGE_MAX; ++i) {
- const int j = ((i - 16) * 76283 + RGB_HALF) >> RGB_FRAC;
- kClip[i - RGB_RANGE_MIN] = (j < 0) ? 0 : (j > 255) ? 255 : j;
- }
-
- init_done = 1;
-}
-
-static void ToRGB(int y, int u, int v, uint32* const dst) {
- const int r_off = kVToR[v];
- const int g_off = (kVToG[v] + kUToG[u]) >> RGB_FRAC;
- const int b_off = kUToB[u];
- const int r = kClip[y + r_off - RGB_RANGE_MIN];
- const int g = kClip[y + g_off - RGB_RANGE_MIN];
- const int b = kClip[y + b_off - RGB_RANGE_MIN];
- *dst = (r << RED_SHIFT) | (g << GREEN_SHIFT) | (b << BLUE_SHIFT);
-}
-
-static inline uint32 get_le32(const uint8* const data) {
- return data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
-}
-
-/* Returns the difference (in dB) between two images represented in YUV format
- *
- * Input:
- * Y1/U1/V1: The Y/U/V data of the first image
- * Y2/U2/V2: The Y/U/V data of the second image
- *
- * Returns the PSNR (http://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio)
- * value computed between the two images
- */
-double GetPSNRYuv(const uint8* Y1,
- const uint8* U1,
- const uint8* V1,
- const uint8* Y2,
- const uint8* U2,
- const uint8* V2,
- int y_width,
- int y_height) {
- int x, y, row_idx;
- const int uv_width = ((y_width + 1) >> 1);
- const int uv_height = ((y_height + 1) >> 1);
- double sse = 0., count = 0.;
- for (y = 0; y < y_height; ++y) {
- count += y_width;
- row_idx = y * y_width;
- for (x = 0; x < y_width; ++x) {
- double diff = Y1[row_idx + x] - Y2[row_idx + x];
- sse += diff * diff;
- }
- }
- for (y = 0; y < uv_height; ++y) {
- count += 2 * uv_width;
- row_idx = y * uv_width;
- for (x = 0; x < uv_width; ++x) {
- const double diff_U = U1[row_idx + x] - U2[row_idx + x];
- const double diff_V = V1[row_idx + x] - V2[row_idx + x];
- sse += diff_U * diff_U + diff_V * diff_V;
- }
- }
- return -4.3429448 * log(sse / (255. * 255. * count));
-}
-
-/* Returns the difference (in dB) between two images. One represented
- * using Y,U,V vectors and the other is webp image data.
- * Input:
- * Y1/U1/V1: The Y/U/V data of the first image
- * imgdata: data buffer containing webp image
- * imgdata_size: size of the imgdata buffer
- *
- * Returns the PSNR value computed between the two images
- */
-double WebPGetPSNR(const uint8* Y1,
- const uint8* U1,
- const uint8* V1,
- uint8* imgdata,
- int imgdata_size) {
- uint8* Y2 = NULL;
- uint8* U2 = NULL;
- uint8* V2 = NULL;
- int w = 0, h = 0;
- double psnr = 0;
-
- WebPDecode(imgdata,
- imgdata_size,
- &Y2,
- &U2,
- &V2,
- &w,
- &h);
-
- psnr = GetPSNRYuv(Y1, U1, V1, Y2, U2, V2, w, h);
- free(Y2);
-
- return psnr;
-}
-
-/*---------------------------------------------------------------------*
- * Reading WebP *
- *---------------------------------------------------------------------*/
-
-/* RIFF layout is:
- * 0ffset tag
- * 0...3 "RIFF" 4-byte tag
- * 4...7 size of image data (including metadata) starting at offset 8
- * 8...11 "WEBP" our form-type signature
- * 12..15 "VP8 " 4-byte tags, describing the raw video format used
- * 16..19 size of the raw WebP image data, starting at offset 20
- * 20.... the WebP bytes
- * There can be extra chunks after the "VP8 " chunk (ICMT, ICOP, ...)
- * All 32-bits sizes are in little-endian order.
- * Note: chunk data must be padded to multiple of 2 in size
- */
-
-int SkipRiffHeader(const uint8** data_ptr, int *data_size_ptr) {
- /* 20 bytes RIFF header 10 bytes VP8 header */
- const int kHeaderSize = (20 + 10);
- uint32 chunk_size = 0xffffffffu;
-
- if (*data_size_ptr >= kHeaderSize && !memcmp(*data_ptr, "RIFF", 4)) {
- if (memcmp(*data_ptr + 8, "WEBP", 4)) {
- return 0; /* wrong image file signature */
- } else {
- const uint32 riff_size = get_le32(*data_ptr + 4);
- if (memcmp(*data_ptr + 12, "VP8 ", 4)) {
- return 0; /* invalid compression format */
- }
- chunk_size = get_le32(*data_ptr + 16);
- if ((chunk_size > riff_size + 8) || (chunk_size & 1)) {
- return 0; /* inconsistent size information. */
- }
- /* We have a RIFF container. Skip it. */
- *data_ptr += 20;
- *data_size_ptr -= 20;
- }
- }
- return chunk_size;
-}
-
-/* Generate RGBA row from an YUV row (with width upsampling of chrome data)
- * Input:
- * 1, 2, 3. y_src, u_src, v_src - Pointers to input Y, U, V row data
- * respectively. We reuse these variables, they iterate over all pixels in
- * the row.
- * 4. y_width: width of the Y image plane (aka image width)
- * Output:
- * 5. rgb_sat: pointer to the output rgb row. We reuse this variable, it
- * iterates over all pixels in the row.
- */
-static void YUV420toRGBLine(uint8* y_src,
- uint8* u_src,
- uint8* v_src,
- int y_width,
- uint32* rgb_dst) {
- int x;
- for (x = 0; x < (y_width >> 1); ++x) {
- const int U = u_src[0];
- const int V = v_src[0];
- ToRGB(y_src[0], U, V, rgb_dst);
- ToRGB(y_src[1], U, V, rgb_dst + 1);
- ++u_src;
- ++v_src;
- y_src += 2;
- rgb_dst += 2;
- }
- if (y_width & 1) { /* Rightmost pixel */
- ToRGB(y_src[0], (*u_src), (*v_src), rgb_dst);
- }
-}
-
-/* Converts from YUV (with color subsampling) such as produced by the WebPDecode
- * routine into 32 bits per pixel RGBA data array. This data array can be
- * directly used by the Leptonica Pix in-memory image format.
- * Input:
- * 1, 2, 3. Y, U, V: the input data buffers
- * 4. pixwpl: the desired words per line corresponding to the supplied
- * output pixdata.
- * 5. width, height: the dimensions of the image whose data resides in Y,
- * U, V.
- * Output:
- * 6. pixdata: the output data buffer. Caller should allocate
- * height * pixwpl bytes of memory before calling this routine.
- */
-void YUV420toRGBA(uint8* Y,
- uint8* U,
- uint8* V,
- int words_per_line,
- int width,
- int height,
- uint32* pixdata) {
- int y_width = width;
- int y_stride = y_width;
- int uv_width = ((y_width + 1) >> 1);
- int uv_stride = uv_width;
- int y;
-
- if (!init_done)
- InitTables();
-
- /* note that the U, V upsampling in height is happening here as the U, V
- * buffers sent to successive odd-even pair of lines is same.
- */
- for (y = 0; y < height; ++y) {
- YUV420toRGBLine(Y + y * y_stride,
- U + (y >> 1) * uv_stride,
- V + (y >> 1) * uv_stride,
- width,
- pixdata + y * words_per_line);
- }
-}
-
-void gd_YUV420toRGBA(uint8* Y,
- uint8* U,
- uint8* V,
- gdImagePtr im) {
- int width = im->sx;
- int height = im->sy;
- int y_width = width;
- int y_stride = y_width;
- int uv_width = ((y_width + 1) >> 1);
- int uv_stride = uv_width;
- int y;
-
- /* output im must be truecolor */
- if (!im->trueColor) {
- return;
- }
-
- if (!init_done)
- InitTables();
-
- /* note that the U, V upsampling in height is happening here as the U, V
- * buffers sent to successive odd-even pair of lines is same.
- */
- for (y = 0; y < height; ++y) {
- YUV420toRGBLine(Y + y * y_stride,
- U + (y >> 1) * uv_stride,
- V + (y >> 1) * uv_stride,
- width,
- im->tpixels[y]);
- }
-}
-
-static WebPResult VPXDecode(const uint8* data,
- int data_size,
- uint8** p_Y,
- uint8** p_U,
- uint8** p_V,
- int* p_width,
- int* p_height) {
- vpx_codec_ctx_t dec;
- vp8_postproc_cfg_t ppcfg;
- WebPResult result = webp_failure;
-
- if (!data || data_size <= 10 || !p_Y || !p_U || !p_V
- || *p_Y != NULL || *p_U != NULL || *p_V != NULL) {
- return webp_failure;
- }
-
- if (vpx_codec_dec_init(&dec,
- &vpx_codec_vp8_dx_algo, NULL, 0) != VPX_CODEC_OK) {
- return webp_failure;
- }
-
- ppcfg.post_proc_flag = VP8_NOFILTERING;
- vpx_codec_control(&dec, VP8_SET_POSTPROC, &ppcfg);
-
-
- if (vpx_codec_decode(&dec, data, data_size, NULL, 0) == VPX_CODEC_OK) {
- vpx_codec_iter_t iter = NULL;
- vpx_image_t* const img = vpx_codec_get_frame(&dec, &iter);
- if (img) {
- int y_width = img->d_w;
- int y_height = img->d_h;
- int y_stride = y_width;
- int uv_width = (y_width + 1) >> 1;
- int uv_stride = uv_width;
- int uv_height = ((y_height + 1) >> 1);
- int y;
-
- *p_width = y_width;
- *p_height = y_height;
- if ((*p_Y = (uint8 *)(calloc(y_stride * y_height
- + 2 * uv_stride * uv_height,
- sizeof(uint8)))) != NULL) {
- *p_U = *p_Y + y_height * y_stride;
- *p_V = *p_U + uv_height * uv_stride;
- for (y = 0; y < y_height; ++y) {
- memcpy(*p_Y + y * y_stride,
- img->planes[0] + y * img->stride[0],
- y_width);
- }
- for (y = 0; y < uv_height; ++y) {
- memcpy(*p_U + y * uv_stride,
- img->planes[1] + y * img->stride[1],
- uv_width);
- memcpy(*p_V + y * uv_stride,
- img->planes[2] + y * img->stride[2],
- uv_width);
- }
- result = webp_success;
- }
- }
- }
- vpx_codec_destroy(&dec);
-
- return result;
-}
-
-WebPResult WebPDecode(const uint8* data,
- int data_size,
- uint8** p_Y,
- uint8** p_U,
- uint8** p_V,
- int* p_width,
- int* p_height) {
-
- const uint32 chunk_size = SkipRiffHeader(&data, &data_size);
- if (!chunk_size) {
- return webp_failure; /* unsupported RIFF header */
- }
-
- return VPXDecode(data, data_size, p_Y, p_U, p_V, p_width, p_height);
-}
-
-/*---------------------------------------------------------------------*
- * Writing WebP *
- *---------------------------------------------------------------------*/
-
-/* Takes a pair of RGBA row data as input and generates 2 rows of Y data and one
- * row of subsampled U, V data as output
- * Input:
- * 1, 2. rgb_line1, rgb_line2 - input rgba rows
- * 3. width - image width
- * Outout:
- * 4, 5, 6: Output Y, U, V row
- */
-static void RGBALinepairToYUV420(uint32* rgb_line1,
- uint32* rgb_line2,
- int width,
- uint8* Y_dst1,
- uint8* Y_dst2,
- uint8* u_dst,
- uint8* v_dst) {
- int x;
- for (x = (width >> 1); x > 0; --x) {
- const int sum_r =
- GetRed(rgb_line1 + 0) + GetRed(rgb_line1 + 1) +
- GetRed(rgb_line2 + 0) + GetRed(rgb_line2 + 1);
- const int sum_g =
- GetGreen(rgb_line1 + 0) + GetGreen(rgb_line1 + 1) +
- GetGreen(rgb_line2 + 0) + GetGreen(rgb_line2 + 1);
- const int sum_b =
- GetBlue(rgb_line1 + 0) + GetBlue(rgb_line1 + 1) +
- GetBlue(rgb_line2 + 0) + GetBlue(rgb_line2 + 1);
-
- Y_dst1[0] = GetLumaYfromPtr(rgb_line1 + 0);
- Y_dst1[1] = GetLumaYfromPtr(rgb_line1 + 1);
- Y_dst2[0] = GetLumaYfromPtr(rgb_line2 + 0);
- Y_dst2[1] = GetLumaYfromPtr(rgb_line2 + 1);
-
- *u_dst++ = GetChromaU(sum_r, sum_g, sum_b);
- *v_dst++ = GetChromaV(sum_r, sum_g, sum_b);
-
- rgb_line1 += 2;
- rgb_line2 += 2;
- Y_dst1 += 2;
- Y_dst2 += 2;
- }
-
- if (width & 1) { /* rightmost pixel. */
- const int sum_r = GetRed(rgb_line1) + GetRed(rgb_line2);
- const int sum_g = GetGreen(rgb_line1) + GetGreen(rgb_line2);
- const int sum_b = GetBlue(rgb_line1) + GetBlue(rgb_line2);
-
- Y_dst1[0] = GetLumaYfromPtr(rgb_line1);
- Y_dst2[0] = GetLumaYfromPtr(rgb_line2);
- *u_dst = GetChromaU(2 * sum_r, 2 * sum_g, 2 * sum_b);
- *v_dst = GetChromaV(2 * sum_r, 2 * sum_g, 2 * sum_b);
- }
-}
-
-/* Generates Y, U, V data (with color subsampling) from 32 bits
- * per pixel RGBA data buffer. The resulting YUV data can be directly fed into
- * the WebPEncode routine.
- * Input:
- * 1. pixdatainput rgba data buffer
- * 2. words per line corresponding to pixdata
- * 3, 4. image width and height respectively
- * Output:
- * 5, 6, 7. Output YUV data buffers
- */
-void gd_RGBAToYUV420(gdImagePtr im2,
- uint8* Y,
- uint8* U,
- uint8* V) {
- int y_width = im2->sx;
- int y_height = im2->sy;
- int y_stride = y_width;
- int uv_width = ((y_width + 1) >> 1);
- int uv_stride = uv_width;
- int y;
- gdImagePtr im = NULL;
- int free_im = 0;
-
- if (!im2->trueColor) {
- /* Todo: Replace the color/YUV functions with our own and simplify
- that should boost the conversion a bit as well, not only for
- palette image. */
- im = gdImageCreateTrueColor(im2->sx, im2->sy);
- if (!im) {
- php_gd_error("gd-webp error: cannot convert palette input to truecolor");
- return;
- }
- gdImageCopy(im, im2, 0, 0, 0, 0, im->sx, im->sy);
- free_im = 1;
- } else {
- im = im2;
- }
- for (y = 0; y < (y_height >> 1); ++y) {
- RGBALinepairToYUV420(im->tpixels[2 * y],
- im->tpixels[2 * y + 1],
- y_width,
- Y + 2 * y * y_stride,
- Y + (2 * y + 1) * y_stride,
- U + y * uv_stride,
- V + y * uv_stride);
- }
- if (y_height & 1) {
- RGBALinepairToYUV420(im->tpixels[y_height - 1],
- im->tpixels[y_height - 1],
- y_width,
- Y + (y_height - 1) * y_stride,
- Y + (y_height - 1) * y_stride,
- U + (y_height >> 1) * uv_stride,
- V + (y_height >> 1) * uv_stride);
- }
- if (free_im) {
- gdImageDestroy(im);
- }
-}
-
-/* Generates Y, U, V data (with color subsampling) from 32 bits
- * per pixel RGBA data buffer. The resulting YUV data can be directly fed into
- * the WebPEncode routine.
- * Input:
- * 1. pixdatainput rgba data buffer
- * 2. words per line corresponding to pixdata
- * 3, 4. image width and height respectively
- * Output:
- * 5, 6, 7. Output YUV data buffers
- */
-void RGBAToYUV420(uint32* pixdata,
- int words_per_line,
- int width,
- int height,
- uint8* Y,
- uint8* U,
- uint8* V) {
- int y_width = width;
- int y_height = height;
- int y_stride = y_width;
- int uv_width = ((y_width + 1) >> 1);
- int uv_stride = uv_width;
- int y;
-
- for (y = 0; y < (y_height >> 1); ++y) {
- RGBALinepairToYUV420(pixdata + 2 * y * words_per_line,
- pixdata + (2 * y + 1) * words_per_line,
- y_width,
- Y + 2 * y * y_stride,
- Y + (2 * y + 1) * y_stride,
- U + y * uv_stride,
- V + y * uv_stride);
- }
- if (y_height & 1) {
- RGBALinepairToYUV420(pixdata + (y_height - 1) * words_per_line,
- pixdata + (y_height - 1) * words_per_line,
- y_width,
- Y + (y_height - 1) * y_stride,
- Y + (y_height - 1) * y_stride,
- U + (y_height >> 1) * uv_stride,
- V + (y_height >> 1) * uv_stride);
- }
-}
-
-static int codec_ctl(vpx_codec_ctx_t *enc,
- enum vp8e_enc_control_id id,
- int value) {
- const vpx_codec_err_t res = vpx_codec_control_(enc, id, value);
- if (res != VPX_CODEC_OK) {
- return webp_failure;
- }
- return webp_success;
-}
-
-static void SetupParams(vpx_codec_enc_cfg_t* cfg,
- int QP) {
- cfg->g_threads = 2;
- cfg->rc_min_quantizer = QP;
- cfg->rc_max_quantizer = QP;
- cfg->kf_mode = VPX_KF_FIXED;
-}
-
-/* VPXEncode: Takes a Y, U, V data buffers (with color components U and V
- * subsampled to 1/2 resolution) and generates the VPX string.
- * Output VPX string is placed in the *p_out buffer. container_size
- * indicates number of bytes to be left blank at the beginning of
- * *p_out buffer to accommodate for a container header.
- *
- * Return: success/failure
- */
-static WebPResult VPXEncode(const uint8* Y,
- const uint8* U,
- const uint8* V,
- int y_width,
- int y_height,
- int y_stride,
- int uv_width,
- int uv_height,
- int uv_stride,
- int QP,
- int container_size,
- unsigned char** p_out,
- int* p_out_size_bytes) {
- vpx_codec_iface_t* iface = &vpx_codec_vp8_cx_algo;
- vpx_codec_err_t res;
- vpx_codec_enc_cfg_t cfg;
- vpx_codec_ctx_t enc;
- WebPResult result = webp_failure;
- vpx_image_t img;
-
- *p_out = NULL;
- *p_out_size_bytes = 0;
-
-
- /* validate input parameters. */
- if (!p_out || !Y || !U || !V
- || y_width <= 0 || y_height <= 0 || uv_width <= 0 || uv_height <= 0
- || y_stride < y_width || uv_stride < uv_width
- || QP < 0 || QP > 63) {
- return webp_failure;
- }
-
- res = vpx_codec_enc_config_default(iface, &cfg, 0);
- if (res != VPX_CODEC_OK) {
- return webp_failure;
- }
-
- SetupParams(&cfg, QP);
- cfg.g_w = y_width;
- cfg.g_h = y_height;
-
- res = vpx_codec_enc_init(&enc, iface, &cfg, 0);
-
- if (res == VPX_CODEC_OK) {
- codec_ctl(&enc, VP8E_SET_CPUUSED, 3);
- codec_ctl(&enc, VP8E_SET_NOISE_SENSITIVITY, 0);
- codec_ctl(&enc, VP8E_SET_SHARPNESS, 0);
- codec_ctl(&enc, VP8E_SET_ENABLEAUTOALTREF, 0);
- codec_ctl(&enc, VP8E_SET_ARNR_MAXFRAMES, 0);
- codec_ctl(&enc, VP8E_SET_ARNR_TYPE, 0);
- codec_ctl(&enc, VP8E_SET_ARNR_STRENGTH, 0);
- codec_ctl(&enc, VP8E_SET_STATIC_THRESHOLD, 0);
- codec_ctl(&enc, VP8E_SET_TOKEN_PARTITIONS, 2);
-
- vpx_img_wrap(&img, VPX_IMG_FMT_I420,
- y_width, y_height, 16, (uint8*)(Y));
- img.planes[VPX_PLANE_Y] = (uint8*)(Y);
- img.planes[VPX_PLANE_U] = (uint8*)(U);
- img.planes[VPX_PLANE_V] = (uint8*)(V);
- img.stride[VPX_PLANE_Y] = y_stride;
- img.stride[VPX_PLANE_U] = uv_stride;
- img.stride[VPX_PLANE_V] = uv_stride;
-
- res = vpx_codec_encode(&enc, &img, 0, 1, 0, VPX_DL_BEST_QUALITY);
-
- if (res == VPX_CODEC_OK) {
- vpx_codec_iter_t iter = NULL;
- const vpx_codec_cx_pkt_t* pkt = vpx_codec_get_cx_data(&enc, &iter);
- if (pkt != NULL) {
- *p_out = (unsigned char*)(calloc(container_size + pkt->data.frame.sz,
- 1));
-
- memcpy(*p_out + container_size,
- (const void*)(pkt->data.frame.buf),
- pkt->data.frame.sz);
- *p_out_size_bytes = container_size + pkt->data.frame.sz;
-
- result = webp_success;
- }
- }
- }
-
- vpx_codec_destroy(&enc);
-
- return result;
-}
-
-WebPResult WebPEncode(const uint8* Y,
- const uint8* U,
- const uint8* V,
- int y_width,
- int y_height,
- int y_stride,
- int uv_width,
- int uv_height,
- int uv_stride,
- int QP,
- unsigned char** p_out,
- int* p_out_size_bytes,
- double *psnr) {
-
- const int kRiffHeaderSize = 20;
-
- if (VPXEncode(Y, U, V,
- y_width, y_height, y_stride,
- uv_width, uv_height, uv_stride,
- QP, kRiffHeaderSize,
- p_out, p_out_size_bytes) != webp_success) {
- return webp_failure;
- } else {
- /* Write RIFF header */
- const int img_size_bytes = *p_out_size_bytes - kRiffHeaderSize;
- const int chunk_size = (img_size_bytes + 1) & ~1; /* make size even */
- const int riff_size = chunk_size + 12;
- const uint8_t kRiffHeader[20] = { 'R', 'I', 'F', 'F',
- (riff_size >> 0) & 255,
- (riff_size >> 8) & 255,
- (riff_size >> 16) & 255,
- (riff_size >> 24) & 255,
- 'W', 'E', 'B', 'P',
- 'V', 'P', '8', ' ',
- (chunk_size >> 0) & 255,
- (chunk_size >> 8) & 255,
- (chunk_size >> 16) & 255,
- (chunk_size >> 24) & 255 };
- memcpy(*p_out, kRiffHeader, kRiffHeaderSize);
-
- if (psnr) {
- *psnr = WebPGetPSNR(Y, U, V, *p_out, *p_out_size_bytes);
- }
-
- return webp_success;
- }
-}
-
-void AdjustColorspace(uint8* Y, uint8* U, uint8* V, int width, int height) {
- int y_width = width;
- int y_height = height;
- int y_stride = y_width;
- int uv_width = ((y_width + 1) >> 1);
- int uv_height = ((y_height + 1) >> 1);
- int uv_stride = uv_width;
- int x, y;
- /* convert luma */
- for (y = 0; y < y_height; ++y) {
- uint8* const Yrow = Y + y * y_stride;
- for (x = 0; x < y_width; ++x) {
- /* maps [0..255] to [16..235] */
- Yrow[x] = ((Yrow[x] * 55 + 32) >> 6) + 16;
- }
- }
- /* convert chroma */
- for (y = 0; y < uv_height; ++y) {
- uint8* const Urow = U + y * uv_stride;
- uint8* const Vrow = V + y * uv_stride;
- for (x = 0; x < uv_width; ++x) {
- /* maps [0..255] to [16..240] */
- Urow[x] = (((Urow[x] - 127) * 7) >> 3) + 128;
- Vrow[x] = (((Vrow[x] - 127) * 7) >> 3) + 128;
- }
- }
-}
-
-void AdjustColorspaceBack(uint8* Y, uint8* U, uint8* V, int width, int height) {
- int y_width = width;
- int y_height = height;
- int y_stride = y_width;
- int uv_width = ((y_width + 1) >> 1);
- int uv_height = ((y_height + 1) >> 1);
- int uv_stride = uv_width;
- int x, y;
- /* convert luma */
- for (y = 0; y < y_height; ++y) {
- uint8* const Yrow = Y + y * y_stride;
- for (x = 0; x < y_width; ++x) {
- /* maps [16..235] to [0..255] */
- const int v = ((Yrow[x] - 16) * 149 + 64) >> 7;
- Yrow[x] = (v < 0) ? 0 : (v > 255) ? 255u : v;
- }
- }
- /* convert chroma */
- for (y = 0; y < uv_height; ++y) {
- uint8* const Urow = U + y * uv_stride;
- uint8* const Vrow = V + y * uv_stride;
- for (x = 0; x < uv_width; ++x) {
- /* maps [0..255] to [16..240] */
- const int ru = (((Urow[x] - 128) * 73) >> 6) + 128;
- const int rv = (((Vrow[x] - 128) * 73) >> 6) + 128;
- Urow[x] = (ru < 0) ? 0 : (ru > 255) ? 255u : ru;
- Vrow[x] = (rv < 0) ? 0 : (rv > 255) ? 255u : rv;
- }
- }
-}
-
-WebPResult WebPGetInfo(const uint8* data,
- int data_size,
- int *width,
- int *height) {
- const uint32 chunk_size = SkipRiffHeader(&data, &data_size);
-
- if (width) *width = 0;
- if (height) *height = 0;
-
- if (!chunk_size) {
- return webp_failure; /* unsupported RIFF header */
- }
-
- /* Validate raw video data */
- if (data_size < 10) {
- return webp_failure; /* not enough data */
- }
-
- /* check signature */
- if (data[3] != 0x9d || data[4] != 0x01 || data[5] != 0x2a) {
- return webp_failure; /* Wrong signature. */
- } else {
- const uint32 bits = data[0] | (data[1] << 8) | (data[2] << 16);
-
- if ((bits & 1)) { /* Not a keyframe. */
- return webp_failure;
- } else {
- const int profile = (bits >> 1) & 7;
- const int show_frame = (bits >> 4) & 1;
- const uint32 partition_length = (bits >> 5);
-
- if (profile > 3) {
- return webp_failure; /* unknown profile */
- }
- if (!show_frame) {
- return webp_failure; /* first frame is invisible! */
- }
- if (partition_length >= chunk_size) {
- return webp_failure; /* inconsistent size information. */
- } else {
- const int w = ((data[7] << 8) | data[6]) & 0x3fff;
- const int h = ((data[9] << 8) | data[8]) & 0x3fff;
- if (width) *width = w;
- if (height) *height = h;
-
- return webp_success;
- }
- }
- }
- return webp_failure;
-}
-#endif /* HAVE_LIBVPX */
diff --git a/ext/gd/libgd/webpimg.h b/ext/gd/libgd/webpimg.h
deleted file mode 100644
index bc0f9722bd..0000000000
--- a/ext/gd/libgd/webpimg.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*===========================================================================*
- - Copyright 2010 Google Inc.
- -
- - This code is licensed under the same terms as WebM:
- - Software License Agreement: http://www.webmproject.org/license/software/
- - Additional IP Rights Grant: http://www.webmproject.org/license/additional/
- *===========================================================================*/
-
-/*
- * Encoding/Decoding of WebP still image compression format.
- *
- * 1. WebPDecode: Takes an array of bytes (string) corresponding to the WebP
- * encoded image and generates output in the YUV format with
- * the color components U, V subsampled to 1/2 resolution along
- * each dimension.
- *
- * 2. YUV420toRGBA: Converts from YUV (with color subsampling) such as produced
- * by the WebPDecode routine into 32 bits per pixel RGBA data
- * array. This data array can be directly used by the Leptonica
- * Pix in-memory image format.
- *
- * 3. WebPEncode: Takes a Y, U, V data buffers (with color components U and V
- * subsampled to 1/2 resolution) and generates the WebP string
- *
- * 4. RGBAToYUV420: Generates Y, U, V data (with color subsampling) from 32 bits
- * per pixel RGBA data buffer. The resulting YUV data can be
- * directly fed into the WebPEncode routine.
- *
- * 5. AdjustColorspace:
- *
- * 6. AdjustColorspaceBack:
- */
-
-#ifndef THIRD_PARTY_VP8_VP8IMG_H_
-#define THIRD_PARTY_VP8_VP8IMG_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-typedef unsigned char uint8;
-typedef unsigned int uint32;
-typedef enum WebPResultType {
- webp_success = 0,
- webp_failure = -1
-} WebPResult;
-
-/* Takes an array of bytes (string) corresponding to the WebP
- * encoded image and generates output in the YUV format with
- * the color components U, V subsampled to 1/2 resolution along
- * each dimension.
- * Input:
- * 1. data: the WebP data stream (array of bytes)
- * 2. data_size: count of bytes in the WebP data stream
- *
- * Output:
- * 3. p_Y/p_U/p_V : pointer to the Y/U/V data buffer (this routine will
- * allocate memory for the buffer, fill the buffer with
- * appropriate data and transfer owner ship of the buffer
- * to caller. Caller is responsible for freeing the memory).
- * Note that the memory for Y, U, V buffers is alloacted
- * in one chunk, hence one should call free(*p_Y) only.
- * Do not try to free the U and V buffers.
- *
- * 6. p_width: this routine returns the width of the decoded image here
- * 7. p_height: this routine returns the width of the decoded image here
- * Return: success/failure
- */
-WebPResult WebPDecode(const uint8* data,
- int data_size,
- uint8** p_Y,
- uint8** p_U,
- uint8** p_V,
- int* p_width,
- int* p_height);
-
-/* WebPEncode: Takes a Y, U, V data buffers (with color components U and V
- * subsampled to 1/2 resolution) and generates the WebP string.
- * Input:
- * 1, 2, 3. Y, U, V: The input YUV data buffers
- * 4, 5. y_width, y_height: The width and height of the image whose data
- * is in Y, U, V. This matches the Y plane. The U
- * and V planes typically have 1/2 width and
- * height.
- * 6. y_stride: The width (in bytes) of one row of Y data. This may not
- * match width if there is end of row padding (e.g., for 32
- * bit row alignment).
- * 7. QP: the quantization parameter. This parameter controls the
- * compression vs quality tradeoff. Use smaller numbers for better
- * quality (compression will be lesser) and vice versa. 20 is a
- * good optimal value.
- * Output:
- * 8. p_out: the output array of bytes corresponding to the encoded WebP
- * image. This routine allocates memory for the buffer, fills it
- * with appropriate values and transfers ownership to caller.
- * Caller responsible for freeing of memory.
- * Return: success/failure
- */
-WebPResult WebPEncode(const uint8* Y,
- const uint8* U,
- const uint8* V,
- int y_width,
- int y_height,
- int y_stride,
- int uv_width,
- int uv_height,
- int uv_stride,
- int QP,
- unsigned char** p_out,
- int* p_out_size_bytes,
- double* psnr);
-
-/* Converts from YUV (with color subsampling) such as produced by the WebPDecode
- * routine into 32 bits per pixel RGBA data array. This data array can be
- * directly used by the Leptonica Pix in-memory image format.
- * Input:
- * 1, 2, 3. Y, U, V: the input data buffers
- * 4. pixwpl: the desired words per line corresponding to the supplied
- * output pixdata.
- * 5. width, height: the dimensions of the image whose data resides in Y,
- * U, V.
- * Output:
- * 6. pixdata: the output data buffer. Caller should allocate
- * height * pixwpl bytes of memory before calling this routine.
- */
-void YUV420toRGBA(uint8* Y,
- uint8* U,
- uint8* V,
- int words_per_line,
- int width,
- int height,
- uint32* pixdata);
-
-/* Generates Y, U, V data (with color subsampling) from 32 bits
- * per pixel RGBA data buffer. The resulting YUV data can be directly fed into
- * the WebPEncode routine.
- * Input:
- * 1. pix data input rgba data buffer
- * 2. words per line corresponding to pixdata
- * 3, 4. image width and height respectively
- * Output:
- * 5, 6, 7. Output YUV data buffers
- */
-void RGBAToYUV420(uint32* pixdata,
- int words_per_line,
- int width,
- int height,
- uint8* Y,
- uint8* U,
- uint8* V);
-
-/* This function adjust from YUV420J (jpeg decoding) to YUV420 (webp input)
- * Hints: http://en.wikipedia.org/wiki/YCbCr
- */
-void AdjustColorspace(uint8* Y, uint8* U, uint8* V, int width, int height);
-
-/* Inverse function: convert from YUV420 to YUV420J */
-void AdjustColorspaceBack(uint8* Y, uint8* U, uint8* V, int width, int height);
-
-/* Checks WebP image header and outputs height and width information of
- * the image
- *
- * Input:
- * 1. data: the WebP data stream (array of bytes)
- * 2. data_size: count of bytes in the WebP data stream
- *
- * Outut:
- * width/height: width and height of the image
- *
- * Return: success/failure
- */
-WebPResult WebPGetInfo(const uint8* data,
- int data_size,
- int *width,
- int *height);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* THIRD_PARTY_VP8_VP8IMG_H_ */
diff --git a/ext/gd/tests/bug53154.phpt b/ext/gd/tests/bug53154.phpt
new file mode 100644
index 0000000000..6cbae2016c
--- /dev/null
+++ b/ext/gd/tests/bug53154.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Bug #53154 (Zero-height rectangle has whiskers)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$im = imagecreatetruecolor(100, 10);
+$red = imagecolorallocate($im, 255, 0, 0);
+imagerectangle($im, 5, 5, 95, 5, $red);
+var_dump(imagecolorat($im, 5, 4) !== $red);
+var_dump(imagecolorat($im, 5, 6) !== $red);
+var_dump(imagecolorat($im, 95, 4) !== $red);
+var_dump(imagecolorat($im, 95, 6) !== $red);
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
diff --git a/ext/gd/tests/bug53156.phpt b/ext/gd/tests/bug53156.phpt
new file mode 100644
index 0000000000..24db8024fe
--- /dev/null
+++ b/ext/gd/tests/bug53156.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Bug #53156 (imagerectangle problem with point ordering)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+function draw_and_check_pixel($x, $y)
+{
+ global $img, $black, $red;
+
+ echo (imagecolorat($img, $x, $y) === $black) ? '+' : '-';
+ imagesetpixel($img, $x, $y, $red);
+}
+
+function draw_and_check_rectangle($x1, $y1, $x2, $y2)
+{
+ global $img, $black;
+
+ echo 'Rectangle: ';
+ imagerectangle($img, $x1, $y1, $x2, $y2, $black);
+ $x = ($x1 + $x2) / 2;
+ $y = ($y1 + $y2) / 2;
+ draw_and_check_pixel($x, $y1);
+ draw_and_check_pixel($x1, $y);
+ draw_and_check_pixel($x, $y2);
+ draw_and_check_pixel($x2, $y);
+ echo PHP_EOL;
+}
+
+$img = imagecreate(110, 210);
+$bgnd = imagecolorallocate($img, 255, 255, 255);
+$black = imagecolorallocate($img, 0, 0, 0);
+$red = imagecolorallocate($img, 255, 0, 0);
+
+draw_and_check_rectangle( 10, 10, 50, 50);
+draw_and_check_rectangle( 50, 60, 10, 100);
+draw_and_check_rectangle( 50, 150, 10, 110);
+draw_and_check_rectangle( 10, 200, 50, 160);
+imagesetthickness($img, 4);
+draw_and_check_rectangle( 60, 10, 100, 50);
+draw_and_check_rectangle(100, 60, 60, 100);
+draw_and_check_rectangle(100, 150, 60, 110);
+draw_and_check_rectangle( 60, 200, 100, 160);
+
+//imagepng($img, __DIR__ . '/bug53156.png'); // debug
+?>
+--EXPECT--
+Rectangle: ++++
+Rectangle: ++++
+Rectangle: ++++
+Rectangle: ++++
+Rectangle: ++++
+Rectangle: ++++
+Rectangle: ++++
+Rectangle: ++++
diff --git a/ext/gd/tests/bug53640.phpt b/ext/gd/tests/bug53640.phpt
new file mode 100644
index 0000000000..a16b7c24c0
--- /dev/null
+++ b/ext/gd/tests/bug53640.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #53640 (XBM images require width to be multiple of 8)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$im = imagecreate(9, 9);
+imagecolorallocate($im, 0, 0, 0); // background
+$white = imagecolorallocate($im, 255, 255, 255);
+imagefilledrectangle($im, 2, 2, 6, 6, $white);
+imagexbm($im, NULL);
+?>
+--XFAIL--
+Padding is not implemented yet
+--EXPECT--
+#define image_width 9
+#define image_height 9
+static unsigned char image_bits[] = {
+ 0xFF, 0x01, 0xFF, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01, 0x83, 0x01,
+ 0x83, 0x01, 0xFF, 0x01, 0xFF, 0x01};
diff --git a/ext/gd/tests/bug66339.phpt b/ext/gd/tests/bug66339.phpt
new file mode 100644
index 0000000000..a5ef5c6915
--- /dev/null
+++ b/ext/gd/tests/bug66339.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #66339 (PHP segfaults in imagexbm)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$im = imagecreate(8, 8);
+imagecolorallocate($im, 0, 0, 0); // background
+$white = imagecolorallocate($im, 255, 255, 255);
+imagefilledrectangle($im, 2, 2, 6, 6, $white);
+imagexbm($im, NULL);
+echo "------------\n";
+imagexbm($im, './bug66339.xbm');
+echo file_get_contents('./bug66339.xbm');
+?>
+--CLEAN--
+<?php
+unlink('./bug66339.xbm');
+?>
+--EXPECT--
+#define image_width 8
+#define image_height 8
+static unsigned char image_bits[] = {
+ 0xFF, 0xFF, 0x83, 0x83, 0x83, 0x83, 0x83, 0xFF};
+------------
+#define bug66339_width 8
+#define bug66339_height 8
+static unsigned char bug66339_bits[] = {
+ 0xFF, 0xFF, 0x83, 0x83, 0x83, 0x83, 0x83, 0xFF};
diff --git a/ext/gd/tests/bug66387.phpt b/ext/gd/tests/bug66387.phpt
new file mode 100644
index 0000000000..79c49a527b
--- /dev/null
+++ b/ext/gd/tests/bug66387.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #66387 (Stack overflow with imagefilltoborder)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available!');
+?>
+--FILE--
+<?php
+$im = imagecreatetruecolor(20, 20);
+$c = imagecolorallocate($im, 255, 0, 0);
+imagefilltoborder($im, 0, -999355, $c, $c);
+echo "ready\n";
+?>
+--EXPECT--
+ready
diff --git a/ext/gd/tests/bug66590.phpt b/ext/gd/tests/bug66590.phpt
new file mode 100644
index 0000000000..a3c5409d6b
--- /dev/null
+++ b/ext/gd/tests/bug66590.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Bug #66590 (imagewebp() doesn't pad to even length)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+if (!function_exists('imagewebp')) die('skip WebP support not available');
+?>
+--FILE--
+<?php
+$filename = __DIR__ . '/bug66590.webp';
+$im = imagecreatetruecolor(75, 75);
+$red = imagecolorallocate($im, 255, 0, 0);
+imagefilledrectangle($im, 0, 0, 74, 74, $red);
+imagewebp($im, $filename);
+$stream = fopen($filename, 'rb');
+fread($stream, 4); // skip "RIFF"
+$length = fread($stream, 4);
+fclose($stream);
+$length = unpack('V', $length)[1] + 8;
+var_dump($length === filesize($filename));
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/bug66590.webp');
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/gd/tests/bug66590_1.phpt b/ext/gd/tests/bug66590_1.phpt
new file mode 100644
index 0000000000..9e598d1eae
--- /dev/null
+++ b/ext/gd/tests/bug66590_1.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #66590 (imagewebp() doesn't pad to even length) - segfault
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+if (!function_exists('imagewebp')) die('skip WebP support not available');
+?>
+--FILE--
+<?php
+$im = imagecreatetruecolor(6, 6);
+ob_start();
+imagewebp($im);
+ob_end_clean();
+echo "ready\n";
+?>
+--EXPECT--
+ready
diff --git a/ext/gd/tests/bug66882.phpt b/ext/gd/tests/bug66882.phpt
new file mode 100644
index 0000000000..6dfbdfe06d
--- /dev/null
+++ b/ext/gd/tests/bug66882.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #66882 (imagerotate by -90 degrees truncates image by 1px)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$im = imagerotate(imagecreate(10, 10), -90, 0);
+var_dump(imagesy($im), imagesx($im));
+?>
+--EXPECT--
+int(10)
+int(10)
diff --git a/ext/gd/tests/bug67447.phpt b/ext/gd/tests/bug67447.phpt
new file mode 100644
index 0000000000..2caa49b623
--- /dev/null
+++ b/ext/gd/tests/bug67447.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Bug #67447 (imagecrop() adds a black line when cropping)
+--FILE--
+<?php
+// true color
+$image = imagecreatetruecolor(500, 500);
+$red = imagecolorallocate($image, 255, 0, 0);
+imagefill($image, 0, 0, $red);
+$cropped = imagecrop($image, ['x' => 0, 'y' => 0, 'width' => 250, 'height' => 250]);
+var_dump(imagecolorat($cropped, 249, 249) === $red);
+imagedestroy($image);
+imagedestroy($cropped);
+
+// palette
+$image = imagecreate(500, 500);
+imagecolorallocate($image, 0, 0, 255); // first palette color = background
+$red = imagecolorallocate($image, 255, 0, 0);
+imagefill($image, 0, 0, $red);
+$cropped = imagecrop($image, ['x' => 0, 'y' => 0, 'width' => 250, 'height' => 250]);
+var_dump(imagecolorat($cropped, 249, 249) === $red);
+imagedestroy($image);
+imagedestroy($cropped);
+?>
+--EXPECT--
+bool(true)
+bool(true)
diff --git a/ext/gd/tests/bug69024.phpt b/ext/gd/tests/bug69024.phpt
new file mode 100644
index 0000000000..f2113fc44f
--- /dev/null
+++ b/ext/gd/tests/bug69024.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #69024 (imagescale segfault with palette based image)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$im = imagecreate(256, 256);
+imagescale($im, 32, 32, IMG_BICUBIC);
+imagedestroy($im);
+echo "done\n";
+?>
+--EXPECT--
+done
diff --git a/ext/gd/tests/bug70047.phpt b/ext/gd/tests/bug70047.phpt
new file mode 100644
index 0000000000..7dbf8ab59d
--- /dev/null
+++ b/ext/gd/tests/bug70047.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #70047 (gd_info() doesn't report WebP support)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$info = gd_info();
+var_dump(array_key_exists('WebP Support', $info));
+var_dump($info['WebP Support'] === function_exists('imagewebp'));
+?>
+--EXPECT--
+bool(true)
+bool(true)
diff --git a/ext/gd/tests/bug70102.phpt b/ext/gd/tests/bug70102.phpt
new file mode 100644
index 0000000000..b82c757ebe
--- /dev/null
+++ b/ext/gd/tests/bug70102.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #70102 (imagecreatefromwebm() shifts colors)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+if (!function_exists('imagewebp') || !function_exists('imagecreatefromwebp'))
+ die('skip WebP support not available');
+?>
+--FILE--
+<?php
+$filename = __DIR__ . '/bug70102.webp';
+
+$im = imagecreatetruecolor(8, 8);
+$white = imagecolorallocate($im, 255, 255, 255);
+var_dump($white & 0xffffff);
+imagefilledrectangle($im, 0, 0, 7, 7, $white);
+imagewebp($im, $filename);
+imagedestroy($im);
+
+$im = imagecreatefromwebp($filename);
+$color = imagecolorat($im, 4, 4);
+var_dump($color & 0xffffff);
+?>
+--CLEAN--
+<?php
+unlink(__DIR__ . '/bug70102.webp');
+?>
+--EXPECT--
+int(16777215)
+int(16777215)
diff --git a/ext/gd/tests/imagefilledellipse_basic.phpt b/ext/gd/tests/imagefilledellipse_basic.phpt
new file mode 100644
index 0000000000..a1a578ad43
--- /dev/null
+++ b/ext/gd/tests/imagefilledellipse_basic.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Testing imagefilledellipse() of GD library
+--SKIPIF--
+<?php
+if (!extension_loaded("gd")) die("skip GD not present");
+?>
+--FILE--
+<?php
+
+$image = imagecreatetruecolor(100, 100);
+
+$white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
+
+//create an ellipse and fill it with white color
+imagefilledellipse($image, 50, 50, 40, 30, $white);
+
+ob_start();
+imagepng($image);
+$img = ob_get_contents();
+ob_end_clean();
+
+echo md5(base64_encode($img));
+?>
+--EXPECT--
+9ba540bba1b78c9f08efaa6fa0afd93b
diff --git a/ext/gd/tests/imagewebp_nullbyte_injection.phpt b/ext/gd/tests/imagewebp_nullbyte_injection.phpt
index 166beb181f..1808e8fb79 100644
--- a/ext/gd/tests/imagewebp_nullbyte_injection.phpt
+++ b/ext/gd/tests/imagewebp_nullbyte_injection.phpt
@@ -8,7 +8,7 @@ rmdir($tempdir);
<?php
if(!extension_loaded('gd')){ die('skip gd extension not available'); }
$support = gd_info();
-if (!isset($support['WEBP Support']) || $support['WEBP Support'] === false) {
+if (!isset($support['WebP Support']) || $support['WebP Support'] === false) {
print 'skip webp support not available';
}
?>
@@ -30,9 +30,9 @@ imagewebp($image, $temp);
var_dump(file_exists($tempdir. "/test1"));
var_dump(file_exists($tempdir. "/test1.tmp"));
foreach (glob($tempdir . "/test*") as $file ) { unlink($file); }
-
+?>
--EXPECTF--
-imagewbmp TEST
+imagewebp TEST
Warning: imagewebp(): Invalid 2nd parameter, filename must not contain null bytes in %s on line %d
bool(false)
diff --git a/ext/gd/tests/similarity.inc b/ext/gd/tests/similarity.inc
new file mode 100644
index 0000000000..cb0dba77f2
--- /dev/null
+++ b/ext/gd/tests/similarity.inc
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * A very simple algorithm for finding the dissimilarity between images,
+ * mainly useful for checking lossy compression.
+ */
+
+/**
+ * Gets the individual components of an RGB value.
+ *
+ * @param int $color
+ * @param int $red
+ * @param int $green
+ * @param int $blue
+ *
+ * @return void
+ */
+function get_rgb($color, &$red, &$green, &$blue)
+{
+ // assumes $color is an RGB value
+ $red = ($color >> 16) & 0xFF;
+ $green = ($color >> 8) & 0xFF;
+ $blue = $color & 0xFF;
+}
+
+/**
+ * Calculates the euclidean distance of two RGB values.
+ *
+ * @param int $color1
+ * @param int $color2
+ *
+ * @return int
+ */
+function calc_pixel_distance($color1, $color2)
+{
+ get_rgb($color1, $red1, $green1, $blue1);
+ get_rgb($color2, $red2, $green2, $blue2);
+ return sqrt(
+ pow($red1 - $red2, 2) + pow($green1 - $green2, 2) + pow($blue1 - $blue2, 2)
+ );
+}
+
+/**
+ * Calculates dissimilarity of two images.
+ *
+ * @param resource $image1
+ * @param resource $image2
+ *
+ * @return int The dissimilarity. 0 means the images are identical. The higher
+ * the value, the more dissimilar are the images.
+ */
+function calc_image_dissimilarity($image1, $image2)
+{
+ // assumes image1 and image2 have same width and height
+ $dissimilarity = 0;
+ for ($i = 0, $n = imagesx($image1); $i < $n; $i++) {
+ for ($j = 0, $m = imagesy($image1); $j < $m; $j++) {
+ $color1 = imagecolorat($image1, $i, $j);
+ $color2 = imagecolorat($image2, $i, $j);
+ $dissimilarity += calc_pixel_distance($color1, $color2);
+ }
+ }
+ return $dissimilarity;
+}
diff --git a/ext/gd/tests/webp_basic.phpt b/ext/gd/tests/webp_basic.phpt
new file mode 100644
index 0000000000..75933a9ca4
--- /dev/null
+++ b/ext/gd/tests/webp_basic.phpt
@@ -0,0 +1,35 @@
+--TEST--
+imagewebp() and imagecreatefromwebp() - basic test
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+if (!function_exists('imagewebp') || !function_exists('imagecreatefromwebp'))
+ die('skip WebP support not available');
+?>
+--FILE--
+<?php
+require_once __DIR__ . '/similarity.inc';
+
+$filename = __DIR__ . '/webp_basic.webp';
+
+$im1 = imagecreatetruecolor(75, 75);
+$white = imagecolorallocate($im1, 255, 255, 255);
+$red = imagecolorallocate($im1, 255, 0, 0);
+$green = imagecolorallocate($im1, 0, 255, 0);
+$blue = imagecolorallocate($im1, 0, 0, 255);
+imagefilledrectangle($im1, 0, 0, 74, 74, $white);
+imageline($im1, 3, 3, 71, 71, $red);
+imageellipse($im1, 18, 54, 36, 36, $green);
+imagerectangle($im1, 41, 3, 71, 33, $blue);
+imagewebp($im1, $filename);
+
+$im2 = imagecreatefromwebp($filename);
+imagewebp($im2, $filename);
+var_dump(calc_image_dissimilarity($im1, $im2) < 10e5);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/webp_basic.webp');
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/intl/collator/collator_sort.c b/ext/intl/collator/collator_sort.c
index 8727c1d8ab..ca4b7ea785 100644
--- a/ext/intl/collator/collator_sort.c
+++ b/ext/intl/collator/collator_sort.c
@@ -385,8 +385,6 @@ PHP_FUNCTION( collator_sort_with_sort_keys )
int utf16_buf_size = DEF_UTF16_BUF_SIZE; /* the length of utf16_buf */
int utf16_len = 0; /* length of converted string */
- HashTable* sortedHash = NULL;
-
COLLATOR_METHOD_INIT_VARS
/* Parse parameters. */
diff --git a/ext/intl/msgformat/msgformat_format.c b/ext/intl/msgformat/msgformat_format.c
index 5aa68e2735..959a4fd5a0 100644
--- a/ext/intl/msgformat/msgformat_format.c
+++ b/ext/intl/msgformat/msgformat_format.c
@@ -104,7 +104,7 @@ PHP_FUNCTION( msgfmt_format_message )
size_t pattern_len = 0;
const char *slocale = NULL;
size_t slocale_len = 0;
- MessageFormatter_object mf = {0};
+ MessageFormatter_object mf;
MessageFormatter_object *mfo = &mf;
/* Parse parameters. */
@@ -117,6 +117,7 @@ PHP_FUNCTION( msgfmt_format_message )
RETURN_FALSE;
}
+ memset(mfo, 0, sizeof(*mfo));
msgformat_data_init(&mfo->mf_data);
if(pattern && pattern_len) {
diff --git a/ext/intl/msgformat/msgformat_parse.c b/ext/intl/msgformat/msgformat_parse.c
index 4d63a0169a..349633912b 100644
--- a/ext/intl/msgformat/msgformat_parse.c
+++ b/ext/intl/msgformat/msgformat_parse.c
@@ -97,7 +97,7 @@ PHP_FUNCTION( msgfmt_parse_message )
size_t slocale_len = 0;
char *source = NULL;
size_t src_len = 0;
- MessageFormatter_object mf = {0};
+ MessageFormatter_object mf;
MessageFormatter_object *mfo = &mf;
/* Parse parameters. */
@@ -110,6 +110,7 @@ PHP_FUNCTION( msgfmt_parse_message )
RETURN_FALSE;
}
+ memset(mfo, 0, sizeof(*mfo));
msgformat_data_init(&mfo->mf_data);
if(pattern && pattern_len) {
diff --git a/ext/intl/tests/calendar_before_after_error.phpt b/ext/intl/tests/calendar_before_after_error.phpt
index 938c7a5fb7..7d57b93a33 100644
--- a/ext/intl/tests/calendar_before_after_error.phpt
+++ b/ext/intl/tests/calendar_before_after_error.phpt
@@ -67,9 +67,9 @@ bool(false)
error: 2, IntlCalendar::before() expects exactly 1 parameter, 0 given
error: 2, IntlCalendar::before(): intlcal_before/after: bad arguments
bool(false)
-error: 1, Argument 1 passed to IntlCalendar::after() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to IntlCalendar::after() must be an instance of IntlCalendar, integer given
-error: 1, Argument 1 passed to IntlCalendar::before() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to IntlCalendar::before() must be an instance of IntlCalendar, integer given
error: 2, IntlCalendar::after() expects exactly 1 parameter, 2 given
error: 2, IntlCalendar::after(): intlcal_before/after: bad arguments
diff --git a/ext/intl/tests/calendar_equals_error.phpt b/ext/intl/tests/calendar_equals_error.phpt
index 8465541c87..a9f164d38f 100644
--- a/ext/intl/tests/calendar_equals_error.phpt
+++ b/ext/intl/tests/calendar_equals_error.phpt
@@ -49,10 +49,10 @@ try {
error: 2, IntlCalendar::equals() expects exactly 1 parameter, 0 given
error: 2, IntlCalendar::equals(): intlcal_equals: bad arguments
bool(false)
-error: 1, Argument 1 passed to IntlCalendar::equals() must be an instance of IntlCalendar, instance of stdClass given
+error: 0, Argument 1 passed to IntlCalendar::equals() must be an instance of IntlCalendar, instance of stdClass given
-error: 1, Argument 1 passed to IntlCalendar::equals() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to IntlCalendar::equals() must be an instance of IntlCalendar, integer given
-error: 1, Argument 2 passed to intlcal_equals() must be an instance of IntlCalendar, array given
+error: 0, Argument 2 passed to intlcal_equals() must be an instance of IntlCalendar, array given
-error: 1, Argument 1 passed to intlcal_equals() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_equals() must be an instance of IntlCalendar, integer given
diff --git a/ext/intl/tests/calendar_get_Least_Greatest_Minimum_Maximum_error.phpt b/ext/intl/tests/calendar_get_Least_Greatest_Minimum_Maximum_error.phpt
index 3d881a781d..5d74a7d72d 100644
--- a/ext/intl/tests/calendar_get_Least_Greatest_Minimum_Maximum_error.phpt
+++ b/ext/intl/tests/calendar_get_Least_Greatest_Minimum_Maximum_error.phpt
@@ -98,11 +98,11 @@ bool(false)
Warning: intlcal_get_minimum(): intlcal_get_minimum: invalid field in %s on line %d
bool(false)
-error: 1, Argument 1 passed to intlcal_get_least_maximum() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_get_least_maximum() must be an instance of IntlCalendar, integer given
-error: 1, Argument 1 passed to intlcal_get_maximum() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_get_maximum() must be an instance of IntlCalendar, integer given
-error: 1, Argument 1 passed to intlcal_get_greatest_minimum() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_get_greatest_minimum() must be an instance of IntlCalendar, integer given
-error: 1, Argument 1 passed to intlcal_get_minimum() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_get_minimum() must be an instance of IntlCalendar, integer given
diff --git a/ext/intl/tests/calendar_get_getActualMaximum_Minumum_error2.phpt b/ext/intl/tests/calendar_get_getActualMaximum_Minumum_error2.phpt
index b29e8ed0cb..88b03f8cdb 100644
--- a/ext/intl/tests/calendar_get_getActualMaximum_Minumum_error2.phpt
+++ b/ext/intl/tests/calendar_get_getActualMaximum_Minumum_error2.phpt
@@ -105,9 +105,9 @@ bool(false)
error: 2, intlcal_get_actual_minimum() expects parameter 2 to be integer, string given
error: 2, intlcal_get_actual_minimum(): intlcal_get_actual_minimum: bad arguments
bool(false)
-error: 1, Argument 1 passed to intlcal_get() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_get() must be an instance of IntlCalendar, integer given
-error: 1, Argument 1 passed to intlcal_get_actual_maximum() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_get_actual_maximum() must be an instance of IntlCalendar, integer given
-error: 1, Argument 1 passed to intlcal_get_actual_minimum() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_get_actual_minimum() must be an instance of IntlCalendar, integer given
diff --git a/ext/intl/tests/calendar_isEquivalentTo_error.phpt b/ext/intl/tests/calendar_isEquivalentTo_error.phpt
index ac19e1dd90..35b8fc189a 100644
--- a/ext/intl/tests/calendar_isEquivalentTo_error.phpt
+++ b/ext/intl/tests/calendar_isEquivalentTo_error.phpt
@@ -50,16 +50,16 @@ try {
}
--EXPECT--
-error: 1, Argument 1 passed to IntlCalendar::isEquivalentTo() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to IntlCalendar::isEquivalentTo() must be an instance of IntlCalendar, integer given
error: 2, IntlCalendar::isEquivalentTo() expects exactly 1 parameter, 2 given
error: 2, IntlCalendar::isEquivalentTo(): intlcal_is_equivalent_to: bad arguments
bool(false)
-error: 1, Argument 1 passed to IntlCalendar::isEquivalentTo() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to IntlCalendar::isEquivalentTo() must be an instance of IntlCalendar, integer given
error: 2, intlcal_is_equivalent_to() expects exactly 2 parameters, 1 given
error: 2, intlcal_is_equivalent_to(): intlcal_is_equivalent_to: bad arguments
bool(false)
-error: 1, Argument 2 passed to intlcal_is_equivalent_to() must be an instance of IntlCalendar, integer given
+error: 0, Argument 2 passed to intlcal_is_equivalent_to() must be an instance of IntlCalendar, integer given
-error: 1, Argument 1 passed to intlcal_is_equivalent_to() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_is_equivalent_to() must be an instance of IntlCalendar, integer given
diff --git a/ext/intl/tests/calendar_setTimeZone_error.phpt b/ext/intl/tests/calendar_setTimeZone_error.phpt
index 410dc86c60..4dee131ef7 100644
--- a/ext/intl/tests/calendar_setTimeZone_error.phpt
+++ b/ext/intl/tests/calendar_setTimeZone_error.phpt
@@ -51,4 +51,4 @@ bool(false)
error: 2, intlcal_set_time_zone() expects exactly 2 parameters, 3 given
error: 2, intlcal_set_time_zone(): intlcal_set_time_zone: bad arguments
bool(false)
-error: 1, Argument 1 passed to intlcal_set_time_zone() must be an instance of IntlCalendar, integer given
+error: 0, Argument 1 passed to intlcal_set_time_zone() must be an instance of IntlCalendar, integer given
diff --git a/ext/intl/tests/timezone_hasSameRules_error.phpt b/ext/intl/tests/timezone_hasSameRules_error.phpt
index 5fb5bdde7a..0e9b4a8bd6 100644
--- a/ext/intl/tests/timezone_hasSameRules_error.phpt
+++ b/ext/intl/tests/timezone_hasSameRules_error.phpt
@@ -31,9 +31,9 @@ try {
}
--EXPECT--
-int(1)
+int(0)
string(99) "Argument 1 passed to IntlTimeZone::hasSameRules() must be an instance of IntlTimeZone, string given"
-int(1)
+int(0)
string(92) "Argument 1 passed to intltz_has_same_rules() must be an instance of IntlTimeZone, null given"
diff --git a/ext/json/json_parser.tab.c b/ext/json/json_parser.tab.c
index ad19e4fa10..14ccd77d4e 100644
--- a/ext/json/json_parser.tab.c
+++ b/ext/json/json_parser.tab.c
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.6.5. */
+/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison implementation for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,7 +26,7 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.6.5"
+#define YYBISON_VERSION "3.0.4"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -101,25 +101,23 @@ int json_yydebug = 1;
-
/* Substitute the variable and function names. */
#define yyparse php_json_yyparse
#define yylex php_json_yylex
#define yyerror php_json_yyerror
-#define yylval php_json_yylval
-#define yychar php_json_yychar
#define yydebug php_json_yydebug
#define yynerrs php_json_yynerrs
+
/* Copy the first part of user declarations. */
-# ifndef YY_NULL
+# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
-# define YY_NULL nullptr
+# define YY_NULLPTR nullptr
# else
-# define YY_NULL 0
+# define YY_NULLPTR 0
# endif
# endif
@@ -133,9 +131,9 @@ int json_yydebug = 1;
/* In a future release of Bison, this section will be replaced
by #include "json_parser.tab.h". */
-#ifndef YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
-# define YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
-/* Enabling traces. */
+#ifndef YY_PHP_JSON_YY_HOME_JAKUB_PROG_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
+# define YY_PHP_JSON_YY_HOME_JAKUB_PROG_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
+/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
@@ -143,22 +141,21 @@ int json_yydebug = 1;
extern int php_json_yydebug;
#endif
-/* Tokens. */
+/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- PHP_JSON_T_NUL = 258,
- PHP_JSON_T_TRUE = 259,
- PHP_JSON_T_FALSE = 260,
- PHP_JSON_T_INT = 261,
- PHP_JSON_T_DOUBLE = 262,
- PHP_JSON_T_STRING = 263,
- PHP_JSON_T_ESTRING = 264,
- PHP_JSON_T_EOI = 265,
- PHP_JSON_T_ERROR = 266
- };
+ enum yytokentype
+ {
+ PHP_JSON_T_NUL = 258,
+ PHP_JSON_T_TRUE = 259,
+ PHP_JSON_T_FALSE = 260,
+ PHP_JSON_T_INT = 261,
+ PHP_JSON_T_DOUBLE = 262,
+ PHP_JSON_T_STRING = 263,
+ PHP_JSON_T_ESTRING = 264,
+ PHP_JSON_T_EOI = 265,
+ PHP_JSON_T_ERROR = 266
+ };
#endif
/* Tokens. */
#define PHP_JSON_T_NUL 258
@@ -171,10 +168,10 @@ extern int php_json_yydebug;
#define PHP_JSON_T_EOI 265
#define PHP_JSON_T_ERROR 266
-
-
+/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+
+union YYSTYPE
{
@@ -185,29 +182,18 @@ typedef union YYSTYPE
} pair;
+};
-} YYSTYPE;
+typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int php_json_yyparse (void *YYPARSE_PARAM);
-#else
-int php_json_yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
+
int php_json_yyparse (php_json_parser *parser);
-#else
-int php_json_yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED */
+#endif /* !YY_PHP_JSON_YY_HOME_JAKUB_PROG_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED */
/* Copy the second part of user declarations. */
@@ -232,7 +218,6 @@ void php_json_parser_array_append(zval *array, zval *zvalue);
-
#ifdef short
# undef short
#endif
@@ -245,11 +230,8 @@ typedef unsigned char yytype_uint8;
#ifdef YYTYPE_INT8
typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
#else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
#endif
#ifdef YYTYPE_UINT16
@@ -269,8 +251,7 @@ typedef short int yytype_int16;
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# else
@@ -292,6 +273,33 @@ typedef short int yytype_int16;
# endif
#endif
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__ \
+ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
+ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+# define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+ && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+# define _Noreturn __declspec (noreturn)
+# else
+# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+# endif
+#endif
+
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
# define YYUSE(E) ((void) (E))
@@ -299,24 +307,26 @@ typedef short int yytype_int16;
# define YYUSE(E) /* empty */
#endif
-/* Identity function, used to suppress warnings about constant conditions. */
-#ifndef lint
-# define YYID(N) (N)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
#else
-static int
-YYID (yyi)
- int yyi;
+# define YY_INITIAL_VALUE(Value) Value
#endif
-{
- return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
+
#if ! defined yyoverflow || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
@@ -334,8 +344,7 @@ YYID (yyi)
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
/* Use EXIT_SUCCESS as a witness for stdlib.h. */
# ifndef EXIT_SUCCESS
@@ -347,8 +356,8 @@ YYID (yyi)
# endif
# ifdef YYSTACK_ALLOC
- /* Pacify GCC's `empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+ /* Pacify GCC's 'empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
# ifndef YYSTACK_ALLOC_MAXIMUM
/* The OS might guarantee only one guard page at the bottom of the stack,
and a page size can be as small as 4096 bytes. So we cannot safely
@@ -364,7 +373,7 @@ YYID (yyi)
# endif
# if (defined __cplusplus && ! defined EXIT_SUCCESS \
&& ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
+ && (defined YYFREE || defined free)))
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
@@ -372,15 +381,13 @@ YYID (yyi)
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
-# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# if ! defined malloc && ! defined EXIT_SUCCESS
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# ifndef YYFREE
# define YYFREE free
-# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# if ! defined free && ! defined EXIT_SUCCESS
void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
@@ -390,7 +397,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
#if (! defined yyoverflow \
&& (! defined __cplusplus \
- || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
@@ -415,16 +422,16 @@ union yyalloc
elements in the stack, and YYPTR gives the new location of the
stack. Advance YYPTR to a properly aligned location for the next
stack. */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
- Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
#endif
@@ -443,7 +450,7 @@ union yyalloc
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
- while (YYID (0))
+ while (0)
# endif
# endif
#endif /* !YYCOPY_NEEDED */
@@ -459,17 +466,19 @@ union yyalloc
#define YYNNTS 16
/* YYNRULES -- Number of rules. */
#define YYNRULES 36
-/* YYNRULES -- Number of states. */
+/* YYNSTATES -- Number of states. */
#define YYNSTATES 45
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+ by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
#define YYMAXUTOK 266
-#define YYTRANSLATE(YYX) \
+#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, without out-of-bounds checking. */
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -502,31 +511,7 @@ static const yytype_uint8 yytranslate[] =
};
#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const yytype_uint8 yyprhs[] =
-{
- 0, 0, 3, 6, 9, 10, 15, 17, 19, 20,
- 22, 24, 28, 31, 35, 38, 39, 44, 46, 48,
- 49, 51, 53, 57, 60, 62, 64, 66, 68, 70,
- 72, 74, 76, 78, 80, 82, 84
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yytype_int8 yyrhs[] =
-{
- 19, 0, -1, 32, 10, -1, 32, 33, -1, -1,
- 12, 21, 23, 22, -1, 13, -1, 14, -1, -1,
- 24, -1, 25, -1, 24, 15, 25, -1, 24, 33,
- -1, 31, 16, 32, -1, 31, 33, -1, -1, 17,
- 27, 29, 28, -1, 14, -1, 13, -1, -1, 30,
- -1, 32, -1, 30, 15, 32, -1, 30, 33, -1,
- 8, -1, 9, -1, 20, -1, 26, -1, 8, -1,
- 9, -1, 6, -1, 7, -1, 3, -1, 4, -1,
- 5, -1, 33, -1, 11, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
0, 92, 92, 98, 105, 105, 113, 114, 123, 126,
@@ -547,13 +532,13 @@ static const char *const yytname[] =
"PHP_JSON_T_ERROR", "'{'", "'}'", "']'", "','", "':'", "'['", "$accept",
"start", "object", "$@1", "object_end", "members", "member", "pair",
"array", "$@2", "array_end", "elements", "element", "key", "value",
- "errlex", YY_NULL
+ "errlex", YY_NULLPTR
};
#endif
# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
- token YYLEX-NUM. */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+ (internal) symbol number NUM (which must be that of a token). */
static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
@@ -561,46 +546,18 @@ static const yytype_uint16 yytoknum[] =
};
# endif
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint8 yyr1[] =
-{
- 0, 18, 19, 19, 21, 20, 22, 22, 23, 23,
- 24, 24, 24, 25, 25, 27, 26, 28, 28, 29,
- 29, 30, 30, 30, 31, 31, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 33
-};
+#define YYPACT_NINF -18
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
-{
- 0, 2, 2, 2, 0, 4, 1, 1, 0, 1,
- 1, 3, 2, 3, 2, 0, 4, 1, 1, 0,
- 1, 1, 3, 2, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1
-};
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-18)))
-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
- Performed when YYTABLE doesn't specify something else to do. Zero
- means the default is an error. */
-static const yytype_uint8 yydefact[] =
-{
- 0, 32, 33, 34, 30, 31, 28, 29, 36, 4,
- 15, 0, 26, 27, 0, 35, 8, 19, 1, 2,
- 3, 24, 25, 0, 9, 10, 0, 0, 20, 21,
- 6, 7, 5, 0, 12, 0, 14, 18, 17, 16,
- 0, 23, 11, 13, 22
-};
+#define YYTABLE_NINF -1
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int8 yydefgoto[] =
-{
- -1, 11, 12, 16, 32, 23, 24, 25, 13, 17,
- 39, 27, 28, 26, 14, 15
-};
+#define yytable_value_is_error(Yytable_value) \
+ 0
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -18
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
static const yytype_int8 yypact[] =
{
-2, -18, -18, -18, -18, -18, -18, -18, -18, -18,
@@ -610,17 +567,35 @@ static const yytype_int8 yypact[] =
-2, -18, -18, -18, -18
};
-/* YYPGOTO[NTERM-NUM]. */
+ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE does not specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 0, 32, 33, 34, 30, 31, 28, 29, 36, 4,
+ 15, 0, 26, 27, 0, 35, 8, 19, 1, 2,
+ 3, 24, 25, 0, 9, 10, 0, 0, 20, 21,
+ 6, 7, 5, 0, 12, 0, 14, 18, 17, 16,
+ 0, 23, 11, 13, 22
+};
+
+ /* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
-18, -18, -18, -18, -18, -18, -18, -11, -18, -18,
-18, -18, -18, -18, -17, 0
};
-/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule which
- number is the opposite. If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -1
+ /* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ -1, 11, 12, 16, 32, 23, 24, 25, 13, 17,
+ 39, 27, 28, 26, 14, 15
+};
+
+ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule whose
+ number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] =
{
29, 1, 2, 3, 4, 5, 6, 7, 8, 8,
@@ -629,12 +604,6 @@ static const yytype_uint8 yytable[] =
22, 30, 31, 37, 38
};
-#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-18)))
-
-#define yytable_value_is_error(Yytable_value) \
- YYID (0)
-
static const yytype_int8 yycheck[] =
{
17, 3, 4, 5, 6, 7, 8, 9, 11, 11,
@@ -643,8 +612,8 @@ static const yytype_int8 yycheck[] =
9, 13, 14, 13, 14
};
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
0, 3, 4, 5, 6, 7, 8, 9, 11, 12,
@@ -654,30 +623,34 @@ static const yytype_uint8 yystos[] =
15, 33, 25, 32, 32
};
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror. This remains here temporarily
- to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. However,
- YYFAIL appears to be in use. Nevertheless, it is formally deprecated
- in Bison 2.4.2's NEWS entry, where a plan to phase it out is
- discussed. */
-
-#define YYFAIL goto yyerrlab
-#if defined YYFAIL
- /* This is here to suppress warnings from the GCC cpp's
- -Wunused-macros. Normally we don't worry about that warning, but
- some users do, and we want to make it easy for users to remove
- YYFAIL uses, which will produce warnings from Bison 2.5. */
-#endif
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 18, 19, 19, 21, 20, 22, 22, 23, 23,
+ 24, 24, 24, 25, 25, 27, 26, 28, 28, 29,
+ 29, 30, 30, 30, 31, 31, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 33
+};
+
+ /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 2, 2, 0, 4, 1, 1, 0, 1,
+ 1, 3, 2, 3, 2, 0, 4, 1, 1, 0,
+ 1, 1, 3, 2, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1
+};
+
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
#define YYRECOVERING() (!!yyerrstatus)
@@ -694,28 +667,16 @@ do \
else \
{ \
yyerror (parser, YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (YYID (0))
+ YYERROR; \
+ } \
+while (0)
/* Error token number */
-#define YYTERROR 1
-#define YYERRCODE 256
-
+#define YYTERROR 1
+#define YYERRCODE 256
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-/* YYLEX -- calling `yylex' with the right arguments. */
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval, parser)
-#endif
-
/* Enable debugging if requested. */
#if YYDEBUG
@@ -724,58 +685,47 @@ while (YYID (0))
# define YYFPRINTF fprintf
# endif
-# define YYDPRINTF(Args) \
-do { \
- if (yydebug) \
- YYFPRINTF Args; \
-} while (YYID (0))
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
-do { \
- if (yydebug) \
- { \
- YYFPRINTF (stderr, "%s ", Title); \
- yy_symbol_print (stderr, \
- Type, Value, parser); \
- YYFPRINTF (stderr, "\n"); \
- } \
-} while (YYID (0))
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value, parser); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT. |
+`----------------------------------------*/
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, php_json_parser *parser)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
- php_json_parser *parser;
-#endif
{
FILE *yyo = yyoutput;
YYUSE (yyo);
+ YYUSE (parser);
if (!yyvaluep)
return;
- YYUSE (parser);
# ifdef YYPRINT
if (yytype < YYNTOKENS)
YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
- YYUSE (yyoutput);
# endif
- switch (yytype)
- {
- default:
- break;
- }
+ YYUSE (yytype);
}
@@ -783,23 +733,11 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
| Print this symbol on YYOUTPUT. |
`--------------------------------*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, php_json_parser *parser)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
- php_json_parser *parser;
-#endif
{
- if (yytype < YYNTOKENS)
- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
- else
- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+ YYFPRINTF (yyoutput, "%s %s (",
+ yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
YYFPRINTF (yyoutput, ")");
@@ -810,16 +748,8 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
| TOP (included). |
`------------------------------------------------------------------*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
- yytype_int16 *yybottom;
- yytype_int16 *yytop;
-#endif
{
YYFPRINTF (stderr, "Stack now");
for (; yybottom <= yytop; yybottom++)
@@ -830,50 +760,42 @@ yy_stack_print (yybottom, yytop)
YYFPRINTF (stderr, "\n");
}
-# define YY_STACK_PRINT(Bottom, Top) \
-do { \
- if (yydebug) \
- yy_stack_print ((Bottom), (Top)); \
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (0)
/*------------------------------------------------.
| Report that the YYRULE is going to be reduced. |
`------------------------------------------------*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule, php_json_parser *parser)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule, parser)
- YYSTYPE *yyvsp;
- int yyrule;
- php_json_parser *parser;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, php_json_parser *parser)
{
+ unsigned long int yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
- unsigned long int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
- yyrule - 1, yylno);
+ yyrule - 1, yylno);
/* The symbols being reduced. */
for (yyi = 0; yyi < yynrhs; yyi++)
{
YYFPRINTF (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- , parser);
+ yy_symbol_print (stderr,
+ yystos[yyssp[yyi + 1 - yynrhs]],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ , parser);
YYFPRINTF (stderr, "\n");
}
}
-# define YY_REDUCE_PRINT(Rule) \
-do { \
- if (yydebug) \
- yy_reduce_print (yyvsp, Rule, parser); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyssp, yyvsp, Rule, parser); \
+} while (0)
/* Nonzero means print parse trace. It is left uninitialized so that
multiple parsers can coexist. */
@@ -887,7 +809,7 @@ int yydebug;
/* YYINITDEPTH -- initial size of the parser's stacks. */
-#ifndef YYINITDEPTH
+#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif
@@ -910,15 +832,8 @@ int yydebug;
# define yystrlen strlen
# else
/* Return the length of YYSTR. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static YYSIZE_T
yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
- const char *yystr;
-#endif
{
YYSIZE_T yylen;
for (yylen = 0; yystr[yylen]; yylen++)
@@ -934,16 +849,8 @@ yystrlen (yystr)
# else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
YYDEST. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static char *
yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
- char *yydest;
- const char *yysrc;
-#endif
{
char *yyd = yydest;
const char *yys = yysrc;
@@ -973,27 +880,27 @@ yytnamerr (char *yyres, const char *yystr)
char const *yyp = yystr;
for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
do_not_strip_quotes: ;
}
@@ -1016,12 +923,11 @@ static int
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
yytype_int16 *yyssp, int yytoken)
{
- YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+ YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
/* Internationalized format string. */
- const char *yyformat = YY_NULL;
+ const char *yyformat = YY_NULLPTR;
/* Arguments of yyformat. */
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
/* Number of reported tokens (one for the "unexpected", one per
@@ -1029,10 +935,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
int yycount = 0;
/* There are many possibilities here to consider:
- - Assume YYFAIL is not used. It's too flawed to consider. See
- <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
- for details. YYERROR is fine as it does not invoke this
- function.
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
is an error action. In that case, don't check for expected
@@ -1081,11 +983,13 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
break;
}
yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
- if (! (yysize <= yysize1
- && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
- return 2;
- yysize = yysize1;
+ {
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
}
}
}
@@ -1105,10 +1009,12 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
# undef YYCASE_
}
- yysize1 = yysize + yystrlen (yyformat);
- if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
- return 2;
- yysize = yysize1;
+ {
+ YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
if (*yymsg_alloc < yysize)
{
@@ -1145,133 +1051,143 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
| Release the memory associated to this symbol. |
`-----------------------------------------------*/
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, php_json_parser *parser)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep, parser)
- const char *yymsg;
- int yytype;
- YYSTYPE *yyvaluep;
- php_json_parser *parser;
-#endif
{
YYUSE (yyvaluep);
YYUSE (parser);
-
if (!yymsg)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
switch (yytype)
{
- case 3: /* PHP_JSON_T_NUL */
+ case 3: /* PHP_JSON_T_NUL */
+
+ { zval_dtor(&((*yyvaluep).value)); }
+
+ break;
+
+ case 4: /* PHP_JSON_T_TRUE */
+
+ { zval_dtor(&((*yyvaluep).value)); }
+
+ break;
+
+ case 5: /* PHP_JSON_T_FALSE */
+
+ { zval_dtor(&((*yyvaluep).value)); }
+
+ break;
+
+ case 6: /* PHP_JSON_T_INT */
+
+ { zval_dtor(&((*yyvaluep).value)); }
+
+ break;
+
+ case 7: /* PHP_JSON_T_DOUBLE */
+
+ { zval_dtor(&((*yyvaluep).value)); }
- { zval_dtor(&((*yyvaluep).value)); };
+ break;
- break;
- case 4: /* PHP_JSON_T_TRUE */
+ case 8: /* PHP_JSON_T_STRING */
- { zval_dtor(&((*yyvaluep).value)); };
+ { zval_dtor(&((*yyvaluep).value)); }
- break;
- case 5: /* PHP_JSON_T_FALSE */
+ break;
- { zval_dtor(&((*yyvaluep).value)); };
+ case 9: /* PHP_JSON_T_ESTRING */
- break;
- case 6: /* PHP_JSON_T_INT */
+ { zval_dtor(&((*yyvaluep).value)); }
- { zval_dtor(&((*yyvaluep).value)); };
+ break;
- break;
- case 7: /* PHP_JSON_T_DOUBLE */
+ case 10: /* PHP_JSON_T_EOI */
- { zval_dtor(&((*yyvaluep).value)); };
+ { zval_dtor(&((*yyvaluep).value)); }
- break;
- case 8: /* PHP_JSON_T_STRING */
+ break;
- { zval_dtor(&((*yyvaluep).value)); };
+ case 11: /* PHP_JSON_T_ERROR */
- break;
- case 9: /* PHP_JSON_T_ESTRING */
+ { zval_dtor(&((*yyvaluep).value)); }
- { zval_dtor(&((*yyvaluep).value)); };
+ break;
- break;
- case 10: /* PHP_JSON_T_EOI */
+ case 19: /* start */
- { zval_dtor(&((*yyvaluep).value)); };
+ { zval_dtor(&((*yyvaluep).value)); }
- break;
- case 11: /* PHP_JSON_T_ERROR */
+ break;
- { zval_dtor(&((*yyvaluep).value)); };
+ case 20: /* object */
- break;
- case 19: /* start */
+ { zval_dtor(&((*yyvaluep).value)); }
- { zval_dtor(&((*yyvaluep).value)); };
+ break;
- break;
- case 20: /* object */
+ case 23: /* members */
- { zval_dtor(&((*yyvaluep).value)); };
+ { zval_dtor(&((*yyvaluep).value)); }
- break;
- case 23: /* members */
+ break;
- { zval_dtor(&((*yyvaluep).value)); };
+ case 24: /* member */
- break;
- case 24: /* member */
+ { zval_dtor(&((*yyvaluep).value)); }
- { zval_dtor(&((*yyvaluep).value)); };
+ break;
- break;
- case 25: /* pair */
+ case 25: /* pair */
- { zend_string_release(((*yyvaluep).pair).key); zval_dtor(&((*yyvaluep).pair).val); };
+ { zend_string_release(((*yyvaluep).pair).key); zval_dtor(&((*yyvaluep).pair).val); }
- break;
- case 26: /* array */
+ break;
- { zval_dtor(&((*yyvaluep).value)); };
+ case 26: /* array */
- break;
- case 29: /* elements */
+ { zval_dtor(&((*yyvaluep).value)); }
- { zval_dtor(&((*yyvaluep).value)); };
+ break;
- break;
- case 30: /* element */
+ case 29: /* elements */
- { zval_dtor(&((*yyvaluep).value)); };
+ { zval_dtor(&((*yyvaluep).value)); }
- break;
- case 31: /* key */
+ break;
- { zval_dtor(&((*yyvaluep).value)); };
+ case 30: /* element */
- break;
- case 32: /* value */
+ { zval_dtor(&((*yyvaluep).value)); }
- { zval_dtor(&((*yyvaluep).value)); };
+ break;
- break;
- case 33: /* errlex */
+ case 31: /* key */
- { zval_dtor(&((*yyvaluep).value)); };
+ { zval_dtor(&((*yyvaluep).value)); }
+
+ break;
+
+ case 32: /* value */
+
+ { zval_dtor(&((*yyvaluep).value)); }
+
+ break;
+
+ case 33: /* errlex */
+
+ { zval_dtor(&((*yyvaluep).value)); }
+
+ break;
- break;
default:
- break;
+ break;
}
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
}
@@ -1281,56 +1197,18 @@ yydestruct (yymsg, yytype, yyvaluep, parser)
| yyparse. |
`----------*/
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
- void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
int
yyparse (php_json_parser *parser)
-#else
-int
-yyparse (parser)
- php_json_parser *parser;
-#endif
-#endif
{
/* The lookahead symbol. */
int yychar;
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
- _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
- _Pragma ("GCC diagnostic pop")
-#else
+/* The semantic value of the lookahead symbol. */
/* Default value used for initialization, for pacifying older GCCs
or non-GCC compilers. */
-static YYSTYPE yyval_default;
-# define YY_INITIAL_VALUE(Value) = Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
-/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
+YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
+YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
/* Number of syntax errors so far. */
int yynerrs;
@@ -1340,8 +1218,8 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
int yyerrstatus;
/* The stacks and their tools:
- `yyss': related to states.
- `yyvs': related to semantic values.
+ 'yyss': related to states.
+ 'yyvs': related to semantic values.
Refer to the stacks through separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
@@ -1409,23 +1287,23 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
#ifdef yyoverflow
{
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
}
#else /* no yyoverflow */
# ifndef YYSTACK_RELOCATE
@@ -1433,22 +1311,22 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
# else
/* Extend the stack our own way. */
if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
+ goto yyexhaustedlab;
yystacksize *= 2;
if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
+ yystacksize = YYMAXDEPTH;
{
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss_alloc, yyss);
- YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
}
# endif
#endif /* no yyoverflow */
@@ -1457,10 +1335,10 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
yyvsp = yyvs + yysize - 1;
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
+ (unsigned long int) yystacksize));
if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
+ YYABORT;
}
YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -1489,7 +1367,7 @@ yybackup:
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
+ yychar = yylex (&yylval, parser);
}
if (yychar <= YYEOF)
@@ -1554,7 +1432,7 @@ yyreduce:
yylen = yyr2[yyn];
/* If YYLEN is nonzero, implement the default value of the action:
- `$$ = $1'.
+ '$$ = $1'.
Otherwise, the following line sets YYVAL to garbage.
This behavior is undocumented and Bison
@@ -1570,30 +1448,34 @@ yyreduce:
case 2:
{
- ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[(1) - (2)].value));
- ZVAL_COPY_VALUE(parser->return_value, &(yyvsp[(1) - (2)].value));
- PHP_JSON_USE((yyvsp[(2) - (2)].value)); YYACCEPT;
+ ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value));
+ ZVAL_COPY_VALUE(parser->return_value, &(yyvsp[-1].value));
+ PHP_JSON_USE((yyvsp[0].value)); YYACCEPT;
}
+
break;
case 3:
{
- PHP_JSON_USE_2((yyval.value), (yyvsp[(1) - (2)].value), (yyvsp[(2) - (2)].value));
+ PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value));
}
+
break;
case 4:
{ PHP_JSON_DEPTH_INC; }
+
break;
case 5:
{
PHP_JSON_DEPTH_DEC;
- (yyval.value) = (yyvsp[(3) - (4)].value);
+ (yyval.value) = (yyvsp[-1].value);
}
+
break;
case 7:
@@ -1602,6 +1484,7 @@ yyreduce:
parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH;
YYERROR;
}
+
break;
case 8:
@@ -1609,59 +1492,67 @@ yyreduce:
{
php_json_parser_object_init(parser, &(yyval.value));
}
+
break;
case 10:
{
php_json_parser_object_init(parser, &(yyval.value));
- if (php_json_parser_object_update(parser, &(yyval.value), (yyvsp[(1) - (1)].pair).key, &(yyvsp[(1) - (1)].pair).val) == FAILURE)
+ if (php_json_parser_object_update(parser, &(yyval.value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val) == FAILURE)
YYERROR;
}
+
break;
case 11:
{
- if (php_json_parser_object_update(parser, &(yyvsp[(1) - (3)].value), (yyvsp[(3) - (3)].pair).key, &(yyvsp[(3) - (3)].pair).val) == FAILURE)
+ if (php_json_parser_object_update(parser, &(yyvsp[-2].value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val) == FAILURE)
YYERROR;
- ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[(1) - (3)].value));
+ ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value));
}
+
break;
case 12:
{
- PHP_JSON_USE_2((yyval.value), (yyvsp[(1) - (2)].value), (yyvsp[(2) - (2)].value));
+ PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value));
}
+
break;
case 13:
{
- (yyval.pair).key = Z_STR((yyvsp[(1) - (3)].value));
- ZVAL_COPY_VALUE(&(yyval.pair).val, &(yyvsp[(3) - (3)].value));
+ (yyval.pair).key = Z_STR((yyvsp[-2].value));
+ ZVAL_COPY_VALUE(&(yyval.pair).val, &(yyvsp[0].value));
}
+
break;
case 14:
{
- PHP_JSON_USE_2((yyval.pair), (yyvsp[(1) - (2)].value), (yyvsp[(2) - (2)].value));
+ PHP_JSON_USE_2((yyval.pair), (yyvsp[-1].value), (yyvsp[0].value));
}
+
break;
case 15:
{ PHP_JSON_DEPTH_INC; }
+
break;
case 16:
{
PHP_JSON_DEPTH_DEC;
- ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[(3) - (4)].value));
+ ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value));
}
+
break;
case 18:
@@ -1670,6 +1561,7 @@ yyreduce:
parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH;
YYERROR;
}
+
break;
case 19:
@@ -1677,37 +1569,42 @@ yyreduce:
{
php_json_parser_array_init(&(yyval.value));
}
+
break;
case 21:
{
php_json_parser_array_init(&(yyval.value));
- php_json_parser_array_append(&(yyval.value), &(yyvsp[(1) - (1)].value));
+ php_json_parser_array_append(&(yyval.value), &(yyvsp[0].value));
}
+
break;
case 22:
{
- php_json_parser_array_append(&(yyvsp[(1) - (3)].value), &(yyvsp[(3) - (3)].value));
- ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[(1) - (3)].value));
+ php_json_parser_array_append(&(yyvsp[-2].value), &(yyvsp[0].value));
+ ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value));
}
+
break;
case 23:
{
- PHP_JSON_USE_2((yyval.value), (yyvsp[(1) - (2)].value), (yyvsp[(2) - (2)].value));
+ PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value));
}
+
break;
case 36:
{
- PHP_JSON_USE_1((yyval.value), (yyvsp[(1) - (1)].value));
+ PHP_JSON_USE_1((yyval.value), (yyvsp[0].value));
YYERROR;
}
+
break;
@@ -1733,7 +1630,7 @@ yyreduce:
*++yyvsp = yyval;
- /* Now `shift' the result of the reduction. Determine what state
+ /* Now 'shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
@@ -1748,9 +1645,9 @@ yyreduce:
goto yynewstate;
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error. |
+`--------------------------------------*/
yyerrlab:
/* Make sure we have latest lookahead translation. See comments at
user semantic actions for why this is necessary. */
@@ -1801,20 +1698,20 @@ yyerrlab:
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse lookahead token after an
- error, discard it. */
+ error, discard it. */
if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval, parser);
- yychar = YYEMPTY;
- }
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval, parser);
+ yychar = YYEMPTY;
+ }
}
/* Else will try to reuse lookahead token after shifting the error
@@ -1833,7 +1730,7 @@ yyerrorlab:
if (/*CONSTCOND*/ 0)
goto yyerrorlab;
- /* Do not reclaim the symbols of the rule which action triggered
+ /* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
YYPOPSTACK (yylen);
yylen = 0;
@@ -1846,29 +1743,29 @@ yyerrorlab:
| yyerrlab1 -- common code for both syntax error and YYERROR. |
`-------------------------------------------------------------*/
yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
{
yyn = yypact[yystate];
if (!yypact_value_is_default (yyn))
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
/* Pop the current state because it cannot handle the error token. */
if (yyssp == yyss)
- YYABORT;
+ YYABORT;
yydestruct ("Error: popping",
- yystos[yystate], yyvsp, parser);
+ yystos[yystate], yyvsp, parser);
YYPOPSTACK (1);
yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
@@ -1919,14 +1816,14 @@ yyreturn:
yydestruct ("Cleanup: discarding lookahead",
yytoken, &yylval, parser);
}
- /* Do not reclaim the symbols of the rule which action triggered
+ /* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
YYPOPSTACK (yylen);
YY_STACK_PRINT (yyss, yyssp);
while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp, parser);
+ yystos[*yyssp], yyvsp, parser);
YYPOPSTACK (1);
}
#ifndef yyoverflow
@@ -1937,12 +1834,9 @@ yyreturn:
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
#endif
- /* Make sure YYID is used. */
- return YYID (yyresult);
+ return yyresult;
}
-
-
/* Functions */
void php_json_parser_init(php_json_parser *parser, zval *return_value, char *str, size_t str_len, int options, int max_depth)
diff --git a/ext/json/json_parser.tab.h b/ext/json/json_parser.tab.h
index 20651ce8fb..56bc2c40c9 100644
--- a/ext/json/json_parser.tab.h
+++ b/ext/json/json_parser.tab.h
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.6.5. */
+/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison interface for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,13 +26,13 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
-#ifndef YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
-# define YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
-/* Enabling traces. */
+#ifndef YY_PHP_JSON_YY_HOME_JAKUB_PROG_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
+# define YY_PHP_JSON_YY_HOME_JAKUB_PROG_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
+/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
@@ -40,22 +40,21 @@
extern int php_json_yydebug;
#endif
-/* Tokens. */
+/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- PHP_JSON_T_NUL = 258,
- PHP_JSON_T_TRUE = 259,
- PHP_JSON_T_FALSE = 260,
- PHP_JSON_T_INT = 261,
- PHP_JSON_T_DOUBLE = 262,
- PHP_JSON_T_STRING = 263,
- PHP_JSON_T_ESTRING = 264,
- PHP_JSON_T_EOI = 265,
- PHP_JSON_T_ERROR = 266
- };
+ enum yytokentype
+ {
+ PHP_JSON_T_NUL = 258,
+ PHP_JSON_T_TRUE = 259,
+ PHP_JSON_T_FALSE = 260,
+ PHP_JSON_T_INT = 261,
+ PHP_JSON_T_DOUBLE = 262,
+ PHP_JSON_T_STRING = 263,
+ PHP_JSON_T_ESTRING = 264,
+ PHP_JSON_T_EOI = 265,
+ PHP_JSON_T_ERROR = 266
+ };
#endif
/* Tokens. */
#define PHP_JSON_T_NUL 258
@@ -68,10 +67,10 @@ extern int php_json_yydebug;
#define PHP_JSON_T_EOI 265
#define PHP_JSON_T_ERROR 266
-
-
+/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+
+union YYSTYPE
{
@@ -82,26 +81,15 @@ typedef union YYSTYPE
} pair;
+};
-} YYSTYPE;
+typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int php_json_yyparse (void *YYPARSE_PARAM);
-#else
-int php_json_yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
+
int php_json_yyparse (php_json_parser *parser);
-#else
-int php_json_yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED */
+#endif /* !YY_PHP_JSON_YY_HOME_JAKUB_PROG_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED */
diff --git a/ext/json/json_scanner.c b/ext/json/json_scanner.c
index 7e8ee8b933..8c7cad7c64 100644
--- a/ext/json/json_scanner.c
+++ b/ext/json/json_scanner.c
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 */
+/* Generated by re2c 0.14.3 */
/*
+----------------------------------------------------------------------+
| PHP Version 7 |
@@ -147,47 +147,46 @@ yyc_JS:
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
-
yych = *YYCURSOR;
if (yych <= ']') {
if (yych <= '"') {
if (yych <= '\f') {
if (yych <= 0x08) {
- if (yych >= 0x01) goto yy4;
+ if (yych >= 0x01) goto yy5;
} else {
- if (yych <= '\t') goto yy6;
- if (yych <= '\n') goto yy8;
- goto yy4;
+ if (yych <= '\t') goto yy7;
+ if (yych <= '\n') goto yy9;
+ goto yy5;
}
} else {
if (yych <= 0x1F) {
- if (yych <= '\r') goto yy9;
- goto yy4;
+ if (yych <= '\r') goto yy10;
+ goto yy5;
} else {
- if (yych <= ' ') goto yy10;
- if (yych <= '!') goto yy11;
- goto yy13;
+ if (yych <= ' ') goto yy11;
+ if (yych <= '!') goto yy12;
+ goto yy14;
}
}
} else {
if (yych <= '0') {
if (yych <= ',') {
- if (yych <= '+') goto yy11;
- goto yy15;
+ if (yych <= '+') goto yy12;
+ goto yy16;
} else {
- if (yych <= '-') goto yy17;
- if (yych <= '/') goto yy11;
- goto yy18;
+ if (yych <= '-') goto yy18;
+ if (yych <= '/') goto yy12;
+ goto yy19;
}
} else {
if (yych <= 'Z') {
- if (yych <= '9') goto yy20;
- if (yych <= ':') goto yy21;
- goto yy11;
+ if (yych <= '9') goto yy21;
+ if (yych <= ':') goto yy22;
+ goto yy12;
} else {
- if (yych <= '[') goto yy23;
- if (yych <= '\\') goto yy11;
- goto yy25;
+ if (yych <= '[') goto yy24;
+ if (yych <= '\\') goto yy12;
+ goto yy26;
}
}
}
@@ -195,41 +194,41 @@ yyc_JS:
if (yych <= '}') {
if (yych <= 's') {
if (yych <= 'f') {
- if (yych <= 'e') goto yy11;
- goto yy27;
+ if (yych <= 'e') goto yy12;
+ goto yy28;
} else {
- if (yych == 'n') goto yy28;
- goto yy11;
+ if (yych == 'n') goto yy29;
+ goto yy12;
}
} else {
if (yych <= 'z') {
- if (yych <= 't') goto yy29;
- goto yy11;
+ if (yych <= 't') goto yy30;
+ goto yy12;
} else {
- if (yych <= '{') goto yy30;
- if (yych <= '|') goto yy11;
- goto yy32;
+ if (yych <= '{') goto yy31;
+ if (yych <= '|') goto yy12;
+ goto yy33;
}
}
} else {
if (yych <= 0xEC) {
if (yych <= 0xC1) {
- if (yych <= 0x7F) goto yy11;
- goto yy34;
+ if (yych <= 0x7F) goto yy12;
+ goto yy35;
} else {
- if (yych <= 0xDF) goto yy36;
- if (yych <= 0xE0) goto yy37;
- goto yy38;
+ if (yych <= 0xDF) goto yy37;
+ if (yych <= 0xE0) goto yy38;
+ goto yy39;
}
} else {
if (yych <= 0xF0) {
- if (yych <= 0xED) goto yy39;
- if (yych <= 0xEF) goto yy40;
- goto yy41;
+ if (yych <= 0xED) goto yy40;
+ if (yych <= 0xEF) goto yy41;
+ goto yy42;
} else {
- if (yych <= 0xF3) goto yy42;
- if (yych <= 0xF4) goto yy43;
- goto yy34;
+ if (yych <= 0xF3) goto yy43;
+ if (yych <= 0xF4) goto yy44;
+ goto yy35;
}
}
}
@@ -243,36 +242,36 @@ yyc_JS:
return PHP_JSON_T_ERROR;
}
}
-yy4:
+yy5:
++YYCURSOR;
{
s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
return PHP_JSON_T_ERROR;
}
-yy6:
+yy7:
++YYCURSOR;
yych = *YYCURSOR;
- goto yy81;
-yy7:
- { goto std; }
+ goto yy82;
yy8:
- yych = *++YYCURSOR;
- goto yy7;
+ { goto std; }
yy9:
yych = *++YYCURSOR;
- if (yych == '\n') goto yy82;
- goto yy81;
+ goto yy8;
yy10:
yych = *++YYCURSOR;
- goto yy81;
+ if (yych == '\n') goto yy83;
+ goto yy82;
yy11:
- ++YYCURSOR;
+ yych = *++YYCURSOR;
+ goto yy82;
yy12:
+ ++YYCURSOR;
+yy13:
{
s->errcode = PHP_JSON_ERROR_SYNTAX;
return PHP_JSON_T_ERROR;
}
-yy13:
+yy14:
++YYCURSOR;
{
s->str_start = s->cursor;
@@ -280,25 +279,25 @@ yy13:
PHP_JSON_CONDITION_SET(STR_P1);
PHP_JSON_CONDITION_GOTO(STR_P1);
}
-yy15:
+yy16:
++YYCURSOR;
{ return ','; }
-yy17:
- yych = *++YYCURSOR;
- if (yych <= '/') goto yy12;
- if (yych <= '0') goto yy79;
- if (yych <= '9') goto yy69;
- goto yy12;
yy18:
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy13;
+ if (yych <= '0') goto yy80;
+ if (yych <= '9') goto yy70;
+ goto yy13;
+yy19:
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 'D') {
- if (yych == '.') goto yy71;
+ if (yych == '.') goto yy72;
} else {
- if (yych <= 'E') goto yy72;
- if (yych == 'e') goto yy72;
+ if (yych <= 'E') goto yy73;
+ if (yych == 'e') goto yy73;
}
-yy19:
+yy20:
{
zend_bool bigint = 0, negative = s->token[0] == '-';
size_t digits = (size_t) (s->cursor - s->token - negative);
@@ -323,305 +322,305 @@ yy19:
return PHP_JSON_T_DOUBLE;
}
}
-yy20:
+yy21:
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- goto yy70;
-yy21:
+ goto yy71;
+yy22:
++YYCURSOR;
{ return ':'; }
-yy23:
+yy24:
++YYCURSOR;
{ return '['; }
-yy25:
+yy26:
++YYCURSOR;
{ return ']'; }
-yy27:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'a') goto yy64;
- goto yy12;
yy28:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'u') goto yy60;
- goto yy12;
+ if (yych == 'a') goto yy65;
+ goto yy13;
yy29:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'r') goto yy56;
- goto yy12;
+ if (yych == 'u') goto yy61;
+ goto yy13;
yy30:
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'r') goto yy57;
+ goto yy13;
+yy31:
++YYCURSOR;
{ return '{'; }
-yy32:
+yy33:
++YYCURSOR;
{ return '}'; }
-yy34:
- ++YYCURSOR;
yy35:
+ ++YYCURSOR;
+yy36:
{
s->errcode = PHP_JSON_ERROR_UTF8;
return PHP_JSON_T_ERROR;
}
-yy36:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy35;
- if (yych <= 0xBF) goto yy47;
- goto yy35;
yy37:
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x9F) goto yy35;
- if (yych <= 0xBF) goto yy55;
- goto yy35;
+ yych = *++YYCURSOR;
+ if (yych <= 0x7F) goto yy36;
+ if (yych <= 0xBF) goto yy48;
+ goto yy36;
yy38:
yyaccept = 2;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy35;
- if (yych <= 0xBF) goto yy54;
- goto yy35;
+ if (yych <= 0x9F) goto yy36;
+ if (yych <= 0xBF) goto yy56;
+ goto yy36;
yy39:
yyaccept = 2;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy35;
- if (yych <= 0x9F) goto yy53;
- goto yy35;
+ if (yych <= 0x7F) goto yy36;
+ if (yych <= 0xBF) goto yy55;
+ goto yy36;
yy40:
yyaccept = 2;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy35;
- if (yych <= 0xBF) goto yy52;
- goto yy35;
+ if (yych <= 0x7F) goto yy36;
+ if (yych <= 0x9F) goto yy54;
+ goto yy36;
yy41:
yyaccept = 2;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x8F) goto yy35;
- if (yych <= 0xBF) goto yy50;
- goto yy35;
+ if (yych <= 0x7F) goto yy36;
+ if (yych <= 0xBF) goto yy53;
+ goto yy36;
yy42:
yyaccept = 2;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy35;
- if (yych <= 0xBF) goto yy48;
- goto yy35;
+ if (yych <= 0x8F) goto yy36;
+ if (yych <= 0xBF) goto yy51;
+ goto yy36;
yy43:
yyaccept = 2;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy35;
- if (yych >= 0x90) goto yy35;
+ if (yych <= 0x7F) goto yy36;
+ if (yych <= 0xBF) goto yy49;
+ goto yy36;
+yy44:
+ yyaccept = 2;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 0x7F) goto yy36;
+ if (yych >= 0x90) goto yy36;
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych <= 0xBF) goto yy46;
-yy45:
+ if (yych <= 0x7F) goto yy46;
+ if (yych <= 0xBF) goto yy47;
+yy46:
YYCURSOR = YYMARKER;
if (yyaccept <= 1) {
- if (yyaccept <= 0) {
- goto yy19;
+ if (yyaccept == 0) {
+ goto yy20;
} else {
- goto yy12;
+ goto yy13;
}
} else {
- if (yyaccept <= 2) {
- goto yy35;
+ if (yyaccept == 2) {
+ goto yy36;
} else {
- goto yy76;
+ goto yy77;
}
}
-yy46:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych >= 0xC0) goto yy45;
yy47:
yych = *++YYCURSOR;
- goto yy12;
+ if (yych <= 0x7F) goto yy46;
+ if (yych >= 0xC0) goto yy46;
yy48:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych >= 0xC0) goto yy45;
+ goto yy13;
+yy49:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych <= 0xBF) goto yy47;
- goto yy45;
-yy50:
+ if (yych <= 0x7F) goto yy46;
+ if (yych >= 0xC0) goto yy46;
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych >= 0xC0) goto yy45;
+ if (yych <= 0x7F) goto yy46;
+ if (yych <= 0xBF) goto yy48;
+ goto yy46;
+yy51:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych <= 0xBF) goto yy47;
- goto yy45;
-yy52:
+ if (yych <= 0x7F) goto yy46;
+ if (yych >= 0xC0) goto yy46;
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych <= 0xBF) goto yy47;
- goto yy45;
+ if (yych <= 0x7F) goto yy46;
+ if (yych <= 0xBF) goto yy48;
+ goto yy46;
yy53:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych <= 0xBF) goto yy47;
- goto yy45;
+ if (yych <= 0x7F) goto yy46;
+ if (yych <= 0xBF) goto yy48;
+ goto yy46;
yy54:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych <= 0xBF) goto yy47;
- goto yy45;
+ if (yych <= 0x7F) goto yy46;
+ if (yych <= 0xBF) goto yy48;
+ goto yy46;
yy55:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy45;
- if (yych <= 0xBF) goto yy47;
- goto yy45;
+ if (yych <= 0x7F) goto yy46;
+ if (yych <= 0xBF) goto yy48;
+ goto yy46;
yy56:
yych = *++YYCURSOR;
- if (yych != 'u') goto yy45;
+ if (yych <= 0x7F) goto yy46;
+ if (yych <= 0xBF) goto yy48;
+ goto yy46;
+yy57:
yych = *++YYCURSOR;
- if (yych != 'e') goto yy45;
+ if (yych != 'u') goto yy46;
+ yych = *++YYCURSOR;
+ if (yych != 'e') goto yy46;
++YYCURSOR;
{
ZVAL_TRUE(&s->value);
return PHP_JSON_T_TRUE;
}
-yy60:
+yy61:
yych = *++YYCURSOR;
- if (yych != 'l') goto yy45;
+ if (yych != 'l') goto yy46;
yych = *++YYCURSOR;
- if (yych != 'l') goto yy45;
+ if (yych != 'l') goto yy46;
++YYCURSOR;
{
ZVAL_NULL(&s->value);
return PHP_JSON_T_NUL;
}
-yy64:
+yy65:
yych = *++YYCURSOR;
- if (yych != 'l') goto yy45;
+ if (yych != 'l') goto yy46;
yych = *++YYCURSOR;
- if (yych != 's') goto yy45;
+ if (yych != 's') goto yy46;
yych = *++YYCURSOR;
- if (yych != 'e') goto yy45;
+ if (yych != 'e') goto yy46;
++YYCURSOR;
{
ZVAL_FALSE(&s->value);
return PHP_JSON_T_FALSE;
}
-yy69:
+yy70:
yyaccept = 0;
YYMARKER = ++YYCURSOR;
yych = *YYCURSOR;
-yy70:
+yy71:
if (yybm[0+yych] & 64) {
- goto yy69;
+ goto yy70;
}
if (yych <= 'D') {
- if (yych != '.') goto yy19;
+ if (yych != '.') goto yy20;
} else {
- if (yych <= 'E') goto yy72;
- if (yych == 'e') goto yy72;
- goto yy19;
+ if (yych <= 'E') goto yy73;
+ if (yych == 'e') goto yy73;
+ goto yy20;
}
-yy71:
- yych = *++YYCURSOR;
- if (yych <= '/') goto yy45;
- if (yych <= '9') goto yy77;
- goto yy45;
yy72:
yych = *++YYCURSOR;
+ if (yych <= '/') goto yy46;
+ if (yych <= '9') goto yy78;
+ goto yy46;
+yy73:
+ yych = *++YYCURSOR;
if (yych <= ',') {
- if (yych != '+') goto yy45;
+ if (yych != '+') goto yy46;
} else {
- if (yych <= '-') goto yy73;
- if (yych <= '/') goto yy45;
- if (yych <= '9') goto yy74;
- goto yy45;
+ if (yych <= '-') goto yy74;
+ if (yych <= '/') goto yy46;
+ if (yych <= '9') goto yy75;
+ goto yy46;
}
-yy73:
- yych = *++YYCURSOR;
- if (yych <= '/') goto yy45;
- if (yych >= ':') goto yy45;
yy74:
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy46;
+ if (yych >= ':') goto yy46;
+yy75:
++YYCURSOR;
yych = *YYCURSOR;
- if (yych <= '/') goto yy76;
- if (yych <= '9') goto yy74;
-yy76:
+ if (yych <= '/') goto yy77;
+ if (yych <= '9') goto yy75;
+yy77:
{
ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
return PHP_JSON_T_DOUBLE;
}
-yy77:
+yy78:
yyaccept = 3;
YYMARKER = ++YYCURSOR;
yych = *YYCURSOR;
if (yych <= 'D') {
- if (yych <= '/') goto yy76;
- if (yych <= '9') goto yy77;
- goto yy76;
+ if (yych <= '/') goto yy77;
+ if (yych <= '9') goto yy78;
+ goto yy77;
} else {
- if (yych <= 'E') goto yy72;
- if (yych == 'e') goto yy72;
- goto yy76;
+ if (yych <= 'E') goto yy73;
+ if (yych == 'e') goto yy73;
+ goto yy77;
}
-yy79:
+yy80:
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 'D') {
- if (yych == '.') goto yy71;
- goto yy19;
+ if (yych == '.') goto yy72;
+ goto yy20;
} else {
- if (yych <= 'E') goto yy72;
- if (yych == 'e') goto yy72;
- goto yy19;
+ if (yych <= 'E') goto yy73;
+ if (yych == 'e') goto yy73;
+ goto yy20;
}
-yy80:
+yy81:
++YYCURSOR;
yych = *YYCURSOR;
-yy81:
+yy82:
if (yybm[0+yych] & 128) {
- goto yy80;
+ goto yy81;
}
- goto yy7;
-yy82:
+ goto yy8;
+yy83:
++YYCURSOR;
yych = *YYCURSOR;
- goto yy7;
+ goto yy8;
}
/* *********************************** */
yyc_STR_P1:
yych = *YYCURSOR;
if (yych <= 0xDF) {
if (yych <= '[') {
- if (yych <= 0x1F) goto yy85;
- if (yych == '"') goto yy89;
- goto yy87;
+ if (yych <= 0x1F) goto yy86;
+ if (yych == '"') goto yy90;
+ goto yy88;
} else {
- if (yych <= '\\') goto yy91;
- if (yych <= 0x7F) goto yy87;
- if (yych <= 0xC1) goto yy93;
- goto yy95;
+ if (yych <= '\\') goto yy92;
+ if (yych <= 0x7F) goto yy88;
+ if (yych <= 0xC1) goto yy94;
+ goto yy96;
}
} else {
if (yych <= 0xEF) {
- if (yych <= 0xE0) goto yy96;
- if (yych <= 0xEC) goto yy97;
- if (yych <= 0xED) goto yy98;
- goto yy99;
+ if (yych <= 0xE0) goto yy97;
+ if (yych <= 0xEC) goto yy98;
+ if (yych <= 0xED) goto yy99;
+ goto yy100;
} else {
- if (yych <= 0xF0) goto yy100;
- if (yych <= 0xF3) goto yy101;
- if (yych <= 0xF4) goto yy102;
- goto yy93;
+ if (yych <= 0xF0) goto yy101;
+ if (yych <= 0xF3) goto yy102;
+ if (yych <= 0xF4) goto yy103;
+ goto yy94;
}
}
-yy85:
+yy86:
++YYCURSOR;
{
s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
return PHP_JSON_T_ERROR;
}
-yy87:
- ++YYCURSOR;
yy88:
- { PHP_JSON_CONDITION_GOTO(STR_P1); }
+ ++YYCURSOR;
yy89:
+ { PHP_JSON_CONDITION_GOTO(STR_P1); }
+yy90:
++YYCURSOR;
{
zend_string *str;
@@ -645,392 +644,392 @@ yy89:
return PHP_JSON_T_STRING;
}
}
-yy91:
+yy92:
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 'e') {
if (yych <= '/') {
- if (yych == '"') goto yy115;
- if (yych >= '/') goto yy115;
+ if (yych == '"') goto yy116;
+ if (yych >= '/') goto yy116;
} else {
if (yych <= '\\') {
- if (yych >= '\\') goto yy115;
+ if (yych >= '\\') goto yy116;
} else {
- if (yych == 'b') goto yy115;
+ if (yych == 'b') goto yy116;
}
}
} else {
if (yych <= 'q') {
- if (yych <= 'f') goto yy115;
- if (yych == 'n') goto yy115;
+ if (yych <= 'f') goto yy116;
+ if (yych == 'n') goto yy116;
} else {
if (yych <= 's') {
- if (yych <= 'r') goto yy115;
+ if (yych <= 'r') goto yy116;
} else {
- if (yych <= 't') goto yy115;
- if (yych <= 'u') goto yy117;
+ if (yych <= 't') goto yy116;
+ if (yych <= 'u') goto yy118;
}
}
}
-yy92:
+yy93:
{
s->errcode = PHP_JSON_ERROR_SYNTAX;
return PHP_JSON_T_ERROR;
}
-yy93:
- ++YYCURSOR;
yy94:
+ ++YYCURSOR;
+yy95:
{
s->errcode = PHP_JSON_ERROR_UTF8;
return PHP_JSON_T_ERROR;
}
-yy95:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy94;
- if (yych <= 0xBF) goto yy106;
- goto yy94;
yy96:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x9F) goto yy94;
- if (yych <= 0xBF) goto yy114;
- goto yy94;
+ yych = *++YYCURSOR;
+ if (yych <= 0x7F) goto yy95;
+ if (yych <= 0xBF) goto yy107;
+ goto yy95;
yy97:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy94;
- if (yych <= 0xBF) goto yy113;
- goto yy94;
+ if (yych <= 0x9F) goto yy95;
+ if (yych <= 0xBF) goto yy115;
+ goto yy95;
yy98:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy94;
- if (yych <= 0x9F) goto yy112;
- goto yy94;
+ if (yych <= 0x7F) goto yy95;
+ if (yych <= 0xBF) goto yy114;
+ goto yy95;
yy99:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy94;
- if (yych <= 0xBF) goto yy111;
- goto yy94;
+ if (yych <= 0x7F) goto yy95;
+ if (yych <= 0x9F) goto yy113;
+ goto yy95;
yy100:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x8F) goto yy94;
- if (yych <= 0xBF) goto yy109;
- goto yy94;
+ if (yych <= 0x7F) goto yy95;
+ if (yych <= 0xBF) goto yy112;
+ goto yy95;
yy101:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy94;
- if (yych <= 0xBF) goto yy107;
- goto yy94;
+ if (yych <= 0x8F) goto yy95;
+ if (yych <= 0xBF) goto yy110;
+ goto yy95;
yy102:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy94;
- if (yych >= 0x90) goto yy94;
+ if (yych <= 0x7F) goto yy95;
+ if (yych <= 0xBF) goto yy108;
+ goto yy95;
+yy103:
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 0x7F) goto yy95;
+ if (yych >= 0x90) goto yy95;
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych <= 0xBF) goto yy105;
-yy104:
+ if (yych <= 0x7F) goto yy105;
+ if (yych <= 0xBF) goto yy106;
+yy105:
YYCURSOR = YYMARKER;
if (yyaccept <= 1) {
- if (yyaccept <= 0) {
- goto yy92;
+ if (yyaccept == 0) {
+ goto yy93;
} else {
- goto yy94;
+ goto yy95;
}
} else {
- goto yy126;
+ goto yy127;
}
-yy105:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych >= 0xC0) goto yy104;
yy106:
yych = *++YYCURSOR;
- goto yy88;
+ if (yych <= 0x7F) goto yy105;
+ if (yych >= 0xC0) goto yy105;
yy107:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych >= 0xC0) goto yy104;
+ goto yy89;
+yy108:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych <= 0xBF) goto yy106;
- goto yy104;
-yy109:
+ if (yych <= 0x7F) goto yy105;
+ if (yych >= 0xC0) goto yy105;
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych >= 0xC0) goto yy104;
+ if (yych <= 0x7F) goto yy105;
+ if (yych <= 0xBF) goto yy107;
+ goto yy105;
+yy110:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych <= 0xBF) goto yy106;
- goto yy104;
-yy111:
+ if (yych <= 0x7F) goto yy105;
+ if (yych >= 0xC0) goto yy105;
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych <= 0xBF) goto yy106;
- goto yy104;
+ if (yych <= 0x7F) goto yy105;
+ if (yych <= 0xBF) goto yy107;
+ goto yy105;
yy112:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych <= 0xBF) goto yy106;
- goto yy104;
+ if (yych <= 0x7F) goto yy105;
+ if (yych <= 0xBF) goto yy107;
+ goto yy105;
yy113:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych <= 0xBF) goto yy106;
- goto yy104;
+ if (yych <= 0x7F) goto yy105;
+ if (yych <= 0xBF) goto yy107;
+ goto yy105;
yy114:
yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy104;
- if (yych <= 0xBF) goto yy106;
- goto yy104;
+ if (yych <= 0x7F) goto yy105;
+ if (yych <= 0xBF) goto yy107;
+ goto yy105;
yy115:
+ yych = *++YYCURSOR;
+ if (yych <= 0x7F) goto yy105;
+ if (yych <= 0xBF) goto yy107;
+ goto yy105;
+yy116:
++YYCURSOR;
{
s->str_esc++;
PHP_JSON_CONDITION_GOTO(STR_P1);
}
-yy117:
+yy118:
yych = *++YYCURSOR;
if (yych <= 'D') {
if (yych <= '9') {
- if (yych <= '/') goto yy104;
- if (yych >= '1') goto yy119;
+ if (yych <= '/') goto yy105;
+ if (yych >= '1') goto yy120;
} else {
- if (yych <= '@') goto yy104;
- if (yych <= 'C') goto yy119;
- goto yy120;
+ if (yych <= '@') goto yy105;
+ if (yych <= 'C') goto yy120;
+ goto yy121;
}
} else {
if (yych <= 'c') {
- if (yych <= 'F') goto yy119;
- if (yych <= '`') goto yy104;
- goto yy119;
+ if (yych <= 'F') goto yy120;
+ if (yych <= '`') goto yy105;
+ goto yy120;
} else {
- if (yych <= 'd') goto yy120;
- if (yych <= 'f') goto yy119;
- goto yy104;
+ if (yych <= 'd') goto yy121;
+ if (yych <= 'f') goto yy120;
+ goto yy105;
}
}
yych = *++YYCURSOR;
if (yych <= '9') {
- if (yych <= '/') goto yy104;
- if (yych <= '0') goto yy139;
- if (yych <= '7') goto yy140;
- goto yy121;
+ if (yych <= '/') goto yy105;
+ if (yych <= '0') goto yy140;
+ if (yych <= '7') goto yy141;
+ goto yy122;
} else {
if (yych <= 'F') {
- if (yych <= '@') goto yy104;
- goto yy121;
+ if (yych <= '@') goto yy105;
+ goto yy122;
} else {
- if (yych <= '`') goto yy104;
- if (yych <= 'f') goto yy121;
- goto yy104;
+ if (yych <= '`') goto yy105;
+ if (yych <= 'f') goto yy122;
+ goto yy105;
}
}
-yy119:
+yy120:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych <= '9') goto yy121;
- goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych <= '9') goto yy122;
+ goto yy105;
} else {
- if (yych <= 'F') goto yy121;
- if (yych <= '`') goto yy104;
- if (yych <= 'f') goto yy121;
- goto yy104;
+ if (yych <= 'F') goto yy122;
+ if (yych <= '`') goto yy105;
+ if (yych <= 'f') goto yy122;
+ goto yy105;
}
-yy120:
+yy121:
yych = *++YYCURSOR;
if (yych <= 'B') {
if (yych <= '7') {
- if (yych <= '/') goto yy104;
+ if (yych <= '/') goto yy105;
} else {
- if (yych <= '9') goto yy122;
- if (yych <= '@') goto yy104;
- goto yy122;
+ if (yych <= '9') goto yy123;
+ if (yych <= '@') goto yy105;
+ goto yy123;
}
} else {
if (yych <= '`') {
- if (yych <= 'F') goto yy123;
- goto yy104;
+ if (yych <= 'F') goto yy124;
+ goto yy105;
} else {
- if (yych <= 'b') goto yy122;
- if (yych <= 'f') goto yy123;
- goto yy104;
+ if (yych <= 'b') goto yy123;
+ if (yych <= 'f') goto yy124;
+ goto yy105;
}
}
-yy121:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych <= '9') goto yy136;
- goto yy104;
- } else {
- if (yych <= 'F') goto yy136;
- if (yych <= '`') goto yy104;
- if (yych <= 'f') goto yy136;
- goto yy104;
- }
yy122:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych <= '9') goto yy127;
- goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych <= '9') goto yy137;
+ goto yy105;
} else {
- if (yych <= 'F') goto yy127;
- if (yych <= '`') goto yy104;
- if (yych <= 'f') goto yy127;
- goto yy104;
+ if (yych <= 'F') goto yy137;
+ if (yych <= '`') goto yy105;
+ if (yych <= 'f') goto yy137;
+ goto yy105;
}
yy123:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych >= ':') goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych <= '9') goto yy128;
+ goto yy105;
} else {
- if (yych <= 'F') goto yy124;
- if (yych <= '`') goto yy104;
- if (yych >= 'g') goto yy104;
+ if (yych <= 'F') goto yy128;
+ if (yych <= '`') goto yy105;
+ if (yych <= 'f') goto yy128;
+ goto yy105;
}
yy124:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych >= ':') goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych >= ':') goto yy105;
} else {
if (yych <= 'F') goto yy125;
- if (yych <= '`') goto yy104;
- if (yych >= 'g') goto yy104;
+ if (yych <= '`') goto yy105;
+ if (yych >= 'g') goto yy105;
}
yy125:
- ++YYCURSOR;
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy105;
+ if (yych >= ':') goto yy105;
+ } else {
+ if (yych <= 'F') goto yy126;
+ if (yych <= '`') goto yy105;
+ if (yych >= 'g') goto yy105;
+ }
yy126:
+ ++YYCURSOR;
+yy127:
{
s->errcode = PHP_JSON_ERROR_UTF16;
return PHP_JSON_T_ERROR;
}
-yy127:
+yy128:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych >= ':') goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych >= ':') goto yy105;
} else {
- if (yych <= 'F') goto yy128;
- if (yych <= '`') goto yy104;
- if (yych >= 'g') goto yy104;
+ if (yych <= 'F') goto yy129;
+ if (yych <= '`') goto yy105;
+ if (yych >= 'g') goto yy105;
}
-yy128:
+yy129:
yyaccept = 2;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych != '\\') goto yy126;
- yych = *++YYCURSOR;
- if (yych != 'u') goto yy104;
+ if (yych != '\\') goto yy127;
yych = *++YYCURSOR;
- if (yych == 'D') goto yy131;
- if (yych != 'd') goto yy104;
-yy131:
+ if (yych != 'u') goto yy105;
yych = *++YYCURSOR;
- if (yych <= 'B') goto yy104;
- if (yych <= 'F') goto yy132;
- if (yych <= 'b') goto yy104;
- if (yych >= 'g') goto yy104;
+ if (yych == 'D') goto yy132;
+ if (yych != 'd') goto yy105;
yy132:
yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych >= ':') goto yy104;
- } else {
- if (yych <= 'F') goto yy133;
- if (yych <= '`') goto yy104;
- if (yych >= 'g') goto yy104;
- }
+ if (yych <= 'B') goto yy105;
+ if (yych <= 'F') goto yy133;
+ if (yych <= 'b') goto yy105;
+ if (yych >= 'g') goto yy105;
yy133:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych >= ':') goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych >= ':') goto yy105;
} else {
if (yych <= 'F') goto yy134;
- if (yych <= '`') goto yy104;
- if (yych >= 'g') goto yy104;
+ if (yych <= '`') goto yy105;
+ if (yych >= 'g') goto yy105;
}
yy134:
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy105;
+ if (yych >= ':') goto yy105;
+ } else {
+ if (yych <= 'F') goto yy135;
+ if (yych <= '`') goto yy105;
+ if (yych >= 'g') goto yy105;
+ }
+yy135:
++YYCURSOR;
{
s->str_esc += 8;
PHP_JSON_CONDITION_GOTO(STR_P1);
}
-yy136:
+yy137:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych >= ':') goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych >= ':') goto yy105;
} else {
- if (yych <= 'F') goto yy137;
- if (yych <= '`') goto yy104;
- if (yych >= 'g') goto yy104;
+ if (yych <= 'F') goto yy138;
+ if (yych <= '`') goto yy105;
+ if (yych >= 'g') goto yy105;
}
-yy137:
+yy138:
++YYCURSOR;
{
s->str_esc += 3;
PHP_JSON_CONDITION_GOTO(STR_P1);
}
-yy139:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych <= '7') goto yy144;
- if (yych <= '9') goto yy141;
- goto yy104;
- } else {
- if (yych <= 'F') goto yy141;
- if (yych <= '`') goto yy104;
- if (yych <= 'f') goto yy141;
- goto yy104;
- }
yy140:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych >= ':') goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych <= '7') goto yy145;
+ if (yych <= '9') goto yy142;
+ goto yy105;
} else {
- if (yych <= 'F') goto yy141;
- if (yych <= '`') goto yy104;
- if (yych >= 'g') goto yy104;
+ if (yych <= 'F') goto yy142;
+ if (yych <= '`') goto yy105;
+ if (yych <= 'f') goto yy142;
+ goto yy105;
}
yy141:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych >= ':') goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych >= ':') goto yy105;
} else {
if (yych <= 'F') goto yy142;
- if (yych <= '`') goto yy104;
- if (yych >= 'g') goto yy104;
+ if (yych <= '`') goto yy105;
+ if (yych >= 'g') goto yy105;
}
yy142:
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy105;
+ if (yych >= ':') goto yy105;
+ } else {
+ if (yych <= 'F') goto yy143;
+ if (yych <= '`') goto yy105;
+ if (yych >= 'g') goto yy105;
+ }
+yy143:
++YYCURSOR;
{
s->str_esc += 4;
PHP_JSON_CONDITION_GOTO(STR_P1);
}
-yy144:
+yy145:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy104;
- if (yych >= ':') goto yy104;
+ if (yych <= '/') goto yy105;
+ if (yych >= ':') goto yy105;
} else {
- if (yych <= 'F') goto yy145;
- if (yych <= '`') goto yy104;
- if (yych >= 'g') goto yy104;
+ if (yych <= 'F') goto yy146;
+ if (yych <= '`') goto yy105;
+ if (yych >= 'g') goto yy105;
}
-yy145:
+yy146:
++YYCURSOR;
{
s->str_esc += 5;
@@ -1039,22 +1038,22 @@ yy145:
/* *********************************** */
yyc_STR_P2:
yych = *YYCURSOR;
- if (yych == '"') goto yy151;
- if (yych == '\\') goto yy153;
+ if (yych == '"') goto yy152;
+ if (yych == '\\') goto yy154;
++YYCURSOR;
{ PHP_JSON_CONDITION_GOTO(STR_P2); }
-yy151:
+yy152:
++YYCURSOR;
YYSETCONDITION(yycJS);
{
PHP_JSON_SCANNER_COPY_ESC();
return PHP_JSON_T_STRING;
}
-yy153:
+yy154:
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'u') goto yy155;
-yy154:
+ if (yych == 'u') goto yy156;
+yy155:
{
char esc;
PHP_JSON_SCANNER_COPY_ESC();
@@ -1088,103 +1087,103 @@ yy154:
s->str_start = s->cursor;
PHP_JSON_CONDITION_GOTO(STR_P2);
}
-yy155:
+yy156:
yych = *++YYCURSOR;
if (yych <= 'D') {
if (yych <= '9') {
- if (yych <= '/') goto yy156;
- if (yych <= '0') goto yy157;
- goto yy158;
- } else {
- if (yych <= '@') goto yy156;
- if (yych <= 'C') goto yy158;
+ if (yych <= '/') goto yy157;
+ if (yych <= '0') goto yy158;
goto yy159;
+ } else {
+ if (yych <= '@') goto yy157;
+ if (yych <= 'C') goto yy159;
+ goto yy160;
}
} else {
if (yych <= 'c') {
- if (yych <= 'F') goto yy158;
- if (yych >= 'a') goto yy158;
+ if (yych <= 'F') goto yy159;
+ if (yych >= 'a') goto yy159;
} else {
- if (yych <= 'd') goto yy159;
- if (yych <= 'f') goto yy158;
+ if (yych <= 'd') goto yy160;
+ if (yych <= 'f') goto yy159;
}
}
-yy156:
- YYCURSOR = YYMARKER;
- goto yy154;
yy157:
+ YYCURSOR = YYMARKER;
+ goto yy155;
+yy158:
yych = *++YYCURSOR;
if (yych <= '9') {
- if (yych <= '/') goto yy156;
- if (yych <= '0') goto yy174;
- if (yych <= '7') goto yy175;
- goto yy161;
+ if (yych <= '/') goto yy157;
+ if (yych <= '0') goto yy175;
+ if (yych <= '7') goto yy176;
+ goto yy162;
} else {
if (yych <= 'F') {
- if (yych <= '@') goto yy156;
- goto yy161;
+ if (yych <= '@') goto yy157;
+ goto yy162;
} else {
- if (yych <= '`') goto yy156;
- if (yych <= 'f') goto yy161;
- goto yy156;
+ if (yych <= '`') goto yy157;
+ if (yych <= 'f') goto yy162;
+ goto yy157;
}
}
-yy158:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych <= '9') goto yy161;
- goto yy156;
- } else {
- if (yych <= 'F') goto yy161;
- if (yych <= '`') goto yy156;
- if (yych <= 'f') goto yy161;
- goto yy156;
- }
yy159:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych <= '7') goto yy161;
- if (yych >= ':') goto yy156;
+ if (yych <= '/') goto yy157;
+ if (yych <= '9') goto yy162;
+ goto yy157;
} else {
- if (yych <= 'B') goto yy160;
- if (yych <= '`') goto yy156;
- if (yych >= 'c') goto yy156;
+ if (yych <= 'F') goto yy162;
+ if (yych <= '`') goto yy157;
+ if (yych <= 'f') goto yy162;
+ goto yy157;
}
yy160:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych <= '9') goto yy165;
- goto yy156;
+ if (yych <= '/') goto yy157;
+ if (yych <= '7') goto yy162;
+ if (yych >= ':') goto yy157;
} else {
- if (yych <= 'F') goto yy165;
- if (yych <= '`') goto yy156;
- if (yych <= 'f') goto yy165;
- goto yy156;
+ if (yych <= 'B') goto yy161;
+ if (yych <= '`') goto yy157;
+ if (yych >= 'c') goto yy157;
}
yy161:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych >= ':') goto yy156;
+ if (yych <= '/') goto yy157;
+ if (yych <= '9') goto yy166;
+ goto yy157;
} else {
- if (yych <= 'F') goto yy162;
- if (yych <= '`') goto yy156;
- if (yych >= 'g') goto yy156;
+ if (yych <= 'F') goto yy166;
+ if (yych <= '`') goto yy157;
+ if (yych <= 'f') goto yy166;
+ goto yy157;
}
yy162:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych >= ':') goto yy156;
+ if (yych <= '/') goto yy157;
+ if (yych >= ':') goto yy157;
} else {
if (yych <= 'F') goto yy163;
- if (yych <= '`') goto yy156;
- if (yych >= 'g') goto yy156;
+ if (yych <= '`') goto yy157;
+ if (yych >= 'g') goto yy157;
}
yy163:
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy157;
+ if (yych >= ':') goto yy157;
+ } else {
+ if (yych <= 'F') goto yy164;
+ if (yych <= '`') goto yy157;
+ if (yych >= 'g') goto yy157;
+ }
+yy164:
++YYCURSOR;
{
int utf16 = php_json_ucs2_to_int(s, 4);
@@ -1195,51 +1194,51 @@ yy163:
s->str_start = s->cursor;
PHP_JSON_CONDITION_GOTO(STR_P2);
}
-yy165:
+yy166:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych >= ':') goto yy156;
+ if (yych <= '/') goto yy157;
+ if (yych >= ':') goto yy157;
} else {
- if (yych <= 'F') goto yy166;
- if (yych <= '`') goto yy156;
- if (yych >= 'g') goto yy156;
+ if (yych <= 'F') goto yy167;
+ if (yych <= '`') goto yy157;
+ if (yych >= 'g') goto yy157;
}
-yy166:
+yy167:
yych = *++YYCURSOR;
- if (yych != '\\') goto yy156;
+ if (yych != '\\') goto yy157;
yych = *++YYCURSOR;
- if (yych != 'u') goto yy156;
+ if (yych != 'u') goto yy157;
yych = *++YYCURSOR;
- if (yych == 'D') goto yy169;
- if (yych != 'd') goto yy156;
-yy169:
- yych = *++YYCURSOR;
- if (yych <= 'B') goto yy156;
- if (yych <= 'F') goto yy170;
- if (yych <= 'b') goto yy156;
- if (yych >= 'g') goto yy156;
+ if (yych == 'D') goto yy170;
+ if (yych != 'd') goto yy157;
yy170:
yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych >= ':') goto yy156;
- } else {
- if (yych <= 'F') goto yy171;
- if (yych <= '`') goto yy156;
- if (yych >= 'g') goto yy156;
- }
+ if (yych <= 'B') goto yy157;
+ if (yych <= 'F') goto yy171;
+ if (yych <= 'b') goto yy157;
+ if (yych >= 'g') goto yy157;
yy171:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych >= ':') goto yy156;
+ if (yych <= '/') goto yy157;
+ if (yych >= ':') goto yy157;
} else {
if (yych <= 'F') goto yy172;
- if (yych <= '`') goto yy156;
- if (yych >= 'g') goto yy156;
+ if (yych <= '`') goto yy157;
+ if (yych >= 'g') goto yy157;
}
yy172:
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy157;
+ if (yych >= ':') goto yy157;
+ } else {
+ if (yych <= 'F') goto yy173;
+ if (yych <= '`') goto yy157;
+ if (yych >= 'g') goto yy157;
+ }
+yy173:
++YYCURSOR;
{
int utf32, utf16_hi, utf16_lo;
@@ -1254,40 +1253,40 @@ yy172:
s->str_start = s->cursor;
PHP_JSON_CONDITION_GOTO(STR_P2);
}
-yy174:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych <= '7') goto yy179;
- if (yych <= '9') goto yy176;
- goto yy156;
- } else {
- if (yych <= 'F') goto yy176;
- if (yych <= '`') goto yy156;
- if (yych <= 'f') goto yy176;
- goto yy156;
- }
yy175:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych >= ':') goto yy156;
+ if (yych <= '/') goto yy157;
+ if (yych <= '7') goto yy180;
+ if (yych <= '9') goto yy177;
+ goto yy157;
} else {
- if (yych <= 'F') goto yy176;
- if (yych <= '`') goto yy156;
- if (yych >= 'g') goto yy156;
+ if (yych <= 'F') goto yy177;
+ if (yych <= '`') goto yy157;
+ if (yych <= 'f') goto yy177;
+ goto yy157;
}
yy176:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych >= ':') goto yy156;
+ if (yych <= '/') goto yy157;
+ if (yych >= ':') goto yy157;
} else {
if (yych <= 'F') goto yy177;
- if (yych <= '`') goto yy156;
- if (yych >= 'g') goto yy156;
+ if (yych <= '`') goto yy157;
+ if (yych >= 'g') goto yy157;
}
yy177:
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy157;
+ if (yych >= ':') goto yy157;
+ } else {
+ if (yych <= 'F') goto yy178;
+ if (yych <= '`') goto yy157;
+ if (yych >= 'g') goto yy157;
+ }
+yy178:
++YYCURSOR;
{
int utf16 = php_json_ucs2_to_int(s, 3);
@@ -1297,17 +1296,17 @@ yy177:
s->str_start = s->cursor;
PHP_JSON_CONDITION_GOTO(STR_P2);
}
-yy179:
+yy180:
yych = *++YYCURSOR;
if (yych <= '@') {
- if (yych <= '/') goto yy156;
- if (yych >= ':') goto yy156;
+ if (yych <= '/') goto yy157;
+ if (yych >= ':') goto yy157;
} else {
- if (yych <= 'F') goto yy180;
- if (yych <= '`') goto yy156;
- if (yych >= 'g') goto yy156;
+ if (yych <= 'F') goto yy181;
+ if (yych <= '`') goto yy157;
+ if (yych >= 'g') goto yy157;
}
-yy180:
+yy181:
++YYCURSOR;
{
int utf16 = php_json_ucs2_to_int(s, 2);
diff --git a/ext/json/php_json_scanner_defs.h b/ext/json/php_json_scanner_defs.h
index b3867433a7..a75e766a65 100644
--- a/ext/json/php_json_scanner_defs.h
+++ b/ext/json/php_json_scanner_defs.h
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 */
+/* Generated by re2c 0.14.3 */
enum YYCONDTYPE {
yycJS,
diff --git a/ext/json/tests/json_last_error_error.phpt b/ext/json/tests/json_last_error_error.phpt
new file mode 100644
index 0000000000..bb00388a2e
--- /dev/null
+++ b/ext/json/tests/json_last_error_error.phpt
@@ -0,0 +1,22 @@
+--TEST--
+json_last_error() failures
+--SKIPIF--
+<?php !extension_loaded('json') && die('skip json extension not available') ?>
+--FILE--
+<?php
+
+var_dump(json_last_error());
+var_dump(json_last_error(TRUE));
+var_dump(json_last_error('some', 4, 'args', 'here'));
+
+
+?>
+--EXPECTF--
+int(0)
+
+Warning: json_last_error() expects exactly 0 parameters, 1 given in %s on line %d
+NULL
+
+Warning: json_last_error() expects exactly 0 parameters, 4 given in %s on line %d
+NULL
+
diff --git a/ext/json/tests/json_last_error_msg_error.phpt b/ext/json/tests/json_last_error_msg_error.phpt
new file mode 100644
index 0000000000..8135cf1ded
--- /dev/null
+++ b/ext/json/tests/json_last_error_msg_error.phpt
@@ -0,0 +1,21 @@
+--TEST--
+json_last_error_msg() failures
+--SKIPIF--
+<?php !extension_loaded('json') && die('skip json extension not available') ?>
+--FILE--
+<?php
+
+var_dump(json_last_error_msg());
+var_dump(json_last_error_msg(TRUE));
+var_dump(json_last_error_msg('some', 4, 'args', 'here'));
+
+?>
+--EXPECTF--
+string(8) "No error"
+
+Warning: json_last_error_msg() expects exactly 0 parameters, 1 given in %s on line %d
+NULL
+
+Warning: json_last_error_msg() expects exactly 0 parameters, 4 given in %s on line %d
+NULL
+
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
index a5260807d4..e0d5543882 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
@@ -48,7 +48,7 @@ const mbfl_encoding mbfl_encoding_2022jp_kddi = {
mbfl_no_encoding_2022jp_kddi,
"ISO-2022-JP-MOBILE#KDDI",
"ISO-2022-JP",
- mbfl_encoding_2022jp_kddi_aliases,
+ &mbfl_encoding_2022jp_kddi_aliases,
NULL,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE
};
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c
index a9c141bbfe..e81e0860d2 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c
@@ -101,6 +101,7 @@ int mbfl_filt_put_invalid_char(int c, mbfl_convert_filter *filter)
filter->status = 0;
filter->cache = 0;
CK((*filter->output_function)(w, filter->data));
+ return 0;
}
@@ -109,7 +110,7 @@ int mbfl_filt_put_invalid_char(int c, mbfl_convert_filter *filter)
*/
int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter)
{
- int s, c1, w = 0, flag = 0;
+ int s, c1;
retry:
switch (filter->status & 0xff) {
@@ -126,7 +127,7 @@ retry:
filter->status = 0x30;
filter->cache = c & 0x7;
} else {
- mbfl_filt_put_invalid_char(c, filter);
+ CK(mbfl_filt_put_invalid_char(c, filter));
}
break;
case 0x10: /* 2byte code 2nd char: 0x80-0xbf */
@@ -138,7 +139,7 @@ retry:
filter->cache = 0;
CK((*filter->output_function)(s, filter->data));
} else {
- mbfl_filt_put_invalid_char(filter->cache, filter);
+ CK(mbfl_filt_put_invalid_char(filter->cache, filter));
goto retry;
}
break;
@@ -153,7 +154,7 @@ retry:
filter->cache = s;
filter->status++;
} else {
- mbfl_filt_put_invalid_char(filter->cache, filter);
+ CK(mbfl_filt_put_invalid_char(filter->cache, filter));
goto retry;
}
break;
@@ -168,7 +169,7 @@ retry:
filter->cache = s;
filter->status++;
} else {
- mbfl_filt_put_invalid_char(filter->cache, filter);
+ CK(mbfl_filt_put_invalid_char(filter->cache, filter));
goto retry;
}
break;
@@ -177,7 +178,7 @@ retry:
filter->cache = (filter->cache<<6) | (c & 0x3f);
filter->status++;
} else {
- mbfl_filt_put_invalid_char(filter->cache, filter);
+ CK(mbfl_filt_put_invalid_char(filter->cache, filter));
goto retry;
}
break;
@@ -200,7 +201,7 @@ int mbfl_filt_conv_utf8_wchar_flush(mbfl_convert_filter *filter)
filter->cache = 0;
if (status != 0) {
- mbfl_filt_put_invalid_char(cache, filter);
+ CK(mbfl_filt_put_invalid_char(cache, filter));
}
if (filter->flush_function != NULL) {
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c
index c449d3132a..41e02bf314 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c
@@ -183,14 +183,14 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf8_sb = {
};
#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
+int mbfl_filt_put_invalid_char(int c, mbfl_convert_filter *filter);
/*
* UTF-8 => wchar
*/
int mbfl_filt_conv_utf8_mobile_wchar(int c, mbfl_convert_filter *filter)
{
- int s, w = 0, flag = 0;
- int s1 = 0, c1 = 0, snd = 0;
+ int s, s1 = 0, c1 = 0, snd = 0;
retry:
switch (filter->status & 0xff) {
@@ -207,7 +207,7 @@ retry:
filter->status = 0x30;
filter->cache = c & 0x7;
} else {
- mbfl_filt_put_invalid_char(c, filter);
+ CK(mbfl_filt_put_invalid_char(c, filter));
}
break;
case 0x10: /* 2byte code 2nd char: 0x80-0xbf */
@@ -237,7 +237,7 @@ retry:
}
CK((*filter->output_function)(s, filter->data));
} else {
- mbfl_filt_put_invalid_char(filter->cache, filter);
+ CK(mbfl_filt_put_invalid_char(filter->cache, filter));
goto retry;
}
break;
@@ -252,7 +252,7 @@ retry:
filter->cache = s;
filter->status++;
} else {
- mbfl_filt_put_invalid_char(filter->cache, filter);
+ CK(mbfl_filt_put_invalid_char(filter->cache, filter));
goto retry;
}
break;
@@ -267,7 +267,7 @@ retry:
filter->cache = s;
filter->status++;
} else {
- mbfl_filt_put_invalid_char(filter->cache, filter);
+ CK(mbfl_filt_put_invalid_char(filter->cache, filter));
goto retry;
}
break;
@@ -276,7 +276,7 @@ retry:
filter->cache = (filter->cache<<6) | (c & 0x3f);
filter->status++;
} else {
- mbfl_filt_put_invalid_char(filter->cache, filter);
+ CK(mbfl_filt_put_invalid_char(filter->cache, filter));
goto retry;
}
break;
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
index 88f8772d34..35a986ac2a 100644
--- a/ext/mbstring/php_mbregex.c
+++ b/ext/mbstring/php_mbregex.c
@@ -909,7 +909,7 @@ static void _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAMETERS, OnigOp
}
#endif
/* copy the part of the string before the match */
- smart_str_appendl(&out_buf, pos, (size_t)((OnigUChar *)(string + regs->beg[0]) - pos));
+ smart_str_appendl(&out_buf, (char *)pos, (size_t)((OnigUChar *)(string + regs->beg[0]) - pos));
if (!is_callable) {
/* copy replacement and backrefs */
@@ -992,14 +992,14 @@ static void _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAMETERS, OnigOp
pos = (OnigUChar *)string + n;
} else {
if (pos < string_lim) {
- smart_str_appendl(&out_buf, pos, 1);
+ smart_str_appendl(&out_buf, (char *)pos, 1);
}
pos++;
}
} else { /* nomatch */
/* stick that last bit of string on our output */
if (string_lim - pos > 0) {
- smart_str_appendl(&out_buf, pos, string_lim - pos);
+ smart_str_appendl(&out_buf, (char *)pos, string_lim - pos);
}
}
onig_region_free(regs, 0);
diff --git a/ext/mysqli/tests/mysqli_fetch_object.phpt b/ext/mysqli/tests/mysqli_fetch_object.phpt
index 11dd0a5a4f..9706ceac84 100644
--- a/ext/mysqli/tests/mysqli_fetch_object.phpt
+++ b/ext/mysqli/tests/mysqli_fetch_object.phpt
@@ -150,6 +150,6 @@ NULL
NULL
[E_WARNING] mysqli_fetch_object(): Couldn't fetch mysqli_result in %s on line %d
NULL
-[E_ERROR] Argument 3 passed to mysqli_fetch_object() must be of the type array, string given in %s on line %d
+[0] Argument 3 passed to mysqli_fetch_object() must be of the type array, string given in %s on line %d
Fatal error: Class 'this_class_does_not_exist' not found in %s on line %d
diff --git a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt
index 2b3f76c993..82e311cc72 100644
--- a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt
+++ b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt
@@ -129,9 +129,9 @@ require_once('skipifconnectfailure.inc');
%s on line %d
[E_WARNING] mysqli_result::fetch_object(): Couldn't fetch mysqli_result in %s on line %d
[E_WARNING] mysqli_result::fetch_object() expects parameter 1 to be string, object given in %s on line %d
-[E_ERROR] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, object given in %s on line %d
-[E_ERROR] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, object given in %s on line %d
-[E_ERROR] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, null given in %s on line %d
+[0] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, object given in %s on line %d
+[0] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, object given in %s on line %d
+[0] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, null given in %s on line %d
[E_WARNING] Missing argument 2 for mysqli_fetch_object_construct::__construct() in %s on line %d
[E_NOTICE] Undefined variable: b in %s on line %d
NULL
diff --git a/ext/mysqlnd/mysqlnd_debug.h b/ext/mysqlnd/mysqlnd_debug.h
index 1e6d0c17a6..1a57143507 100644
--- a/ext/mysqlnd/mysqlnd_debug.h
+++ b/ext/mysqlnd/mysqlnd_debug.h
@@ -115,6 +115,7 @@ PHPAPI MYSQLND_DEBUG * mysqlnd_debug_init(const char * skip_functions[]);
struct timeval __dbg_prof_tp = {0}; \
uint64_t __dbg_prof_start = 0; /* initialization is needed */ \
zend_bool dbg_skip_trace = TRUE; \
+ ((void)__dbg_prof_start); \
if ((dbg_obj1)) { \
dbg_skip_trace = !(dbg_obj1)->m->func_enter((dbg_obj1), __LINE__, __FILE__, func_name, strlen(func_name)); \
} \
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c
index 70e0cf3d55..0923a988ed 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.c
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.c
@@ -582,9 +582,8 @@ size_t php_mysqlnd_auth_write(void * _packet, MYSQLND_CONN_DATA * conn)
{
zend_string * key;
- zend_ulong unused_num_key;
zval * entry_value;
- ZEND_HASH_FOREACH_KEY_VAL(packet->connect_attr, unused_num_key, key, entry_value) {
+ ZEND_HASH_FOREACH_STR_KEY_VAL(packet->connect_attr, key, entry_value) {
if (key) { /* HASH_KEY_IS_STRING */
size_t value_len = Z_STRLEN_P(entry_value);
@@ -621,9 +620,8 @@ size_t php_mysqlnd_auth_write(void * _packet, MYSQLND_CONN_DATA * conn)
#else
{
zend_string * key;
- zend_ulong unused_num_key;
zval * entry_value;
- ZEND_HASH_FOREACH_KEY_VAL(packet->connect_attr, unused_num_key, key, entry_value) {
+ ZEND_HASH_FOREACH_STR_KEY_VAL(packet->connect_attr, key, entry_value) {
if (key) { /* HASH_KEY_IS_STRING */
size_t value_len = Z_STRLEN_P(entry_value);
diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c
index f431dcaba9..2c65ea94f9 100644
--- a/ext/oci8/oci8.c
+++ b/ext/oci8/oci8.c
@@ -1453,14 +1453,16 @@ static void php_oci_pconnection_list_np_dtor(zend_resource *entry)
OCI_G(in_call)) {
/* Remove the hash entry if present */
- zvp = zend_hash_find(&EG(persistent_list), connection->hash_key);
- le = Z_RES_P(zvp); /* PHPNG TODO check for null zvp */
- if (le != NULL && le->type == le_pconnection && le->ptr == connection) {
- zend_hash_del(&EG(persistent_list), connection->hash_key);
- }
- else {
- php_oci_connection_close(connection);
- OCI_G(num_persistent)--;
+ if (connection->hash_key) {
+ zvp = zend_hash_find(&EG(persistent_list), connection->hash_key);
+ le = zvp ? Z_RES_P(zvp) : NULL; /* PHPNG TODO check for null zvp */
+ if (le != NULL && le->type == le_pconnection && le->ptr == connection) {
+ zend_hash_del(&EG(persistent_list), connection->hash_key);
+ }
+ else {
+ php_oci_connection_close(connection);
+ OCI_G(num_persistent)--;
+ }
}
#ifdef HAVE_OCI8_DTRACE
@@ -1534,12 +1536,14 @@ void php_oci_define_hash_dtor(zval *data)
{
php_oci_define *define = (php_oci_define *) Z_PTR_P(data);
- zval_ptr_dtor(&define->zval);
+ zval_ptr_dtor(define->zval);
if (define->name) {
efree(define->name);
define->name = NULL;
}
+
+ efree(define);
}
/* }}} */
@@ -1562,8 +1566,9 @@ void php_oci_bind_hash_dtor(zval *data)
if (bind->array.indicators) {
efree(bind->array.indicators);
}
+
efree(bind);
- /*zval_ptr_dtor(&bind->zval); */
+ zval_ptr_dtor(bind->zval);
}
/* }}} */
@@ -1579,7 +1584,7 @@ void php_oci_column_hash_dtor(zval *data)
zend_list_close(column->stmtid);
}
- if (column->is_descr) {
+ if (column->descid) {
zend_list_close(column->descid);
}
@@ -1703,6 +1708,7 @@ sb4 php_oci_fetch_errmsg(OCIError *error_handle, text **error_buf)
text err_buf[PHP_OCI_ERRBUF_LEN];
memset(err_buf, 0, sizeof(err_buf));
+ *error_buf = (text *)0;
PHP_OCI_CALL(OCIErrorGet, (error_handle, (ub4)1, NULL, &error_code, err_buf, (ub4)PHP_OCI_ERRBUF_LEN, (ub4)OCI_HTYPE_ERROR));
if (error_code) {
@@ -1946,7 +1952,6 @@ php_oci_connection *php_oci_do_connect_ex(char *username, int username_len, char
le = Z_RES_P(zvp);
found = 1;
if (le->type == le_index_ptr) {
- int type, link;
void *ptr;
ptr = le->ptr; /* PHPNG TODO */
@@ -1984,7 +1989,6 @@ php_oci_connection *php_oci_do_connect_ex(char *username, int username_len, char
if (connection->is_open) {
/* found an open connection. now ping it */
if (connection->is_persistent) {
- int rsrc_type;
/* Check connection liveness in the following order:
* 1) always check OCI_ATTR_SERVER_STATUS
@@ -2008,7 +2012,7 @@ php_oci_connection *php_oci_do_connect_ex(char *username, int username_len, char
connection->used_this_request = 1;
tmp = (php_oci_connection *)connection->id->ptr;
- if (tmp != NULL && rsrc_type == le_pconnection && tmp->hash_key->len == hashed_details.s->len &&
+ if (tmp != NULL && tmp->hash_key->len == hashed_details.s->len &&
memcmp(tmp->hash_key->val, hashed_details.s->val, tmp->hash_key->len) == 0 && ++GC_REFCOUNT(connection->id) == SUCCESS) {
/* do nothing */
} else {
@@ -2039,7 +2043,6 @@ php_oci_connection *php_oci_do_connect_ex(char *username, int username_len, char
* if ping fails
*/
if (persistent){
- int rsrc_type;
connection->is_open = 0;
connection->used_this_request = 1;
@@ -2047,7 +2050,7 @@ php_oci_connection *php_oci_do_connect_ex(char *username, int username_len, char
/* We have to do a hash_del but need to preserve the resource if there is a positive
* refcount. Set the data pointer in the list entry to NULL
*/
- if (connection == connection->id->ptr && rsrc_type == le_pconnection) {
+ if (connection == connection->id->ptr) {
le->ptr = NULL;
}
@@ -2369,14 +2372,17 @@ static int php_oci_connection_close(php_oci_connection *connection)
* (like env) on the session pool
*/
php_oci_spool_close(connection->private_spool);
+ connection->private_spool = NULL;
}
if (connection->hash_key) {
pefree(connection->hash_key, connection->is_persistent);
+ connection->hash_key = NULL;
}
#ifdef HAVE_OCI8_DTRACE
if (connection->client_id) {
pefree(connection->client_id, connection->is_persistent);
+ connection->client_id = NULL;
}
#endif /* HAVE_OCI8_DTRACE */
pefree(connection, connection->is_persistent);
@@ -2568,12 +2574,11 @@ int php_oci_column_to_zval(php_oci_out_column *column, zval *value, int mode)
} else if (column->is_descr) {
if (column->data_type != SQLT_RDD) {
- int rsrc_type;
/* reset descriptor's length */
descriptor = (php_oci_descriptor *) column->descid->ptr;
- if (!descriptor || rsrc_type != le_descriptor) {
+ if (!descriptor) {
php_error_docref(NULL, E_WARNING, "Unable to find LOB descriptor #%d", column->descid);
return 1;
}
@@ -2770,7 +2775,7 @@ void php_oci_fetch_row (INTERNAL_FUNCTION_PARAMETERS, int mode, int expected_arg
}
if (fetch_mode & PHP_OCI_ASSOC) {
if (fetch_mode & PHP_OCI_NUM) {
- Z_ADDREF(element);
+ Z_TRY_ADDREF_P(&element);
}
add_assoc_zval(return_value, column->name, &element);
}
@@ -2972,7 +2977,7 @@ static php_oci_spool *php_oci_get_spool(char *username, int username_len, char *
{
smart_str spool_hashed_details = {0};
php_oci_spool *session_pool = NULL;
- zend_resource spool_le = {0};
+ zend_resource spool_le = {{0}};
zend_resource *spool_out_le = NULL;
zend_bool iserror = 0;
zval *spool_out_zv = NULL;
diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c
index bccab92a48..441dd448a5 100644
--- a/ext/oci8/oci8_interface.c
+++ b/ext/oci8/oci8_interface.c
@@ -54,7 +54,7 @@ PHP_FUNCTION(oci_define_by_name)
size_t name_len;
zend_long type = 0;
php_oci_statement *statement;
- php_oci_define *define, *tmp_define;
+ php_oci_define *define;
zend_string *zvtmp;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsz/|l", &stmt, &name, &name_len, &var, &type) == FAILURE) {
@@ -72,15 +72,16 @@ PHP_FUNCTION(oci_define_by_name)
ALLOC_HASHTABLE(statement->defines);
zend_hash_init(statement->defines, 13, NULL, php_oci_define_hash_dtor, 0);
}
+ else if (zend_hash_str_exists(statement->defines, (const char *)name, name_len)) {
+ RETURN_FALSE;
+ }
define = ecalloc(1,sizeof(php_oci_define));
/* if (zend_hash_add(statement->defines, name, name_len, define, sizeof(php_oci_define), (void **)&tmp_define) == SUCCESS) { */
zvtmp = zend_string_init(name, name_len, 0);
- if ((tmp_define = zend_hash_add_new_ptr(statement->defines, zvtmp, define)) != NULL) {
- efree(define);
+ if ((define = zend_hash_add_new_ptr(statement->defines, zvtmp, define)) != NULL) {
zend_string_release(zvtmp);
- define = tmp_define;
} else {
efree(define);
zend_string_release(zvtmp);
@@ -90,8 +91,8 @@ PHP_FUNCTION(oci_define_by_name)
define->name = (text*) estrndup(name, name_len);
define->name_len = name_len;
define->type = type;
- memmove(&define->zval, var, sizeof(zval));
- Z_ADDREF_P(var);
+ define->zval = var;
+ Z_TRY_ADDREF_P(define->zval);
RETURN_TRUE;
}
@@ -175,7 +176,7 @@ PHP_FUNCTION(oci_free_descriptor)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -209,7 +210,7 @@ PHP_FUNCTION(oci_lob_save)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -264,7 +265,7 @@ PHP_FUNCTION(oci_lob_import)
}
#endif
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -293,7 +294,7 @@ PHP_FUNCTION(oci_lob_load)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -333,7 +334,7 @@ PHP_FUNCTION(oci_lob_read)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -371,7 +372,7 @@ PHP_FUNCTION(oci_lob_eof)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -400,7 +401,7 @@ PHP_FUNCTION(oci_lob_tell)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -424,7 +425,7 @@ PHP_FUNCTION(oci_lob_rewind)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -457,7 +458,7 @@ PHP_FUNCTION(oci_lob_seek)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -503,7 +504,7 @@ PHP_FUNCTION(oci_lob_size)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -547,7 +548,7 @@ PHP_FUNCTION(oci_lob_write)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -583,12 +584,12 @@ PHP_FUNCTION(oci_lob_append)
}
}
- if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_dest), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_dest), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The first argument should be valid descriptor object");
RETURN_FALSE;
}
- if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_from), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_from), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The second argument should be valid descriptor object");
RETURN_FALSE;
}
@@ -624,7 +625,7 @@ PHP_FUNCTION(oci_lob_truncate)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -684,7 +685,7 @@ PHP_FUNCTION(oci_lob_erase)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -717,7 +718,7 @@ PHP_FUNCTION(oci_lob_flush)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -755,7 +756,7 @@ PHP_FUNCTION(ocisetbufferinglob)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -782,7 +783,7 @@ PHP_FUNCTION(ocigetbufferinglob)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -808,12 +809,12 @@ PHP_FUNCTION(oci_lob_copy)
return;
}
- if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_dest), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_dest), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The first argument should be valid descriptor object");
RETURN_FALSE;
}
- if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_from), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_from), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The second argument should be valid descriptor object");
RETURN_FALSE;
}
@@ -850,12 +851,12 @@ PHP_FUNCTION(oci_lob_is_equal)
return;
}
- if ((tmp_first = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_first), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp_first = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_first), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The first argument should be valid descriptor object");
RETURN_FALSE;
}
- if ((tmp_second = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_second), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp_second = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_second), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The second argument should be valid descriptor object");
RETURN_FALSE;
}
@@ -932,7 +933,7 @@ PHP_FUNCTION(oci_lob_export)
}
#endif
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -1028,7 +1029,7 @@ PHP_FUNCTION(oci_lob_write_temporary)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -1055,7 +1056,7 @@ PHP_FUNCTION(oci_lob_close)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
RETURN_FALSE;
}
@@ -1436,7 +1437,7 @@ PHP_FUNCTION(oci_fetch_all)
zend_string *zvtmp;
zvtmp = zend_string_init(columns[ i ]->name, columns[ i ]->name_len, 0);
zend_symtable_update(Z_ARRVAL(row), zvtmp, &element);
- zend_string_release(zvtmp);
+ zend_string_release(zvtmp);
}
}
@@ -1467,9 +1468,9 @@ PHP_FUNCTION(oci_fetch_all)
columns[ i ] = php_oci_statement_get_column(statement, i + 1, NULL, 0);
array_init(&tmp);
- zvtmp = zend_string_init(columns[ i ]->name, columns[ i ]->name_len, 0);
+ zvtmp = zend_string_init(columns[ i ]->name, columns[ i ]->name_len, 0);
outarrs[ i ] = zend_symtable_update(Z_ARRVAL_P(array), zvtmp, &tmp);
- zend_string_release(zvtmp);
+ zend_string_release(zvtmp);
}
}
@@ -1669,7 +1670,8 @@ go_out:
add_assoc_long(return_value, "code", errcode);
/* TODO: avoid reallocation ??? */
add_assoc_string(return_value, "message", (char*) errbuf);
- efree(errbuf);
+ if (errbuf)
+ efree(errbuf);
add_assoc_long(return_value, "offset", error_offset);
add_assoc_string(return_value, "sqltext", sqltext ? (char *) sqltext : "");
} else {
@@ -2180,7 +2182,7 @@ PHP_FUNCTION(oci_free_collection)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property");
RETURN_FALSE;
}
@@ -2212,7 +2214,7 @@ PHP_FUNCTION(oci_collection_append)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property");
RETURN_FALSE;
}
@@ -2246,7 +2248,7 @@ PHP_FUNCTION(oci_collection_element_get)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property");
RETURN_FALSE;
}
@@ -2279,12 +2281,12 @@ PHP_FUNCTION(oci_collection_assign)
}
}
- if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_collection_dest), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_collection_dest), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property. The first argument should be valid collection object");
RETURN_FALSE;
}
- if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_collection_from), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_collection_from), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property. The second argument should be valid collection object");
RETURN_FALSE;
}
@@ -2320,7 +2322,7 @@ PHP_FUNCTION(oci_collection_element_assign)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property");
RETURN_FALSE;
}
@@ -2348,7 +2350,7 @@ PHP_FUNCTION(oci_collection_size)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property");
RETURN_FALSE;
}
@@ -2376,7 +2378,7 @@ PHP_FUNCTION(oci_collection_max)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property");
RETURN_FALSE;
}
@@ -2409,7 +2411,7 @@ PHP_FUNCTION(oci_collection_trim)
}
}
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property");
RETURN_FALSE;
}
diff --git a/ext/oci8/oci8_statement.c b/ext/oci8/oci8_statement.c
index 3f5e826a7b..d27a728d3c 100644
--- a/ext/oci8/oci8_statement.c
+++ b/ext/oci8/oci8_statement.c
@@ -166,8 +166,8 @@ php_oci_statement *php_oci_get_implicit_resultset(php_oci_statement *statement)
statement2->has_descr = 0;
statement2->stmttype = 0;
- Z_ADDREF_P(statement->id);
- Z_ADDREF_P(statement2->connection->id);
+ GC_REFCOUNT(statement->id)++;
+ GC_REFCOUNT(statement2->connection->id)++;
php_oci_statement_set_prefetch(statement2, statement->prefetch_count);
@@ -359,8 +359,8 @@ int php_oci_statement_fetch(php_oci_statement *statement, ub4 nrows)
continue;
}
- zval_dtor(&column->define->zval);
- php_oci_column_to_zval(column, &column->define->zval, 0);
+ zval_dtor(column->define->zval);
+ php_oci_column_to_zval(column, column->define->zval, 0);
}
return 0;
@@ -875,17 +875,17 @@ void php_oci_statement_free(php_oci_statement *statement)
if (statement->columns) {
zend_hash_destroy(statement->columns);
- FREE_HASHTABLE(statement->columns);
+ efree(statement->columns);
}
if (statement->binds) {
zend_hash_destroy(statement->binds);
- FREE_HASHTABLE(statement->binds);
+ efree(statement->binds);
}
if (statement->defines) {
zend_hash_destroy(statement->defines);
- FREE_HASHTABLE(statement->defines);
+ efree(statement->defines);
}
if (statement->parent_stmtid) {
@@ -907,7 +907,7 @@ int php_oci_bind_pre_exec(zval *data, void *result)
*(int *)result = 0;
- if (Z_TYPE(bind->zval) == IS_ARRAY) {
+ if (Z_TYPE_P(bind->zval) == IS_ARRAY) {
/* These checks are currently valid for oci_bind_by_name, not
* oci_bind_array_by_name. Also bind->type and
* bind->indicator are not used for oci_bind_array_by_name.
@@ -921,7 +921,7 @@ int php_oci_bind_pre_exec(zval *data, void *result)
case SQLT_CLOB:
case SQLT_BLOB:
case SQLT_RDD:
- if (Z_TYPE(bind->zval) != IS_OBJECT) {
+ if (Z_TYPE_P(bind->zval) != IS_OBJECT) {
php_error_docref(NULL, E_WARNING, "Invalid variable used for bind");
*(int *)result = 1;
}
@@ -937,14 +937,14 @@ int php_oci_bind_pre_exec(zval *data, void *result)
case SQLT_LBI:
case SQLT_BIN:
case SQLT_LNG:
- if (Z_TYPE(bind->zval) == IS_RESOURCE || Z_TYPE(bind->zval) == IS_OBJECT) {
+ if (Z_TYPE_P(bind->zval) == IS_RESOURCE || Z_TYPE_P(bind->zval) == IS_OBJECT) {
php_error_docref(NULL, E_WARNING, "Invalid variable used for bind");
*(int *)result = 1;
}
break;
case SQLT_RSET:
- if (Z_TYPE(bind->zval) != IS_RESOURCE) {
+ if (Z_TYPE_P(bind->zval) != IS_RESOURCE) {
php_error_docref(NULL, E_WARNING, "Invalid variable used for bind");
*(int *)result = 1;
}
@@ -967,27 +967,27 @@ int php_oci_bind_post_exec(zval *data)
sword errstatus;
if (bind->indicator == -1) { /* NULL */
- zval *val = &bind->zval;
+ zval *val = bind->zval;
if (Z_TYPE_P(val) == IS_STRING) {
*Z_STRVAL_P(val) = '\0'; /* XXX avoid warning in debug mode */
}
zval_dtor(val);
ZVAL_NULL(val);
- } else if (Z_TYPE(bind->zval) == IS_STRING
- && Z_STRLEN(bind->zval) > 0
- && Z_STRVAL(bind->zval)[ Z_STRLEN(bind->zval) ] != '\0') {
+ } else if (Z_TYPE_P(bind->zval) == IS_STRING
+ && Z_STRLEN_P(bind->zval) > 0
+ && Z_STRVAL_P(bind->zval)[ Z_STRLEN_P(bind->zval) ] != '\0') {
/* The post- PHP 5.3 feature for "interned" strings disallows
* their reallocation but (i) any IN binds either interned or
* not should already be null terminated and (ii) for OUT
* binds, php_oci_bind_out_callback() should have allocated a
* new string that we can modify here.
*/
- Z_STR(bind->zval) = zend_string_extend(Z_STR(bind->zval), Z_STRLEN(bind->zval)+1, 0);
- Z_STRVAL(bind->zval)[ Z_STRLEN(bind->zval) ] = '\0';
- } else if (Z_TYPE(bind->zval) == IS_ARRAY) {
+ Z_STR_P(bind->zval) = zend_string_extend(Z_STR_P(bind->zval), Z_STRLEN_P(bind->zval)+1, 0);
+ Z_STRVAL_P(bind->zval)[ Z_STRLEN_P(bind->zval) ] = '\0';
+ } else if (Z_TYPE_P(bind->zval) == IS_ARRAY) {
int i;
zval *entry = NULL;
- HashTable *hash = HASH_OF(&bind->zval);
+ HashTable *hash = HASH_OF(bind->zval);
zend_hash_internal_pointer_reset(hash);
@@ -1001,7 +1001,7 @@ int php_oci_bind_post_exec(zval *data)
ZVAL_LONG(entry, ((ub4 *)(bind->array.elements))[i]);
zend_hash_move_forward(hash);
} else {
- add_next_index_long(&bind->zval, ((ub4 *)(bind->array.elements))[i]);
+ add_next_index_long(bind->zval, ((ub4 *)(bind->array.elements))[i]);
}
}
break;
@@ -1012,7 +1012,7 @@ int php_oci_bind_post_exec(zval *data)
ZVAL_DOUBLE(entry, ((double *)(bind->array.elements))[i]);
zend_hash_move_forward(hash);
} else {
- add_next_index_double(&bind->zval, ((double *)(bind->array.elements))[i]);
+ add_next_index_double(bind->zval, ((double *)(bind->array.elements))[i]);
}
}
break;
@@ -1041,10 +1041,10 @@ int php_oci_bind_post_exec(zval *data)
if (errstatus != OCI_SUCCESS) {
connection->errcode = php_oci_error(connection->err, errstatus);
PHP_OCI_HANDLE_ERROR(connection, connection->errcode);
- add_next_index_null(&bind->zval);
+ add_next_index_null(bind->zval);
} else {
connection->errcode = 0; /* retain backwards compat with OCI8 1.4 */
- add_next_index_stringl(&bind->zval, (char *)buff, buff_len);
+ add_next_index_stringl(bind->zval, (char *)buff, buff_len);
}
}
}
@@ -1064,11 +1064,16 @@ int php_oci_bind_post_exec(zval *data)
ZVAL_STRINGL(entry, (char *)(((text *)bind->array.elements)+i*bind->array.max_length), curr_element_length);
zend_hash_move_forward(hash);
} else {
- add_next_index_stringl(&bind->zval, (char *)(((text *)bind->array.elements)+i*bind->array.max_length), curr_element_length);
+ add_next_index_stringl(bind->zval, (char *)(((text *)bind->array.elements)+i*bind->array.max_length), curr_element_length);
}
}
break;
}
+ } else if ((Z_TYPE_P(bind->zval) == IS_TRUE) || (Z_TYPE_P(bind->zval) == IS_FALSE)) {
+ if (Z_LVAL_P(bind->zval) == 0)
+ ZVAL_BOOL(bind->zval, FALSE);
+ else if (Z_LVAL_P(bind->zval) == 1)
+ ZVAL_BOOL(bind->zval, TRUE);
}
return 0;
@@ -1086,7 +1091,7 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, int name_len,
/* dvoid *php_oci_collection = NULL; */
OCIStmt *oci_stmt = NULL;
dvoid *bind_data = NULL;
- php_oci_bind bind, *old_bind, *bindp;
+ php_oci_bind *old_bind, *bindp;
int mode = OCI_DATA_AT_EXEC;
sb4 value_sz = -1;
sword errstatus;
@@ -1096,7 +1101,7 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, int name_len,
{
zval *tmp;
- if (Z_TYPE_P(var) != IS_OBJECT || (tmp = zend_hash_str_find(Z_OBJPROP_P(var), "collection", sizeof("collection"))) == NULL) {
+ if (Z_TYPE_P(var) != IS_OBJECT || (tmp = zend_hash_str_find(Z_OBJPROP_P(var), "collection", sizeof("collection")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find collection property");
return 1;
}
@@ -1118,7 +1123,7 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, int name_len,
{
zval *tmp;
- if (Z_TYPE_P(var) != IS_OBJECT || (tmp = zend_hash_str_find(Z_OBJPROP_P(var), "descriptor", sizeof("descriptor"))) == NULL) {
+ if (Z_TYPE_P(var) != IS_OBJECT || (tmp = zend_hash_str_find(Z_OBJPROP_P(var), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
return 1;
}
@@ -1212,10 +1217,12 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, int name_len,
if ((old_bind = zend_hash_str_find_ptr(statement->binds, name, name_len)) != NULL) {
bindp = old_bind;
- zval_ptr_dtor(&bindp->zval);
+ if (bindp->zval) {
+ zval_ptr_dtor(bindp->zval);
+ }
} else {
zend_string *zvtmp;
- zvtmp = zend_string_init(name, name_len + 1, 0);
+ zvtmp = zend_string_init(name, name_len, 0);
bindp = (php_oci_bind *) ecalloc(1, sizeof(php_oci_bind));
bindp = zend_hash_update_ptr(statement->binds, zvtmp, bindp);
zend_string_release(zvtmp);
@@ -1224,9 +1231,9 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, int name_len,
bindp->descriptor = oci_desc;
bindp->statement = oci_stmt;
bindp->parent_statement = statement;
- ZVAL_COPY(&bindp->zval, var);
+ bindp->zval = var;
bindp->type = type;
- Z_TRY_ADDREF_P(var);
+ Z_TRY_ADDREF_P(bindp->zval);
PHP_OCI_CALL_RETURN(errstatus,
OCIBindByName,
@@ -1314,7 +1321,7 @@ sb4 php_oci_bind_in_callback(
php_oci_bind *phpbind;
zval *val;
- if (!(phpbind=(php_oci_bind *)ictxp) || !(val = &phpbind->zval)) {
+ if (!(phpbind=(php_oci_bind *)ictxp) || !(val = phpbind->zval)) {
php_error_docref(NULL, E_WARNING, "Invalid phpbind pointer value");
return OCI_ERROR;
}
@@ -1367,7 +1374,7 @@ sb4 php_oci_bind_out_callback(
zval *val;
sb4 retval = OCI_ERROR;
- if (!(phpbind=(php_oci_bind *)octxp) || !(val = &phpbind->zval)) {
+ if (!(phpbind=(php_oci_bind *)octxp) || !(val = phpbind->zval)) {
php_error_docref(NULL, E_WARNING, "Invalid phpbind pointer value");
return retval;
}
@@ -1394,7 +1401,7 @@ sb4 php_oci_bind_out_callback(
* out-bind as the contents would have been changed for in/out
* binds (Bug #46994).
*/
- if ((tmp = zend_hash_str_find(Z_OBJPROP_P(val), "descriptor", sizeof("descriptor"))) == NULL) {
+ if ((tmp = zend_hash_str_find(Z_OBJPROP_P(val), "descriptor", sizeof("descriptor")-1)) == NULL) {
php_error_docref(NULL, E_WARNING, "Unable to find object outbind descriptor property");
return OCI_ERROR;
}
@@ -1411,16 +1418,21 @@ sb4 php_oci_bind_out_callback(
convert_to_string(val);
zval_dtor(val);
-#if 0
+ {
+ char *p = ecalloc(1, PHP_OCI_PIECE_SIZE);
+ ZVAL_STRINGL(val, p, PHP_OCI_PIECE_SIZE);
+ efree(p);
+ }
+#if 0
Z_STRLEN_P(val) = PHP_OCI_PIECE_SIZE; /* 64K-1 is max XXX */
- Z_STRVAL_P(val) = ecalloc(1, Z_STRLEN_P(phpbind->zval) + 1);
+ Z_STRVAL_P(val) = ecalloc(1, Z_STRLEN_P(val) + 1);
/* XXX is this right? */
-#endif
ZVAL_STRINGL(val, NULL, Z_STRLEN(phpbind->zval) + 1);
+#endif
/* XXX we assume that zend-zval len has 4 bytes */
- *alenpp = (ub4*) &Z_STRLEN(phpbind->zval);
- *bufpp = Z_STRVAL(phpbind->zval);
+ *alenpp = (ub4*) &Z_STRLEN_P(phpbind->zval);
+ *bufpp = Z_STRVAL_P(phpbind->zval);
*piecep = OCI_ONE_PIECE;
*rcodepp = &phpbind->retcode;
*indpp = &phpbind->indicator;
@@ -1580,7 +1592,7 @@ int php_oci_bind_array_by_name(php_oci_statement *statement, char *name, int nam
zend_hash_init(statement->binds, 13, NULL, php_oci_bind_hash_dtor, 0);
}
- zvtmp = zend_string_init(name, name_len + 1, 0);
+ zvtmp = zend_string_init(name, name_len, 0);
bindp = zend_hash_update_ptr(statement->binds, zvtmp, bind);
zend_string_release(zvtmp);
@@ -1588,12 +1600,12 @@ int php_oci_bind_array_by_name(php_oci_statement *statement, char *name, int nam
bindp->statement = NULL;
bindp->parent_statement = statement;
bindp->bind = NULL;
- ZVAL_COPY(&bindp->zval, var);
+ bindp->zval = var;
bindp->array.type = type;
bindp->indicator = 0; /* not used for array binds */
bindp->type = 0; /* not used for array binds */
- Z_ADDREF_P(var);
+ Z_TRY_ADDREF_P(var);
PHP_OCI_CALL_RETURN(errstatus,
OCIBindByName,
@@ -1617,6 +1629,7 @@ int php_oci_bind_array_by_name(php_oci_statement *statement, char *name, int nam
if (errstatus != OCI_SUCCESS) {
+ efree(bindp);
statement->errcode = php_oci_error(statement->err, errstatus);
PHP_OCI_HANDLE_ERROR(statement->connection, statement->errcode);
return 1;
diff --git a/ext/oci8/php_oci8_int.h b/ext/oci8/php_oci8_int.h
index 9f1da48cd1..4a23f06168 100644
--- a/ext/oci8/php_oci8_int.h
+++ b/ext/oci8/php_oci8_int.h
@@ -202,7 +202,7 @@ typedef struct {
/* {{{ php_oci_define */
typedef struct {
- zval zval; /* zval used in define */
+ zval *zval; /* zval used in define */
text *name; /* placeholder's name */
ub4 name_len; /* placeholder's name length */
ub4 type; /* define type */
@@ -237,7 +237,7 @@ typedef struct {
/* {{{ php_oci_bind */
typedef struct {
OCIBind *bind; /* bind handle */
- zval zval; /* value */
+ zval *zval; /* value */
dvoid *descriptor; /* used for binding of LOBS etc */
OCIStmt *statement; /* used for binding REFCURSORs */
php_oci_statement *parent_statement; /* pointer to the parent statement */
diff --git a/ext/opcache/Optimizer/optimize_temp_vars_5.c b/ext/opcache/Optimizer/optimize_temp_vars_5.c
index 77b4d66f94..f60f61cb45 100644
--- a/ext/opcache/Optimizer/optimize_temp_vars_5.c
+++ b/ext/opcache/Optimizer/optimize_temp_vars_5.c
@@ -77,7 +77,6 @@ void optimize_temporary_variables(zend_op_array *op_array, zend_optimizer_ctx *c
while (opline >= end) {
if ((ZEND_OP1_TYPE(opline) & (IS_VAR | IS_TMP_VAR))) {
-
currT = VAR_NUM(ZEND_OP1(opline).var) - offset;
if (opline->opcode == ZEND_ROPE_END) {
int num = (((opline->extended_value + 1) * sizeof(zend_string*)) + (sizeof(zval) - 1)) / sizeof(zval);
@@ -153,7 +152,12 @@ void optimize_temporary_variables(zend_op_array *op_array, zend_optimizer_ctx *c
currT = VAR_NUM(ZEND_RESULT(opline).var) - offset;
if (valid_T[currT]) {
if (start_of_T[currT] == opline) {
- taken_T[map_T[currT]] = 0;
+ /* ZEND_FAST_CALL can not share temporary var with others
+ * since the fast_var could also be set by ZEND_HANDLE_EXCEPTION
+ * which could be ahead of it */
+ if (opline->opcode != ZEND_FAST_CALL) {
+ taken_T[map_T[currT]] = 0;
+ }
}
ZEND_RESULT(opline).var = NUM_VAR(map_T[currT] + offset);
if (opline->opcode == ZEND_ROPE_INIT) {
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c
index 2234d5ee56..01e9eca28f 100644
--- a/ext/opcache/ZendAccelerator.c
+++ b/ext/opcache/ZendAccelerator.c
@@ -1068,15 +1068,6 @@ int zend_accel_invalidate(const char *filename, int filename_len, zend_bool forc
zend_persistent_script *persistent_script;
if (!ZCG(enabled) || !accel_startup_ok || !ZCSG(accelerator_enabled) || accelerator_shm_read_lock() != SUCCESS) {
-#ifdef HAVE_OPCACHE_FILE_CACHE
- if (ZCG(accel_directives).file_cache) {
- realpath = accelerator_orig_zend_resolve_path(filename, filename_len);
- if (realpath) {
- zend_file_cache_invalidate(realpath);
- zend_string_release(realpath);
- }
- }
-#endif
return FAILURE;
}
@@ -2290,7 +2281,7 @@ static void accel_deactivate(void)
ZCG(counted) = 0;
#if !ZEND_DEBUG
- if (ZCG(accel_directives).fast_shutdown) {
+ if (ZCG(accel_directives).fast_shutdown && is_zend_mm()) {
zend_accel_fast_shutdown();
}
#endif
diff --git a/ext/opcache/zend_accelerator_util_funcs.c b/ext/opcache/zend_accelerator_util_funcs.c
index a737e8db6b..e20f3d16f6 100644
--- a/ext/opcache/zend_accelerator_util_funcs.c
+++ b/ext/opcache/zend_accelerator_util_funcs.c
@@ -30,8 +30,8 @@
# define accel_xlat_set(old, new) zend_hash_index_add_new_ptr(&ZCG(bind_hash), (zend_ulong)(zend_uintptr_t)(old), (new))
# define accel_xlat_get(old) zend_hash_index_find_ptr(&ZCG(bind_hash), (zend_ulong)(zend_uintptr_t)(old))
#else
-# define accel_xlat_set(old, new) (zend_hash_str_add_new_ptr(&ZCG(bind_hash), (char*)&(old), sizeof(void*), (zend_ulong)(zend_uintptr_t)(old), (void**)&(new))
-# define accel_xlat_get(old, new) ((new) = zend_hash_str_find_ptr(&ZCG(bind_hash), (char*)&(old), sizeof(void*), (zend_ulong)(zend_uintptr_t)(old), (void**)&(new)))
+# define accel_xlat_set(old, new) zend_hash_str_add_new_ptr(&ZCG(bind_hash), (char*)&(old), sizeof(void*), (old))
+# define accel_xlat_get(old) zend_hash_str_find_ptr(&ZCG(bind_hash), (char*)&(old), sizeof(void*))
#endif
#define ARENA_REALLOC(ptr) \
diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c
index 0781b91c9d..c3ee95960a 100644
--- a/ext/opcache/zend_file_cache.c
+++ b/ext/opcache/zend_file_cache.c
@@ -665,9 +665,40 @@ static void zend_file_cache_serialize(zend_persistent_script *script,
new_script->mem = NULL;
}
-int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
+static char *zend_file_cache_get_bin_file_path(zend_string *script_path)
{
size_t len;
+ char *filename;
+
+ len = strlen(ZCG(accel_directives).file_cache);
+ filename = emalloc(len + 33 + ZSTR_LEN(script_path) + sizeof(SUFFIX));
+ memcpy(filename, ZCG(accel_directives).file_cache, len);
+#ifndef ZEND_WIN32
+ filename[len] = '/';
+ memcpy(filename + len + 1, ZCG(system_id), 32);
+ memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path));
+ memcpy(filename + len + 33 + ZSTR_LEN(script_path), SUFFIX, sizeof(SUFFIX));
+#else
+ filename[len] = '\\';
+ memcpy(filename + len + 1, ZCG(system_id), 32);
+ if (ZSTR_LEN(script_path) >= 2 && ':' == ZSTR_VAL(script_path)[1]) {
+ /* local fs */
+ *(filename + len + 33) = '\\';
+ *(filename + len + 34) = ZSTR_VAL(script_path)[0];
+ memcpy(filename + len + 35, ZSTR_VAL(script_path) + 2, ZSTR_LEN(script_path) - 2);
+ memcpy(filename + len + 35 + ZSTR_LEN(script_path) - 2, SUFFIX, sizeof(SUFFIX));
+ } else {
+ /* network path */
+ memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path));
+ memcpy(filename + len + 33 + ZSTR_LEN(script_path), SUFFIX, sizeof(SUFFIX));
+ }
+#endif
+
+ return filename;
+}
+
+int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
+{
int fd;
char *filename;
zend_file_cache_metainfo info;
@@ -676,15 +707,9 @@ int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
#endif
void *mem, *buf;
- len = strlen(ZCG(accel_directives).file_cache);
- filename = emalloc(len + 33 + ZSTR_LEN(script->full_path) + sizeof(SUFFIX));
- memcpy(filename, ZCG(accel_directives).file_cache, len);
- filename[len] = '/';
- memcpy(filename + len + 1, ZCG(system_id), 32);
- memcpy(filename + len + 33, ZSTR_VAL(script->full_path), ZSTR_LEN(script->full_path));
- memcpy(filename + len + 33 + ZSTR_LEN(script->full_path), SUFFIX, sizeof(SUFFIX));
+ filename = zend_file_cache_get_bin_file_path(script->full_path);
- if (zend_file_cache_mkdir(filename, len) != SUCCESS) {
+ if (zend_file_cache_mkdir(filename, strlen(ZCG(accel_directives).file_cache)) != SUCCESS) {
zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot create directory for file '%s'\n", filename);
efree(filename);
return FAILURE;
@@ -1164,7 +1189,6 @@ static void zend_file_cache_unserialize(zend_persistent_script *script,
zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handle)
{
zend_string *full_path = file_handle->opened_path;
- size_t len;
int fd;
char *filename;
zend_persistent_script *script;
@@ -1176,13 +1200,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
if (!full_path) {
return NULL;
}
- len = strlen(ZCG(accel_directives).file_cache);
- filename = emalloc(len + 33 + ZSTR_LEN(full_path) + sizeof(SUFFIX));
- memcpy(filename, ZCG(accel_directives).file_cache, len);
- filename[len] = '/';
- memcpy(filename + len + 1, ZCG(system_id), 32);
- memcpy(filename + len + 33, ZSTR_VAL(full_path), ZSTR_LEN(full_path));
- memcpy(filename + len + 33 + ZSTR_LEN(full_path), SUFFIX, sizeof(SUFFIX));
+ filename = zend_file_cache_get_bin_file_path(full_path);
fd = open(filename, O_RDONLY | O_BINARY);
if (fd < 0) {
@@ -1328,16 +1346,9 @@ use_process_mem:
void zend_file_cache_invalidate(zend_string *full_path)
{
- size_t len;
char *filename;
- len = strlen(ZCG(accel_directives).file_cache);
- filename = emalloc(len + 33 + ZSTR_LEN(full_path) + sizeof(SUFFIX));
- memcpy(filename, ZCG(accel_directives).file_cache, len);
- filename[len] = '/';
- memcpy(filename + len + 1, ZCG(system_id), 32);
- memcpy(filename + len + 33, ZSTR_VAL(full_path), ZSTR_LEN(full_path));
- memcpy(filename + len + 33 + ZSTR_LEN(full_path), SUFFIX, sizeof(SUFFIX));
+ filename = zend_file_cache_get_bin_file_path(full_path);
unlink(filename);
efree(filename);
diff --git a/ext/pdo/tests/bug65946.phpt b/ext/pdo/tests/bug65946.phpt
index 4b63a14bb5..af6088cea9 100644
--- a/ext/pdo/tests/bug65946.phpt
+++ b/ext/pdo/tests/bug65946.phpt
@@ -18,6 +18,9 @@ $db->exec('CREATE TABLE test(id int)');
$db->exec('INSERT INTO test VALUES(1)');
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'firebird') {
$sql = 'SELECT FIRST :limit * FROM test';
+} else if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'oci') {
+ //$sql = 'SELECT * FROM test FETCH FIRST :limit ROWS ONLY'; // Oracle 12c syntax
+ $sql = "select id from (select a.*, rownum rnum from (SELECT * FROM test) a where rownum <= :limit)";
} else {
$sql = 'SELECT * FROM test LIMIT :limit';
}
diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h
index 17bace7882..3d4108dd59 100644
--- a/ext/pdo_mysql/php_pdo_mysql_int.h
+++ b/ext/pdo_mysql/php_pdo_mysql_int.h
@@ -43,7 +43,12 @@
#define PDO_DBG_ERR(msg) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "error: ", (msg)); } while (0)
#define PDO_DBG_INF_FMT(...) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log_va(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "info : ", __VA_ARGS__); } while (0)
#define PDO_DBG_ERR_FMT(...) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log_va(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "error: ", __VA_ARGS__); } while (0)
-#define PDO_DBG_ENTER(func_name) zend_bool dbg_skip_trace = TRUE; if (PDO_MYSQL_G(dbg)) dbg_skip_trace = !PDO_MYSQL_G(dbg)->m->func_enter(PDO_MYSQL_G(dbg), __LINE__, __FILE__, func_name, strlen(func_name));
+#define PDO_DBG_ENTER(func_name) \
+ zend_bool dbg_skip_trace = TRUE; \
+ ((void) dbg_skip_trace); \
+ if (PDO_MYSQL_G(dbg)) \
+ dbg_skip_trace = !PDO_MYSQL_G(dbg)->m->func_enter(PDO_MYSQL_G(dbg), __LINE__, __FILE__, func_name, strlen(func_name));
+
#define PDO_DBG_RETURN(value) do { if (PDO_MYSQL_G(dbg)) PDO_MYSQL_G(dbg)->m->func_leave(PDO_MYSQL_G(dbg), __LINE__, __FILE__, 0); return (value); } while (0)
#define PDO_DBG_VOID_RETURN do { if (PDO_MYSQL_G(dbg)) PDO_MYSQL_G(dbg)->m->func_leave(PDO_MYSQL_G(dbg), __LINE__, __FILE__, 0); return; } while (0)
diff --git a/ext/pdo_oci/oci_statement.c b/ext/pdo_oci/oci_statement.c
index 3148162d61..9c2e149935 100644
--- a/ext/pdo_oci/oci_statement.c
+++ b/ext/pdo_oci/oci_statement.c
@@ -51,7 +51,7 @@
} \
} while(0)
-static php_stream *oci_create_lob_stream(pdo_stmt_t *stmt, OCILobLocator *lob);
+static php_stream *oci_create_lob_stream(zval *dbh, pdo_stmt_t *stmt, OCILobLocator *lob);
static int oci_stmt_dtor(pdo_stmt_t *stmt) /* {{{ */
{
@@ -254,13 +254,12 @@ static sb4 oci_bind_output_cb(dvoid *ctx, OCIBind *bindp, ub4 iter, ub4 index, d
convert_to_string(parameter);
zval_dtor(parameter);
- Z_STRLEN_P(parameter) = param->max_value_len;
- Z_STR_P(parameter) = ecalloc(1, Z_STRLEN_P(parameter)+1);
+ Z_STR_P(parameter) = zend_string_alloc(param->max_value_len, 1);
P->used_for_output = 1;
P->actual_len = (ub4) Z_STRLEN_P(parameter);
*alenpp = &P->actual_len;
- *bufpp = Z_STRVAL_P(parameter);
+ *bufpp = (Z_STR_P(parameter))->val;
*piecep = OCI_ONE_PIECE;
*rcodepp = &P->retcode;
*indpp = &P->indicator;
@@ -368,9 +367,7 @@ static int oci_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *pa
zval_dtor(parameter);
ZVAL_UNDEF(parameter);
} else if (Z_TYPE_P(parameter) == IS_STRING) {
- Z_STRLEN_P(parameter) = P->actual_len;
- Z_STR_P(parameter) = erealloc(Z_STRVAL_P(parameter), P->actual_len+1);
- Z_STRVAL_P(parameter)[P->actual_len] = '\0';
+ Z_STR_P(parameter) = zend_string_init(Z_STRVAL_P(parameter), P->actual_len, 1);
}
} else if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB && P->thing) {
php_stream *stm;
@@ -380,7 +377,7 @@ static int oci_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *pa
* wanted to bind a lob locator into it from the query
* */
- stm = oci_create_lob_stream(stmt, (OCILobLocator*)P->thing);
+ stm = oci_create_lob_stream(&stmt->database_object_handle, stmt, (OCILobLocator*)P->thing);
if (stm) {
OCILobOpen(S->H->svc, S->err, (OCILobLocator*)P->thing, OCI_LOB_READWRITE);
php_stream_to_zval(stm, parameter);
@@ -610,10 +607,18 @@ static int oci_stmt_describe(pdo_stmt_t *stmt, int colno) /* {{{ */
return 1;
} /* }}} */
+struct _oci_lob_env {
+ OCISvcCtx *svc;
+ OCIError *err;
+};
+typedef struct _oci_lob_env oci_lob_env;
+
struct oci_lob_self {
+ zval dbh;
pdo_stmt_t *stmt;
pdo_oci_stmt *S;
OCILobLocator *lob;
+ oci_lob_env *E;
ub4 offset;
};
@@ -624,7 +629,7 @@ static size_t oci_blob_write(php_stream *stream, const char *buf, size_t count)
sword r;
amt = (ub4) count;
- r = OCILobWrite(self->S->H->svc, self->S->err, self->lob,
+ r = OCILobWrite(self->E->svc, self->E->err, self->lob,
&amt, self->offset, (char*)buf, (ub4) count,
OCI_ONE_PIECE,
NULL, NULL, 0, SQLCS_IMPLICIT);
@@ -644,7 +649,7 @@ static size_t oci_blob_read(php_stream *stream, char *buf, size_t count)
sword r;
amt = (ub4) count;
- r = OCILobRead(self->S->H->svc, self->S->err, self->lob,
+ r = OCILobRead(self->E->svc, self->E->err, self->lob,
&amt, self->offset, buf, (ub4) count,
NULL, NULL, 0, SQLCS_IMPLICIT);
@@ -662,10 +667,15 @@ static size_t oci_blob_read(php_stream *stream, char *buf, size_t count)
static int oci_blob_close(php_stream *stream, int close_handle)
{
struct oci_lob_self *self = (struct oci_lob_self *)stream->abstract;
- /* pdo_stmt_t *stmt = self->stmt; */
+ pdo_stmt_t *stmt = self->stmt;
if (close_handle) {
- OCILobClose(self->S->H->svc, self->S->err, self->lob);
+ zend_object *obj = &stmt->std;
+
+ OCILobClose(self->E->svc, self->E->err, self->lob);
+ zval_ptr_dtor(&self->dbh);
+ GC_REFCOUNT(obj)--;
+ efree(self->E);
efree(self);
}
@@ -676,7 +686,7 @@ static int oci_blob_close(php_stream *stream, int close_handle)
static int oci_blob_flush(php_stream *stream)
{
struct oci_lob_self *self = (struct oci_lob_self*)stream->abstract;
- OCILobFlushBuffer(self->S->H->svc, self->S->err, self->lob, 0);
+ OCILobFlushBuffer(self->E->svc, self->E->err, self->lob, 0);
return 0;
}
@@ -704,18 +714,27 @@ static php_stream_ops oci_blob_stream_ops = {
NULL
};
-static php_stream *oci_create_lob_stream(pdo_stmt_t *stmt, OCILobLocator *lob)
+static php_stream *oci_create_lob_stream(zval *dbh, pdo_stmt_t *stmt, OCILobLocator *lob)
{
php_stream *stm;
struct oci_lob_self *self = ecalloc(1, sizeof(*self));
+
+ ZVAL_COPY_VALUE(&self->dbh, dbh);
self->lob = lob;
self->offset = 1; /* 1-based */
self->stmt = stmt;
self->S = (pdo_oci_stmt*)stmt->driver_data;
+ self->E = ecalloc(1, sizeof(oci_lob_env));
+ self->E->svc = self->S->H->svc;
+ self->E->err = self->S->err;
stm = php_stream_alloc(&oci_blob_stream_ops, self, 0, "r+b");
if (stm) {
+ zend_object *obj;
+ obj = &stmt->std;
+ Z_ADDREF(self->dbh);
+ GC_REFCOUNT(obj)++;
return stm;
}
@@ -739,7 +758,7 @@ static int oci_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, size_t *len
if (C->dtype == SQLT_BLOB || C->dtype == SQLT_CLOB) {
if (C->data) {
- *ptr = (char*)oci_create_lob_stream(stmt, (OCILobLocator*)C->data);
+ *ptr = (char*)oci_create_lob_stream(&stmt->database_object_handle, stmt, (OCILobLocator*)C->data);
OCILobOpen(S->H->svc, S->err, (OCILobLocator*)C->data, OCI_LOB_READONLY);
}
*len = (size_t) 0;
diff --git a/ext/pdo_oci/tests/bug44301.phpt b/ext/pdo_oci/tests/bug44301.phpt
index c0f79356af..1a3d8ad797 100644
--- a/ext/pdo_oci/tests/bug44301.phpt
+++ b/ext/pdo_oci/tests/bug44301.phpt
@@ -22,4 +22,4 @@ try {
$db = null;
--EXPECTF--
SQLSTATE[HY000]: General error: 942 OCIStmtExecute: ORA-00942: table or view does not exist
- (%s/ext/pdo_oci/oci_statement.c:%d)
+ (%s%epdo_oci%eoci_statement.c:%d)
diff --git a/ext/pdo_oci/tests/bug57702.phpt b/ext/pdo_oci/tests/bug57702.phpt
index 0060bb0f2e..d0abc6ff8c 100644
--- a/ext/pdo_oci/tests/bug57702.phpt
+++ b/ext/pdo_oci/tests/bug57702.phpt
@@ -81,7 +81,6 @@ while ($stmt->fetch(PDO::FETCH_BOUND)) {
var_dump($clob1);
var_dump($clob2);
}
-print "done\n";
////////////////////
@@ -123,6 +122,22 @@ for ($i = 0; $i < count($a); $i++) {
var_dump(stream_get_contents($a[$i][1]));
}
+////////////////////
+
+echo "\nSixth Query\n";
+
+$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); // Let's use streams
+
+$a = array();
+$i = 0;
+foreach($db->query("select data1 as d4_1, data2 as d4_2 from bug57702 order by id") as $row) {
+ $a[$i][0] = $row['d4_1'];
+ $a[$i][1] = $row['d4_2'];
+ var_dump(stream_get_contents($a[$i][0]));
+ var_dump(stream_get_contents($a[$i][1]));
+ $i++;
+}
+
// Cleanup
$query = "drop table bug57702";
$stmt = $db->prepare($query);
@@ -149,7 +164,6 @@ string(11) "row 1 col 1"
string(11) "row 1 col 2"
string(11) "row 2 col 1"
string(11) "row 2 col 2"
-done
Fourth Query
string(11) "row 1 col 1"
@@ -162,4 +176,10 @@ string(11) "row 2 col 1"
string(11) "row 2 col 2"
string(11) "row 2 col 1"
string(11) "row 2 col 2"
+
+Sixth Query
+string(11) "row 1 col 1"
+string(11) "row 1 col 2"
+string(11) "row 2 col 1"
+string(11) "row 2 col 2"
done
diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c
index 53d12a719d..9b74b24212 100644
--- a/ext/pdo_sqlite/sqlite_statement.c
+++ b/ext/pdo_sqlite/sqlite_statement.c
@@ -233,7 +233,7 @@ static int pdo_sqlite_stmt_fetch(pdo_stmt_t *stmt,
static int pdo_sqlite_stmt_describe(pdo_stmt_t *stmt, int colno)
{
pdo_sqlite_stmt *S = (pdo_sqlite_stmt*)stmt->driver_data;
- char *str;
+ const char *str;
if(colno >= sqlite3_column_count(S->stmt)) {
/* error invalid column */
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 9282d48364..1172682bbc 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -5803,7 +5803,6 @@ static int php_pgsql_add_quotes(zval *src, zend_bool should_free)
PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, const zval *values, zval *result, zend_ulong opt)
{
zend_string *field = NULL;
- zend_ulong num_idx = -1;
zval meta, *def, *type, *not_null, *has_default, *is_enum, *val, new_val;
int err = 0, skip_field;
php_pgsql_data_type data_type;
@@ -5824,7 +5823,7 @@ PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, con
return FAILURE;
}
- ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(values), num_idx, field, val) {
+ ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(values), field, val) {
skip_field = 0;
ZVAL_NULL(&new_val);
@@ -6550,7 +6549,6 @@ PHP_PGSQL_API int php_pgsql_insert(PGconn *pg_link, const char *table, zval *var
char *tmp;
smart_str querystr = {0};
int ret = FAILURE;
- zend_ulong num_idx;
zend_string *fld;
assert(pg_link != NULL);
@@ -6579,7 +6577,7 @@ PHP_PGSQL_API int php_pgsql_insert(PGconn *pg_link, const char *table, zval *var
build_tablename(&querystr, pg_link, table);
smart_str_appends(&querystr, " (");
- ZEND_HASH_FOREACH_KEY(Z_ARRVAL_P(var_array), num_idx, fld) {
+ ZEND_HASH_FOREACH_STR_KEY(Z_ARRVAL_P(var_array), fld) {
if (fld == NULL) {
php_error_docref(NULL, E_NOTICE, "Expects associative array for values to be inserted");
goto cleanup;
@@ -6748,11 +6746,10 @@ static inline int build_assignment_string(PGconn *pg_link, smart_str *querystr,
{
char *tmp;
char buf[256];
- zend_ulong num_idx;
zend_string *fld;
zval *val;
- ZEND_HASH_FOREACH_KEY_VAL(ht, num_idx, fld, val) {
+ ZEND_HASH_FOREACH_STR_KEY_VAL(ht, fld, val) {
if (fld == NULL) {
php_error_docref(NULL, E_NOTICE, "Expects associative array for values to be inserted");
return -1;
diff --git a/ext/posix/config.m4 b/ext/posix/config.m4
index 82b80ce972..9dfa70d1db 100644
--- a/ext/posix/config.m4
+++ b/ext/posix/config.m4
@@ -11,7 +11,7 @@ if test "$PHP_POSIX" = "yes"; then
AC_CHECK_HEADERS(sys/mkdev.h)
- AC_CHECK_FUNCS(seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo mknod getrlimit getlogin getgroups makedev initgroups getpwuid_r getgrgid_r)
+ AC_CHECK_FUNCS(seteuid setegid setsid getsid setpgid getpgid ctermid mkfifo mknod setrlimit getrlimit getlogin getgroups makedev initgroups getpwuid_r getgrgid_r)
AC_MSG_CHECKING([for working ttyname_r() implementation])
AC_TRY_RUN([
diff --git a/ext/posix/php_posix.h b/ext/posix/php_posix.h
index ced4afe2c6..2132c7e7ca 100644
--- a/ext/posix/php_posix.h
+++ b/ext/posix/php_posix.h
@@ -113,6 +113,10 @@ PHP_FUNCTION(posix_getpwuid);
PHP_FUNCTION(posix_getrlimit);
#endif
+#ifdef HAVE_SETRLIMIT
+PHP_FUNCTION(posix_setrlimit);
+#endif
+
#ifdef HAVE_INITGROUPS
PHP_FUNCTION(posix_initgroups);
#endif
diff --git a/ext/posix/posix.c b/ext/posix/posix.c
index 12fb3f3e36..547e93e58e 100644
--- a/ext/posix/posix.c
+++ b/ext/posix/posix.c
@@ -199,6 +199,14 @@ ZEND_BEGIN_ARG_INFO(arginfo_posix_getrlimit, 0)
ZEND_END_ARG_INFO()
#endif
+#ifdef HAVE_SETRLIMIT
+ZEND_BEGIN_ARG_INFO_EX(arginfo_posix_setrlimit, 0, 0, 3)
+ ZEND_ARG_INFO(0, resource)
+ ZEND_ARG_INFO(0, softlimit)
+ ZEND_ARG_INFO(0, hardlimit)
+ZEND_END_ARG_INFO()
+#endif
+
ZEND_BEGIN_ARG_INFO(arginfo_posix_get_last_error, 0)
ZEND_END_ARG_INFO()
@@ -293,6 +301,9 @@ const zend_function_entry posix_functions[] = {
#ifdef HAVE_GETRLIMIT
PHP_FE(posix_getrlimit, arginfo_posix_getrlimit)
#endif
+#ifdef HAVE_SETRLIMIT
+ PHP_FE(posix_setrlimit, arginfo_posix_setrlimit)
+#endif
PHP_FE(posix_get_last_error, arginfo_posix_get_last_error)
PHP_FALIAS(posix_errno, posix_get_last_error, arginfo_posix_get_last_error)
@@ -344,7 +355,57 @@ static PHP_MINIT_FUNCTION(posix)
#ifdef S_IFSOCK
REGISTER_LONG_CONSTANT("POSIX_S_IFSOCK", S_IFSOCK, CONST_CS | CONST_PERSISTENT);
#endif
-
+#ifdef RLIMIT_AS
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_AS", RLIMIT_AS, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_CORE
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_CORE", RLIMIT_CORE, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_CPU
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_CPU", RLIMIT_CPU, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_DATA
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_DATA", RLIMIT_DATA, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_FSIZE
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_FSIZE", RLIMIT_FSIZE, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_LOCKS
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_LOCKS", RLIMIT_LOCKS, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_MEMLOCK
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_MEMLOCK", RLIMIT_MEMLOCK, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_MSGQUEUE
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_MSGQUEUE", RLIMIT_MSGQUEUE, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_NICE
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_NICE", RLIMIT_NICE, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_NOFILE
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_NOFILE", RLIMIT_NOFILE, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_NPROC
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_NPROC", RLIMIT_NPROC, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_RSS
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_RSS", RLIMIT_RSS, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_RTPRIO
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_RTPRIO", RLIMIT_RTPRIO, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_RTTIME
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_RTTIME", RLIMIT_RTTIME, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_SIGPENDING
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_SIGPENDING", RLIMIT_SIGPENDING, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef RLIMIT_STACK
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_STACK", RLIMIT_STACK, CONST_CS | CONST_PERSISTENT);
+#endif
+#ifdef HAVE_SETRLIMIT
+ REGISTER_LONG_CONSTANT("POSIX_RLIMIT_INFINITY", RLIM_INFINITY, CONST_CS | CONST_PERSISTENT);
+#endif
return SUCCESS;
}
/* }}} */
@@ -1322,6 +1383,33 @@ PHP_FUNCTION(posix_getrlimit)
#endif /* HAVE_GETRLIMIT */
+#ifdef HAVE_SETRLIMIT
+/* {{{ proto bool posix_setrlimit(int resource, int softlimit, int hardlimit)
+ Set system resource consumption limits (POSIX.1-2001) */
+PHP_FUNCTION(posix_setrlimit)
+{
+ struct rlimit rl;
+ zend_long res, cur, max;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &res, &cur, &max) == FAILURE) {
+ RETURN_FALSE;
+ }
+
+ rl.rlim_cur = cur;
+ rl.rlim_max = max;
+
+ if (setrlimit(res, &rl) == -1) {
+ POSIX_G(last_error) = errno;
+ RETURN_FALSE;
+ }
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+#endif /* HAVE_SETRLIMIT */
+
+
/* {{{ proto int posix_get_last_error(void)
Retrieve the error number set by the last posix function which failed. */
PHP_FUNCTION(posix_get_last_error)
diff --git a/ext/posix/tests/posix_setrlimit.phpt b/ext/posix/tests/posix_setrlimit.phpt
new file mode 100644
index 0000000000..4806fcfb4d
--- /dev/null
+++ b/ext/posix/tests/posix_setrlimit.phpt
@@ -0,0 +1,18 @@
+--TEST--
+posix_setrlimit(): Basic tests
+--SKIPIF--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded');
+if (!function_exists('posix_setrlimit')) die('skip posix_setrlimit() not found');
+?>
+--FILE--
+<?php
+
+var_dump(posix_setrlimit(POSIX_RLIMIT_NOFILE, 128, 128));
+var_dump(posix_setrlimit(POSIX_RLIMIT_NOFILE, 129, 128));
+
+?>
+--EXPECTF--
+bool(true)
+bool(false)
+
diff --git a/ext/readline/readline_cli.c b/ext/readline/readline_cli.c
index 125b09e920..eaec591d9a 100644
--- a/ext/readline/readline_cli.c
+++ b/ext/readline/readline_cli.c
@@ -587,7 +587,7 @@ static int readline_shell_run(void) /* {{{ */
if (PG(auto_prepend_file) && PG(auto_prepend_file)[0]) {
zend_file_handle *prepend_file_p;
- zend_file_handle prepend_file = {0};
+ zend_file_handle prepend_file = {{0}};
prepend_file.filename = PG(auto_prepend_file);
prepend_file.opened_path = NULL;
diff --git a/ext/shmop/tests/002.phpt b/ext/shmop/tests/002.phpt
new file mode 100644
index 0000000000..c67857af08
--- /dev/null
+++ b/ext/shmop/tests/002.phpt
@@ -0,0 +1,119 @@
+--TEST--
+shmop extension error messages
+--CREDITS--
+edgarsandi - <edgar.r.sandi@gmail.com>
+--SKIPIF--
+<?php
+ if( substr(PHP_OS, 0, 3) == "WIN") {
+ die('skip not for Windows');
+ }
+ if (!extension_loaded("shmop")) {
+
+ die("skip shmop() extension not available");
+ }
+?>
+--FILE--
+<?php
+ $hex_shm_id = function(){
+ return rand(0, 9999);
+ };
+
+echo PHP_EOL, '## shmop_open function tests ##';
+ // warning outputs: 4 parameters expected
+ var_dump($shm_id = shmop_open());
+
+ // warning outputs: invalid flag when the flags length != 1
+ var_dump(shmop_open($hex_shm_id(), '', 0644, 1024));
+
+ // warning outputs: invalid access mode
+ var_dump(shmop_open($hex_shm_id(), 'b', 0644, 1024));
+
+ // warning outputs: unable to attach or create shared memory segment
+ var_dump(shmop_open(null, 'a', 0644, 1024));
+
+ // warning outputs: Shared memory segment size must be greater than zero
+ var_dump(shmop_open($hex_shm_id(), "c", 0666, 0));
+
+ // warning outputs: unable to get shared memory segment information
+ var_dump(shmop_open($hex_shm_id(), 'n', 0, 1024));
+
+echo PHP_EOL, '## shmop_read function tests ##';
+ // warning outputs: 3 parameters expected
+ var_dump(shmop_read());
+
+ // warning outputs: start is out of range
+ $shm_id = shmop_open($hex_shm_id(), 'n', 0600, 1024);
+ var_dump(shmop_read($shm_id, -10, 0));
+
+ // warning outputs: count is out of range
+ $shm_id = shmop_open($hex_shm_id(), 'n', 0600, 1024);
+ var_dump(shmop_read($shm_id, 0, -10));
+
+echo PHP_EOL, '## shmop_write function tests ##';
+ // warning outputs: 3 parameters expected
+ var_dump(shmop_write());
+
+ // warning outputs: offset out of range
+ $shm_id = shmop_open($hex_shm_id(), 'n', 0600, 1024);
+ var_dump(shmop_write($shm_id, 'text to try write', -10));
+
+echo PHP_EOL, '## shmop_size function tests ##';
+ // warning outputs: 1 parameter expected
+ var_dump(shmop_size());
+
+echo PHP_EOL, '## shmop_delete function tests ##';
+ // warning outputs: 1 parameter expected
+ var_dump(shmop_delete());
+
+echo PHP_EOL, '## shmop_close function tests ##';
+ // warning outputs: 1 parameter expected
+ var_dump(shmop_close());
+?>
+--EXPECTF--
+## shmop_open function tests ##
+Warning: shmop_open() expects exactly 4 parameters, 0 given in %s on line %d
+NULL
+
+Warning: shmop_open(): is not a valid flag in %s on line %d
+bool(false)
+
+Warning: shmop_open(): invalid access mode in %s on line %d
+bool(false)
+
+Warning: shmop_open(): unable to attach or create shared memory segment 'Invalid argument' in %s on line %d
+bool(false)
+
+Warning: shmop_open(): Shared memory segment size must be greater than zero in %s on line %d
+bool(false)
+
+Warning: shmop_open(): unable to get shared memory segment information 'Permission denied' in %s on line %d
+bool(false)
+
+## shmop_read function tests ##
+Warning: shmop_read() expects exactly 3 parameters, 0 given in %s on line %d
+NULL
+
+Warning: shmop_read(): start is out of range in %s on line %d
+bool(false)
+
+Warning: shmop_read(): count is out of range in %s on line %d
+bool(false)
+
+## shmop_write function tests ##
+Warning: shmop_write() expects exactly 3 parameters, 0 given in %s on line %d
+NULL
+
+Warning: shmop_write(): offset out of range in %s on line %d
+bool(false)
+
+## shmop_size function tests ##
+Warning: shmop_size() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+## shmop_delete function tests ##
+Warning: shmop_delete() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+## shmop_close function tests ##
+Warning: shmop_close() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index a54362fe4b..d7da100d18 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -64,7 +64,7 @@ static void php_sxe_iterator_rewind(zend_object_iterator *iter);
/* {{{ _node_as_zval()
*/
-static void _node_as_zval(php_sxe_object *sxe, xmlNodePtr node, zval *value, SXE_ITER itertype, char *name, const char *nsprefix, int isprefix)
+static void _node_as_zval(php_sxe_object *sxe, xmlNodePtr node, zval *value, SXE_ITER itertype, char *name, const xmlChar *nsprefix, int isprefix)
{
php_sxe_object *subnode;
@@ -76,7 +76,7 @@ static void _node_as_zval(php_sxe_object *sxe, xmlNodePtr node, zval *value, SXE
subnode->iter.name = (xmlChar*)estrdup(name);
}
if (nsprefix && *nsprefix) {
- subnode->iter.nsprefix = (xmlChar*)estrdup(nsprefix);
+ subnode->iter.nsprefix = (xmlChar*)estrdup((char*)nsprefix);
subnode->iter.isprefix = isprefix;
}
@@ -975,7 +975,7 @@ static inline zend_string *sxe_xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr li
/* {{{ _get_base_node_value()
*/
-static void _get_base_node_value(php_sxe_object *sxe_ref, xmlNodePtr node, zval *value, char *nsprefix, int isprefix)
+static void _get_base_node_value(php_sxe_object *sxe_ref, xmlNodePtr node, zval *value, xmlChar *nsprefix, int isprefix)
{
php_sxe_object *subnode;
xmlChar *contents;
@@ -991,7 +991,7 @@ static void _get_base_node_value(php_sxe_object *sxe_ref, xmlNodePtr node, zval
subnode->document = sxe_ref->document;
subnode->document->refcount++;
if (nsprefix && *nsprefix) {
- subnode->iter.nsprefix = (xmlChar*)estrdup(nsprefix);
+ subnode->iter.nsprefix = (xmlChar*)estrdup((char *)nsprefix);
subnode->iter.isprefix = isprefix;
}
php_libxml_increment_node_ptr((php_libxml_node_object *)subnode, node, NULL);
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c
index 3b42a6bf06..60dd9dd3ae 100644
--- a/ext/soap/php_http.c
+++ b/ext/soap/php_http.c
@@ -507,6 +507,7 @@ try_again:
if (stream) {
php_stream_auto_cleanup(stream);
add_property_resource(this_ptr, "httpsocket", stream->res);
+ GC_REFCOUNT(stream->res)++;
add_property_long(this_ptr, "_use_proxy", use_proxy);
} else {
php_url_free(phpurl);
@@ -524,6 +525,7 @@ try_again:
zend_resource *ret = zend_register_resource(phpurl, le_url);
add_property_resource(this_ptr, "httpurl", ret);
+ GC_REFCOUNT(ret)++;
/*zend_list_addref(ret);*/
if (context &&
@@ -814,7 +816,7 @@ try_again:
smart_str_append_const(&soap_headers, "Cookie: ");
for (i = 0; i < n; i++) {
data = zend_hash_get_current_data(Z_ARRVAL_P(cookies));
- zend_hash_get_current_key_ex(Z_ARRVAL_P(cookies), &key, NULL, NULL);
+ zend_hash_get_current_key(Z_ARRVAL_P(cookies), &key, NULL);
if (Z_TYPE_P(data) == IS_ARRAY) {
zval *value;
diff --git a/ext/sockets/conversions.c b/ext/sockets/conversions.c
index c8acaf6995..f2621f65d0 100644
--- a/ext/sockets/conversions.c
+++ b/ext/sockets/conversions.c
@@ -1446,8 +1446,8 @@ void *from_zval_run_conversions(const zval *container,
zend_llist **allocations /* out */,
struct err_s *err /* in/out */)
{
- ser_context ctx = {{0}};
- char *structure = NULL;
+ ser_context ctx;
+ char *structure;
*allocations = NULL;
@@ -1455,6 +1455,7 @@ void *from_zval_run_conversions(const zval *container,
return NULL;
}
+ memset(&ctx, 0, sizeof(ctx));
zend_hash_init(&ctx.params, 8, NULL, NULL, 0);
zend_llist_init(&ctx.keys, sizeof(const char *), NULL, 0);
zend_llist_init(&ctx.allocations, sizeof(void *), &free_from_zval_allocation, 0);
@@ -1488,13 +1489,14 @@ zval *to_zval_run_conversions(const char *structure,
const struct key_value *key_value_pairs,
struct err_s *err, zval *zv)
{
- res_context ctx = {{0}, {0}};
+ res_context ctx;
const struct key_value *kv;
if (err->has_error) {
return NULL;
}
+ memset(&ctx, 0, sizeof(ctx));
zend_llist_init(&ctx.keys, sizeof(const char *), NULL, 0);
zend_llist_add_element(&ctx.keys, &top_name);
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index bf23c644c9..eaaf609501 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -940,7 +940,6 @@ SPL_METHOD(SplFileInfo, getExtension)
p = zend_memrchr(ZSTR_VAL(ret), '.', ZSTR_LEN(ret));
if (p) {
- assert(p > ZSTR_VAL(ret));
idx = (int)(p - ZSTR_VAL(ret));
RETVAL_STRINGL(ZSTR_VAL(ret) + idx + 1, ZSTR_LEN(ret) - idx - 1);
zend_string_release(ret);
diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c
index 5ad1c5d12f..6a9e27a601 100644
--- a/ext/spl/spl_observer.c
+++ b/ext/spl/spl_observer.c
@@ -1182,7 +1182,7 @@ static void spl_multiple_iterator_get_all(spl_SplObjectStorage *intern, int get_
add_index_zval(return_value, Z_LVAL(element->inf), &retval);
break;
case IS_STRING:
- zend_hash_update(Z_ARRVAL_P(return_value), Z_STR(element->inf), &retval);
+ zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR(element->inf), &retval);
break;
default:
zval_ptr_dtor(&retval);
diff --git a/ext/spl/tests/bug70053.phpt b/ext/spl/tests/bug70053.phpt
new file mode 100644
index 0000000000..2cab083c37
--- /dev/null
+++ b/ext/spl/tests/bug70053.phpt
@@ -0,0 +1,21 @@
+--TEST--
+SPL: ArrayObject
+--FILE--
+<?php
+
+echo "-- Two empty iterators attached with infos that are different but same array key --\n";
+$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);
+$mit ->attachIterator(new EmptyIterator(), "2");
+$mit ->attachIterator(new EmptyIterator(), 2);
+var_dump($mit->countIterators());
+$mit->rewind();
+var_dump($mit->current());
+
+?>
+--EXPECT--
+-- Two empty iterators attached with infos that are different but same array key --
+int(2)
+array(1) {
+ [2]=>
+ NULL
+}
diff --git a/ext/spl/tests/spl_fileinfo_getextension_leadingdot.phpt b/ext/spl/tests/spl_fileinfo_getextension_leadingdot.phpt
new file mode 100644
index 0000000000..7b2be18900
--- /dev/null
+++ b/ext/spl/tests/spl_fileinfo_getextension_leadingdot.phpt
@@ -0,0 +1,13 @@
+--TEST--
+SPL: Spl File Info test getExtension with leading dot
+--FILE--
+<?php
+$file = __DIR__ . '/.test';
+touch($file);
+$fileInfo = new SplFileInfo($file);
+
+var_dump($fileInfo->getExtension());
+unlink($file);
+?>
+--EXPECT--
+string(4) "test"
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 696ad05ff6..7ef9d73fad 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -615,13 +615,11 @@ static int php_array_user_compare(const void *a, const void *b) /* {{{ */
BG(user_compare_fci) = old_user_compare_fci; \
BG(user_compare_fci_cache) = old_user_compare_fci_cache; \
-/* {{{ proto bool usort(array array_arg, string cmp_function)
- Sort an array by values using a user-defined comparison function */
-PHP_FUNCTION(usort)
+static void php_usort(INTERNAL_FUNCTION_PARAMETERS, compare_func_t compare_func, zend_bool renumber) /* {{{ */
{
zval *array;
zend_refcounted *arr;
- unsigned int refcount;
+ zend_bool retval;
PHP_ARRAY_CMP_FUNC_VARS;
PHP_ARRAY_CMP_FUNC_BACKUP();
@@ -633,30 +631,35 @@ PHP_FUNCTION(usort)
/* Increase reference counter, so the attempts to modify the array in user
* comparison function will create a copy of array and won't affect the
- * original array. The fact of modification is detected using refcount
- * comparison. The result of sorting in such case is undefined and the
- * function returns FALSE.
+ * original array. The fact of modification is detected by comparing the
+ * zend_array pointer. The result of sorting in such case is undefined and
+ * the function returns FALSE.
*/
Z_ADDREF_P(array);
- refcount = Z_REFCOUNT_P(array);
arr = Z_COUNTED_P(array);
- if (zend_hash_sort(Z_ARRVAL_P(array), php_array_user_compare, 1) == FAILURE) {
- RETVAL_FALSE;
- } else {
- if (refcount > Z_REFCOUNT_P(array)) {
- php_error_docref(NULL, E_WARNING, "Array was modified by the user comparison function");
- if (--GC_REFCOUNT(arr) <= 0) {
- _zval_dtor_func(arr ZEND_FILE_LINE_CC);
- }
- RETVAL_FALSE;
- } else {
- Z_DELREF_P(array);
- RETVAL_TRUE;
+ retval = zend_hash_sort(Z_ARRVAL_P(array), compare_func, renumber) != FAILURE;
+
+ if (arr != Z_COUNTED_P(array)) {
+ php_error_docref(NULL, E_WARNING, "Array was modified by the user comparison function");
+ if (--GC_REFCOUNT(arr) <= 0) {
+ _zval_dtor_func(arr ZEND_FILE_LINE_CC);
}
+ retval = 0;
+ } else {
+ Z_DELREF_P(array);
}
PHP_ARRAY_CMP_FUNC_RESTORE();
+ RETURN_BOOL(retval);
+}
+/* }}} */
+
+/* {{{ proto bool usort(array array_arg, string cmp_function)
+ Sort an array by values using a user-defined comparison function */
+PHP_FUNCTION(usort)
+{
+ php_usort(INTERNAL_FUNCTION_PARAM_PASSTHRU, php_array_user_compare, 1);
}
/* }}} */
@@ -664,44 +667,7 @@ PHP_FUNCTION(usort)
Sort an array with a user-defined comparison function and maintain index association */
PHP_FUNCTION(uasort)
{
- zval *array;
- zend_refcounted *arr;
- unsigned int refcount;
- PHP_ARRAY_CMP_FUNC_VARS;
-
- PHP_ARRAY_CMP_FUNC_BACKUP();
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "a/f", &array, &BG(user_compare_fci), &BG(user_compare_fci_cache)) == FAILURE) {
- PHP_ARRAY_CMP_FUNC_RESTORE();
- return;
- }
-
- /* Increase reference counter, so the attempts to modify the array in user
- * comparison function will create a copy of array and won't affect the
- * original array. The fact of modification is detected using refcount
- * comparison. The result of sorting in such case is undefined and the
- * function returns FALSE.
- */
- Z_ADDREF_P(array);
- refcount = Z_REFCOUNT_P(array);
- arr = Z_COUNTED_P(array);
-
- if (zend_hash_sort(Z_ARRVAL_P(array), php_array_user_compare, 0) == FAILURE) {
- RETVAL_FALSE;
- } else {
- if (refcount > Z_REFCOUNT_P(array)) {
- php_error_docref(NULL, E_WARNING, "Array was modified by the user comparison function");
- if (--GC_REFCOUNT(arr) <= 0) {
- _zval_dtor_func(arr ZEND_FILE_LINE_CC);
- }
- RETVAL_FALSE;
- } else {
- Z_DELREF_P(array);
- RETVAL_TRUE;
- }
- }
-
- PHP_ARRAY_CMP_FUNC_RESTORE();
+ php_usort(INTERNAL_FUNCTION_PARAM_PASSTHRU, php_array_user_compare, 0);
}
/* }}} */
@@ -752,44 +718,7 @@ static int php_array_user_key_compare(const void *a, const void *b) /* {{{ */
Sort an array by keys using a user-defined comparison function */
PHP_FUNCTION(uksort)
{
- zval *array;
- zend_refcounted *arr;
- unsigned int refcount;
- PHP_ARRAY_CMP_FUNC_VARS;
-
- PHP_ARRAY_CMP_FUNC_BACKUP();
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "a/f", &array, &BG(user_compare_fci), &BG(user_compare_fci_cache)) == FAILURE) {
- PHP_ARRAY_CMP_FUNC_RESTORE();
- return;
- }
-
- /* Increase reference counter, so the attempts to modify the array in user
- * comparison function will create a copy of array and won't affect the
- * original array. The fact of modification is detected using refcount
- * comparison. The result of sorting in such case is undefined and the
- * function returns FALSE.
- */
- Z_ADDREF_P(array);
- refcount = Z_REFCOUNT_P(array);
- arr = Z_COUNTED_P(array);
-
- if (zend_hash_sort(Z_ARRVAL_P(array), php_array_user_key_compare, 0) == FAILURE) {
- RETVAL_FALSE;
- } else {
- if (refcount > Z_REFCOUNT_P(array)) {
- php_error_docref(NULL, E_WARNING, "Array was modified by the user comparison function");
- if (--GC_REFCOUNT(arr) <= 0) {
- _zval_dtor_func(arr ZEND_FILE_LINE_CC);
- }
- RETVAL_FALSE;
- } else {
- Z_DELREF_P(array);
- RETVAL_TRUE;
- }
- }
-
- PHP_ARRAY_CMP_FUNC_RESTORE();
+ php_usort(INTERNAL_FUNCTION_PARAM_PASSTHRU, php_array_user_key_compare, 0);
}
/* }}} */
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 1d5e1dd7b2..488b71b900 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -2653,8 +2653,9 @@ ZEND_BEGIN_ARG_INFO(arginfo_serialize, 0)
ZEND_ARG_INFO(0, var)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO(arginfo_unserialize, 0)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_unserialize, 0, 0, 1)
ZEND_ARG_INFO(0, variable_representation)
+ ZEND_ARG_INFO(0, allowed_classes)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_memory_get_usage, 0, 0, 0)
diff --git a/ext/standard/crypt_freesec.c b/ext/standard/crypt_freesec.c
index b7de5a4c02..0a54e3e836 100644
--- a/ext/standard/crypt_freesec.c
+++ b/ext/standard/crypt_freesec.c
@@ -218,7 +218,6 @@ _crypt_extended_init(void)
uint32_t *p, *il, *ir, *fl, *fr;
uint32_t *bits28, *bits24;
u_char inv_key_perm[64];
- u_char u_key_perm[56];
u_char inv_comp_perm[56];
u_char init_perm[64], final_perm[64];
u_char u_sbox[8][64];
@@ -260,7 +259,6 @@ _crypt_extended_init(void)
* compression permutation.
*/
for (i = 0; i < 56; i++) {
- u_key_perm[i] = key_perm[i] - 1;
inv_key_perm[key_perm[i] - 1] = i;
inv_comp_perm[i] = 255;
}
@@ -633,7 +631,7 @@ _crypt_extended_r(const char *key, const char *setting,
if (*key)
key++;
}
- if (des_setkey((u_char *) keybuf, data))
+ if (des_setkey((char *) keybuf, data))
return(NULL);
if (*setting == _PASSWORD_EFMT1) {
@@ -662,7 +660,7 @@ _crypt_extended_r(const char *key, const char *setting,
/*
* Encrypt the key with itself.
*/
- if (des_cipher((u_char *) keybuf, (u_char *) keybuf,
+ if (des_cipher((char *) keybuf, (char *) keybuf,
0, 1, data))
return(NULL);
/*
@@ -672,7 +670,7 @@ _crypt_extended_r(const char *key, const char *setting,
while (q - (u_char *) keybuf < sizeof(keybuf) && *key)
*q++ ^= *key++ << 1;
- if (des_setkey((u_char *) keybuf, data))
+ if (des_setkey((char *) keybuf, data))
return(NULL);
}
memcpy(data->output, setting, 9);
diff --git a/ext/standard/css.c b/ext/standard/css.c
index b805915b5e..73771ed79f 100644
--- a/ext/standard/css.c
+++ b/ext/standard/css.c
@@ -37,7 +37,7 @@ PHPAPI void php_info_print_css(void) /* {{{ */
PUTS(".p {text-align: left;}\n");
PUTS(".e {background-color: #ccf; width: 300px; font-weight: bold;}\n");
PUTS(".h {background-color: #99c; font-weight: bold;}\n");
- PUTS(".v {background-color: #ddd; max-width: 300px; overflow-x: auto;}\n");
+ PUTS(".v {background-color: #ddd; max-width: 300px; overflow-x: auto; word-wrap: break-word;}\n");
PUTS(".v i {color: #999;}\n");
PUTS("img {float: right; border: 0;}\n");
PUTS("hr {width: 934px; background-color: #ccc; border: 0; height: 1px;}\n");
diff --git a/ext/standard/exec.c b/ext/standard/exec.c
index 55d777cb92..8dd0d5dfd7 100644
--- a/ext/standard/exec.c
+++ b/ext/standard/exec.c
@@ -116,7 +116,7 @@ PHPAPI int php_exec(int type, char *cmd, zval *array, zval *return_value)
} else if (type == 2) {
/* strip trailing whitespaces */
l = bufl;
- while (l >= 1 && l-- && isspace(((unsigned char *)buf)[l]));
+ while (l-- > 0 && isspace(((unsigned char *)buf)[l]));
if (l != (bufl - 1)) {
bufl = l + 1;
buf[bufl] = '\0';
@@ -129,7 +129,7 @@ PHPAPI int php_exec(int type, char *cmd, zval *array, zval *return_value)
/* strip trailing whitespaces if we have not done so already */
if ((type == 2 && buf != b) || type != 2) {
l = bufl;
- while (l >= 1 && l-- && isspace(((unsigned char *)buf)[l]));
+ while (l-- > 0 && isspace(((unsigned char *)buf)[l]));
if (l != (bufl - 1)) {
bufl = l + 1;
buf[bufl] = '\0';
diff --git a/ext/standard/image.c b/ext/standard/image.c
index 0ea3abace2..edb0d50ea3 100644
--- a/ext/standard/image.c
+++ b/ext/standard/image.c
@@ -204,7 +204,7 @@ static struct gfxinfo *php_handle_swc(php_stream * stream)
unsigned long len=64, szlength;
int factor = 1,maxfactor = 16;
int status = 0;
- char *b, *buf = NULL;
+ unsigned char *b, *buf = NULL;
zend_string *bufz;
b = ecalloc(1, len + 1);
@@ -212,7 +212,7 @@ static struct gfxinfo *php_handle_swc(php_stream * stream)
if (php_stream_seek(stream, 5, SEEK_CUR))
return NULL;
- if (php_stream_read(stream, a, sizeof(a)) != sizeof(a))
+ if (php_stream_read(stream, (char *) a, sizeof(a)) != sizeof(a))
return NULL;
if (uncompress(b, &len, a, sizeof(a)) != Z_OK) {
@@ -232,8 +232,8 @@ static struct gfxinfo *php_handle_swc(php_stream * stream)
do {
szlength = ZSTR_LEN(bufz) * (1<<factor++);
- buf = (char *) erealloc(buf, szlength);
- status = uncompress(buf, &szlength, ZSTR_VAL(bufz), ZSTR_LEN(bufz));
+ buf = erealloc(buf, szlength);
+ status = uncompress(buf, &szlength, (unsigned char *) ZSTR_VAL(bufz), ZSTR_LEN(bufz));
} while ((status==Z_BUF_ERROR)&&(factor<maxfactor));
if (bufz) {
diff --git a/ext/standard/iptc.c b/ext/standard/iptc.c
index 4554be32db..c47f2c2133 100644
--- a/ext/standard/iptc.c
+++ b/ext/standard/iptc.c
@@ -238,6 +238,7 @@ PHP_FUNCTION(iptcembed)
case M_APP13:
/* we are going to write a new APP13 marker, so don't output the old one */
php_iptc_skip_variable(fp, 0, 0);
+ fgetc(fp); /* skip already copied 0xFF byte */
php_iptc_read_remaining(fp, spool, poi?&poi:0);
done = 1;
break;
diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h
index 8390bd79fe..6f10e9a313 100644
--- a/ext/standard/php_string.h
+++ b/ext/standard/php_string.h
@@ -161,7 +161,7 @@ PHPAPI char *php_strerror(int errnum);
# define php_mb_reset() memset(&BG(mblen_state), 0, sizeof(BG(mblen_state)))
#else
# define php_mblen(ptr, len) mblen(ptr, len)
-# define php_mb_reset() mblen(NULL, 0)
+# define php_mb_reset() php_ignore_value(mblen(NULL, 0))
#endif
void register_string_constants(INIT_FUNC_ARGS);
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 4d5c72404f..bb482ba7a1 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -2966,15 +2966,6 @@ static zend_string *php_strtr_ex(zend_string *str, char *str_from, char *str_to,
}
/* }}} */
-static int php_strtr_key_compare(const void *a, const void *b) /* {{{ */
-{
- Bucket *f = (Bucket *) a;
- Bucket *s = (Bucket *) b;
-
- return f->h > s->h ? -1 : 1;
-}
-/* }}} */
-
/* {{{ php_strtr_array */
static void php_strtr_array(zval *return_value, zend_string *input, HashTable *pats)
{
diff --git a/ext/standard/tests/general_functions/bug70018-win32.phpt b/ext/standard/tests/general_functions/bug70018-win32.phpt
new file mode 100644
index 0000000000..427d816e4a
--- /dev/null
+++ b/ext/standard/tests/general_functions/bug70018-win32.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #70018 (exec does not strip all whitespace), var 2
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != "WIN") {
+ die("skip.. only for Windows");
+}
+if ("cli" != php_sapi_name()) {
+ die("skip.. CLI only test");
+}
+?>
+--FILE--
+<?php
+$output = array();
+
+$test_fl = dirname(__FILE__) . DIRECTORY_SEPARATOR . md5(uniqid());
+file_put_contents($test_fl, '<?php echo "abc\f\n \n";');
+
+exec(PHP_BINARY . " -n $test_fl", $output);
+
+var_dump($output);
+
+@unlink($test_fl);
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ string(3) "abc"
+ [1]=>
+ string(0) ""
+}
diff --git a/ext/standard/tests/general_functions/bug70018.phpt b/ext/standard/tests/general_functions/bug70018.phpt
new file mode 100644
index 0000000000..8685006092
--- /dev/null
+++ b/ext/standard/tests/general_functions/bug70018.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Bug #70018 (exec does not strip all whitespace), var 1
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == "WIN") {
+ die("skip.. not for Windows");
+}
+?>
+--FILE--
+<?php
+$output = array();
+exec('/bin/echo -n -e "abc\f\n \n"',$output);
+var_dump($output);
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ string(3) "abc"
+ [1]=>
+ string(0) ""
+}
diff --git a/ext/standard/tests/image/bug70096.phpt b/ext/standard/tests/image/bug70096.phpt
new file mode 100644
index 0000000000..1674d07a73
--- /dev/null
+++ b/ext/standard/tests/image/bug70096.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #70096 (Repeated iptcembed() adds superfluous FF bytes)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$filename = __DIR__ . '/bug70096.jpg';
+$im = imagecreatetruecolor(10, 10);
+imagejpeg($im, $filename);
+imagedestroy($im);
+$data = "\x1C\x02x\x00\x0ATest image"
+ . "\x1C\x02t\x00\x22Copyright 2008-2009, The PHP Group";
+$content1 = iptcembed($data, $filename);
+$fp = fopen($filename, "wb");
+fwrite($fp, $content1);
+fclose($fp);
+$content2 = iptcembed($data, $filename);
+$fp = fopen($filename, "wb");
+fwrite($fp, $content2);
+fclose($fp);
+var_dump($content1 === $content2);
+?>
+--CLEAN--
+<?php
+$filename = __DIR__ . '/bug70096.jpg';
+@unlink($filename);
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/network/getprotobyname_basic.phpt b/ext/standard/tests/network/getprotobyname_basic.phpt
new file mode 100644
index 0000000000..37cc26aa2b
--- /dev/null
+++ b/ext/standard/tests/network/getprotobyname_basic.phpt
@@ -0,0 +1,10 @@
+--TEST--
+getprotobyname function basic test
+--CREDITS--
+edgarsandi - <edgar.r.sandi@gmail.com>
+--FILE--
+<?php
+ var_dump(getprotobyname('tcp'));
+?>
+--EXPECT--
+int(6)
diff --git a/ext/standard/tests/network/getprotobyname_error.phpt b/ext/standard/tests/network/getprotobyname_error.phpt
new file mode 100644
index 0000000000..7ee366ac7a
--- /dev/null
+++ b/ext/standard/tests/network/getprotobyname_error.phpt
@@ -0,0 +1,16 @@
+--TEST--
+getprotobyname function errors test
+--CREDITS--
+edgarsandi - <edgar.r.sandi@gmail.com>
+--FILE--
+<?php
+ // empty protocol name
+ var_dump(getprotobyname());
+
+ // invalid protocol name
+ var_dump(getprotobyname('abc'));
+?>
+--EXPECTF--
+Warning: getprotobyname() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+bool(false)
diff --git a/ext/standard/tests/network/getprotobynumber_basic.phpt b/ext/standard/tests/network/getprotobynumber_basic.phpt
new file mode 100644
index 0000000000..7850e60ffd
--- /dev/null
+++ b/ext/standard/tests/network/getprotobynumber_basic.phpt
@@ -0,0 +1,10 @@
+--TEST--
+getprotobynumber function basic test
+--CREDITS--
+edgarsandi - <edgar.r.sandi@gmail.com>
+--FILE--
+<?php
+ var_dump(getprotobynumber(6));
+?>
+--EXPECT--
+string(3) "tcp"
diff --git a/ext/standard/tests/network/getprotobynumber_error.phpt b/ext/standard/tests/network/getprotobynumber_error.phpt
new file mode 100644
index 0000000000..7df12e864a
--- /dev/null
+++ b/ext/standard/tests/network/getprotobynumber_error.phpt
@@ -0,0 +1,16 @@
+--TEST--
+getprotobynumber function errors test
+--CREDITS--
+edgarsandi - <edgar.r.sandi@gmail.com>
+--FILE--
+<?php
+ // empty protocol number
+ var_dump(getprotobynumber());
+
+ // invalid protocol number
+ var_dump(getprotobynumber(999));
+?>
+--EXPECTF--
+Warning: getprotobynumber() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+bool(false)
diff --git a/ext/standard/tests/strings/basename_variation.phpt b/ext/standard/tests/strings/basename_variation.phpt
index 2d74a389ab..86b1cd296b 100644
--- a/ext/standard/tests/strings/basename_variation.phpt
+++ b/ext/standard/tests/strings/basename_variation.phpt
@@ -66,7 +66,10 @@ $file_path_variations = array (
/* empty paths */
array(""),
array(''),
- array(NULL)
+ array(NULL),
+
+ /* invalid paths */
+ array(chr(-1)),
);
function check_basename( $path_arrays ) {
@@ -232,4 +235,7 @@ string(0) ""
--Iteration 48--
string(0) ""
+
+--Iteration 49--
+string(0) ""
Done
diff --git a/ext/standard/var.c b/ext/standard/var.c
index 055110382b..b1f368f0c3 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -994,7 +994,7 @@ PHP_FUNCTION(serialize)
}
/* }}} */
-/* {{{ proto mixed unserialize(string variable_representation[, bool|array allowed_classes])
+/* {{{ proto mixed unserialize(string variable_representation[, array allowed_classes])
Takes a string representation of variable and recreates it */
PHP_FUNCTION(unserialize)
{
diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c
index edd0bcf85e..f570da6d50 100644
--- a/ext/tidy/tidy.c
+++ b/ext/tidy/tidy.c
@@ -991,10 +991,9 @@ static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetyp
static int _php_tidy_apply_config_array(TidyDoc doc, HashTable *ht_options)
{
zval *opt_val;
- zend_ulong opt_indx;
zend_string *opt_name;
- ZEND_HASH_FOREACH_KEY_VAL(ht_options, opt_indx, opt_name, opt_val) {
+ ZEND_HASH_FOREACH_STR_KEY_VAL(ht_options, opt_name, opt_val) {
if (opt_name == NULL) {
continue;
}
diff --git a/ext/tokenizer/tests/parse_errors.phpt b/ext/tokenizer/tests/parse_errors.phpt
index bfa6e07ac4..700326ff41 100644
--- a/ext/tokenizer/tests/parse_errors.phpt
+++ b/ext/tokenizer/tests/parse_errors.phpt
@@ -7,10 +7,19 @@ Parse errors during token_get_all()
function test_parse_error($code) {
try {
- var_dump(token_get_all($code));
+ var_dump(token_get_all($code, TOKEN_PARSE));
} catch (ParseError $e) {
echo $e->getMessage(), "\n";
}
+
+ foreach (token_get_all($code) as $token) {
+ if (is_array($token)) {
+ echo token_name($token[0]), " ($token[1])\n";
+ } else {
+ echo "$token\n";
+ }
+ }
+ echo "\n";
}
test_parse_error('<?php var_dump(078);');
@@ -21,6 +30,37 @@ test_parse_error('<?php var_dump(078 + 078);');
?>
--EXPECT--
Invalid numeric literal
+T_OPEN_TAG (<?php )
+T_STRING (var_dump)
+(
+T_LNUMBER (078)
+)
+;
+
Invalid UTF-8 codepoint escape sequence
+T_OPEN_TAG (<?php )
+T_STRING (var_dump)
+(
+T_CONSTANT_ENCAPSED_STRING ("\u{xyz}")
+)
+;
+
Invalid UTF-8 codepoint escape sequence: Codepoint too large
+T_OPEN_TAG (<?php )
+T_STRING (var_dump)
+(
+T_CONSTANT_ENCAPSED_STRING ("\u{ffffff}")
+)
+;
+
Invalid numeric literal
+T_OPEN_TAG (<?php )
+T_STRING (var_dump)
+(
+T_LNUMBER (078)
+T_WHITESPACE ( )
++
+T_WHITESPACE ( )
+T_LNUMBER (078)
+)
+;
diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c
index 63405ea6cd..50b47835dd 100644
--- a/ext/tokenizer/tokenizer.c
+++ b/ext/tokenizer/tokenizer.c
@@ -28,6 +28,7 @@
#include "php_tokenizer.h"
#include "zend.h"
+#include "zend_exceptions.h"
#include "zend_language_scanner.h"
#include "zend_language_scanner_defs.h"
#include <zend_language_parser.h>
@@ -46,6 +47,7 @@ void tokenizer_token_get_all_register_constants(INIT_FUNC_ARGS) {
/* {{{ arginfo */
ZEND_BEGIN_ARG_INFO_EX(arginfo_token_get_all, 0, 0, 1)
ZEND_ARG_INFO(0, source)
+ ZEND_ARG_INFO(0, flags)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_token_name, 0, 0, 1)
@@ -111,7 +113,6 @@ static zend_bool tokenize(zval *return_value, zend_string *source)
zval token;
zval keyword;
int token_type;
- zend_bool destroy;
int token_line = 1;
int need_tokens = -1; /* for __halt_compiler lexing. -1 = disabled */
@@ -126,24 +127,10 @@ static zend_bool tokenize(zval *return_value, zend_string *source)
LANG_SCNG(yy_state) = yycINITIAL;
array_init(return_value);
- ZVAL_NULL(&token);
+ ZVAL_UNDEF(&token);
while ((token_type = lex_scan(&token))) {
-
- if(token_type == T_ERROR) break;
-
- destroy = 1;
- switch (token_type) {
- case T_CLOSE_TAG:
- if (zendtext[zendleng - 1] != '>') {
- CG(zend_lineno)++;
- }
- case T_OPEN_TAG:
- case T_OPEN_TAG_WITH_ECHO:
- case T_WHITESPACE:
- case T_COMMENT:
- case T_DOC_COMMENT:
- destroy = 0;
- break;
+ if (token_type == T_CLOSE_TAG && zendtext[zendleng - 1] != '>') {
+ CG(zend_lineno)++;
}
if (token_type >= 256) {
@@ -161,10 +148,11 @@ static zend_bool tokenize(zval *return_value, zend_string *source)
} else {
add_next_index_stringl(return_value, (char *)zendtext, zendleng);
}
- if (destroy && Z_TYPE(token) != IS_NULL) {
+
+ if (Z_TYPE(token) != IS_UNDEF) {
zval_dtor(&token);
+ ZVAL_UNDEF(&token);
}
- ZVAL_NULL(&token);
/* after T_HALT_COMPILER collect the next three non-dropped tokens */
if (need_tokens != -1) {
@@ -203,9 +191,9 @@ void on_event(zend_php_scanner_event event, int token, int line)
HashTable *tokens_ht;
zval *token_zv;
- switch(event) {
+ switch (event) {
case ON_TOKEN:
- if (token == T_ERROR || token == END) break;
+ if (token == END) break;
if (token >= 256) {
array_init(&keyword);
add_next_index_long(&keyword, token);
@@ -277,7 +265,7 @@ static zend_bool tokenize_parse(zval *return_value, zend_string *source)
/* }}} */
-/* {{{ proto array token_get_all(string source)
+/* {{{ proto array token_get_all(string source [, int flags])
*/
PHP_FUNCTION(token_get_all)
{
@@ -293,6 +281,8 @@ PHP_FUNCTION(token_get_all)
success = tokenize_parse(return_value, source);
} else {
success = tokenize(return_value, source);
+ /* Normal token_get_all() should not throw. */
+ zend_clear_exception();
}
if (!success) RETURN_FALSE;
diff --git a/ext/tokenizer/tokenizer_data_gen.sh b/ext/tokenizer/tokenizer_data_gen.sh
index 49ef7cbfa3..65bf0de83b 100755
--- a/ext/tokenizer/tokenizer_data_gen.sh
+++ b/ext/tokenizer/tokenizer_data_gen.sh
@@ -46,7 +46,7 @@ echo '/*
echo 'void tokenizer_register_constants(INIT_FUNC_ARGS) {' >> $OUTFILE
$AWK '
- /^#define T_ERROR/ { next }
+ /^#define T_(NOELSE|ERROR)/ { next }
/^#define T_/ { print " REGISTER_LONG_CONSTANT(\"" $2 "\", " $2 ", CONST_CS | CONST_PERSISTENT);" }
' < $INFILE >> $OUTFILE
echo ' REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT);' >> $OUTFILE
@@ -64,7 +64,7 @@ $AWK '
print " case T_PAAMAYIM_NEKUDOTAYIM: return \"T_DOUBLE_COLON\";"
next
}
- /^#define T_ERROR/ { next }
+ /^#define T_(NOELSE|ERROR)/ { next }
/^#define T_/ {
print " case " $2 ": return \"" $2 "\";"
}
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
index d364115799..693ccef7b1 100644
--- a/ext/wddx/wddx.c
+++ b/ext/wddx/wddx.c
@@ -390,9 +390,8 @@ static void php_wddx_serialize_string(wddx_packet *packet, zval *var)
php_wddx_add_chunk_static(packet, WDDX_STRING_S);
if (Z_STRLEN_P(var) > 0) {
- zend_string *buf;
-
- buf = php_escape_html_entities(Z_STRVAL_P(var), Z_STRLEN_P(var), 0, ENT_QUOTES, NULL);
+ zend_string *buf = php_escape_html_entities(
+ (unsigned char *) Z_STRVAL_P(var), Z_STRLEN_P(var), 0, ENT_QUOTES, NULL);
php_wddx_add_chunk_ex(packet, ZSTR_VAL(buf), ZSTR_LEN(buf));
@@ -589,9 +588,7 @@ void php_wddx_serialize_var(wddx_packet *packet, zval *var, zend_string *name)
if (name) {
char *tmp_buf;
- zend_string *name_esc;
-
- name_esc = php_escape_html_entities(ZSTR_VAL(name), ZSTR_LEN(name), 0, ENT_QUOTES, NULL);
+ zend_string *name_esc = php_escape_html_entities((unsigned char *) ZSTR_VAL(name), ZSTR_LEN(name), 0, ENT_QUOTES, NULL);
tmp_buf = emalloc(ZSTR_LEN(name_esc) + sizeof(WDDX_VAR_S));
snprintf(tmp_buf, ZSTR_LEN(name_esc) + sizeof(WDDX_VAR_S), WDDX_VAR_S, ZSTR_VAL(name_esc));
php_wddx_add_chunk(packet, tmp_buf);
@@ -736,7 +733,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
char tmp_buf[2];
snprintf(tmp_buf, sizeof(tmp_buf), "%c", (char)strtol((char *)atts[i], NULL, 16));
- php_wddx_process_data(user_data, tmp_buf, strlen(tmp_buf));
+ php_wddx_process_data(user_data, (XML_Char *) tmp_buf, strlen(tmp_buf));
break;
}
}
@@ -783,7 +780,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
if (atts) for (i = 0; atts[i]; i++) {
if (!strcmp((char *)atts[i], EL_NAME) && atts[++i] && atts[i][0]) {
- stack->varname = estrdup(atts[i]);
+ stack->varname = estrdup((char *)atts[i]);
break;
}
}
@@ -798,9 +795,9 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
if (!strcmp((char *)atts[i], "fieldNames") && atts[++i] && atts[i][0]) {
zval tmp;
char *key;
- char *p1, *p2, *endp;
+ const char *p1, *p2, *endp;
- endp = (char *)atts[i] + strlen(atts[i]);
+ endp = (char *)atts[i] + strlen((char *)atts[i]);
p1 = (char *)atts[i];
while ((p2 = php_memnstr(p1, ",", sizeof(",")-1, endp)) != NULL) {
key = estrndup(p1, p2 - p1);
@@ -835,7 +832,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
if (wddx_stack_top(stack, (void**)&recordset) == SUCCESS &&
recordset->type == ST_RECORDSET &&
- (field = zend_hash_str_find(Z_ARRVAL(recordset->data), (char*)atts[i], strlen(atts[i]))) != NULL) {
+ (field = zend_hash_str_find(Z_ARRVAL(recordset->data), (char*)atts[i], strlen((char *)atts[i]))) != NULL) {
ZVAL_COPY_VALUE(&ent.data, field);
}
@@ -877,9 +874,8 @@ static void php_wddx_pop_element(void *user_data, const XML_Char *name)
wddx_stack_top(stack, (void**)&ent1);
if (!strcmp((char *)name, EL_BINARY)) {
- zend_string *new_str;
-
- new_str = php_base64_decode(Z_STRVAL(ent1->data), Z_STRLEN(ent1->data));
+ zend_string *new_str = php_base64_decode(
+ (unsigned char *)Z_STRVAL(ent1->data), Z_STRLEN(ent1->data));
zval_ptr_dtor(&ent1->data);
ZVAL_STR(&ent1->data, new_str);
}
@@ -1045,14 +1041,14 @@ int php_wddx_deserialize_ex(const char *value, size_t vallen, zval *return_value
int retval;
wddx_stack_init(&stack);
- parser = XML_ParserCreate("UTF-8");
+ parser = XML_ParserCreate((XML_Char *) "UTF-8");
XML_SetUserData(parser, &stack);
XML_SetElementHandler(parser, php_wddx_push_element, php_wddx_pop_element);
XML_SetCharacterDataHandler(parser, php_wddx_process_data);
/* XXX value should be parsed in the loop to exhaust size_t */
- XML_Parse(parser, value, (int)vallen, 1);
+ XML_Parse(parser, (const XML_Char *) value, (int)vallen, 1);
XML_ParserFree(parser);
@@ -1204,7 +1200,7 @@ PHP_FUNCTION(wddx_packet_end)
}
/* }}} */
-/* {{{ proto int wddx_add_vars(resource packet_id, mixed var_names [, mixed ...])
+/* {{{ proto bool wddx_add_vars(resource packet_id, mixed var_names [, mixed ...])
Serializes given variables and adds them to packet given by packet_id */
PHP_FUNCTION(wddx_add_vars)
{
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c
index f5a8fa8e33..51102fbc34 100644
--- a/ext/xsl/xsltprocessor.c
+++ b/ext/xsl/xsltprocessor.c
@@ -266,7 +266,7 @@ static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int t
if (node->children) {
node = xmlNewDocNode(node->doc, NULL, (char *) node->children, node->name);
} else {
- node = xmlNewDocNode(node->doc, NULL, "xmlns", node->name);
+ node = xmlNewDocNode(node->doc, NULL, (const xmlChar *) "xmlns", node->name);
}
node->type = XML_NAMESPACE_DECL;
node->parent = nsparent;
@@ -282,7 +282,7 @@ static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int t
}
break;
default:
- str = xmlXPathCastToString(obj);
+ str = (char *) xmlXPathCastToString(obj);
ZVAL_STRING(&args[i], str);
xmlFree(str);
}
@@ -302,7 +302,7 @@ static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int t
if (obj->stringval == NULL) {
php_error_docref(NULL, E_WARNING, "Handler name must be a string");
xmlXPathFreeObject(obj);
- valuePush(ctxt, xmlXPathNewString(""));
+ valuePush(ctxt, xmlXPathNewString((const xmlChar *) ""));
if (fci.param_count > 0) {
for (i = 0; i < nargs - 1; i++) {
zval_ptr_dtor(&args[i]);
@@ -311,7 +311,7 @@ static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int t
}
return;
}
- ZVAL_STRING(&handler, obj->stringval);
+ ZVAL_STRING(&handler, (char *) obj->stringval);
xmlXPathFreeObject(obj);
ZVAL_COPY_VALUE(&fci.function_name, &handler);
@@ -322,17 +322,17 @@ static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int t
/*fci.function_handler_cache = &function_ptr;*/
if (!zend_make_callable(&handler, &callable)) {
php_error_docref(NULL, E_WARNING, "Unable to call handler %s()", ZSTR_VAL(callable));
- valuePush(ctxt, xmlXPathNewString(""));
+ valuePush(ctxt, xmlXPathNewString((const xmlChar *) ""));
} else if ( intern->registerPhpFunctions == 2 && zend_hash_exists(intern->registered_phpfunctions, callable) == 0) {
php_error_docref(NULL, E_WARNING, "Not allowed to call handler '%s()'", ZSTR_VAL(callable));
/* Push an empty string, so that we at least have an xslt result... */
- valuePush(ctxt, xmlXPathNewString(""));
+ valuePush(ctxt, xmlXPathNewString((const xmlChar *) ""));
} else {
result = zend_call_function(&fci, NULL);
if (result == FAILURE) {
if (Z_TYPE(handler) == IS_STRING) {
php_error_docref(NULL, E_WARNING, "Unable to call handler %s()", Z_STRVAL(handler));
- valuePush(ctxt, xmlXPathNewString(""));
+ valuePush(ctxt, xmlXPathNewString((const xmlChar *) ""));
}
/* retval is == NULL, when an exception occurred, don't report anything, because PHP itself will handle that */
} else if (Z_ISUNDEF(retval)) {
@@ -353,10 +353,10 @@ static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int t
valuePush(ctxt, xmlXPathNewBoolean(Z_LVAL(retval)));
} else if (Z_TYPE(retval) == IS_OBJECT) {
php_error_docref(NULL, E_WARNING, "A PHP Object cannot be converted to a XPath-string");
- valuePush(ctxt, xmlXPathNewString(""));
+ valuePush(ctxt, xmlXPathNewString((const xmlChar *) ""));
} else {
convert_to_string_ex(&retval);
- valuePush(ctxt, xmlXPathNewString(Z_STRVAL(retval)));
+ valuePush(ctxt, xmlXPathNewString((xmlChar *) Z_STRVAL(retval)));
}
zval_ptr_dtor(&retval);
}
@@ -445,7 +445,7 @@ PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet)
nodep = xmlDocGetRootElement(sheetp->doc);
if (nodep && (nodep = nodep->children)) {
while (nodep) {
- if (nodep->type == XML_ELEMENT_NODE && xmlStrEqual(nodep->name, "key") && xmlStrEqual(nodep->ns->href, XSLT_NAMESPACE)) {
+ if (nodep->type == XML_ELEMENT_NODE && xmlStrEqual(nodep->name, (const xmlChar *) "key") && xmlStrEqual(nodep->ns->href, XSLT_NAMESPACE)) {
intern->hasKeys = 1;
break;
}
@@ -728,7 +728,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml)
if (newdocp) {
ret = xsltSaveResultToString(&doc_txt_ptr, &doc_txt_len, newdocp, sheetp);
if (doc_txt_ptr && doc_txt_len) {
- RETVAL_STRINGL(doc_txt_ptr, doc_txt_len);
+ RETVAL_STRINGL((char *) doc_txt_ptr, doc_txt_len);
xmlFree(doc_txt_ptr);
}
xmlFreeDoc(newdocp);
@@ -748,7 +748,6 @@ PHP_FUNCTION(xsl_xsltprocessor_set_parameter)
zval *id;
zval *array_value, *entry, new_string;
xsl_object *intern;
- zend_ulong idx;
char *namespace;
size_t namespace_len;
zend_string *string_key, *name, *value;
@@ -756,7 +755,7 @@ PHP_FUNCTION(xsl_xsltprocessor_set_parameter)
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "sa", &namespace, &namespace_len, &array_value) == SUCCESS) {
intern = Z_XSL_P(id);
- ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array_value), idx, string_key, entry) {
+ ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(array_value), string_key, entry) {
if (string_key == NULL) {
php_error_docref(NULL, E_WARNING, "Invalid parameter array");
RETURN_FALSE;
diff --git a/ext/zlib/zlib_filter.c b/ext/zlib/zlib_filter.c
index c0705f8b31..b1e5a54300 100644
--- a/ext/zlib/zlib_filter.c
+++ b/ext/zlib/zlib_filter.c
@@ -26,9 +26,9 @@
/* Passed as opaque in malloc callbacks */
typedef struct _php_zlib_filter_data {
z_stream strm;
- char *inbuf;
+ unsigned char *inbuf;
size_t inbuf_len;
- char *outbuf;
+ unsigned char *outbuf;
size_t outbuf_len;
int persistent;
zend_bool finished;
@@ -112,7 +112,8 @@ static php_stream_filter_status_t php_zlib_inflate_filter(
if (data->strm.avail_out < data->outbuf_len) {
php_stream_bucket *out_bucket;
size_t bucketlen = data->outbuf_len - data->strm.avail_out;
- out_bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0);
+ out_bucket = php_stream_bucket_new(
+ stream, estrndup((char *) data->outbuf, bucketlen), bucketlen, 1, 0);
php_stream_bucket_append(buckets_out, out_bucket);
data->strm.avail_out = data->outbuf_len;
data->strm.next_out = data->outbuf;
@@ -136,7 +137,8 @@ static php_stream_filter_status_t php_zlib_inflate_filter(
if (data->strm.avail_out < data->outbuf_len) {
size_t bucketlen = data->outbuf_len - data->strm.avail_out;
- bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0);
+ bucket = php_stream_bucket_new(
+ stream, estrndup((char *) data->outbuf, bucketlen), bucketlen, 1, 0);
php_stream_bucket_append(buckets_out, bucket);
data->strm.avail_out = data->outbuf_len;
data->strm.next_out = data->outbuf;
@@ -226,7 +228,8 @@ static php_stream_filter_status_t php_zlib_deflate_filter(
php_stream_bucket *out_bucket;
size_t bucketlen = data->outbuf_len - data->strm.avail_out;
- out_bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0);
+ out_bucket = php_stream_bucket_new(
+ stream, estrndup((char *) data->outbuf, bucketlen), bucketlen, 1, 0);
php_stream_bucket_append(buckets_out, out_bucket);
data->strm.avail_out = data->outbuf_len;
data->strm.next_out = data->outbuf;
@@ -245,7 +248,8 @@ static php_stream_filter_status_t php_zlib_deflate_filter(
if (data->strm.avail_out < data->outbuf_len) {
size_t bucketlen = data->outbuf_len - data->strm.avail_out;
- bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0);
+ bucket = php_stream_bucket_new(
+ stream, estrndup((char *) data->outbuf, bucketlen), bucketlen, 1, 0);
php_stream_bucket_append(buckets_out, bucket);
data->strm.avail_out = data->outbuf_len;
data->strm.next_out = data->outbuf;
diff --git a/main/php.h b/main/php.h
index 1d2c2dc099..3ebaa1a0b9 100644
--- a/main/php.h
+++ b/main/php.h
@@ -257,11 +257,7 @@ END_EXTERN_C()
# endif
#endif
-#if defined(__GNUC__) && __GNUC__ >= 4
-# define php_ignore_value(x) (({ __typeof__ (x) __x = (x); (void) __x; }))
-#else
-# define php_ignore_value(x) ((void) (x))
-#endif
+#define php_ignore_value(x) ZEND_IGNORE_VALUE(x)
/* global variables */
#if !defined(PHP_WIN32)
diff --git a/main/spprintf.c b/main/spprintf.c
index 759372b370..4594fb7605 100644
--- a/main/spprintf.c
+++ b/main/spprintf.c
@@ -838,7 +838,6 @@ skip_output:
PHPAPI size_t vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap) /* {{{ */
{
smart_string buf = {0};
- size_t result;
/* since there are places where (v)spprintf called without checking for null,
a bit of defensive coding here */
@@ -855,13 +854,11 @@ PHPAPI size_t vspprintf(char **pbuf, size_t max_len, const char *format, va_list
if (buf.c) {
*pbuf = buf.c;
- result = buf.len;
+ return buf.len;
} else {
- *pbuf = NULL;
- result = 0;
+ *pbuf = estrndup("", 0);
+ return 0;
}
-
- return result;
}
/* }}} */
@@ -883,11 +880,15 @@ PHPAPI zend_string *vstrpprintf(size_t max_len, const char *format, va_list ap)
xbuf_format_converter(&buf, 0, format, ap);
- if (max_len && buf.s && ZSTR_LEN(buf.s) > max_len) {
+ if (!buf.s) {
+ return ZSTR_EMPTY_ALLOC();
+ }
+
+ if (max_len && ZSTR_LEN(buf.s) > max_len) {
ZSTR_LEN(buf.s) = max_len;
}
- smart_str_0(&buf);
+ smart_str_0(&buf);
return buf.s;
}
/* }}} */
diff --git a/php.ini-development b/php.ini-development
index 6b96d6b599..592a042732 100644
--- a/php.ini-development
+++ b/php.ini-development
@@ -886,7 +886,6 @@ default_socket_timeout = 60
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
-;extension=php_pspell.dll
;extension=php_shmop.dll
; The MIBS data available in the PHP distribution must be installed.
diff --git a/php.ini-production b/php.ini-production
index 2c23acb47d..9febdf8232 100644
--- a/php.ini-production
+++ b/php.ini-production
@@ -886,7 +886,6 @@ default_socket_timeout = 60
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
-;extension=php_pspell.dll
;extension=php_shmop.dll
; The MIBS data available in the PHP distribution must be installed.
diff --git a/run-tests.php b/run-tests.php
index 1251d3f96d..ba44ce5464 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -141,6 +141,7 @@ if ((substr(PHP_OS, 0, 3) == "WIN") && empty($environment["SystemRoot"])) {
$php = null;
$php_cgi = null;
+$phpdbg = null;
if (getenv('TEST_PHP_EXECUTABLE')) {
$php = getenv('TEST_PHP_EXECUTABLE');
@@ -158,6 +159,16 @@ if (getenv('TEST_PHP_EXECUTABLE')) {
$php_cgi = null;
}
}
+
+ if (!getenv('TEST_PHPDBG_EXECUTABLE')) {
+ $phpdbg = $cwd . '/sapi/phpdbg/phpdbg';
+
+ if (file_exists($phpdbg)) {
+ putenv("TEST_PHP_CGI_EXECUTABLE=$phpdbg");
+ } else {
+ $phpdbg = null;
+ }
+ }
}
$environment['TEST_PHP_EXECUTABLE'] = $php;
}
@@ -173,6 +184,17 @@ if (getenv('TEST_PHP_CGI_EXECUTABLE')) {
$environment['TEST_PHP_CGI_EXECUTABLE'] = $php_cgi;
}
+if (getenv('TEST_PHPDBG_EXECUTABLE')) {
+ $phpdbg = getenv('TEST_PHPDBG_EXECUTABLE');
+
+ if ($phpdbg=='auto') {
+ $phpdbg = $cwd . '/sapi/phpdbg/phpdbg';
+ putenv("TEST_PHPDBG_EXECUTABLE=$phpdbg");
+ }
+
+ $environment['TEST_PHPDBG_EXECUTABLE'] = $phpdbg;
+}
+
function verify_config()
{
global $php;
@@ -247,7 +269,7 @@ $no_file_cache = '-d opcache.file_cache= -d opcache.file_cache_only=0';
function write_information($show_html)
{
- global $cwd, $php, $php_cgi, $php_info, $user_tests, $ini_overwrites, $pass_options, $exts_to_test, $leak_check, $valgrind_header, $no_file_cache;
+ global $cwd, $php, $php_cgi, $phpdbg, $php_info, $user_tests, $ini_overwrites, $pass_options, $exts_to_test, $leak_check, $valgrind_header, $no_file_cache;
// Get info from php
$info_file = __DIR__ . '/run-test-info.php';
@@ -274,6 +296,14 @@ More .INIs : " , (function_exists(\'php_ini_scanned_files\') ? str_replace("\n"
$php_cgi_info = '';
}
+ if ($phpdbg) {
+ $phpdbg_info = `$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 {
+ $phpdbg_info = '';
+ }
+
@unlink($info_file);
// load list of enabled extensions
@@ -299,7 +329,7 @@ More .INIs : " , (function_exists(\'php_ini_scanned_files\') ? str_replace("\n"
// Write test context information.
echo "
=====================================================================
-PHP : $php $php_info $php_cgi_info
+PHP : $php $php_info $php_cgi_info $phpdbg_info
CWD : $cwd
Extra dirs : ";
foreach ($user_tests as $test_dir) {
@@ -1205,6 +1235,10 @@ function run_test($php, $file, $env)
$php_cgi = $env['TEST_PHP_CGI_EXECUTABLE'];
}
+ if (isset($env['TEST_PHPDBG_EXECUTABLE'])) {
+ $phpdbg = $env['TEST_PHPDBG_EXECUTABLE'];
+ }
+
if (is_array($file)) {
$file = $file[0];
}
@@ -1290,7 +1324,7 @@ TEST $file
} else {
- if (@count($section_text['FILE']) + @count($section_text['FILEEOF']) + @count($section_text['FILE_EXTERNAL']) != 1) {
+ if (!isset($section_text['PHPDBG']) && @count($section_text['FILE']) + @count($section_text['FILEEOF']) + @count($section_text['FILE_EXTERNAL']) != 1) {
$bork_info = "missing section --FILE--";
$borked = true;
}
@@ -1372,6 +1406,38 @@ TEST $file
}
}
+ /* For phpdbg tests, check if phpdbg sapi is available and if it is, use it. */
+ if (array_key_exists('PHPDBG', $section_text)) {
+ if (!isset($section_text['STDIN'])) {
+ $section_text['STDIN'] = $section_text['PHPDBG']."\n";
+ }
+
+ if (isset($phpdbg)) {
+ $old_php = $php;
+ $php = $phpdbg . ' -qIb';
+ } else if (!strncasecmp(PHP_OS, "win", 3) && file_exists(dirname($php) . "/phpdbg.exe")) {
+ $old_php = $php;
+ $php = realpath(dirname($php) . "/phpdbg.exe") . ' -qIb ';
+ } else {
+ if (file_exists(dirname($php) . "/../../sapi/phpdbg/phpdbg")) {
+ $old_php = $php;
+ $php = realpath(dirname($php) . "/../../sapi/phpdbg/phpdbg") . ' -qIb ';
+ } else if (file_exists("./sapi/phpdbg/phpdbg")) {
+ $old_php = $php;
+ $php = realpath("./sapi/phpdbg/phpdbg") . ' -qIb ';
+ } else if (file_exists(dirname($php) . "/phpdbg")) {
+ $old_php = $php;
+ $php = realpath(dirname($php) . "/phpdbg") . ' -qIb ';
+ } else {
+ show_result('SKIP', $tested, $tested_file, "reason: phpdbg not available");
+
+ junit_init_suite(junit_get_suitename_for($shortname));
+ junit_mark_test_as('SKIP', $shortname, $tested, 0, 'phpdbg not available');
+ return 'SKIPPED';
+ }
+ }
+ }
+
if (!$SHOW_ONLY_GROUPS) {
show_test($test_idx, $shortname);
}
@@ -1652,8 +1718,12 @@ TEST $file
}
// We've satisfied the preconditions - run the test!
- show_file_block('php', $section_text['FILE'], 'TEST');
- save_text($test_file, $section_text['FILE'], $temp_file);
+ if (isset($section_text['FILE'])) {
+ show_file_block('php', $section_text['FILE'], 'TEST');
+ save_text($test_file, $section_text['FILE'], $temp_file);
+ } else {
+ $test_file = $temp_file = "";
+ }
if (array_key_exists('GET', $section_text)) {
$query_string = trim($section_text['GET']);
@@ -1741,7 +1811,7 @@ TEST $file
$env['REQUEST_METHOD'] = 'PUT';
if (empty($request)) {
- junit_mark_test_as('BORK', $shortname, $tested, null, 'empty $request');
+ junit_mark_test_as('BORK', $shortname, $tested, null, 'empty $request');
return 'BORKED';
}
@@ -1765,34 +1835,33 @@ TEST $file
$cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
- } else if (array_key_exists('GZIP_POST', $section_text) && !empty($section_text['GZIP_POST'])) {
-
- $post = trim($section_text['GZIP_POST']);
- $post = gzencode($post, 9, FORCE_GZIP);
- $env['HTTP_CONTENT_ENCODING'] = 'gzip';
+ } else if (array_key_exists('GZIP_POST', $section_text) && !empty($section_text['GZIP_POST'])) {
- save_text($tmp_post, $post);
- $content_length = strlen($post);
+ $post = trim($section_text['GZIP_POST']);
+ $post = gzencode($post, 9, FORCE_GZIP);
+ $env['HTTP_CONTENT_ENCODING'] = 'gzip';
- $env['REQUEST_METHOD'] = 'POST';
- $env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
- $env['CONTENT_LENGTH'] = $content_length;
+ save_text($tmp_post, $post);
+ $content_length = strlen($post);
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
+ $env['REQUEST_METHOD'] = 'POST';
+ $env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
+ $env['CONTENT_LENGTH'] = $content_length;
- } else if (array_key_exists('DEFLATE_POST', $section_text) && !empty($section_text['DEFLATE_POST'])) {
- $post = trim($section_text['DEFLATE_POST']);
- $post = gzcompress($post, 9);
- $env['HTTP_CONTENT_ENCODING'] = 'deflate';
- save_text($tmp_post, $post);
- $content_length = strlen($post);
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
- $env['REQUEST_METHOD'] = 'POST';
- $env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
- $env['CONTENT_LENGTH'] = $content_length;
+ } else if (array_key_exists('DEFLATE_POST', $section_text) && !empty($section_text['DEFLATE_POST'])) {
+ $post = trim($section_text['DEFLATE_POST']);
+ $post = gzcompress($post, 9);
+ $env['HTTP_CONTENT_ENCODING'] = 'deflate';
+ save_text($tmp_post, $post);
+ $content_length = strlen($post);
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
+ $env['REQUEST_METHOD'] = 'POST';
+ $env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
+ $env['CONTENT_LENGTH'] = $content_length;
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
} else {
diff --git a/sapi/phpdbg/config.m4 b/sapi/phpdbg/config.m4
index 87d38ea8c5..1e4714e77a 100644
--- a/sapi/phpdbg/config.m4
+++ b/sapi/phpdbg/config.m4
@@ -3,7 +3,7 @@ dnl $Id$
dnl
PHP_ARG_ENABLE(phpdbg, for phpdbg support,
-[ --enable-phpdbg Build phpdbg], no, no)
+[ --enable-phpdbg Build phpdbg], yes, yes)
PHP_ARG_ENABLE(phpdbg-webhelper, for phpdbg web SAPI support,
[ --enable-phpdbg-webhelper Build phpdbg web SAPI support], yes, yes)
diff --git a/sapi/phpdbg/create-test.php b/sapi/phpdbg/create-test.php
new file mode 100644
index 0000000000..6de10bd56f
--- /dev/null
+++ b/sapi/phpdbg/create-test.php
@@ -0,0 +1,150 @@
+#!/usr/bin/env php
+<?php
+
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 7 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2015 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: |
+ | http://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@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Bob Weinand <bwoebi@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+#####
+## This is just a helper for intercepting stdin/stdout and the file and create a half-finished test.
+## The output still may need adapting to match file names etc.
+#####
+
+error_reporting(-1);
+
+$phpdbg = getenv('TEST_PHPDBG_EXECUTABLE') ?: null;
+$pass_options = ' -qbI -n -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0"';
+$file = "";
+$cmdargv = "";
+
+if (isset($argc) && $argc > 1) {
+ $post_ddash = false;
+ for ($i = 1; $i < $argc; $i++) {
+ if ($argv[$i][0] == "-" && !$post_ddash) {
+ switch (substr($argv[$i], 1)) {
+ case "p":
+ $phpdbg = $argv[++$i];
+ break;
+ case "n":
+ $pass_options .= " -n";
+ break;
+ case "d":
+ $pass_options .= " -d ".escapeshellarg($argv[++$i]);
+ $ini[] = $argv[$i];
+ break;
+ case "-":
+ $post_ddash = true;
+ break;
+ }
+ } else {
+ $real_argv[] = $argv[$i];
+ }
+ }
+ if (isset($real_argv[0])) {
+ $file = realpath($real_argv[0]);
+ $cmdargv = implode(" ", array_map("escapeshellarg", array_slice($real_argv, 1)));
+ }
+}
+
+$proc = proc_open("$phpdbg $pass_options $file -- $cmdargv", [["pipe", "r"], ["pipe", "w"], ["pipe", "w"]], $pipes);
+if (!$proc) {
+ die("Couldn't start phpdbg\n");
+}
+
+$input = $output = "";
+
+stream_set_blocking(STDIN, false);
+
+do {
+ $r = [$pipes[1], STDIN];
+ $w = $e = null;
+ $n = @stream_select($r, $w, $e, null);
+
+ if ($n > 0) {
+ if ("" != $in = fread(STDIN, 1024)) {
+ $input .= $in;
+ fwrite($pipes[0], $in);
+ continue;
+ }
+
+ if (feof(STDIN)) {
+ die("stdin closed?!\n");
+ }
+
+ if (feof($pipes[1])) {
+ $n = false;
+ } else {
+ $output .= $c = fgetc($pipes[1]);
+ echo $c;
+ }
+ }
+} while ($n !== false);
+
+stream_set_blocking(STDIN, true);
+
+print "\n";
+if (!isset($name)) {
+ print "Specifiy the test description: ";
+ $desc = trim(fgets(STDIN));
+}
+while (!isset($testfile)) {
+ print "Specifiy the test file name (leave empty to write to stderr): ";
+ $testfile = trim(fgets(STDIN));
+ if ($testfile != "" && file_exists($testfile)) {
+ print "That file already exists. Type y or yes to overwrite: ";
+ $y = trim(fgets(STDIN));
+ if ($y !== "y" && $y !== "yes") {
+ unset($testfile);
+ }
+ }
+}
+
+$output = str_replace("string(".strlen($file).") \"$file\"", 'string(%d) "%s"', $output);
+$output = str_replace($file, "%s", $output);
+$input = trim($input);
+
+$testdata = <<<TEST
+--TEST--
+$desc
+--PHPDBG--
+$input
+--EXPECTF--
+$output
+TEST;
+
+if (!empty($ini)) {
+ $testdata .= "\n--INI--\n".implode("\n", $ini);
+}
+if ($cmdargv != "") {
+ $testdata .= "\n--ARGS--\n$cmdargv";
+}
+if ($file != "") {
+ $testdata .= "\n--FILE--\n".file_get_contents($file);
+}
+
+if ($testfile == "") {
+ print "\n";
+} elseif (file_put_contents($testfile, $testdata)) {
+ print "Test saved to $testfile\n";
+} else {
+ print "The test could not be saved to $testfile; outputting on stderr now\n";
+ $testfile = "";
+}
+
+if ($testfile == "") {
+ fwrite(STDERR, $testdata);
+}
diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c
index 31dab3f274..d594601f29 100644
--- a/sapi/phpdbg/phpdbg.c
+++ b/sapi/phpdbg/phpdbg.c
@@ -111,6 +111,8 @@ static inline void php_phpdbg_globals_ctor(zend_phpdbg_globals *pg) /* {{{ */
pg->sigsafe_mem.mem = NULL;
pg->sigsegv_bailout = NULL;
+ pg->oplog_list = NULL;
+
#ifdef PHP_WIN32
pg->sigio_watcher_thread = INVALID_HANDLE_VALUE;
memset(&pg->swd, 0, sizeof(struct win32_sigio_watcher_data));
@@ -441,16 +443,54 @@ static PHP_FUNCTION(phpdbg_start_oplog)
PHPDBG_G(oplog_list)->start = PHPDBG_G(oplog_cur);
}
+static void phpdbg_oplog_fill_executable(zend_op_array *op_array, HashTable *insert_ht, zend_bool by_opcode) {
+ /* ignore RECV_* opcodes */
+ zend_op *cur = op_array->opcodes + op_array->num_args + !!(op_array->fn_flags & ZEND_ACC_VARIADIC);
+ zend_op *end = op_array->opcodes + op_array->last;
+
+ zend_long insert_idx;
+ zval zero;
+ ZVAL_LONG(&zero, 0);
+
+ /* ignore autogenerated return (well, not too precise with finally branches, but that's okay) */
+ if (op_array->last > 1 && (end - 1)->opcode == ZEND_RETURN && ((end - 2)->opcode == ZEND_RETURN || (end - 2)->opcode == ZEND_GENERATOR_RETURN || (end - 2)->opcode == ZEND_THROW)) {
+ end--;
+ }
+
+ for (; cur < end; cur++) {
+ if (cur->opcode == ZEND_NOP || cur->opcode == ZEND_OP_DATA || cur->opcode == ZEND_FE_FREE || cur->opcode == ZEND_FREE || cur->opcode == ZEND_ASSERT_CHECK
+ || cur->opcode == ZEND_DECLARE_CONST || cur->opcode == ZEND_DECLARE_CLASS || cur->opcode == ZEND_DECLARE_INHERITED_CLASS || cur->opcode == ZEND_DECLARE_FUNCTION
+ || cur->opcode == ZEND_DECLARE_INHERITED_CLASS_DELAYED || cur->opcode == ZEND_VERIFY_ABSTRACT_CLASS || cur->opcode == ZEND_ADD_TRAIT || cur->opcode == ZEND_BIND_TRAITS
+ || cur->opcode == ZEND_DECLARE_ANON_CLASS || cur->opcode == ZEND_DECLARE_ANON_INHERITED_CLASS || cur->opcode == ZEND_FAST_RET || cur->opcode == ZEND_TICKS
+ || cur->opcode == ZEND_EXT_STMT || cur->opcode == ZEND_EXT_FCALL_BEGIN || cur->opcode == ZEND_EXT_FCALL_END || cur->opcode == ZEND_EXT_NOP || cur->opcode == ZEND_BIND_GLOBAL) {
+ continue;
+ }
+
+ if (by_opcode) {
+ insert_idx = cur - op_array->opcodes;
+ } else {
+ insert_idx = cur->lineno;
+ }
+
+ if (cur->opcode == ZEND_NEW && (cur + 1)->opcode == ZEND_DO_FCALL) {
+ cur++;
+ }
+
+ zend_hash_index_update(insert_ht, insert_idx, &zero);
+ }
+}
+
/* {{{ proto void phpdbg_end_oplog() */
static PHP_FUNCTION(phpdbg_end_oplog)
{
- phpdbg_oplog_entry *cur = PHPDBG_G(oplog_list)->start;
- phpdbg_oplog_list *prev = PHPDBG_G(oplog_list)->prev;
+ phpdbg_oplog_entry *cur;
+ phpdbg_oplog_list *prev;
- HashTable *options;
+ HashTable *options = NULL;
zval *option_buffer;
zend_bool by_function = 0;
zend_bool by_opcode = 0;
+ zend_bool show_unexecuted = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|H", &options) == FAILURE) {
return;
@@ -461,6 +501,9 @@ static PHP_FUNCTION(phpdbg_end_oplog)
return;
}
+ cur = PHPDBG_G(oplog_list)->start;
+ prev = PHPDBG_G(oplog_list)->prev;
+
efree(PHPDBG_G(oplog_list));
PHPDBG_G(oplog_list) = prev;
@@ -474,6 +517,10 @@ static PHP_FUNCTION(phpdbg_end_oplog)
}
}
+ if (options && (option_buffer = zend_hash_str_find(options, ZEND_STRL("show_unexecuted")))) {
+ show_unexecuted = zend_is_true(option_buffer);
+ }
+
array_init(return_value);
{
@@ -488,6 +535,9 @@ static PHP_FUNCTION(phpdbg_end_oplog)
do {
zend_op_array *op_array = cur->op_array;
+ zval zero;
+ ZVAL_LONG(&zero, 0);
+
if (op_array->filename != last_file) {
last_file = op_array->filename;
file_buf = zend_hash_find(Z_ARR_P(return_value), last_file);
@@ -495,28 +545,41 @@ static PHP_FUNCTION(phpdbg_end_oplog)
zval ht;
array_init(&ht);
file_buf = zend_hash_add_new(Z_ARR_P(return_value), last_file, &ht);
+
+ if (show_unexecuted) {
+ phpdbg_oplog_fill_executable(op_array, Z_ARR_P(file_buf), by_opcode);
+ }
}
+ insert_ht = Z_ARR_P(file_buf);
}
- insert_ht = Z_ARR_P(file_buf);
if (by_function) {
- if (op_array->function_name != last_function || op_array->scope != last_scope) {
+ if (op_array->function_name == NULL) {
+ if (last_function != NULL) {
+ insert_ht = Z_ARR_P(file_buf);
+ }
+ last_function = NULL;
+ } else if (op_array->function_name != last_function || op_array->scope != last_scope) {
zend_string *fn_name;
last_function = op_array->function_name;
last_scope = op_array->scope;
if (last_scope == NULL) {
fn_name = zend_string_copy(last_function);
} else {
- fn_name = strpprintf(ZSTR_LEN(last_function) + ZSTR_LEN(last_scope->name) + 2, "%.*s::%.*s", ZSTR_LEN(last_function), ZSTR_VAL(last_function), ZSTR_LEN(last_scope->name), ZSTR_VAL(last_scope->name));
+ fn_name = strpprintf(ZSTR_LEN(last_function) + ZSTR_LEN(last_scope->name) + 2, "%.*s::%.*s", ZSTR_LEN(last_scope->name), ZSTR_VAL(last_scope->name), ZSTR_LEN(last_function), ZSTR_VAL(last_function));
}
fn_buf = zend_hash_find(Z_ARR_P(return_value), fn_name);
if (!fn_buf) {
zval ht;
array_init(&ht);
fn_buf = zend_hash_add_new(Z_ARR_P(return_value), fn_name, &ht);
+
+ if (show_unexecuted) {
+ phpdbg_oplog_fill_executable(op_array, Z_ARR_P(fn_buf), by_opcode);
+ }
}
+ insert_ht = Z_ARR_P(fn_buf);
}
- insert_ht = Z_ARR_P(fn_buf);
}
if (by_opcode) {
@@ -528,9 +591,7 @@ static PHP_FUNCTION(phpdbg_end_oplog)
{
zval *num = zend_hash_index_find(insert_ht, insert_idx);
if (!num) {
- zval zv;
- ZVAL_LONG(&zv, 0);
- num = zend_hash_index_add_new(insert_ht, insert_idx, &zv);
+ num = zend_hash_index_add_new(insert_ht, insert_idx, &zero);
}
Z_LVAL_P(num)++;
}
@@ -709,6 +770,8 @@ static int php_sapi_phpdbg_deactivate(void) /* {{{ */
pg->prompt[1] = PHPDBG_G(prompt)[1];
memcpy(pg->colors, PHPDBG_G(colors), sizeof(pg->colors));
pg->eol = PHPDBG_G(eol);
+ pg->input_buflen = PHPDBG_G(input_buflen);
+ memcpy(pg->input_buffer, PHPDBG_G(input_buffer), pg->input_buflen);
pg->flags = PHPDBG_G(flags) & PHPDBG_PRESERVE_FLAGS_MASK;
}
@@ -1169,7 +1232,7 @@ int main(int argc, char **argv) /* {{{ */
char *php_optarg;
int php_optind, opt, show_banner = 1;
long cleaning = -1;
- zend_bool quit_immediately = 0;
+ volatile zend_bool quit_immediately = 0; /* somehow some gcc release builds will play a bit around with order in combination with setjmp..., hence volatile */
zend_bool remote = 0;
zend_phpdbg_globals *settings = NULL;
char *bp_tmp = NULL;
@@ -1390,11 +1453,8 @@ phpdbg_main:
}
/* set exec if present on command line */
- if (!exec && (argc > php_optind) && (strcmp(argv[php_optind-1], "--") != SUCCESS)) {
- if (strlen(argv[php_optind])) {
- if (exec) {
- free(exec);
- }
+ if (argc > php_optind && (strcmp(argv[php_optind-1], "--") != SUCCESS)) {
+ if (!exec && strlen(argv[php_optind])) {
exec = strdup(argv[php_optind]);
}
php_optind++;
@@ -1473,7 +1533,7 @@ phpdbg_main:
/* setup remote server if necessary */
if (cleaning <= 0 && listen > 0) {
server = phpdbg_open_socket(address, listen);
- if (-1 > server || phpdbg_remote_init(address, listen, server, &socket, &stream) == FAILURE) {
+ if (-1 > server || phpdbg_remote_init(address, listen, server, &socket, &stream) == FAILURE) {
exit(0);
}
@@ -1525,6 +1585,14 @@ phpdbg_main:
PHPDBG_G(sapi_name_ptr) = sapi_name;
+ if (exec) { /* set execution context */
+ PHPDBG_G(exec) = phpdbg_resolve_path(exec);
+ PHPDBG_G(exec_len) = PHPDBG_G(exec) ? strlen(PHPDBG_G(exec)) : 0;
+
+ free(exec);
+ exec = NULL;
+ }
+
php_output_activate();
php_output_deactivate();
@@ -1538,7 +1606,7 @@ phpdbg_main:
for (i = SG(request_info).argc; --i;) {
SG(request_info).argv[i] = estrdup(argv[php_optind - 1 + i]);
}
- SG(request_info).argv[i] = exec ? estrdup(exec) : estrdup("");
+ SG(request_info).argv[0] = PHPDBG_G(exec) ? estrdup(PHPDBG_G(exec)) : estrdup("");
php_hash_environment();
}
@@ -1599,14 +1667,6 @@ phpdbg_main:
php_stream_stdio_ops.write = phpdbg_stdiop_write;
#endif
- if (exec) { /* set execution context */
- PHPDBG_G(exec) = phpdbg_resolve_path(exec);
- PHPDBG_G(exec_len) = PHPDBG_G(exec) ? strlen(PHPDBG_G(exec)) : 0;
-
- free(exec);
- exec = NULL;
- }
-
if (oplog_file) { /* open oplog */
PHPDBG_G(oplog) = fopen(oplog_file, "w+");
if (!PHPDBG_G(oplog)) {
@@ -1654,7 +1714,7 @@ phpdbg_main:
/* auto compile */
if (PHPDBG_G(exec)) {
- if (settings) {
+ if (settings || phpdbg_startup_run > 0) {
PHPDBG_G(flags) |= PHPDBG_DISCARD_OUTPUT;
}
@@ -1674,6 +1734,8 @@ phpdbg_main:
goto phpdbg_out;
}
+ PG(during_request_startup) = 0;
+
phpdbg_fully_started = 1;
/* #ifndef for making compiler shutting up */
@@ -1771,7 +1833,7 @@ phpdbg_out:
{
int i;
/* free argv */
- for (i = SG(request_info).argc; --i;) {
+ for (i = SG(request_info).argc; i--;) {
efree(SG(request_info).argv[i]);
}
efree(SG(request_info).argv);
@@ -1813,7 +1875,9 @@ phpdbg_out:
} zend_end_try();
if ((PHPDBG_G(flags) & (PHPDBG_IS_QUITTING | PHPDBG_IS_RUNNING)) == PHPDBG_IS_RUNNING) {
- phpdbg_notice("stop", "type=\"normal\"", "Script ended normally");
+ if (!quit_immediately && !phpdbg_startup_run) {
+ phpdbg_notice("stop", "type=\"normal\"", "Script ended normally");
+ }
cleaning++;
}
@@ -1832,6 +1896,9 @@ phpdbg_out:
}
if ((cleaning > 0 || remote) && !quit_immediately) {
+ /* reset internal php_getopt state */
+ php_getopt(-1, argv, OPTIONS, NULL, &php_optind, 0, 0);
+
goto phpdbg_main;
}
diff --git a/sapi/phpdbg/phpdbg.h b/sapi/phpdbg/phpdbg.h
index 7fb8083793..f900866211 100644
--- a/sapi/phpdbg/phpdbg.h
+++ b/sapi/phpdbg/phpdbg.h
@@ -100,9 +100,8 @@
/* {{{ strings */
#define PHPDBG_NAME "phpdbg"
#define PHPDBG_AUTHORS "Felipe Pena, Joe Watkins and Bob Weinand" /* Ordered by last name */
-#define PHPDBG_URL "http://phpdbg.com"
-#define PHPDBG_ISSUES "http://github.com/krakjoe/phpdbg/issues"
-#define PHPDBG_VERSION "0.4.0"
+#define PHPDBG_ISSUES "http://bugs.php.net/report.php"
+#define PHPDBG_VERSION "0.5.0"
#define PHPDBG_INIT_FILENAME ".phpdbginit"
#define PHPDBG_DEFAULT_PROMPT "prompt>"
/* }}} */
diff --git a/sapi/phpdbg/phpdbg_bp.c b/sapi/phpdbg/phpdbg_bp.c
index 1c06646f0e..60c68e2cc3 100644
--- a/sapi/phpdbg/phpdbg_bp.c
+++ b/sapi/phpdbg/phpdbg_bp.c
@@ -285,7 +285,7 @@ PHPDBG_API void phpdbg_set_breakpoint_file(const char *path, long line_num) /* {
phpdbg_debug("Compare against loaded %s\n", file);
if (!(pending = ((fileht = phpdbg_resolve_pending_file_break_ex(ZSTR_VAL(file), ZSTR_LEN(file), path_str, broken)) == NULL))) {
- new_break = *(phpdbg_breakfile_t *) zend_hash_index_find_ptr(broken, line_num);
+ new_break = *(phpdbg_breakfile_t *) zend_hash_index_find_ptr(fileht, line_num);
break;
}
} ZEND_HASH_FOREACH_END();
@@ -310,7 +310,13 @@ PHPDBG_API HashTable *phpdbg_resolve_pending_file_break_ex(const char *file, uin
{
phpdbg_debug("file: %s, filelen: %u, cur: %s, curlen %u, pos: %c, memcmp: %d\n", file, filelen, ZSTR_VAL(cur), ZSTR_LEN(cur), filelen > ZSTR_LEN(cur) ? file[filelen - ZSTR_LEN(cur) - 1] : '?', filelen > ZSTR_LEN(cur) ? memcmp(file + filelen - ZSTR_LEN(cur), ZSTR_VAL(cur), ZSTR_LEN(cur)) : 0);
- if (((ZSTR_LEN(cur) < filelen && file[filelen - ZSTR_LEN(cur) - 1] == '/') || filelen == ZSTR_LEN(cur)) && !memcmp(file + filelen - ZSTR_LEN(cur), ZSTR_VAL(cur), ZSTR_LEN(cur))) {
+#ifdef _WIN32
+# define WIN32_PATH_CHECK file[filelen - ZSTR_LEN(cur) - 1] == '\\'
+#else
+# define WIN32_PATH_CHECK 0
+#endif
+
+ if (((ZSTR_LEN(cur) < filelen && (file[filelen - ZSTR_LEN(cur) - 1] == '/' || WIN32_PATH_CHECK)) || filelen == ZSTR_LEN(cur)) && !memcmp(file + filelen - ZSTR_LEN(cur), ZSTR_VAL(cur), ZSTR_LEN(cur))) {
phpdbg_breakfile_t *brake, new_brake;
HashTable *master;
@@ -327,8 +333,7 @@ PHPDBG_API HashTable *phpdbg_resolve_pending_file_break_ex(const char *file, uin
new_brake.filename = estrndup(file, filelen);
PHPDBG_BREAK_UNMAPPING(brake->id);
- if (master) {
- zend_hash_index_update_mem(master, brake->line, &new_brake, sizeof(phpdbg_breakfile_t));
+ if (zend_hash_index_add_mem(master, brake->line, &new_brake, sizeof(phpdbg_breakfile_t))) {
PHPDBG_BREAK_MAPPING(brake->id, master);
}
} ZEND_HASH_FOREACH_END();
@@ -364,6 +369,15 @@ PHPDBG_API void phpdbg_resolve_pending_file_break(const char *file) /* {{{ */
PHPDBG_API void phpdbg_set_breakpoint_symbol(const char *name, size_t name_len) /* {{{ */
{
+ char *lcname;
+
+ if (*name == '\\') {
+ name++;
+ name_len--;
+ }
+
+ lcname = zend_str_tolower_dup(name, name_len);
+
if (!zend_hash_str_exists(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], name, name_len)) {
phpdbg_breaksymbol_t new_break;
@@ -372,7 +386,7 @@ PHPDBG_API void phpdbg_set_breakpoint_symbol(const char *name, size_t name_len)
PHPDBG_BREAK_INIT(new_break, PHPDBG_BREAK_SYM);
new_break.symbol = estrndup(name, name_len);
- zend_hash_str_update_mem(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], new_break.symbol, name_len, &new_break, sizeof(phpdbg_breaksymbol_t));
+ zend_hash_str_update_mem(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], lcname, name_len, &new_break, sizeof(phpdbg_breaksymbol_t));
phpdbg_notice("breakpoint", "add=\"success\" id=\"%d\" function=\"%s\"", "Breakpoint #%d added at %s", new_break.id, new_break.symbol);
@@ -380,6 +394,8 @@ PHPDBG_API void phpdbg_set_breakpoint_symbol(const char *name, size_t name_len)
} else {
phpdbg_error("breakpoint", "type=\"exists\" add=\"fail\" function=\"%s\"", "Breakpoint exists at %s", name);
}
+
+ efree(lcname);
} /* }}} */
PHPDBG_API void phpdbg_set_breakpoint_method(const char *class_name, const char *func_name) /* {{{ */
@@ -387,14 +403,22 @@ PHPDBG_API void phpdbg_set_breakpoint_method(const char *class_name, const char
HashTable class_breaks, *class_table;
size_t class_len = strlen(class_name);
size_t func_len = strlen(func_name);
- char *lcname = zend_str_tolower_dup(func_name, func_len);
+ char *func_lcname, *class_lcname;
- if (!(class_table = zend_hash_str_find_ptr(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], class_name, class_len))) {
+ if (*class_name == '\\') {
+ class_name++;
+ class_len--;
+ }
+
+ func_lcname = zend_str_tolower_dup(func_name, func_len);
+ class_lcname = zend_str_tolower_dup(class_name, class_len);
+
+ if (!(class_table = zend_hash_str_find_ptr(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], class_lcname, class_len))) {
zend_hash_init(&class_breaks, 8, NULL, phpdbg_class_breaks_dtor, 0);
- class_table = zend_hash_str_update_mem(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], class_name, class_len, &class_breaks, sizeof(HashTable));
+ class_table = zend_hash_str_update_mem(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], class_lcname, class_len, &class_breaks, sizeof(HashTable));
}
- if (!zend_hash_str_exists(class_table, lcname, func_len)) {
+ if (!zend_hash_str_exists(class_table, func_lcname, func_len)) {
phpdbg_breakmethod_t new_break;
PHPDBG_G(flags) |= PHPDBG_HAS_METHOD_BP;
@@ -405,7 +429,7 @@ PHPDBG_API void phpdbg_set_breakpoint_method(const char *class_name, const char
new_break.func_name = estrndup(func_name, func_len);
new_break.func_len = func_len;
- zend_hash_str_update_mem(class_table, lcname, func_len, &new_break, sizeof(phpdbg_breakmethod_t));
+ zend_hash_str_update_mem(class_table, func_lcname, func_len, &new_break, sizeof(phpdbg_breakmethod_t));
phpdbg_notice("breakpoint", "add=\"success\" id=\"%d\" method=\"%s::%s\"", "Breakpoint #%d added at %s::%s", new_break.id, class_name, func_name);
@@ -414,7 +438,8 @@ PHPDBG_API void phpdbg_set_breakpoint_method(const char *class_name, const char
phpdbg_error("breakpoint", "type=\"exists\" add=\"fail\" method=\"%s::%s\"", "Breakpoint exists at %s::%s", class_name, func_name);
}
- efree(lcname);
+ efree(func_lcname);
+ efree(class_lcname);
} /* }}} */
PHPDBG_API void phpdbg_set_breakpoint_opline(zend_ulong opline) /* {{{ */
@@ -573,6 +598,8 @@ PHPDBG_API int phpdbg_resolve_opline_break(phpdbg_breakopline_t *new_break) /* {
return SUCCESS;
} /* }}} */
+/* TODO ... method/function oplines need to be normalized (leading backslash, lowercase) and file oplines need to be resolved properly */
+
PHPDBG_API void phpdbg_set_breakpoint_method_opline(const char *class, const char *method, zend_ulong opline) /* {{{ */
{
phpdbg_breakopline_t new_break;
@@ -873,8 +900,6 @@ static inline phpdbg_breakbase_t *phpdbg_find_breakpoint_file(zend_op_array *op_
static inline phpdbg_breakbase_t *phpdbg_find_breakpoint_symbol(zend_function *fbc) /* {{{ */
{
- const char *fname;
- size_t flen;
zend_op_array *ops;
if (fbc->type != ZEND_USER_FUNCTION) {
@@ -889,30 +914,33 @@ static inline phpdbg_breakbase_t *phpdbg_find_breakpoint_symbol(zend_function *f
}
if (ops->function_name) {
- fname = ZSTR_VAL(ops->function_name);
- flen = ZSTR_LEN(ops->function_name);
+ phpdbg_breakbase_t *brake;
+ zend_string *fname = zend_string_tolower(ops->function_name);
+
+ brake = zend_hash_find_ptr(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], fname);
+
+ zend_string_release(fname);
+ return brake;
} else {
- fname = "main";
- flen = 4;
+ return zend_hash_str_find_ptr(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], ZEND_STRL("main"));
}
-
- return zend_hash_str_find_ptr(&PHPDBG_G(bp)[PHPDBG_BREAK_SYM], fname, flen);
} /* }}} */
static inline phpdbg_breakbase_t *phpdbg_find_breakpoint_method(zend_op_array *ops) /* {{{ */
{
HashTable *class_table;
phpdbg_breakbase_t *brake = NULL;
+ zend_string *class_lcname = zend_string_tolower(ops->scope->name);
- if ((class_table = zend_hash_find_ptr(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], ops->scope->name))) {
- size_t lcname_len = ZSTR_LEN(ops->function_name);
- char *lcname = zend_str_tolower_dup(ZSTR_VAL(ops->function_name), lcname_len);
+ if ((class_table = zend_hash_find_ptr(&PHPDBG_G(bp)[PHPDBG_BREAK_METHOD], class_lcname))) {
+ zend_string *lcname = zend_string_tolower(ops->function_name);
- brake = zend_hash_str_find_ptr(class_table, lcname, lcname_len);
+ brake = zend_hash_find_ptr(class_table, lcname);
- efree(lcname);
+ zend_string_release(lcname);
}
+ zend_string_release(class_lcname);
return brake;
} /* }}} */
@@ -929,9 +957,9 @@ static inline phpdbg_breakbase_t *phpdbg_find_breakpoint_opline(phpdbg_opline_pt
static inline phpdbg_breakbase_t *phpdbg_find_breakpoint_opcode(zend_uchar opcode) /* {{{ */
{
- const char *opname = phpdbg_decode_opcode(opcode);
+ const char *opname = zend_get_opcode_name(opcode);
- if (memcmp(opname, PHPDBG_STRL("UNKNOWN")) == 0) {
+ if (!opname) {
return NULL;
}
@@ -1081,8 +1109,9 @@ PHPDBG_API phpdbg_breakbase_t *phpdbg_find_breakpoint(zend_execute_data *execute
}
if (PHPDBG_G(flags) & (PHPDBG_HAS_METHOD_BP|PHPDBG_HAS_SYM_BP)) {
- /* check we are at the beginning of the stack */
- if (execute_data->opline == execute_data->func->op_array.opcodes) {
+ zend_op_array *op_array = &execute_data->func->op_array;
+ /* check we are at the beginning of the stack, but after argument RECV */
+ if (execute_data->opline == op_array->opcodes + op_array->num_args + !!(op_array->fn_flags & ZEND_ACC_VARIADIC)) {
if ((base = phpdbg_find_breakpoint_symbol(execute_data->func))) {
goto result;
}
diff --git a/sapi/phpdbg/phpdbg_cmd.c b/sapi/phpdbg/phpdbg_cmd.c
index 36f1a3f4ab..12eb3874fd 100644
--- a/sapi/phpdbg/phpdbg_cmd.c
+++ b/sapi/phpdbg/phpdbg_cmd.c
@@ -716,8 +716,7 @@ PHPDBG_API char *phpdbg_read_input(char *buffered) /* {{{ */
#define USE_LIB_STAR (defined(HAVE_LIBREADLINE) || defined(HAVE_LIBEDIT))
/* note: EOF makes readline write prompt again in local console mode - and ignored if compiled without readline */
#if USE_LIB_STAR
-readline:
- if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE)
+ if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE) || !isatty(PHPDBG_G(io)[PHPDBG_STDIN].fd))
#endif
{
phpdbg_write("prompt", "", "%s", phpdbg_get_prompt());
@@ -727,13 +726,12 @@ readline:
else {
cmd = readline(phpdbg_get_prompt());
PHPDBG_G(last_was_newline) = 1;
- }
- if (!cmd) {
- goto readline;
- }
+ if (!cmd) {
+ PHPDBG_G(flags) |= PHPDBG_IS_QUITTING | PHPDBG_IS_DISCONNECTED;
+ zend_bailout();
+ }
- if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
add_history(cmd);
}
#endif
@@ -744,7 +742,7 @@ readline:
buffer = estrdup(cmd);
#if USE_LIB_STAR
- if (!buffered && cmd && !(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
+ if (!buffered && cmd && !(PHPDBG_G(flags) & PHPDBG_IS_REMOTE) && isatty(PHPDBG_G(io)[PHPDBG_STDIN].fd)) {
free(cmd);
}
#endif
diff --git a/sapi/phpdbg/phpdbg_frame.c b/sapi/phpdbg/phpdbg_frame.c
index 189b3b20fa..4f0e5e88b0 100644
--- a/sapi/phpdbg/phpdbg_frame.c
+++ b/sapi/phpdbg/phpdbg_frame.c
@@ -164,7 +164,11 @@ static void phpdbg_dump_prototype(zval *tmp) /* {{{ */
}
++j;
- php_printf("%s", phpdbg_short_zval_print(argstmp, 40));
+ {
+ char *arg_print = phpdbg_short_zval_print(argstmp, 40);
+ php_printf("%s", arg_print);
+ efree(arg_print);
+ }
phpdbg_xml("</arg>");
} ZEND_HASH_FOREACH_END();
diff --git a/sapi/phpdbg/phpdbg_info.c b/sapi/phpdbg/phpdbg_info.c
index 1f78ac9173..51e12b7e82 100644
--- a/sapi/phpdbg/phpdbg_info.c
+++ b/sapi/phpdbg/phpdbg_info.c
@@ -153,7 +153,9 @@ PHPDBG_INFO(constants) /* {{{ */
return SUCCESS;
} /* }}} */
-static int phpdbg_arm_auto_global(zend_auto_global *auto_global) {
+static int phpdbg_arm_auto_global(zval *ptrzv) {
+ zend_auto_global *auto_global = Z_PTR_P(ptrzv);
+
if (auto_global->armed) {
if (PHPDBG_G(flags) & PHPDBG_IN_SIGNAL_HANDLER) {
phpdbg_notice("variableinfo", "unreachable=\"%.*s\"", "Cannot show information about superglobal variable %.*s", ZSTR_LEN(auto_global->name), ZSTR_VAL(auto_global->name));
@@ -204,9 +206,9 @@ static int phpdbg_print_symbols(zend_bool show_globals) {
if (ops->function_name) {
if (ops->scope) {
- phpdbg_notice("variableinfo", "method=\"%s::%s\" num=\"%d\"", "Variables in %s::%s() (%d)", ops->scope->name, ops->function_name, zend_hash_num_elements(&vars));
+ phpdbg_notice("variableinfo", "method=\"%s::%s\" num=\"%d\"", "Variables in %s::%s() (%d)", ops->scope->name->val, ops->function_name->val, zend_hash_num_elements(&vars));
} else {
- phpdbg_notice("variableinfo", "function=\"%s\" num=\"%d\"", "Variables in %s() (%d)", ops->function_name, zend_hash_num_elements(&vars));
+ phpdbg_notice("variableinfo", "function=\"%s\" num=\"%d\"", "Variables in %s() (%d)", ZSTR_VAL(ops->function_name), zend_hash_num_elements(&vars));
}
} else {
if (ops->filename) {
@@ -221,8 +223,9 @@ static int phpdbg_print_symbols(zend_bool show_globals) {
phpdbg_out("Address Refs Type Variable\n");
ZEND_HASH_FOREACH_STR_KEY_VAL(&vars, var, data) {
phpdbg_try_access {
-#define VARIABLEINFO(attrs, msg, ...) phpdbg_writeln("variable", "address=\"%p\" refcount=\"%d\" type=\"%s\" refstatus=\"%s\" name=\"%.*s\" " attrs, "%-18p %-7d %-9s %s$%.*s" msg, data, Z_REFCOUNT_P(data), zend_zval_type_name(data), Z_ISREF_P(data) ? "&": "", ZSTR_LEN(var), ZSTR_VAL(var), ##__VA_ARGS__)
-
+ const char *isref = "";
+#define VARIABLEINFO(attrs, msg, ...) phpdbg_writeln("variable", "address=\"%p\" refcount=\"%d\" type=\"%s\" refstatus=\"%s\" name=\"%.*s\" " attrs, "%-18p %-7d %-9s %s$%.*s" msg, data, Z_REFCOUNTED_P(data) ? Z_REFCOUNT_P(data) : 1, zend_zval_type_name(data), isref, ZSTR_LEN(var), ZSTR_VAL(var), ##__VA_ARGS__)
+retry_switch:
switch (Z_TYPE_P(data)) {
case IS_RESOURCE:
phpdbg_try_access {
@@ -258,6 +261,13 @@ static int phpdbg_print_symbols(zend_bool show_globals) {
case IS_DOUBLE:
VARIABLEINFO("value=\"%lf\"", "\ndouble (%lf)", Z_DVAL_P(data));
break;
+ case IS_REFERENCE:
+ isref = "&";
+ data = Z_REFVAL_P(data);
+ goto retry_switch;
+ case IS_INDIRECT:
+ data = Z_INDIRECT_P(data);
+ goto retry_switch;
default:
VARIABLEINFO("", "");
}
@@ -290,13 +300,13 @@ PHPDBG_INFO(literal) /* {{{ */
zend_bool in_executor = PHPDBG_G(in_execution) && EG(current_execute_data) && EG(current_execute_data)->func;
if (in_executor || PHPDBG_G(ops)) {
zend_op_array *ops = in_executor ? &EG(current_execute_data)->func->op_array : PHPDBG_G(ops);
- int literal = 0, count = ops->last_literal-1;
+ int literal = 0, count = ops->last_literal - 1;
if (ops->function_name) {
if (ops->scope) {
- phpdbg_notice("literalinfo", "method=\"%s::%s\" num=\"%d\"", "Literal Constants in %s::%s() (%d)", ops->scope->name, ops->function_name, count);
+ phpdbg_notice("literalinfo", "method=\"%s::%s\" num=\"%d\"", "Literal Constants in %s::%s() (%d)", ops->scope->name->val, ops->function_name->val, count);
} else {
- phpdbg_notice("literalinfo", "function=\"%s\" num=\"%d\"", "Literal Constants in %s() (%d)", ops->function_name, count);
+ phpdbg_notice("literalinfo", "function=\"%s\" num=\"%d\"", "Literal Constants in %s() (%d)", ops->function_name->val, count);
}
} else {
if (ops->filename) {
diff --git a/sapi/phpdbg/phpdbg_io.c b/sapi/phpdbg/phpdbg_io.c
index 70709eadc1..246431ff2d 100644
--- a/sapi/phpdbg/phpdbg_io.c
+++ b/sapi/phpdbg/phpdbg_io.c
@@ -90,7 +90,6 @@ PHPDBG_API int phpdbg_consume_stdin_line(char *buf) {
if (bytes <= 0) {
PHPDBG_G(flags) |= PHPDBG_IS_QUITTING | PHPDBG_IS_DISCONNECTED;
zend_bailout();
- return 0;
}
return bytes;
diff --git a/sapi/phpdbg/phpdbg_lexer.c b/sapi/phpdbg/phpdbg_lexer.c
index d1474dc252..6b503f04ed 100644
--- a/sapi/phpdbg/phpdbg_lexer.c
+++ b/sapi/phpdbg/phpdbg_lexer.c
@@ -1,5 +1,5 @@
/* Generated by re2c 0.13.5 */
-#line 1 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 1 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
/*
* phpdbg_lexer.l
*/
@@ -16,6 +16,7 @@
#define YYGETCONDITION() LEX(state)
#define YYCURSOR LEX(cursor)
#define YYMARKER LEX(marker)
+#define YYCTXMARKER LEX(ctxmarker)
#define yyleng LEX(len)
#define yytext ((char*) LEX(text))
#undef YYDEBUG
@@ -44,7 +45,7 @@ restart:
LEX(text) = YYCURSOR;
-#line 49 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 49 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
{
YYCTYPE yych;
unsigned int yyaccept = 0;
@@ -65,38 +66,38 @@ restart:
yyc_INITIAL:
{
static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 192, 96, 0, 0, 192, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 192, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 192, 96, 0, 0, 192, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 192, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
};
YYDEBUG(0, *YYCURSOR);
@@ -149,14 +150,14 @@ yy2:
yy3:
YYDEBUG(3, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 176 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 176 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
YYSETCONDITION(NORMAL);
YYCURSOR = LEX(text);
goto restart;
}
-#line 161 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 161 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy4:
YYDEBUG(4, *YYCURSOR);
++YYCURSOR;
@@ -171,11 +172,11 @@ yy4:
yy6:
YYDEBUG(6, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 69 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 69 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
return 0;
}
-#line 180 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 180 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy7:
YYDEBUG(7, *YYCURSOR);
yych = *++YYCURSOR;
@@ -242,13 +243,13 @@ yy16:
}
YYDEBUG(18, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 163 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 163 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
YYSETCONDITION(PRE_RAW);
phpdbg_init_param(yylval, EMPTY_PARAM);
return T_RUN;
}
-#line 253 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 253 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy19:
YYDEBUG(19, *YYCURSOR);
yych = *++YYCURSOR;
@@ -275,13 +276,13 @@ yy20:
yy22:
YYDEBUG(22, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 158 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 158 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
YYSETCONDITION(PRE_RAW);
phpdbg_init_param(yylval, EMPTY_PARAM);
return T_SHELL;
}
-#line 286 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 286 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy23:
YYDEBUG(23, *YYCURSOR);
yych = *++YYCURSOR;
@@ -308,13 +309,13 @@ yy24:
yy26:
YYDEBUG(26, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 153 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 153 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
YYSETCONDITION(PRE_RAW);
phpdbg_init_param(yylval, EMPTY_PARAM);
return T_EVAL;
}
-#line 319 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 319 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy27:
YYDEBUG(27, *YYCURSOR);
yych = *++YYCURSOR;
@@ -333,50 +334,50 @@ yy29:
if (yych == '\n') goto yy4;
YYDEBUG(30, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 147 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 147 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
/* ignore whitespace */
goto restart;
}
-#line 344 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 344 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
}
/* *********************************** */
yyc_NORMAL:
{
static const unsigned char yybm[] = {
- 0, 8, 8, 8, 8, 8, 8, 8,
- 8, 66, 68, 8, 8, 66, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 66, 8, 8, 0, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 24, 8,
- 152, 152, 152, 152, 152, 152, 152, 152,
- 152, 152, 0, 8, 8, 8, 8, 8,
- 8, 168, 168, 168, 168, 168, 168, 40,
- 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 8, 8, 8, 8, 8,
- 8, 168, 168, 168, 168, 168, 168, 40,
- 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8,
+ 0, 8, 8, 8, 8, 8, 8, 8,
+ 8, 66, 68, 8, 8, 66, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 66, 8, 8, 0, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 24, 8,
+ 152, 152, 152, 152, 152, 152, 152, 152,
+ 152, 152, 0, 8, 8, 8, 8, 8,
+ 8, 168, 168, 168, 168, 168, 168, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 8, 8, 8, 8, 8,
+ 8, 168, 168, 168, 168, 168, 168, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8,
};
YYDEBUG(31, *YYCURSOR);
YYFILL(11);
@@ -482,13 +483,13 @@ yy33:
if (yych == '\n') goto yy36;
YYDEBUG(35, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 147 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 147 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
/* ignore whitespace */
goto restart;
}
-#line 493 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 493 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy36:
YYDEBUG(36, *YYCURSOR);
++YYCURSOR;
@@ -503,11 +504,11 @@ yy36:
yy38:
YYDEBUG(38, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 69 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 69 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
return 0;
}
-#line 512 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 512 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy39:
YYDEBUG(39, *YYCURSOR);
yych = *++YYCURSOR;
@@ -519,25 +520,25 @@ yy40:
if (yybm[0+yych] & 16) {
goto yy45;
}
- if (yych == 'r') goto yy113;
+ if (yych == 'r') goto yy114;
goto yy44;
yy41:
YYDEBUG(41, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 133 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 133 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
phpdbg_init_param(yylval, STR_PARAM);
yylval->str = zend_strndup(yytext, yyleng);
yylval->len = yyleng;
return T_ID;
}
-#line 536 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 536 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy42:
YYDEBUG(42, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'F') goto yy109;
- if (yych == 'f') goto yy109;
+ if (yych == 'F') goto yy110;
+ if (yych == 'f') goto yy110;
goto yy44;
yy43:
YYDEBUG(43, *YYCURSOR);
@@ -551,7 +552,7 @@ yy44:
goto yy43;
}
if (yych <= '9') goto yy41;
- goto yy65;
+ goto yy67;
yy45:
YYDEBUG(45, *YYCURSOR);
yyaccept = 1;
@@ -574,20 +575,20 @@ yy45:
if (yych <= ' ') goto yy47;
if (yych <= '"') goto yy43;
} else {
- if (yych == ':') goto yy65;
+ if (yych == ':') goto yy67;
goto yy43;
}
}
yy47:
YYDEBUG(47, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 114 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 114 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
phpdbg_init_param(yylval, NUMERIC_PARAM);
yylval->num = atoi(yytext);
return T_DIGITS;
}
-#line 592 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 592 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy48:
YYDEBUG(48, *YYCURSOR);
yyaccept = 1;
@@ -610,7 +611,7 @@ yy48:
if (yych <= '"') goto yy44;
goto yy47;
} else {
- if (yych == 'x') goto yy105;
+ if (yych == 'x') goto yy106;
goto yy44;
}
}
@@ -618,44 +619,44 @@ yy49:
YYDEBUG(49, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'I') goto yy99;
- if (yych == 'i') goto yy99;
+ if (yych == 'I') goto yy100;
+ if (yych == 'i') goto yy100;
goto yy44;
yy50:
YYDEBUG(50, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'N') goto yy94;
- if (yych == 'n') goto yy94;
+ if (yych == 'N') goto yy95;
+ if (yych == 'n') goto yy95;
goto yy44;
yy51:
YYDEBUG(51, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'A') goto yy91;
- if (yych == 'a') goto yy91;
+ if (yych == 'A') goto yy92;
+ if (yych == 'a') goto yy92;
goto yy44;
yy52:
YYDEBUG(52, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'O') goto yy87;
- if (yych == 'o') goto yy87;
+ if (yych == 'O') goto yy88;
+ if (yych == 'o') goto yy88;
goto yy44;
yy53:
YYDEBUG(53, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 'N') {
- if (yych == 'F') goto yy86;
+ if (yych == 'F') goto yy87;
if (yych <= 'M') goto yy44;
- goto yy80;
+ goto yy81;
} else {
if (yych <= 'f') {
if (yych <= 'e') goto yy44;
- goto yy86;
+ goto yy87;
} else {
- if (yych == 'n') goto yy80;
+ if (yych == 'n') goto yy81;
goto yy44;
}
}
@@ -663,71 +664,46 @@ yy54:
YYDEBUG(54, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'R') goto yy84;
- if (yych == 'r') goto yy84;
+ if (yych == 'R') goto yy85;
+ if (yych == 'r') goto yy85;
goto yy44;
yy55:
YYDEBUG(55, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'E') goto yy79;
- if (yych == 'e') goto yy79;
+ if (yych == 'E') goto yy80;
+ if (yych == 'e') goto yy80;
goto yy44;
yy56:
YYDEBUG(56, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'E') goto yy76;
+ if (yych == 'E') goto yy77;
goto yy44;
yy57:
YYDEBUG(57, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'e') goto yy64;
+ if (yych == 'e') goto yy66;
goto yy44;
yy58:
YYDEBUG(58, *YYCURSOR);
++YYCURSOR;
YYDEBUG(59, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 92 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 92 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
return T_POUND;
}
-#line 699 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 699 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy60:
YYDEBUG(60, *YYCURSOR);
- ++YYCURSOR;
- if ((yych = *YYCURSOR) == ':') goto yy62;
- YYDEBUG(61, *YYCURSOR);
- yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 98 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
- {
- return T_COLON;
-}
-#line 710 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy62:
- YYDEBUG(62, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(63, *YYCURSOR);
- yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 95 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
- {
- return T_DCOLON;
-}
-#line 720 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy64:
- YYDEBUG(64, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'n') goto yy70;
- goto yy44;
-yy65:
- YYDEBUG(65, *YYCURSOR);
+ YYCTXMARKER = YYCURSOR + 1;
yych = *++YYCURSOR;
- if (yych == '/') goto yy67;
-yy66:
- YYDEBUG(66, *YYCURSOR);
+ if (yych == ':') goto yy64;
+ if (yych != '\\') goto yy62;
+yy61:
+ YYDEBUG(61, *YYCURSOR);
YYCURSOR = YYMARKER;
if (yyaccept <= 2) {
if (yyaccept <= 1) {
@@ -737,351 +713,381 @@ yy66:
goto yy47;
}
} else {
- goto yy75;
+ goto yy76;
}
} else {
if (yyaccept <= 3) {
- goto yy108;
+ goto yy109;
} else {
- goto yy119;
+ goto yy120;
}
}
+yy62:
+ YYDEBUG(62, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(63, *YYCURSOR);
+ YYCURSOR = YYCTXMARKER;
+ yyleng = (size_t) YYCURSOR - (size_t) yytext;
+#line 98 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
+ {
+ return T_COLON;
+}
+#line 736 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
+yy64:
+ YYDEBUG(64, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(65, *YYCURSOR);
+ yyleng = (size_t) YYCURSOR - (size_t) yytext;
+#line 95 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
+ {
+ return T_DCOLON;
+}
+#line 746 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
+yy66:
+ YYDEBUG(66, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'n') goto yy71;
+ goto yy44;
yy67:
YYDEBUG(67, *YYCURSOR);
yych = *++YYCURSOR;
- if (yych != '/') goto yy66;
+ if (yych != '/') goto yy61;
YYDEBUG(68, *YYCURSOR);
- ++YYCURSOR;
+ yych = *++YYCURSOR;
+ if (yych != '/') goto yy61;
YYDEBUG(69, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(70, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 86 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 86 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
phpdbg_init_param(yylval, STR_PARAM);
yylval->str = zend_strndup(yytext, yyleng);
yylval->len = yyleng;
return T_PROTO;
}
-#line 766 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy70:
- YYDEBUG(70, *YYCURSOR);
+#line 771 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
+yy71:
+ YYDEBUG(71, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych != 'd') goto yy44;
- YYDEBUG(71, *YYCURSOR);
+ YYDEBUG(72, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych != '_') goto yy44;
-yy72:
- YYDEBUG(72, *YYCURSOR);
+yy73:
+ YYDEBUG(73, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yybm[0+yych] & 32) {
- goto yy73;
+ goto yy74;
}
goto yy44;
-yy73:
- YYDEBUG(73, *YYCURSOR);
+yy74:
+ YYDEBUG(74, *YYCURSOR);
yyaccept = 2;
YYMARKER = ++YYCURSOR;
YYFILL(3);
yych = *YYCURSOR;
- YYDEBUG(74, *YYCURSOR);
+ YYDEBUG(75, *YYCURSOR);
if (yybm[0+yych] & 32) {
- goto yy73;
+ goto yy74;
}
if (yych <= 0x1F) {
if (yych <= '\n') {
- if (yych <= 0x00) goto yy75;
+ if (yych <= 0x00) goto yy76;
if (yych <= 0x08) goto yy43;
} else {
if (yych != '\r') goto yy43;
}
} else {
if (yych <= '#') {
- if (yych <= ' ') goto yy75;
+ if (yych <= ' ') goto yy76;
if (yych <= '"') goto yy43;
} else {
- if (yych == ':') goto yy65;
+ if (yych == ':') goto yy67;
goto yy43;
}
}
-yy75:
- YYDEBUG(75, *YYCURSOR);
+yy76:
+ YYDEBUG(76, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 126 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 126 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
phpdbg_init_param(yylval, OP_PARAM);
yylval->str = zend_strndup(yytext, yyleng);
yylval->len = yyleng;
return T_OPCODE;
}
-#line 820 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy76:
- YYDEBUG(76, *YYCURSOR);
+#line 825 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
+yy77:
+ YYDEBUG(77, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych != 'N') goto yy44;
- YYDEBUG(77, *YYCURSOR);
+ YYDEBUG(78, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych != 'D') goto yy44;
- YYDEBUG(78, *YYCURSOR);
+ YYDEBUG(79, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == '_') goto yy72;
+ if (yych == '_') goto yy73;
goto yy44;
-yy79:
- YYDEBUG(79, *YYCURSOR);
+yy80:
+ YYDEBUG(80, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'S') goto yy80;
+ if (yych == 'S') goto yy81;
if (yych != 's') goto yy44;
-yy80:
- YYDEBUG(80, *YYCURSOR);
+yy81:
+ YYDEBUG(81, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yybm[0+yych] & 64) {
- goto yy81;
+ goto yy82;
}
goto yy44;
-yy81:
- YYDEBUG(81, *YYCURSOR);
+yy82:
+ YYDEBUG(82, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(82, *YYCURSOR);
+ YYDEBUG(83, *YYCURSOR);
if (yybm[0+yych] & 64) {
- goto yy81;
+ goto yy82;
}
- YYDEBUG(83, *YYCURSOR);
+ YYDEBUG(84, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 102 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 102 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
phpdbg_init_param(yylval, NUMERIC_PARAM);
yylval->num = 1;
return T_TRUTHY;
}
-#line 866 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy84:
- YYDEBUG(84, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'U') goto yy85;
- if (yych != 'u') goto yy44;
+#line 871 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy85:
YYDEBUG(85, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'E') goto yy80;
- if (yych == 'e') goto yy80;
- goto yy44;
+ if (yych == 'U') goto yy86;
+ if (yych != 'u') goto yy44;
yy86:
YYDEBUG(86, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'F') goto yy87;
- if (yych != 'f') goto yy44;
+ if (yych == 'E') goto yy81;
+ if (yych == 'e') goto yy81;
+ goto yy44;
yy87:
YYDEBUG(87, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'F') goto yy88;
+ if (yych != 'f') goto yy44;
+yy88:
+ YYDEBUG(88, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
if (yych <= '\f') {
if (yych <= 0x08) goto yy44;
if (yych >= '\v') goto yy44;
} else {
- if (yych <= '\r') goto yy88;
+ if (yych <= '\r') goto yy89;
if (yych != ' ') goto yy44;
}
-yy88:
- YYDEBUG(88, *YYCURSOR);
+yy89:
+ YYDEBUG(89, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(89, *YYCURSOR);
+ YYDEBUG(90, *YYCURSOR);
if (yych <= '\f') {
- if (yych <= 0x08) goto yy90;
- if (yych <= '\n') goto yy88;
+ if (yych <= 0x08) goto yy91;
+ if (yych <= '\n') goto yy89;
} else {
- if (yych <= '\r') goto yy88;
- if (yych == ' ') goto yy88;
+ if (yych <= '\r') goto yy89;
+ if (yych == ' ') goto yy89;
}
-yy90:
- YYDEBUG(90, *YYCURSOR);
+yy91:
+ YYDEBUG(91, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 108 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 108 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
phpdbg_init_param(yylval, NUMERIC_PARAM);
yylval->num = 0;
return T_FALSY;
}
-#line 919 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy91:
- YYDEBUG(91, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'L') goto yy92;
- if (yych != 'l') goto yy44;
+#line 924 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy92:
YYDEBUG(92, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'S') goto yy93;
- if (yych != 's') goto yy44;
+ if (yych == 'L') goto yy93;
+ if (yych != 'l') goto yy44;
yy93:
YYDEBUG(93, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'E') goto yy87;
- if (yych == 'e') goto yy87;
- goto yy44;
+ if (yych == 'S') goto yy94;
+ if (yych != 's') goto yy44;
yy94:
YYDEBUG(94, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'A') goto yy95;
- if (yych != 'a') goto yy44;
+ if (yych == 'E') goto yy88;
+ if (yych == 'e') goto yy88;
+ goto yy44;
yy95:
YYDEBUG(95, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'B') goto yy96;
- if (yych != 'b') goto yy44;
+ if (yych == 'A') goto yy96;
+ if (yych != 'a') goto yy44;
yy96:
YYDEBUG(96, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'L') goto yy97;
- if (yych != 'l') goto yy44;
+ if (yych == 'B') goto yy97;
+ if (yych != 'b') goto yy44;
yy97:
YYDEBUG(97, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'E') goto yy98;
- if (yych != 'e') goto yy44;
+ if (yych == 'L') goto yy98;
+ if (yych != 'l') goto yy44;
yy98:
YYDEBUG(98, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'D') goto yy80;
- if (yych == 'd') goto yy80;
- goto yy44;
+ if (yych == 'E') goto yy99;
+ if (yych != 'e') goto yy44;
yy99:
YYDEBUG(99, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'S') goto yy100;
- if (yych != 's') goto yy44;
+ if (yych == 'D') goto yy81;
+ if (yych == 'd') goto yy81;
+ goto yy44;
yy100:
YYDEBUG(100, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'A') goto yy101;
- if (yych != 'a') goto yy44;
+ if (yych == 'S') goto yy101;
+ if (yych != 's') goto yy44;
yy101:
YYDEBUG(101, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'B') goto yy102;
- if (yych != 'b') goto yy44;
+ if (yych == 'A') goto yy102;
+ if (yych != 'a') goto yy44;
yy102:
YYDEBUG(102, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'L') goto yy103;
- if (yych != 'l') goto yy44;
+ if (yych == 'B') goto yy103;
+ if (yych != 'b') goto yy44;
yy103:
YYDEBUG(103, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'E') goto yy104;
- if (yych != 'e') goto yy44;
+ if (yych == 'L') goto yy104;
+ if (yych != 'l') goto yy44;
yy104:
YYDEBUG(104, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'D') goto yy87;
- if (yych == 'd') goto yy87;
- goto yy44;
+ if (yych == 'E') goto yy105;
+ if (yych != 'e') goto yy44;
yy105:
YYDEBUG(105, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yybm[0+yych] & 128) {
- goto yy106;
- }
+ if (yych == 'D') goto yy88;
+ if (yych == 'd') goto yy88;
goto yy44;
yy106:
YYDEBUG(106, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 128) {
+ goto yy107;
+ }
+ goto yy44;
+yy107:
+ YYDEBUG(107, *YYCURSOR);
yyaccept = 3;
YYMARKER = ++YYCURSOR;
YYFILL(3);
yych = *YYCURSOR;
- YYDEBUG(107, *YYCURSOR);
+ YYDEBUG(108, *YYCURSOR);
if (yybm[0+yych] & 128) {
- goto yy106;
+ goto yy107;
}
if (yych <= 0x1F) {
if (yych <= '\n') {
- if (yych <= 0x00) goto yy108;
+ if (yych <= 0x00) goto yy109;
if (yych <= 0x08) goto yy43;
} else {
if (yych != '\r') goto yy43;
}
} else {
if (yych <= '#') {
- if (yych <= ' ') goto yy108;
+ if (yych <= ' ') goto yy109;
if (yych <= '"') goto yy43;
} else {
- if (yych == ':') goto yy65;
+ if (yych == ':') goto yy67;
goto yy43;
}
}
-yy108:
- YYDEBUG(108, *YYCURSOR);
+yy109:
+ YYDEBUG(109, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 120 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 120 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
phpdbg_init_param(yylval, ADDR_PARAM);
yylval->addr = strtoul(yytext, 0, 16);
return T_ADDR;
}
-#line 1050 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy109:
- YYDEBUG(109, *YYCURSOR);
+#line 1055 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
+yy110:
+ YYDEBUG(110, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= '\f') {
if (yych <= 0x08) goto yy44;
if (yych >= '\v') goto yy44;
} else {
- if (yych <= '\r') goto yy110;
+ if (yych <= '\r') goto yy111;
if (yych != ' ') goto yy44;
}
-yy110:
- YYDEBUG(110, *YYCURSOR);
+yy111:
+ YYDEBUG(111, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(111, *YYCURSOR);
+ YYDEBUG(112, *YYCURSOR);
if (yych <= '\f') {
- if (yych <= 0x08) goto yy112;
- if (yych <= '\n') goto yy110;
+ if (yych <= 0x08) goto yy113;
+ if (yych <= '\n') goto yy111;
} else {
- if (yych <= '\r') goto yy110;
- if (yych == ' ') goto yy110;
+ if (yych <= '\r') goto yy111;
+ if (yych == ' ') goto yy111;
}
-yy112:
- YYDEBUG(112, *YYCURSOR);
+yy113:
+ YYDEBUG(113, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 80 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 80 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
YYSETCONDITION(RAW);
phpdbg_init_param(yylval, EMPTY_PARAM);
return T_IF;
}
-#line 1084 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy113:
- YYDEBUG(113, *YYCURSOR);
+#line 1089 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
+yy114:
+ YYDEBUG(114, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= ' ') {
@@ -1089,430 +1095,430 @@ yy113:
if (yych <= 0x08) goto yy44;
if (yych >= '\v') goto yy44;
} else {
- if (yych <= '\r') goto yy114;
+ if (yych <= '\r') goto yy115;
if (yych <= 0x1F) goto yy44;
}
} else {
if (yych <= '.') {
if (yych <= ',') goto yy44;
- if (yych <= '-') goto yy116;
- goto yy117;
+ if (yych <= '-') goto yy117;
+ goto yy118;
} else {
if (yych <= '/') goto yy44;
- if (yych <= '9') goto yy117;
+ if (yych <= '9') goto yy118;
goto yy44;
}
}
-yy114:
- YYDEBUG(114, *YYCURSOR);
+yy115:
+ YYDEBUG(115, *YYCURSOR);
++YYCURSOR;
YYFILL(2);
yych = *YYCURSOR;
- YYDEBUG(115, *YYCURSOR);
+ YYDEBUG(116, *YYCURSOR);
if (yych <= ' ') {
if (yych <= '\f') {
- if (yych <= 0x08) goto yy66;
- if (yych <= '\n') goto yy114;
- goto yy66;
+ if (yych <= 0x08) goto yy61;
+ if (yych <= '\n') goto yy115;
+ goto yy61;
} else {
- if (yych <= '\r') goto yy114;
- if (yych <= 0x1F) goto yy66;
- goto yy114;
+ if (yych <= '\r') goto yy115;
+ if (yych <= 0x1F) goto yy61;
+ goto yy115;
}
} else {
if (yych <= '.') {
- if (yych <= ',') goto yy66;
- if (yych <= '-') goto yy120;
- goto yy121;
+ if (yych <= ',') goto yy61;
+ if (yych <= '-') goto yy121;
+ goto yy122;
} else {
- if (yych <= '/') goto yy66;
- if (yych <= '9') goto yy121;
- goto yy66;
+ if (yych <= '/') goto yy61;
+ if (yych <= '9') goto yy122;
+ goto yy61;
}
}
-yy116:
- YYDEBUG(116, *YYCURSOR);
+yy117:
+ YYDEBUG(117, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if (yych == '.') goto yy117;
+ if (yych == '.') goto yy118;
if (yych <= '/') goto yy44;
if (yych >= ':') goto yy44;
-yy117:
- YYDEBUG(117, *YYCURSOR);
+yy118:
+ YYDEBUG(118, *YYCURSOR);
yyaccept = 4;
YYMARKER = ++YYCURSOR;
YYFILL(3);
yych = *YYCURSOR;
- YYDEBUG(118, *YYCURSOR);
+ YYDEBUG(119, *YYCURSOR);
if (yych <= ' ') {
if (yych <= '\n') {
- if (yych <= 0x00) goto yy119;
+ if (yych <= 0x00) goto yy120;
if (yych <= 0x08) goto yy43;
} else {
- if (yych == '\r') goto yy119;
+ if (yych == '\r') goto yy120;
if (yych <= 0x1F) goto yy43;
}
} else {
if (yych <= '.') {
- if (yych == '#') goto yy119;
+ if (yych == '#') goto yy120;
if (yych <= '-') goto yy43;
- goto yy117;
+ goto yy118;
} else {
if (yych <= '/') goto yy43;
- if (yych <= '9') goto yy117;
- if (yych <= ':') goto yy65;
+ if (yych <= '9') goto yy118;
+ if (yych <= ':') goto yy67;
goto yy43;
}
}
-yy119:
- YYDEBUG(119, *YYCURSOR);
+yy120:
+ YYDEBUG(120, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 73 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 73 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
char *text = yytext + 2;
while (*++text < '0');
yylval->num = atoi(text);
return T_REQ_ID;
}
-#line 1179 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy120:
- YYDEBUG(120, *YYCURSOR);
- yych = *++YYCURSOR;
- if (yych == '.') goto yy121;
- if (yych <= '/') goto yy66;
- if (yych >= ':') goto yy66;
+#line 1184 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy121:
YYDEBUG(121, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '.') goto yy122;
+ if (yych <= '/') goto yy61;
+ if (yych >= ':') goto yy61;
+yy122:
+ YYDEBUG(122, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(122, *YYCURSOR);
- if (yych == '.') goto yy121;
- if (yych <= '/') goto yy119;
- if (yych <= '9') goto yy121;
- goto yy119;
+ YYDEBUG(123, *YYCURSOR);
+ if (yych == '.') goto yy122;
+ if (yych <= '/') goto yy120;
+ if (yych <= '9') goto yy122;
+ goto yy120;
}
/* *********************************** */
yyc_PRE_RAW:
{
static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 160, 48, 0, 0, 160, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 160, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 64, 0,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 160, 48, 0, 0, 160, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 160, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 64, 0,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
};
- YYDEBUG(123, *YYCURSOR);
+ YYDEBUG(124, *YYCURSOR);
YYFILL(2);
yych = *YYCURSOR;
if (yybm[0+yych] & 16) {
- goto yy127;
+ goto yy128;
}
if (yych <= '\r') {
if (yych <= 0x08) {
- if (yych <= 0x00) goto yy130;
- goto yy132;
+ if (yych <= 0x00) goto yy131;
+ goto yy133;
} else {
- if (yych <= '\t') goto yy125;
- if (yych <= '\f') goto yy132;
+ if (yych <= '\t') goto yy126;
+ if (yych <= '\f') goto yy133;
}
} else {
if (yych <= ' ') {
- if (yych <= 0x1F) goto yy132;
+ if (yych <= 0x1F) goto yy133;
} else {
- if (yych == '-') goto yy131;
- goto yy132;
+ if (yych == '-') goto yy132;
+ goto yy133;
}
}
-yy125:
- YYDEBUG(125, *YYCURSOR);
+yy126:
+ YYDEBUG(126, *YYCURSOR);
++YYCURSOR;
if ((yych = *YYCURSOR) <= '\f') {
- if (yych <= 0x00) goto yy142;
- if (yych <= 0x08) goto yy126;
- if (yych <= '\n') goto yy142;
+ if (yych <= 0x00) goto yy143;
+ if (yych <= 0x08) goto yy127;
+ if (yych <= '\n') goto yy143;
} else {
- if (yych <= '\r') goto yy142;
- if (yych == ' ') goto yy142;
+ if (yych <= '\r') goto yy143;
+ if (yych == ' ') goto yy143;
}
-yy126:
- YYDEBUG(126, *YYCURSOR);
+yy127:
+ YYDEBUG(127, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 169 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 169 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
YYSETCONDITION(RAW);
YYCURSOR = LEX(text);
goto restart;
}
-#line 1277 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy127:
- YYDEBUG(127, *YYCURSOR);
+#line 1282 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
+yy128:
+ YYDEBUG(128, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(128, *YYCURSOR);
+ YYDEBUG(129, *YYCURSOR);
if (yybm[0+yych] & 128) {
- goto yy141;
+ goto yy142;
}
- if (yych <= 0x00) goto yy140;
- if (yych == '\n') goto yy127;
-yy129:
- YYDEBUG(129, *YYCURSOR);
+ if (yych <= 0x00) goto yy141;
+ if (yych == '\n') goto yy128;
+yy130:
+ YYDEBUG(130, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 69 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 69 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
return 0;
}
-#line 1296 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy130:
- YYDEBUG(130, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy126;
+#line 1301 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy131:
YYDEBUG(131, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'r') goto yy133;
- goto yy126;
+ yych = *++YYCURSOR;
+ goto yy127;
yy132:
YYDEBUG(132, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy126;
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'r') goto yy134;
+ goto yy127;
yy133:
YYDEBUG(133, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy127;
+yy134:
+ YYDEBUG(134, *YYCURSOR);
++YYCURSOR;
YYFILL(2);
yych = *YYCURSOR;
- YYDEBUG(134, *YYCURSOR);
+ YYDEBUG(135, *YYCURSOR);
if (yybm[0+yych] & 32) {
- goto yy133;
+ goto yy134;
}
if (yych <= '.') {
- if (yych <= ',') goto yy135;
- if (yych <= '-') goto yy136;
- goto yy137;
+ if (yych <= ',') goto yy136;
+ if (yych <= '-') goto yy137;
+ goto yy138;
} else {
- if (yych <= '/') goto yy135;
- if (yych <= '9') goto yy137;
+ if (yych <= '/') goto yy136;
+ if (yych <= '9') goto yy138;
}
-yy135:
- YYDEBUG(135, *YYCURSOR);
- YYCURSOR = YYMARKER;
- goto yy126;
yy136:
YYDEBUG(136, *YYCURSOR);
+ YYCURSOR = YYMARKER;
+ goto yy127;
+yy137:
+ YYDEBUG(137, *YYCURSOR);
yych = *++YYCURSOR;
if (yybm[0+yych] & 64) {
- goto yy137;
+ goto yy138;
}
- goto yy135;
-yy137:
- YYDEBUG(137, *YYCURSOR);
+ goto yy136;
+yy138:
+ YYDEBUG(138, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(138, *YYCURSOR);
+ YYDEBUG(139, *YYCURSOR);
if (yybm[0+yych] & 64) {
- goto yy137;
+ goto yy138;
}
- YYDEBUG(139, *YYCURSOR);
+ YYDEBUG(140, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 73 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 73 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
char *text = yytext + 2;
while (*++text < '0');
yylval->num = atoi(text);
return T_REQ_ID;
}
-#line 1357 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy140:
- YYDEBUG(140, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy129;
+#line 1362 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy141:
YYDEBUG(141, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy130;
+yy142:
+ YYDEBUG(142, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
-yy142:
- YYDEBUG(142, *YYCURSOR);
+yy143:
+ YYDEBUG(143, *YYCURSOR);
if (yybm[0+yych] & 128) {
- goto yy141;
+ goto yy142;
}
- if (yych <= 0x00) goto yy140;
- if (yych == '\n') goto yy127;
- YYDEBUG(143, *YYCURSOR);
+ if (yych <= 0x00) goto yy141;
+ if (yych == '\n') goto yy128;
+ YYDEBUG(144, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 147 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 147 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
/* ignore whitespace */
goto restart;
}
-#line 1382 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 1387 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
}
/* *********************************** */
yyc_RAW:
{
static const unsigned char yybm[] = {
- 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 160, 64, 128, 128, 160, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 160, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
+ 0, 128, 128, 128, 128, 128, 128, 128,
+ 128, 160, 64, 128, 128, 160, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 160, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
};
- YYDEBUG(144, *YYCURSOR);
+ YYDEBUG(145, *YYCURSOR);
YYFILL(1);
yych = *YYCURSOR;
if (yybm[0+yych] & 32) {
- goto yy146;
+ goto yy147;
}
- if (yych <= 0x00) goto yy152;
- if (yych == '\n') goto yy149;
- goto yy153;
-yy146:
- YYDEBUG(146, *YYCURSOR);
+ if (yych <= 0x00) goto yy153;
+ if (yych == '\n') goto yy150;
+ goto yy154;
+yy147:
+ YYDEBUG(147, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(147, *YYCURSOR);
+ YYDEBUG(148, *YYCURSOR);
if (yybm[0+yych] & 32) {
- goto yy146;
+ goto yy147;
}
- if (yych <= 0x00) goto yy152;
- if (yych == '\n') goto yy149;
- goto yy153;
-yy148:
- YYDEBUG(148, *YYCURSOR);
+ if (yych <= 0x00) goto yy153;
+ if (yych == '\n') goto yy150;
+ goto yy154;
+yy149:
+ YYDEBUG(149, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 140 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 140 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
phpdbg_init_param(yylval, STR_PARAM);
yylval->str = zend_strndup(yytext, yyleng);
yylval->len = yyleng;
return T_INPUT;
}
-#line 1452 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy149:
- YYDEBUG(149, *YYCURSOR);
+#line 1457 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
+yy150:
+ YYDEBUG(150, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(150, *YYCURSOR);
+ YYDEBUG(151, *YYCURSOR);
if (yybm[0+yych] & 64) {
- goto yy149;
+ goto yy150;
}
if (yych <= '\f') {
- if (yych <= 0x00) goto yy152;
- if (yych == '\t') goto yy155;
+ if (yych <= 0x00) goto yy153;
+ if (yych == '\t') goto yy156;
} else {
- if (yych <= '\r') goto yy155;
- if (yych == ' ') goto yy155;
+ if (yych <= '\r') goto yy156;
+ if (yych == ' ') goto yy156;
}
-yy151:
- YYDEBUG(151, *YYCURSOR);
+yy152:
+ YYDEBUG(152, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 69 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 69 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
return 0;
}
-#line 1476 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
-yy152:
- YYDEBUG(152, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy151;
+#line 1481 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
yy153:
YYDEBUG(153, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy152;
+yy154:
+ YYDEBUG(154, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(154, *YYCURSOR);
+ YYDEBUG(155, *YYCURSOR);
if (yybm[0+yych] & 128) {
- goto yy153;
+ goto yy154;
}
- goto yy148;
-yy155:
- YYDEBUG(155, *YYCURSOR);
+ goto yy149;
+yy156:
+ YYDEBUG(156, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(156, *YYCURSOR);
+ YYDEBUG(157, *YYCURSOR);
if (yybm[0+yych] & 64) {
- goto yy149;
+ goto yy150;
}
if (yych <= '\f') {
- if (yych <= 0x00) goto yy152;
- if (yych == '\t') goto yy155;
+ if (yych <= 0x00) goto yy153;
+ if (yych == '\t') goto yy156;
} else {
- if (yych <= '\r') goto yy155;
- if (yych == ' ') goto yy155;
+ if (yych <= '\r') goto yy156;
+ if (yych == ' ') goto yy156;
}
- YYDEBUG(157, *YYCURSOR);
+ YYDEBUG(158, *YYCURSOR);
yyleng = (size_t) YYCURSOR - (size_t) yytext;
-#line 147 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 147 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
{
/* ignore whitespace */
goto restart;
}
-#line 1515 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.c"
+#line 1520 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.c"
}
}
-#line 183 "/Users/Bob/php-src-5.6/sapi/phpdbg/phpdbg_lexer.l"
+#line 183 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_lexer.l"
}
diff --git a/sapi/phpdbg/phpdbg_lexer.h b/sapi/phpdbg/phpdbg_lexer.h
index 89ef7668e5..f9b75b95bf 100644
--- a/sapi/phpdbg/phpdbg_lexer.h
+++ b/sapi/phpdbg/phpdbg_lexer.h
@@ -28,6 +28,7 @@ typedef struct {
unsigned char *text;
unsigned char *cursor;
unsigned char *marker;
+ unsigned char *ctxmarker;
int state;
} phpdbg_lexer_data;
diff --git a/sapi/phpdbg/phpdbg_lexer.l b/sapi/phpdbg/phpdbg_lexer.l
index b9cdc65d22..7fca70f57a 100644
--- a/sapi/phpdbg/phpdbg_lexer.l
+++ b/sapi/phpdbg/phpdbg_lexer.l
@@ -14,6 +14,7 @@
#define YYGETCONDITION() LEX(state)
#define YYCURSOR LEX(cursor)
#define YYMARKER LEX(marker)
+#define YYCTXMARKER LEX(ctxmarker)
#define yyleng LEX(len)
#define yytext ((char*) LEX(text))
#undef YYDEBUG
@@ -94,7 +95,7 @@ INPUT [^\n\000]+
<NORMAL>[:]{2} {
return T_DCOLON;
}
-<NORMAL>[:]{1} {
+<NORMAL>[:]{1}/[^\\] {
return T_COLON;
}
diff --git a/sapi/phpdbg/phpdbg_opcode.c b/sapi/phpdbg/phpdbg_opcode.c
index 3af52f17cd..128dc591cf 100644
--- a/sapi/phpdbg/phpdbg_opcode.c
+++ b/sapi/phpdbg/phpdbg_opcode.c
@@ -27,6 +27,15 @@
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
+static inline const char *phpdbg_decode_opcode(zend_uchar opcode) /* {{{ */
+{
+ const char *ret = zend_get_opcode_name(opcode);
+ if (ret) {
+ return ret + 5; /* Skip ZEND_ prefix */
+ }
+ return "UNKNOWN";
+} /* }}} */
+
static inline char *phpdbg_decode_op(zend_op_array *ops, znode_op *op, uint32_t type) /* {{{ */
{
char *decode = NULL;
@@ -34,12 +43,14 @@ static inline char *phpdbg_decode_op(zend_op_array *ops, znode_op *op, uint32_t
switch (type) {
case IS_CV: {
zend_string *var = ops->vars[EX_VAR_TO_NUM(op->var)];
- asprintf(&decode, "$%.*s%c", ZSTR_LEN(var) <= 19 ? (int) ZSTR_LEN(var) : 18, ZSTR_VAL(var), ZSTR_LEN(var) <= 19 ? 0 : '+');
+ spprintf(&decode, 0, "$%.*s%c",
+ ZSTR_LEN(var) <= 19 ? (int) ZSTR_LEN(var) : 18,
+ ZSTR_VAL(var), ZSTR_LEN(var) <= 19 ? 0 : '+');
} break;
case IS_VAR:
case IS_TMP_VAR: {
- asprintf(&decode, "@%" PRIu32, EX_VAR_TO_NUM(op->var) - ops->last_var);
+ spprintf(&decode, 0, "@%td", EX_VAR_TO_NUM(op->var) - ops->last_var);
} break;
case IS_CONST: {
zval *literal = RT_CONSTANT(ops, *op);
@@ -51,21 +62,38 @@ static inline char *phpdbg_decode_op(zend_op_array *ops, znode_op *op, uint32_t
char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op) /*{{{ */
{
- char *decode[4] = {NULL, NULL, NULL, NULL};
+ const char *opcode_name = phpdbg_decode_opcode(op->opcode);
+ char *result, *decode[4] = {NULL, NULL, NULL, NULL};
+
+ /* EX */
+ switch (op->opcode) {
+ case ZEND_FAST_CALL:
+ if (op->extended_value != 0) {
+ spprintf(&decode[0], 0, "FAST_CALL<%s>",
+ op->extended_value == ZEND_FAST_CALL_FROM_CATCH ? "FROM_CATCH" : "FROM_FINALLY");
+ }
+ break;
+ case ZEND_FAST_RET:
+ if (op->extended_value != 0) {
+ spprintf(&decode[0], 0, "FAST_RET<%s>",
+ op->extended_value == ZEND_FAST_RET_TO_CATCH ? "TO_CATCH" : "TO_FINALLY");
+ }
+ break;
+ }
/* OP1 */
switch (op->opcode) {
case ZEND_JMP:
case ZEND_GOTO:
case ZEND_FAST_CALL:
- asprintf(&decode[1], "J%ld", OP_JMP_ADDR(op, op->op1) - ops->opcodes);
+ spprintf(&decode[1], 0, "J%td", OP_JMP_ADDR(op, op->op1) - ops->opcodes);
break;
case ZEND_INIT_FCALL:
case ZEND_RECV:
case ZEND_RECV_INIT:
case ZEND_RECV_VARIADIC:
- asprintf(&decode[1], "%" PRIu32, op->op1.num);
+ spprintf(&decode[1], 0, "%" PRIu32, op->op1.num);
break;
default:
@@ -75,9 +103,10 @@ char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op) /*{{{ */
/* OP2 */
switch (op->opcode) {
- /* TODO: ZEND_FAST_CALL, ZEND_FAST_RET op2 */
case ZEND_JMPZNZ:
- asprintf(&decode[2], "J%u or J%" PRIu32, OP_JMP_ADDR(op, op->op2) - ops->opcodes, ZEND_OFFSET_TO_OPLINE(op, op->extended_value) - ops->opcodes);
+ spprintf(&decode[2], 0, "J%td or J%td",
+ OP_JMP_ADDR(op, op->op2) - ops->opcodes,
+ ZEND_OFFSET_TO_OPLINE(op, op->extended_value) - ops->opcodes);
break;
case ZEND_JMPZ:
@@ -86,7 +115,14 @@ char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op) /*{{{ */
case ZEND_JMPNZ_EX:
case ZEND_JMP_SET:
case ZEND_ASSERT_CHECK:
- asprintf(&decode[2], "J%ld", OP_JMP_ADDR(op, op->op2) - ops->opcodes);
+ spprintf(&decode[2], 0, "J%td", OP_JMP_ADDR(op, op->op2) - ops->opcodes);
+ break;
+
+ case ZEND_FAST_CALL:
+ case ZEND_FAST_RET:
+ if (op->extended_value != 0) {
+ spprintf(&decode[2], 0, "J%" PRIu32, op->op2.opline_num);
+ }
break;
case ZEND_SEND_VAL:
@@ -96,7 +132,7 @@ char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op) /*{{{ */
case ZEND_SEND_REF:
case ZEND_SEND_VAR_EX:
case ZEND_SEND_USER:
- asprintf(&decode[2], "%" PRIu32, op->op2.num);
+ spprintf(&decode[2], 0, "%" PRIu32, op->op2.num);
break;
default:
@@ -107,27 +143,30 @@ char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op) /*{{{ */
/* RESULT */
switch (op->opcode) {
case ZEND_CATCH:
- asprintf(&decode[2], "%" PRIu32, op->result.num);
+ spprintf(&decode[2], 0, "%" PRIu32, op->result.num);
break;
default:
decode[3] = phpdbg_decode_op(ops, &op->result, op->result_type);
break;
}
- asprintf(&decode[0],
- "%-20s %-20s %-20s",
+ spprintf(&result, 0,
+ "%-23s %-20s %-20s %-20s",
+ decode[0] ? decode[0] : opcode_name,
decode[1] ? decode[1] : "",
decode[2] ? decode[2] : "",
decode[3] ? decode[3] : "");
+ if (decode[0])
+ efree(decode[0]);
if (decode[1])
- free(decode[1]);
+ efree(decode[1]);
if (decode[2])
- free(decode[2]);
+ efree(decode[2]);
if (decode[3])
- free(decode[3]);
+ efree(decode[3]);
- return decode[0];
+ return result;
} /* }}} */
void phpdbg_print_opline_ex(zend_execute_data *execute_data, zend_bool ignore_flags) /* {{{ */
@@ -143,26 +182,22 @@ void phpdbg_print_opline_ex(zend_execute_data *execute_data, zend_bool ignore_fl
if (ignore_flags || (!(PHPDBG_G(flags) & PHPDBG_IS_QUIET) || (PHPDBG_G(flags) & PHPDBG_IS_STEPPING))) {
/* output line info */
- phpdbg_notice("opline", "line=\"%u\" opline=\"%p\" opcode=\"%s\" op=\"%s\" file=\"%s\"", "L%-5u %16p %-30s %s %s",
+ phpdbg_notice("opline", "line=\"%u\" opline=\"%p\" op=\"%s\" file=\"%s\"", "L%-5u %16p %s %s",
opline->lineno,
opline,
- phpdbg_decode_opcode(opline->opcode),
decode,
execute_data->func->op_array.filename ? ZSTR_VAL(execute_data->func->op_array.filename) : "unknown");
}
if (!ignore_flags && PHPDBG_G(oplog)) {
- phpdbg_log_ex(fileno(PHPDBG_G(oplog)), "L%-5u %16p %-30s %s %s",
+ phpdbg_log_ex(fileno(PHPDBG_G(oplog)), "L%-5u %16p %s %s",
opline->lineno,
opline,
- phpdbg_decode_opcode(opline->opcode),
decode,
execute_data->func->op_array.filename ? ZSTR_VAL(execute_data->func->op_array.filename) : "unknown");
}
- if (decode) {
- free(decode);
- }
+ efree(decode);
}
if (PHPDBG_G(oplog_list)) {
@@ -179,9 +214,3 @@ void phpdbg_print_opline(zend_execute_data *execute_data, zend_bool ignore_flags
{
phpdbg_print_opline_ex(execute_data, ignore_flags);
} /* }}} */
-
-const char *phpdbg_decode_opcode(zend_uchar opcode) /* {{{ */
-{
- const char *ret = zend_get_opcode_name(opcode);
- return ret?ret:"UNKNOWN";
-} /* }}} */
diff --git a/sapi/phpdbg/phpdbg_opcode.h b/sapi/phpdbg/phpdbg_opcode.h
index ab7e9e261d..34c9c37e50 100644
--- a/sapi/phpdbg/phpdbg_opcode.h
+++ b/sapi/phpdbg/phpdbg_opcode.h
@@ -23,7 +23,6 @@
#include "zend_types.h"
-const char *phpdbg_decode_opcode(zend_uchar);
char *phpdbg_decode_opline(zend_op_array *ops, zend_op *op);
void phpdbg_print_opline(zend_execute_data *execute_data, zend_bool ignore_flags);
void phpdbg_print_opline_ex(zend_execute_data *execute_data, zend_bool ignore_flags);
diff --git a/sapi/phpdbg/phpdbg_print.c b/sapi/phpdbg/phpdbg_print.c
index 95e0caf784..4a00189b46 100644
--- a/sapi/phpdbg/phpdbg_print.c
+++ b/sapi/phpdbg/phpdbg_print.c
@@ -82,16 +82,11 @@ static inline void phpdbg_print_function_helper(zend_function *method) /* {{{ */
do {
char *decode = phpdbg_decode_opline(op_array, opline);
- if (decode != NULL) {
- phpdbg_writeln("print", "line=\"%u\" opnum=\"%u\" opcode=\"%s\" op=\"%s\"", " L%-4u #%-5u %-23s %s",
- opline->lineno,
- opcode,
- phpdbg_decode_opcode(opline->opcode) + 5, /* remove ZEND_ prefix */
- decode);
- free(decode);
- } else {
- phpdbg_error("print", "type=\"decodefailure\" opline=\"%16p\"", "Failed to decode opline %16p", opline);
- }
+ phpdbg_writeln("print", "line=\"%u\" opnum=\"%u\" op=\"%s\"", " L%-4u #%-5u %s",
+ opline->lineno,
+ opcode,
+ decode);
+ efree(decode);
opline++;
} while (opcode++ < end);
}
@@ -271,23 +266,27 @@ void phpdbg_print_opcodes_function(const char *function, size_t len) {
zend_function *func = zend_hash_str_find_ptr(EG(function_table), function, len);
if (!func) {
+ zend_string *rt_name;
+ ZEND_HASH_FOREACH_STR_KEY_PTR(EG(class_table), rt_name, func) {
+ if (func->type == ZEND_USER_FUNCTION && *rt_name->val == '\0') {
+ if (func->op_array.function_name->len == len && !zend_binary_strcasecmp(function, len, func->op_array.function_name->val, func->op_array.function_name->len)) {
+ phpdbg_print_opcodes_function(rt_name->val, rt_name->len);
+ }
+ }
+ } ZEND_HASH_FOREACH_END();
+
return;
}
- phpdbg_out("function name: %.*s\n", (int) len, function);
+ phpdbg_out("function name: %.*s\n", ZSTR_LEN(func->op_array.function_name), ZSTR_VAL(func->op_array.function_name));
phpdbg_print_function_helper(func);
}
-void phpdbg_print_opcodes_method(const char *class, const char *function) {
- zend_class_entry *ce;
+static void phpdbg_print_opcodes_method_ce(zend_class_entry *ce, const char *function) {
zend_function *func;
- if (phpdbg_safe_class_lookup(class, strlen(class), &ce) != SUCCESS) {
- return;
- }
-
if (ce->type != ZEND_USER_CLASS) {
- phpdbg_out("function name: %s::%s (internal)\n", class, function);
+ phpdbg_out("function name: %s::%s (internal)\n", ce->name->val, function);
return;
}
@@ -295,20 +294,34 @@ void phpdbg_print_opcodes_method(const char *class, const char *function) {
return;
}
- phpdbg_out("function name: %s::%s\n", class, function);
+ phpdbg_out("function name: %s::%s\n", ce->name->val, function);
phpdbg_print_function_helper(func);
}
-void phpdbg_print_opcodes_class(const char *class) {
+void phpdbg_print_opcodes_method(const char *class, const char *function) {
zend_class_entry *ce;
- zend_function *method;
- zend_string *method_name;
- zend_bool first = 1;
if (phpdbg_safe_class_lookup(class, strlen(class), &ce) != SUCCESS) {
+ zend_string *rt_name;
+ ZEND_HASH_FOREACH_STR_KEY_PTR(EG(class_table), rt_name, ce) {
+ if (ce->type == ZEND_USER_CLASS && *rt_name->val == '\0') {
+ if (ce->name->len == strlen(class) && !zend_binary_strcasecmp(class, strlen(class), ce->name->val, ce->name->len)) {
+ phpdbg_print_opcodes_method_ce(ce, function);
+ }
+ }
+ } ZEND_HASH_FOREACH_END();
+
return;
}
+ phpdbg_print_opcodes_method_ce(ce, function);
+}
+
+static void phpdbg_print_opcodes_ce(zend_class_entry *ce) {
+ zend_function *method;
+ zend_string *method_name;
+ zend_bool first = 1;
+
phpdbg_out("%s %s: %s\n",
(ce->type == ZEND_USER_CLASS) ?
"user" : "internal",
@@ -343,10 +356,28 @@ void phpdbg_print_opcodes_class(const char *class) {
} ZEND_HASH_FOREACH_END();
}
+void phpdbg_print_opcodes_class(const char *class) {
+ zend_class_entry *ce;
+
+ if (phpdbg_safe_class_lookup(class, strlen(class), &ce) != SUCCESS) {
+ zend_string *rt_name;
+ ZEND_HASH_FOREACH_STR_KEY_PTR(EG(class_table), rt_name, ce) {
+ if (ce->type == ZEND_USER_CLASS && *rt_name->val == '\0') {
+ if (ce->name->len == strlen(class) && !zend_binary_strcasecmp(class, strlen(class), ce->name->val, ce->name->len)) {
+ phpdbg_print_opcodes_ce(ce);
+ }
+ }
+ } ZEND_HASH_FOREACH_END();
+
+ return;
+ }
+
+ phpdbg_print_opcodes_ce(ce);
+}
+
PHPDBG_API void phpdbg_print_opcodes(char *function)
{
- char *method_name;
- strtok(function, ":");
+ char *method_name = strtok(function, ":");
if (function == NULL) {
phpdbg_print_opcodes_main();
@@ -365,15 +396,15 @@ PHPDBG_API void phpdbg_print_opcodes(char *function)
}
} ZEND_HASH_FOREACH_END();
- ZEND_HASH_FOREACH_STR_KEY_PTR(EG(class_table), name, ce) {
+ ZEND_HASH_FOREACH_PTR(EG(class_table), ce) {
if (ce->type == ZEND_USER_CLASS) {
phpdbg_out("\n\n");
- phpdbg_print_opcodes_class(ZSTR_VAL(name));
+ phpdbg_print_opcodes_ce(ce);
}
} ZEND_HASH_FOREACH_END();
- } else if ((method_name = strtok(NULL, ":")) == NULL) {
+ } else if (method_name == NULL) {
phpdbg_print_opcodes_function(function, strlen(function));
- } else if ((method_name + 1) == NULL) {
+ } else if ((method_name = strtok(NULL, ":")) == NULL) {
phpdbg_print_opcodes_class(function);
} else {
phpdbg_print_opcodes_method(function, method_name);
diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c
index 540706eae1..b00952c07b 100644
--- a/sapi/phpdbg/phpdbg_prompt.c
+++ b/sapi/phpdbg/phpdbg_prompt.c
@@ -25,6 +25,7 @@
#include "zend_exceptions.h"
#include "zend_vm.h"
#include "zend_generators.h"
+#include "zend_interfaces.h"
#include "phpdbg.h"
#include "phpdbg_help.h"
@@ -585,41 +586,31 @@ PHPDBG_COMMAND(frame) /* {{{ */
static inline void phpdbg_handle_exception(void) /* {{{ */
{
- zend_fcall_info fci;
- zval trace;
zend_object *ex = EG(exception);
-
- /* get filename and linenumber before unsetting exception */
- /* not really useful??? see blow
- const char *filename = zend_get_executed_filename();
- uint32_t lineno = zend_get_executed_lineno();
- */
+ zend_string *msg, *file;
+ zend_long line;
+ zval zv, rv, tmp;
EG(exception) = NULL;
- /* call __toString */
- ZVAL_STRINGL(&fci.function_name, "__tostring", sizeof("__tostring") - 1);
- fci.size = sizeof(fci);
- fci.function_table = &ex->ce->function_table;
- fci.symbol_table = NULL;
- fci.object = ex;
- fci.retval = &trace;
- fci.param_count = 0;
- fci.params = NULL;
- fci.no_separation = 1;
- if (zend_call_function(&fci, NULL) == SUCCESS) {
- phpdbg_writeln("exception", "name=\"%s\" trace=\"%.*s\"", "Uncaught %s!\n%.*s", ZSTR_VAL(ex->ce->name), Z_STRLEN(trace), Z_STRVAL(trace));
-
- zval_ptr_dtor(&trace);
+ ZVAL_OBJ(&zv, ex);
+ zend_call_method_with_0_params(&zv, ex->ce, NULL, "__tostring", &tmp);
+ file = zval_get_string(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("file"), 1, &rv));
+ line = zval_get_long(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("line"), 1, &rv));
+
+ if (EG(exception)) {
+ EG(exception) = NULL;
+ msg = ZSTR_EMPTY_ALLOC();
} else {
- phpdbg_error("exception", "name=\"%s\"", "Uncaught %s!", ZSTR_VAL(ex->ce->name));
+ zend_update_property_string(zend_get_exception_base(&zv), &zv, ZEND_STRL("string"), Z_STRVAL(tmp));
+ zval_ptr_dtor(&tmp);
+ msg = zval_get_string(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("string"), 1, &rv));
}
- /* output useful information about address */
-/* not really useful ???
- phpdbg_writeln("exception", "opline=\"%p\" file=\"%s\" line=\"%u\"", "Stack entered at %p in %s on line %u", PHPDBG_G(ops)->opcodes, filename, lineno); */
+ phpdbg_writeln("exception", "name=\"%s\" file=\"%s\" line=\"%lld\"", "Uncaught %s in %s on line %lld\n%s", ZSTR_VAL(ex->ce->name), ZSTR_VAL(file), line, ZSTR_VAL(msg));
+ zend_string_release(msg);
+ zend_string_release(file);
- zval_dtor(&fci.function_name);
if (EG(prev_exception)) {
OBJ_RELEASE(EG(prev_exception));
EG(prev_exception) = 0;
@@ -668,6 +659,7 @@ PHPDBG_COMMAND(run) /* {{{ */
char **argv = emalloc(5 * sizeof(char *));
int argc = 0;
int i;
+ /* TODO allow proper escaping with \, "" and '' here */
char *argv_str = strtok(param->str, " ");
while (argv_str) {
@@ -776,15 +768,19 @@ PHPDBG_COMMAND(ev) /* {{{ */
PHPDBG_G(flags) |= PHPDBG_IN_EVAL;
zend_try {
if (zend_eval_stringl(param->str, param->len, &retval, "eval()'d code") == SUCCESS) {
- phpdbg_xml("<eval %r>");
- if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
- zval *zvp = &retval;
- phpdbg_xml_var_dump(zvp);
+ if (EG(exception)) {
+ zend_exception_error(EG(exception), E_ERROR);
+ } else {
+ phpdbg_xml("<eval %r>");
+ if (PHPDBG_G(flags) & PHPDBG_WRITE_XML) {
+ zval *zvp = &retval;
+ phpdbg_xml_var_dump(zvp);
+ }
+ zend_print_zval_r(&retval, 0);
+ phpdbg_xml("</eval>");
+ phpdbg_out("\n");
+ zval_ptr_dtor(&retval);
}
- zend_print_zval_r(&retval, 0);
- phpdbg_xml("</eval>");
- phpdbg_out("\n");
- zval_ptr_dtor(&retval);
}
} zend_catch {
EG(current_execute_data) = original_execute_data;
@@ -793,6 +789,7 @@ PHPDBG_COMMAND(ev) /* {{{ */
EG(vm_stack_end) = original_stack->end;
EG(vm_stack) = original_stack;
} zend_end_try();
+
PHPDBG_G(flags) &= ~PHPDBG_IN_EVAL;
/* switch stepping back on */
@@ -1400,18 +1397,17 @@ void phpdbg_clean(zend_bool full) /* {{{ */
\
switch (phpdbg_interactive(allow_async_unsafe)) { \
zval zv; \
- default: \
+ case PHPDBG_LEAVE: \
+ case PHPDBG_FINISH: \
+ case PHPDBG_UNTIL: \
+ case PHPDBG_NEXT: \
if (exception) { \
Z_OBJ(zv) = exception; \
zend_throw_exception_internal(&zv); \
} \
/* fallthrough */ \
- case PHPDBG_LEAVE: \
- case PHPDBG_FINISH: \
- case PHPDBG_UNTIL: \
- case PHPDBG_NEXT:{ \
+ default: \
goto next; \
- } \
} \
} while (0)
@@ -1440,10 +1436,10 @@ void phpdbg_execute_ex(zend_execute_data *execute_data) /* {{{ */
#endif
/* check for uncaught exceptions */
- if (exception && PHPDBG_G(handled_exception) != exception) {
+ if (exception && PHPDBG_G(handled_exception) != exception && !(PHPDBG_G(flags) & PHPDBG_IN_EVAL)) {
zend_execute_data *prev_ex = execute_data;
zval zv, rv;
- zend_string *file;
+ zend_string *file, *msg;
zend_long line;
do {
@@ -1463,23 +1459,24 @@ void phpdbg_execute_ex(zend_execute_data *execute_data) /* {{{ */
ZVAL_OBJ(&zv, exception);
file = zval_get_string(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("file"), 1, &rv));
line = zval_get_long(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("line"), 1, &rv));
+ msg = zval_get_string(zend_read_property(zend_get_exception_base(&zv), &zv, ZEND_STRL("message"), 1, &rv));
- phpdbg_error("exception", "name=\"%s\" file=\"%s\" line=\"%lld\"", "Uncaught exception %s in %s on line %lld", ZSTR_VAL(exception->ce->name), ZSTR_VAL(file), line);
+ phpdbg_error("exception", "name=\"%s\" file=\"%s\" line=\"%lld\"", "Uncaught %s in %s on line %lld: %.*s", ZSTR_VAL(exception->ce->name), ZSTR_VAL(file), line, ZSTR_LEN(msg) < 80 ? ZSTR_LEN(msg) : 80, ZSTR_VAL(msg));
+ zend_string_release(msg);
zend_string_release(file);
+
DO_INTERACTIVE(1);
}
ex_is_caught:
- /* allow conditional breakpoints and
- initialization to access the vm uninterrupted */
- if ((PHPDBG_G(flags) & PHPDBG_IN_COND_BP) ||
- (PHPDBG_G(flags) & PHPDBG_IS_INITIALIZING)) {
+ /* allow conditional breakpoints and initialization to access the vm uninterrupted */
+ if (PHPDBG_G(flags) & (PHPDBG_IN_COND_BP | PHPDBG_IS_INITIALIZING)) {
/* skip possible breakpoints */
goto next;
}
/* perform seek operation */
- if (PHPDBG_G(flags) & PHPDBG_SEEK_MASK) {
+ if ((PHPDBG_G(flags) & PHPDBG_SEEK_MASK) && !(PHPDBG_G(flags) & PHPDBG_IN_EVAL)) {
/* current address */
zend_ulong address = (zend_ulong) execute_data->opline;
diff --git a/sapi/phpdbg/phpdbg_utils.c b/sapi/phpdbg/phpdbg_utils.c
index 112f340d6b..2e1e1ed70c 100644
--- a/sapi/phpdbg/phpdbg_utils.c
+++ b/sapi/phpdbg/phpdbg_utils.c
@@ -728,11 +728,11 @@ PHPDBG_API zend_bool phpdbg_check_caught_ex(zend_execute_data *execute_data, zen
op_num = op - op_array->opcodes;
- for (i = 0; i < op_array->last_try_catch && op_array->try_catch_array[i].try_op < op_num; i++) {
+ for (i = 0; i < op_array->last_try_catch && op_array->try_catch_array[i].try_op <= op_num; i++) {
uint32_t catch = op_array->try_catch_array[i].catch_op, finally = op_array->try_catch_array[i].finally_op;
if (op_num <= catch || op_num <= finally) {
- if (finally && finally < catch) {
- return 0;
+ if (finally) {
+ return 1;
}
do {
@@ -764,22 +764,22 @@ char *phpdbg_short_zval_print(zval *zv, int maxlen) /* {{{ */
switch (Z_TYPE_P(zv)) {
case IS_UNDEF:
- decode = zend_strndup("", 0);
+ decode = estrdup("");
break;
case IS_NULL:
- decode = zend_strndup(ZEND_STRL("null"));
+ decode = estrdup("null");
break;
case IS_FALSE:
- decode = zend_strndup(ZEND_STRL("false"));
+ decode = estrdup("false");
break;
case IS_TRUE:
- decode = zend_strndup(ZEND_STRL("true"));
+ decode = estrdup("true");
break;
case IS_LONG:
- asprintf(&decode, ZEND_ULONG_FMT, Z_LVAL_P(zv));
+ spprintf(&decode, 0, ZEND_LONG_FMT, Z_LVAL_P(zv));
break;
case IS_DOUBLE:
- asprintf(&decode, "%.*G", 14, Z_DVAL_P(zv));
+ spprintf(&decode, 0, "%.*G", 14, Z_DVAL_P(zv));
break;
case IS_STRING: {
int i;
@@ -789,28 +789,32 @@ char *phpdbg_short_zval_print(zval *zv, int maxlen) /* {{{ */
ZSTR_VAL(str)[i] = ' ';
}
}
- asprintf(&decode, "\"%.*s\"%c", ZSTR_LEN(str) <= maxlen - 2 ? (int) ZSTR_LEN(str) : (maxlen - 3), ZSTR_VAL(str), ZSTR_LEN(str) <= maxlen - 2 ? 0 : '+');
+ spprintf(&decode, 0, "\"%.*s\"%c",
+ ZSTR_LEN(str) <= maxlen - 2 ? (int) ZSTR_LEN(str) : (maxlen - 3),
+ ZSTR_VAL(str), ZSTR_LEN(str) <= maxlen - 2 ? 0 : '+');
zend_string_release(str);
} break;
case IS_RESOURCE:
- asprintf(&decode, "Rsrc #%d", Z_RES_HANDLE_P(zv));
+ spprintf(&decode, 0, "Rsrc #%d", Z_RES_HANDLE_P(zv));
break;
case IS_ARRAY:
- asprintf(&decode, "array(%d)", zend_hash_num_elements(Z_ARR_P(zv)));
+ spprintf(&decode, 0, "array(%d)", zend_hash_num_elements(Z_ARR_P(zv)));
break;
case IS_OBJECT: {
zend_string *str = Z_OBJCE_P(zv)->name;
- asprintf(&decode, "%.*s%c", ZSTR_LEN(str) <= maxlen ? (int) ZSTR_LEN(str) : maxlen - 1, ZSTR_VAL(str), ZSTR_LEN(str) <= maxlen ? 0 : '+');
+ spprintf(&decode, 0, "%.*s%c",
+ ZSTR_LEN(str) <= maxlen ? (int) ZSTR_LEN(str) : maxlen - 1,
+ ZSTR_VAL(str), ZSTR_LEN(str) <= maxlen ? 0 : '+');
break;
}
case IS_CONSTANT:
- decode = zend_strndup(ZEND_STRL("<constant>"));
+ decode = estrdup("<constant>");
break;
case IS_CONSTANT_AST:
- decode = zend_strndup(ZEND_STRL("<ast>"));
+ decode = estrdup("<ast>");
break;
default:
- asprintf(&decode, "unknown type: %d", Z_TYPE_P(zv));
+ spprintf(&decode, 0, "unknown type: %d", Z_TYPE_P(zv));
break;
}
diff --git a/sapi/phpdbg/tests/basic_run.phpt b/sapi/phpdbg/tests/basic_run.phpt
new file mode 100644
index 0000000000..beb19b535a
--- /dev/null
+++ b/sapi/phpdbg/tests/basic_run.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Basic run
+--PHPDBG--
+r
+q
+--EXPECTF--
+prompt> [Nothing to execute!]
+prompt>
diff --git a/sapi/phpdbg/tests/breakpoints_001.phpt b/sapi/phpdbg/tests/breakpoints_001.phpt
new file mode 100644
index 0000000000..934f0d3554
--- /dev/null
+++ b/sapi/phpdbg/tests/breakpoints_001.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Fundamental breakpoints functionality
+--PHPDBG--
+b 3
+r
+b 4
+c
+
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at %s:3]
+prompt> [Breakpoint #0 at %s:3, hits: 1]
+>00003: echo 1;
+ 00004: echo 2;
+ 00005: echo 3;
+prompt> [Breakpoint #1 added at %s:4]
+prompt> 1
+[Breakpoint #1 at %s:4, hits: 1]
+>00004: echo 2;
+ 00005: echo 3;
+ 00006: echo 4;
+prompt> 234
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+echo 1;
+echo 2;
+echo 3;
+echo 4;
+
diff --git a/sapi/phpdbg/tests/breakpoints_002.phpt b/sapi/phpdbg/tests/breakpoints_002.phpt
new file mode 100644
index 0000000000..18aaef1f36
--- /dev/null
+++ b/sapi/phpdbg/tests/breakpoints_002.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Preserve breakpoints on restart
+--PHPDBG--
+b breakpoints_002.php:4
+r
+b 3
+r
+y
+c
+
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at %s:4]
+prompt> 1
+[Breakpoint #0 at %s:4, hits: 1]
+>00004: echo 2;
+ 00005: echo 3;
+ 00006: echo 4;
+prompt> [Breakpoint #1 added at %s:3]
+prompt> Do you really want to restart execution? (type y or n): [Breakpoint #1 at %s:3, hits: 1]
+>00003: echo 1;
+ 00004: echo 2;
+ 00005: echo 3;
+prompt> 1
+[Breakpoint #0 at %s:4, hits: 1]
+>00004: echo 2;
+ 00005: echo 3;
+ 00006: echo 4;
+prompt> 234
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+echo 1;
+echo 2;
+echo 3;
+echo 4;
+
diff --git a/sapi/phpdbg/tests/breakpoints_003.phpt b/sapi/phpdbg/tests/breakpoints_003.phpt
new file mode 100644
index 0000000000..8caa64632b
--- /dev/null
+++ b/sapi/phpdbg/tests/breakpoints_003.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test deleting breakpoints
+--PHPDBG--
+b 4
+b del 0
+b 5
+r
+b del 1
+r
+y
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at %s:4]
+prompt> [Deleted breakpoint #0]
+prompt> [Breakpoint #1 added at %s:5]
+prompt> 12
+[Breakpoint #1 at %s:5, hits: 1]
+>00005: echo 3;
+ 00006: echo 4;
+ 00007:
+prompt> [Deleted breakpoint #1]
+prompt> Do you really want to restart execution? (type y or n): 1234
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+echo 1;
+echo 2;
+echo 3;
+echo 4;
+
diff --git a/sapi/phpdbg/tests/breakpoints_004.phpt b/sapi/phpdbg/tests/breakpoints_004.phpt
new file mode 100644
index 0000000000..27ebd0bea2
--- /dev/null
+++ b/sapi/phpdbg/tests/breakpoints_004.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test opcode breakpoints
+--PHPDBG--
+b ZEND_ECHO
+r
+c
+
+
+
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at ZEND_ECHO]
+prompt> [Breakpoint #0 in ZEND_ECHO at %s:3, hits: 1]
+>00003: echo 1;
+ 00004: echo 2;
+ 00005: echo 3;
+prompt> 1
+[Breakpoint #0 in ZEND_ECHO at %s:4, hits: 2]
+>00004: echo 2;
+ 00005: echo 3;
+ 00006: echo 4;
+prompt> 2
+[Breakpoint #0 in ZEND_ECHO at %s:5, hits: 3]
+>00005: echo 3;
+ 00006: echo 4;
+ 00007:
+prompt> 3
+[Breakpoint #0 in ZEND_ECHO at %s:6, hits: 4]
+>00006: echo 4;
+ 00007:
+prompt> 4
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+echo 1;
+echo 2;
+echo 3;
+echo 4;
diff --git a/sapi/phpdbg/tests/breakpoints_005.phpt b/sapi/phpdbg/tests/breakpoints_005.phpt
new file mode 100644
index 0000000000..653dab9fcc
--- /dev/null
+++ b/sapi/phpdbg/tests/breakpoints_005.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test breakpoint into function context
+--PHPDBG--
+b breakpoints_005.php:4
+r
+ev $bar
+c
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at %s:4]
+prompt> [Breakpoint #0 at %s:4, hits: 1]
+>00004: var_dump($bar);
+ 00005: }
+ 00006:
+prompt> test
+prompt> string(4) "test"
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+function foo($bar) {
+ var_dump($bar);
+}
+
+foo("test");
+
diff --git a/sapi/phpdbg/tests/breakpoints_006.phpt b/sapi/phpdbg/tests/breakpoints_006.phpt
new file mode 100644
index 0000000000..fa6f0cdc5b
--- /dev/null
+++ b/sapi/phpdbg/tests/breakpoints_006.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Basic function breakpoints
+--PHPDBG--
+b foo
+r
+c
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at foo]
+prompt> [Breakpoint #0 in foo() at %s:4, hits: 1]
+>00004: var_dump($bar);
+ 00005: }
+ 00006:
+prompt> string(4) "test"
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+function foo($bar) {
+ var_dump($bar);
+}
+
+foo("test");
+
diff --git a/sapi/phpdbg/tests/breakpoints_007.phpt b/sapi/phpdbg/tests/breakpoints_007.phpt
new file mode 100644
index 0000000000..f921c257c5
--- /dev/null
+++ b/sapi/phpdbg/tests/breakpoints_007.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Basic method breakpoints
+--PHPDBG--
+b bar::foo
+r
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at bar::foo]
+prompt> [Breakpoint #0 in bar::foo() at %s:5, hits: 1]
+>00005: var_dump($bar);
+ 00006: }
+ 00007: }
+prompt>
+--FILE--
+<?php
+
+class bar {
+ function foo($bar) {
+ var_dump($bar);
+ }
+}
+
+(new bar)->foo("test");
+
diff --git a/sapi/phpdbg/tests/breakpoints_008.phpt b/sapi/phpdbg/tests/breakpoints_008.phpt
new file mode 100644
index 0000000000..cbe5042c2b
--- /dev/null
+++ b/sapi/phpdbg/tests/breakpoints_008.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test namespaced and non-lowercase breakpoint names
+--PHPDBG--
+b foo\bar::foo
+b \Foo\Bar::Foo
+r
+c
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at foo\bar::foo]
+prompt> [Breakpoint exists at Foo\Bar::Foo]
+prompt> [Breakpoint #0 in foo\bar::foo() at %s:6, hits: 1]
+>00006: var_dump($bar);
+ 00007: }
+ 00008: }
+prompt> string(4) "test"
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+namespace Foo {
+ class Bar {
+ function Foo($bar) {
+ var_dump($bar);
+ }
+ }
+}
+
+namespace {
+ (new \Foo\Bar)->Foo("test");
+}
+
diff --git a/sapi/phpdbg/tests/clean_001.phpt b/sapi/phpdbg/tests/clean_001.phpt
new file mode 100644
index 0000000000..0500850448
--- /dev/null
+++ b/sapi/phpdbg/tests/clean_001.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Cleaning must preserve breakpoints
+--INI--
+opcache.enable_cli=0
+--PHPDBG--
+b 4
+b foo
+r
+c
+clean
+y
+c
+r
+c
+
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at %s:4]
+prompt> [Breakpoint #1 added at foo]
+prompt> 1
+[Breakpoint #0 at %s:4, hits: 1]
+>00004: echo 2;
+ 00005: echo 3;
+ 00006: foo();
+prompt> 23
+[Breakpoint #1 in foo() at %s:9, hits: 1]
+>00009: echo 4;
+ 00010: }
+ 00011:
+prompt> Do you really want to clean your current environment? (type y or n): Cleaning Execution Environment
+Classes %d
+Functions %d
+Constants %d
+Includes 0
+prompt> [Not running]
+prompt> 1
+[Breakpoint #0 at %s:4, hits: 1]
+>00004: echo 2;
+ 00005: echo 3;
+ 00006: foo();
+prompt> 23
+[Breakpoint #1 in foo() at %s:9, hits: 1]
+>00009: echo 4;
+ 00010: }
+ 00011:
+prompt> 4
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+echo 1;
+echo 2;
+echo 3;
+foo();
+
+function foo() {
+ echo 4;
+}
diff --git a/sapi/phpdbg/tests/clear_001.phpt b/sapi/phpdbg/tests/clear_001.phpt
new file mode 100644
index 0000000000..96d73990eb
--- /dev/null
+++ b/sapi/phpdbg/tests/clear_001.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test clearing breakpoints
+--INI--
+opcache.enable_cli=0
+--PHPDBG--
+b 4
+b foo
+r
+clear
+c
+i b
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at %s:4]
+prompt> [Breakpoint #1 added at foo]
+prompt> 1
+[Breakpoint #0 at %s:4, hits: 1]
+>00004: echo 2;
+ 00005: echo 3;
+ 00006: foo();
+prompt> Clearing Breakpoints
+File 1
+Functions 1
+Methods 0
+Oplines 0
+File oplines 0
+Function oplines 0
+Method oplines 0
+Conditionals 0
+prompt> 234
+[Script ended normally]
+prompt> prompt>
+--FILE--
+<?php
+
+echo 1;
+echo 2;
+echo 3;
+foo();
+
+function foo() {
+ echo 4;
+}
diff --git a/sapi/phpdbg/tests/commands/0001_basic.test b/sapi/phpdbg/tests/commands/0001_basic.test
deleted file mode 100644
index 08aa9ab664..0000000000
--- a/sapi/phpdbg/tests/commands/0001_basic.test
+++ /dev/null
@@ -1,8 +0,0 @@
-#######################################################
-# name: basic
-# purpose: check basic functionality of phpdbg console
-# expect: TEST::EXACT
-# options: -rr
-#######################################################
-# [Nothing to execute!]
-#######################################################
diff --git a/sapi/phpdbg/tests/commands/0002_set.test b/sapi/phpdbg/tests/commands/0002_set.test
deleted file mode 100644
index 6a14a15adc..0000000000
--- a/sapi/phpdbg/tests/commands/0002_set.test
+++ /dev/null
@@ -1,21 +0,0 @@
-#################################################
-# name: set
-# purpose: tests for set commands
-# expect: TEST::CISTRING
-# options: -rr
-#################################################
-# setting prompt color
-# setting error color
-# setting notice color
-# Failed to find breakpoint #0
-# [Oplog off]
-# opened oplog test.log
-# nothing
-#################################################
-set color prompt none
-set color error none
-set color notice none
-set prompt promot>
-set break 0
-set oplog
-set oplog test.log
diff --git a/sapi/phpdbg/tests/commands/0101_info.test b/sapi/phpdbg/tests/commands/0101_info.test
deleted file mode 100644
index 397a45c992..0000000000
--- a/sapi/phpdbg/tests/commands/0101_info.test
+++ /dev/null
@@ -1,19 +0,0 @@
-#################################################
-# name: info
-# purpose: test info commands
-# expect: TEST::FORMAT
-# options: -rr
-#################################################
-#[User Classes (%d)]
-#User Class test (3)
-#|---- in phpdbginit code on line %d
-#################################################
-<:
-class test {
- public function testMethod(){}
- private function testPrivateMethod(){}
- protected function testProtectedMethod(){}
-}
-:>
-info classes
-q
diff --git a/sapi/phpdbg/tests/commands/0102_print.test b/sapi/phpdbg/tests/commands/0102_print.test
deleted file mode 100644
index 7078b13ea2..0000000000
--- a/sapi/phpdbg/tests/commands/0102_print.test
+++ /dev/null
@@ -1,27 +0,0 @@
-#################################################
-# name: print
-# purpose: test print commands
-# expect: TEST::FORMAT
-# options: -rr
-#################################################
-#[User Class: test (3 methods)]
-#L%d-%d test::testMethod() %s - 0x%s + 1 ops
-# L%d #0 RETURN null
-#L%d-%d test::testPrivateMethod() %s - 0x%s + 1 ops
-# L%d #0 RETURN null
-#L%d-%d test::testProtectedMethod() %s - 0x%s + 1 ops
-# L%d #0 RETURN null
-#[User Method testMethod (1 ops)]
-#L%d-%d test::testMethod() %s - 0x%s + 1 ops
-# L%d #0 RETURN null
-#################################################
-<:
-class test {
- public function testMethod(){}
- private function testPrivateMethod(){}
- protected function testProtectedMethod(){}
-}
-:>
-print class test
-print method test::testMethod
-q
diff --git a/sapi/phpdbg/tests/commands/0103_register.test b/sapi/phpdbg/tests/commands/0103_register.test
deleted file mode 100644
index 703a12f771..0000000000
--- a/sapi/phpdbg/tests/commands/0103_register.test
+++ /dev/null
@@ -1,28 +0,0 @@
-#################################################
-# name: register
-# purpose: test registration functions
-# expect: TEST::FORMAT
-# options: -rr
-#################################################
-#[Registered test_function]
-#array(5) {
-# [0]=>
-# int(1)
-# [1]=>
-# int(2)
-# [2]=>
-# int(3)
-# [3]=>
-# int(4)
-# [4]=>
-# int(5)
-#}
-#################################################
-<:
-function test_function() {
- var_dump(func_get_args());
-}
-:>
-R test_function
-test_function 1 2 3 4 5
-q
diff --git a/sapi/phpdbg/tests/commands/0104_clean.test b/sapi/phpdbg/tests/commands/0104_clean.test
deleted file mode 100644
index 2c7660ad60..0000000000
--- a/sapi/phpdbg/tests/commands/0104_clean.test
+++ /dev/null
@@ -1,14 +0,0 @@
-#################################################
-# name: clean
-# purpose: test cleaning environment
-# expect: TEST::FORMAT
-# options: -rr
-#################################################
-#Cleaning Execution Environment
-#Classes %d
-#Functions %d
-#Constants %d
-#Includes %d
-#################################################
-clean
-quit
diff --git a/sapi/phpdbg/tests/commands/0105_clear.test b/sapi/phpdbg/tests/commands/0105_clear.test
deleted file mode 100644
index 8ce1002491..0000000000
--- a/sapi/phpdbg/tests/commands/0105_clear.test
+++ /dev/null
@@ -1,18 +0,0 @@
-#################################################
-# name: clear
-# purpose: test clearing breakpoints
-# expect: TEST::FORMAT
-# options: -rr
-#################################################
-#Clearing Breakpoints
-#File%w%d
-#Functions%w%d
-#Methods%w%d
-#Oplines%w%d
-#File oplines%w%d
-#Function oplines%w%d
-#Method oplines%w%d
-#Conditionals%w%d
-#################################################
-clear
-quit
diff --git a/sapi/phpdbg/tests/commands/0106_compile.test b/sapi/phpdbg/tests/commands/0106_compile.test
deleted file mode 100644
index b4d801670b..0000000000
--- a/sapi/phpdbg/tests/commands/0106_compile.test
+++ /dev/null
@@ -1,18 +0,0 @@
-#################################################
-# name: compile
-# purpose: test compiling code
-# expect: TEST::FORMAT
-# options: -rr
-#################################################
-#[Successful compilation of %s]
-#Hello World
-#[Script ended normally]
-#################################################
-<:
-define('OUT',
- tempnam(null, "phpdbg"));
-file_put_contents(OUT, "<?php echo \"Hello World\"; ?>");
-phpdbg_exec(OUT);
-:>
-run
-quit
diff --git a/sapi/phpdbg/tests/commands/0107_compile.test b/sapi/phpdbg/tests/commands/0107_compile.test
deleted file mode 100644
index 4842cb74f1..0000000000
--- a/sapi/phpdbg/tests/commands/0107_compile.test
+++ /dev/null
@@ -1,17 +0,0 @@
-#################################################
-# name: compile
-# purpose: test compiling error code
-# expect: TEST::FORMAT
-# options: -rr
-#################################################
-#[PHP Parse error: syntax error, unexpected 'echo' (T_ECHO) in %s on line %s]
-#[Could not find information about included file...]
-#################################################
-<:
-define('OUT',
- tempnam(null, "phpdbg"));
-file_put_contents(OUT, "<?error echo \"Hello World\"; ?>");
-phpdbg_exec(OUT);
-:>
-run
-quit
diff --git a/sapi/phpdbg/tests/exceptions_001.phpt b/sapi/phpdbg/tests/exceptions_001.phpt
new file mode 100644
index 0000000000..fca94f512c
--- /dev/null
+++ b/sapi/phpdbg/tests/exceptions_001.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Properly handle exceptions going to be uncaught
+--PHPDBG--
+r
+t
+ev 1 + 2
+c
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> handle first
+[Uncaught Error in %s on line 16: Call to undefined function foo()]
+>00016: foo(); // Error
+ 00017: } catch (\Exception $e) {
+ 00018: var_dump($e);
+prompt> frame #0: {closure}() at %s:16
+frame #1: {main} at %s:18
+prompt> 3
+prompt> Uncaught Error in %s on line 16
+Error: Call to undefined function foo() in %s:16
+Stack trace:
+#0 %s(18): {closure}()
+#1 {main}
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+(function() {
+ try {
+ foo(); // Error
+ } catch (\Exception $e) {
+ var_dump($e);
+ } finally {
+ print "handle first\n";
+ return "ok";
+ }
+})();
+
+(function() {
+ try {
+ foo(); // Error
+ } catch (\Exception $e) {
+ var_dump($e);
+ }
+})();
diff --git a/sapi/phpdbg/tests/exceptions_002.phpt b/sapi/phpdbg/tests/exceptions_002.phpt
new file mode 100644
index 0000000000..9d3d805a5f
--- /dev/null
+++ b/sapi/phpdbg/tests/exceptions_002.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test exceptions in eval during exception
+--PHPDBG--
+r
+ev next_error()
+c
+
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> handle first
+[Uncaught Error in %s on line 16: Call to undefined function foo()]
+>00016: foo(); // Error
+ 00017: } catch (\Exception $e) {
+ 00018: var_dump($e);
+prompt>
+Fatal error: Uncaught Error: Call to undefined function next_error() in eval()'d code:1
+Stack trace:
+#0 %s(16): unknown()
+#1 %s(18): {closure}()
+#2 {main}
+ thrown in eval()'d code on line 1
+prompt> Uncaught Error in %s on line 16
+Error: Call to undefined function foo() in %s:16
+Stack trace:
+#0 %s(18): {closure}()
+#1 {main}
+[Script ended normally]
+prompt> [The stack contains nothing !]
+prompt>
+--FILE--
+<?php
+
+(function() {
+ try {
+ foo(); // Error
+ } catch (\Exception $e) {
+ var_dump($e);
+ } finally {
+ print "handle first\n";
+ return "ok";
+ }
+})();
+
+(function() {
+ try {
+ foo(); // Error
+ } catch (\Exception $e) {
+ var_dump($e);
+ }
+})();
diff --git a/sapi/phpdbg/tests/info_001.phpt b/sapi/phpdbg/tests/info_001.phpt
new file mode 100644
index 0000000000..a1adb9ad0a
--- /dev/null
+++ b/sapi/phpdbg/tests/info_001.phpt
@@ -0,0 +1,78 @@
+--TEST--
+Test basic info functionality
+--PHPDBG--
+i classes
+i funcs
+b foo
+r
+i v
+i g
+i b
+i d
+i F
+i e
+i l
+c
+i v
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [User Classes (1)]
+User Class Foo\Bar (2)
+|---- in %s on line 4
+prompt> [User Functions (1)]
+|-------- foo in %s on line 14
+prompt> [Breakpoint #0 added at foo]
+prompt> string(4) "test"
+[Breakpoint #0 in foo() at %s:15, hits: 1]
+>00015: var_dump(strrev($baz));
+ 00016: }
+ 00017:
+prompt> [Variables in foo() (1)]
+Address Refs Type Variable
+%s 1 string $baz
+string (4) "test"
+prompt> [Superglobal variables (8)]
+Address Refs Type Variable
+%s 2 array $_GET
+%s 2 array $_POST
+%s 2 array $_COOKIE
+%s 2 array $_FILES
+%s 1 array &$GLOBALS
+%s 2 array $_SERVER
+%s 2 array $_ENV
+%s 1 array $_REQUEST
+prompt> ------------------------------------------------
+Function Breakpoints:
+#0 foo
+prompt> [User-defined constants (0)]
+prompt> [Included files: 0]
+prompt> [No error found!]
+prompt> [Literal Constants in foo() (2)]
+|-------- C0 -------> [var_dump]
+|-------- C1 -------> [strrev]
+prompt> string(4) "tset"
+[Script ended normally]
+prompt> [No active op array!]
+prompt>
+--FILE--
+<?php
+
+namespace Foo {
+ class Bar {
+ function Foo($bar) {
+ var_dump($bar);
+ }
+
+ function baz() { }
+ }
+}
+
+namespace {
+ function foo($baz) {
+ var_dump(strrev($baz));
+ }
+
+ (new \Foo\Bar)->Foo("test");
+ foo("test");
+}
diff --git a/sapi/phpdbg/tests/info_002.phpt b/sapi/phpdbg/tests/info_002.phpt
new file mode 100644
index 0000000000..faeca0e430
--- /dev/null
+++ b/sapi/phpdbg/tests/info_002.phpt
@@ -0,0 +1,31 @@
+--TEST--
+info constants test
+--PHPDBG--
+b 10
+r
+i d
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at %s:10]
+prompt> [Breakpoint #0 at %s:10, hits: 1]
+>00010: print B;
+ 00011:
+prompt> [User-defined constants (2)]
+Address Refs Type Constant
+%s 1 integer A
+int (10)
+%s 1 integer B
+int (100)
+prompt>
+--FILE--
+<?php
+
+const A = 10;
+const B = C::D * A;
+
+class C {
+ const D = 10;
+}
+
+print B;
diff --git a/sapi/phpdbg/tests/phpdbg_oplog_001.phpt b/sapi/phpdbg/tests/phpdbg_oplog_001.phpt
new file mode 100644
index 0000000000..868493b4ba
--- /dev/null
+++ b/sapi/phpdbg/tests/phpdbg_oplog_001.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test phpdbg_*_oplog() functions
+--INI--
+opcache.enable_cli=0
+--PHPDBG--
+r
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> halloarray(2) {
+ ["%s"]=>
+ array(6) {
+ [11]=>
+ int(0)
+ [13]=>
+ int(1)
+ [17]=>
+ int(2)
+ [18]=>
+ int(2)
+ [19]=>
+ int(3)
+ [21]=>
+ int(4)
+ }
+ ["A::b"]=>
+ array(2) {
+ [5]=>
+ int(5)
+ [4]=>
+ int(1)
+ }
+}
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+class A {
+ public function b($c = 1) {
+ if ($c == 1) {
+ // comment
+ }
+ }
+}
+
+phpdbg_start_oplog();
+
+echo "hallo";
+
+// fcalls
+
+$a = new A();
+$a->b();
+$a->b('ha');
+
+var_dump(phpdbg_end_oplog(["functions" => true, "show_unexecuted" => true]));
+
diff --git a/sapi/phpdbg/tests/phpdbg_oplog_002.phpt b/sapi/phpdbg/tests/phpdbg_oplog_002.phpt
new file mode 100644
index 0000000000..b9ba905caa
--- /dev/null
+++ b/sapi/phpdbg/tests/phpdbg_oplog_002.phpt
@@ -0,0 +1,16 @@
+--TEST--
+phpdbg_end_oplog() alone must not crash
+--PHPDBG--
+r
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt>
+Warning: Can not end an oplog without starting it in %s on line 3
+NULL
+[Script ended normally]
+prompt>
+--FILE--
+<?php
+
+var_dump(phpdbg_end_oplog());
diff --git a/sapi/phpdbg/tests/print_001.phpt b/sapi/phpdbg/tests/print_001.phpt
new file mode 100644
index 0000000000..375b13b3e3
--- /dev/null
+++ b/sapi/phpdbg/tests/print_001.phpt
@@ -0,0 +1,67 @@
+--TEST--
+Basic print functionality
+--INI--
+opcache.enable_cli=0
+--PHPDBG--
+p foo
+p class \Foo\bar
+p
+p e
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [User Function foo (8 ops)]
+L14-16 foo() %s - %s + 8 ops
+ L14 #0 RECV 1 $baz
+ L15 #1 INIT_FCALL 112 "var_dump"
+ L15 #2 INIT_FCALL 112 "strrev"
+ L15 #3 SEND_VAR $baz 1
+ L15 #4 DO_ICALL @0
+ L15 #5 SEND_VAR @0 1
+ L15 #6 DO_ICALL
+ L15 #7 RETURN null
+prompt> [User Class: Foo\Bar (2 methods)]
+L5-7 Foo\Bar::Foo() %s - %s + 5 ops
+ L5 #0 RECV 1 $bar
+ L6 #1 INIT_NS_FCALL_BY_NAME "Foo\\var_dump"
+ L6 #2 SEND_VAR_EX $bar 1
+ L6 #3 DO_FCALL
+ L6 #4 RETURN null
+L9-9 Foo\Bar::baz() %s - %s + 1 ops
+ L9 #0 RETURN null
+prompt> [Not Executing!]
+prompt> [Context %s (11 ops)]
+L1-19 {main}() %s - %s + 11 ops
+ L4 #0 NOP
+ L14 #1 NOP
+ L18 #2 NEW "Foo\\Bar" @1
+ L18 #3 DO_FCALL
+ L18 #4 INIT_METHOD_CALL @1 "Foo"
+ L18 #5 SEND_VAL_EX "test" 1
+ L18 #6 DO_FCALL
+ L19 #7 INIT_FCALL 144 "foo"
+ L19 #8 SEND_VAL "test" 1
+ L19 #9 DO_FCALL
+ L19 #10 RETURN 1
+prompt>
+--FILE--
+<?php
+
+namespace Foo {
+ class Bar {
+ function Foo($bar) {
+ var_dump($bar);
+ }
+
+ function baz() { }
+ }
+}
+
+namespace {
+ function foo($baz) {
+ var_dump(strrev($baz));
+ }
+
+ (new \Foo\Bar)->Foo("test");
+ foo("test");
+}
diff --git a/sapi/phpdbg/tests/print_002.phpt b/sapi/phpdbg/tests/print_002.phpt
new file mode 100644
index 0000000000..40eca446a9
--- /dev/null
+++ b/sapi/phpdbg/tests/print_002.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Relative print commands
+--INI--
+opcache.enable_cli=0
+--PHPDBG--
+b foo
+r
+p
+p o
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> [Breakpoint #0 added at foo]
+prompt> string(4) "test"
+[Breakpoint #0 in foo() at %s:15, hits: 1]
+>00015: var_dump(strrev($baz));
+ 00016: }
+ 00017:
+prompt> [Stack in foo() (8 ops)]
+L14-16 foo() %s - %s + 8 ops
+ L14 #0 RECV 1 $baz
+ L15 #1 INIT_FCALL 112 "var_dump"
+ L15 #2 INIT_FCALL 112 "strrev"
+ L15 #3 SEND_VAR $baz 1
+ L15 #4 DO_ICALL @0
+ L15 #5 SEND_VAR @0 1
+ L15 #6 DO_ICALL
+ L15 #7 RETURN null
+prompt> [L15 %s INIT_FCALL 112 "var_dump" %s]
+prompt>
+--FILE--
+<?php
+
+namespace Foo {
+ class Bar {
+ function Foo($bar) {
+ var_dump($bar);
+ }
+
+ function baz() { }
+ }
+}
+
+namespace {
+ function foo($baz) {
+ var_dump(strrev($baz));
+ }
+
+ (new \Foo\Bar)->Foo("test");
+ foo("test");
+}
diff --git a/sapi/phpdbg/tests/run-tests.php b/sapi/phpdbg/tests/run-tests.php
deleted file mode 100644
index 4afb64561c..0000000000
--- a/sapi/phpdbg/tests/run-tests.php
+++ /dev/null
@@ -1,597 +0,0 @@
-<?php
-namespace phpdbg\testing {
-
- /*
- * Workaround ...
- */
- if (!defined('DIR_SEP'))
- define('DIR_SEP', '\\' . DIRECTORY_SEPARATOR);
-
- /**
- * TestConfigurationExceptions are thrown
- * when the configuration prohibits tests executing
- *
- * @package phpdbg
- * @subpackage testing
- */
- class TestConfigurationException extends \Exception {
-
- /**
- *
- * @param array Tests confguration
- * @param message Exception message
- * @param ... formatting parameters
- */
- public function __construct() {
- $argv = func_get_args();
-
- if (count($argv)) {
-
- $this->config = array_shift($argv);
- $this->message = vsprintf(
- array_shift($argv), $argv);
- }
- }
- }
-
- /**
- *
- * @package phpdbg
- * @subpackage testing
- */
- class TestsConfiguration implements \ArrayAccess {
-
- /**
- *
- * @param array basic configuration
- * @param array argv
- */
- public function __construct($config, $cmd) {
- $this->options = $config;
- while (($key = array_shift($cmd))) {
- switch (substr($key, 0, 1)) {
- case '-': switch(substr($key, 1, 1)) {
- case '-': {
- $arg = substr($key, 2);
- if (($e=strpos($arg, '=')) !== false) {
- $key = substr($arg, 0, $e);
- $value = substr($arg, $e+1);
- } else {
- $key = $arg;
- $value = array_shift($cmd);
- }
-
- if (isset($key) && isset($value)) {
- switch ($key) {
- case 'phpdbg':
- case 'width':
- $this->options[$key] = $value;
- break;
-
- default: {
- if (isset($config[$key])) {
- if (is_array($config[$key])) {
- $this->options[$key][] = $value;
- } else {
- $this->options[$key] = array($config[$key], $value);
- }
- } else {
- $this->options[$key] = $value;
- }
- }
- }
-
- }
- } break;
-
- default:
- $this->flags[] = substr($key, 1);
- } break;
- }
- }
-
- if (!is_executable($this->options['phpdbg'])) {
- throw new TestConfigurationException(
- $this->options, 'phpdbg could not be found at the specified path (%s)', $this->options['phpdbg']);
- } else $this->options['phpdbg'] = realpath($this->options['phpdbg']);
-
- $this->options['width'] = (integer) $this->options['width'];
-
- /* display properly, all the time */
- if ($this->options['width'] < 50) {
- $this->options['width'] = 50;
- }
-
- /* calculate column widths */
- $this->options['lwidth'] = ceil($this->options['width'] / 3);
- $this->options['rwidth'] = ceil($this->options['width'] - $this->options['lwidth']) - 5;
- }
-
- public function hasFlag($flag) {
- return in_array(
- $flag, $this->flags);
- }
-
- public function offsetExists($offset) { return isset($this->options[$offset]); }
- public function offsetGet($offset) { return $this->options[$offset]; }
- public function offsetUnset($offset) { unset($this->options[$offset]); }
- public function offsetSet($offset, $data) { $this->options[$offset] = $data; }
-
- protected $options = array();
- protected $flags = array();
- }
-
- /**
- * Tests is the console programming API for the test suite
- *
- * @package phpdbg
- * @subpackage testing
- */
- class Tests {
-
- /**
- * Construct the console object
- *
- * @param array basic configuration
- * @param array command line
- */
- public function __construct(TestsConfiguration $config) {
- $this->config = $config;
-
- if ($this->config->hasFlag('help') ||
- $this->config->hasFlag('h')) {
- $this->showUsage();
- exit;
- }
- }
-
- /**
- * Find valid paths as specified by configuration
- *
- */
- public function findPaths($in = null) {
- $paths = array();
- $where = ($in != null) ? array($in) : $this->config['path'];
-
- foreach ($where as $path) {
- if ($path) {
- if (is_dir($path)) {
- $paths[] = $path;
- foreach (scandir($path) as $child) {
- if ($child != '.' && $child != '..') {
- $paths = array_merge(
- $paths, $this->findPaths("$path/$child"));
- }
- }
- }
- }
- }
-
- return $paths;
- }
-
- /**
- *
- * @param string the path to log
- */
- public function logPath($path) {
- printf(
- '%s [%s]%s',
- str_repeat(
- '-', $this->config['width'] - strlen($path)),
- $path, PHP_EOL);
- }
-
- /**
- *
- * @param string the path to log
- */
- public function logPathStats($path) {
- if (!isset($this->stats[$path])) {
- return;
- }
-
- $total = array_sum($this->stats[$path]);
-
- if ($total) {
- @$this->totals[true] += $this->stats[$path][true];
- @$this->totals[false] += $this->stats[$path][false];
-
- $stats = @sprintf(
- "%d/%d %%%d",
- $this->stats[$path][true],
- $this->stats[$path][false],
- (100 / $total) * $this->stats[$path][true]);
-
- printf(
- '%s [%s]%s',
- str_repeat(
- ' ', $this->config['width'] - strlen($stats)),
- $stats, PHP_EOL);
-
- printf("%s%s", str_repeat('-', $this->config['width']+3), PHP_EOL);
- printf("%s", PHP_EOL);
- }
- }
-
- /**
- *
- */
- public function logStats() {
- $total = array_sum($this->totals);
- $stats = @sprintf(
- "%d/%d %%%d",
- $this->totals[true],
- $this->totals[false],
- (100 / $total) * $this->totals[true]);
- printf(
- '%s [%s]%s',
- str_repeat(
- ' ', $this->config['width'] - strlen($stats)),
- $stats, PHP_EOL);
-
- }
-
- /**
- *
- */
- protected function showUsage() {
- printf('usage: php %s [flags] [options]%s', $this->config['exec'], PHP_EOL);
- printf('[options]:%s', PHP_EOL);
- printf("\t--path\t\tadd a path to scan outside of tests directory%s", PHP_EOL);
- printf("\t--width\t\tset line width%s", PHP_EOL);
- printf("\t--options\toptions to pass to phpdbg%s", PHP_EOL);
- printf("\t--phpdbg\tpath to phpdbg binary%s", PHP_EOL);
- printf('[flags]:%s', PHP_EOL);
- printf("\t-diff2stdout\t\twrite diff to stdout instead of files%s", PHP_EOL);
- printf("\t-nodiff\t\tdo not write diffs on failure%s", PHP_EOL);
- printf("\t-nolog\t\tdo not write logs on failure%s", PHP_EOL);
- printf('[examples]:%s', PHP_EOL);
- printf("\tphp %s --phpdbg=/usr/local/bin/phpdbg --path=/usr/src/phpdbg/tests --options -n%s",
- $this->config['exec'], PHP_EOL);
-
- }
-
- /**
- * Find valid tests at the specified path (assumed valid)
- *
- * @param string a valid path
- */
- public function findTests($path) {
- $tests = array();
-
- foreach (scandir($path) as $file) {
- if ($file == '.' || $file == '..')
- continue;
-
- $test = sprintf('%s/%s', $path, $file);
-
- if (preg_match('~\.test$~', $test)) {
- $tests[] = new Test($this->config, $test);
- }
- }
-
- return $tests;
- }
-
- /**
- *
- * @param Test the test to log
- */
- public function logTest($path, Test $test) {
- @$this->stats[$path][($result=$test->getResult())]++;
-
- printf(
- "%-{$this->config['lwidth']}s %-{$this->config['rwidth']}s [%s]%s",
- $test->name,
- $test->purpose,
- $result ? "PASS" : "FAIL",
- PHP_EOL);
-
- return $result;
- }
-
- protected $config;
- }
-
- class Test {
- /*
- * Expect exact line for line match
- */
- const EXACT = 0x00000001;
-
- /*
- * Expect strpos() !== false
- */
- const STRING = 0x00000010;
-
- /*
- * Expect stripos() !== false
- */
- const CISTRING = 0x00000100;
-
- /*
- * Formatted output
- */
- const FORMAT = 0x00001000;
-
- /**
- * Format specifiers
- */
- private static $format = array(
- 'search' => array(
- '%e',
- '%s',
- '%S',
- '%a',
- '%A',
- '%w',
- '%i',
- '%d',
- '%x',
- '%f',
- '%c',
- '%t',
- '%T'
- ),
- 'replace' => array(
- DIR_SEP,
- '[^\r\n]+',
- '[^\r\n]*',
- '.+',
- '.*',
- '\s*',
- '[+-]?\d+',
- '\d+',
- '[0-9a-fA-F]+',
- '[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?',
- '.',
- '\t',
- '\t+'
- )
- );
-
- /**
- * Constructs a new Test object given a specilized phpdbginit file
- *
- * @param array configuration
- * @param string file
- */
- public function __construct(TestsConfiguration $config, $file) {
- if (($handle = fopen($file, 'r'))) {
- while (($line = fgets($handle))) {
- $trim = trim($line);
-
- switch (substr($trim, 0, 1)) {
- case '#': if (($chunks = array_map('trim', preg_split('~:~', substr($trim, 1), 2)))) {
- if (property_exists($this, $chunks[0])) {
- switch ($chunks[0]) {
- case 'expect': {
- if ($chunks[1]) {
- switch (strtoupper($chunks[1])) {
- case 'TEST::EXACT':
- case 'EXACT': { $this->expect = TEST::EXACT; } break;
-
- case 'TEST::STRING':
- case 'STRING': { $this->expect = TEST::STRING; } break;
-
- case 'TEST::CISTRING':
- case 'CISTRING': { $this->expect = TEST::CISTRING; } break;
-
- case 'TEST::FORMAT':
- case 'FORMAT': { $this->expect = TEST::FORMAT; } break;
-
- default:
- throw new TestConfigurationException(
- $this->config, "unknown type of expectation (%s)", $chunks[1]);
- }
- }
- } break;
-
- default: {
- $this->{$chunks[0]} = $chunks[1];
- }
- }
- } else switch(substr($trim, 1, 1)) {
- case '#': { /* do nothing */ } break;
-
- default: {
- $line = preg_replace(
- "~(\r\n)~", "\n", substr($trim, 1));
-
- $line = trim($line);
-
- switch ($this->expect) {
- case TEST::FORMAT:
- $this->match[] = str_replace(
- self::$format['search'],
- self::$format['replace'], preg_quote($line));
- break;
-
- default: $this->match[] = $line;
- }
- }
- }
- } break;
-
- default:
- break 2;
- }
- }
- fclose($handle);
-
- $this->config = $config;
- $this->file = $file;
- }
- }
-
- /**
- * Obvious!!
- *
- */
- public function getResult() {
- $options = sprintf('-i%s -nqb', $this->file);
-
- if ($this->options) {
- $options = sprintf(
- '%s %s %s',
- $options,
- $this->config['options'],
- $this->options
- );
- } else {
- $options = sprintf(
- '%s %s', $options, $this->config['options']
- );
- }
-
- $result = `{$this->config['phpdbg']} {$options}`;
-
- if ($result) {
- foreach (preg_split('~(\r|\n)~', $result) as $num => $line) {
- if (!$line && !isset($this->match[$num]))
- continue;
-
- switch ($this->expect) {
- case TEST::EXACT: {
- if (strcmp($line, $this->match[$num]) !== 0) {
- $this->diff['wants'][$num] = &$this->match[$num];
- $this->diff['gets'][$num] = $line;
- }
- } continue 2;
-
- case TEST::STRING: {
- if (strpos($line, $this->match[$num]) === false) {
- $this->diff['wants'][$num] = &$this->match[$num];
- $this->diff['gets'][$num] = $line;
- }
- } continue 2;
-
- case TEST::CISTRING: {
- if (stripos($line, $this->match[$num]) === false) {
- $this->diff['wants'][$num] = &$this->match[$num];
- $this->diff['gets'][$num] = $line;
- }
- } continue 2;
-
- case TEST::FORMAT: {
- $line = trim($line);
- if (!preg_match("/^{$this->match[$num]}\$/s", $line)) {
- $this->diff['wants'][$num] = &$this->match[$num];
- $this->diff['gets'][$num] = $line;
- }
- } continue 2;
- }
- }
- }
-
- $this->writeLog($result);
- $this->writeDiff();
-
- return (count($this->diff) == 0);
- }
-
- /**
- * Write diff to disk if configuration allows it
- *
- */
- protected function writeDiff() {
- if (count($this->diff['wants'])) {
- if (!$this->config->hasFlag('nodiff')) {
- if ($this->config->hasFlag('diff2stdout')) {
- $difffile = "php://stdout";
- file_put_contents($difffile, "====DIFF====\n");
- } else {
- $difffile = sprintf(
- '%s/%s.diff',
- dirname($this->file), basename($this->file));
- }
-
- if (($diff = fopen($difffile, 'w+'))) {
-
- foreach ($this->diff['wants'] as $line => $want) {
- $got = $this->diff['gets'][$line];
-
- fprintf(
- $diff, '(%d) -%s%s', $line+1, $want, PHP_EOL);
- fprintf(
- $diff, '(%d) +%s%s', $line+1, $got, PHP_EOL);
- }
-
- fclose($diff);
- }
- }
- } else unlink($diff);
- }
-
- /**
- * Write log to disk if configuration allows it
- *
- */
- protected function writeLog($result = null) {
- $log = sprintf(
- '%s/%s.log',
- dirname($this->file), basename($this->file));
-
- if (count($this->diff) && $result) {
- if (!in_array('nolog', $this->config['flags'])) {
- @file_put_contents(
- $log, $result);
- }
- } else unlink($log);
- }
-
- public $name;
- public $purpose;
- public $file;
- public $options;
- public $expect;
-
- protected $match;
- protected $diff;
- protected $stats;
- protected $totals;
- }
-}
-
-namespace {
- use \phpdbg\Testing\Test;
- use \phpdbg\Testing\Tests;
- use \phpdbg\Testing\TestsConfiguration;
-
- $cwd = dirname(__FILE__);
- $cmd = $_SERVER['argv'];
-
- $retval = 0;
-
- {
- $config = new TestsConfiguration(array(
- 'exec' => realpath(array_shift($cmd)),
- 'phpdbg' => realpath(sprintf(
- '%s/../phpdbg', $cwd
- )),
- 'path' => array(
- realpath(dirname(__FILE__))
- ),
- 'flags' => array(),
- 'width' => 75
- ), $cmd);
-
- $tests = new Tests($config);
-
- foreach ($tests->findPaths() as $path) {
- $tests->logPath($path);
-
- foreach ($tests->findTests($path) as $test) {
- $retval |= !$tests->logTest($path, $test);
- }
-
- $tests->logPathStats($path);
- }
-
- $tests->logStats();
- }
-
- die($retval);
-}
-?>
diff --git a/sapi/phpdbg/tests/run_001.phpt b/sapi/phpdbg/tests/run_001.phpt
new file mode 100644
index 0000000000..30aab1f17a
--- /dev/null
+++ b/sapi/phpdbg/tests/run_001.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test argv passing
+--PHPDBG--
+r
+r 1 2 3
+r
+q
+--EXPECTF--
+[Successful compilation of %s]
+prompt> int(5)
+array(5) {
+ [0]=>
+ string(%d) "%s"
+ [1]=>
+ string(2) "--"
+ [2]=>
+ string(1) "1"
+ [3]=>
+ string(1) "2"
+ [4]=>
+ string(1) "3"
+}
+[Script ended normally]
+prompt> int(5)
+array(4) {
+ [0]=>
+ string(%d) "%s"
+ [1]=>
+ string(1) "1"
+ [2]=>
+ string(1) "2"
+ [3]=>
+ string(1) "3"
+}
+[Script ended normally]
+prompt> int(5)
+array(5) {
+ [0]=>
+ string(%d) "%s"
+ [1]=>
+ string(2) "--"
+ [2]=>
+ string(1) "1"
+ [3]=>
+ string(1) "2"
+ [4]=>
+ string(1) "3"
+}
+[Script ended normally]
+prompt>
+--ARGS--
+1 2 3
+--FILE--
+<?php
+
+var_dump($argc, $argv);
diff --git a/tests/classes/type_hinting_004.phpt b/tests/classes/type_hinting_004.phpt
index c5f8d3984b..8883f26336 100644
--- a/tests/classes/type_hinting_004.phpt
+++ b/tests/classes/type_hinting_004.phpt
@@ -149,10 +149,10 @@ Ensure type hints are enforced for functions invoked as callbacks.
?>
--EXPECTF--
---> Type hints with callback function:
-1: Argument 1 passed to f1() must be an instance of A, integer given%s(%d)
+0: Argument 1 passed to f1() must be an instance of A, integer given%s(%d)
in f1;
-1: Argument 1 passed to f2() must be an instance of A, integer given%s(%d)
+0: Argument 1 passed to f2() must be an instance of A, integer given%s(%d)
in f2;
in f2;
@@ -160,10 +160,10 @@ in f2;
---> Type hints with callback static method:
-1: Argument 1 passed to C::f1() must be an instance of A, integer given%s(%d)
+0: Argument 1 passed to C::f1() must be an instance of A, integer given%s(%d)
in C::f1 (static);
-1: Argument 1 passed to C::f2() must be an instance of A, integer given%s(%d)
+0: Argument 1 passed to C::f2() must be an instance of A, integer given%s(%d)
in C::f2 (static);
in C::f2 (static);
@@ -171,10 +171,10 @@ in C::f2 (static);
---> Type hints with callback instance method:
-1: Argument 1 passed to D::f1() must be an instance of A, integer given%s(%d)
+0: Argument 1 passed to D::f1() must be an instance of A, integer given%s(%d)
in C::f1 (instance);
-1: Argument 1 passed to D::f2() must be an instance of A, integer given%s(%d)
+0: Argument 1 passed to D::f2() must be an instance of A, integer given%s(%d)
in C::f2 (instance);
in C::f2 (instance);
diff --git a/travis/compile.sh b/travis/compile.sh
index 5478b885c0..6065c1df57 100755
--- a/travis/compile.sh
+++ b/travis/compile.sh
@@ -57,7 +57,6 @@ $TS \
--with-imap \
--with-imap-ssl \
--with-freetype-dir=/usr \
---with-t1lib=/usr \
--with-xpm-dir=/usr \
--with-kerberos \
--enable-sysvmsg