OLD | NEW |
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 #include "src/isolate.h" | 5 #include "src/isolate.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 #include <fstream> // NOLINT(readability/streams) | 9 #include <fstream> // NOLINT(readability/streams) |
10 #include <sstream> | 10 #include <sstream> |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 | 317 |
318 namespace { | 318 namespace { |
319 | 319 |
320 class StackTraceHelper { | 320 class StackTraceHelper { |
321 public: | 321 public: |
322 StackTraceHelper(Isolate* isolate, FrameSkipMode mode, Handle<Object> caller) | 322 StackTraceHelper(Isolate* isolate, FrameSkipMode mode, Handle<Object> caller) |
323 : isolate_(isolate), | 323 : isolate_(isolate), |
324 mode_(mode), | 324 mode_(mode), |
325 caller_(caller), | 325 caller_(caller), |
326 skip_next_frame_(true) { | 326 skip_next_frame_(true) { |
327 // The caller parameter can be used to skip a specific set of frames in the | |
328 // stack trace. It can be: | |
329 // * null, when called from a standard error constructor. We unconditionally | |
330 // skip the top frame, which is always a builtin-exit frame for the error | |
331 // constructor builtin. | |
332 // * a JSFunction, when called by the user from Error.captureStackTrace(). | |
333 // We skip each frame until encountering the caller function. | |
334 // * For any other value, all frames are included in the trace. | |
335 switch (mode_) { | 327 switch (mode_) { |
336 case SKIP_FIRST: | 328 case SKIP_FIRST: |
337 DCHECK(caller_.is_null()); | |
338 skip_next_frame_ = true; | 329 skip_next_frame_ = true; |
339 break; | 330 break; |
340 case SKIP_UNTIL_SEEN: | 331 case SKIP_UNTIL_SEEN: |
341 DCHECK(caller_->IsJSFunction()); | 332 DCHECK(caller_->IsJSFunction()); |
342 skip_next_frame_ = true; | 333 skip_next_frame_ = true; |
343 break; | 334 break; |
344 case SKIP_NONE: | 335 case SKIP_NONE: |
345 skip_next_frame_ = false; | 336 skip_next_frame_ = false; |
346 break; | 337 break; |
347 } | 338 } |
(...skipping 2822 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3170 // Then check whether this scope intercepts. | 3161 // Then check whether this scope intercepts. |
3171 if ((flag & intercept_mask_)) { | 3162 if ((flag & intercept_mask_)) { |
3172 intercepted_flags_ |= flag; | 3163 intercepted_flags_ |= flag; |
3173 return true; | 3164 return true; |
3174 } | 3165 } |
3175 return false; | 3166 return false; |
3176 } | 3167 } |
3177 | 3168 |
3178 } // namespace internal | 3169 } // namespace internal |
3179 } // namespace v8 | 3170 } // namespace v8 |
OLD | NEW |