Skip to content

Commit 0a877ad

Browse files
committed
Address code review comments
1 parent ecf14b5 commit 0a877ad

25 files changed

+225
-173
lines changed

Zend/zend_builtin_functions.stub.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,13 @@ function trigger_error(string $message, int $error_type = E_USER_NOTICE): bool {
6868
/** @alias trigger_error */
6969
function user_error(string $message, int $error_type = E_USER_NOTICE): bool {}
7070

71-
function set_error_handler($error_handler, int $error_types = E_ALL): ?callable {}
71+
/** @return string|array|object|null */
72+
function set_error_handler($error_handler, int $error_types = E_ALL) {}
7273

7374
function restore_error_handler(): bool {}
7475

75-
function set_exception_handler($exception_handler): ?callable {}
76+
/** @return string|array|object|null */
77+
function set_exception_handler($exception_handler) {}
7678

7779
function restore_exception_handler(): bool {}
7880

Zend/zend_builtin_functions_arginfo.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ZEND_END_ARG_INFO()
66
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_num_args, 0, 0, IS_LONG, 0)
77
ZEND_END_ARG_INFO()
88

9-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_get_arg, 0, 1, IS_MIXED, 0)
9+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_get_arg, 0, 1, IS_MIXED, 1)
1010
ZEND_ARG_TYPE_INFO(0, arg_num, IS_LONG, 0)
1111
ZEND_END_ARG_INFO()
1212

@@ -125,15 +125,15 @@ ZEND_END_ARG_INFO()
125125

126126
#define arginfo_user_error arginfo_trigger_error
127127

128-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_error_handler, 0, 1, IS_CALLABLE, 1)
128+
ZEND_BEGIN_ARG_INFO_EX(arginfo_set_error_handler, 0, 0, 1)
129129
ZEND_ARG_INFO(0, error_handler)
130130
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, error_types, IS_LONG, 0, "E_ALL")
131131
ZEND_END_ARG_INFO()
132132

133133
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_restore_error_handler, 0, 0, _IS_BOOL, 0)
134134
ZEND_END_ARG_INFO()
135135

136-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_exception_handler, 0, 1, IS_CALLABLE, 1)
136+
ZEND_BEGIN_ARG_INFO_EX(arginfo_set_exception_handler, 0, 0, 1)
137137
ZEND_ARG_INFO(0, exception_handler)
138138
ZEND_END_ARG_INFO()
139139

Zend/zend_closures_arginfo.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Closure_bindTo, 0, 1, Closu
1414
ZEND_ARG_INFO(0, newscope)
1515
ZEND_END_ARG_INFO()
1616

17-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Closure_call, 0, 1, IS_MIXED, 0)
17+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Closure_call, 0, 1, IS_MIXED, 1)
1818
ZEND_ARG_TYPE_INFO(0, newthis, IS_OBJECT, 0)
19-
ZEND_ARG_VARIADIC_TYPE_INFO(0, parameters, IS_MIXED, 0)
19+
ZEND_ARG_VARIADIC_TYPE_INFO(0, parameters, IS_MIXED, 1)
2020
ZEND_END_ARG_INFO()
2121

2222
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Closure_fromCallable, 0, 1, Closure, 0)

Zend/zend_generators_arginfo.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ ZEND_END_ARG_INFO()
66
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_valid, 0, 0, _IS_BOOL, 0)
77
ZEND_END_ARG_INFO()
88

9-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_current, 0, 0, IS_MIXED, 0)
9+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_current, 0, 0, IS_MIXED, 1)
1010
ZEND_END_ARG_INFO()
1111

1212
#define arginfo_class_Generator_key arginfo_class_Generator_current
1313

1414
#define arginfo_class_Generator_next arginfo_class_Generator_rewind
1515

16-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_send, 0, 1, IS_MIXED, 0)
17-
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
16+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_send, 0, 1, IS_MIXED, 1)
17+
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 1)
1818
ZEND_END_ARG_INFO()
1919

20-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_throw, 0, 1, IS_MIXED, 0)
20+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_throw, 0, 1, IS_MIXED, 1)
2121
ZEND_ARG_OBJ_INFO(0, exception, Throwable, 0)
2222
ZEND_END_ARG_INFO()
2323

