004.phpt 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. --TEST--
  2. Match expression mixed jump table
  3. --INI--
  4. opcache.enable=1
  5. opcache.enable_cli=1
  6. opcache.opt_debug_level=0x20000
  7. --EXTENSIONS--
  8. opcache
  9. --FILE--
  10. <?php
  11. function test($value) {
  12. return match ($value) {
  13. 1 => '1 int',
  14. '1' => '1 string',
  15. 2 => '2 int',
  16. '2' => '2 string',
  17. 3 => '3 int',
  18. '3' => '3 string',
  19. 4 => '4 int',
  20. '4' => '4 string',
  21. 5 => '5 int',
  22. '5' => '5 string',
  23. default => 'default',
  24. };
  25. }
  26. foreach (range(0, 6) as $number) {
  27. var_dump(test($number));
  28. var_dump(test((string) $number));
  29. }
  30. ?>
  31. --EXPECTF--
  32. $_main:
  33. ; (lines=22, args=0, vars=1, tmps=2)
  34. ; (after optimizer)
  35. ; %s.php:1-25
  36. 0000 INIT_FCALL 2 %d string("range")
  37. 0001 SEND_VAL int(0) 1
  38. 0002 SEND_VAL int(6) 2
  39. 0003 V2 = DO_ICALL
  40. 0004 V1 = FE_RESET_R V2 0020
  41. 0005 FE_FETCH_R V1 CV0($number) 0020
  42. 0006 INIT_FCALL 1 %d string("var_dump")
  43. 0007 INIT_FCALL 1 %d string("test")
  44. 0008 SEND_VAR CV0($number) 1
  45. 0009 V2 = DO_UCALL
  46. 0010 SEND_VAR V2 1
  47. 0011 DO_ICALL
  48. 0012 INIT_FCALL 1 %d string("var_dump")
  49. 0013 INIT_FCALL 1 %d string("test")
  50. 0014 T2 = CAST (string) CV0($number)
  51. 0015 SEND_VAL T2 1
  52. 0016 V2 = DO_UCALL
  53. 0017 SEND_VAR V2 1
  54. 0018 DO_ICALL
  55. 0019 JMP 0005
  56. 0020 FE_FREE V1
  57. 0021 RETURN int(1)
  58. LIVE RANGES:
  59. 1: 0005 - 0020 (loop)
  60. test:
  61. ; (lines=13, args=1, vars=1, tmps=0)
  62. ; (after optimizer)
  63. ; %s.php:3-17
  64. 0000 CV0($value) = RECV 1
  65. 0001 MATCH CV0($value) 1: 0002, "1": 0003, 2: 0004, "2": 0005, 3: 0006, "3": 0007, 4: 0008, "4": 0009, 5: 0010, "5": 0011, default: 0012
  66. 0002 RETURN string("1 int")
  67. 0003 RETURN string("1 string")
  68. 0004 RETURN string("2 int")
  69. 0005 RETURN string("2 string")
  70. 0006 RETURN string("3 int")
  71. 0007 RETURN string("3 string")
  72. 0008 RETURN string("4 int")
  73. 0009 RETURN string("4 string")
  74. 0010 RETURN string("5 int")
  75. 0011 RETURN string("5 string")
  76. 0012 RETURN string("default")
  77. string(7) "default"
  78. string(7) "default"
  79. string(5) "1 int"
  80. string(8) "1 string"
  81. string(5) "2 int"
  82. string(8) "2 string"
  83. string(5) "3 int"
  84. string(8) "3 string"
  85. string(5) "4 int"
  86. string(8) "4 string"
  87. string(5) "5 int"
  88. string(8) "5 string"
  89. string(7) "default"
  90. string(7) "default"