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

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

Issue 2191293002: Move FormatStackTrace to C++ (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add formatting_stack_trace to ISOLATE_INIT_LIST Created 4 years, 4 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/isolate.cc ('k') | src/messages.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 // ------------------------------------------------------------------- 5 // -------------------------------------------------------------------
6 6
7 (function(global, utils) { 7 (function(global, utils) {
8 8
9 %CheckIsBootstrapping(); 9 %CheckIsBootstrapping();
10 10
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 ); 249 );
250 250
251 251
252 function GetStackTraceLine(recv, fun, pos, isGlobal) { 252 function GetStackTraceLine(recv, fun, pos, isGlobal) {
253 return new CallSite(recv, fun, pos, false).toString(); 253 return new CallSite(recv, fun, pos, false).toString();
254 } 254 }
255 255
256 // ---------------------------------------------------------------------------- 256 // ----------------------------------------------------------------------------
257 // Error implementation 257 // Error implementation
258 258
259
260 function FormatErrorString(error) {
261 try {
262 return %_Call(ErrorToString, error);
263 } catch (e) {
264 try {
265 return "<error: " + e + ">";
266 } catch (ee) {
267 return "<error>";
268 }
269 }
270 }
271
272
273 function GetStackFrames(raw_stack) {
274 var internal_raw_stack = new InternalArray();
275 %MoveArrayContents(raw_stack, internal_raw_stack);
276 var frames = new InternalArray();
277 var sloppy_frames = internal_raw_stack[0];
278 for (var i = 1; i < internal_raw_stack.length; i += 4) {
279 var recv = internal_raw_stack[i];
280 var fun = internal_raw_stack[i + 1];
281 var code = internal_raw_stack[i + 2];
282 var pc = internal_raw_stack[i + 3];
283 // For traps in wasm, the bytecode offset is passed as (-1 - offset).
284 // Otherwise, lookup the position from the pc.
285 var pos = IS_NUMBER(fun) && pc < 0 ? (-1 - pc) :
286 %FunctionGetPositionForOffset(code, pc);
287 sloppy_frames--;
288 frames.push(new CallSite(recv, fun, pos, (sloppy_frames < 0)));
289 }
290 return frames;
291 }
292
293
294 // Flag to prevent recursive call of Error.prepareStackTrace.
295 var formatting_custom_stack_trace = false;
296
297
298 function FormatStackTrace(obj, raw_stack) {
299 var frames = GetStackFrames(raw_stack);
300 if (IS_FUNCTION(GlobalError.prepareStackTrace) &&
301 !formatting_custom_stack_trace) {
302 var array = [];
303 %MoveArrayContents(frames, array);
304 formatting_custom_stack_trace = true;
305 var stack_trace = UNDEFINED;
306 try {
307 stack_trace = GlobalError.prepareStackTrace(obj, array);
308 } catch (e) {
309 throw e; // The custom formatting function threw. Rethrow.
310 } finally {
311 formatting_custom_stack_trace = false;
312 }
313 return stack_trace;
314 }
315
316 var lines = new InternalArray();
317 lines.push(FormatErrorString(obj));
318 for (var i = 0; i < frames.length; i++) {
319 var frame = frames[i];
320 var line;
321 try {
322 line = frame.toString();
323 } catch (e) {
324 try {
325 line = "<error: " + e + ">";
326 } catch (ee) {
327 // Any code that reaches this point is seriously nasty!
328 line = "<error>";
329 }
330 }
331 lines.push(" at " + line);
332 }
333 return %_Call(ArrayJoin, lines, "\n");
334 }
335
336
337 function GetTypeName(receiver, requireConstructor) {
338 if (IS_NULL_OR_UNDEFINED(receiver)) return null;
339 if (IS_PROXY(receiver)) return "Proxy";
340 return %GetConstructorName(receiver);
341 }
342
343 function ErrorToString() { 259 function ErrorToString() {
344 if (!IS_RECEIVER(this)) { 260 if (!IS_RECEIVER(this)) {
345 throw MakeTypeError(kCalledOnNonObject, "Error.prototype.toString"); 261 throw MakeTypeError(kCalledOnNonObject, "Error.prototype.toString");
346 } 262 }
347 263
348 var name = this.name; 264 var name = this.name;
349 name = IS_UNDEFINED(name) ? "Error" : TO_STRING(name); 265 name = IS_UNDEFINED(name) ? "Error" : TO_STRING(name);
350 266
351 var message = this.message; 267 var message = this.message;
352 message = IS_UNDEFINED(message) ? "" : TO_STRING(message); 268 message = IS_UNDEFINED(message) ? "" : TO_STRING(message);
(...skipping 17 matching lines...) Expand all
370 286
371 function MakeTypeError(type, arg0, arg1, arg2) { 287 function MakeTypeError(type, arg0, arg1, arg2) {
372 return MakeGenericError(GlobalTypeError, type, arg0, arg1, arg2); 288 return MakeGenericError(GlobalTypeError, type, arg0, arg1, arg2);
373 } 289 }
374 290
375 function MakeURIError() { 291 function MakeURIError() {
376 return MakeGenericError(GlobalURIError, kURIMalformed); 292 return MakeGenericError(GlobalURIError, kURIMalformed);
377 } 293 }
378 294
379 %InstallToContext([ 295 %InstallToContext([
380 "error_format_stack_trace", FormatStackTrace,
381 "get_stack_trace_line_fun", GetStackTraceLine, 296 "get_stack_trace_line_fun", GetStackTraceLine,
382 "make_error_function", MakeGenericError, 297 "make_error_function", MakeGenericError,
383 "make_range_error", MakeRangeError, 298 "make_range_error", MakeRangeError,
384 "make_type_error", MakeTypeError, 299 "make_type_error", MakeTypeError,
385 "message_get_column_number", GetColumnNumber, 300 "message_get_column_number", GetColumnNumber,
386 "message_get_line_number", GetLineNumber, 301 "message_get_line_number", GetLineNumber,
387 "message_get_source_line", GetSourceLine, 302 "message_get_source_line", GetSourceLine,
388 "no_side_effects_to_string_fun", NoSideEffectsToString, 303 "no_side_effects_to_string_fun", NoSideEffectsToString,
389 ]); 304 ]);
390 305
391 utils.Export(function(to) { 306 utils.Export(function(to) {
392 to.ErrorToString = ErrorToString; 307 to.ErrorToString = ErrorToString;
393 to.MakeError = MakeError; 308 to.MakeError = MakeError;
394 to.MakeRangeError = MakeRangeError; 309 to.MakeRangeError = MakeRangeError;
395 to.MakeSyntaxError = MakeSyntaxError; 310 to.MakeSyntaxError = MakeSyntaxError;
396 to.MakeTypeError = MakeTypeError; 311 to.MakeTypeError = MakeTypeError;
397 to.MakeURIError = MakeURIError; 312 to.MakeURIError = MakeURIError;
398 }); 313 });
399 314
400 }); 315 });
OLDNEW
« no previous file with comments | « src/isolate.cc ('k') | src/messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698