build/gen_stub.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public static function fromNode(Node $node) {
169169

170170
public function isNullable(): bool {
171171
foreach ($this->types as $type) {
172-
if ($type->isNull()) {
172+
if ($type->isNull() || $type->name === "mixed") {
173173
return true;
174174
}
175175
}

ext/filter/filter_arginfo.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_filter_has_var, 0, 2, _IS_BOOL,
55
ZEND_ARG_TYPE_INFO(0, variable_name, IS_STRING, 0)
66
ZEND_END_ARG_INFO()
77

8-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_filter_input, 0, 2, IS_MIXED, 0)
8+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_filter_input, 0, 2, IS_MIXED, 1)
99
ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0)
1010
ZEND_ARG_TYPE_INFO(0, variable_name, IS_STRING, 0)
1111
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filter, IS_LONG, 0, "FILTER_DEFAULT")
1212
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, options, "null")
1313
ZEND_END_ARG_INFO()
1414

15-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_filter_var, 0, 1, IS_MIXED, 0)
16-
ZEND_ARG_TYPE_INFO(0, variable, IS_MIXED, 0)
15+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_filter_var, 0, 1, IS_MIXED, 1)
16+
ZEND_ARG_TYPE_INFO(0, variable, IS_MIXED, 1)
1717
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filter, IS_LONG, 0, "FILTER_DEFAULT")
1818
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, options, "null")
1919
ZEND_END_ARG_INFO()

ext/gmp/gmp.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -332,12 +332,18 @@ static zend_object *gmp_clone_obj(zend_object *obj) /* {{{ */
332332
}
333333
/* }}} */
334334

