| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 10 matching lines...) Expand all Loading... |
| 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | 27 |
| 28 #ifndef V8_EXECUTION_H_ | 28 #ifndef V8_EXECUTION_H_ |
| 29 #define V8_EXECUTION_H_ | 29 #define V8_EXECUTION_H_ |
| 30 | 30 |
| 31 #include "allocation.h" |
| 32 |
| 31 namespace v8 { | 33 namespace v8 { |
| 32 namespace internal { | 34 namespace internal { |
| 33 | 35 |
| 34 | 36 |
| 35 // Flag used to set the interrupt causes. | 37 // Flag used to set the interrupt causes. |
| 36 enum InterruptFlag { | 38 enum InterruptFlag { |
| 37 INTERRUPT = 1 << 0, | 39 INTERRUPT = 1 << 0, |
| 38 DEBUGBREAK = 1 << 1, | 40 DEBUGBREAK = 1 << 1, |
| 39 DEBUGCOMMAND = 1 << 2, | 41 DEBUGCOMMAND = 1 << 2, |
| 40 PREEMPT = 1 << 3, | 42 PREEMPT = 1 << 3, |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 static void ProcessDebugMesssages(bool debug_command_only); | 133 static void ProcessDebugMesssages(bool debug_command_only); |
| 132 #endif | 134 #endif |
| 133 | 135 |
| 134 // If the stack guard is triggered, but it is not an actual | 136 // If the stack guard is triggered, but it is not an actual |
| 135 // stack overflow, then handle the interruption accordingly. | 137 // stack overflow, then handle the interruption accordingly. |
| 136 MUST_USE_RESULT static MaybeObject* HandleStackGuardInterrupt(); | 138 MUST_USE_RESULT static MaybeObject* HandleStackGuardInterrupt(); |
| 137 | 139 |
| 138 // Get a function delegate (or undefined) for the given non-function | 140 // Get a function delegate (or undefined) for the given non-function |
| 139 // object. Used for support calling objects as functions. | 141 // object. Used for support calling objects as functions. |
| 140 static Handle<Object> GetFunctionDelegate(Handle<Object> object); | 142 static Handle<Object> GetFunctionDelegate(Handle<Object> object); |
| 143 static Handle<Object> TryGetFunctionDelegate(Handle<Object> object, |
| 144 bool* has_pending_exception); |
| 141 | 145 |
| 142 // Get a function delegate (or undefined) for the given non-function | 146 // Get a function delegate (or undefined) for the given non-function |
| 143 // object. Used for support calling objects as constructors. | 147 // object. Used for support calling objects as constructors. |
| 144 static Handle<Object> GetConstructorDelegate(Handle<Object> object); | 148 static Handle<Object> GetConstructorDelegate(Handle<Object> object); |
| 149 static Handle<Object> TryGetConstructorDelegate(Handle<Object> object, |
| 150 bool* has_pending_exception); |
| 145 }; | 151 }; |
| 146 | 152 |
| 147 | 153 |
| 148 class ExecutionAccess; | 154 class ExecutionAccess; |
| 149 class Isolate; | 155 class Isolate; |
| 150 | 156 |
| 151 | 157 |
| 152 // StackGuard contains the handling of the limits that are used to limit the | 158 // StackGuard contains the handling of the limits that are used to limit the |
| 153 // number of nested invocations of JavaScript and the stack size used in each | 159 // number of nested invocations of JavaScript and the stack size used in each |
| 154 // invocation. | 160 // invocation. |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 #endif | 251 #endif |
| 246 | 252 |
| 247 class ThreadLocal { | 253 class ThreadLocal { |
| 248 public: | 254 public: |
| 249 ThreadLocal() { Clear(); } | 255 ThreadLocal() { Clear(); } |
| 250 // You should hold the ExecutionAccess lock when you call Initialize or | 256 // You should hold the ExecutionAccess lock when you call Initialize or |
| 251 // Clear. | 257 // Clear. |
| 252 void Clear(); | 258 void Clear(); |
| 253 | 259 |
| 254 // Returns true if the heap's stack limits should be set, false if not. | 260 // Returns true if the heap's stack limits should be set, false if not. |
| 255 bool Initialize(); | 261 bool Initialize(Isolate* isolate); |
| 256 | 262 |
| 257 // The stack limit is split into a JavaScript and a C++ stack limit. These | 263 // The stack limit is split into a JavaScript and a C++ stack limit. These |
| 258 // two are the same except when running on a simulator where the C++ and | 264 // two are the same except when running on a simulator where the C++ and |
| 259 // JavaScript stacks are separate. Each of the two stack limits have two | 265 // JavaScript stacks are separate. Each of the two stack limits have two |
| 260 // values. The one eith the real_ prefix is the actual stack limit | 266 // values. The one eith the real_ prefix is the actual stack limit |
| 261 // set for the VM. The one without the real_ prefix has the same value as | 267 // set for the VM. The one without the real_ prefix has the same value as |
| 262 // the actual stack limit except when there is an interruption (e.g. debug | 268 // the actual stack limit except when there is an interruption (e.g. debug |
| 263 // break or preemption) in which case it is lowered to make stack checks | 269 // break or preemption) in which case it is lowered to make stack checks |
| 264 // fail. Both the generated code and the runtime system check against the | 270 // fail. Both the generated code and the runtime system check against the |
| 265 // one without the real_ prefix. | 271 // one without the real_ prefix. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 282 friend class StackLimitCheck; | 288 friend class StackLimitCheck; |
| 283 friend class PostponeInterruptsScope; | 289 friend class PostponeInterruptsScope; |
| 284 | 290 |
| 285 DISALLOW_COPY_AND_ASSIGN(StackGuard); | 291 DISALLOW_COPY_AND_ASSIGN(StackGuard); |
| 286 }; | 292 }; |
| 287 | 293 |
| 288 | 294 |
| 289 } } // namespace v8::internal | 295 } } // namespace v8::internal |
| 290 | 296 |
| 291 #endif // V8_EXECUTION_H_ | 297 #endif // V8_EXECUTION_H_ |
| OLD | NEW |