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 |