Skip to content

Declare ext/json constants in stubs #8716

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 6, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 1 addition & 40 deletions ext/json/json.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,53 +37,14 @@ PHP_JSON_API zend_class_entry *php_json_exception_ce;

PHP_JSON_API ZEND_DECLARE_MODULE_GLOBALS(json)

/* Register constant for options and errors */
#define PHP_JSON_REGISTER_CONSTANT(_name, _value) \
REGISTER_LONG_CONSTANT(_name, _value, CONST_CS | CONST_PERSISTENT);

/* {{{ MINIT */
static PHP_MINIT_FUNCTION(json)
{
php_json_serializable_ce = register_class_JsonSerializable();

php_json_exception_ce = register_class_JsonException(zend_ce_exception);

/* options for json_encode */
PHP_JSON_REGISTER_CONSTANT("JSON_HEX_TAG", PHP_JSON_HEX_TAG);
PHP_JSON_REGISTER_CONSTANT("JSON_HEX_AMP", PHP_JSON_HEX_AMP);
PHP_JSON_REGISTER_CONSTANT("JSON_HEX_APOS", PHP_JSON_HEX_APOS);
PHP_JSON_REGISTER_CONSTANT("JSON_HEX_QUOT", PHP_JSON_HEX_QUOT);
PHP_JSON_REGISTER_CONSTANT("JSON_FORCE_OBJECT", PHP_JSON_FORCE_OBJECT);
PHP_JSON_REGISTER_CONSTANT("JSON_NUMERIC_CHECK", PHP_JSON_NUMERIC_CHECK);
PHP_JSON_REGISTER_CONSTANT("JSON_UNESCAPED_SLASHES", PHP_JSON_UNESCAPED_SLASHES);
PHP_JSON_REGISTER_CONSTANT("JSON_PRETTY_PRINT", PHP_JSON_PRETTY_PRINT);
PHP_JSON_REGISTER_CONSTANT("JSON_UNESCAPED_UNICODE", PHP_JSON_UNESCAPED_UNICODE);
PHP_JSON_REGISTER_CONSTANT("JSON_PARTIAL_OUTPUT_ON_ERROR", PHP_JSON_PARTIAL_OUTPUT_ON_ERROR);
PHP_JSON_REGISTER_CONSTANT("JSON_PRESERVE_ZERO_FRACTION", PHP_JSON_PRESERVE_ZERO_FRACTION);
PHP_JSON_REGISTER_CONSTANT("JSON_UNESCAPED_LINE_TERMINATORS", PHP_JSON_UNESCAPED_LINE_TERMINATORS);

/* options for json_decode */
PHP_JSON_REGISTER_CONSTANT("JSON_OBJECT_AS_ARRAY", PHP_JSON_OBJECT_AS_ARRAY);
PHP_JSON_REGISTER_CONSTANT("JSON_BIGINT_AS_STRING", PHP_JSON_BIGINT_AS_STRING);

/* common options for json_decode and json_encode */
PHP_JSON_REGISTER_CONSTANT("JSON_INVALID_UTF8_IGNORE", PHP_JSON_INVALID_UTF8_IGNORE);
PHP_JSON_REGISTER_CONSTANT("JSON_INVALID_UTF8_SUBSTITUTE", PHP_JSON_INVALID_UTF8_SUBSTITUTE);
PHP_JSON_REGISTER_CONSTANT("JSON_THROW_ON_ERROR", PHP_JSON_THROW_ON_ERROR);

/* json error constants */
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_NONE", PHP_JSON_ERROR_NONE);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_DEPTH", PHP_JSON_ERROR_DEPTH);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_STATE_MISMATCH", PHP_JSON_ERROR_STATE_MISMATCH);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_CTRL_CHAR", PHP_JSON_ERROR_CTRL_CHAR);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_SYNTAX", PHP_JSON_ERROR_SYNTAX);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_UTF8", PHP_JSON_ERROR_UTF8);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_RECURSION", PHP_JSON_ERROR_RECURSION);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_INF_OR_NAN", PHP_JSON_ERROR_INF_OR_NAN);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_UNSUPPORTED_TYPE", PHP_JSON_ERROR_UNSUPPORTED_TYPE);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_INVALID_PROPERTY_NAME", PHP_JSON_ERROR_INVALID_PROPERTY_NAME);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_UTF16", PHP_JSON_ERROR_UTF16);
PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_NON_BACKED_ENUM", PHP_JSON_ERROR_NON_BACKED_ENUM);
register_json_symbols(module_number);

return SUCCESS;
}
Expand Down
149 changes: 149 additions & 0 deletions ext/json/json.stub.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,155 @@

/** @generate-class-entries */

/**
* @var int
* @cname PHP_JSON_HEX_TAG
*/
const JSON_HEX_TAG = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_HEX_AMP
*/
const JSON_HEX_AMP = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_HEX_APOS
*/
const JSON_HEX_APOS = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_HEX_QUOT
*/
const JSON_HEX_QUOT = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_FORCE_OBJECT
*/
const JSON_FORCE_OBJECT = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_NUMERIC_CHECK
*/
const JSON_NUMERIC_CHECK = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_UNESCAPED_SLASHES
*/
const JSON_UNESCAPED_SLASHES = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_PRETTY_PRINT
*/
const JSON_PRETTY_PRINT = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_UNESCAPED_UNICODE
*/
const JSON_UNESCAPED_UNICODE = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_PARTIAL_OUTPUT_ON_ERROR
*/
const JSON_PARTIAL_OUTPUT_ON_ERROR = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_PRESERVE_ZERO_FRACTION
*/
const JSON_PRESERVE_ZERO_FRACTION = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_UNESCAPED_LINE_TERMINATORS
*/
const JSON_UNESCAPED_LINE_TERMINATORS = UNKNOWN;

