2 function handler($errno, $errstr, $errfile, $errline, $errcontext='',
5 if ($errstr === "Hack Array Compat: Comparing PHP array with Hack array") {
6 HackArrCompatCompare
::$got_notice_hack_array = true;
8 if ($errstr === "Hack Array Compat: Comparing PHP array with non any-array") {
9 HackArrCompatCompare
::$got_notice_non_any_array = true;
13 function do_compare_hack_array($cmp) {
14 HackArrCompatCompare
::$got_notice_hack_array = false;
16 return HackArrCompatCompare
::$got_notice_hack_array;
19 function do_compare_non_any_array($cmp) {
20 HackArrCompatCompare
::$got_notice_non_any_array = false;
22 return HackArrCompatCompare
::$got_notice_non_any_array;
25 function exn_wrap($cmp) {
26 try { $cmp(); } catch (Exception
$e) {}
29 function do_compares($a, $b, $cmp) {
30 echo "=========================== Notice Compare =======================\n";
33 echo ($cmp(() ==> exn_wrap(() ==> $a < $b)) ?
'T' : 'F');
34 echo " " . ($cmp(() ==> exn_wrap(() ==> $a <= $b)) ?
'T' : 'F');
35 echo " " . ($cmp(() ==> exn_wrap(() ==> $a > $b)) ?
'T' : 'F');
36 echo " " . ($cmp(() ==> exn_wrap(() ==> $a >= $b)) ?
'T' : 'F');
37 echo " " . ($cmp(() ==> exn_wrap(() ==> $a <=> $b)) ?
'T' : 'F');
38 echo " " . ($cmp(() ==> exn_wrap(() ==> $a == $b)) ?
'T' : 'F');
39 echo " " . ($cmp(() ==> exn_wrap(() ==> $a != $b)) ?
'T' : 'F');
40 echo " " . ($cmp(() ==> exn_wrap(() ==> $a === $b)) ?
'T' : 'F');
41 echo " " . ($cmp(() ==> exn_wrap(() ==> $a !== $b)) ?
'T' : 'F');
42 echo "\n==================================================================\n";
46 set_error_handler(fun('handler'));
48 $x1 = __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[
49 __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[]),
50 __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[1, 2, __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[3, 4])]),
51 __hhvm_intrinsics\
dummy_cast_to_kindofarray(dict
['a' => 'b', 'c' => 'd'])
53 $x2_non_hack_arrays = __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[
62 __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[1, __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[2, 5]), __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[3, 4])]),
63 __hhvm_intrinsics\
dummy_cast_to_kindofarray(dict
['a' => __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[]), 'c' => __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[1, 2])]),
65 $x2_hack_arrays = array(
69 dict
['a' => 'b', 'c' => 'd'],
71 keyset
['a', 'b', 'c'],
72 __hhvm_intrinsics\
dummy_cast_to_kindofarray(vec
[1, 2, vec
[3, 4]]),
75 $do_compare_hack_array_listener
76 = $thunk ==> do_compare_hack_array($thunk);
77 $do_compare_non_any_array_listener
78 = $thunk ==> do_compare_non_any_array($thunk);
81 foreach ($x2_non_hack_arrays as $b) {
82 do_compares($a, $b, $do_compare_non_any_array_listener);
83 do_compares($b, $a, $do_compare_non_any_array_listener);
85 foreach ($x2_hack_arrays as $b) {
86 do_compares($a, $b, $do_compare_hack_array_listener);
87 do_compares($b, $a, $do_compare_hack_array_listener);
91 do_compares(null, null, $do_compare_hack_array_listener);
92 do_compares(true, false, $do_compare_hack_array_listener);
93 do_compares(1, 2, $do_compare_hack_array_listener);
95 do_compares(null, null, $do_compare_non_any_array_listener);
96 do_compares(true, false, $do_compare_non_any_array_listener);
97 do_compares(1, 2, $do_compare_non_any_array_listener);
100 // Copyright 2004-present Facebook. All Rights Reserved.
103 function main_compare() {
109 abstract final class HackArrCompatCompare
{
110 public static $got_notice_hack_array;
111 public static $got_notice_non_any_array;