PageRenderTime 39ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/hphp/test/slow/control-flow/bug-xls-liveness.php

http://github.com/facebook/hiphop-php
PHP | 89 lines | 88 code | 1 blank | 0 comment | 11 complexity | 1ee1e712430a35050149bb1c36e6f459 MD5 | raw file
Possible License(s): LGPL-2.1, BSD-2-Clause, BSD-3-Clause, MPL-2.0-no-copyleft-exception, MIT, LGPL-2.0, Apache-2.0
  1. <?hh
  2. function strip_hh_prefix($str, $nonobject_types_only = false) {
  3. if (!is_string($str)) {
  4. return $str;
  5. }
  6. if (!is_int(stripos($str, 'HH\\'))) {
  7. // Bail out early if $str doesn't contain 'HH\'
  8. return $str;
  9. }
  10. $nonobject_types = ImmSet {
  11. 'bool', 'boolean', 'int', 'integer', 'float', 'double', 'real', 'num',
  12. 'string', 'resource', 'mixed', 'void', 'this', 'arraykey',
  13. };
  14. $len = strlen($str);
  15. $in_literal = '';
  16. $out = '';
  17. $c = ' ';
  18. for ($i = 0; $i < $len; ++$i) {
  19. $prev = $c;
  20. $c = $str[$i];
  21. if ($in_literal) {
  22. if ($c === '\\') {
  23. $out .= $c;
  24. ++$i;
  25. if ($i >= $len) break;
  26. $c = $str[$i];
  27. $out .= $c;
  28. continue;
  29. }
  30. if ($c === $in_literal) {
  31. $in_literal = '';
  32. }
  33. } else {
  34. if (($c === 'H' || $c === 'h') &&
  35. strtoupper(substr($str, $i, 3)) === "HH\\" &&
  36. !ctype_alnum($prev) && $prev !== '_' && $prev !== '\\') {
  37. if ($nonobject_types_only) {
  38. $sub = substr($str, $i + 3, 9);
  39. $sub_len = strlen($sub);
  40. $k = 0;
  41. for (; $k < $sub_len; ++$k) {
  42. $sub_c = $sub[$k];
  43. if (!ctype_alnum($sub_c) && $sub_c !== '_' && $sub_c !== '\\') {
  44. break;
  45. }
  46. }
  47. $sub = strtolower(substr($sub, 0, $k));
  48. $strip = ($nonobject_types->contains($sub));
  49. } else {
  50. $strip = true;
  51. }
  52. if ($strip) {
  53. $i += 2;
  54. $c = '\\';
  55. continue;
  56. }
  57. }
  58. if ($c === '\'' || $c === '"') {
  59. $in_literal = $c;
  60. }
  61. }
  62. $out .= $c;
  63. }
  64. return $out;
  65. }
  66. function main() {
  67. var_dump(strip_hh_prefix("HH\\bool", true));
  68. var_dump(strip_hh_prefix("HH\\boolean", true));
  69. var_dump(strip_hh_prefix("HH\\int", true));
  70. var_dump(strip_hh_prefix("HH\\integer", true));
  71. var_dump(strip_hh_prefix("HH\\float", true));
  72. var_dump(strip_hh_prefix("HH\\double", true));
  73. var_dump(strip_hh_prefix("HH\\real", true));
  74. var_dump(strip_hh_prefix("HH\\num", true));
  75. var_dump(strip_hh_prefix("HH\\string", true));
  76. var_dump(strip_hh_prefix("HH\\resource", true));
  77. var_dump(strip_hh_prefix("HH\\mixed", true));
  78. var_dump(strip_hh_prefix("HH\\void", true));
  79. var_dump(strip_hh_prefix("HH\\this", true));
  80. var_dump(strip_hh_prefix("HH\\arraykey", true));
  81. }
  82. <<__EntryPoint>>
  83. function main_bug_xls_liveness() {
  84. main();
  85. }