| OLD | NEW |
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 } | 47 } |
| 48 } | 48 } |
| 49 } | 49 } |
| 50 } | 50 } |
| 51 } | 51 } |
| 52 return %_CallFunction(holder, name, val, reviver); | 52 return %_CallFunction(holder, name, val, reviver); |
| 53 } | 53 } |
| 54 | 54 |
| 55 function JSONParse(text, reviver) { | 55 function JSONParse(text, reviver) { |
| 56 var unfiltered = %ParseJson(TO_STRING_INLINE(text)); | 56 var unfiltered = %ParseJson(TO_STRING_INLINE(text)); |
| 57 if (IS_FUNCTION(reviver)) { | 57 if (IS_SPEC_FUNCTION(reviver)) { |
| 58 return Revive({'': unfiltered}, '', reviver); | 58 return Revive({'': unfiltered}, '', reviver); |
| 59 } else { | 59 } else { |
| 60 return unfiltered; | 60 return unfiltered; |
| 61 } | 61 } |
| 62 } | 62 } |
| 63 | 63 |
| 64 function SerializeArray(value, replacer, stack, indent, gap) { | 64 function SerializeArray(value, replacer, stack, indent, gap) { |
| 65 if (!%PushIfAbsent(stack, value)) { | 65 if (!%PushIfAbsent(stack, value)) { |
| 66 throw MakeTypeError('circular_structure', $Array()); | 66 throw MakeTypeError('circular_structure', $Array()); |
| 67 } | 67 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 final = "{}"; | 136 final = "{}"; |
| 137 } | 137 } |
| 138 stack.pop(); | 138 stack.pop(); |
| 139 return final; | 139 return final; |
| 140 } | 140 } |
| 141 | 141 |
| 142 function JSONSerialize(key, holder, replacer, stack, indent, gap) { | 142 function JSONSerialize(key, holder, replacer, stack, indent, gap) { |
| 143 var value = holder[key]; | 143 var value = holder[key]; |
| 144 if (IS_SPEC_OBJECT(value)) { | 144 if (IS_SPEC_OBJECT(value)) { |
| 145 var toJSON = value.toJSON; | 145 var toJSON = value.toJSON; |
| 146 if (IS_FUNCTION(toJSON)) { | 146 if (IS_SPEC_FUNCTION(toJSON)) { |
| 147 value = %_CallFunction(value, key, toJSON); | 147 value = %_CallFunction(value, key, toJSON); |
| 148 } | 148 } |
| 149 } | 149 } |
| 150 if (IS_FUNCTION(replacer)) { | 150 if (IS_SPEC_FUNCTION(replacer)) { |
| 151 value = %_CallFunction(holder, key, value, replacer); | 151 value = %_CallFunction(holder, key, value, replacer); |
| 152 } | 152 } |
| 153 if (IS_STRING(value)) { | 153 if (IS_STRING(value)) { |
| 154 return %QuoteJSONString(value); | 154 return %QuoteJSONString(value); |
| 155 } else if (IS_NUMBER(value)) { | 155 } else if (IS_NUMBER(value)) { |
| 156 return JSON_NUMBER_TO_STRING(value); | 156 return JSON_NUMBER_TO_STRING(value); |
| 157 } else if (IS_BOOLEAN(value)) { | 157 } else if (IS_BOOLEAN(value)) { |
| 158 return value ? "true" : "false"; | 158 return value ? "true" : "false"; |
| 159 } else if (IS_NULL(value)) { | 159 } else if (IS_NULL(value)) { |
| 160 return "null"; | 160 return "null"; |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 } | 266 } |
| 267 } | 267 } |
| 268 stack.pop(); | 268 stack.pop(); |
| 269 builder.push("}"); | 269 builder.push("}"); |
| 270 } | 270 } |
| 271 | 271 |
| 272 | 272 |
| 273 function BasicJSONSerialize(key, value, stack, builder) { | 273 function BasicJSONSerialize(key, value, stack, builder) { |
| 274 if (IS_SPEC_OBJECT(value)) { | 274 if (IS_SPEC_OBJECT(value)) { |
| 275 var toJSON = value.toJSON; | 275 var toJSON = value.toJSON; |
| 276 if (IS_FUNCTION(toJSON)) { | 276 if (IS_SPEC_FUNCTION(toJSON)) { |
| 277 value = %_CallFunction(value, ToString(key), toJSON); | 277 value = %_CallFunction(value, ToString(key), toJSON); |
| 278 } | 278 } |
| 279 } | 279 } |
| 280 if (IS_STRING(value)) { | 280 if (IS_STRING(value)) { |
| 281 builder.push(value !== "" ? %QuoteJSONString(value) : '""'); | 281 builder.push(value !== "" ? %QuoteJSONString(value) : '""'); |
| 282 } else if (IS_NUMBER(value)) { | 282 } else if (IS_NUMBER(value)) { |
| 283 builder.push(JSON_NUMBER_TO_STRING(value)); | 283 builder.push(JSON_NUMBER_TO_STRING(value)); |
| 284 } else if (IS_BOOLEAN(value)) { | 284 } else if (IS_BOOLEAN(value)) { |
| 285 builder.push(value ? "true" : "false"); | 285 builder.push(value ? "true" : "false"); |
| 286 } else if (IS_NULL(value)) { | 286 } else if (IS_NULL(value)) { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 } | 338 } |
| 339 | 339 |
| 340 function SetupJSON() { | 340 function SetupJSON() { |
| 341 InstallFunctions($JSON, DONT_ENUM, $Array( | 341 InstallFunctions($JSON, DONT_ENUM, $Array( |
| 342 "parse", JSONParse, | 342 "parse", JSONParse, |
| 343 "stringify", JSONStringify | 343 "stringify", JSONStringify |
| 344 )); | 344 )); |
| 345 } | 345 } |
| 346 | 346 |
| 347 SetupJSON(); | 347 SetupJSON(); |
| OLD | NEW |