| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 bool IsValidFrame(); | 867 bool IsValidFrame(); |
| 868 }; | 868 }; |
| 869 | 869 |
| 870 | 870 |
| 871 class SafeStackFrameIterator BASE_EMBEDDED { | 871 class SafeStackFrameIterator BASE_EMBEDDED { |
| 872 public: | 872 public: |
| 873 SafeStackFrameIterator(Isolate* isolate, | 873 SafeStackFrameIterator(Isolate* isolate, |
| 874 Address fp, Address sp, | 874 Address fp, Address sp, |
| 875 Address low_bound, Address high_bound); | 875 Address low_bound, Address high_bound); |
| 876 | 876 |
| 877 StackFrame* frame() const { | 877 inline JavaScriptFrame* frame() const; |
| 878 ASSERT(!iteration_done_); | |
| 879 return iterator_.frame(); | |
| 880 } | |
| 881 | 878 |
| 882 bool done() const { return iteration_done_ || iterator_.done(); } | 879 bool done() const { return iteration_done_ || iterator_.done(); } |
| 883 | |
| 884 void Advance(); | 880 void Advance(); |
| 885 | 881 |
| 886 static bool is_active(Isolate* isolate); | 882 static bool is_active(Isolate* isolate); |
| 887 | 883 |
| 888 private: | 884 private: |
| 885 void AdvanceOneFrame(); |
| 886 |
| 889 static bool IsWithinBounds( | 887 static bool IsWithinBounds( |
| 890 Address low_bound, Address high_bound, Address addr) { | 888 Address low_bound, Address high_bound, Address addr) { |
| 891 return low_bound <= addr && addr <= high_bound; | 889 return low_bound <= addr && addr <= high_bound; |
| 892 } | 890 } |
| 893 | 891 |
| 894 class StackAddressValidator { | 892 class StackAddressValidator { |
| 895 public: | 893 public: |
| 896 StackAddressValidator(Address low_bound, Address high_bound) | 894 StackAddressValidator(Address low_bound, Address high_bound) |
| 897 : low_bound_(low_bound), high_bound_(high_bound) { } | 895 : low_bound_(low_bound), high_bound_(high_bound) { } |
| 898 bool IsValid(Address addr) const { | 896 bool IsValid(Address addr) const { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 938 | 936 |
| 939 ActiveCountMaintainer maintainer_; | 937 ActiveCountMaintainer maintainer_; |
| 940 StackAddressValidator stack_validator_; | 938 StackAddressValidator stack_validator_; |
| 941 const bool is_valid_top_; | 939 const bool is_valid_top_; |
| 942 const bool is_valid_fp_; | 940 const bool is_valid_fp_; |
| 943 bool iteration_done_; | 941 bool iteration_done_; |
| 944 StackFrameIterator iterator_; | 942 StackFrameIterator iterator_; |
| 945 }; | 943 }; |
| 946 | 944 |
| 947 | 945 |
| 948 class SafeStackTraceFrameIterator BASE_EMBEDDED { | |
| 949 public: | |
| 950 SafeStackTraceFrameIterator(Isolate* isolate, | |
| 951 Address fp, | |
| 952 Address sp, | |
| 953 Address low_bound, | |
| 954 Address high_bound); | |
| 955 | |
| 956 inline JavaScriptFrame* frame() const; | |
| 957 | |
| 958 bool done() const { return iterator_.done(); } | |
| 959 void Advance(); | |
| 960 | |
| 961 private: | |
| 962 SafeStackFrameIterator iterator_; | |
| 963 }; | |
| 964 | |
| 965 | |
| 966 class StackFrameLocator BASE_EMBEDDED { | 946 class StackFrameLocator BASE_EMBEDDED { |
| 967 public: | 947 public: |
| 968 explicit StackFrameLocator(Isolate* isolate) : iterator_(isolate) {} | 948 explicit StackFrameLocator(Isolate* isolate) : iterator_(isolate) {} |
| 969 | 949 |
| 970 // Find the nth JavaScript frame on the stack. The caller must | 950 // Find the nth JavaScript frame on the stack. The caller must |
| 971 // guarantee that such a frame exists. | 951 // guarantee that such a frame exists. |
| 972 JavaScriptFrame* FindJavaScriptFrame(int n); | 952 JavaScriptFrame* FindJavaScriptFrame(int n); |
| 973 | 953 |
| 974 private: | 954 private: |
| 975 StackFrameIterator iterator_; | 955 StackFrameIterator iterator_; |
| 976 }; | 956 }; |
| 977 | 957 |
| 978 | 958 |
| 979 // Reads all frames on the current stack and copies them into the current | 959 // Reads all frames on the current stack and copies them into the current |
| 980 // zone memory. | 960 // zone memory. |
| 981 Vector<StackFrame*> CreateStackMap(Isolate* isolate, Zone* zone); | 961 Vector<StackFrame*> CreateStackMap(Isolate* isolate, Zone* zone); |
| 982 | 962 |
| 983 } } // namespace v8::internal | 963 } } // namespace v8::internal |
| 984 | 964 |
| 985 #endif // V8_FRAMES_H_ | 965 #endif // V8_FRAMES_H_ |
| OLD | NEW |