Arquivos
hhvm/hphp/test/quick/setprofile_throw.php.disable
T
bsimmers 683bb8af52 Fix hhvm tests
I messed up rebasing my Op enum class diff
2013-06-25 13:19:09 -07:00

98 linhas
2.1 KiB
Plaintext

<?php
function throwing_profiler($case, $func) {
if ($case == 'enter' && ($func == 'bar' || $func == 'baz')) {
throw new Exception("yeah");
}
}
function bar() { echo "bar()\n"; }
function baz() { echo "baz()\n"; }
function foo($f) {
$f();
}
function signal_thrower() {
echo "signal throwing\n";
throw new Exception("Sig exception");
}
function func_to_enter() {}
class DtorObj {
public function __construct($x) { $this->x = $x; echo "__ctor $x\n"; }
public function __destruct() { echo "__dtor " . $this->x . "\n"; }
}
// During function exit
function func_entry() {
$x1 = new DtorObj(1);
$x2 = new DtorObj(2);
$x3 = new DtorObj(3);
$x4 = new DtorObj(4);
$x5 = new DtorObj(5);
$x6 = new DtorObj(6);
$x7 = new DtorObj(7);
$x8 = new DtorObj(8);
$x9 = new DtorObj(9);
$xa = new DtorObj(0xa);
$xb = new DtorObj(0xb);
$xc = new DtorObj(0xc);
$xd = new DtorObj(0xd);
$xe = new DtorObj(0xe);
$xf = new DtorObj(0xf);
posix_kill(posix_getpid(), 10);
// Surprise flags are checked on function entry.
func_to_enter();
}
// During backward branches
function func_backward() {
$x1 = new DtorObj(1);
$x2 = new DtorObj(2);
$x3 = new DtorObj(3);
$x4 = new DtorObj(4);
$x5 = new DtorObj(5);
$x6 = new DtorObj(6);
$x7 = new DtorObj(7);
$x8 = new DtorObj(8);
$x9 = new DtorObj(9);
$xa = new DtorObj(0xa);
$xb = new DtorObj(0xb);
$xc = new DtorObj(0xc);
$xd = new DtorObj(0xd);
$xe = new DtorObj(0xe);
$xf = new DtorObj(0xf);
posix_kill(posix_getpid(), 10);
// Surprise flags are checked on backward branch.
for ($i = 0; $i < 2; ++$i) {}
}
function main() {
// Test throwing on function entry
fb_setprofile('throwing_profiler');
try { foo('bar'); } catch (Exception $x) { echo "Caught\n"; }
try { foo('baz'); } catch (Exception $x) { echo "Caught\n"; }
fb_setprofile(null);
// Test throwing exceptions from surprise flags things (OOM, signals,
// and req timeout all work this way).
pcntl_signal(10, 'signal_thrower');
try { func_entry(); } catch (Exception $x) { echo "caught\n"; }
try { func_backward(); } catch (Exception $x) { echo "caught\n"; }
}
main();