diff options
author | Jakub Zelenka <bukka@php.net> | 2016-02-28 17:45:53 +0000 |
---|---|---|
committer | Jakub Zelenka <bukka@php.net> | 2016-04-10 15:35:41 +0100 |
commit | 72ccfda25aadf7eb225d7f899475e7d274bd1e72 (patch) | |
tree | 9b5a24e2e2cbbcc7c2b92c6f3c1ee24ca5e2ccab /ext/json/php_json_parser.h | |
parent | 4e128978269dddfee2d1377a97241664194c4bb5 (diff) | |
download | php-git-72ccfda25aadf7eb225d7f899475e7d274bd1e72.tar.gz |
Add method hooking support to json parser
This commit is just a slight modification (renaming and some small
changes) of the patch that has been provided by Andrey Hristov.
It adds support for hooking of the json parser operations and
allows re-using of modified JSON parsing outside of json ext.
Diffstat (limited to 'ext/json/php_json_parser.h')
-rw-r--r-- | ext/json/php_json_parser.h | 64 |
1 files changed, 58 insertions, 6 deletions
diff --git a/ext/json/php_json_parser.h b/ext/json/php_json_parser.h index 6964ef8e8e..9a3f206667 100644 --- a/ext/json/php_json_parser.h +++ b/ext/json/php_json_parser.h @@ -22,18 +22,70 @@ #include "php.h" #include "php_json_scanner.h" -typedef struct _php_json_parser { +typedef struct _php_json_parser php_json_parser; + +typedef int (*php_json_parser_func_array_create_t)( + php_json_parser *parser, zval *array); +typedef int (*php_json_parser_func_array_append_t)( + php_json_parser *parser, zval *array, zval *zvalue); +typedef int (*php_json_parser_func_array_start_t)( + php_json_parser *parser); +typedef int (*php_json_parser_func_array_end_t)( + php_json_parser *parser, zval *object); +typedef int (*php_json_parser_func_object_create_t)( + php_json_parser *parser, zval *object); +typedef int (*php_json_parser_func_object_update_t)( + php_json_parser *parser, zval *object, zend_string *key, zval *zvalue); +typedef int (*php_json_parser_func_object_start_t)( + php_json_parser *parser); +typedef int (*php_json_parser_func_object_end_t)( + php_json_parser *parser, zval *object); +typedef int (*php_json_parser_func_depth_increase_t)( + php_json_parser *parser); +typedef int (*php_json_parser_func_depth_decrease_t)( + php_json_parser *parser); + +typedef struct _php_json_parser_methods { + php_json_parser_func_array_create_t array_create; + php_json_parser_func_array_append_t array_append; + php_json_parser_func_array_start_t array_start; + php_json_parser_func_array_end_t array_end; + php_json_parser_func_object_create_t object_create; + php_json_parser_func_object_update_t object_update; + php_json_parser_func_object_start_t object_start; + php_json_parser_func_object_end_t object_end; + php_json_parser_func_depth_increase_t depth_increase; + php_json_parser_func_depth_decrease_t depth_decrease; +} php_json_parser_methods; + +struct _php_json_parser { php_json_scanner scanner; zval *return_value; - int depth; + unsigned int depth; int max_depth; -} php_json_parser; + const php_json_parser_methods *methods; +}; + +PHP_JSON_API void php_json_parser_init_ex( + php_json_parser *parser, + zval *return_value, + char *str, + size_t str_len, + int options, + int max_depth, + const php_json_parser_methods *methods); -void php_json_parser_init(php_json_parser *parser, zval *return_value, char *str, size_t str_len, int options, int max_depth); +PHP_JSON_API void php_json_parser_init( + php_json_parser *parser, + zval *return_value, + char *str, + size_t str_len, + int options, + int max_depth); -php_json_error_code php_json_parser_error_code(php_json_parser *parser); +PHP_JSON_API php_json_error_code php_json_parser_error_code(const php_json_parser *parser); -int php_json_yyparse(php_json_parser *parser); +PHP_JSON_API int php_json_yyparse(php_json_parser *parser); #endif /* PHP_JSON_PARSER_H */ |