36 #include <Zend/zend_exceptions.h>
75 if (zend_parse_parameters(ZEND_NUM_ARGS(),
"zzz|z", &val, &
key_type,
76 &val_type, &
klass) == FAILURE) {
88 if (zend_parse_parameters(ZEND_NUM_ARGS(),
"zz|z", &val, &
type, &
klass) ==
95 ZEND_BEGIN_ARG_INFO_EX(arginfo_checkPrimitive, 0, 0, 1)
96 ZEND_ARG_INFO(0,
value)
99 ZEND_BEGIN_ARG_INFO_EX(arginfo_checkString, 0, 0, 1)
100 ZEND_ARG_INFO(0,
value)
101 ZEND_ARG_INFO(0, check_utf8)
104 ZEND_BEGIN_ARG_INFO_EX(arginfo_checkMessage, 0, 0, 2)
105 ZEND_ARG_INFO(0,
value)
106 ZEND_ARG_INFO(0, class)
109 ZEND_BEGIN_ARG_INFO_EX(arginfo_checkMapField, 0, 0, 3)
110 ZEND_ARG_INFO(0,
value)
113 ZEND_ARG_INFO(0, value_class)
116 ZEND_BEGIN_ARG_INFO_EX(arginfo_checkRepeatedField, 0, 0, 2)
117 ZEND_ARG_INFO(0,
value)
118 ZEND_ARG_INFO(0,
type)
119 ZEND_ARG_INFO(0, class)
123 PHP_ME(Util, checkInt32, arginfo_checkPrimitive,
124 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
125 PHP_ME(Util, checkUint32, arginfo_checkPrimitive,
126 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
127 PHP_ME(Util, checkInt64, arginfo_checkPrimitive,
128 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
129 PHP_ME(Util, checkUint64, arginfo_checkPrimitive,
130 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
131 PHP_ME(Util, checkEnum, arginfo_checkMessage,
132 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
133 PHP_ME(Util, checkFloat, arginfo_checkPrimitive,
134 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
135 PHP_ME(Util, checkDouble, arginfo_checkPrimitive,
136 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
137 PHP_ME(Util, checkBool, arginfo_checkPrimitive,
138 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
139 PHP_ME(Util, checkString, arginfo_checkString,
140 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
141 PHP_ME(Util, checkBytes, arginfo_checkPrimitive,
142 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
143 PHP_ME(Util, checkMessage, arginfo_checkMessage,
144 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
145 PHP_ME(Util, checkMapField, arginfo_checkMapField,
146 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
147 PHP_ME(Util, checkRepeatedField, arginfo_checkRepeatedField,
148 ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
158 #define CASE(descriptor_type, type) \
159 case UPB_DESCRIPTOR_TYPE_##descriptor_type: \
160 return UPB_TYPE_##type;
163 CASE(DOUBLE, DOUBLE);
165 CASE(STRING, STRING);
172 CASE(UINT32, UINT32);
173 CASE(UINT64, UINT64);
176 CASE(FIXED32, UINT32);
177 CASE(FIXED64, UINT64);
178 CASE(SFIXED32, INT32);
179 CASE(SFIXED64, INT64);
185 zend_error(E_ERROR,
"Unknown field type.");
192 unsigned ch = (unsigned)(*
ptr -
'0');
205 if (*
ptr++ !=
'.')
return false;
208 if (*ptr < '0' || *ptr >
'9') {
232 *val = neg ? -u64 : u64;
239 convert_to_string(&
tmp);
241 zend_throw_exception_ex(NULL, 0,
"Cannot convert '%s' to %s",
242 Z_STRVAL_P(&
tmp),
to);
248 switch (Z_TYPE_P(php_val)) {
250 *i64 = Z_LVAL_P(php_val);
253 double dbl = Z_DVAL_P(php_val);
254 if (dbl > 9223372036854774784.0 || dbl < -9223372036854775808.0) {
255 zend_throw_exception_ex(NULL, 0,
"Out of range");
262 const char *
buf = Z_STRVAL_P(php_val);
278 switch (Z_TYPE_P(php_val)) {
280 *dbl = Z_LVAL_P(php_val);
283 *dbl = Z_DVAL_P(php_val);
287 switch (is_numeric_string(Z_STRVAL_P(php_val), Z_STRLEN_P(php_val), &lval,
306 switch (Z_TYPE_P(
from)) {
314 *
to = (Z_LVAL_P(
from) != 0);
317 *
to = (Z_LVAL_P(
from) != 0);
320 if (Z_STRLEN_P(
from) == 0 ||
321 (Z_STRLEN_P(
from) == 1 && Z_STRVAL_P(
from)[0] ==
'0')) {
334 if (Z_ISREF_P(
from)) {
338 switch (Z_TYPE_P(
from)) {
346 zend_make_printable_zval(
from, &
tmp);
360 if (Z_ISREF_P(php_val)) {
401 size = Z_STRLEN_P(php_val);
409 ptr = Z_STRVAL_P(php_val);
428 #if SIZEOF_ZEND_LONG == 8
434 ZVAL_NEW_STR(php_val, zend_string_init(
buf,
size, 0));
439 #if SIZEOF_ZEND_LONG == 8
445 ZVAL_NEW_STR(php_val, zend_string_init(
buf,
size, 0));
456 ZVAL_LONG(php_val, val);
466 ZVAL_BOOL(php_val, upb_val.
bool_val);
471 ZVAL_NEW_STR(php_val, zend_string_init(
str.data,
str.size, 0));
507 const char *prefix_name =
"TYPE_URL_PREFIX";
508 zend_class_entry class_type;
510 INIT_CLASS_ENTRY(class_type,
"Google\\Protobuf\\Internal\\GPBUtil",
516 "type.googleapis.com/");