| 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 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 ASSERT(!isolate->IsInitialized()); | 617 ASSERT(!isolate->IsInitialized()); |
| 618 bool result = isolate->heap()->ConfigureHeap(young_space_size / 2, | 618 bool result = isolate->heap()->ConfigureHeap(young_space_size / 2, |
| 619 old_gen_size, | 619 old_gen_size, |
| 620 max_executable_size); | 620 max_executable_size); |
| 621 if (!result) return false; | 621 if (!result) return false; |
| 622 } | 622 } |
| 623 if (constraints->stack_limit() != NULL) { | 623 if (constraints->stack_limit() != NULL) { |
| 624 uintptr_t limit = reinterpret_cast<uintptr_t>(constraints->stack_limit()); | 624 uintptr_t limit = reinterpret_cast<uintptr_t>(constraints->stack_limit()); |
| 625 isolate->stack_guard()->SetStackLimit(limit); | 625 isolate->stack_guard()->SetStackLimit(limit); |
| 626 } | 626 } |
| 627 if (constraints->is_memory_constrained().has_value && | 627 if (constraints->is_memory_constrained().has_value) { |
| 628 !i::FLAG_force_memory_constrained.has_value) { | |
| 629 isolate->set_is_memory_constrained( | 628 isolate->set_is_memory_constrained( |
| 630 constraints->is_memory_constrained().value); | 629 constraints->is_memory_constrained().value); |
| 631 } | 630 } |
| 632 return true; | 631 return true; |
| 633 } | 632 } |
| 634 | 633 |
| 635 | 634 |
| 636 i::Object** V8::GlobalizeReference(i::Isolate* isolate, i::Object** obj) { | 635 i::Object** V8::GlobalizeReference(i::Isolate* isolate, i::Object** obj) { |
| 637 if (IsDeadCheck(isolate, "V8::Persistent::New")) return NULL; | 636 if (IsDeadCheck(isolate, "V8::Persistent::New")) return NULL; |
| 638 LOG_API(isolate, "Persistent::New"); | 637 LOG_API(isolate, "Persistent::New"); |
| (...skipping 1411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2050 | 2049 |
| 2051 | 2050 |
| 2052 v8::Local<Value> v8::TryCatch::StackTrace() const { | 2051 v8::Local<Value> v8::TryCatch::StackTrace() const { |
| 2053 ASSERT(isolate_ == i::Isolate::Current()); | 2052 ASSERT(isolate_ == i::Isolate::Current()); |
| 2054 if (HasCaught()) { | 2053 if (HasCaught()) { |
| 2055 i::Object* raw_obj = reinterpret_cast<i::Object*>(exception_); | 2054 i::Object* raw_obj = reinterpret_cast<i::Object*>(exception_); |
| 2056 if (!raw_obj->IsJSObject()) return v8::Local<Value>(); | 2055 if (!raw_obj->IsJSObject()) return v8::Local<Value>(); |
| 2057 i::HandleScope scope(isolate_); | 2056 i::HandleScope scope(isolate_); |
| 2058 i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); | 2057 i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); |
| 2059 i::Handle<i::String> name = isolate_->factory()->stack_string(); | 2058 i::Handle<i::String> name = isolate_->factory()->stack_string(); |
| 2060 if (!i::JSReceiver::HasProperty(obj, name)) return v8::Local<Value>(); | 2059 if (!obj->HasProperty(*name)) return v8::Local<Value>(); |
| 2061 i::Handle<i::Object> value = i::GetProperty(isolate_, obj, name); | 2060 i::Handle<i::Object> value = i::GetProperty(isolate_, obj, name); |
| 2062 if (value.is_null()) return v8::Local<Value>(); | 2061 if (value.is_null()) return v8::Local<Value>(); |
| 2063 return v8::Utils::ToLocal(scope.CloseAndEscape(value)); | 2062 return v8::Utils::ToLocal(scope.CloseAndEscape(value)); |
| 2064 } else { | 2063 } else { |
| 2065 return v8::Local<Value>(); | 2064 return v8::Local<Value>(); |
| 2066 } | 2065 } |
| 2067 } | 2066 } |
| 2068 | 2067 |
| 2069 | 2068 |
| 2070 v8::Local<v8::Message> v8::TryCatch::Message() const { | 2069 v8::Local<v8::Message> v8::TryCatch::Message() const { |
| (...skipping 1548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3619 HandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 3618 HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
| 3620 i::Handle<i::JSObject> self = Utils::OpenHandle(this); | 3619 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 3621 return i::JSReceiver::DeleteElement(self, index)->IsTrue(); | 3620 return i::JSReceiver::DeleteElement(self, index)->IsTrue(); |
| 3622 } | 3621 } |
| 3623 | 3622 |
| 3624 | 3623 |
| 3625 bool v8::Object::Has(uint32_t index) { | 3624 bool v8::Object::Has(uint32_t index) { |
| 3626 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3625 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 3627 ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false); | 3626 ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false); |
| 3628 i::Handle<i::JSObject> self = Utils::OpenHandle(this); | 3627 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 3629 return i::JSReceiver::HasElement(self, index); | 3628 return self->HasElement(index); |
| 3630 } | 3629 } |
| 3631 | 3630 |
| 3632 | 3631 |
| 3633 template<typename Setter, typename Getter, typename Data> | 3632 template<typename Setter, typename Getter, typename Data> |
| 3634 static inline bool ObjectSetAccessor(Object* obj, | 3633 static inline bool ObjectSetAccessor(Object* obj, |
| 3635 Handle<String> name, | 3634 Handle<String> name, |
| 3636 Setter getter, | 3635 Setter getter, |
| 3637 Getter setter, | 3636 Getter setter, |
| 3638 Data data, | 3637 Data data, |
| 3639 AccessControl settings, | 3638 AccessControl settings, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3673 void* null = NULL; | 3672 void* null = NULL; |
| 3674 return ObjectSetAccessor( | 3673 return ObjectSetAccessor( |
| 3675 this, name, descriptor, null, null, settings, attributes); | 3674 this, name, descriptor, null, null, settings, attributes); |
| 3676 } | 3675 } |
| 3677 | 3676 |
| 3678 | 3677 |
| 3679 bool v8::Object::HasOwnProperty(Handle<String> key) { | 3678 bool v8::Object::HasOwnProperty(Handle<String> key) { |
| 3680 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3679 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 3681 ON_BAILOUT(isolate, "v8::Object::HasOwnProperty()", | 3680 ON_BAILOUT(isolate, "v8::Object::HasOwnProperty()", |
| 3682 return false); | 3681 return false); |
| 3683 return i::JSReceiver::HasLocalProperty( | 3682 return Utils::OpenHandle(this)->HasLocalProperty( |
| 3684 Utils::OpenHandle(this), Utils::OpenHandle(*key)); | 3683 *Utils::OpenHandle(*key)); |
| 3685 } | 3684 } |
| 3686 | 3685 |
| 3687 | 3686 |
| 3688 bool v8::Object::HasRealNamedProperty(Handle<String> key) { | 3687 bool v8::Object::HasRealNamedProperty(Handle<String> key) { |
| 3689 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3688 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 3690 ON_BAILOUT(isolate, "v8::Object::HasRealNamedProperty()", | 3689 ON_BAILOUT(isolate, "v8::Object::HasRealNamedProperty()", |
| 3691 return false); | 3690 return false); |
| 3692 return Utils::OpenHandle(this)->HasRealNamedProperty( | 3691 return Utils::OpenHandle(this)->HasRealNamedProperty( |
| 3693 isolate, | 3692 isolate, |
| 3694 *Utils::OpenHandle(*key)); | 3693 *Utils::OpenHandle(*key)); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3807 return Utils::OpenHandle(this)->IsDirty(); | 3806 return Utils::OpenHandle(this)->IsDirty(); |
| 3808 } | 3807 } |
| 3809 | 3808 |
| 3810 | 3809 |
| 3811 Local<v8::Object> v8::Object::Clone() { | 3810 Local<v8::Object> v8::Object::Clone() { |
| 3812 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3811 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| 3813 ON_BAILOUT(isolate, "v8::Object::Clone()", return Local<Object>()); | 3812 ON_BAILOUT(isolate, "v8::Object::Clone()", return Local<Object>()); |
| 3814 ENTER_V8(isolate); | 3813 ENTER_V8(isolate); |
| 3815 i::Handle<i::JSObject> self = Utils::OpenHandle(this); | 3814 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 3816 EXCEPTION_PREAMBLE(isolate); | 3815 EXCEPTION_PREAMBLE(isolate); |
| 3817 i::Handle<i::JSObject> result = i::JSObject::Copy(self); | 3816 i::Handle<i::JSObject> result = i::Copy(self); |
| 3818 has_pending_exception = result.is_null(); | 3817 has_pending_exception = result.is_null(); |
| 3819 EXCEPTION_BAILOUT_CHECK(isolate, Local<Object>()); | 3818 EXCEPTION_BAILOUT_CHECK(isolate, Local<Object>()); |
| 3820 return Utils::ToLocal(result); | 3819 return Utils::ToLocal(result); |
| 3821 } | 3820 } |
| 3822 | 3821 |
| 3823 | 3822 |
| 3824 static i::Context* GetCreationContext(i::JSObject* object) { | 3823 static i::Context* GetCreationContext(i::JSObject* object) { |
| 3825 i::Object* constructor = object->map()->constructor(); | 3824 i::Object* constructor = object->map()->constructor(); |
| 3826 i::JSFunction* function; | 3825 i::JSFunction* function; |
| 3827 if (!constructor->IsJSFunction()) { | 3826 if (!constructor->IsJSFunction()) { |
| (...skipping 2378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6206 return Local<Object>(); | 6205 return Local<Object>(); |
| 6207 } | 6206 } |
| 6208 i::FixedArray* elms = i::FixedArray::cast(self->elements()); | 6207 i::FixedArray* elms = i::FixedArray::cast(self->elements()); |
| 6209 i::Object* paragon = elms->get(index); | 6208 i::Object* paragon = elms->get(index); |
| 6210 if (!paragon->IsJSObject()) { | 6209 if (!paragon->IsJSObject()) { |
| 6211 return Local<Object>(); | 6210 return Local<Object>(); |
| 6212 } | 6211 } |
| 6213 i::Handle<i::JSObject> paragon_handle(i::JSObject::cast(paragon)); | 6212 i::Handle<i::JSObject> paragon_handle(i::JSObject::cast(paragon)); |
| 6214 EXCEPTION_PREAMBLE(isolate); | 6213 EXCEPTION_PREAMBLE(isolate); |
| 6215 ENTER_V8(isolate); | 6214 ENTER_V8(isolate); |
| 6216 i::Handle<i::JSObject> result = i::JSObject::Copy(paragon_handle); | 6215 i::Handle<i::JSObject> result = i::Copy(paragon_handle); |
| 6217 has_pending_exception = result.is_null(); | 6216 has_pending_exception = result.is_null(); |
| 6218 EXCEPTION_BAILOUT_CHECK(isolate, Local<Object>()); | 6217 EXCEPTION_BAILOUT_CHECK(isolate, Local<Object>()); |
| 6219 return Utils::ToLocal(result); | 6218 return Utils::ToLocal(result); |
| 6220 } | 6219 } |
| 6221 | 6220 |
| 6222 | 6221 |
| 6223 bool v8::ArrayBuffer::IsExternal() const { | 6222 bool v8::ArrayBuffer::IsExternal() const { |
| 6224 return Utils::OpenHandle(this)->is_external(); | 6223 return Utils::OpenHandle(this)->is_external(); |
| 6225 } | 6224 } |
| 6226 | 6225 |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6679 void Isolate::SetReference(const Persistent<Object>& parent, | 6678 void Isolate::SetReference(const Persistent<Object>& parent, |
| 6680 const Persistent<Value>& child) { | 6679 const Persistent<Value>& child) { |
| 6681 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); | 6680 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); |
| 6682 i::Object** parent_location = Utils::OpenPersistent(parent).location(); | 6681 i::Object** parent_location = Utils::OpenPersistent(parent).location(); |
| 6683 internal_isolate->global_handles()->SetReference( | 6682 internal_isolate->global_handles()->SetReference( |
| 6684 reinterpret_cast<i::HeapObject**>(parent_location), | 6683 reinterpret_cast<i::HeapObject**>(parent_location), |
| 6685 Utils::OpenPersistent(child).location()); | 6684 Utils::OpenPersistent(child).location()); |
| 6686 } | 6685 } |
| 6687 | 6686 |
| 6688 | 6687 |
| 6689 void Isolate::AddGCPrologueCallback(GCPrologueCallback callback, | 6688 void V8::SetGlobalGCPrologueCallback(GCCallback callback) { |
| 6690 GCType gc_type) { | 6689 i::Isolate* isolate = i::Isolate::Current(); |
| 6691 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | 6690 if (IsDeadCheck(isolate, "v8::V8::SetGlobalGCPrologueCallback()")) return; |
| 6692 isolate->heap()->AddGCPrologueCallback(callback, gc_type); | 6691 isolate->heap()->SetGlobalGCPrologueCallback(callback); |
| 6693 } | 6692 } |
| 6694 | 6693 |
| 6695 | 6694 |
| 6696 void Isolate::RemoveGCPrologueCallback(GCPrologueCallback callback) { | 6695 void V8::SetGlobalGCEpilogueCallback(GCCallback callback) { |
| 6697 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | 6696 i::Isolate* isolate = i::Isolate::Current(); |
| 6698 isolate->heap()->RemoveGCPrologueCallback(callback); | 6697 if (IsDeadCheck(isolate, "v8::V8::SetGlobalGCEpilogueCallback()")) return; |
| 6699 } | 6698 isolate->heap()->SetGlobalGCEpilogueCallback(callback); |
| 6700 | |
| 6701 | |
| 6702 void Isolate::AddGCEpilogueCallback(GCEpilogueCallback callback, | |
| 6703 GCType gc_type) { | |
| 6704 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | |
| 6705 isolate->heap()->AddGCEpilogueCallback(callback, gc_type); | |
| 6706 } | |
| 6707 | |
| 6708 | |
| 6709 void Isolate::RemoveGCEpilogueCallback(GCEpilogueCallback callback) { | |
| 6710 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | |
| 6711 isolate->heap()->RemoveGCEpilogueCallback(callback); | |
| 6712 } | 6699 } |
| 6713 | 6700 |
| 6714 | 6701 |
| 6715 void V8::AddGCPrologueCallback(GCPrologueCallback callback, GCType gc_type) { | 6702 void V8::AddGCPrologueCallback(GCPrologueCallback callback, GCType gc_type) { |
| 6716 i::Isolate* isolate = i::Isolate::Current(); | 6703 i::Isolate* isolate = i::Isolate::Current(); |
| 6717 if (IsDeadCheck(isolate, "v8::V8::AddGCPrologueCallback()")) return; | 6704 if (IsDeadCheck(isolate, "v8::V8::AddGCPrologueCallback()")) return; |
| 6718 isolate->heap()->AddGCPrologueCallback( | 6705 isolate->heap()->AddGCPrologueCallback(callback, gc_type); |
| 6719 reinterpret_cast<v8::Isolate::GCPrologueCallback>(callback), | |
| 6720 gc_type, | |
| 6721 false); | |
| 6722 } | 6706 } |
| 6723 | 6707 |
| 6724 | 6708 |
| 6725 void V8::RemoveGCPrologueCallback(GCPrologueCallback callback) { | 6709 void V8::RemoveGCPrologueCallback(GCPrologueCallback callback) { |
| 6726 i::Isolate* isolate = i::Isolate::Current(); | 6710 i::Isolate* isolate = i::Isolate::Current(); |
| 6727 if (IsDeadCheck(isolate, "v8::V8::RemoveGCPrologueCallback()")) return; | 6711 if (IsDeadCheck(isolate, "v8::V8::RemoveGCPrologueCallback()")) return; |
| 6728 isolate->heap()->RemoveGCPrologueCallback( | 6712 isolate->heap()->RemoveGCPrologueCallback(callback); |
| 6729 reinterpret_cast<v8::Isolate::GCPrologueCallback>(callback)); | |
| 6730 } | 6713 } |
| 6731 | 6714 |
| 6732 | 6715 |
| 6733 void V8::AddGCEpilogueCallback(GCEpilogueCallback callback, GCType gc_type) { | 6716 void V8::AddGCEpilogueCallback(GCEpilogueCallback callback, GCType gc_type) { |
| 6734 i::Isolate* isolate = i::Isolate::Current(); | 6717 i::Isolate* isolate = i::Isolate::Current(); |
| 6735 if (IsDeadCheck(isolate, "v8::V8::AddGCEpilogueCallback()")) return; | 6718 if (IsDeadCheck(isolate, "v8::V8::AddGCEpilogueCallback()")) return; |
| 6736 isolate->heap()->AddGCEpilogueCallback( | 6719 isolate->heap()->AddGCEpilogueCallback(callback, gc_type); |
| 6737 reinterpret_cast<v8::Isolate::GCEpilogueCallback>(callback), | |
| 6738 gc_type, | |
| 6739 false); | |
| 6740 } | 6720 } |
| 6741 | 6721 |
| 6742 | 6722 |
| 6743 void V8::RemoveGCEpilogueCallback(GCEpilogueCallback callback) { | 6723 void V8::RemoveGCEpilogueCallback(GCEpilogueCallback callback) { |
| 6744 i::Isolate* isolate = i::Isolate::Current(); | 6724 i::Isolate* isolate = i::Isolate::Current(); |
| 6745 if (IsDeadCheck(isolate, "v8::V8::RemoveGCEpilogueCallback()")) return; | 6725 if (IsDeadCheck(isolate, "v8::V8::RemoveGCEpilogueCallback()")) return; |
| 6746 isolate->heap()->RemoveGCEpilogueCallback( | 6726 isolate->heap()->RemoveGCEpilogueCallback(callback); |
| 6747 reinterpret_cast<v8::Isolate::GCEpilogueCallback>(callback)); | |
| 6748 } | 6727 } |
| 6749 | 6728 |
| 6750 | 6729 |
| 6751 void V8::AddMemoryAllocationCallback(MemoryAllocationCallback callback, | 6730 void V8::AddMemoryAllocationCallback(MemoryAllocationCallback callback, |
| 6752 ObjectSpace space, | 6731 ObjectSpace space, |
| 6753 AllocationAction action) { | 6732 AllocationAction action) { |
| 6754 i::Isolate* isolate = i::Isolate::Current(); | 6733 i::Isolate* isolate = i::Isolate::Current(); |
| 6755 if (IsDeadCheck(isolate, "v8::V8::AddMemoryAllocationCallback()")) return; | 6734 if (IsDeadCheck(isolate, "v8::V8::AddMemoryAllocationCallback()")) return; |
| 6756 isolate->memory_allocator()->AddMemoryAllocationCallback( | 6735 isolate->memory_allocator()->AddMemoryAllocationCallback( |
| 6757 callback, space, action); | 6736 callback, space, action); |
| (...skipping 1127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7885 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7864 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7886 Address callback_address = | 7865 Address callback_address = |
| 7887 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7866 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7888 VMState<EXTERNAL> state(isolate); | 7867 VMState<EXTERNAL> state(isolate); |
| 7889 ExternalCallbackScope call_scope(isolate, callback_address); | 7868 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7890 callback(info); | 7869 callback(info); |
| 7891 } | 7870 } |
| 7892 | 7871 |
| 7893 | 7872 |
| 7894 } } // namespace v8::internal | 7873 } } // namespace v8::internal |
| OLD | NEW |