| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 // so that the currently executing thread always has its own copy of this | 397 // so that the currently executing thread always has its own copy of this |
| 398 // data. | 398 // data. |
| 399 class HandleScopeImplementer { | 399 class HandleScopeImplementer { |
| 400 public: | 400 public: |
| 401 explicit HandleScopeImplementer(Isolate* isolate) | 401 explicit HandleScopeImplementer(Isolate* isolate) |
| 402 : isolate_(isolate), | 402 : isolate_(isolate), |
| 403 blocks_(0), | 403 blocks_(0), |
| 404 entered_contexts_(0), | 404 entered_contexts_(0), |
| 405 saved_contexts_(0), | 405 saved_contexts_(0), |
| 406 spare_(NULL), | 406 spare_(NULL), |
| 407 ignore_out_of_memory_(false), | |
| 408 call_depth_(0) { } | 407 call_depth_(0) { } |
| 409 | 408 |
| 410 // Threading support for handle data. | 409 // Threading support for handle data. |
| 411 static int ArchiveSpacePerThread(); | 410 static int ArchiveSpacePerThread(); |
| 412 char* RestoreThread(char* from); | 411 char* RestoreThread(char* from); |
| 413 char* ArchiveThread(char* to); | 412 char* ArchiveThread(char* to); |
| 414 void FreeThreadResources(); | 413 void FreeThreadResources(); |
| 415 | 414 |
| 416 // Garbage collection support. | 415 // Garbage collection support. |
| 417 void Iterate(v8::internal::ObjectVisitor* v); | 416 void Iterate(v8::internal::ObjectVisitor* v); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 430 | 429 |
| 431 // Returns the last entered context or an empty handle if no | 430 // Returns the last entered context or an empty handle if no |
| 432 // contexts have been entered. | 431 // contexts have been entered. |
| 433 inline Handle<Object> LastEnteredContext(); | 432 inline Handle<Object> LastEnteredContext(); |
| 434 | 433 |
| 435 inline void SaveContext(Context* context); | 434 inline void SaveContext(Context* context); |
| 436 inline Context* RestoreContext(); | 435 inline Context* RestoreContext(); |
| 437 inline bool HasSavedContexts(); | 436 inline bool HasSavedContexts(); |
| 438 | 437 |
| 439 inline List<internal::Object**>* blocks() { return &blocks_; } | 438 inline List<internal::Object**>* blocks() { return &blocks_; } |
| 440 inline bool ignore_out_of_memory() { return ignore_out_of_memory_; } | |
| 441 inline void set_ignore_out_of_memory(bool value) { | |
| 442 ignore_out_of_memory_ = value; | |
| 443 } | |
| 444 | 439 |
| 445 private: | 440 private: |
| 446 void ResetAfterArchive() { | 441 void ResetAfterArchive() { |
| 447 blocks_.Initialize(0); | 442 blocks_.Initialize(0); |
| 448 entered_contexts_.Initialize(0); | 443 entered_contexts_.Initialize(0); |
| 449 saved_contexts_.Initialize(0); | 444 saved_contexts_.Initialize(0); |
| 450 spare_ = NULL; | 445 spare_ = NULL; |
| 451 ignore_out_of_memory_ = false; | |
| 452 call_depth_ = 0; | 446 call_depth_ = 0; |
| 453 } | 447 } |
| 454 | 448 |
| 455 void Free() { | 449 void Free() { |
| 456 ASSERT(blocks_.length() == 0); | 450 ASSERT(blocks_.length() == 0); |
| 457 ASSERT(entered_contexts_.length() == 0); | 451 ASSERT(entered_contexts_.length() == 0); |
| 458 ASSERT(saved_contexts_.length() == 0); | 452 ASSERT(saved_contexts_.length() == 0); |
| 459 blocks_.Free(); | 453 blocks_.Free(); |
| 460 entered_contexts_.Free(); | 454 entered_contexts_.Free(); |
| 461 saved_contexts_.Free(); | 455 saved_contexts_.Free(); |
| 462 if (spare_ != NULL) { | 456 if (spare_ != NULL) { |
| 463 DeleteArray(spare_); | 457 DeleteArray(spare_); |
| 464 spare_ = NULL; | 458 spare_ = NULL; |
| 465 } | 459 } |
| 466 ASSERT(call_depth_ == 0); | 460 ASSERT(call_depth_ == 0); |
| 467 } | 461 } |
| 468 | 462 |
| 469 Isolate* isolate_; | 463 Isolate* isolate_; |
| 470 List<internal::Object**> blocks_; | 464 List<internal::Object**> blocks_; |
| 471 // Used as a stack to keep track of entered contexts. | 465 // Used as a stack to keep track of entered contexts. |
| 472 List<Handle<Object> > entered_contexts_; | 466 List<Handle<Object> > entered_contexts_; |
| 473 // Used as a stack to keep track of saved contexts. | 467 // Used as a stack to keep track of saved contexts. |
| 474 List<Context*> saved_contexts_; | 468 List<Context*> saved_contexts_; |
| 475 Object** spare_; | 469 Object** spare_; |
| 476 bool ignore_out_of_memory_; | |
| 477 int call_depth_; | 470 int call_depth_; |
| 478 // This is only used for threading support. | 471 // This is only used for threading support. |
| 479 v8::ImplementationUtilities::HandleScopeData handle_scope_data_; | 472 v8::ImplementationUtilities::HandleScopeData handle_scope_data_; |
| 480 | 473 |
| 481 void IterateThis(ObjectVisitor* v); | 474 void IterateThis(ObjectVisitor* v); |
| 482 char* RestoreThreadHelper(char* from); | 475 char* RestoreThreadHelper(char* from); |
| 483 char* ArchiveThreadHelper(char* to); | 476 char* ArchiveThreadHelper(char* to); |
| 484 | 477 |
| 485 DISALLOW_COPY_AND_ASSIGN(HandleScopeImplementer); | 478 DISALLOW_COPY_AND_ASSIGN(HandleScopeImplementer); |
| 486 }; | 479 }; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 stress_type_ = stress_type; | 557 stress_type_ = stress_type; |
| 565 } | 558 } |
| 566 | 559 |
| 567 private: | 560 private: |
| 568 static v8::Testing::StressType stress_type_; | 561 static v8::Testing::StressType stress_type_; |
| 569 }; | 562 }; |
| 570 | 563 |
| 571 } } // namespace v8::internal | 564 } } // namespace v8::internal |
| 572 | 565 |
| 573 #endif // V8_API_H_ | 566 #endif // V8_API_H_ |
| OLD | NEW |