Skip to content

Commit e23be2c

Browse files
committed
Add arginfo for RedisArray
1 parent 6e83c11 commit e23be2c

File tree

2 files changed

+42
-23
lines changed

2 files changed

+42
-23
lines changed

common.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,8 @@ extern int (*_php_var_unserialize)(zval **, const unsigned char **, const unsign
397397
#define php_var_unserialize(rval, p, max, var_hash) _php_var_unserialize(&rval, p, max, var_hash TSRMLS_CC)
398398
typedef int strlen_t;
399399

400+
#define PHPREDIS_ZVAL_IS_STRICT_FALSE(z) (Z_TYPE_P(z) == IS_BOOL && !Z_BVAL_P(z))
401+
400402
/* If ZEND_MOD_END isn't defined, use legacy version */
401403
#ifndef ZEND_MOD_END
402404
#define ZEND_MOD_END { NULL, NULL, NULL }
@@ -414,6 +416,7 @@ typedef int strlen_t;
414416
#include <zend_smart_str.h>
415417
#include <ext/standard/php_smart_string.h>
416418
typedef size_t strlen_t;
419+
#define PHPREDIS_ZVAL_IS_STRICT_FALSE(z) (Z_TYPE_P(z) == IS_FALSE)
417420
#endif
418421

419422
/* NULL check so Eclipse doesn't go crazy */

redis_array.c

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -32,45 +32,61 @@
3232
#include "redis_array_impl.h"
3333

3434
/* Simple macro to detect failure in a RedisArray call */
35-
#if (PHP_MAJOR_VERSION < 7)
36-
#define RA_CALL_FAILED(rv, cmd) ( \
37-
(Z_TYPE_P(rv) == IS_BOOL && !Z_LVAL_P(rv)) || \
38-
(Z_TYPE_P(rv) == IS_ARRAY && zend_hash_num_elements(Z_ARRVAL_P(rv)) == 0) || \
39-
(Z_TYPE_P(rv) == IS_LONG && Z_LVAL_P(rv) == 0 && !strcasecmp(cmd, "TYPE")) \
40-
)
41-
#else
4235
#define RA_CALL_FAILED(rv, cmd) ( \
43-
(Z_TYPE_P(rv) == IS_FALSE) || \
36+
PHPREDIS_ZVAL_IS_STRICT_FALSE(rv) || \
4437
(Z_TYPE_P(rv) == IS_ARRAY && zend_hash_num_elements(Z_ARRVAL_P(rv)) == 0) || \
4538
(Z_TYPE_P(rv) == IS_LONG && Z_LVAL_P(rv) == 0 && !strcasecmp(cmd, "TYPE")) \
4639
)
47-
#endif
4840

4941
extern zend_class_entry *redis_ce;
5042
zend_class_entry *redis_array_ce;
5143

52-
ZEND_BEGIN_ARG_INFO_EX(__redis_array_call_args, 0, 0, 2)
44+
ZEND_BEGIN_ARG_INFO_EX(arginfo_void, 0, 0, 0)
45+
ZEND_END_ARG_INFO()
46+
47+
ZEND_BEGIN_ARG_INFO_EX(arginfo_ctor, 0, 0, 1)
48+
ZEND_ARG_ARRAY_INFO(0, hosts, 0)
49+
ZEND_ARG_ARRAY_INFO(0, options, 0)
50+
ZEND_END_ARG_INFO()
51+
52+
ZEND_BEGIN_ARG_INFO_EX(arginfo_call, 0, 0, 2)
5353
ZEND_ARG_INFO(0, function_name)
5454
ZEND_ARG_INFO(0, arguments)
5555
ZEND_END_ARG_INFO()
5656

