Handle this typehints
[hiphop-php.git] / hphp / test / slow / control-flow / bug-xls-liveness.php
blob91dd1c239da201cf8139c5181b1632709f9c3bb2
1 <?hh
3 function strip_hh_prefix($str, $nonobject_types_only = false) {
4 if (!is_string($str)) {
5 return $str;
7 if (!is_int(stripos($str, 'HH\\'))) {
8 // Bail out early if $str doesn't contain 'HH\'
9 return $str;
11 $nonobject_types = ImmSet {
12 'bool', 'boolean', 'int', 'integer', 'float', 'double', 'real', 'num',
13 'string', 'resource', 'mixed', 'void', 'this', 'arraykey',
15 $len = strlen($str);
16 $in_literal = '';
17 $out = '';
18 $c = ' ';
19 for ($i = 0; $i < $len; ++$i) {
20 $prev = $c;
21 $c = $str[$i];
22 if ($in_literal) {
23 if ($c === '\\') {
24 $out .= $c;
25 ++$i;
26 if ($i >= $len) break;
27 $c = $str[$i];
28 $out .= $c;
29 continue;
31 if ($c === $in_literal) {
32 $in_literal = '';
34 } else {
35 if (($c === 'H' || $c === 'h') &&
36 strtoupper(substr($str, $i, 3)) === "HH\\" &&
37 !ctype_alnum($prev) && $prev !== '_' && $prev !== '\\') {
38 if ($nonobject_types_only) {
39 $sub = substr($str, $i + 3, 9);
40 $sub_len = strlen($sub);
41 $k = 0;
42 for (; $k < $sub_len; ++$k) {
43 $sub_c = $sub[$k];
44 if (!ctype_alnum($sub_c) && $sub_c !== '_' && $sub_c !== '\\') {
45 break;
48 $sub = strtolower(substr($sub, 0, $k));
49 $strip = ($nonobject_types->contains($sub));
50 } else {
51 $strip = true;
53 if ($strip) {
54 $i += 2;
55 $c = '\\';
56 continue;
59 if ($c === '\'' || $c === '"') {
60 $in_literal = $c;
63 $out .= $c;
65 return $out;
68 function main() {
69 var_dump(strip_hh_prefix("HH\\bool", true));
70 var_dump(strip_hh_prefix("HH\\boolean", true));
71 var_dump(strip_hh_prefix("HH\\int", true));
72 var_dump(strip_hh_prefix("HH\\integer", true));
73 var_dump(strip_hh_prefix("HH\\float", true));
74 var_dump(strip_hh_prefix("HH\\double", true));
75 var_dump(strip_hh_prefix("HH\\real", true));
76 var_dump(strip_hh_prefix("HH\\num", true));
77 var_dump(strip_hh_prefix("HH\\string", true));
78 var_dump(strip_hh_prefix("HH\\resource", true));
79 var_dump(strip_hh_prefix("HH\\mixed", true));
80 var_dump(strip_hh_prefix("HH\\void", true));
81 var_dump(strip_hh_prefix("HH\\this", true));
82 var_dump(strip_hh_prefix("HH\\arraykey", true));
85 main();