mirror of
https://github.com/php/php-src.git
synced 2026-04-28 02:33:17 +02:00
efbdcb8e49
PHP is already already using "Parameter" instead of "Argument" for reflection on types elsewhere. Parameter is used to refer to the function declarations (AST_PARAM internally in the AST, ReflectionFunctionAbstract->getParameters(), etc.) Argument is used to refer to expressions passed to the functions by the caller (ArgumentCountError, etc.). (Error messages were also changed in php 8.x to refer to passing too many arguments to a function) Other languages use similar definitions, e.g. https://developer.mozilla.org/en-US/docs/Glossary/Parameter
96 lines
2.3 KiB
PHP
96 lines
2.3 KiB
PHP
--TEST--
|
|
FFI 046: FFI::CType reflection API
|
|
--EXTENSIONS--
|
|
ffi
|
|
--INI--
|
|
ffi.enable=1
|
|
--FILE--
|
|
<?php
|
|
$x = FFI::type("uint8_t");
|
|
var_dump($x->getKind() === $x::TYPE_UINT8);
|
|
var_dump($x->getSize());
|
|
var_dump($x->getAlignment());
|
|
|
|
$x = FFI::type("enum __attribute__((packed)) {a2, b2}");
|
|
var_dump($x->getKind() === $x::TYPE_ENUM);
|
|
var_dump($x->getEnumKind() === $x::TYPE_UINT8);
|
|
|
|
$x = FFI::type("char[5]");
|
|
var_dump($x->getKind() === $x::TYPE_ARRAY);
|
|
var_dump($x->getSize());
|
|
var_dump($x->getArrayElementType()->getKind() === $x::TYPE_CHAR);
|
|
var_dump($x->getArrayLength());
|
|
|
|
$x = FFI::type("void*");
|
|
var_dump($x->getKind() === $x::TYPE_POINTER);
|
|
var_dump($x->getPointerType()->getKind() === $x::TYPE_VOID);
|
|
|
|
$x = FFI::type("struct {double x; double y;}");
|
|
var_dump($x->getKind() === $x::TYPE_STRUCT);
|
|
var_dump(($x->getAttributes() & $x::ATTR_UNION) != 0);
|
|
var_dump($x->getStructFieldNames());
|
|
var_dump($x->getStructFieldOffset("x"));
|
|
var_dump($x->getStructFieldOffset("y"));
|
|
var_dump($x->getStructFieldType("x")->getKind() == $x::TYPE_DOUBLE);
|
|
var_dump($x->getStructFieldType("y")->getKind() == $x::TYPE_DOUBLE);
|
|
|
|
$x = FFI::type("union {double x; double y;}");
|
|
var_dump($x->getKind() === $x::TYPE_STRUCT);
|
|
var_dump(($x->getAttributes() & $x::ATTR_UNION) != 0);
|
|
var_dump($x->getStructFieldNames());
|
|
var_dump($x->getStructFieldOffset("x"));
|
|
var_dump($x->getStructFieldOffset("y"));
|
|
var_dump($x->getStructFieldType("x")->getKind() == $x::TYPE_DOUBLE);
|
|
var_dump($x->getStructFieldType("y")->getKind() == $x::TYPE_DOUBLE);
|
|
|
|
$x = FFI::type("void (*)(double,int32_t)");
|
|
var_dump($x->getKind() === $x::TYPE_POINTER);
|
|
var_dump($x->getPointerType()->getKind() === $x::TYPE_FUNC);
|
|
var_dump($x->getPointerType()->getFuncReturnType()->getKind() === $x::TYPE_VOID);
|
|
var_dump($x->getPointerType()->getFuncParameterCount());
|
|
var_dump($x->getPointerType()->getFuncParameterType(0)->getKind() === $x::TYPE_DOUBLE);
|
|
var_dump($x->getPointerType()->getFuncParameterType(1)->getKind() === $x::TYPE_SINT32);
|
|
?>
|
|
--EXPECT--
|
|
bool(true)
|
|
int(1)
|
|
int(1)
|
|
bool(true)
|
|
bool(true)
|
|
bool(true)
|
|
int(5)
|
|
bool(true)
|
|
int(5)
|
|
bool(true)
|
|
bool(true)
|
|
bool(true)
|
|
bool(false)
|
|
array(2) {
|
|
[0]=>
|
|
string(1) "x"
|
|
[1]=>
|
|
string(1) "y"
|
|
}
|
|
int(0)
|
|
int(8)
|
|
bool(true)
|
|
bool(true)
|
|
bool(true)
|
|
bool(true)
|
|
array(2) {
|
|
[0]=>
|
|
string(1) "x"
|
|
[1]=>
|
|
string(1) "y"
|
|
}
|
|
int(0)
|
|
int(0)
|
|
bool(true)
|
|
bool(true)
|
|
bool(true)
|
|
bool(true)
|
|
bool(true)
|
|
int(2)
|
|
bool(true)
|
|
bool(true)
|