Skip to content

Commit 4799b76

Browse files
simPodnikic
authored andcommitted
Add BCMath PHP stubs
Closes GH-4508.
1 parent f9980e6 commit 4799b76

File tree

3 files changed

+74
-65
lines changed

3 files changed

+74
-65
lines changed

ext/bcmath/bcmath.c

Lines changed: 5 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#if HAVE_BCMATH
2626

2727
#include "php_ini.h"
28+
#include "bcmath_arginfo.h"
2829
#include "ext/standard/info.h"
2930
#include "php_bcmath.h"
3031
#include "libbcmath/src/bcmath.h"
@@ -33,67 +34,6 @@ ZEND_DECLARE_MODULE_GLOBALS(bcmath)
3334
static PHP_GINIT_FUNCTION(bcmath);
3435
static PHP_GSHUTDOWN_FUNCTION(bcmath);
3536

36-
/* {{{ arginfo */
37-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcadd, 0, 2, IS_STRING, 0)
38-
ZEND_ARG_INFO(0, left_operand)
39-
ZEND_ARG_INFO(0, right_operand)
40-
ZEND_ARG_INFO(0, scale)
41-
ZEND_END_ARG_INFO()
42-
43-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcsub, 0, 2, IS_STRING, 0)
44-
ZEND_ARG_INFO(0, left_operand)
45-
ZEND_ARG_INFO(0, right_operand)
46-
ZEND_ARG_INFO(0, scale)
47-
ZEND_END_ARG_INFO()
48-
49-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcmul, 0, 2, IS_STRING, 0)
50-
ZEND_ARG_INFO(0, left_operand)
51-
ZEND_ARG_INFO(0, right_operand)
52-
ZEND_ARG_INFO(0, scale)
53-
ZEND_END_ARG_INFO()
54-
55-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcdiv, 0, 2, IS_STRING, 1)
56-
ZEND_ARG_INFO(0, left_operand)
57-
ZEND_ARG_INFO(0, right_operand)
58-
ZEND_ARG_INFO(0, scale)
59-
ZEND_END_ARG_INFO()
60-
61-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcmod, 0, 2, IS_STRING, 1)
62-
ZEND_ARG_INFO(0, left_operand)
63-
ZEND_ARG_INFO(0, right_operand)
64-
ZEND_ARG_INFO(0, scale)
65-
ZEND_END_ARG_INFO()
66-
67-
ZEND_BEGIN_ARG_INFO_EX(arginfo_bcpowmod, 0, 0, 3)
68-
ZEND_ARG_INFO(0, x)
69-
ZEND_ARG_INFO(0, y)
70-
ZEND_ARG_INFO(0, mod)
71-
ZEND_ARG_INFO(0, scale)
72-
ZEND_END_ARG_INFO()
73-
74-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcpow, 0, 2, IS_STRING, 0)
75-
ZEND_ARG_INFO(0, x)
76-
ZEND_ARG_INFO(0, y)
77-
ZEND_ARG_INFO(0, scale)
78-
ZEND_END_ARG_INFO()
79-
80-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcsqrt, 0, 1, IS_STRING, 1)
81-
ZEND_ARG_INFO(0, operand)
82-
ZEND_ARG_INFO(0, scale)
83-
ZEND_END_ARG_INFO()
84-
85-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bccomp, 0, 2, IS_LONG, 0)
86-
ZEND_ARG_INFO(0, left_operand)
87-
ZEND_ARG_INFO(0, right_operand)
88-
ZEND_ARG_INFO(0, scale)
89-
ZEND_END_ARG_INFO()
90-
91-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcscale, 0, 0, IS_LONG, 0)
92-
ZEND_ARG_INFO(0, scale)
93-
ZEND_END_ARG_INFO()
94-
95-
/* }}} */
96-
9737
static const zend_function_entry bcmath_functions[] = {
9838
PHP_FE(bcadd, arginfo_bcadd)
9939
PHP_FE(bcsub, arginfo_bcsub)
@@ -400,18 +340,18 @@ PHP_FUNCTION(bcmod)
400340
/* }}} */
401341

402342
/* {{{ proto string bcpowmod(string x, string y, string mod [, int scale])
403-
Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous */
343+
Returns the value of an arbitrary precision number raised to the power of another reduced by a modulus */
404344
PHP_FUNCTION(bcpowmod)
405345
{
406-
zend_string *left, *right, *modulous;
346+
zend_string *left, *right, *modulus;
407347
bc_num first, second, mod, result;
408348
zend_long scale = BCG(bc_precision);
409349
int scale_int;
410350

411351
ZEND_PARSE_PARAMETERS_START(3, 4)
412352
Z_PARAM_STR(left)
413353
Z_PARAM_STR(right)
414-
Z_PARAM_STR(modulous)
354+
Z_PARAM_STR(modulus)
415355
Z_PARAM_OPTIONAL
416356
Z_PARAM_LONG(scale)
417357
ZEND_PARSE_PARAMETERS_END();
@@ -422,7 +362,7 @@ PHP_FUNCTION(bcpowmod)
422362
bc_init_num(&result);
423363
php_str2num(&first, ZSTR_VAL(left));
424364
php_str2num(&second, ZSTR_VAL(right));
425-
php_str2num(&mod, ZSTR_VAL(modulous));
365+
php_str2num(&mod, ZSTR_VAL(modulus));
426366

427367
scale_int = (int) ((int)scale < 0 ? 0 : scale);
428368

ext/bcmath/bcmath.stub.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
function bcadd(string $left_operand, string $right_operand, int $scale = UNKNOWN) : string {}
4+
5+
function bcsub(string $left_operand, string $right_operand, int $scale = UNKNOWN) : string {}
6+
7+
function bcmul(string $left_operand, string $right_operand, int $scale = UNKNOWN) : string {}
8+
9+
function bcdiv(string $dividend, string $divisor, int $scale = UNKNOWN) : ?string {}
10+
11+
function bcmod(string $dividend, string $divisor, int $scale = UNKNOWN) : ?string {}
12+
13+
/** @return string|false */
14+
function bcpowmod(string $base, string $exponent, string $modulus, int $scale = UNKNOWN) {}
15+
16+
function bcpow(string $base, string $exponent, int $scale = UNKNOWN) : string {}
17+
18+
function bcsqrt(string $operand, int $scale = UNKNOWN) : ?string {}
19+
20+
function bccomp(string $left_operand, string $right_operand, int $scale = UNKNOWN) : int {}
21+
22+
function bcscale(int $scale = UNKNOWN) : int {}

ext/bcmath/bcmath_arginfo.h

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/* This is a generated file, edit the .stub.php file instead. */
2+
3+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcadd, 0, 2, IS_STRING, 0)
4+
ZEND_ARG_TYPE_INFO(0, left_operand, IS_STRING, 0)
5+
ZEND_ARG_TYPE_INFO(0, right_operand, IS_STRING, 0)
6+
ZEND_ARG_TYPE_INFO(0, scale, IS_LONG, 0)
7+
ZEND_END_ARG_INFO()
8+
9+
#define arginfo_bcsub arginfo_bcadd
10+
11+
#define arginfo_bcmul arginfo_bcadd
12+
13+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcdiv, 0, 2, IS_STRING, 1)
14+
ZEND_ARG_TYPE_INFO(0, dividend, IS_STRING, 0)
15+
ZEND_ARG_TYPE_INFO(0, divisor, IS_STRING, 0)
16+
ZEND_ARG_TYPE_INFO(0, scale, IS_LONG, 0)
17+
ZEND_END_ARG_INFO()
18+
19+
#define arginfo_bcmod arginfo_bcdiv
20+
21+
ZEND_BEGIN_ARG_INFO_EX(arginfo_bcpowmod, 0, 0, 3)
22+
ZEND_ARG_TYPE_INFO(0, base, IS_STRING, 0)
23+
ZEND_ARG_TYPE_INFO(0, exponent, IS_STRING, 0)
24+
ZEND_ARG_TYPE_INFO(0, modulus, IS_STRING, 0)
25+
ZEND_ARG_TYPE_INFO(0, scale, IS_LONG, 0)
26+
ZEND_END_ARG_INFO()
27+
28+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcpow, 0, 2, IS_STRING, 0)
29+
ZEND_ARG_TYPE_INFO(0, base, IS_STRING, 0)
30+
ZEND_ARG_TYPE_INFO(0, exponent, IS_STRING, 0)
31+
ZEND_ARG_TYPE_INFO(0, scale, IS_LONG, 0)
32+
ZEND_END_ARG_INFO()
33+
34+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcsqrt, 0, 1, IS_STRING, 1)
35+
ZEND_ARG_TYPE_INFO(0, operand, IS_STRING, 0)
36+
ZEND_ARG_TYPE_INFO(0, scale, IS_LONG, 0)
37+
ZEND_END_ARG_INFO()
38+
39+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bccomp, 0, 2, IS_LONG, 0)
40+
ZEND_ARG_TYPE_INFO(0, left_operand, IS_STRING, 0)
41+
ZEND_ARG_TYPE_INFO(0, right_operand, IS_STRING, 0)
42+
ZEND_ARG_TYPE_INFO(0, scale, IS_LONG, 0)
43+
ZEND_END_ARG_INFO()
44+
45+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bcscale, 0, 0, IS_LONG, 0)
46+
ZEND_ARG_TYPE_INFO(0, scale, IS_LONG, 0)
47+
ZEND_END_ARG_INFO()

0 commit comments

Comments
 (0)