046.phpt 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. --TEST--
  2. FFI 046: FFI::CType reflection API
  3. --EXTENSIONS--
  4. ffi
  5. --INI--
  6. ffi.enable=1
  7. --FILE--
  8. <?php
  9. $x = FFI::type("uint8_t");
  10. var_dump($x->getKind() === $x::TYPE_UINT8);
  11. var_dump($x->getSize());
  12. var_dump($x->getAlignment());
  13. $x = FFI::type("enum __attribute__((packed)) {a2, b2}");
  14. var_dump($x->getKind() === $x::TYPE_ENUM);
  15. var_dump($x->getEnumKind() === $x::TYPE_UINT8);
  16. $x = FFI::type("char[5]");
  17. var_dump($x->getKind() === $x::TYPE_ARRAY);
  18. var_dump($x->getSize());
  19. var_dump($x->getArrayElementType()->getKind() === $x::TYPE_CHAR);
  20. var_dump($x->getArrayLength());
  21. $x = FFI::type("void*");
  22. var_dump($x->getKind() === $x::TYPE_POINTER);
  23. var_dump($x->getPointerType()->getKind() === $x::TYPE_VOID);
  24. $x = FFI::type("struct {double x; double y;}");
  25. var_dump($x->getKind() === $x::TYPE_STRUCT);
  26. var_dump(($x->getAttributes() & $x::ATTR_UNION) != 0);
  27. var_dump($x->getStructFieldNames());
  28. var_dump($x->getStructFieldOffset("x"));
  29. var_dump($x->getStructFieldOffset("y"));
  30. var_dump($x->getStructFieldType("x")->getKind() == $x::TYPE_DOUBLE);
  31. var_dump($x->getStructFieldType("y")->getKind() == $x::TYPE_DOUBLE);
  32. $x = FFI::type("union {double x; double y;}");
  33. var_dump($x->getKind() === $x::TYPE_STRUCT);
  34. var_dump(($x->getAttributes() & $x::ATTR_UNION) != 0);
  35. var_dump($x->getStructFieldNames());
  36. var_dump($x->getStructFieldOffset("x"));
  37. var_dump($x->getStructFieldOffset("y"));
  38. var_dump($x->getStructFieldType("x")->getKind() == $x::TYPE_DOUBLE);
  39. var_dump($x->getStructFieldType("y")->getKind() == $x::TYPE_DOUBLE);
  40. $x = FFI::type("void (*)(double,int32_t)");
  41. var_dump($x->getKind() === $x::TYPE_POINTER);
  42. var_dump($x->getPointerType()->getKind() === $x::TYPE_FUNC);
  43. var_dump($x->getPointerType()->getFuncReturnType()->getKind() === $x::TYPE_VOID);
  44. var_dump($x->getPointerType()->getFuncParameterCount());
  45. var_dump($x->getPointerType()->getFuncParameterType(0)->getKind() === $x::TYPE_DOUBLE);
  46. var_dump($x->getPointerType()->getFuncParameterType(1)->getKind() === $x::TYPE_SINT32);
  47. ?>
  48. --EXPECT--
  49. bool(true)
  50. int(1)
  51. int(1)
  52. bool(true)
  53. bool(true)
  54. bool(true)
  55. int(5)
  56. bool(true)
  57. int(5)
  58. bool(true)
  59. bool(true)
  60. bool(true)
  61. bool(false)
  62. array(2) {
  63. [0]=>
  64. string(1) "x"
  65. [1]=>
  66. string(1) "y"
  67. }
  68. int(0)
  69. int(8)
  70. bool(true)
  71. bool(true)
  72. bool(true)
  73. bool(true)
  74. array(2) {
  75. [0]=>
  76. string(1) "x"
  77. [1]=>
  78. string(1) "y"
  79. }
  80. int(0)
  81. int(0)
  82. bool(true)
  83. bool(true)
  84. bool(true)
  85. bool(true)
  86. bool(true)
  87. int(2)
  88. bool(true)
  89. bool(true)