]> granicus.if.org Git - php/commitdiff
Make arginfo printing of prefer-ref arguments nicer
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 26 Aug 2019 13:39:39 +0000 (15:39 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 26 Aug 2019 13:39:39 +0000 (15:39 +0200)
ext/ffi/ffi_arginfo.h
ext/standard/basic_functions_arginfo.h
scripts/dev/gen_stub.php

index 6eea95841a79f23be235a4379166b3560c37ad43..0dfcd858aedd10e3f41dd3a2d61301105554fb74 100644 (file)
@@ -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()
index 4ca84cf4c89ebb71d2ac325c179a4aab811f3844..f236aa987fdcf4fe9ab253564f17893d59f35912 100644 (file)
@@ -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)
index 9fa14fc6626fbca99a18fe709794ba5301d393ad..f03e4b82c2cc6fcd306735e3c11c176657dfe253 100755 (executable)
@@ -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);
         }
     }