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.

Reply via email to