/**
* @var int
* @cname PHP_JSON_OBJECT_AS_ARRAY
*/
const JSON_OBJECT_AS_ARRAY = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_BIGINT_AS_STRING
*/
const JSON_BIGINT_AS_STRING = UNKNOWN;

/**
* @var int
* @cname PHP_JSON_INVALID_UTF8_IGNORE
*/
const JSON_INVALID_UTF8_IGNORE = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_INVALID_UTF8_SUBSTITUTE
*/
const JSON_INVALID_UTF8_SUBSTITUTE = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_THROW_ON_ERROR
*/
const JSON_THROW_ON_ERROR = UNKNOWN;

/**
* @var int
* @cname PHP_JSON_ERROR_NONE
*/
const JSON_ERROR_NONE = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_DEPTH
*/
const JSON_ERROR_DEPTH = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_STATE_MISMATCH
*/
const JSON_ERROR_STATE_MISMATCH = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_CTRL_CHAR
*/
const JSON_ERROR_CTRL_CHAR = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_SYNTAX
*/
const JSON_ERROR_SYNTAX = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_UTF8
*/
const JSON_ERROR_UTF8 = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_RECURSION
*/
const JSON_ERROR_RECURSION = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_INF_OR_NAN
*/
const JSON_ERROR_INF_OR_NAN = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_UNSUPPORTED_TYPE
*/
const JSON_ERROR_UNSUPPORTED_TYPE = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_INVALID_PROPERTY_NAME
*/
const JSON_ERROR_INVALID_PROPERTY_NAME = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_UTF16
*/
const JSON_ERROR_UTF16 = UNKNOWN;
/**
* @var int
* @cname PHP_JSON_ERROR_NON_BACKED_ENUM
*/
const JSON_ERROR_NON_BACKED_ENUM = UNKNOWN;

/** @refcount 1 */
function json_encode(mixed $value, int $flags = 0, int $depth = 512): string|false {}

Expand Down
35 changes: 34 additions & 1 deletion ext/json/json_arginfo.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: e59995a9cd647f36164468dd2ae4c11239e3405f */
* Stub hash: 6ff8c3c3f815a7ba887d2fc5e76285925c7fed90 */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_json_encode, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
Expand Down Expand Up @@ -49,6 +49,39 @@ static const zend_function_entry class_JsonException_methods[] = {
ZEND_FE_END
};

static void register_json_symbols(int module_number)
{
REGISTER_LONG_CONSTANT("JSON_HEX_TAG", PHP_JSON_HEX_TAG, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_HEX_AMP", PHP_JSON_HEX_AMP, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_HEX_APOS", PHP_JSON_HEX_APOS, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_HEX_QUOT", PHP_JSON_HEX_QUOT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_FORCE_OBJECT", PHP_JSON_FORCE_OBJECT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_NUMERIC_CHECK", PHP_JSON_NUMERIC_CHECK, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_UNESCAPED_SLASHES", PHP_JSON_UNESCAPED_SLASHES, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_PRETTY_PRINT", PHP_JSON_PRETTY_PRINT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_UNESCAPED_UNICODE", PHP_JSON_UNESCAPED_UNICODE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_PARTIAL_OUTPUT_ON_ERROR", PHP_JSON_PARTIAL_OUTPUT_ON_ERROR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_PRESERVE_ZERO_FRACTION", PHP_JSON_PRESERVE_ZERO_FRACTION, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_UNESCAPED_LINE_TERMINATORS", PHP_JSON_UNESCAPED_LINE_TERMINATORS, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_OBJECT_AS_ARRAY", PHP_JSON_OBJECT_AS_ARRAY, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_BIGINT_AS_STRING", PHP_JSON_BIGINT_AS_STRING, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_INVALID_UTF8_IGNORE", PHP_JSON_INVALID_UTF8_IGNORE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_INVALID_UTF8_SUBSTITUTE", PHP_JSON_INVALID_UTF8_SUBSTITUTE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_THROW_ON_ERROR", PHP_JSON_THROW_ON_ERROR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_NONE", PHP_JSON_ERROR_NONE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_DEPTH", PHP_JSON_ERROR_DEPTH, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_STATE_MISMATCH", PHP_JSON_ERROR_STATE_MISMATCH, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_CTRL_CHAR", PHP_JSON_ERROR_CTRL_CHAR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_SYNTAX", PHP_JSON_ERROR_SYNTAX, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_UTF8", PHP_JSON_ERROR_UTF8, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_RECURSION", PHP_JSON_ERROR_RECURSION, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_INF_OR_NAN", PHP_JSON_ERROR_INF_OR_NAN, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_UNSUPPORTED_TYPE", PHP_JSON_ERROR_UNSUPPORTED_TYPE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_INVALID_PROPERTY_NAME", PHP_JSON_ERROR_INVALID_PROPERTY_NAME, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_UTF16", PHP_JSON_ERROR_UTF16, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("JSON_ERROR_NON_BACKED_ENUM", PHP_JSON_ERROR_NON_BACKED_ENUM, CONST_CS | CONST_PERSISTENT);
}

static zend_class_entry *register_class_JsonSerializable(void)
{
zend_class_entry ce, *class_entry;
Expand Down