| Index: src/js/json.js
|
| diff --git a/src/js/json.js b/src/js/json.js
|
| index eee56afae05c20d8e88e20e23f8e59234520f6e9..a7b692000870b1722be6d914383559675eed23f1 100644
|
| --- a/src/js/json.js
|
| +++ b/src/js/json.js
|
| @@ -15,27 +15,8 @@ var GlobalDate = global.Date;
|
| var GlobalJSON = global.JSON;
|
| var GlobalSet = global.Set;
|
| var InternalArray = utils.InternalArray;
|
| -var MakeTypeError;
|
| -var MaxSimple;
|
| -var MinSimple;
|
| -var ObjectHasOwnProperty;
|
| -var Stack;
|
| -var StackHas;
|
| -var StackPop;
|
| -var StackPush;
|
| var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol");
|
|
|
| -utils.Import(function(from) {
|
| - MakeTypeError = from.MakeTypeError;
|
| - MaxSimple = from.MaxSimple;
|
| - MinSimple = from.MinSimple;
|
| - ObjectHasOwnProperty = from.ObjectHasOwnProperty;
|
| - Stack = from.Stack;
|
| - StackHas = from.StackHas;
|
| - StackPop = from.StackPop;
|
| - StackPush = from.StackPush;
|
| -});
|
| -
|
| // -------------------------------------------------------------------
|
|
|
| function CreateDataProperty(o, p, v) {
|
| @@ -84,137 +65,6 @@ function JSONParse(text, reviver) {
|
| }
|
| }
|
|
|
| -
|
| -function SerializeArray(value, replacer, stack, indent, gap) {
|
| - if (StackHas(stack, value)) throw MakeTypeError(kCircularStructure);
|
| - StackPush(stack, value);
|
| - var stepback = indent;
|
| - indent += gap;
|
| - var partial = new InternalArray();
|
| - var len = TO_LENGTH(value.length);
|
| - for (var i = 0; i < len; i++) {
|
| - var strP = JSONSerialize(%_NumberToString(i), value, replacer, stack,
|
| - indent, gap);
|
| - if (IS_UNDEFINED(strP)) {
|
| - strP = "null";
|
| - }
|
| - partial.push(strP);
|
| - }
|
| - var final;
|
| - if (gap == "") {
|
| - final = "[" + partial.join(",") + "]";
|
| - } else if (partial.length > 0) {
|
| - var separator = ",\n" + indent;
|
| - final = "[\n" + indent + partial.join(separator) + "\n" +
|
| - stepback + "]";
|
| - } else {
|
| - final = "[]";
|
| - }
|
| - StackPop(stack);
|
| - return final;
|
| -}
|
| -
|
| -
|
| -function SerializeObject(value, replacer, stack, indent, gap) {
|
| - if (StackHas(stack, value)) throw MakeTypeError(kCircularStructure);
|
| - StackPush(stack, value);
|
| - var stepback = indent;
|
| - indent += gap;
|
| - var partial = new InternalArray();
|
| - var keys = %object_keys(value);
|
| - for (var i = 0; i < keys.length; i++) {
|
| - var p = keys[i];
|
| - var strP = JSONSerialize(p, value, replacer, stack, indent, gap);
|
| - if (!IS_UNDEFINED(strP)) {
|
| - var member = %QuoteJSONString(p) + ":";
|
| - if (gap != "") member += " ";
|
| - member += strP;
|
| - partial.push(member);
|
| - }
|
| - }
|
| - var final;
|
| - if (gap == "") {
|
| - final = "{" + partial.join(",") + "}";
|
| - } else if (partial.length > 0) {
|
| - var separator = ",\n" + indent;
|
| - final = "{\n" + indent + partial.join(separator) + "\n" +
|
| - stepback + "}";
|
| - } else {
|
| - final = "{}";
|
| - }
|
| - StackPop(stack);
|
| - return final;
|
| -}
|
| -
|
| -
|
| -function JSONSerialize(key, holder, replacer, stack, indent, gap) {
|
| - var value = holder[key];
|
| - if (IS_RECEIVER(value)) {
|
| - var toJSON = value.toJSON;
|
| - if (IS_CALLABLE(toJSON)) {
|
| - value = %_Call(toJSON, value, key);
|
| - }
|
| - }
|
| - if (IS_CALLABLE(replacer)) {
|
| - value = %_Call(replacer, holder, key, value);
|
| - }
|
| - if (IS_STRING(value)) {
|
| - return %QuoteJSONString(value);
|
| - } else if (IS_NUMBER(value)) {
|
| - return JSON_NUMBER_TO_STRING(value);
|
| - } else if (IS_BOOLEAN(value)) {
|
| - return value ? "true" : "false";
|
| - } else if (IS_NULL(value)) {
|
| - return "null";
|
| - } else if (IS_RECEIVER(value) && !IS_CALLABLE(value)) {
|
| - // Non-callable object. If it's a primitive wrapper, it must be unwrapped.
|
| - if (%is_arraylike(value)) {
|
| - return SerializeArray(value, replacer, stack, indent, gap);
|
| - } else if (IS_NUMBER_WRAPPER(value)) {
|
| - value = TO_NUMBER(value);
|
| - return JSON_NUMBER_TO_STRING(value);
|
| - } else if (IS_STRING_WRAPPER(value)) {
|
| - return %QuoteJSONString(TO_STRING(value));
|
| - } else if (IS_BOOLEAN_WRAPPER(value)) {
|
| - return %_ValueOf(value) ? "true" : "false";
|
| - } else {
|
| - return SerializeObject(value, replacer, stack, indent, gap);
|
| - }
|
| - }
|
| - // Undefined or a callable object.
|
| - return UNDEFINED;
|
| -}
|
| -
|
| -
|
| -function JSONStringify(value, replacer, space) {
|
| - if (arguments.length === 1) return %BasicJSONStringify(value, UNDEFINED, "");
|
| - if (!IS_CALLABLE(replacer)) {
|
| - return %BasicJSONStringify(value, replacer, space);
|
| - }
|
| - if (IS_OBJECT(space)) {
|
| - // Unwrap 'space' if it is wrapped
|
| - if (IS_NUMBER_WRAPPER(space)) {
|
| - space = TO_NUMBER(space);
|
| - } else if (IS_STRING_WRAPPER(space)) {
|
| - space = TO_STRING(space);
|
| - }
|
| - }
|
| - var gap;
|
| - if (IS_NUMBER(space)) {
|
| - space = MaxSimple(0, MinSimple(TO_INTEGER(space), 10));
|
| - gap = %_SubString(" ", 0, space);
|
| - } else if (IS_STRING(space)) {
|
| - if (space.length > 10) {
|
| - gap = %_SubString(space, 0, 10);
|
| - } else {
|
| - gap = space;
|
| - }
|
| - } else {
|
| - gap = "";
|
| - }
|
| - return JSONSerialize('', {'': value}, replacer, new Stack(), "", gap);
|
| -}
|
| -
|
| // -------------------------------------------------------------------
|
|
|
| %AddNamedProperty(GlobalJSON, toStringTagSymbol, "JSON", READ_ONLY | DONT_ENUM);
|
| @@ -222,7 +72,6 @@ function JSONStringify(value, replacer, space) {
|
| // Set up non-enumerable properties of the JSON object.
|
| utils.InstallFunctions(GlobalJSON, DONT_ENUM, [
|
| "parse", JSONParse,
|
| - "stringify", JSONStringify
|
| ]);
|
|
|
| // -------------------------------------------------------------------
|
|
|