004.phpt 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. --TEST--
  2. FFI 004: Enum declarations
  3. --EXTENSIONS--
  4. ffi
  5. --INI--
  6. ffi.enable=1
  7. --FILE--
  8. <?php
  9. $ffi = FFI::cdef(<<<EOF
  10. enum _a;
  11. enum _a {e1};
  12. enum _b {e2};
  13. enum _b;
  14. typedef enum _c c;
  15. enum _c {e3};
  16. enum _d {e4};
  17. typedef enum _d d;
  18. enum _e;
  19. enum _f;
  20. typedef enum _f f;
  21. enum _g {
  22. _c1,
  23. _c2,
  24. _c3 = 1,
  25. _c4,
  26. };
  27. EOF
  28. );
  29. var_dump($ffi->new("enum _a"));
  30. var_dump($ffi->new("enum _b"));
  31. var_dump($ffi->new("c"));
  32. var_dump($ffi->new("d"));
  33. var_dump($ffi->new("int[_c2]"));
  34. var_dump($ffi->new("int[_c3]"));
  35. var_dump($ffi->new("int[_c4]"));
  36. try {
  37. var_dump($ffi->new("enum _e"));
  38. } catch (Throwable $e) {
  39. echo get_class($e) . ": " . $e->getMessage()."\n";
  40. }
  41. try {
  42. var_dump($ffi->new("f"));
  43. } catch (Throwable $e) {
  44. echo get_class($e) . ": " . $e->getMessage()."\n";
  45. }
  46. echo "ok\n";
  47. ?>
  48. --EXPECTF--
  49. object(FFI\CData:enum _a)#%d (1) {
  50. ["cdata"]=>
  51. int(0)
  52. }
  53. object(FFI\CData:enum _b)#%d (1) {
  54. ["cdata"]=>
  55. int(0)
  56. }
  57. object(FFI\CData:enum _c)#%d (1) {
  58. ["cdata"]=>
  59. int(0)
  60. }
  61. object(FFI\CData:enum _d)#%d (1) {
  62. ["cdata"]=>
  63. int(0)
  64. }
  65. object(FFI\CData:int32_t[1])#%d (1) {
  66. [0]=>
  67. int(0)
  68. }
  69. object(FFI\CData:int32_t[1])#%d (1) {
  70. [0]=>
  71. int(0)
  72. }
  73. object(FFI\CData:int32_t[2])#%d (2) {
  74. [0]=>
  75. int(0)
  76. [1]=>
  77. int(0)
  78. }
  79. FFI\ParserException: Incomplete enum "_e" at line 1
  80. FFI\ParserException: Incomplete enum "_f" at line 1
  81. ok