xref: /PHP-7.4/ext/ffi/tests/003.phpt (revision e623df65)
1--TEST--
2FFI 003: Forward tag/typedef declarations
3--SKIPIF--
4<?php require_once('skipif.inc'); ?>
5--INI--
6ffi.enable=1
7--FILE--
8<?php
9$ffi = FFI::cdef(<<<EOF
10struct _a;
11struct _a {int x;};
12
13struct _b {int x;};
14struct _b;
15
16typedef struct _c c;
17struct _c {int x;};
18
19struct _d {int x;};
20typedef struct _d d;
21
22struct _e;
23
24struct _f;
25typedef struct _f f;
26EOF
27);
28var_dump($ffi->new("struct _a"));
29var_dump($ffi->new("struct _b"));
30var_dump($ffi->new("c"));
31var_dump($ffi->new("d"));
32try {
33	var_dump($ffi->new("struct _e"));
34} catch (Throwable $e) {
35	echo get_class($e) . ": " . $e->getMessage()."\n";
36}
37try {
38	var_dump($ffi->new("f"));
39} catch (Throwable $e) {
40	echo get_class($e) . ": " . $e->getMessage()."\n";
41}
42echo "ok\n";
43?>
44--EXPECTF--
45object(FFI\CData:struct _a)#%d (1) {
46  ["x"]=>
47  int(0)
48}
49object(FFI\CData:struct _b)#%d (1) {
50  ["x"]=>
51  int(0)
52}
53object(FFI\CData:struct _c)#%d (1) {
54  ["x"]=>
55  int(0)
56}
57object(FFI\CData:struct _d)#%d (1) {
58  ["x"]=>
59  int(0)
60}
61FFI\ParserException: incomplete 'struct _e' at line 1
62FFI\ParserException: incomplete 'struct _f' at line 1
63ok
64