| 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 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 | 593 |
| 594 void HandleScope::Initialize(Isolate* isolate) { | 594 void HandleScope::Initialize(Isolate* isolate) { |
| 595 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); | 595 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 596 // We do not want to check the correct usage of the Locker class all over the | 596 // We do not want to check the correct usage of the Locker class all over the |
| 597 // place, so we do it only here: Without a HandleScope, an embedder can do | 597 // place, so we do it only here: Without a HandleScope, an embedder can do |
| 598 // almost nothing, so it is enough to check in this central place. | 598 // almost nothing, so it is enough to check in this central place. |
| 599 Utils::ApiCheck(!v8::Locker::IsActive() || | 599 Utils::ApiCheck(!v8::Locker::IsActive() || |
| 600 internal_isolate->thread_manager()->IsLockedByCurrentThread(), | 600 internal_isolate->thread_manager()->IsLockedByCurrentThread(), |
| 601 "HandleScope::HandleScope", | 601 "HandleScope::HandleScope", |
| 602 "Entering the V8 API without proper locking in place"); | 602 "Entering the V8 API without proper locking in place"); |
| 603 v8::ImplementationUtilities::HandleScopeData* current = | 603 i::HandleScopeData* current = internal_isolate->handle_scope_data(); |
| 604 internal_isolate->handle_scope_data(); | |
| 605 isolate_ = internal_isolate; | 604 isolate_ = internal_isolate; |
| 606 prev_next_ = current->next; | 605 prev_next_ = current->next; |
| 607 prev_limit_ = current->limit; | 606 prev_limit_ = current->limit; |
| 608 current->level++; | 607 current->level++; |
| 609 } | 608 } |
| 610 | 609 |
| 611 | 610 |
| 612 HandleScope::~HandleScope() { | 611 HandleScope::~HandleScope() { |
| 613 i::HandleScope::CloseScope(isolate_, prev_next_, prev_limit_); | 612 i::HandleScope::CloseScope(isolate_, prev_next_, prev_limit_); |
| 614 } | 613 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 633 | 632 |
| 634 | 633 |
| 635 EscapableHandleScope::EscapableHandleScope(Isolate* v8_isolate) { | 634 EscapableHandleScope::EscapableHandleScope(Isolate* v8_isolate) { |
| 636 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate); | 635 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate); |
| 637 escape_slot_ = CreateHandle(isolate, isolate->heap()->the_hole_value()); | 636 escape_slot_ = CreateHandle(isolate, isolate->heap()->the_hole_value()); |
| 638 Initialize(v8_isolate); | 637 Initialize(v8_isolate); |
| 639 } | 638 } |
| 640 | 639 |
| 641 | 640 |
| 642 i::Object** EscapableHandleScope::Escape(i::Object** escape_value) { | 641 i::Object** EscapableHandleScope::Escape(i::Object** escape_value) { |
| 643 Utils::ApiCheck(*escape_slot_ == isolate_->heap()->the_hole_value(), | 642 i::Heap* heap = reinterpret_cast<i::Isolate*>(GetIsolate())->heap(); |
| 643 Utils::ApiCheck(*escape_slot_ == heap->the_hole_value(), |
| 644 "EscapeableHandleScope::Escape", | 644 "EscapeableHandleScope::Escape", |
| 645 "Escape value set twice"); | 645 "Escape value set twice"); |
| 646 if (escape_value == NULL) { | 646 if (escape_value == NULL) { |
| 647 *escape_slot_ = isolate_->heap()->undefined_value(); | 647 *escape_slot_ = heap->undefined_value(); |
| 648 return NULL; | 648 return NULL; |
| 649 } | 649 } |
| 650 *escape_slot_ = *escape_value; | 650 *escape_slot_ = *escape_value; |
| 651 return escape_slot_; | 651 return escape_slot_; |
| 652 } | 652 } |
| 653 | 653 |
| 654 | 654 |
| 655 void Context::Enter() { | 655 void Context::Enter() { |
| 656 i::Handle<i::Context> env = Utils::OpenHandle(this); | 656 i::Handle<i::Context> env = Utils::OpenHandle(this); |
| 657 i::Isolate* isolate = env->GetIsolate(); | 657 i::Isolate* isolate = env->GetIsolate(); |
| (...skipping 4486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5144 Local<Context> v8::Context::New( | 5144 Local<Context> v8::Context::New( |
| 5145 v8::Isolate* external_isolate, | 5145 v8::Isolate* external_isolate, |
| 5146 v8::ExtensionConfiguration* extensions, | 5146 v8::ExtensionConfiguration* extensions, |
| 5147 v8::Handle<ObjectTemplate> global_template, | 5147 v8::Handle<ObjectTemplate> global_template, |
| 5148 v8::Handle<Value> global_object) { | 5148 v8::Handle<Value> global_object) { |
| 5149 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); | 5149 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); |
| 5150 EnsureInitializedForIsolate(isolate, "v8::Context::New()"); | 5150 EnsureInitializedForIsolate(isolate, "v8::Context::New()"); |
| 5151 LOG_API(isolate, "Context::New"); | 5151 LOG_API(isolate, "Context::New"); |
| 5152 ON_BAILOUT(isolate, "v8::Context::New()", return Local<Context>()); | 5152 ON_BAILOUT(isolate, "v8::Context::New()", return Local<Context>()); |
| 5153 i::HandleScope scope(isolate); | 5153 i::HandleScope scope(isolate); |
| 5154 ExtensionConfiguration no_extensions; |
| 5155 if (extensions == NULL) extensions = &no_extensions; |
| 5154 i::Handle<i::Context> env = | 5156 i::Handle<i::Context> env = |
| 5155 CreateEnvironment(isolate, extensions, global_template, global_object); | 5157 CreateEnvironment(isolate, extensions, global_template, global_object); |
| 5156 if (env.is_null()) return Local<Context>(); | 5158 if (env.is_null()) return Local<Context>(); |
| 5157 return Utils::ToLocal(scope.CloseAndEscape(env)); | 5159 return Utils::ToLocal(scope.CloseAndEscape(env)); |
| 5158 } | 5160 } |
| 5159 | 5161 |
| 5160 | 5162 |
| 5161 void v8::Context::SetSecurityToken(Handle<Value> token) { | 5163 void v8::Context::SetSecurityToken(Handle<Value> token) { |
| 5162 i::Isolate* isolate = i::Isolate::Current(); | 5164 i::Isolate* isolate = i::Isolate::Current(); |
| 5163 ENTER_V8(isolate); | 5165 ENTER_V8(isolate); |
| (...skipping 2096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7260 | 7262 |
| 7261 namespace internal { | 7263 namespace internal { |
| 7262 | 7264 |
| 7263 | 7265 |
| 7264 void HandleScopeImplementer::FreeThreadResources() { | 7266 void HandleScopeImplementer::FreeThreadResources() { |
| 7265 Free(); | 7267 Free(); |
| 7266 } | 7268 } |
| 7267 | 7269 |
| 7268 | 7270 |
| 7269 char* HandleScopeImplementer::ArchiveThread(char* storage) { | 7271 char* HandleScopeImplementer::ArchiveThread(char* storage) { |
| 7270 v8::ImplementationUtilities::HandleScopeData* current = | 7272 HandleScopeData* current = isolate_->handle_scope_data(); |
| 7271 isolate_->handle_scope_data(); | |
| 7272 handle_scope_data_ = *current; | 7273 handle_scope_data_ = *current; |
| 7273 OS::MemCopy(storage, this, sizeof(*this)); | 7274 OS::MemCopy(storage, this, sizeof(*this)); |
| 7274 | 7275 |
| 7275 ResetAfterArchive(); | 7276 ResetAfterArchive(); |
| 7276 current->Initialize(); | 7277 current->Initialize(); |
| 7277 | 7278 |
| 7278 return storage + ArchiveSpacePerThread(); | 7279 return storage + ArchiveSpacePerThread(); |
| 7279 } | 7280 } |
| 7280 | 7281 |
| 7281 | 7282 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7322 List<Context*>* context_lists[2] = { &saved_contexts_, &entered_contexts_}; | 7323 List<Context*>* context_lists[2] = { &saved_contexts_, &entered_contexts_}; |
| 7323 for (unsigned i = 0; i < ARRAY_SIZE(context_lists); i++) { | 7324 for (unsigned i = 0; i < ARRAY_SIZE(context_lists); i++) { |
| 7324 if (context_lists[i]->is_empty()) continue; | 7325 if (context_lists[i]->is_empty()) continue; |
| 7325 Object** start = reinterpret_cast<Object**>(&context_lists[i]->first()); | 7326 Object** start = reinterpret_cast<Object**>(&context_lists[i]->first()); |
| 7326 v->VisitPointers(start, start + context_lists[i]->length()); | 7327 v->VisitPointers(start, start + context_lists[i]->length()); |
| 7327 } | 7328 } |
| 7328 } | 7329 } |
| 7329 | 7330 |
| 7330 | 7331 |
| 7331 void HandleScopeImplementer::Iterate(ObjectVisitor* v) { | 7332 void HandleScopeImplementer::Iterate(ObjectVisitor* v) { |
| 7332 v8::ImplementationUtilities::HandleScopeData* current = | 7333 HandleScopeData* current = isolate_->handle_scope_data(); |
| 7333 isolate_->handle_scope_data(); | |
| 7334 handle_scope_data_ = *current; | 7334 handle_scope_data_ = *current; |
| 7335 IterateThis(v); | 7335 IterateThis(v); |
| 7336 } | 7336 } |
| 7337 | 7337 |
| 7338 | 7338 |
| 7339 char* HandleScopeImplementer::Iterate(ObjectVisitor* v, char* storage) { | 7339 char* HandleScopeImplementer::Iterate(ObjectVisitor* v, char* storage) { |
| 7340 HandleScopeImplementer* scope_implementer = | 7340 HandleScopeImplementer* scope_implementer = |
| 7341 reinterpret_cast<HandleScopeImplementer*>(storage); | 7341 reinterpret_cast<HandleScopeImplementer*>(storage); |
| 7342 scope_implementer->IterateThis(v); | 7342 scope_implementer->IterateThis(v); |
| 7343 return storage + ArchiveSpacePerThread(); | 7343 return storage + ArchiveSpacePerThread(); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7423 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7423 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7424 Address callback_address = | 7424 Address callback_address = |
| 7425 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7425 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7426 VMState<EXTERNAL> state(isolate); | 7426 VMState<EXTERNAL> state(isolate); |
| 7427 ExternalCallbackScope call_scope(isolate, callback_address); | 7427 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7428 callback(info); | 7428 callback(info); |
| 7429 } | 7429 } |
| 7430 | 7430 |
| 7431 | 7431 |
| 7432 } } // namespace v8::internal | 7432 } } // namespace v8::internal |
| OLD | NEW |