335-
static void shift_operator_helper(gmp_binary_ui_op_t op, zval *return_value, zval *op1, zval *op2) {
335+
static void shift_operator_helper(gmp_binary_ui_op_t op, zval *return_value, zval *op1, zval *op2, zend_uchar opcode) {
336336
zend_long shift = zval_get_long(op2);
337337

338338
if (shift < 0) {
339-
php_error_docref(NULL, E_WARNING, "Shift cannot be negative");
340-
RETVAL_FALSE;
339+
if (strcmp(get_active_function_name(), "main")) {
340+
zend_argument_value_error(2, "must be greater than or equal to 0");
341+
} else {
342+
zend_throw_error(zend_ce_value_error, "%s must be greater than or equal to 0",
343+
opcode == ZEND_POW ? "Exponent" : "Shift"
344+
);
345+
}
346+
return;
341347
} else {
342348
mpz_ptr gmpnum_op, gmpnum_result;
343349
gmp_temp_t temp;
@@ -372,17 +378,17 @@ static int gmp_do_operation_ex(zend_uchar opcode, zval *result, zval *op1, zval
372378
case ZEND_MUL:
373379
DO_BINARY_UI_OP(mpz_mul);
374380
case ZEND_POW:
375-
shift_operator_helper(mpz_pow_ui, result, op1, op2);
381+
shift_operator_helper(mpz_pow_ui, result, op1, op2, opcode);
376382
return SUCCESS;
377383
case ZEND_DIV:
378384
DO_BINARY_UI_OP_EX(mpz_tdiv_q, gmp_mpz_tdiv_q_ui, 1);
379385
case ZEND_MOD:
380386
DO_BINARY_UI_OP_EX(mpz_mod, gmp_mpz_mod_ui, 1);
381387
case ZEND_SL:
382-
shift_operator_helper(mpz_mul_2exp, result, op1, op2);
388+
shift_operator_helper(mpz_mul_2exp, result, op1, op2, opcode);
383389
return SUCCESS;
384390
case ZEND_SR:
385-
shift_operator_helper(mpz_fdiv_q_2exp, result, op1, op2);
391+
shift_operator_helper(mpz_fdiv_q_2exp, result, op1, op2, opcode);
386392
return SUCCESS;
387393
case ZEND_BW_OR:
388394
DO_BINARY_OP(mpz_ior);
@@ -520,7 +526,7 @@ static ZEND_GINIT_FUNCTION(gmp)
520526
ZEND_MINIT_FUNCTION(gmp)
521527
{
522528
zend_class_entry tmp_ce;
523-
INIT_CLASS_ENTRY(tmp_ce, "GMP", NULL);
529+
INIT_CLASS_ENTRY(tmp_ce, "GMP", class_GMP_methods);
524530
gmp_ce = zend_register_internal_class(&tmp_ce);
525531
gmp_ce->create_object = gmp_create_object;
526532
gmp_ce->serialize = gmp_serialize;
@@ -1261,8 +1267,8 @@ ZEND_FUNCTION(gmp_pow)
12611267
}
12621268

12631269
if (exp < 0) {
1264-
php_error_docref(NULL, E_WARNING, "Negative exponent not supported");
1265-
RETURN_FALSE;
1270+
zend_argument_value_error(2, "must be greater than or equal to 0");
1271+
RETURN_THROWS();
12661272
}
12671273

12681274
if (Z_TYPE_P(base_arg) == IS_LONG && Z_LVAL_P(base_arg) >= 0) {

ext/gmp/gmp.stub.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
/** @generate-function-entries */
44

5+
class GMP
6+
{
7+
}
8+
59
/** @param int|bool|string $number */
610
function gmp_init($number, int $base = 0): GMP|false {}
711

ext/gmp/gmp_arginfo.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,3 +289,8 @@ static const zend_function_entry ext_functions[] = {
289289
ZEND_FE(gmp_binomial, arginfo_gmp_binomial)
290290
ZEND_FE_END
291291
};
292+
293+
294+
static const zend_function_entry class_GMP_methods[] = {
295+
ZEND_FE_END
296+
};

ext/gmp/tests/gmp_pow.phpt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,19 @@ var_dump(gmp_strval(gmp_pow(-2,10)));
1010
var_dump(gmp_strval(gmp_pow(-2,11)));
1111
var_dump(gmp_strval(gmp_pow("2",10)));
1212
var_dump(gmp_strval(gmp_pow("2",0)));
13-
var_dump(gmp_strval(gmp_pow("2",-1)));
13+
try {
14+
gmp_pow("2", -1);
15+
} catch (ValueError $exception) {
16+
echo $exception->getMessage() . "\n";
17+
}
1418
var_dump(gmp_strval(gmp_pow("-2",10)));
1519
var_dump(gmp_strval(gmp_pow(20,10)));
1620
var_dump(gmp_strval(gmp_pow(50,10)));
17-
var_dump(gmp_strval(gmp_pow(50,-5)));
21+
try {
22+
gmp_pow(50,-5);
23+
} catch (ValueError $exception) {
24+
echo $exception->getMessage() . "\n";
25+
}
1826

1927
$n = gmp_init("20");
2028
var_dump(gmp_strval(gmp_pow($n,10)));
@@ -36,15 +44,11 @@ string(4) "1024"
3644
string(5) "-2048"
3745
string(4) "1024"
3846
string(1) "1"
39-
40-
Warning: gmp_pow(): Negative exponent not supported in %s on line %d
41-
string(1) "0"
47+
gmp_pow(): Argument #2 ($exp) must be greater than or equal to 0
4248
string(4) "1024"
4349
string(14) "10240000000000"
4450
string(17) "97656250000000000"
45-
46-
Warning: gmp_pow(): Negative exponent not supported in %s on line %d
47-
string(1) "0"
51+
gmp_pow(): Argument #2 ($exp) must be greater than or equal to 0
4852
string(14) "10240000000000"
4953
string(14) "10240000000000"
5054
gmp_pow(): Argument #2 ($exp) must be of type int, array given

ext/gmp/tests/gmp_pow2.phpt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
--TEST--
2+
Test pow() with gmp object
3+
--SKIPIF--
4+
<?php if (!extension_loaded("gmp")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
8+
$n = gmp_init(2);
9+
var_dump(pow($n, 10));
10+
var_dump($n ** 10);
11+
12+
try {
13+
pow($n, -10);
14+
} catch (ValueError $exception) {
15+
echo $exception->getMessage() . "\n";
16+
}
17+
18+
try {
19+
$n ** -10;
20+
} catch (ValueError $exception) {
21+
echo $exception->getMessage() . "\n";
22+
}
23+
24+
?>
25+
--EXPECTF--
26+
object(GMP)#%d (1) {
27+
["num"]=>
28+
string(4) "1024"
29+
}
30+
object(GMP)#%d (1) {
31+
["num"]=>
32+
string(4) "1024"
33+
}
34+
pow(): Argument #2 ($exp) must be greater than or equal to 0
35+
Exponent must be greater than or equal to 0

ext/gmp/tests/overloading.phpt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,17 @@ var_dump(42 << $b);
5353
var_dump($a >> 2);
5454
var_dump(-$a >> 2);
5555

56-
var_dump($a << -1);
57-
var_dump($a >> -1);
56+
try {
57+
$a << -1;
58+
} catch (ValueError $exception) {
59+
echo $exception->getMessage() . "\n";
60+
}
61+
62+
try {
63+
$a >> -1;
64+
} catch (ValueError $exception) {
65+
echo $exception->getMessage() . "\n";
66+
}
5867

5968
var_dump(~$a);
6069
var_dump(-$a);
@@ -237,12 +246,8 @@ object(GMP)#%d (1) {
237246
["num"]=>
238247
string(3) "-11"
239248
}
240-
241-
Warning: main(): Shift cannot be negative in %s on line %d
242-
bool(false)
243-
244-
Warning: main(): Shift cannot be negative in %s on line %d
245-
bool(false)
249+
Shift must be greater than or equal to 0
250+
Shift must be greater than or equal to 0
246251
object(GMP)#%d (1) {
247252
["num"]=>
248253
string(3) "-43"

ext/json/json_arginfo.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/* This is a generated file, edit the .stub.php file instead. */
22

33
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_json_encode, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
4-
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
4+
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 1)
55
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0")
66
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, depth, IS_LONG, 0, "512")
77
ZEND_END_ARG_INFO()
88

9-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_json_decode, 0, 1, IS_MIXED, 0)
9+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_json_decode, 0, 1, IS_MIXED, 1)
1010
ZEND_ARG_TYPE_INFO(0, json, IS_STRING, 0)
1111
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, assoc, _IS_BOOL, 1, "null")
1212
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, depth, IS_LONG, 0, "512")

