OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var $jsonSerializeAdapter; | 5 var $jsonSerializeAdapter; |
6 | 6 |
7 (function() { | 7 (function() { |
8 | 8 |
9 "use strict"; | 9 "use strict"; |
10 | 10 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 return JSON_NUMBER_TO_STRING(value); | 147 return JSON_NUMBER_TO_STRING(value); |
148 } else if (IS_BOOLEAN(value)) { | 148 } else if (IS_BOOLEAN(value)) { |
149 return value ? "true" : "false"; | 149 return value ? "true" : "false"; |
150 } else if (IS_NULL(value)) { | 150 } else if (IS_NULL(value)) { |
151 return "null"; | 151 return "null"; |
152 } else if (IS_SPEC_OBJECT(value) && !(typeof value == "function")) { | 152 } else if (IS_SPEC_OBJECT(value) && !(typeof value == "function")) { |
153 // Non-callable object. If it's a primitive wrapper, it must be unwrapped. | 153 // Non-callable object. If it's a primitive wrapper, it must be unwrapped. |
154 if (IS_ARRAY(value)) { | 154 if (IS_ARRAY(value)) { |
155 return SerializeArray(value, replacer, stack, indent, gap); | 155 return SerializeArray(value, replacer, stack, indent, gap); |
156 } else if (IS_NUMBER_WRAPPER(value)) { | 156 } else if (IS_NUMBER_WRAPPER(value)) { |
157 value = $toNumber(value); | 157 value = ToNumber(value); |
158 return JSON_NUMBER_TO_STRING(value); | 158 return JSON_NUMBER_TO_STRING(value); |
159 } else if (IS_STRING_WRAPPER(value)) { | 159 } else if (IS_STRING_WRAPPER(value)) { |
160 return %QuoteJSONString($toString(value)); | 160 return %QuoteJSONString(ToString(value)); |
161 } else if (IS_BOOLEAN_WRAPPER(value)) { | 161 } else if (IS_BOOLEAN_WRAPPER(value)) { |
162 return %_ValueOf(value) ? "true" : "false"; | 162 return %_ValueOf(value) ? "true" : "false"; |
163 } else { | 163 } else { |
164 return SerializeObject(value, replacer, stack, indent, gap); | 164 return SerializeObject(value, replacer, stack, indent, gap); |
165 } | 165 } |
166 } | 166 } |
167 // Undefined or a callable object. | 167 // Undefined or a callable object. |
168 return UNDEFINED; | 168 return UNDEFINED; |
169 } | 169 } |
170 | 170 |
171 | 171 |
172 function JSONStringify(value, replacer, space) { | 172 function JSONStringify(value, replacer, space) { |
173 if (%_ArgumentsLength() == 1) { | 173 if (%_ArgumentsLength() == 1) { |
174 return %BasicJSONStringify(value); | 174 return %BasicJSONStringify(value); |
175 } | 175 } |
176 if (IS_OBJECT(space)) { | 176 if (IS_OBJECT(space)) { |
177 // Unwrap 'space' if it is wrapped | 177 // Unwrap 'space' if it is wrapped |
178 if (IS_NUMBER_WRAPPER(space)) { | 178 if (IS_NUMBER_WRAPPER(space)) { |
179 space = $toNumber(space); | 179 space = ToNumber(space); |
180 } else if (IS_STRING_WRAPPER(space)) { | 180 } else if (IS_STRING_WRAPPER(space)) { |
181 space = $toString(space); | 181 space = ToString(space); |
182 } | 182 } |
183 } | 183 } |
184 var gap; | 184 var gap; |
185 if (IS_NUMBER(space)) { | 185 if (IS_NUMBER(space)) { |
186 space = $max(0, $min($toInteger(space), 10)); | 186 space = $max(0, $min(ToInteger(space), 10)); |
187 gap = %_SubString(" ", 0, space); | 187 gap = %_SubString(" ", 0, space); |
188 } else if (IS_STRING(space)) { | 188 } else if (IS_STRING(space)) { |
189 if (space.length > 10) { | 189 if (space.length > 10) { |
190 gap = %_SubString(space, 0, 10); | 190 gap = %_SubString(space, 0, 10); |
191 } else { | 191 } else { |
192 gap = space; | 192 gap = space; |
193 } | 193 } |
194 } else { | 194 } else { |
195 gap = ""; | 195 gap = ""; |
196 } | 196 } |
197 if (IS_ARRAY(replacer)) { | 197 if (IS_ARRAY(replacer)) { |
198 // Deduplicate replacer array items. | 198 // Deduplicate replacer array items. |
199 var property_list = new InternalArray(); | 199 var property_list = new InternalArray(); |
200 var seen_properties = { __proto__: null }; | 200 var seen_properties = { __proto__: null }; |
201 var seen_sentinel = {}; | 201 var seen_sentinel = {}; |
202 var length = replacer.length; | 202 var length = replacer.length; |
203 for (var i = 0; i < length; i++) { | 203 for (var i = 0; i < length; i++) { |
204 var item = replacer[i]; | 204 var item = replacer[i]; |
205 if (IS_STRING_WRAPPER(item)) { | 205 if (IS_STRING_WRAPPER(item)) { |
206 item = $toString(item); | 206 item = ToString(item); |
207 } else { | 207 } else { |
208 if (IS_NUMBER_WRAPPER(item)) item = $toNumber(item); | 208 if (IS_NUMBER_WRAPPER(item)) item = ToNumber(item); |
209 if (IS_NUMBER(item)) item = %_NumberToString(item); | 209 if (IS_NUMBER(item)) item = %_NumberToString(item); |
210 } | 210 } |
211 if (IS_STRING(item) && seen_properties[item] != seen_sentinel) { | 211 if (IS_STRING(item) && seen_properties[item] != seen_sentinel) { |
212 property_list.push(item); | 212 property_list.push(item); |
213 // We cannot use true here because __proto__ needs to be an object. | 213 // We cannot use true here because __proto__ needs to be an object. |
214 seen_properties[item] = seen_sentinel; | 214 seen_properties[item] = seen_sentinel; |
215 } | 215 } |
216 } | 216 } |
217 replacer = property_list; | 217 replacer = property_list; |
218 } | 218 } |
(...skipping 14 matching lines...) Expand all Loading... |
233 // JSON Builtins | 233 // JSON Builtins |
234 | 234 |
235 $jsonSerializeAdapter = function(key, object) { | 235 $jsonSerializeAdapter = function(key, object) { |
236 var holder = {}; | 236 var holder = {}; |
237 holder[key] = object; | 237 holder[key] = object; |
238 // No need to pass the actual holder since there is no replacer function. | 238 // No need to pass the actual holder since there is no replacer function. |
239 return JSONSerialize(key, holder, UNDEFINED, new InternalArray(), "", ""); | 239 return JSONSerialize(key, holder, UNDEFINED, new InternalArray(), "", ""); |
240 } | 240 } |
241 | 241 |
242 })(); | 242 })(); |
OLD | NEW |