diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-08-26 15:39:39 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-08-26 15:39:39 +0200 |
commit | a98307df8771f9b7fb0227ac2d4459e1419b887c (patch) | |
tree | d324381bd0df219b4d311e12be17986981485014 | |
parent | e047e9d8939d77484a5d9eac5611622597a3d189 (diff) | |
download | php-git-a98307df8771f9b7fb0227ac2d4459e1419b887c.tar.gz |
Make arginfo printing of prefer-ref arguments nicer
-rw-r--r-- | ext/ffi/ffi_arginfo.h | 18 | ||||
-rw-r--r-- | ext/standard/basic_functions_arginfo.h | 10 | ||||
-rwxr-xr-x | scripts/dev/gen_stub.php | 22 |
3 files changed, 31 insertions, 19 deletions
diff --git a/ext/ffi/ffi_arginfo.h b/ext/ffi/ffi_arginfo.h index 6eea95841a..0dfcd858ae 100644 --- a/ext/ffi/ffi_arginfo.h +++ b/ext/ffi/ffi_arginfo.h @@ -20,12 +20,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_new, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_free, 0, 0, 1) - ZEND_ARG_OBJ_INFO(2, ptr, FFI\\CData, 0) + ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_cast, 0, 0, 2) ZEND_ARG_INFO(0, type) - ZEND_ARG_INFO(2, ptr) + ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_type, 0, 0, 1) @@ -42,30 +42,30 @@ ZEND_END_ARG_INFO() #define arginfo_class_FFI_addr arginfo_class_FFI_free ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_sizeof, 0, 0, 1) - ZEND_ARG_TYPE_INFO(2, ptr, IS_OBJECT, 0) + ZEND_ARG_TYPE_INFO(ZEND_SEND_PREFER_REF, ptr, IS_OBJECT, 0) ZEND_END_ARG_INFO() #define arginfo_class_FFI_alignof arginfo_class_FFI_sizeof ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memcpy, 0, 0, 3) - ZEND_ARG_OBJ_INFO(2, dst, FFI\\CData, 0) - ZEND_ARG_INFO(2, src) + ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, dst, FFI\\CData, 0) + ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, src) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memcmp, 0, 0, 3) - ZEND_ARG_INFO(2, ptr1) - ZEND_ARG_INFO(2, ptr2) + ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr1) + ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr2) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memset, 0, 0, 3) - ZEND_ARG_OBJ_INFO(2, ptr, FFI\\CData, 0) + ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0) ZEND_ARG_TYPE_INFO(0, ch, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_string, 0, 0, 1) - ZEND_ARG_OBJ_INFO(2, ptr, FFI\\CData, 0) + ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index 4ca84cf4c8..f236aa987f 100644 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -151,7 +151,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_array_search, 0, 0, 2) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extract, 0, 1, IS_LONG, 1) - ZEND_ARG_TYPE_INFO(2, arg, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(ZEND_SEND_PREFER_REF, arg, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO(0, extract_type, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -306,10 +306,10 @@ ZEND_END_ARG_INFO() #define arginfo_array_udiff_uassoc arginfo_array_intersect_ukey ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_multisort, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(2, arr1) - ZEND_ARG_INFO(2, sort_order) - ZEND_ARG_INFO(2, sort_flags) - ZEND_ARG_VARIADIC_INFO(2, arr2) + ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arr1) + ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_order) + ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_flags) + ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, arr2) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_array_rand, 0, 0, 1) diff --git a/scripts/dev/gen_stub.php b/scripts/dev/gen_stub.php index 9fa14fc662..f03e4b82c2 100755 --- a/scripts/dev/gen_stub.php +++ b/scripts/dev/gen_stub.php @@ -135,6 +135,18 @@ class ArgInfo { && $this->isVariadic === $other->isVariadic && Type::equals($this->type, $other->type); } + + public function getSendByString(): string { + switch ($this->sendBy) { + case self::SEND_BY_VAL: + return "0"; + case self::SEND_BY_REF: + return "1"; + case self::SEND_PREFER_REF: + return "ZEND_SEND_PREFER_REF"; + } + throw new Exception("Invalid sendBy value"); + } } class ReturnInfo { @@ -373,20 +385,20 @@ function funcInfoToCode(FuncInfo $funcInfo): string { if ($argInfo->type) { if ($argInfo->type->isBuiltin) { $code .= sprintf( - "\tZEND_%s_TYPE_INFO(%d, %s, %s, %d)\n", - $argKind, $argInfo->sendBy, $argInfo->name, + "\tZEND_%s_TYPE_INFO(%s, %s, %s, %d)\n", + $argKind, $argInfo->getSendByString(), $argInfo->name, $argInfo->type->toTypeCode(), $argInfo->type->isNullable ); } else { $code .= sprintf( - "\tZEND_%s_OBJ_INFO(%d, %s, %s, %d)\n", - $argKind, $argInfo->sendBy, $argInfo->name, + "\tZEND_%s_OBJ_INFO(%s, %s, %s, %d)\n", + $argKind, $argInfo->getSendByString(), $argInfo->name, str_replace('\\', '\\\\', $argInfo->type->name), $argInfo->type->isNullable ); } } else { $code .= sprintf( - "\tZEND_%s_INFO(%d, %s)\n", $argKind, $argInfo->sendBy, $argInfo->name); + "\tZEND_%s_INFO(%s, %s)\n", $argKind, $argInfo->getSendByString(), $argInfo->name); } } |