57+
ZEND_BEGIN_ARG_INFO_EX(arginfo_target, 0, 0, 1)
58+
ZEND_ARG_INFO(0, key)
59+
ZEND_END_ARG_INFO()
60+
61+
ZEND_BEGIN_ARG_INFO_EX(arginfo_instance, 0, 0, 1)
62+
ZEND_ARG_INFO(0, host)
63+
ZEND_END_ARG_INFO()
64+
65+
ZEND_BEGIN_ARG_INFO_EX(arginfo_rehash, 0, 0, 0)
66+
ZEND_ARG_INFO(0, callable)
67+
ZEND_END_ARG_INFO()
68+
69+
ZEND_BEGIN_ARG_INFO_EX(arginfo_select, 0, 0, 1)
70+
ZEND_ARG_INFO(0, index)
71+
ZEND_END_ARG_INFO()
72+
5773
zend_function_entry redis_array_functions[] = {
58-
PHP_ME(RedisArray, __construct, NULL, ZEND_ACC_PUBLIC)
59-
PHP_ME(RedisArray, __call, __redis_array_call_args, ZEND_ACC_PUBLIC)
74+
PHP_ME(RedisArray, __construct, arginfo_ctor, ZEND_ACC_PUBLIC)
75+
PHP_ME(RedisArray, __call, arginfo_call, ZEND_ACC_PUBLIC)
6076

61-
PHP_ME(RedisArray, _hosts, NULL, ZEND_ACC_PUBLIC)
62-
PHP_ME(RedisArray, _target, NULL, ZEND_ACC_PUBLIC)
63-
PHP_ME(RedisArray, _instance, NULL, ZEND_ACC_PUBLIC)
64-
PHP_ME(RedisArray, _function, NULL, ZEND_ACC_PUBLIC)
65-
PHP_ME(RedisArray, _distributor, NULL, ZEND_ACC_PUBLIC)
66-
PHP_ME(RedisArray, _rehash, NULL, ZEND_ACC_PUBLIC)
77+
PHP_ME(RedisArray, _hosts, arginfo_void, ZEND_ACC_PUBLIC)
78+
PHP_ME(RedisArray, _target, arginfo_target, ZEND_ACC_PUBLIC)
79+
PHP_ME(RedisArray, _instance, arginfo_instance, ZEND_ACC_PUBLIC)
80+
PHP_ME(RedisArray, _function, arginfo_void, ZEND_ACC_PUBLIC)
81+
PHP_ME(RedisArray, _distributor, arginfo_void, ZEND_ACC_PUBLIC)
82+
PHP_ME(RedisArray, _rehash, arginfo_rehash, ZEND_ACC_PUBLIC)
6783

6884
/* special implementation for a few functions */
69-
PHP_ME(RedisArray, select, NULL, ZEND_ACC_PUBLIC)
70-
PHP_ME(RedisArray, info, NULL, ZEND_ACC_PUBLIC)
71-
PHP_ME(RedisArray, ping, NULL, ZEND_ACC_PUBLIC)
72-
PHP_ME(RedisArray, flushdb, NULL, ZEND_ACC_PUBLIC)
73-
PHP_ME(RedisArray, flushall, NULL, ZEND_ACC_PUBLIC)
85+
PHP_ME(RedisArray, select, arginfo_select, ZEND_ACC_PUBLIC)
86+
PHP_ME(RedisArray, info, arginfo_void, ZEND_ACC_PUBLIC)
87+
PHP_ME(RedisArray, ping, arginfo_void, ZEND_ACC_PUBLIC)
88+
PHP_ME(RedisArray, flushdb, arginfo_void, ZEND_ACC_PUBLIC)
89+
PHP_ME(RedisArray, flushall, arginfo_void, ZEND_ACC_PUBLIC)
7490
PHP_ME(RedisArray, mget, NULL, ZEND_ACC_PUBLIC)
7591
PHP_ME(RedisArray, mset, NULL, ZEND_ACC_PUBLIC)
7692
PHP_ME(RedisArray, del, NULL, ZEND_ACC_PUBLIC)

0 commit comments

Comments
 (0)