diff options
Diffstat (limited to 'ext/json/JSON_parser.h')
-rw-r--r-- | ext/json/JSON_parser.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/ext/json/JSON_parser.h b/ext/json/JSON_parser.h new file mode 100644 index 0000000..541664b --- /dev/null +++ b/ext/json/JSON_parser.h @@ -0,0 +1,40 @@ +/* JSON_parser.h */ + +#ifndef JSON_PARSER_H +#define JSON_PARSER_H + +#include "php.h" +#include "ext/standard/php_smart_str.h" +#include "php_json.h" + +#define JSON_PARSER_DEFAULT_DEPTH 512 + +typedef struct JSON_parser_struct { + int state; + int depth; + int top; + int error_code; + int* stack; + zval **the_zstack; + zval *the_static_zstack[JSON_PARSER_DEFAULT_DEPTH]; +} * JSON_parser; + +enum error_codes { + PHP_JSON_ERROR_NONE = 0, + PHP_JSON_ERROR_DEPTH, + PHP_JSON_ERROR_STATE_MISMATCH, + PHP_JSON_ERROR_CTRL_CHAR, + PHP_JSON_ERROR_SYNTAX, + PHP_JSON_ERROR_UTF8 +}; + +extern JSON_parser new_JSON_parser(int depth); +extern int parse_JSON_ex(JSON_parser jp, zval *z, unsigned short utf16_json[], int length, int options TSRMLS_DC); +extern int free_JSON_parser(JSON_parser jp); + +static inline int parse_JSON(JSON_parser jp, zval *z, unsigned short utf16_json[], int length, int assoc TSRMLS_DC) +{ + return parse_JSON_ex(jp, z, utf16_json, length, assoc ? PHP_JSON_OBJECT_AS_ARRAY : 0 TSRMLS_CC); +} + +#endif |