3 function no_dyn() { echo __FUNCTION__
."\n"; }
4 <<__DynamicallyCallable
>> function dyn() { echo __FUNCTION__
."\n"; }
6 <<__DynamicallyCallable
>>
7 function soft_reified_fun
<<<__Soft>> reify T>() { echo __FUNCTION__."\n"; }
10 static function static_no_dyn() { echo __METHOD__."\n"; }
11 function inst_no_dyn() { echo __METHOD__."\n"; }
12 <<__DynamicallyCallable>> static function static_dyn() {echo __METHOD__."\n";}
13 <<__DynamicallyCallable>> function inst_dyn() { echo __METHOD__."\n"; }
15 <<__DynamicallyCallable>>
16 static function soft_reified_meth<<<__Soft>> reify T
>() {
21 function test_it($fname, $cname = null) {
23 if ($cname) $f = HH\
dynamic_class_meth($cname, $fname);
24 else $f = HH\
dynamic_fun($fname);
25 } catch (InvalidArgumentException
$ex) {
26 echo "Caught: ".$ex->getMessage()."\n";
34 set_error_handler(($_n, $str) ==> { echo "Warning: $str\n"; return true; });
38 test_it('static_dyn', 'Cls');
39 test_it('static_no_dyn', 'Cls');
41 test_it('inst_dyn', 'Cls');
42 test_it('inst_no_dyn', 'Cls');
44 test_it('bad_func_name');
45 test_it('bad_meth_name', 'Cls');
46 test_it('static_dyn', 'BadClassName');
48 test_it('soft_reified_fun');
49 test_it('soft_reified_meth', 'Cls');