1--TEST-- 2FFI 040: Support for scalar types 3--EXTENSIONS-- 4ffi 5--SKIPIF-- 6<?php 7if (pack('S', 0xABCD) !== pack('v', 0xABCD)) { 8 die('skip for little-endian architectures only'); 9} 10?> 11--INI-- 12ffi.enable=1 13--FILE-- 14<?php 15$ffi = FFI::cdef(); 16 17$x = $ffi->new("int"); 18$x->cdata = 5; 19var_dump($x); 20var_dump(FFI::typeof($x)); 21var_dump($ffi->cast("int8_t[4]", $x)); 22$p = FFI::addr($x); 23var_dump($p); 24$p[0] += 2; 25var_dump($x); 26var_dump(FFI::sizeof($x)); 27var_dump(FFI::alignof($x)); 28FFI::memset($x, ord("a"), 4); 29var_dump(FFI::string($x, 4)); 30 31echo "\n"; 32 33$y = FFI::cdef()->new("int[2]"); 34$y[0] = 6; 35var_dump($y[0]); 36var_dump(FFI::typeof($y[0])); 37var_dump(FFI::cdef()->cast("int8_t[4]", $y[0])); 38$p = FFI::addr($y[0]); 39var_dump($p); 40$p[0] += 2; 41var_dump($y[0]); 42var_dump(FFI::sizeof($y[0])); 43var_dump(FFI::alignof($y[0])); 44FFI::memset($y[0], ord("b"), 4); 45var_dump(FFI::string($y[0], 4)); 46 47echo "\n"; 48 49var_dump(FFI::memcmp($x, $y[0], 4)); 50FFI::memcpy($x, $y[0], 4); 51var_dump(FFI::memcmp($x, $y[0], 4)); 52?> 53--EXPECTF-- 54object(FFI\CData:int32_t)#%d (1) { 55 ["cdata"]=> 56 int(5) 57} 58object(FFI\CType:int32_t)#%d (0) { 59} 60object(FFI\CData:int8_t[4])#%d (4) { 61 [0]=> 62 int(5) 63 [1]=> 64 int(0) 65 [2]=> 66 int(0) 67 [3]=> 68 int(0) 69} 70object(FFI\CData:int32_t*)#%d (1) { 71 [0]=> 72 int(5) 73} 74object(FFI\CData:int32_t)#%d (1) { 75 ["cdata"]=> 76 int(7) 77} 78int(4) 79int(4) 80string(4) "aaaa" 81 82int(6) 83object(FFI\CType:int32_t)#%d (0) { 84} 85object(FFI\CData:int8_t[4])#%d (4) { 86 [0]=> 87 int(6) 88 [1]=> 89 int(0) 90 [2]=> 91 int(0) 92 [3]=> 93 int(0) 94} 95object(FFI\CData:int32_t*)#%d (1) { 96 [0]=> 97 int(6) 98} 99int(8) 100int(4) 101int(4) 102string(4) "bbbb" 103 104int(-1) 105int(0) 106