1 /* 2 +----------------------------------------------------------------------+ 3 | PHP Version 7 | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 1997-2018 The PHP Group | 6 +----------------------------------------------------------------------+ 7 | This source file is subject to version 3.01 of the PHP license, | 8 | that is bundled with this package in the file LICENSE, and is | 9 | available through the world-wide-web at the following url: | 10 | http://www.php.net/license/3_01.txt | 11 | If you did not receive a copy of the PHP license and are unable to | 12 | obtain it through the world-wide-web, please send a note to | 13 | license@php.net so we can mail you a copy immediately. | 14 +----------------------------------------------------------------------+ 15 | Author: Jakub Zelenka <bukka@php.net> | 16 +----------------------------------------------------------------------+ 17 */ 18 19 #ifndef PHP_JSON_PARSER_H 20 #define PHP_JSON_PARSER_H 21 22 #include "php.h" 23 #include "php_json_scanner.h" 24 25 typedef struct _php_json_parser php_json_parser; 26 27 typedef int (*php_json_parser_func_array_create_t)( 28 php_json_parser *parser, zval *array); 29 typedef int (*php_json_parser_func_array_append_t)( 30 php_json_parser *parser, zval *array, zval *zvalue); 31 typedef int (*php_json_parser_func_array_start_t)( 32 php_json_parser *parser); 33 typedef int (*php_json_parser_func_array_end_t)( 34 php_json_parser *parser, zval *object); 35 typedef int (*php_json_parser_func_object_create_t)( 36 php_json_parser *parser, zval *object); 37 typedef int (*php_json_parser_func_object_update_t)( 38 php_json_parser *parser, zval *object, zend_string *key, zval *zvalue); 39 typedef int (*php_json_parser_func_object_start_t)( 40 php_json_parser *parser); 41 typedef int (*php_json_parser_func_object_end_t)( 42 php_json_parser *parser, zval *object); 43 44 typedef struct _php_json_parser_methods { 45 php_json_parser_func_array_create_t array_create; 46 php_json_parser_func_array_append_t array_append; 47 php_json_parser_func_array_start_t array_start; 48 php_json_parser_func_array_end_t array_end; 49 php_json_parser_func_object_create_t object_create; 50 php_json_parser_func_object_update_t object_update; 51 php_json_parser_func_object_start_t object_start; 52 php_json_parser_func_object_end_t object_end; 53 } php_json_parser_methods; 54 55 struct _php_json_parser { 56 php_json_scanner scanner; 57 zval *return_value; 58 int depth; 59 int max_depth; 60 php_json_parser_methods methods; 61 }; 62 63 PHP_JSON_API void php_json_parser_init_ex( 64 php_json_parser *parser, 65 zval *return_value, 66 char *str, 67 size_t str_len, 68 int options, 69 int max_depth, 70 const php_json_parser_methods *methods); 71 72 PHP_JSON_API void php_json_parser_init( 73 php_json_parser *parser, 74 zval *return_value, 75 char *str, 76 size_t str_len, 77 int options, 78 int max_depth); 79 80 PHP_JSON_API php_json_error_code php_json_parser_error_code(const php_json_parser *parser); 81 82 PHP_JSON_API int php_json_parse(php_json_parser *parser); 83 84 int php_json_yyparse(php_json_parser *parser); 85 86 #endif /* PHP_JSON_PARSER_H */ 87