TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.2 KiB
65 lines
1.2 KiB
--TEST--
|
|
Native class: a throwing derived finalizer does not skip base finalizers
|
|
--FILE--
|
|
<?php
|
|
|
|
#[Native]
|
|
class NativeThrowingFinalizerBase
|
|
{
|
|
public function __destruct()
|
|
{
|
|
global $events;
|
|
$events[] = 'base';
|
|
}
|
|
}
|
|
|
|
#[Native]
|
|
class NativeThrowingFinalizerChild extends NativeThrowingFinalizerBase
|
|
{
|
|
public function __destruct()
|
|
{
|
|
global $events;
|
|
$events[] = 'child';
|
|
throw new RuntimeException('child finalizer failed');
|
|
}
|
|
}
|
|
|
|
#[Native]
|
|
class NativeFinalizerPressureObject
|
|
{
|
|
public int $value;
|
|
}
|
|
|
|
function collectThrowingFinalizer(): void
|
|
{
|
|
for ($i = 0; $i < 400000; $i++) {
|
|
try {
|
|
$filler = new NativeFinalizerPressureObject();
|
|
} catch (RuntimeException $error) {
|
|
echo $error->getMessage(), "\n";
|
|
return;
|
|
}
|
|
}
|
|
echo "finalizer did not run\n";
|
|
}
|
|
|
|
function main(): void
|
|
{
|
|
global $events;
|
|
$events = [];
|
|
|
|
$object = new NativeThrowingFinalizerChild();
|
|
$object = null;
|
|
collectThrowingFinalizer();
|
|
var_dump($events);
|
|
}
|
|
|
|
?>
|
|
--EXPECT--
|
|
child finalizer failed
|
|
array(2) {
|
|
[0]=>
|
|
string(5) "child"
|
|
[1]=>
|
|
string(4) "base"
|
|
}
|
|
|