Chromium Code Reviews| 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 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 743 i::Object** HandleScope::CreateHandle(i::HeapObject* value) { | 743 i::Object** HandleScope::CreateHandle(i::HeapObject* value) { |
| 744 ASSERT(value->IsHeapObject()); | 744 ASSERT(value->IsHeapObject()); |
| 745 return reinterpret_cast<i::Object**>( | 745 return reinterpret_cast<i::Object**>( |
| 746 i::HandleScope::CreateHandle(value->GetIsolate(), value)); | 746 i::HandleScope::CreateHandle(value->GetIsolate(), value)); |
| 747 } | 747 } |
| 748 | 748 |
| 749 | 749 |
| 750 void Context::Enter() { | 750 void Context::Enter() { |
| 751 i::Handle<i::Context> env = Utils::OpenHandle(this); | 751 i::Handle<i::Context> env = Utils::OpenHandle(this); |
| 752 i::Isolate* isolate = env->GetIsolate(); | 752 i::Isolate* isolate = env->GetIsolate(); |
| 753 if (IsDeadCheck(isolate, "v8::Context::Enter()")) return; | |
| 754 ENTER_V8(isolate); | 753 ENTER_V8(isolate); |
| 755 | |
| 756 isolate->handle_scope_implementer()->EnterContext(env); | 754 isolate->handle_scope_implementer()->EnterContext(env); |
| 757 | |
| 758 isolate->handle_scope_implementer()->SaveContext(isolate->context()); | 755 isolate->handle_scope_implementer()->SaveContext(isolate->context()); |
| 759 isolate->set_context(*env); | 756 isolate->set_context(*env); |
| 760 } | 757 } |
| 761 | 758 |
| 762 | 759 |
| 763 void Context::Exit() { | 760 void Context::Exit() { |
| 764 // Exit is essentially a static function and doesn't use the | 761 // Exit is essentially a static function and doesn't use the |
| 765 // receiver, so we have to get the current isolate from the thread | 762 // receiver, so we have to get the current isolate from the thread |
|
Michael Starzinger
2013/09/23 09:24:47
This comment no longer applies, let's drop it.
| |
| 766 // local. | 763 // local. |
| 767 i::Isolate* isolate = i::Isolate::Current(); | 764 i::Handle<i::Context> context = Utils::OpenHandle(this); |
| 768 if (!isolate->IsInitialized()) return; | 765 i::Isolate* isolate = context->GetIsolate(); |
| 769 | 766 ENTER_V8(isolate); |
| 770 if (!ApiCheck(isolate->handle_scope_implementer()->LeaveLastContext(), | 767 if (!ApiCheck(isolate->handle_scope_implementer()->LeaveLastContext(), |
| 771 "v8::Context::Exit()", | 768 "v8::Context::Exit()", |
| 772 "Cannot exit non-entered context")) { | 769 "Cannot exit non-entered context")) { |
| 773 return; | 770 return; |
| 774 } | 771 } |
| 775 | |
| 776 // Content of 'last_context' could be NULL. | 772 // Content of 'last_context' could be NULL. |
| 777 i::Context* last_context = | 773 i::Context* last_context = |
| 778 isolate->handle_scope_implementer()->RestoreContext(); | 774 isolate->handle_scope_implementer()->RestoreContext(); |
| 779 isolate->set_context(last_context); | 775 isolate->set_context(last_context); |
| 780 } | 776 } |
| 781 | 777 |
| 782 | 778 |
| 783 static void* DecodeSmiToAligned(i::Object* value, const char* location) { | 779 static void* DecodeSmiToAligned(i::Object* value, const char* location) { |
| 784 ApiCheck(value->IsSmi(), location, "Not a Smi"); | 780 ApiCheck(value->IsSmi(), location, "Not a Smi"); |
| 785 return reinterpret_cast<void*>(value); | 781 return reinterpret_cast<void*>(value); |
| (...skipping 4701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5487 i::Handle<i::Context> env = Utils::OpenHandle(this); | 5483 i::Handle<i::Context> env = Utils::OpenHandle(this); |
| 5488 return reinterpret_cast<Isolate*>(env->GetIsolate()); | 5484 return reinterpret_cast<Isolate*>(env->GetIsolate()); |
| 5489 } | 5485 } |
| 5490 | 5486 |
| 5491 | 5487 |
| 5492 v8::Local<v8::Context> Context::GetEntered() { | 5488 v8::Local<v8::Context> Context::GetEntered() { |
| 5493 i::Isolate* isolate = i::Isolate::Current(); | 5489 i::Isolate* isolate = i::Isolate::Current(); |
| 5494 if (!EnsureInitializedForIsolate(isolate, "v8::Context::GetEntered()")) { | 5490 if (!EnsureInitializedForIsolate(isolate, "v8::Context::GetEntered()")) { |
| 5495 return Local<Context>(); | 5491 return Local<Context>(); |
| 5496 } | 5492 } |
| 5497 i::Handle<i::Object> last = | 5493 return reinterpret_cast<Isolate*>(isolate)->GetEnteredContext(); |
| 5498 isolate->handle_scope_implementer()->LastEnteredContext(); | |
| 5499 if (last.is_null()) return Local<Context>(); | |
| 5500 i::Handle<i::Context> context = i::Handle<i::Context>::cast(last); | |
| 5501 return Utils::ToLocal(context); | |
| 5502 } | 5494 } |
| 5503 | 5495 |
| 5504 | 5496 |
| 5505 v8::Local<v8::Context> Context::GetCurrent() { | 5497 v8::Local<v8::Context> Context::GetCurrent() { |
| 5506 i::Isolate* isolate = i::Isolate::Current(); | 5498 i::Isolate* isolate = i::Isolate::Current(); |
| 5507 if (IsDeadCheck(isolate, "v8::Context::GetCurrent()")) { | 5499 if (IsDeadCheck(isolate, "v8::Context::GetCurrent()")) { |
| 5508 return Local<Context>(); | 5500 return Local<Context>(); |
| 5509 } | 5501 } |
| 5510 return reinterpret_cast<Isolate*>(isolate)->GetCurrentContext(); | 5502 return reinterpret_cast<Isolate*>(isolate)->GetCurrentContext(); |
| 5511 } | 5503 } |
| 5512 | 5504 |
| 5513 | 5505 |
| 5514 v8::Local<v8::Context> Context::GetCalling() { | 5506 v8::Local<v8::Context> Context::GetCalling() { |
| 5515 i::Isolate* isolate = i::Isolate::Current(); | 5507 i::Isolate* isolate = i::Isolate::Current(); |
| 5516 if (IsDeadCheck(isolate, "v8::Context::GetCalling()")) { | 5508 if (IsDeadCheck(isolate, "v8::Context::GetCalling()")) { |
| 5517 return Local<Context>(); | 5509 return Local<Context>(); |
| 5518 } | 5510 } |
| 5519 i::Handle<i::Object> calling = | 5511 return reinterpret_cast<Isolate*>(isolate)->GetCallingContext(); |
| 5520 isolate->GetCallingNativeContext(); | |
| 5521 if (calling.is_null()) return Local<Context>(); | |
| 5522 i::Handle<i::Context> context = i::Handle<i::Context>::cast(calling); | |
| 5523 return Utils::ToLocal(context); | |
| 5524 } | 5512 } |
| 5525 | 5513 |
| 5526 | 5514 |
| 5527 v8::Local<v8::Object> Context::Global() { | 5515 v8::Local<v8::Object> Context::Global() { |
| 5528 i::Isolate* isolate = i::Isolate::Current(); | 5516 i::Handle<i::Context> context = Utils::OpenHandle(this); |
| 5529 if (IsDeadCheck(isolate, "v8::Context::Global()")) { | 5517 i::Isolate* isolate = context->GetIsolate(); |
| 5530 return Local<v8::Object>(); | |
| 5531 } | |
| 5532 i::Object** ctx = reinterpret_cast<i::Object**>(this); | |
| 5533 i::Handle<i::Context> context = | |
| 5534 i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); | |
| 5535 i::Handle<i::Object> global(context->global_proxy(), isolate); | 5518 i::Handle<i::Object> global(context->global_proxy(), isolate); |
| 5536 return Utils::ToLocal(i::Handle<i::JSObject>::cast(global)); | 5519 return Utils::ToLocal(i::Handle<i::JSObject>::cast(global)); |
| 5537 } | 5520 } |
| 5538 | 5521 |
| 5539 | 5522 |
| 5540 void Context::DetachGlobal() { | 5523 void Context::DetachGlobal() { |
| 5541 i::Isolate* isolate = i::Isolate::Current(); | 5524 i::Handle<i::Context> context = Utils::OpenHandle(this); |
| 5542 if (IsDeadCheck(isolate, "v8::Context::DetachGlobal()")) return; | 5525 i::Isolate* isolate = context->GetIsolate(); |
| 5543 ENTER_V8(isolate); | 5526 ENTER_V8(isolate); |
| 5544 i::Object** ctx = reinterpret_cast<i::Object**>(this); | |
| 5545 i::Handle<i::Context> context = | |
| 5546 i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); | |
| 5547 isolate->bootstrapper()->DetachGlobal(context); | 5527 isolate->bootstrapper()->DetachGlobal(context); |
| 5548 } | 5528 } |
| 5549 | 5529 |
| 5550 | 5530 |
| 5551 void Context::ReattachGlobal(Handle<Object> global_object) { | 5531 void Context::ReattachGlobal(Handle<Object> global_object) { |
| 5552 i::Isolate* isolate = i::Isolate::Current(); | 5532 i::Handle<i::Context> context = Utils::OpenHandle(this); |
| 5553 if (IsDeadCheck(isolate, "v8::Context::ReattachGlobal()")) return; | 5533 i::Isolate* isolate = context->GetIsolate(); |
| 5554 ENTER_V8(isolate); | 5534 ENTER_V8(isolate); |
| 5555 i::Object** ctx = reinterpret_cast<i::Object**>(this); | |
| 5556 i::Handle<i::Context> context = | |
| 5557 i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); | |
| 5558 i::Handle<i::JSGlobalProxy> global_proxy = | 5535 i::Handle<i::JSGlobalProxy> global_proxy = |
| 5559 i::Handle<i::JSGlobalProxy>::cast(Utils::OpenHandle(*global_object)); | 5536 i::Handle<i::JSGlobalProxy>::cast(Utils::OpenHandle(*global_object)); |
| 5560 isolate->bootstrapper()->ReattachGlobal(context, global_proxy); | 5537 isolate->bootstrapper()->ReattachGlobal(context, global_proxy); |
| 5561 } | 5538 } |
| 5562 | 5539 |
| 5563 | 5540 |
| 5564 void Context::AllowCodeGenerationFromStrings(bool allow) { | 5541 void Context::AllowCodeGenerationFromStrings(bool allow) { |
| 5565 i::Isolate* isolate = i::Isolate::Current(); | 5542 i::Handle<i::Context> context = Utils::OpenHandle(this); |
| 5566 if (IsDeadCheck(isolate, "v8::Context::AllowCodeGenerationFromStrings()")) { | 5543 i::Isolate* isolate = context->GetIsolate(); |
| 5567 return; | |
| 5568 } | |
| 5569 ENTER_V8(isolate); | 5544 ENTER_V8(isolate); |
| 5570 i::Object** ctx = reinterpret_cast<i::Object**>(this); | |
| 5571 i::Handle<i::Context> context = | |
| 5572 i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); | |
| 5573 context->set_allow_code_gen_from_strings( | 5545 context->set_allow_code_gen_from_strings( |
| 5574 allow ? isolate->heap()->true_value() : isolate->heap()->false_value()); | 5546 allow ? isolate->heap()->true_value() : isolate->heap()->false_value()); |
| 5575 } | 5547 } |
| 5576 | 5548 |
| 5577 | 5549 |
| 5578 bool Context::IsCodeGenerationFromStringsAllowed() { | 5550 bool Context::IsCodeGenerationFromStringsAllowed() { |
| 5579 i::Isolate* isolate = i::Isolate::Current(); | 5551 i::Handle<i::Context> context = Utils::OpenHandle(this); |
| 5580 if (IsDeadCheck(isolate, | |
| 5581 "v8::Context::IsCodeGenerationFromStringsAllowed()")) { | |
| 5582 return false; | |
| 5583 } | |
| 5584 ENTER_V8(isolate); | |
| 5585 i::Object** ctx = reinterpret_cast<i::Object**>(this); | |
| 5586 i::Handle<i::Context> context = | |
| 5587 i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); | |
| 5588 return !context->allow_code_gen_from_strings()->IsFalse(); | 5552 return !context->allow_code_gen_from_strings()->IsFalse(); |
| 5589 } | 5553 } |
| 5590 | 5554 |
| 5591 | 5555 |
| 5592 void Context::SetErrorMessageForCodeGenerationFromStrings( | 5556 void Context::SetErrorMessageForCodeGenerationFromStrings( |
| 5593 Handle<String> error) { | 5557 Handle<String> error) { |
| 5594 i::Isolate* isolate = i::Isolate::Current(); | 5558 i::Handle<i::Context> context = Utils::OpenHandle(this); |
| 5595 if (IsDeadCheck(isolate, | |
| 5596 "v8::Context::SetErrorMessageForCodeGenerationFromStrings()")) { | |
| 5597 return; | |
| 5598 } | |
| 5599 ENTER_V8(isolate); | |
| 5600 i::Object** ctx = reinterpret_cast<i::Object**>(this); | |
| 5601 i::Handle<i::Context> context = | |
| 5602 i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); | |
| 5603 i::Handle<i::String> error_handle = Utils::OpenHandle(*error); | 5559 i::Handle<i::String> error_handle = Utils::OpenHandle(*error); |
| 5604 context->set_error_message_for_code_gen_from_strings(*error_handle); | 5560 context->set_error_message_for_code_gen_from_strings(*error_handle); |
| 5605 } | 5561 } |
| 5606 | 5562 |
| 5607 | 5563 |
| 5608 Local<v8::Object> ObjectTemplate::NewInstance() { | 5564 Local<v8::Object> ObjectTemplate::NewInstance() { |
| 5609 i::Isolate* isolate = i::Isolate::Current(); | 5565 i::Isolate* isolate = i::Isolate::Current(); |
| 5610 ON_BAILOUT(isolate, "v8::ObjectTemplate::NewInstance()", | 5566 ON_BAILOUT(isolate, "v8::ObjectTemplate::NewInstance()", |
| 5611 return Local<v8::Object>()); | 5567 return Local<v8::Object>()); |
| 5612 LOG_API(isolate, "ObjectTemplate::NewInstance"); | 5568 LOG_API(isolate, "ObjectTemplate::NewInstance"); |
| (...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6640 } | 6596 } |
| 6641 | 6597 |
| 6642 | 6598 |
| 6643 CpuProfiler* Isolate::GetCpuProfiler() { | 6599 CpuProfiler* Isolate::GetCpuProfiler() { |
| 6644 i::CpuProfiler* cpu_profiler = | 6600 i::CpuProfiler* cpu_profiler = |
| 6645 reinterpret_cast<i::Isolate*>(this)->cpu_profiler(); | 6601 reinterpret_cast<i::Isolate*>(this)->cpu_profiler(); |
| 6646 return reinterpret_cast<CpuProfiler*>(cpu_profiler); | 6602 return reinterpret_cast<CpuProfiler*>(cpu_profiler); |
| 6647 } | 6603 } |
| 6648 | 6604 |
| 6649 | 6605 |
| 6606 bool Isolate::InContext() { | |
| 6607 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | |
| 6608 return isolate->context() != NULL; | |
| 6609 } | |
| 6610 | |
| 6611 | |
| 6650 v8::Local<v8::Context> Isolate::GetCurrentContext() { | 6612 v8::Local<v8::Context> Isolate::GetCurrentContext() { |
| 6651 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); | 6613 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); |
| 6652 i::Context* context = internal_isolate->context(); | 6614 i::Context* context = isolate->context(); |
| 6653 if (context == NULL) return Local<Context>(); | 6615 if (context == NULL) return Local<Context>(); |
| 6654 i::Context* native_context = context->global_object()->native_context(); | 6616 i::Context* native_context = context->global_object()->native_context(); |
| 6655 if (native_context == NULL) return Local<Context>(); | 6617 if (native_context == NULL) return Local<Context>(); |
| 6656 return Utils::ToLocal(i::Handle<i::Context>(native_context)); | 6618 return Utils::ToLocal(i::Handle<i::Context>(native_context)); |
| 6657 } | 6619 } |
| 6658 | 6620 |
| 6659 | 6621 |
| 6622 v8::Local<v8::Context> Isolate::GetCallingContext() { | |
| 6623 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | |
| 6624 i::Handle<i::Object> calling = isolate->GetCallingNativeContext(); | |
| 6625 if (calling.is_null()) return Local<Context>(); | |
| 6626 return Utils::ToLocal(i::Handle<i::Context>::cast(calling)); | |
| 6627 } | |
| 6628 | |
| 6629 | |
| 6630 v8::Local<v8::Context> Isolate::GetEnteredContext() { | |
| 6631 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | |
| 6632 i::Handle<i::Object> last = | |
| 6633 isolate->handle_scope_implementer()->LastEnteredContext(); | |
| 6634 if (last.is_null()) return Local<Context>(); | |
| 6635 return Utils::ToLocal(i::Handle<i::Context>::cast(last)); | |
| 6636 } | |
| 6637 | |
| 6638 | |
| 6660 void Isolate::SetObjectGroupId(const Persistent<Value>& object, | 6639 void Isolate::SetObjectGroupId(const Persistent<Value>& object, |
| 6661 UniqueId id) { | 6640 UniqueId id) { |
| 6662 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); | 6641 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); |
| 6663 internal_isolate->global_handles()->SetObjectGroupId( | 6642 internal_isolate->global_handles()->SetObjectGroupId( |
| 6664 Utils::OpenPersistent(object).location(), | 6643 Utils::OpenPersistent(object).location(), |
| 6665 id); | 6644 id); |
| 6666 } | 6645 } |
| 6667 | 6646 |
| 6668 | 6647 |
| 6669 void Isolate::SetReferenceFromGroup(UniqueId id, | 6648 void Isolate::SetReferenceFromGroup(UniqueId id, |
| (...skipping 1222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7892 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7871 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7893 Address callback_address = | 7872 Address callback_address = |
| 7894 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7873 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7895 VMState<EXTERNAL> state(isolate); | 7874 VMState<EXTERNAL> state(isolate); |
| 7896 ExternalCallbackScope call_scope(isolate, callback_address); | 7875 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7897 callback(info); | 7876 callback(info); |
| 7898 } | 7877 } |
| 7899 | 7878 |
| 7900 | 7879 |
| 7901 } } // namespace v8::internal | 7880 } } // namespace v8::internal |
| OLD | NEW |