Skip to content

Commit a98307d

Browse files
committed
Make arginfo printing of prefer-ref arguments nicer
1 parent e047e9d commit a98307d

File tree

3 files changed

+31
-19
lines changed

3 files changed

+31
-19
lines changed

ext/ffi/ffi_arginfo.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_new, 0, 0, 1)
2020
ZEND_END_ARG_INFO()
2121

2222
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_free, 0, 0, 1)
23-
ZEND_ARG_OBJ_INFO(2, ptr, FFI\\CData, 0)
23+
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
2424
ZEND_END_ARG_INFO()
2525

2626
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_cast, 0, 0, 2)
2727
ZEND_ARG_INFO(0, type)
28-
ZEND_ARG_INFO(2, ptr)
28+
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr)
2929
ZEND_END_ARG_INFO()
3030

3131
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_type, 0, 0, 1)
@@ -42,30 +42,30 @@ ZEND_END_ARG_INFO()
4242
#define arginfo_class_FFI_addr arginfo_class_FFI_free
4343

4444
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_sizeof, 0, 0, 1)
45-
ZEND_ARG_TYPE_INFO(2, ptr, IS_OBJECT, 0)
45+
ZEND_ARG_TYPE_INFO(ZEND_SEND_PREFER_REF, ptr, IS_OBJECT, 0)
4646
ZEND_END_ARG_INFO()
4747

4848
#define arginfo_class_FFI_alignof arginfo_class_FFI_sizeof
4949

5050
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memcpy, 0, 0, 3)
51-
ZEND_ARG_OBJ_INFO(2, dst, FFI\\CData, 0)
52-
ZEND_ARG_INFO(2, src)
51+
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, dst, FFI\\CData, 0)
52+
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, src)
5353
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
5454
ZEND_END_ARG_INFO()
5555

5656
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memcmp, 0, 0, 3)
57-
ZEND_ARG_INFO(2, ptr1)
58-
ZEND_ARG_INFO(2, ptr2)
57+
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr1)
58+
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr2)
5959
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
6060
ZEND_END_ARG_INFO()
6161

6262
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memset, 0, 0, 3)
63-
ZEND_ARG_OBJ_INFO(2, ptr, FFI\\CData, 0)
63+
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
6464
ZEND_ARG_TYPE_INFO(0, ch, IS_LONG, 0)
6565
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
6666
ZEND_END_ARG_INFO()
6767

6868
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_string, 0, 0, 1)
69-
ZEND_ARG_OBJ_INFO(2, ptr, FFI\\CData, 0)
69+
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
7070
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
7171
ZEND_END_ARG_INFO()

ext/standard/basic_functions_arginfo.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_array_search, 0, 0, 2)
151151
ZEND_END_ARG_INFO()
152152

153153
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extract, 0, 1, IS_LONG, 1)
154-
ZEND_ARG_TYPE_INFO(2, arg, IS_ARRAY, 0)
154+
ZEND_ARG_TYPE_INFO(ZEND_SEND_PREFER_REF, arg, IS_ARRAY, 0)
155155
ZEND_ARG_TYPE_INFO(0, extract_type, IS_LONG, 0)
156156
ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 0)
157157
ZEND_END_ARG_INFO()
@@ -306,10 +306,10 @@ ZEND_END_ARG_INFO()
306306
#define arginfo_array_udiff_uassoc arginfo_array_intersect_ukey
307307

308308
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_multisort, 0, 1, _IS_BOOL, 0)
309-
ZEND_ARG_INFO(2, arr1)
310-
ZEND_ARG_INFO(2, sort_order)
311-
ZEND_ARG_INFO(2, sort_flags)
312-
ZEND_ARG_VARIADIC_INFO(2, arr2)
309+
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arr1)
310+
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_order)
311+
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_flags)
312+
ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, arr2)
313313
ZEND_END_ARG_INFO()
314314

315315
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_rand, 0, 0, 1)

scripts/dev/gen_stub.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,18 @@ public function equals(ArgInfo $other): bool {
135135
&& $this->isVariadic === $other->isVariadic
136136
&& Type::equals($this->type, $other->type);
137137
}
138+
139+
public function getSendByString(): string {
140+
switch ($this->sendBy) {
141+
case self::SEND_BY_VAL:
142+
return "0";
143+
case self::SEND_BY_REF:
144+
return "1";
145+
case self::SEND_PREFER_REF:
146+
return "ZEND_SEND_PREFER_REF";
147+
}
148+
throw new Exception("Invalid sendBy value");
149+
}
138150
}
139151

140152
class ReturnInfo {
@@ -373,20 +385,20 @@ function funcInfoToCode(FuncInfo $funcInfo): string {
373385
if ($argInfo->type) {
374386
if ($argInfo->type->isBuiltin) {
375387
$code .= sprintf(
376-
"\tZEND_%s_TYPE_INFO(%d, %s, %s, %d)\n",
377-
$argKind, $argInfo->sendBy, $argInfo->name,
388+
"\tZEND_%s_TYPE_INFO(%s, %s, %s, %d)\n",
389+
$argKind, $argInfo->getSendByString(), $argInfo->name,
378390
$argInfo->type->toTypeCode(), $argInfo->type->isNullable
379391
);
380392
} else {
381393
$code .= sprintf(
382-
"\tZEND_%s_OBJ_INFO(%d, %s, %s, %d)\n",
383-
$argKind, $argInfo->sendBy, $argInfo->name,
394+
"\tZEND_%s_OBJ_INFO(%s, %s, %s, %d)\n",
395+
$argKind, $argInfo->getSendByString(), $argInfo->name,
384396
str_replace('\\', '\\\\', $argInfo->type->name), $argInfo->type->isNullable
385397
);
386398
}
387399
} else {
388400
$code .= sprintf(
389-
"\tZEND_%s_INFO(%d, %s)\n", $argKind, $argInfo->sendBy, $argInfo->name);
401+
"\tZEND_%s_INFO(%s, %s)\n", $argKind, $argInfo->getSendByString(), $argInfo->name);
390402
}
391403
}
392404

0 commit comments

Comments
 (0)