041.phpt 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. --TEST--
  2. FFI 041: Type memory management
  3. --EXTENSIONS--
  4. ffi
  5. --INI--
  6. ffi.enable=1
  7. --FILE--
  8. <?php
  9. function test_new_ownership($str, $transfer) {
  10. if ($transfer) {
  11. return FFI::new(FFI::type($str));
  12. } else {
  13. $type = FFI::type($str);
  14. return FFI::new($type);
  15. }
  16. }
  17. var_dump(test_new_ownership("int", 1));
  18. var_dump(test_new_ownership("int[2]", 1));
  19. var_dump(test_new_ownership("int", 0));
  20. var_dump(test_new_ownership("int[2]", 0));
  21. function test_type_ownership($str, $transfer) {
  22. if ($transfer) {
  23. return FFI::typeof(FFI::new($str));
  24. } else {
  25. $data = FFI::new($str);
  26. return FFI::typeof($data);
  27. }
  28. }
  29. var_dump(test_type_ownership("int", 1));
  30. var_dump(test_type_ownership("int[2]", 1));
  31. var_dump(test_type_ownership("int", 0));
  32. var_dump(test_type_ownership("int[2]", 0));
  33. function test_cast_ownership($str, $transfer) {
  34. if ($transfer) {
  35. return FFI::cast(FFI::type($str), FFI::new($str));
  36. } else {
  37. $type = FFI::type($str);
  38. return FFI::cast($type, FFI::new($str));
  39. }
  40. }
  41. var_dump(test_cast_ownership("int", 1));
  42. var_dump(test_cast_ownership("int[2]", 1));
  43. var_dump(test_cast_ownership("int", 0));
  44. var_dump(test_cast_ownership("int[2]", 0));
  45. function test_array_ownership($str, $transfer) {
  46. if ($transfer) {
  47. return FFI::arrayType(FFI::type($str), [2]);
  48. } else {
  49. $type = FFI::type($str);
  50. return FFI::arrayType($type, [2]);
  51. }
  52. }
  53. var_dump(test_array_ownership("int", 1));
  54. var_dump(test_array_ownership("int[2]", 1));
  55. var_dump(test_array_ownership("int", 0));
  56. var_dump(test_array_ownership("int[2]", 0));
  57. ?>
  58. --EXPECTF--
  59. object(FFI\CData:int32_t)#%d (1) {
  60. ["cdata"]=>
  61. int(0)
  62. }
  63. object(FFI\CData:int32_t[2])#%d (2) {
  64. [0]=>
  65. int(0)
  66. [1]=>
  67. int(0)
  68. }
  69. object(FFI\CData:int32_t)#%d (1) {
  70. ["cdata"]=>
  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. object(FFI\CType:int32_t)#%d (0) {
  80. }
  81. object(FFI\CType:int32_t[2])#%d (0) {
  82. }
  83. object(FFI\CType:int32_t)#%d (0) {
  84. }
  85. object(FFI\CType:int32_t[2])#%d (0) {
  86. }
  87. object(FFI\CData:int32_t)#%d (1) {
  88. ["cdata"]=>
  89. int(0)
  90. }
  91. object(FFI\CData:int32_t[2])#%d (2) {
  92. [0]=>
  93. int(0)
  94. [1]=>
  95. int(0)
  96. }
  97. object(FFI\CData:int32_t)#%d (1) {
  98. ["cdata"]=>
  99. int(0)
  100. }
  101. object(FFI\CData:int32_t[2])#%d (2) {
  102. [0]=>
  103. int(0)
  104. [1]=>
  105. int(0)
  106. }
  107. object(FFI\CType:int32_t[2])#%s (0) {
  108. }
  109. object(FFI\CType:int32_t[2][2])#%d (0) {
  110. }
  111. object(FFI\CType:int32_t[2])#%d (0) {
  112. }
  113. object(FFI\CType:int32_t[2][2])#%d (0) {
  114. }