Reviewers: Dmitry Lomov (chromium),
Description:
Simplify stack trace getter wrt prototype chain walk.
[email protected]
Please review this at https://codereview.chromium.org/595253002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+17, -15 lines):
M src/messages.js
Index: src/messages.js
diff --git a/src/messages.js b/src/messages.js
index
4d64d1e1319a1501dc4ae2357c33131e4036ebda..4a71a61f5c9a21c589faad4be6a3ac4391a26087
100644
--- a/src/messages.js
+++ b/src/messages.js
@@ -1123,23 +1123,25 @@ var formatted_stack_trace_symbol =
NEW_PRIVATE_OWN("formatted stack trace");
var StackTraceGetter = function() {
var formatted_stack_trace = UNDEFINED;
var holder = this;
- while (holder && IS_UNDEFINED(formatted_stack_trace)) {
- formatted_stack_trace = GET_PRIVATE(holder,
formatted_stack_trace_symbol);
- holder = %GetPrototype(holder);
- }
- if (IS_UNDEFINED(formatted_stack_trace)) {
- holder = this;
- while (!HAS_DEFINED_PRIVATE(holder, stack_trace_symbol)) {
- holder = %GetPrototype(holder);
- if (!holder) return UNDEFINED;
+ while (holder) {
+ var formatted_stack_trace =
+ GET_PRIVATE(holder, formatted_stack_trace_symbol);
+ if (IS_UNDEFINED(formatted_stack_trace)) {
+ // No formatted stack trace available.
+ var stack_trace = GET_PRIVATE(holder, stack_trace_symbol);
+ if (IS_UNDEFINED(stack_trace)) {
+ // Neither formatted nor structured stack trace available.
+ // Look further up the prototype chain.
+ holder = %GetPrototype(holder);
+ continue;
+ }
+ formatted_stack_trace = FormatStackTrace(holder, stack_trace);
+ SET_PRIVATE(holder, stack_trace_symbol, UNDEFINED);
+ SET_PRIVATE(holder, formatted_stack_trace_symbol,
formatted_stack_trace);
}
- var stack_trace = GET_PRIVATE(holder, stack_trace_symbol);
- if (IS_UNDEFINED(stack_trace)) return UNDEFINED;
- formatted_stack_trace = FormatStackTrace(holder, stack_trace);
- SET_PRIVATE(holder, stack_trace_symbol, UNDEFINED);
- SET_PRIVATE(holder, formatted_stack_trace_symbol,
formatted_stack_trace);
+ return formatted_stack_trace;
}
- return formatted_stack_trace;
+ return UNDEFINED;
};
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.