ext/mysqli/mysqli.stub.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ public function attr_set(int $attr, int $mode_in) {}
407407
* @return bool
408408
* @alias mysqli_stmt_bind_param
409409
*/
410-
public function bind_param(string $types, &...$vars) {}
410+
public function bind_param(string $types, mixed &...$vars) {}
411411

412412
/**
413413
* @return bool

ext/mysqli/mysqli_arginfo.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ ZEND_END_ARG_INFO()
298298
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_bind_param, 0, 2, _IS_BOOL, 0)
299299
ZEND_ARG_OBJ_INFO(0, mysql_stmt, mysqli_stmt, 0)
300300
ZEND_ARG_TYPE_INFO(0, types, IS_STRING, 0)
301-
ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 0)
301+
ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 1)
302302
ZEND_END_ARG_INFO()
303303

304304
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_stmt_bind_result, 0, 1, _IS_BOOL, 0)
@@ -633,7 +633,7 @@ ZEND_END_ARG_INFO()
633633

634634
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli_stmt_bind_param, 0, 0, 1)
635635
ZEND_ARG_TYPE_INFO(0, types, IS_STRING, 0)
636-
ZEND_ARG_VARIADIC_INFO(1, vars)
636+
ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 1)
637637
ZEND_END_ARG_INFO()
638638

639639
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_mysqli_stmt_bind_result, 0, 0, 0)

ext/opcache/Optimizer/zend_func_info.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ static const func_info_t func_infos[] = {
214214
F1("password_get_info", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
215215
F1("convert_uuencode", MAY_BE_FALSE | MAY_BE_STRING),
216216
F1("convert_uudecode", MAY_BE_FALSE | MAY_BE_STRING),
217-
F1("pow", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_OBJECT),
217+
F1("pow", MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_OBJECT),
218218
F1("decbin", MAY_BE_STRING),
219219
F1("decoct", MAY_BE_STRING),
220220
F1("dechex", MAY_BE_STRING),

ext/reflection/php_reflection_arginfo.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ ZEND_END_ARG_INFO()
6767
#define arginfo_class_ReflectionFunction_isDisabled arginfo_class_ReflectionFunctionAbstract___clone
6868

6969
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunction_invoke, 0, 0, 0)
70-
ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0)
70+
ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 1)
7171
ZEND_END_ARG_INFO()
7272

7373
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunction_invokeArgs, 0, 0, 1)
@@ -125,7 +125,7 @@ ZEND_END_ARG_INFO()
125125

126126
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_invoke, 0, 0, 0)
127127
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, object, IS_OBJECT, 1, "null")
128-
ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 0)
128+
ZEND_ARG_VARIADIC_TYPE_INFO(0, args, IS_MIXED, 1)
129129
ZEND_END_ARG_INFO()
130130

131131
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_invokeArgs, 0, 0, 2)

0 commit comments

Comments
 (0)