Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: src/js/json.js

Issue 2004413002: [json] support property list argument in BasicJsonStringifier. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/api.cc ('k') | src/json-stringifier.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 (function(global, utils) { 5 (function(global, utils) {
6 6
7 "use strict"; 7 "use strict";
8 8
9 %CheckIsBootstrapping(); 9 %CheckIsBootstrapping();
10 10
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 return final; 114 return final;
115 } 115 }
116 116
117 117
118 function SerializeObject(value, replacer, stack, indent, gap) { 118 function SerializeObject(value, replacer, stack, indent, gap) {
119 if (StackHas(stack, value)) throw MakeTypeError(kCircularStructure); 119 if (StackHas(stack, value)) throw MakeTypeError(kCircularStructure);
120 StackPush(stack, value); 120 StackPush(stack, value);
121 var stepback = indent; 121 var stepback = indent;
122 indent += gap; 122 indent += gap;
123 var partial = new InternalArray(); 123 var partial = new InternalArray();
124 if (IS_ARRAY(replacer)) { 124 var keys = %object_keys(value);
125 var length = replacer.length; 125 for (var i = 0; i < keys.length; i++) {
126 for (var i = 0; i < length; i++) { 126 var p = keys[i];
127 var p = replacer[i]; 127 var strP = JSONSerialize(p, value, replacer, stack, indent, gap);
128 var strP = JSONSerialize(p, value, replacer, stack, indent, gap); 128 if (!IS_UNDEFINED(strP)) {
129 if (!IS_UNDEFINED(strP)) { 129 var member = %QuoteJSONString(p) + ":";
130 var member = %QuoteJSONString(p) + ":"; 130 if (gap != "") member += " ";
131 if (gap != "") member += " "; 131 member += strP;
132 member += strP; 132 partial.push(member);
133 partial.push(member);
134 }
135 }
136 } else {
137 var keys = %object_keys(value);
138 for (var i = 0; i < keys.length; i++) {
139 var p = keys[i];
140 var strP = JSONSerialize(p, value, replacer, stack, indent, gap);
141 if (!IS_UNDEFINED(strP)) {
142 var member = %QuoteJSONString(p) + ":";
143 if (gap != "") member += " ";
144 member += strP;
145 partial.push(member);
146 }
147 } 133 }
148 } 134 }
149 var final; 135 var final;
150 if (gap == "") { 136 if (gap == "") {
151 final = "{" + partial.join(",") + "}"; 137 final = "{" + partial.join(",") + "}";
152 } else if (partial.length > 0) { 138 } else if (partial.length > 0) {
153 var separator = ",\n" + indent; 139 var separator = ",\n" + indent;
154 final = "{\n" + indent + partial.join(separator) + "\n" + 140 final = "{\n" + indent + partial.join(separator) + "\n" +
155 stepback + "}"; 141 stepback + "}";
156 } else { 142 } else {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 } else { 180 } else {
195 return SerializeObject(value, replacer, stack, indent, gap); 181 return SerializeObject(value, replacer, stack, indent, gap);
196 } 182 }
197 } 183 }
198 // Undefined or a callable object. 184 // Undefined or a callable object.
199 return UNDEFINED; 185 return UNDEFINED;
200 } 186 }
201 187
202 188
203 function JSONStringify(value, replacer, space) { 189 function JSONStringify(value, replacer, space) {
204 if (arguments.length === 1) return %BasicJSONStringify(value, ""); 190 if (arguments.length === 1) return %BasicJSONStringify(value, UNDEFINED, "");
205 if (!IS_CALLABLE(replacer) && %is_arraylike(replacer)) { 191 if (!IS_CALLABLE(replacer)) {
206 var property_list = new InternalArray(); 192 return %BasicJSONStringify(value, replacer, space);
207 var seen_properties = new GlobalSet();
208 var length = TO_LENGTH(replacer.length);
209 for (var i = 0; i < length; i++) {
210 var v = replacer[i];
211 var item;
212 if (IS_STRING(v)) {
213 item = v;
214 } else if (IS_NUMBER(v)) {
215 item = %_NumberToString(v);
216 } else if (IS_STRING_WRAPPER(v) || IS_NUMBER_WRAPPER(v)) {
217 item = TO_STRING(v);
218 } else {
219 continue;
220 }
221 if (!seen_properties.has(item)) {
222 property_list.push(item);
223 seen_properties.add(item);
224 }
225 }
226 replacer = property_list;
227 } 193 }
228 if (IS_OBJECT(space)) { 194 if (IS_OBJECT(space)) {
229 // Unwrap 'space' if it is wrapped 195 // Unwrap 'space' if it is wrapped
230 if (IS_NUMBER_WRAPPER(space)) { 196 if (IS_NUMBER_WRAPPER(space)) {
231 space = TO_NUMBER(space); 197 space = TO_NUMBER(space);
232 } else if (IS_STRING_WRAPPER(space)) { 198 } else if (IS_STRING_WRAPPER(space)) {
233 space = TO_STRING(space); 199 space = TO_STRING(space);
234 } 200 }
235 } 201 }
236 if (!IS_CALLABLE(replacer) && !property_list) {
237 return %BasicJSONStringify(value, space);
238 }
239 var gap; 202 var gap;
240 if (IS_NUMBER(space)) { 203 if (IS_NUMBER(space)) {
241 space = MaxSimple(0, MinSimple(TO_INTEGER(space), 10)); 204 space = MaxSimple(0, MinSimple(TO_INTEGER(space), 10));
242 gap = %_SubString(" ", 0, space); 205 gap = %_SubString(" ", 0, space);
243 } else if (IS_STRING(space)) { 206 } else if (IS_STRING(space)) {
244 if (space.length > 10) { 207 if (space.length > 10) {
245 gap = %_SubString(space, 0, 10); 208 gap = %_SubString(space, 0, 10);
246 } else { 209 } else {
247 gap = space; 210 gap = space;
248 } 211 }
(...skipping 25 matching lines...) Expand all
274 } 237 }
275 return o.toISOString(); 238 return o.toISOString();
276 } 239 }
277 240
278 // Set up non-enumerable functions of the Date prototype object. 241 // Set up non-enumerable functions of the Date prototype object.
279 utils.InstallFunctions(GlobalDate.prototype, DONT_ENUM, [ 242 utils.InstallFunctions(GlobalDate.prototype, DONT_ENUM, [
280 "toJSON", DateToJSON 243 "toJSON", DateToJSON
281 ]); 244 ]);
282 245
283 }) 246 })
OLDNEW
« no previous file with comments | « src/api.cc ('k') | src/json-stringifier.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698