summaryrefslogtreecommitdiff
path: root/ext/json
diff options
context:
space:
mode:
authorSVN Migration <svn@php.net>2006-10-15 21:09:28 +0000
committerSVN Migration <svn@php.net>2006-10-15 21:09:28 +0000
commit88ec761548b66f58acc1a86cdd0fc164ca925476 (patch)
treed0af978fa00d83bb1d82c613f66477fbd6bb18aa /ext/json
parent268984b4787e797db6054313fc9ba3b9e845306e (diff)
downloadphp-git-PECL_OPENSSL.tar.gz
This commit was manufactured by cvs2svn to create branch 'PECL_OPENSSL'.PECL_OPENSSL
Diffstat (limited to 'ext/json')
-rw-r--r--ext/json/CREDITS2
-rw-r--r--ext/json/JSON_parser.c757
-rw-r--r--ext/json/JSON_parser.h6
-rw-r--r--ext/json/README76
-rw-r--r--ext/json/config.m416
-rw-r--r--ext/json/config.w3210
-rw-r--r--ext/json/json.c468
-rw-r--r--ext/json/json.dsp135
-rw-r--r--ext/json/package.xml152
-rw-r--r--ext/json/php_json.h55
-rw-r--r--ext/json/tests/001.phpt71
-rw-r--r--ext/json/tests/002.phpt28
-rw-r--r--ext/json/tests/003.phpt33
-rw-r--r--ext/json/tests/004.phpt27
-rw-r--r--ext/json/tests/005.phpt27
-rw-r--r--ext/json/tests/fail001.phpt165
-rw-r--r--ext/json/tests/pass001.1.phpt895
-rw-r--r--ext/json/tests/pass001.phpt708
-rw-r--r--ext/json/tests/pass002.phpt275
-rw-r--r--ext/json/tests/pass003.phpt94
-rw-r--r--ext/json/utf8_decode.c179
-rw-r--r--ext/json/utf8_decode.h18
-rw-r--r--ext/json/utf8_to_utf16.c56
-rw-r--r--ext/json/utf8_to_utf16.h3
24 files changed, 0 insertions, 4256 deletions
diff --git a/ext/json/CREDITS b/ext/json/CREDITS
deleted file mode 100644
index dba45eb561..0000000000
--- a/ext/json/CREDITS
+++ /dev/null
@@ -1,2 +0,0 @@
-JSON
-Omar Kilani
diff --git a/ext/json/JSON_parser.c b/ext/json/JSON_parser.c
deleted file mode 100644
index dce42d37ee..0000000000
--- a/ext/json/JSON_parser.c
+++ /dev/null
@@ -1,757 +0,0 @@
-/* JSON_parser.c */
-
-/* 2005-12-30 */
-
-/*
-Copyright (c) 2005 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-
-#include "JSON_parser.h"
-#include <stdio.h>
-
-#define true 1
-#define false 0
-
-/*
- Characters are mapped into these 32 symbol classes. This allows for
- significant reductions in the size of the state transition table.
-*/
-
-/* error */
-#define S_ERR -1
-
-/* space */
-#define S_SPA 0
-
-/* other whitespace */
-#define S_WSP 1
-
-/* { */
-#define S_LBE 2
-
-/* } */
-#define S_RBE 3
-
-/* [ */
-#define S_LBT 4
-
-/* ] */
-#define S_RBT 5
-
-/* : */
-#define S_COL 6
-
-/* , */
-#define S_COM 7
-
-/* " */
-#define S_QUO 8
-
-/* \ */
-#define S_BAC 9
-
-/* / */
-#define S_SLA 10
-
-/* + */
-#define S_PLU 11
-
-/* - */
-#define S_MIN 12
-
-/* . */
-#define S_DOT 13
-
-/* 0 */
-#define S_ZER 14
-
-/* 123456789 */
-#define S_DIG 15
-
-/* a */
-#define S__A_ 16
-
-/* b */
-#define S__B_ 17
-
-/* c */
-#define S__C_ 18
-
-/* d */
-#define S__D_ 19
-
-/* e */
-#define S__E_ 20
-
-/* f */
-#define S__F_ 21
-
-/* l */
-#define S__L_ 22
-
-/* n */
-#define S__N_ 23
-
-/* r */
-#define S__R_ 24
-
-/* s */
-#define S__S_ 25
-
-/* t */
-#define S__T_ 26
-
-/* u */
-#define S__U_ 27
-
-/* ABCDF */
-#define S_A_F 28
-
-/* E */
-#define S_E 29
-
-/* everything else */
-#define S_ETC 30
-
-
-/*
- This table maps the 128 ASCII characters into the 32 character classes.
- The remaining Unicode characters should be mapped to S_ETC.
-*/
-static const int ascii_class[128] = {
- S_ERR, S_ERR, S_ERR, S_ERR, S_ERR, S_ERR, S_ERR, S_ERR,
- S_ERR, S_WSP, S_WSP, S_ERR, S_ERR, S_WSP, S_ERR, S_ERR,
- S_ERR, S_ERR, S_ERR, S_ERR, S_ERR, S_ERR, S_ERR, S_ERR,
- S_ERR, S_ERR, S_ERR, S_ERR, S_ERR, S_ERR, S_ERR, S_ERR,
-
- S_SPA, S_ETC, S_QUO, S_ETC, S_ETC, S_ETC, S_ETC, S_ETC,
- S_ETC, S_ETC, S_ETC, S_PLU, S_COM, S_MIN, S_DOT, S_SLA,
- S_ZER, S_DIG, S_DIG, S_DIG, S_DIG, S_DIG, S_DIG, S_DIG,
- S_DIG, S_DIG, S_COL, S_ETC, S_ETC, S_ETC, S_ETC, S_ETC,
-
- S_ETC, S_A_F, S_A_F, S_A_F, S_A_F, S_E , S_A_F, S_ETC,
- S_ETC, S_ETC, S_ETC, S_ETC, S_ETC, S_ETC, S_ETC, S_ETC,
- S_ETC, S_ETC, S_ETC, S_ETC, S_ETC, S_ETC, S_ETC, S_ETC,
- S_ETC, S_ETC, S_ETC, S_LBT, S_BAC, S_RBT, S_ETC, S_ETC,
-
- S_ETC, S__A_, S__B_, S__C_, S__D_, S__E_, S__F_, S_ETC,
- S_ETC, S_ETC, S_ETC, S_ETC, S__L_, S_ETC, S__N_, S_ETC,
- S_ETC, S_ETC, S__R_, S__S_, S__T_, S__U_, S_ETC, S_ETC,
- S_ETC, S_ETC, S_ETC, S_LBE, S_ETC, S_RBE, S_ETC, S_ETC
-};
-
-
-/*
- The state transition table takes the current state and the current symbol,
- and returns either a new state or an action. A new state is a number between
- 0 and 29. An action is a negative number between -1 and -9. A JSON text is
- accepted if the end of the text is in state 9 and mode is MODE_DONE.
-*/
-static const int state_transition_table[30][31] = {
-/* 0*/ { 0, 0,-8,-1,-6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/* 1*/ { 1, 1,-1,-9,-1,-1,-1,-1, 3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/* 2*/ { 2, 2,-8,-1,-6,-5,-1,-1, 3,-1,-1,-1,20,-1,21,22,-1,-1,-1,-1,-1,13,-1,17,-1,-1,10,-1,-1,-1,-1},
-/* 3*/ { 3,-1, 3, 3, 3, 3, 3, 3,-4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
-/* 4*/ {-1,-1,-1,-1,-1,-1,-1,-1, 3, 3, 3,-1,-1,-1,-1,-1,-1, 3,-1,-1,-1, 3,-1, 3, 3,-1, 3, 5,-1,-1,-1},
-/* 5*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 6, 6, 6, 6, 6, 6, 6, 6,-1,-1,-1,-1,-1,-1, 6, 6,-1},
-/* 6*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 7, 7, 7, 7, 7, 7, 7, 7,-1,-1,-1,-1,-1,-1, 7, 7,-1},
-/* 7*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 8, 8, 8, 8, 8, 8, 8, 8,-1,-1,-1,-1,-1,-1, 8, 8,-1},
-/* 8*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 3, 3, 3, 3, 3, 3, 3, 3,-1,-1,-1,-1,-1,-1, 3, 3,-1},
-/* 9*/ { 9, 9,-1,-7,-1,-5,-1,-3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*10*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1},
-/*11*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,12,-1,-1,-1},
-/*12*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*13*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*14*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,15,-1,-1,-1,-1,-1,-1,-1,-1},
-/*15*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,16,-1,-1,-1,-1,-1},
-/*16*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*17*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,18,-1,-1,-1},
-/*18*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,19,-1,-1,-1,-1,-1,-1,-1,-1},
-/*19*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 9,-1,-1,-1,-1,-1,-1,-1,-1},
-/*20*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,21,22,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*21*/ { 9, 9,-1,-7,-1,-5,-1,-3,-1,-1,-1,-1,-1,23,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*22*/ { 9, 9,-1,-7,-1,-5,-1,-3,-1,-1,-1,-1,-1,23,22,22,-1,-1,-1,-1,24,-1,-1,-1,-1,-1,-1,-1,-1,24,-1},
-/*23*/ { 9, 9,-1,-7,-1,-5,-1,-3,-1,-1,-1,-1,-1,-1,23,23,-1,-1,-1,-1,24,-1,-1,-1,-1,-1,-1,-1,-1,24,-1},
-/*24*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,25,25,-1,26,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*25*/ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,26,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*26*/ { 9, 9,-1,-7,-1,-5,-1,-3,-1,-1,-1,-1,-1,-1,26,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*27*/ {27,27,-1,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
-/*28*/ {28,28,-8,-1,-6,-1,-1,-1, 3,-1,-1,-1,20,-1,21,22,-1,-1,-1,-1,-1,13,-1,17,-1,-1,10,-1,-1,-1,-1},
-/*29*/ {29,29,-1,-1,-1,-1,-1,-1, 3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}
-};
-
-#define JSON_PARSER_MAX_DEPTH 20
-
-
-/*
- A stack maintains the states of nested structures.
-*/
-
-typedef struct json_parser
-{
- int the_stack[JSON_PARSER_MAX_DEPTH];
- zval *the_zstack[JSON_PARSER_MAX_DEPTH];
- int the_top;
-} json_parser;
-
-
-/*
- These modes can be pushed on the PDA stack.
-*/
-#define MODE_DONE 1
-#define MODE_KEY 2
-#define MODE_OBJECT 3
-#define MODE_ARRAY 4
-
-/*
- Push a mode onto the stack. Return false if there is overflow.
-*/
-static int
-push(json_parser *json, zval *z, int mode)
-{
- json->the_top += 1;
- if (json->the_top >= JSON_PARSER_MAX_DEPTH) {
- return false;
- }
-
- json->the_stack[json->the_top] = mode;
- return true;
-}
-
-
-/*
- Pop the stack, assuring that the current mode matches the expectation.
- Return false if there is underflow or if the modes mismatch.
-*/
-static int
-pop(json_parser *json, zval *z, int mode)
-{
- if (json->the_top < 0 || json->the_stack[json->the_top] != mode) {
- return false;
- }
- json->the_stack[json->the_top] = 0;
- json->the_top -= 1;
-
- return true;
-}
-
-
-static int dehexchar(char c)
-{
- if (c >= '0' && c <= '9')
- {
- return c - '0';
- }
- else if (c >= 'A' && c <= 'F')
- {
- return c - ('A' - 10);
- }
- else if (c >= 'a' && c <= 'f')
- {
- return c - ('a' - 10);
- }
- else
- {
- return -1;
- }
-}
-
-
-static void json_create_zval(zval **z, smart_str *buf, int type)
-{
- ALLOC_INIT_ZVAL(*z);
-
- if (type == IS_LONG)
- {
- ZVAL_LONG(*z, atol(buf->c));
- }
- else if (type == IS_DOUBLE)
- {
- ZVAL_DOUBLE(*z, atof(buf->c));
- }
- else if (type == IS_STRING)
- {
- ZVAL_STRINGL(*z, buf->c, buf->len, 1);
- }
- else if (type == IS_BOOL)
- {
- ZVAL_BOOL(*z, (*(buf->c) == 't'));
- }
- else /* type == IS_NULL) || type unknown */
- {
- ZVAL_NULL(*z);
- }
-}
-
-
-static void utf16_to_utf8(smart_str *buf, unsigned short utf16)
-{
- if (utf16 < 0x80)
- {
- smart_str_appendc(buf, (unsigned char) utf16);
- }
- else if (utf16 < 0x800)
- {
- smart_str_appendc(buf, 0xc0 | (utf16 >> 6));
- smart_str_appendc(buf, 0x80 | (utf16 & 0x3f));
- }
- else
- {
- smart_str_appendc(buf, 0xe0 | (utf16 >> 12));
- smart_str_appendc(buf, 0x80 | ((utf16 >> 6) & 0x3f));
- smart_str_appendc(buf, 0x80 | (utf16 & 0x3f));
- }
-}
-
-static void attach_zval(json_parser *json, int up, int cur, smart_str *key, int assoc TSRMLS_DC)
-{
- zval *root = json->the_zstack[up];
- zval *child = json->the_zstack[cur];
- int up_mode = json->the_stack[up];
-
- if (up_mode == MODE_ARRAY)
- {
- add_next_index_zval(root, child);
- }
- else if (up_mode == MODE_OBJECT)
- {
- if (!assoc)
- {
- add_property_zval_ex(root, (key->len ? key->c : "_empty_"), (key->len ? (key->len + 1) : sizeof("_empty_")), child TSRMLS_CC);
-#if PHP_MAJOR_VERSION >= 5
- ZVAL_DELREF(child);
-#endif
- }
- else
- {
- add_assoc_zval_ex(root, (key->len ? key->c : "_empty_"), (key->len ? (key->len + 1) : sizeof("_empty_")), child);
- }
- key->len = 0;
- }
-}
-
-
-#define FREE_BUFFERS() do { smart_str_free(&buf); smart_str_free(&key); } while (0);
-#define SWAP_BUFFERS(from, to) do { \
- char *t1 = from.c; \
- int t2 = from.a; \
- from.c = to.c; \
- from.a = to.a; \
- to.c = t1; \
- to.a = t2; \
- to.len = from.len; \
- from.len = 0; \
- } while(0);
-#define JSON_RESET_TYPE() do { type = -1; } while(0);
-#define JSON(x) the_json.x
-
-
-/*
- The JSON_parser takes a UTF-16 encoded string and determines if it is a
- syntactically correct JSON text. Along the way, it creates a PHP variable.
-
- It is implemented as a Pushdown Automaton; that means it is a finite state
- machine with a stack.
-*/
-int
-JSON_parser(zval *z, unsigned short p[], int length, int assoc TSRMLS_DC)
-{
- int b; /* the next character */
- int c; /* the next character class */
- int s; /* the next state */
- json_parser the_json; /* the parser state */
- int the_state = 0;
- int the_index;
-
- smart_str buf = {0};
- smart_str key = {0};
-
- int type = -1;
- unsigned short utf16 = 0;
-
- JSON(the_top) = -1;
- push(&the_json, z, MODE_DONE);
-
- for (the_index = 0; the_index < length; the_index += 1) {
- b = p[the_index];
- if ((b & 127) == b) {
- c = ascii_class[b];
- if (c <= S_ERR) {
- FREE_BUFFERS();
- return false;
- }
- } else {
- c = S_ETC;
- }
-/*
- Get the next state from the transition table.
-*/
- s = state_transition_table[the_state][c];
- if (s < 0) {
-/*
- Perform one of the predefined actions.
-*/
- switch (s) {
-/*
- empty }
-*/
- case -9:
- if (!pop(&the_json, z, MODE_KEY)) {
- FREE_BUFFERS();
- return false;
- }
- the_state = 9;
- break;
-/*
- {
-*/
- case -8:
- if (!push(&the_json, z, MODE_KEY)) {
- FREE_BUFFERS();
- return false;
- }
-
- the_state = 1;
- if (JSON(the_top) > 0)
- {
- zval *obj;
-
- if (JSON(the_top) == 1)
- {
- obj = z;
- }
- else
- {
- ALLOC_INIT_ZVAL(obj);
- }
-
- if (!assoc)
- {
- object_init(obj);
- }
- else
- {
- array_init(obj);
- }
-
- JSON(the_zstack)[JSON(the_top)] = obj;
-
- if (JSON(the_top) > 1)
- {
- attach_zval(&the_json, JSON(the_top-1), JSON(the_top), &key, assoc TSRMLS_CC);
- }
-
- JSON_RESET_TYPE();
- }
-
- break;
-/*
- }
-*/
- case -7:
- if (type != -1 &&
- (JSON(the_stack)[JSON(the_top)] == MODE_OBJECT ||
- JSON(the_stack)[JSON(the_top)] == MODE_ARRAY))
- {
- zval *mval;
- smart_str_0(&buf);
-
- json_create_zval(&mval, &buf, type);
-
- if (!assoc)
- {
- add_property_zval_ex(JSON(the_zstack)[JSON(the_top)], (key.len ? key.c : "_empty_"), (key.len ? (key.len + 1) : sizeof("_empty_")), mval TSRMLS_CC);
-#if PHP_MAJOR_VERSION >= 5
- ZVAL_DELREF(mval);
-#endif
- }
- else
- {
- add_assoc_zval_ex(JSON(the_zstack)[JSON(the_top)], (key.len ? key.c : "_empty_"), (key.len ? (key.len + 1) : sizeof("_empty_")), mval);
- }
- key.len = 0;
- buf.len = 0;
- JSON_RESET_TYPE();
- }
-
-
- if (!pop(&the_json, z, MODE_OBJECT)) {
- FREE_BUFFERS();
- return false;
- }
- the_state = 9;
- break;
-/*
- [
-*/
- case -6:
- if (!push(&the_json, z, MODE_ARRAY)) {
- FREE_BUFFERS();
- return false;
- }
- the_state = 2;
-
- if (JSON(the_top) > 0)
- {
- zval *arr;
-
- if (JSON(the_top) == 1)
- {
- arr = z;
- }
- else
- {
- ALLOC_INIT_ZVAL(arr);
- }
-
- array_init(arr);
- JSON(the_zstack)[JSON(the_top)] = arr;
-
- if (JSON(the_top) > 1)
- {
- attach_zval(&the_json, JSON(the_top-1), JSON(the_top), &key, assoc TSRMLS_CC);
- }
-
- JSON_RESET_TYPE();
- }
-
- break;
-/*
- ]
-*/
- case -5:
- {
- if (type != -1 &&
- (JSON(the_stack)[JSON(the_top)] == MODE_OBJECT ||
- JSON(the_stack)[JSON(the_top)] == MODE_ARRAY))
- {
- zval *mval;
- smart_str_0(&buf);
-
- json_create_zval(&mval, &buf, type);
- add_next_index_zval(JSON(the_zstack)[JSON(the_top)], mval);
- buf.len = 0;
- JSON_RESET_TYPE();
- }
-
- if (!pop(&the_json, z, MODE_ARRAY)) {
- FREE_BUFFERS();
- return false;
- }
- the_state = 9;
- }
- break;
-/*
- "
-*/
- case -4:
- switch (JSON(the_stack)[JSON(the_top)]) {
- case MODE_KEY:
- the_state = 27;
- smart_str_0(&buf);
- SWAP_BUFFERS(buf, key);
- JSON_RESET_TYPE();
- break;
- case MODE_ARRAY:
- case MODE_OBJECT:
- the_state = 9;
- break;
- default:
- FREE_BUFFERS();
- return false;
- }
- break;
-/*
- ,
-*/
- case -3:
- {
- zval *mval;
-
- if (type != -1 &&
- (JSON(the_stack)[JSON(the_top)] == MODE_OBJECT ||
- JSON(the_stack[JSON(the_top)]) == MODE_ARRAY))
- {
- smart_str_0(&buf);
- json_create_zval(&mval, &buf, type);
- }
-
- switch (JSON(the_stack)[JSON(the_top)]) {
- case MODE_OBJECT:
- if (pop(&the_json, z, MODE_OBJECT) && push(&the_json, z, MODE_KEY)) {
- if (type != -1)
- {
- if (!assoc)
- {
- add_property_zval_ex(JSON(the_zstack)[JSON(the_top)], (key.len ? key.c : "_empty_"), (key.len ? (key.len + 1) : sizeof("_empty_")), mval TSRMLS_CC);
-#if PHP_MAJOR_VERSION >= 5
- ZVAL_DELREF(mval);
-#endif
- }
- else
- {
- add_assoc_zval_ex(JSON(the_zstack)[JSON(the_top)], (key.len ? key.c : "_empty_"), (key.len ? (key.len + 1) : sizeof("_empty_")), mval);
- }
- key.len = 0;
- }
- the_state = 29;
- }
- break;
- case MODE_ARRAY:
- if (type != -1)
- {
- add_next_index_zval(JSON(the_zstack)[JSON(the_top)], mval);
- }
- the_state = 28;
- break;
- default:
- FREE_BUFFERS();
- return false;
- }
- buf.len = 0;
- JSON_RESET_TYPE();
- }
- break;
-/*
- :
-*/
- case -2:
- if (pop(&the_json, z, MODE_KEY) && push(&the_json, z, MODE_OBJECT)) {
- the_state = 28;
- break;
- }
-/*
- syntax error
-*/
- case -1:
- {
- FREE_BUFFERS();
- return false;
- }
- }
- } else {
-/*
- Change the state and iterate.
-*/
- if (type == IS_STRING)
- {
- if (s == 3 && the_state != 8)
- {
- if (the_state != 4)
- {
- utf16_to_utf8(&buf, b);
- }
- else
- {
- switch (b)
- {
- case 'b':
- smart_str_appendc(&buf, '\b');
- break;
- case 't':
- smart_str_appendc(&buf, '\t');
- break;
- case 'n':
- smart_str_appendc(&buf, '\n');
- break;
- case 'f':
- smart_str_appendc(&buf, '\f');
- break;
- case 'r':
- smart_str_appendc(&buf, '\r');
- break;
- default:
- utf16_to_utf8(&buf, b);
- break;
- }
- }
- }
- else if (s == 6)
- {
- utf16 = dehexchar(b) << 12;
- }
- else if (s == 7)
- {
- utf16 += dehexchar(b) << 8;
- }
- else if (s == 8)
- {
- utf16 += dehexchar(b) << 4;
- }
- else if (s == 3 && the_state == 8)
- {
- utf16 += dehexchar(b);
- utf16_to_utf8(&buf, utf16);
- }
- }
- else if (type < IS_LONG && (c == S_DIG || c == S_ZER))
- {
- type = IS_LONG;
- smart_str_appendc(&buf, b);
- }
- else if (type == IS_LONG && s == 24)
- {
- type = IS_DOUBLE;
- smart_str_appendc(&buf, b);
- }
- else if (type < IS_DOUBLE && c == S_DOT)
- {
- type = IS_DOUBLE;
- smart_str_appendc(&buf, b);
- }
- else if (type < IS_STRING && c == S_QUO)
- {
- type = IS_STRING;
- }
- else if (type < IS_BOOL && ((the_state == 12 && s == 9) || (the_state == 16 && s == 9)))
- {
- type = IS_BOOL;
- }
- else if (type < IS_NULL && the_state == 19 && s == 9)
- {
- type = IS_NULL;
- }
- else if (type != IS_STRING && c > S_WSP)
- {
- utf16_to_utf8(&buf, b);
- }
-
- the_state = s;
- }
- }
-
- FREE_BUFFERS();
-
- return the_state == 9 && pop(&the_json, z, MODE_DONE);
-}
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/json/JSON_parser.h b/ext/json/JSON_parser.h
deleted file mode 100644
index 4790f728e3..0000000000
--- a/ext/json/JSON_parser.h
+++ /dev/null
@@ -1,6 +0,0 @@
-/* JSON_checker.h */
-
-#include "php.h"
-#include "ext/standard/php_smart_str.h"
-
-extern int JSON_parser(zval *z, unsigned short p[], int length, int assoc TSRMLS_DC);
diff --git a/ext/json/README b/ext/json/README
deleted file mode 100644
index d680b0c592..0000000000
--- a/ext/json/README
+++ /dev/null
@@ -1,76 +0,0 @@
-json 1.2.0
-==========
-
-This extension implements the JavaScript Object Notation (JSON)
-data-interchange format as specified in [0].
-
-Two functions are implemented: encoding and decoding. The decoding
-is handled by a parser based on JSON_checker[1] by Douglas Crockford.
-
-
-Function overview
------------------
-
- string json_encode ( mixed value )
-
-json_encode returns a string containing the JSON representation of value.
-value can be any type except a resource.
-
- mixed json_decode ( string json, [bool assoc] )
-
-json_decode takes a JSON string and converts it into a PHP variable.
-When assoc is given, and evaluates to TRUE, json_decode() will return
-any objects as associative arrays.
-
-
-Example usage
--------------
-
-$arr = array("a"=>1,"b"=>2,"c"=>3,"d"=>4,"e"=>5);
-echo json_encode($arr);
-
----> {"a":1,"b":2,"c":3,"d":4,"e":5}
-
-$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
-var_dump(json_decode($json));
-
----> object(stdClass)#1 (5) {
- ["a"]=>
- int(1)
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["d"]=>
- int(4)
- ["e"]=>
- int(5)
- }
-
-$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
-var_dump(json_decode($json, true));
-
----> array(5) {
- ["a"]=>
- int(1)
- ["b"]=>
- int(2)
- ["c"]=>
- int(3)
- ["d"]=>
- int(4)
- ["e"]=>
- int(5)
- }
-
-
-Authors
--------
-
-Omar Kilani <omar@php.net>
-
-
----
-
-[0] http://www.crockford.com/JSON/draft-jsonorg-json-00.txt
-[1] http://www.crockford.com/JSON/JSON_checker/
diff --git a/ext/json/config.m4 b/ext/json/config.m4
deleted file mode 100644
index b5c50cc0e5..0000000000
--- a/ext/json/config.m4
+++ /dev/null
@@ -1,16 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_ENABLE(json, whether to enable JavaScript Object Serialization support,
-[ --disable-json Disable JavaScript Object Serialization support], yes)
-
-if test "$PHP_JSON" != "no"; then
- AC_DEFINE([HAVE_JSON],1 ,[whether to enable JavaScript Object Serialization support])
- AC_HEADER_STDC
-
- PHP_NEW_EXTENSION(json, json.c utf8_to_utf16.c utf8_decode.c JSON_parser.c, $ext_shared)
- PHP_SUBST(JSON_SHARED_LIBADD)
-fi
-
-# vim600: sts=2 sw=2 et
diff --git a/ext/json/config.w32 b/ext/json/config.w32
deleted file mode 100644
index a3559e08b7..0000000000
--- a/ext/json/config.w32
+++ /dev/null
@@ -1,10 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_ENABLE("json", "JavaScript Object Serialization support", "yes");
-
-if (PHP_JSON != "no") {
- EXTENSION('json', 'json.c', PHP_JSON_SHARED, "");
- ADD_SOURCES(configure_module_dirname, "JSON_parser.c utf8_decode.c utf8_to_utf16.c", "json");
-}
-
diff --git a/ext/json/json.c b/ext/json/json.c
deleted file mode 100644
index df02927d0a..0000000000
--- a/ext/json/json.c
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2006 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | http://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Omar Kilani <omar@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "ext/standard/php_smart_str.h"
-#include "utf8_to_utf16.h"
-#include "JSON_parser.h"
-#include "php_json.h"
-
-static PHP_MINFO_FUNCTION(json);
-
-static PHP_FUNCTION(json_encode);
-static PHP_FUNCTION(json_decode);
-
-/* If you declare any globals in php_json.h uncomment this:
-ZEND_DECLARE_MODULE_GLOBALS(json)
-*/
-static const char digits[] = "0123456789abcdef";
-
-/* {{{ json_functions[]
- *
- * Every user visible function must have an entry in json_functions[].
- */
-static function_entry json_functions[] = {
- PHP_FE(json_encode, NULL)
- PHP_FE(json_decode, NULL)
- {NULL, NULL, NULL} /* Must be the last line in json_functions[] */
-};
-/* }}} */
-
-/* {{{ json_module_entry
- */
-zend_module_entry json_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "json",
- json_functions,
- NULL,
- NULL,
- NULL,
- NULL,
- PHP_MINFO(json),
-#if ZEND_MODULE_API_NO >= 20010901
- PHP_JSON_VERSION,
-#endif
- STANDARD_MODULE_PROPERTIES
-};
-/* }}} */
-
-#ifdef COMPILE_DL_JSON
-ZEND_GET_MODULE(json)
-#endif
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-static PHP_MINFO_FUNCTION(json)
-{
- php_info_print_table_start();
- php_info_print_table_row(2, "json support", "enabled");
- php_info_print_table_row(2, "json version", PHP_JSON_VERSION);
- php_info_print_table_end();
-}
-/* }}} */
-
-static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC);
-static void json_escape_string(smart_str *buf, char *s, int len);
-
-static int json_determine_array_type(zval **val TSRMLS_DC) {
- int i;
- HashTable *myht;
-
- if (Z_TYPE_PP(val) == IS_ARRAY) {
- myht = HASH_OF(*val);
- } else {
- myht = Z_OBJPROP_PP(val);
- return 1;
- }
-
- i = myht ? zend_hash_num_elements(myht) : 0;
- if (i > 0) {
- char *key;
- ulong index, idx;
- uint key_len;
- HashPosition pos;
-
- zend_hash_internal_pointer_reset_ex(myht, &pos);
- idx = 0;
- for (;; zend_hash_move_forward_ex(myht, &pos)) {
- i = zend_hash_get_current_key_ex(myht, &key, &key_len, &index, 0, &pos);
- if (i == HASH_KEY_NON_EXISTANT)
- break;
-
- if (i == HASH_KEY_IS_STRING) {
- return 1;
- } else {
- if (index != idx) {
- return 1;
- }
- }
- idx++;
- }
- }
-
- return 0;
-}
-
-static void json_encode_array(smart_str *buf, zval **val TSRMLS_DC) {
- int i, r;
- HashTable *myht;
-
- if (Z_TYPE_PP(val) == IS_ARRAY) {
- myht = HASH_OF(*val);
- r = json_determine_array_type(val TSRMLS_CC);
- } else {
- myht = Z_OBJPROP_PP(val);
- r = 1;
- }
-
- if (myht && myht->nApplyCount > 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected");
- smart_str_appendl(buf, "null", 4);
- return;
- }
-
- if (r == 0)
- {
- smart_str_appendc(buf, '[');
- }
- else
- {
- smart_str_appendc(buf, '{');
- }
-
- i = myht ? zend_hash_num_elements(myht) : 0;
- if (i > 0) {
- char *key;
- zval **data;
- ulong index;
- uint key_len;
- HashPosition pos;
- HashTable *tmp_ht;
- int need_comma = 0;
-
- zend_hash_internal_pointer_reset_ex(myht, &pos);
- for (;; zend_hash_move_forward_ex(myht, &pos)) {
- i = zend_hash_get_current_key_ex(myht, &key, &key_len, &index, 0, &pos);
- if (i == HASH_KEY_NON_EXISTANT)
- break;
-
- if (zend_hash_get_current_data_ex(myht, (void **) &data, &pos) == SUCCESS) {
- tmp_ht = HASH_OF(*data);
- if (tmp_ht) {
- tmp_ht->nApplyCount++;
- }
-
- if (r == 0) {
- if (need_comma) {
- smart_str_appendc(buf, ',');
- } else {
- need_comma = 1;
- }
-
- json_encode_r(buf, *data TSRMLS_CC);
- } else if (r == 1) {
- if (i == HASH_KEY_IS_STRING) {
- if (key[0] == '\0') {
- /* Skip protected and private members. */
- continue;
- }
-
- if (need_comma) {
- smart_str_appendc(buf, ',');
- } else {
- need_comma = 1;
- }
-
- json_escape_string(buf, key, key_len - 1);
- smart_str_appendc(buf, ':');
-
- json_encode_r(buf, *data TSRMLS_CC);
- } else {
- if (need_comma) {
- smart_str_appendc(buf, ',');
- } else {
- need_comma = 1;
- }
-
- smart_str_appendc(buf, '"');
- smart_str_append_long(buf, (long) index);
- smart_str_appendc(buf, '"');
- smart_str_appendc(buf, ':');
-
- json_encode_r(buf, *data TSRMLS_CC);
- }
- }
-
- if (tmp_ht) {
- tmp_ht->nApplyCount--;
- }
- }
- }
- }
-
- if (r == 0)
- {
- smart_str_appendc(buf, ']');
- }
- else
- {
- smart_str_appendc(buf, '}');
- }
-}
-
-#define REVERSE16(us) (((us & 0xf) << 12) | (((us >> 4) & 0xf) << 8) | (((us >> 8) & 0xf) << 4) | ((us >> 12) & 0xf))
-
-static void json_escape_string(smart_str *buf, char *s, int len)
-{
- int pos = 0;
- unsigned short us;
- unsigned short *utf16;
-
- if (len == 0)
- {
- smart_str_appendl(buf, "\"\"", 2);
- return;
- }
-
- utf16 = (unsigned short *) emalloc(len * sizeof(unsigned short));
-
- len = utf8_to_utf16(utf16, s, len);
- if (len <= 0)
- {
- if (utf16)
- {
- efree(utf16);
- }
-
- smart_str_appendl(buf, "\"\"", 2);
- return;
- }
-
- smart_str_appendc(buf, '"');
-
- while(pos < len)
- {
- us = utf16[pos++];
-
- switch (us)
- {
- case '"':
- {
- smart_str_appendl(buf, "\\\"", 2);
- }
- break;
- case '\\':
- {
- smart_str_appendl(buf, "\\\\", 2);
- }
- break;
- case '/':
- {
- smart_str_appendl(buf, "\\/", 2);
- }
- break;
- case '\b':
- {
- smart_str_appendl(buf, "\\b", 2);
- }
- break;
- case '\f':
- {
- smart_str_appendl(buf, "\\f", 2);
- }
- break;
- case '\n':
- {
- smart_str_appendl(buf, "\\n", 2);
- }
- break;
- case '\r':
- {
- smart_str_appendl(buf, "\\r", 2);
- }
- break;
- case '\t':
- {
- smart_str_appendl(buf, "\\t", 2);
- }
- break;
- default:
- {
- if (us < ' ' || (us & 127) == us)
- {
- smart_str_appendc(buf, (unsigned char) us);
- }
- else
- {
- smart_str_appendl(buf, "\\u", 2);
- us = REVERSE16(us);
-
- smart_str_appendc(buf, digits[us & ((1 << 4) - 1)]);
- us >>= 4;
- smart_str_appendc(buf, digits[us & ((1 << 4) - 1)]);
- us >>= 4;
- smart_str_appendc(buf, digits[us & ((1 << 4) - 1)]);
- us >>= 4;
- smart_str_appendc(buf, digits[us & ((1 << 4) - 1)]);
- }
- }
- break;
- }
- }
-
- smart_str_appendc(buf, '"');
- efree(utf16);
-}
-
-static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC) {
- switch (Z_TYPE_P(val)) {
- case IS_NULL:
- smart_str_appendl(buf, "null", 4);
- break;
- case IS_BOOL:
- if (Z_BVAL_P(val))
- {
- smart_str_appendl(buf, "true", 4);
- }
- else
- {
- smart_str_appendl(buf, "false", 5);
- }
- break;
- case IS_LONG:
- smart_str_append_long(buf, Z_LVAL_P(val));
- break;
- case IS_DOUBLE:
- {
- char *d = NULL;
- int len;
- double dbl = Z_DVAL_P(val);
-
- if (!zend_isinf(dbl) && !zend_isnan(dbl))
- {
- len = spprintf(&d, 0, "%.9g", dbl);
- if (d)
- {
- smart_str_appendl(buf, d, len);
- efree(d);
- }
- }
- else
- {
- zend_error(E_WARNING, "[json] (json_encode_r) double %.9g does not conform to the JSON spec, encoded as 0.", dbl);
- smart_str_appendc(buf, '0');
- }
- }
- break;
- case IS_STRING:
- json_escape_string(buf, Z_STRVAL_P(val), Z_STRLEN_P(val));
- break;
- case IS_ARRAY:
- case IS_OBJECT:
- json_encode_array(buf, &val TSRMLS_CC);
- break;
- default:
- zend_error(E_WARNING, "[json] (json_encode_r) type is unsupported, encoded as null.");
- smart_str_appendl(buf, "null", 4);
- break;
- }
-
- return;
-}
-
-static PHP_FUNCTION(json_encode)
-{
- zval *parameter;
- smart_str buf = {0};
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &parameter) == FAILURE) {
- return;
- }
-
- json_encode_r(&buf, parameter TSRMLS_CC);
-
- ZVAL_STRINGL(return_value, buf.c, buf.len, 1);
-
- smart_str_free(&buf);
-}
-
-static PHP_FUNCTION(json_decode)
-{
- char *parameter;
- int parameter_len, utf16_len;
- zend_bool assoc = 0; /* return JS objects as PHP objects by default */
- zval *z;
- unsigned short *utf16;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &parameter, &parameter_len, &assoc) == FAILURE) {
- return;
- }
-
- if (!parameter_len)
- {
- RETURN_NULL();
- }
-
- utf16 = (unsigned short *) emalloc((parameter_len+1) * sizeof(unsigned short));
-
- utf16_len = utf8_to_utf16(utf16, parameter, parameter_len);
- if (utf16_len <= 0)
- {
- if (utf16)
- {
- efree(utf16);
- }
-
- RETURN_NULL();
- }
-
- ALLOC_INIT_ZVAL(z);
- if (JSON_parser(z, utf16, utf16_len, assoc TSRMLS_CC))
- {
- *return_value = *z;
-
- FREE_ZVAL(z);
- efree(utf16);
- }
- else
- {
- zval_dtor(z);
- FREE_ZVAL(z);
- efree(utf16);
- RETURN_NULL();
- }
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/json/json.dsp b/ext/json/json.dsp
deleted file mode 100644
index e5bb3767bf..0000000000
--- a/ext/json/json.dsp
+++ /dev/null
@@ -1,135 +0,0 @@
-# Microsoft Developer Studio Project File - Name="json" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=json - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "json.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "json.mak" CFG="json - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "json - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "json - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "json - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JSON_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "json_c" /D HAVE_JSON=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /D ZTS=1 /D COMPILE_DL_JSON=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JSON_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "_DEBUG"
-# ADD RSC /l 0x1009 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 iconv.lib php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_json.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "json - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JSON_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "json_c" /D HAVE_JSON=1 /D "ZEND_WIN32" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D ZTS=1 /D COMPILE_DL_JSON=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JSON_EXPORTS" /D "HAVE_FCNTL_H" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "NDEBUG"
-# ADD RSC /l 0x1009 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 iconv.lib php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_json.dll" /libpath:"..\..\Release_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "json - Win32 Debug_TS"
-# Name "json - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=".\json.c"
-# End Source File
-# Begin Source File
-
-SOURCE=.\JSON_parser.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\JSON_parser.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\utf8_decode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\utf8_decode.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\utf8_to_utf16.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\utf8_to_utf16.h
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_json.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/json/package.xml b/ext/json/package.xml
deleted file mode 100644
index 0651de736f..0000000000
--- a/ext/json/package.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <dep type="php" rel="ge" version="4.3.0" optional="no"/>
- <name>json</name>
- <summary>JavaScript Object Notation</summary>
- <maintainers>
- <maintainer>
- <user>omar</user>
- <name>Omar Kilani</name>
- <email>omar@php.net</email>
- <role>lead</role>
- </maintainer>
- </maintainers>
- <description>
- Support for JSON (JavaScript Object Notation) serialization.
- </description>
- <license>PHP 3.01</license>
- <release>
- <state>stable</state>
- <version>1.2.1</version>
- <date>2006-03-18</date>
- <notes>
- Fix PECL bug #7147 - rework handling of comma insertion while encoding.
- Add tests to package.xml
- </notes>
- </release>
- <configureoptions>
- </configureoptions>
- <filelist>
- <file role="doc" name="README" />
- <file role="src" name="config.m4" />
- <file role="src" name="config.w32" />
- <file role="src" name="json.dsp" />
- <file role="src" name="json.c" />
- <file role="src" name="JSON_parser.c" />
- <file role="src" name="JSON_parser.h" />
- <file role="src" name="php_json.h" />
- <file role="src" name="utf8_decode.c" />
- <file role="src" name="utf8_decode.h" />
- <file role="src" name="utf8_to_utf16.c" />
- <file role="src" name="utf8_to_utf16.h" />
- <dir role="test" name="tests">
- <file role="test" name="fail001.phpt" />
- <file role="test" name="pass001.phpt" />
- <file role="test" name="pass001.1.phpt" />
- <file role="test" name="pass002.phpt" />
- <file role="test" name="pass003.phpt" />
- </dir>
- </filelist>
- <changelog>
- <release>
- <state>stable</state>
- <version>1.0.0</version>
- <date>2005-04-01</date>
- <notes>
- Initial release.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.0.1</version>
- <date>2005-06-10</date>
- <notes>
- Fixed non-linear and mixed type array index issues, fixed issues with escaping \\, forked json-c and added Unicode support.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.0.2</version>
- <date>2005-06-11</date>
- <notes>
- Fixed issues with object reference counts under PHP4.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.0.3</version>
- <date>2005-06-15</date>
- <notes>
- Fixed json-c string corruption issues under Mac OS X and FreeBSD.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.0.4</version>
- <date>2005-06-15</date>
- <notes>
- Changes in 1.0.4 released with 1.0.5.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.0.5</version>
- <date>2005-06-16</date>
- <notes>
- Changed spacing in json-c encoding, added optional assoc (boolean) parameter to json_decode to decode as associative array instead of object, fixed issues with escaping /.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.0.6</version>
- <date>2005-08-05</date>
- <notes>
- Fixed issues with exporting private and protected class members.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.0.7</version>
- <date>2005-09-07</date>
- <notes>
- Fixed issues with negative array keys, modified json-c to return an error on unquoted object key names instead of going into an infinite loop.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.0.8</version>
- <date>2005-12-01</date>
- <notes>
- Changed license to LGPL, modified build system to allow static compilation into PHP, added strndup check for json-c.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.1.0</version>
- <date>2005-12-04</date>
- <notes>
- Port to Win32.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.1.1</version>
- <date>2006-01-12</date>
- <notes>
- Cleanup and TSRM performance fixes by rasmus.
- </notes>
- </release>
- <release>
- <state>stable</state>
- <version>1.2.0</version>
- <date>2006-03-15</date>
- <notes>
- Complete rewrite using JSON_checker as the base for the parser. Implements the JSON specification. 3-8x faster on encodes and 1.2x-4x faster on decodes.
- </notes>
- </release>
- </changelog>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/json/php_json.h b/ext/json/php_json.h
deleted file mode 100644
index 98eac25938..0000000000
--- a/ext/json/php_json.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2006 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | http://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Omar Kilani <omar@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifndef PHP_JSON_H
-#define PHP_JSON_H
-
-#define PHP_JSON_VERSION "1.2.1"
-
-extern zend_module_entry json_module_entry;
-#define phpext_json_ptr &json_module_entry
-
-#ifdef PHP_WIN32
-#define PHP_JSON_API __declspec(dllexport)
-#else
-#define PHP_JSON_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#ifdef ZTS
-#define JSON_G(v) TSRMG(json_globals_id, zend_json_globals *, v)
-#else
-#define JSON_G(v) (json_globals.v)
-#endif
-
-#endif /* PHP_JSON_H */
-
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
diff --git a/ext/json/tests/001.phpt b/ext/json/tests/001.phpt
deleted file mode 100644
index 095aedf631..0000000000
--- a/ext/json/tests/001.phpt
+++ /dev/null
@@ -1,71 +0,0 @@
---TEST--
-json_decode() tests
---SKIPIF--
-<?php if (!extension_loaded("json")) print "skip"; ?>
---FILE--
-<?php
-
-var_dump(json_decode());
-var_dump(json_decode(""));
-var_dump(json_decode("", 1));
-var_dump(json_decode("", 0));
-var_dump(json_decode(".", 1));
-var_dump(json_decode(".", 0));
-var_dump(json_decode("<?>"));
-var_dump(json_decode(";"));
-var_dump(json_decode("руссиш"));
-var_dump(json_decode("blah"));
-var_dump(json_decode(NULL));
-var_dump(json_decode('{ "test": { "foo": "bar" } }'));
-var_dump(json_decode('{ "test": { "foo": "" } }'));
-var_dump(json_decode('{ "": { "foo": "" } }'));
-var_dump(json_decode('{ "": { "": "" } }'));
-var_dump(json_decode('{ "": { "": "" }'));
-var_dump(json_decode('{ "": "": "" } }'));
-
-echo "Done\n";
-?>
---EXPECTF--
-Warning: json_decode() expects at least 1 parameter, 0 given in %s on line %d
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-object(stdClass)#1 (1) {
- ["test"]=>
- object(stdClass)#2 (1) {
- ["foo"]=>
- string(3) "bar"
- }
-}
-object(stdClass)#1 (1) {
- ["test"]=>
- object(stdClass)#2 (1) {
- ["foo"]=>
- string(0) ""
- }
-}
-object(stdClass)#1 (1) {
- ["_empty_"]=>
- object(stdClass)#2 (1) {
- ["foo"]=>
- string(0) ""
- }
-}
-object(stdClass)#1 (1) {
- ["_empty_"]=>
- object(stdClass)#2 (1) {
- ["_empty_"]=>
- string(0) ""
- }
-}
-NULL
-NULL
-Done
diff --git a/ext/json/tests/002.phpt b/ext/json/tests/002.phpt
deleted file mode 100644
index 5bc29bc5b9..0000000000
--- a/ext/json/tests/002.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-json_encode() tests
---SKIPIF--
-<?php if (!extension_loaded("json")) print "skip"; ?>
---FILE--
-<?php
-
-var_dump(json_encode(""));
-var_dump(json_encode(NULL));
-var_dump(json_encode(TRUE));
-var_dump(json_encode(array(""=>"")));
-var_dump(json_encode(array(array(1))));
-
-var_dump(json_encode(1));
-var_dump(json_encode("руссиш"));
-
-
-echo "Done\n";
-?>
---EXPECTF--
-string(2) """"
-string(4) "null"
-string(4) "true"
-string(2) "{}"
-string(5) "[[1]]"
-string(1) "1"
-string(38) ""\u0440\u0443\u0441\u0441\u0438\u0448""
-Done
diff --git a/ext/json/tests/003.phpt b/ext/json/tests/003.phpt
deleted file mode 100644
index f10baa9d12..0000000000
--- a/ext/json/tests/003.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-json_encode() & endless loop - 1
---SKIPIF--
-<?php if (!extension_loaded("json")) print "skip"; ?>
---FILE--
-<?php
-
-$a = array();
-$a[] = &$a;
-
-var_dump($a);
-var_dump(json_encode($a));
-
-/* Break circular data structure to prevent memory leaks */
-unset($a[0]);
-
-echo "Done\n";
-?>
---EXPECTF--
-array(1) {
- [0]=>
- &array(1) {
- [0]=>
- &array(1) {
- [0]=>
- *RECURSION*
- }
- }
-}
-
-Warning: json_encode(): recursion detected in %s on line %d
-string(8) "[[null]]"
-Done
diff --git a/ext/json/tests/004.phpt b/ext/json/tests/004.phpt
deleted file mode 100644
index 884d874205..0000000000
--- a/ext/json/tests/004.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-json_encode() & endless loop - 2
---SKIPIF--
-<?php if (!extension_loaded("json")) print "skip"; ?>
---FILE--
-<?php
-
-$a = new stdclass;
-$a->prop = $a;
-
-var_dump($a);
-var_dump(json_encode($a));
-
-echo "Done\n";
-?>
---EXPECTF--
-object(stdClass)#%d (1) {
- ["prop"]=>
- object(stdClass)#%d (1) {
- ["prop"]=>
- *RECURSION*
- }
-}
-
-Warning: json_encode(): recursion detected in %s on line %d
-string(22) "{"prop":{"prop":null}}"
-Done
diff --git a/ext/json/tests/005.phpt b/ext/json/tests/005.phpt
deleted file mode 100644
index f6a8977d18..0000000000
--- a/ext/json/tests/005.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-json_encode() & endless loop - 3
---SKIPIF--
-<?php if (!extension_loaded("json")) print "skip"; ?>
---FILE--
-<?php
-
-$a = array();
-$a[] = $a;
-
-var_dump($a);
-var_dump(json_encode($a));
-
-echo "Done\n";
-?>
---EXPECTF--
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- *RECURSION*
- }
-}
-
-Warning: json_encode(): recursion detected in %s on line %d
-string(8) "[[null]]"
-Done
diff --git a/ext/json/tests/fail001.phpt b/ext/json/tests/fail001.phpt
deleted file mode 100644
index f0e0afa387..0000000000
--- a/ext/json/tests/fail001.phpt
+++ /dev/null
@@ -1,165 +0,0 @@
---TEST--
-JSON (http://www.crockford.com/JSON/JSON_checker/test/fail*.json)
---SKIPIF--
-<?php
- if (!extension_loaded('json')) die('skip: json extension not available');
-?>
---FILE--
-<?php
-
-$tests = array('"A JSON payload should be an object or array, not a string."',
- '["Unclosed array"',
- '{unquoted_key: "keys must be quoted}',
- '["extra comma",]',
- '["double extra comma",,]',
- '[ , "<-- missing value"]',
- '["Comma after the close"],',
- '["Extra close"]]',
- '{"Extra comma": true,}',
- '{"Extra value after close": true} "misplaced quoted value"',
- '{"Illegal expression": 1 + 2}',
- '{"Illegal invocation": alert()}',
- '{"Numbers cannot have leading zeroes": 013}',
- '{"Numbers cannot be hex": 0x14}',
- '["Illegal backslash escape: \\x15"]',
- '["Illegal backslash escape: \\\'"]',
- '["Illegal backslash escape: \\017"]',
- '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]',
- '{"Missing colon" null}',
- '{"Double colon":: null}',
- '{"Comma instead of colon", null}',
- '["Colon instead of comma": false]',
- '["Bad value", truth]',
- "['single quote']");
-
-foreach ($tests as $test)
-{
- echo 'Testing: ' . $test . "\n";
- echo "AS OBJECT\n";
- var_dump(json_decode($test));
- echo "AS ARRAY\n";
- var_dump(json_decode($test, true));
-}
-
-?>
---EXPECT--
-Testing: "A JSON payload should be an object or array, not a string."
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["Unclosed array"
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {unquoted_key: "keys must be quoted}
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["extra comma",]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["double extra comma",,]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: [ , "<-- missing value"]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["Comma after the close"],
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["Extra close"]]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {"Extra comma": true,}
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {"Extra value after close": true} "misplaced quoted value"
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {"Illegal expression": 1 + 2}
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {"Illegal invocation": alert()}
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {"Numbers cannot have leading zeroes": 013}
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {"Numbers cannot be hex": 0x14}
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["Illegal backslash escape: \x15"]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["Illegal backslash escape: \'"]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["Illegal backslash escape: \017"]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: [[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {"Missing colon" null}
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {"Double colon":: null}
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: {"Comma instead of colon", null}
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["Colon instead of comma": false]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ["Bad value", truth]
-AS OBJECT
-NULL
-AS ARRAY
-NULL
-Testing: ['single quote']
-AS OBJECT
-NULL
-AS ARRAY
-NULL
diff --git a/ext/json/tests/pass001.1.phpt b/ext/json/tests/pass001.1.phpt
deleted file mode 100644
index 87766e912c..0000000000
--- a/ext/json/tests/pass001.1.phpt
+++ /dev/null
@@ -1,895 +0,0 @@
---TEST--
-JSON (http://www.crockford.com/JSON/JSON_checker/test/pass1.json)
---SKIPIF--
-<?php
- if (!extension_loaded('json')) die('skip: json extension not available');
-?>
---FILE--
-<?php
-/* Modified to test unescaped UNICODE as keys and values.
- * Modified to test numbers with exponents without a decimal point.
- * Modified to test empty string values.
- * Modified to test a mix of integers and strings as keys.
- */
-// Expect warnings about INF.
-ini_set("error_reporting", E_ALL & ~E_WARNING);
-
-$test = "
-[
- \"JSON Test Pattern pass1\",
- {\"object with 1 member\":[\"array with 1 element\"]},
- {},
- [],
- -42,
- true,
- false,
- null,
- {
- \"integer\": 1234567890,
- \"real\": -9876.543210,
- \"e\": 0.123456789e-12,
- \"E\": 1.234567890E+34,
- \"\": 23456789012E666,
- \"E no .\": 4E12,
- \"zero\": 0,
- \"one\": 1,
- \"space\": \" \",
- \"quote\": \"\\\"\",
- \"backslash\": \"\\\\\",
- \"controls\": \"\\b\\f\\n\\r\\t\",
- \"slash\": \"/ & \\/\",
- \"alpha\": \"abcdefghijklmnopqrstuvwyz\",
- \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\",
- \"digit\": \"0123456789\",
- \"special\": \"`1~!@#$%^&*()_+-={':[,]}|;.</>?\",
- \"hex\": \"\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A\",
- \"unicode\": \"\\u30d7\\u30ec\\u30b9\\u30ad\\u30c3\\u30c8\",
- \"プレスキット\": \"プレスキット\",
- \"empty_string\": \"\",
- \"true\": true,
- \"false\": false,
- \"null\": null,
- \"array\":[ ],
- \"object\":{ },
- \"123\":{\"456\":{\"abc\":{\"789\":\"def\",\"012\":[1,2,\"5\",500],\"ghi\":[1,2,\"five\",50,\"sixty\"]}}},
- \"address\": \"50 St. James Street\",
- \"url\": \"http://www.JSON.org/\",
- \"comment\": \"// /* <!-- --\",
- \"# -- --> */\": \" \",
- \" s p a c e d \" :[1,2 , 3
-
-,
-
-4 , 5 , 6 ,7 ],
- \"compact\": [1,2,3,4,5,6,7],
- \"jsontext\": \"{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}\",
- \"quotes\": \"&#34; \\u0022 %22 0x22 034 &#x22;\",
- \"\\/\\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?\"
-: \"A key can be any string\"
- },
- 0.5 ,98.6
-,
-99.44
-,
-
-1066
-
-
-,\"rosebud\"]
-";
-
-echo 'Testing: ' . $test . "\n";
-echo "DECODE: AS OBJECT\n";
-$obj = json_decode($test);
-var_dump($obj);
-echo "DECODE: AS ARRAY\n";
-$arr = json_decode($test, true);
-var_dump($arr);
-
-echo "ENCODE: FROM OBJECT\n";
-$obj_enc = json_encode($obj);
-echo $obj_enc . "\n";
-echo "ENCODE: FROM ARRAY\n";
-$arr_enc = json_encode($arr);
-echo $arr_enc . "\n";
-
-echo "DECODE AGAIN: AS OBJECT\n";
-$obj = json_decode($obj_enc);
-var_dump($obj);
-echo "DECODE AGAIN: AS ARRAY\n";
-$arr = json_decode($arr_enc, true);
-var_dump($arr);
-
-?>
---EXPECT--
-Testing:
-[
- "JSON Test Pattern pass1",
- {"object with 1 member":["array with 1 element"]},
- {},
- [],
- -42,
- true,
- false,
- null,
- {
- "integer": 1234567890,
- "real": -9876.543210,
- "e": 0.123456789e-12,
- "E": 1.234567890E+34,
- "": 23456789012E666,
- "E no .": 4E12,
- "zero": 0,
- "one": 1,
- "space": " ",
- "quote": "\"",
- "backslash": "\\",
- "controls": "\b\f\n\r\t",
- "slash": "/ & \/",
- "alpha": "abcdefghijklmnopqrstuvwyz",
- "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
- "digit": "0123456789",
- "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
- "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
- "unicode": "\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8",
- "プレスキット": "プレスキット",
- "empty_string": "",
- "true": true,
- "false": false,
- "null": null,
- "array":[ ],
- "object":{ },
- "123":{"456":{"abc":{"789":"def","012":[1,2,"5",500],"ghi":[1,2,"five",50,"sixty"]}}},
- "address": "50 St. James Street",
- "url": "http://www.JSON.org/",
- "comment": "// /* <!-- --",
- "# -- --> */": " ",
- " s p a c e d " :[1,2 , 3
-
-,
-
-4 , 5 , 6 ,7 ],
- "compact": [1,2,3,4,5,6,7],
- "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
- "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
- "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
-: "A key can be any string"
- },
- 0.5 ,98.6
-,
-99.44
-,
-
-1066
-
-
-,"rosebud"]
-
-DECODE: AS OBJECT
-array(14) {
- [0]=>
- string(23) "JSON Test Pattern pass1"
- [1]=>
- object(stdClass)#1 (1) {
- ["object with 1 member"]=>
- array(1) {
- [0]=>
- string(20) "array with 1 element"
- }
- }
- [2]=>
- object(stdClass)#2 (0) {
- }
- [3]=>
- array(0) {
- }
- [4]=>
- int(-42)
- [5]=>
- bool(true)
- [6]=>
- bool(false)
- [7]=>
- NULL
- [8]=>
- object(stdClass)#3 (36) {
- ["integer"]=>
- int(1234567890)
- ["real"]=>
- float(-9876.54321)
- ["e"]=>
- float(1.23456789E-13)
- ["E"]=>
- float(1.23456789E+34)
- ["_empty_"]=>
- float(INF)
- ["E no ."]=>
- float(4.0E+12)
- ["zero"]=>
- int(0)
- ["one"]=>
- int(1)
- ["space"]=>
- string(1) " "
- ["quote"]=>
- string(1) """
- ["backslash"]=>
- string(1) "\"
- ["controls"]=>
- string(5) "
-
- "
- ["slash"]=>
- string(5) "/ & /"
- ["alpha"]=>
- string(25) "abcdefghijklmnopqrstuvwyz"
- ["ALPHA"]=>
- string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ"
- ["digit"]=>
- string(10) "0123456789"
- ["special"]=>
- string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?"
- ["hex"]=>
- string(17) "ģ䕧覫췯ꯍ"
- ["unicode"]=>
- string(18) "プレスキット"
- ["プレスキット"]=>
- string(18) "プレスキット"
- ["empty_string"]=>
- string(0) ""
- ["true"]=>
- bool(true)
- ["false"]=>
- bool(false)
- ["null"]=>
- NULL
- ["array"]=>
- array(0) {
- }
- ["object"]=>
- object(stdClass)#4 (0) {
- }
- ["123"]=>
- object(stdClass)#5 (1) {
- ["456"]=>
- object(stdClass)#6 (1) {
- ["abc"]=>
- object(stdClass)#7 (3) {
- ["789"]=>
- string(3) "def"
- ["012"]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- string(1) "5"
- [3]=>
- int(500)
- }
- ["ghi"]=>
- array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- string(4) "five"
- [3]=>
- int(50)
- [4]=>
- string(5) "sixty"
- }
- }
- }
- }
- ["address"]=>
- string(19) "50 St. James Street"
- ["url"]=>
- string(20) "http://www.JSON.org/"
- ["comment"]=>
- string(13) "// /* <!-- --"
- ["# -- --> */"]=>
- string(1) " "
- [" s p a c e d "]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["compact"]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["jsontext"]=>
- string(49) "{"object with 1 member":["array with 1 element"]}"
- ["quotes"]=>
- string(27) "&#34; " %22 0x22 034 &#x22;"
- ["/\"쫾몾ꮘﳞ볚
-
- `1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=>
- string(23) "A key can be any string"
- }
- [9]=>
- float(0.5)
- [10]=>
- float(98.6)
- [11]=>
- float(99.44)
- [12]=>
- int(1066)
- [13]=>
- string(7) "rosebud"
-}
-DECODE: AS ARRAY
-array(14) {
- [0]=>
- string(23) "JSON Test Pattern pass1"
- [1]=>
- array(1) {
- ["object with 1 member"]=>
- array(1) {
- [0]=>
- string(20) "array with 1 element"
- }
- }
- [2]=>
- array(0) {
- }
- [3]=>
- array(0) {
- }
- [4]=>
- int(-42)
- [5]=>
- bool(true)
- [6]=>
- bool(false)
- [7]=>
- NULL
- [8]=>
- array(36) {
- ["integer"]=>
- int(1234567890)
- ["real"]=>
- float(-9876.54321)
- ["e"]=>
- float(1.23456789E-13)
- ["E"]=>
- float(1.23456789E+34)
- ["_empty_"]=>
- float(INF)
- ["E no ."]=>
- float(4.0E+12)
- ["zero"]=>
- int(0)
- ["one"]=>
- int(1)
- ["space"]=>
- string(1) " "
- ["quote"]=>
- string(1) """
- ["backslash"]=>
- string(1) "\"
- ["controls"]=>
- string(5) "
-
- "
- ["slash"]=>
- string(5) "/ & /"
- ["alpha"]=>
- string(25) "abcdefghijklmnopqrstuvwyz"
- ["ALPHA"]=>
- string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ"
- ["digit"]=>
- string(10) "0123456789"
- ["special"]=>
- string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?"
- ["hex"]=>
- string(17) "ģ䕧覫췯ꯍ"
- ["unicode"]=>
- string(18) "プレスキット"
- ["プレスキット"]=>
- string(18) "プレスキット"
- ["empty_string"]=>
- string(0) ""
- ["true"]=>
- bool(true)
- ["false"]=>
- bool(false)
- ["null"]=>
- NULL
- ["array"]=>
- array(0) {
- }
- ["object"]=>
- array(0) {
- }
- [123]=>
- array(1) {
- [456]=>
- array(1) {
- ["abc"]=>
- array(3) {
- [789]=>
- string(3) "def"
- ["012"]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- string(1) "5"
- [3]=>
- int(500)
- }
- ["ghi"]=>
- array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- string(4) "five"
- [3]=>
- int(50)
- [4]=>
- string(5) "sixty"
- }
- }
- }
- }
- ["address"]=>
- string(19) "50 St. James Street"
- ["url"]=>
- string(20) "http://www.JSON.org/"
- ["comment"]=>
- string(13) "// /* <!-- --"
- ["# -- --> */"]=>
- string(1) " "
- [" s p a c e d "]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["compact"]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["jsontext"]=>
- string(49) "{"object with 1 member":["array with 1 element"]}"
- ["quotes"]=>
- string(27) "&#34; " %22 0x22 034 &#x22;"
- ["/\"쫾몾ꮘﳞ볚
-
- `1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=>
- string(23) "A key can be any string"
- }
- [9]=>
- float(0.5)
- [10]=>
- float(98.6)
- [11]=>
- float(99.44)
- [12]=>
- int(1066)
- [13]=>
- string(7) "rosebud"
-}
-ENCODE: FROM OBJECT
-["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},{},[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"_empty_":0,"E no .":4.0e+12,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","unicode":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","empty_string":"","true":true,"false":false,"null":null,"array":[],"object":{},"123":{"456":{"abc":{"789":"def","012":[1,2,"5",500],"ghi":[1,2,"five",50,"sixty"]}}},"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"&#34; \" %22 0x22 034 &#x22;","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"]
-ENCODE: FROM ARRAY
-["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},[],[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"_empty_":0,"E no .":4.0e+12,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","unicode":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","empty_string":"","true":true,"false":false,"null":null,"array":[],"object":[],"123":{"456":{"abc":{"789":"def","012":[1,2,"5",500],"ghi":[1,2,"five",50,"sixty"]}}},"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"&#34; \" %22 0x22 034 &#x22;","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"]
-DECODE AGAIN: AS OBJECT
-array(14) {
- [0]=>
- string(23) "JSON Test Pattern pass1"
- [1]=>
- object(stdClass)#8 (1) {
- ["object with 1 member"]=>
- array(1) {
- [0]=>
- string(20) "array with 1 element"
- }
- }
- [2]=>
- object(stdClass)#9 (0) {
- }
- [3]=>
- array(0) {
- }
- [4]=>
- int(-42)
- [5]=>
- bool(true)
- [6]=>
- bool(false)
- [7]=>
- NULL
- [8]=>
- object(stdClass)#10 (36) {
- ["integer"]=>
- int(1234567890)
- ["real"]=>
- float(-9876.54321)
- ["e"]=>
- float(1.23456789E-13)
- ["E"]=>
- float(1.23456789E+34)
- ["_empty_"]=>
- int(0)
- ["E no ."]=>
- float(4.0E+12)
- ["zero"]=>
- int(0)
- ["one"]=>
- int(1)
- ["space"]=>
- string(1) " "
- ["quote"]=>
- string(1) """
- ["backslash"]=>
- string(1) "\"
- ["controls"]=>
- string(5) "
-
- "
- ["slash"]=>
- string(5) "/ & /"
- ["alpha"]=>
- string(25) "abcdefghijklmnopqrstuvwyz"
- ["ALPHA"]=>
- string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ"
- ["digit"]=>
- string(10) "0123456789"
- ["special"]=>
- string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?"
- ["hex"]=>
- string(17) "ģ䕧覫췯ꯍ"
- ["unicode"]=>
- string(18) "プレスキット"
- ["プレスキット"]=>
- string(18) "プレスキット"
- ["empty_string"]=>
- string(0) ""
- ["true"]=>
- bool(true)
- ["false"]=>
- bool(false)
- ["null"]=>
- NULL
- ["array"]=>
- array(0) {
- }
- ["object"]=>
- object(stdClass)#11 (0) {
- }
- ["123"]=>
- object(stdClass)#12 (1) {
- ["456"]=>
- object(stdClass)#13 (1) {
- ["abc"]=>
- object(stdClass)#14 (3) {
- ["789"]=>
- string(3) "def"
- ["012"]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- string(1) "5"
- [3]=>
- int(500)
- }
- ["ghi"]=>
- array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- string(4) "five"
- [3]=>
- int(50)
- [4]=>
- string(5) "sixty"
- }
- }
- }
- }
- ["address"]=>
- string(19) "50 St. James Street"
- ["url"]=>
- string(20) "http://www.JSON.org/"
- ["comment"]=>
- string(13) "// /* <!-- --"
- ["# -- --> */"]=>
- string(1) " "
- [" s p a c e d "]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["compact"]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["jsontext"]=>
- string(49) "{"object with 1 member":["array with 1 element"]}"
- ["quotes"]=>
- string(27) "&#34; " %22 0x22 034 &#x22;"
- ["/\"쫾몾ꮘﳞ볚
-
- `1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=>
- string(23) "A key can be any string"
- }
- [9]=>
- float(0.5)
- [10]=>
- float(98.6)
- [11]=>
- float(99.44)
- [12]=>
- int(1066)
- [13]=>
- string(7) "rosebud"
-}
-DECODE AGAIN: AS ARRAY
-array(14) {
- [0]=>
- string(23) "JSON Test Pattern pass1"
- [1]=>
- array(1) {
- ["object with 1 member"]=>
- array(1) {
- [0]=>
- string(20) "array with 1 element"
- }
- }
- [2]=>
- array(0) {
- }
- [3]=>
- array(0) {
- }
- [4]=>
- int(-42)
- [5]=>
- bool(true)
- [6]=>
- bool(false)
- [7]=>
- NULL
- [8]=>
- array(36) {
- ["integer"]=>
- int(1234567890)
- ["real"]=>
- float(-9876.54321)
- ["e"]=>
- float(1.23456789E-13)
- ["E"]=>
- float(1.23456789E+34)
- ["_empty_"]=>
- int(0)
- ["E no ."]=>
- float(4.0E+12)
- ["zero"]=>
- int(0)
- ["one"]=>
- int(1)
- ["space"]=>
- string(1) " "
- ["quote"]=>
- string(1) """
- ["backslash"]=>
- string(1) "\"
- ["controls"]=>
- string(5) "
-
- "
- ["slash"]=>
- string(5) "/ & /"
- ["alpha"]=>
- string(25) "abcdefghijklmnopqrstuvwyz"
- ["ALPHA"]=>
- string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ"
- ["digit"]=>
- string(10) "0123456789"
- ["special"]=>
- string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?"
- ["hex"]=>
- string(17) "ģ䕧覫췯ꯍ"
- ["unicode"]=>
- string(18) "プレスキット"
- ["プレスキット"]=>
- string(18) "プレスキット"
- ["empty_string"]=>
- string(0) ""
- ["true"]=>
- bool(true)
- ["false"]=>
- bool(false)
- ["null"]=>
- NULL
- ["array"]=>
- array(0) {
- }
- ["object"]=>
- array(0) {
- }
- [123]=>
- array(1) {
- [456]=>
- array(1) {
- ["abc"]=>
- array(3) {
- [789]=>
- string(3) "def"
- ["012"]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- string(1) "5"
- [3]=>
- int(500)
- }
- ["ghi"]=>
- array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- string(4) "five"
- [3]=>
- int(50)
- [4]=>
- string(5) "sixty"
- }
- }
- }
- }
- ["address"]=>
- string(19) "50 St. James Street"
- ["url"]=>
- string(20) "http://www.JSON.org/"
- ["comment"]=>
- string(13) "// /* <!-- --"
- ["# -- --> */"]=>
- string(1) " "
- [" s p a c e d "]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["compact"]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["jsontext"]=>
- string(49) "{"object with 1 member":["array with 1 element"]}"
- ["quotes"]=>
- string(27) "&#34; " %22 0x22 034 &#x22;"
- ["/\"쫾몾ꮘﳞ볚
-
- `1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=>
- string(23) "A key can be any string"
- }
- [9]=>
- float(0.5)
- [10]=>
- float(98.6)
- [11]=>
- float(99.44)
- [12]=>
- int(1066)
- [13]=>
- string(7) "rosebud"
-}
diff --git a/ext/json/tests/pass001.phpt b/ext/json/tests/pass001.phpt
deleted file mode 100644
index f2aba683b0..0000000000
--- a/ext/json/tests/pass001.phpt
+++ /dev/null
@@ -1,708 +0,0 @@
---TEST--
-JSON (http://www.crockford.com/JSON/JSON_checker/test/pass1.json)
---SKIPIF--
-<?php
- if (!extension_loaded('json')) die('skip: json extension not available');
-?>
---FILE--
-<?php
-// Expect warnings about INF.
-ini_set("error_reporting", E_ALL & ~E_WARNING);
-
-$test = "
-[
- \"JSON Test Pattern pass1\",
- {\"object with 1 member\":[\"array with 1 element\"]},
- {},
- [],
- -42,
- true,
- false,
- null,
- {
- \"integer\": 1234567890,
- \"real\": -9876.543210,
- \"e\": 0.123456789e-12,
- \"E\": 1.234567890E+34,
- \"\": 23456789012E666,
- \"zero\": 0,
- \"one\": 1,
- \"space\": \" \",
- \"quote\": \"\\\"\",
- \"backslash\": \"\\\\\",
- \"controls\": \"\\b\\f\\n\\r\\t\",
- \"slash\": \"/ & \\/\",
- \"alpha\": \"abcdefghijklmnopqrstuvwyz\",
- \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\",
- \"digit\": \"0123456789\",
- \"special\": \"`1~!@#$%^&*()_+-={':[,]}|;.</>?\",
- \"hex\": \"\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A\",
- \"true\": true,
- \"false\": false,
- \"null\": null,
- \"array\":[ ],
- \"object\":{ },
- \"address\": \"50 St. James Street\",
- \"url\": \"http://www.JSON.org/\",
- \"comment\": \"// /* <!-- --\",
- \"# -- --> */\": \" \",
- \" s p a c e d \" :[1,2 , 3
-
-,
-
-4 , 5 , 6 ,7 ],
- \"compact\": [1,2,3,4,5,6,7],
- \"jsontext\": \"{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}\",
- \"quotes\": \"&#34; \\u0022 %22 0x22 034 &#x22;\",
- \"\\/\\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?\"
-: \"A key can be any string\"
- },
- 0.5 ,98.6
-,
-99.44
-,
-
-1066
-
-
-,\"rosebud\"]
-";
-
-echo 'Testing: ' . $test . "\n";
-echo "DECODE: AS OBJECT\n";
-$obj = json_decode($test);
-var_dump($obj);
-echo "DECODE: AS ARRAY\n";
-$arr = json_decode($test, true);
-var_dump($arr);
-
-echo "ENCODE: FROM OBJECT\n";
-$obj_enc = json_encode($obj);
-echo $obj_enc . "\n";
-echo "ENCODE: FROM ARRAY\n";
-$arr_enc = json_encode($arr);
-echo $arr_enc . "\n";
-
-echo "DECODE AGAIN: AS OBJECT\n";
-$obj = json_decode($obj_enc);
-var_dump($obj);
-echo "DECODE AGAIN: AS ARRAY\n";
-$arr = json_decode($arr_enc, true);
-var_dump($arr);
-
-?>
---EXPECT--
-Testing:
-[
- "JSON Test Pattern pass1",
- {"object with 1 member":["array with 1 element"]},
- {},
- [],
- -42,
- true,
- false,
- null,
- {
- "integer": 1234567890,
- "real": -9876.543210,
- "e": 0.123456789e-12,
- "E": 1.234567890E+34,
- "": 23456789012E666,
- "zero": 0,
- "one": 1,
- "space": " ",
- "quote": "\"",
- "backslash": "\\",
- "controls": "\b\f\n\r\t",
- "slash": "/ & \/",
- "alpha": "abcdefghijklmnopqrstuvwyz",
- "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
- "digit": "0123456789",
- "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
- "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
- "true": true,
- "false": false,
- "null": null,
- "array":[ ],
- "object":{ },
- "address": "50 St. James Street",
- "url": "http://www.JSON.org/",
- "comment": "// /* <!-- --",
- "# -- --> */": " ",
- " s p a c e d " :[1,2 , 3
-
-,
-
-4 , 5 , 6 ,7 ],
- "compact": [1,2,3,4,5,6,7],
- "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
- "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
- "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
-: "A key can be any string"
- },
- 0.5 ,98.6
-,
-99.44
-,
-
-1066
-
-
-,"rosebud"]
-
-DECODE: AS OBJECT
-array(14) {
- [0]=>
- string(23) "JSON Test Pattern pass1"
- [1]=>
- object(stdClass)#1 (1) {
- ["object with 1 member"]=>
- array(1) {
- [0]=>
- string(20) "array with 1 element"
- }
- }
- [2]=>
- object(stdClass)#2 (0) {
- }
- [3]=>
- array(0) {
- }
- [4]=>
- int(-42)
- [5]=>
- bool(true)
- [6]=>
- bool(false)
- [7]=>
- NULL
- [8]=>
- object(stdClass)#3 (31) {
- ["integer"]=>
- int(1234567890)
- ["real"]=>
- float(-9876.54321)
- ["e"]=>
- float(1.23456789E-13)
- ["E"]=>
- float(1.23456789E+34)
- ["_empty_"]=>
- float(INF)
- ["zero"]=>
- int(0)
- ["one"]=>
- int(1)
- ["space"]=>
- string(1) " "
- ["quote"]=>
- string(1) """
- ["backslash"]=>
- string(1) "\"
- ["controls"]=>
- string(5) "
-
- "
- ["slash"]=>
- string(5) "/ & /"
- ["alpha"]=>
- string(25) "abcdefghijklmnopqrstuvwyz"
- ["ALPHA"]=>
- string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ"
- ["digit"]=>
- string(10) "0123456789"
- ["special"]=>
- string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?"
- ["hex"]=>
- string(17) "ģ䕧覫췯ꯍ"
- ["true"]=>
- bool(true)
- ["false"]=>
- bool(false)
- ["null"]=>
- NULL
- ["array"]=>
- array(0) {
- }
- ["object"]=>
- object(stdClass)#4 (0) {
- }
- ["address"]=>
- string(19) "50 St. James Street"
- ["url"]=>
- string(20) "http://www.JSON.org/"
- ["comment"]=>
- string(13) "// /* <!-- --"
- ["# -- --> */"]=>
- string(1) " "
- [" s p a c e d "]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["compact"]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["jsontext"]=>
- string(49) "{"object with 1 member":["array with 1 element"]}"
- ["quotes"]=>
- string(27) "&#34; " %22 0x22 034 &#x22;"
- ["/\"쫾몾ꮘﳞ볚
-
- `1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=>
- string(23) "A key can be any string"
- }
- [9]=>
- float(0.5)
- [10]=>
- float(98.6)
- [11]=>
- float(99.44)
- [12]=>
- int(1066)
- [13]=>
- string(7) "rosebud"
-}
-DECODE: AS ARRAY
-array(14) {
- [0]=>
- string(23) "JSON Test Pattern pass1"
- [1]=>
- array(1) {
- ["object with 1 member"]=>
- array(1) {
- [0]=>
- string(20) "array with 1 element"
- }
- }
- [2]=>
- array(0) {
- }
- [3]=>
- array(0) {
- }
- [4]=>
- int(-42)
- [5]=>
- bool(true)
- [6]=>
- bool(false)
- [7]=>
- NULL
- [8]=>
- array(31) {
- ["integer"]=>
- int(1234567890)
- ["real"]=>
- float(-9876.54321)
- ["e"]=>
- float(1.23456789E-13)
- ["E"]=>
- float(1.23456789E+34)
- ["_empty_"]=>
- float(INF)
- ["zero"]=>
- int(0)
- ["one"]=>
- int(1)
- ["space"]=>
- string(1) " "
- ["quote"]=>
- string(1) """
- ["backslash"]=>
- string(1) "\"
- ["controls"]=>
- string(5) "
-
- "
- ["slash"]=>
- string(5) "/ & /"
- ["alpha"]=>
- string(25) "abcdefghijklmnopqrstuvwyz"
- ["ALPHA"]=>
- string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ"
- ["digit"]=>
- string(10) "0123456789"
- ["special"]=>
- string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?"
- ["hex"]=>
- string(17) "ģ䕧覫췯ꯍ"
- ["true"]=>
- bool(true)
- ["false"]=>
- bool(false)
- ["null"]=>
- NULL
- ["array"]=>
- array(0) {
- }
- ["object"]=>
- array(0) {
- }
- ["address"]=>
- string(19) "50 St. James Street"
- ["url"]=>
- string(20) "http://www.JSON.org/"
- ["comment"]=>
- string(13) "// /* <!-- --"
- ["# -- --> */"]=>
- string(1) " "
- [" s p a c e d "]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["compact"]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["jsontext"]=>
- string(49) "{"object with 1 member":["array with 1 element"]}"
- ["quotes"]=>
- string(27) "&#34; " %22 0x22 034 &#x22;"
- ["/\"쫾몾ꮘﳞ볚
-
- `1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=>
- string(23) "A key can be any string"
- }
- [9]=>
- float(0.5)
- [10]=>
- float(98.6)
- [11]=>
- float(99.44)
- [12]=>
- int(1066)
- [13]=>
- string(7) "rosebud"
-}
-ENCODE: FROM OBJECT
-["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},{},[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"_empty_":0,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","true":true,"false":false,"null":null,"array":[],"object":{},"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"&#34; \" %22 0x22 034 &#x22;","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"]
-ENCODE: FROM ARRAY
-["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},[],[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"_empty_":0,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","true":true,"false":false,"null":null,"array":[],"object":[],"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"&#34; \" %22 0x22 034 &#x22;","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"]
-DECODE AGAIN: AS OBJECT
-array(14) {
- [0]=>
- string(23) "JSON Test Pattern pass1"
- [1]=>
- object(stdClass)#5 (1) {
- ["object with 1 member"]=>
- array(1) {
- [0]=>
- string(20) "array with 1 element"
- }
- }
- [2]=>
- object(stdClass)#6 (0) {
- }
- [3]=>
- array(0) {
- }
- [4]=>
- int(-42)
- [5]=>
- bool(true)
- [6]=>
- bool(false)
- [7]=>
- NULL
- [8]=>
- object(stdClass)#7 (31) {
- ["integer"]=>
- int(1234567890)
- ["real"]=>
- float(-9876.54321)
- ["e"]=>
- float(1.23456789E-13)
- ["E"]=>
- float(1.23456789E+34)
- ["_empty_"]=>
- int(0)
- ["zero"]=>
- int(0)
- ["one"]=>
- int(1)
- ["space"]=>
- string(1) " "
- ["quote"]=>
- string(1) """
- ["backslash"]=>
- string(1) "\"
- ["controls"]=>
- string(5) "
-
- "
- ["slash"]=>
- string(5) "/ & /"
- ["alpha"]=>
- string(25) "abcdefghijklmnopqrstuvwyz"
- ["ALPHA"]=>
- string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ"
- ["digit"]=>
- string(10) "0123456789"
- ["special"]=>
- string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?"
- ["hex"]=>
- string(17) "ģ䕧覫췯ꯍ"
- ["true"]=>
- bool(true)
- ["false"]=>
- bool(false)
- ["null"]=>
- NULL
- ["array"]=>
- array(0) {
- }
- ["object"]=>
- object(stdClass)#8 (0) {
- }
- ["address"]=>
- string(19) "50 St. James Street"
- ["url"]=>
- string(20) "http://www.JSON.org/"
- ["comment"]=>
- string(13) "// /* <!-- --"
- ["# -- --> */"]=>
- string(1) " "
- [" s p a c e d "]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["compact"]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["jsontext"]=>
- string(49) "{"object with 1 member":["array with 1 element"]}"
- ["quotes"]=>
- string(27) "&#34; " %22 0x22 034 &#x22;"
- ["/\"쫾몾ꮘﳞ볚
-
- `1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=>
- string(23) "A key can be any string"
- }
- [9]=>
- float(0.5)
- [10]=>
- float(98.6)
- [11]=>
- float(99.44)
- [12]=>
- int(1066)
- [13]=>
- string(7) "rosebud"
-}
-DECODE AGAIN: AS ARRAY
-array(14) {
- [0]=>
- string(23) "JSON Test Pattern pass1"
- [1]=>
- array(1) {
- ["object with 1 member"]=>
- array(1) {
- [0]=>
- string(20) "array with 1 element"
- }
- }
- [2]=>
- array(0) {
- }
- [3]=>
- array(0) {
- }
- [4]=>
- int(-42)
- [5]=>
- bool(true)
- [6]=>
- bool(false)
- [7]=>
- NULL
- [8]=>
- array(31) {
- ["integer"]=>
- int(1234567890)
- ["real"]=>
- float(-9876.54321)
- ["e"]=>
- float(1.23456789E-13)
- ["E"]=>
- float(1.23456789E+34)
- ["_empty_"]=>
- int(0)
- ["zero"]=>
- int(0)
- ["one"]=>
- int(1)
- ["space"]=>
- string(1) " "
- ["quote"]=>
- string(1) """
- ["backslash"]=>
- string(1) "\"
- ["controls"]=>
- string(5) "
-
- "
- ["slash"]=>
- string(5) "/ & /"
- ["alpha"]=>
- string(25) "abcdefghijklmnopqrstuvwyz"
- ["ALPHA"]=>
- string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ"
- ["digit"]=>
- string(10) "0123456789"
- ["special"]=>
- string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?"
- ["hex"]=>
- string(17) "ģ䕧覫췯ꯍ"
- ["true"]=>
- bool(true)
- ["false"]=>
- bool(false)
- ["null"]=>
- NULL
- ["array"]=>
- array(0) {
- }
- ["object"]=>
- array(0) {
- }
- ["address"]=>
- string(19) "50 St. James Street"
- ["url"]=>
- string(20) "http://www.JSON.org/"
- ["comment"]=>
- string(13) "// /* <!-- --"
- ["# -- --> */"]=>
- string(1) " "
- [" s p a c e d "]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["compact"]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- ["jsontext"]=>
- string(49) "{"object with 1 member":["array with 1 element"]}"
- ["quotes"]=>
- string(27) "&#34; " %22 0x22 034 &#x22;"
- ["/\"쫾몾ꮘﳞ볚
-
- `1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=>
- string(23) "A key can be any string"
- }
- [9]=>
- float(0.5)
- [10]=>
- float(98.6)
- [11]=>
- float(99.44)
- [12]=>
- int(1066)
- [13]=>
- string(7) "rosebud"
-}
diff --git a/ext/json/tests/pass002.phpt b/ext/json/tests/pass002.phpt
deleted file mode 100644
index 24c7e33580..0000000000
--- a/ext/json/tests/pass002.phpt
+++ /dev/null
@@ -1,275 +0,0 @@
---TEST--
-JSON (http://www.crockford.com/JSON/JSON_checker/test/pass2.json)
---SKIPIF--
-<?php
- if (!extension_loaded('json')) die('skip: json extension not available');
-?>
---FILE--
-<?php
-
-$test = '[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]';
-echo 'Testing: ' . $test . "\n";
-echo "DECODE: AS OBJECT\n";
-$obj = json_decode($test);
-var_dump($obj);
-echo "DECODE: AS ARRAY\n";
-$arr = json_decode($test, true);
-var_dump($arr);
-
-echo "ENCODE: FROM OBJECT\n";
-$obj_enc = json_encode($obj);
-echo $obj_enc . "\n";
-echo "ENCODE: FROM ARRAY\n";
-$arr_enc = json_encode($arr);
-echo $arr_enc . "\n";
-
-echo "DECODE AGAIN: AS OBJECT\n";
-$obj = json_decode($obj_enc);
-var_dump($obj);
-echo "DECODE AGAIN: AS ARRAY\n";
-$arr = json_decode($arr_enc, true);
-var_dump($arr);
-
-?>
---EXPECT--
-Testing: [[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
-DECODE: AS OBJECT
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- string(12) "Not too deep"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-DECODE: AS ARRAY
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- string(12) "Not too deep"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-ENCODE: FROM OBJECT
-[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
-ENCODE: FROM ARRAY
-[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
-DECODE AGAIN: AS OBJECT
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- string(12) "Not too deep"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-DECODE AGAIN: AS ARRAY
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- array(1) {
- [0]=>
- string(12) "Not too deep"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
diff --git a/ext/json/tests/pass003.phpt b/ext/json/tests/pass003.phpt
deleted file mode 100644
index 36da4a1de6..0000000000
--- a/ext/json/tests/pass003.phpt
+++ /dev/null
@@ -1,94 +0,0 @@
---TEST--
-JSON (http://www.crockford.com/JSON/JSON_checker/test/pass3.json)
---SKIPIF--
-<?php
- if (!extension_loaded('json')) die('skip: json extension not available');
-?>
---FILE--
-<?php
-
-$test = '
-{
- "JSON Test Pattern pass3": {
- "The outermost value": "must be an object or array.",
- "In this test": "It is an object."
- }
-}
-';
-
-echo 'Testing: ' . $test . "\n";
-echo "DECODE: AS OBJECT\n";
-$obj = json_decode($test);
-var_dump($obj);
-echo "DECODE: AS ARRAY\n";
-$arr = json_decode($test, true);
-var_dump($arr);
-
-echo "ENCODE: FROM OBJECT\n";
-$obj_enc = json_encode($obj);
-echo $obj_enc . "\n";
-echo "ENCODE: FROM ARRAY\n";
-$arr_enc = json_encode($arr);
-echo $arr_enc . "\n";
-
-echo "DECODE AGAIN: AS OBJECT\n";
-$obj = json_decode($obj_enc);
-var_dump($obj);
-echo "DECODE AGAIN: AS ARRAY\n";
-$arr = json_decode($arr_enc, true);
-var_dump($arr);
-
-?>
---EXPECT--
-Testing:
-{
- "JSON Test Pattern pass3": {
- "The outermost value": "must be an object or array.",
- "In this test": "It is an object."
- }
-}
-
-DECODE: AS OBJECT
-object(stdClass)#1 (1) {
- ["JSON Test Pattern pass3"]=>
- object(stdClass)#2 (2) {
- ["The outermost value"]=>
- string(27) "must be an object or array."
- ["In this test"]=>
- string(16) "It is an object."
- }
-}
-DECODE: AS ARRAY
-array(1) {
- ["JSON Test Pattern pass3"]=>
- array(2) {
- ["The outermost value"]=>
- string(27) "must be an object or array."
- ["In this test"]=>
- string(16) "It is an object."
- }
-}
-ENCODE: FROM OBJECT
-{"JSON Test Pattern pass3":{"The outermost value":"must be an object or array.","In this test":"It is an object."}}
-ENCODE: FROM ARRAY
-{"JSON Test Pattern pass3":{"The outermost value":"must be an object or array.","In this test":"It is an object."}}
-DECODE AGAIN: AS OBJECT
-object(stdClass)#3 (1) {
- ["JSON Test Pattern pass3"]=>
- object(stdClass)#4 (2) {
- ["The outermost value"]=>
- string(27) "must be an object or array."
- ["In this test"]=>
- string(16) "It is an object."
- }
-}
-DECODE AGAIN: AS ARRAY
-array(1) {
- ["JSON Test Pattern pass3"]=>
- array(2) {
- ["The outermost value"]=>
- string(27) "must be an object or array."
- ["In this test"]=>
- string(16) "It is an object."
- }
-}
diff --git a/ext/json/utf8_decode.c b/ext/json/utf8_decode.c
deleted file mode 100644
index cea1f8cec8..0000000000
--- a/ext/json/utf8_decode.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* utf8_decode.c */
-
-/* 2005-12-25 */
-
-/*
-Copyright (c) 2005 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include "utf8_decode.h"
-
-/*
- Very Strict UTF-8 Decoder
-
- UTF-8 is a multibyte character encoding of Unicode. A character can be
- represented by 1-4 bytes. The bit pattern of the first byte indicates the
- number of continuation bytes.
-
- Most UTF-8 decoders tend to be lenient, attempting to recover as much
- information as possible, even from badly encoded input. This UTF-8
- decoder is not lenient. It will reject input which does not include
- proper continuation bytes. It will reject aliases (or suboptimal
- codings). It will reject surrogates. (Surrogate encoding should only be
- used with UTF-16.)
-
- Code Contination Minimum Maximum
- 0xxxxxxx 0 0 127
- 10xxxxxx error
- 110xxxxx 1 128 2047
- 1110xxxx 2 2048 65535 excluding 55296 - 57343
- 11110xxx 3 65536 1114111
- 11111xxx error
-*/
-
-
-/*
- Get the next byte. It returns UTF8_END if there are no more bytes.
-*/
-static int
-get(json_utf8_decode *utf8)
-{
- int c;
- if (utf8->the_index >= utf8->the_length) {
- return UTF8_END;
- }
- c = utf8->the_input[utf8->the_index] & 0xFF;
- utf8->the_index += 1;
- return c;
-}
-
-
-/*
- Get the 6-bit payload of the next continuation byte.
- Return UTF8_ERROR if it is not a contination byte.
-*/
-static int
-cont(json_utf8_decode *utf8)
-{
- int c = get(utf8);
- return ((c & 0xC0) == 0x80) ? (c & 0x3F) : UTF8_ERROR;
-}
-
-
-/*
- Initialize the UTF-8 decoder. The decoder is not reentrant,
-*/
-void
-utf8_decode_init(json_utf8_decode *utf8, char p[], int length)
-{
- utf8->the_index = 0;
- utf8->the_input = p;
- utf8->the_length = length;
- utf8->the_char = 0;
- utf8->the_byte = 0;
-}
-
-
-/*
- Get the current byte offset. This is generally used in error reporting.
-*/
-int
-utf8_decode_at_byte(json_utf8_decode *utf8)
-{
- return utf8->the_byte;
-}
-
-
-/*
- Get the current character offset. This is generally used in error reporting.
- The character offset matches the byte offset if the text is strictly ASCII.
-*/
-int
-utf8_decode_at_character(json_utf8_decode *utf8)
-{
- return utf8->the_char > 0 ? utf8->the_char - 1 : 0;
-}
-
-
-/*
- Extract the next character.
- Returns: the character (between 0 and 1114111)
- or UTF8_END (the end)
- or UTF8_ERROR (error)
-*/
-int
-utf8_decode_next(json_utf8_decode *utf8)
-{
- int c; /* the first byte of the character */
- int r; /* the result */
-
- if (utf8->the_index >= utf8->the_length) {
- return utf8->the_index == utf8->the_length ? UTF8_END : UTF8_ERROR;
- }
- utf8->the_byte = utf8->the_index;
- utf8->the_char += 1;
- c = get(utf8);
-/*
- Zero continuation (0 to 127)
-*/
- if ((c & 0x80) == 0) {
- return c;
- }
-/*
- One contination (128 to 2047)
-*/
- if ((c & 0xE0) == 0xC0) {
- int c1 = cont(utf8);
- if (c1 < 0) {
- return UTF8_ERROR;
- }
- r = ((c & 0x1F) << 6) | c1;
- return r >= 128 ? r : UTF8_ERROR;
- }
-/*
- Two continuation (2048 to 55295 and 57344 to 65535)
-*/
- if ((c & 0xF0) == 0xE0) {
- int c1 = cont(utf8);
- int c2 = cont(utf8);
- if (c1 < 0 || c2 < 0) {
- return UTF8_ERROR;
- }
- r = ((c & 0x0F) << 12) | (c1 << 6) | c2;
- return r >= 2048 && (r < 55296 || r > 57343) ? r : UTF8_ERROR;
- }
-/*
- Three continuation (65536 to 1114111)
-*/
- if ((c & 0xF1) == 0xF0) {
- int c1 = cont(utf8);
- int c2 = cont(utf8);
- int c3 = cont(utf8);
- if (c1 < 0 || c2 < 0 || c3 < 0) {
- return UTF8_ERROR;
- }
- r = ((c & 0x0F) << 18) | (c1 << 12) | (c2 << 6) | c3;
- return r >= 65536 && r <= 1114111 ? r : UTF8_ERROR;
- }
- return UTF8_ERROR;
-}
diff --git a/ext/json/utf8_decode.h b/ext/json/utf8_decode.h
deleted file mode 100644
index cc0fc79f6c..0000000000
--- a/ext/json/utf8_decode.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* utf8_decode.h */
-
-#define UTF8_END -1
-#define UTF8_ERROR -2
-
-typedef struct json_utf8_decode
-{
- int the_index;
- char *the_input;
- int the_length;
- int the_char;
- int the_byte;
-} json_utf8_decode;
-
-extern int utf8_decode_at_byte(json_utf8_decode *utf8);
-extern int utf8_decode_at_character(json_utf8_decode *utf8);
-extern void utf8_decode_init(json_utf8_decode *utf8, char p[], int length);
-extern int utf8_decode_next(json_utf8_decode *utf8);
diff --git a/ext/json/utf8_to_utf16.c b/ext/json/utf8_to_utf16.c
deleted file mode 100644
index bc2d6f36d6..0000000000
--- a/ext/json/utf8_to_utf16.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* utf8_to_utf16.c */
-
-/* 2005-12-25 */
-
-/*
-Copyright (c) 2005 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include "utf8_to_utf16.h"
-#include "utf8_decode.h"
-
-int
-utf8_to_utf16(unsigned short w[], char p[], int length)
-{
- int c;
- int the_index = 0;
- json_utf8_decode utf8;
-
- utf8_decode_init(&utf8, p, length);
- for (;;) {
- c = utf8_decode_next(&utf8);
- if (c < 0) {
- return UTF8_END ? the_index : UTF8_ERROR;
- }
- if (c < 0x10000) {
- w[the_index] = (unsigned short)c;
- the_index += 1;
- } else {
- c &= 0xFFFF;
- w[the_index] = (unsigned short)(0xD800 | (c >> 10));
- the_index += 1;
- w[the_index] = (unsigned short)(0xDC00 | (c & 0x3FF));
- the_index += 1;
- }
- }
-}
diff --git a/ext/json/utf8_to_utf16.h b/ext/json/utf8_to_utf16.h
deleted file mode 100644
index 5aff0268bf..0000000000
--- a/ext/json/utf8_to_utf16.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* utf8_to_utf16.h */
-
-extern int utf8_to_utf16(unsigned short w[], char p[], int length);