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 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
707 i::Handle<i::Context> env = Utils::OpenHandle(this); | 707 i::Handle<i::Context> env = Utils::OpenHandle(this); |
708 i::Isolate* isolate = env->GetIsolate(); | 708 i::Isolate* isolate = env->GetIsolate(); |
709 ENTER_V8(isolate); | 709 ENTER_V8(isolate); |
710 isolate->handle_scope_implementer()->EnterContext(env); | 710 isolate->handle_scope_implementer()->EnterContext(env); |
711 isolate->handle_scope_implementer()->SaveContext(isolate->context()); | 711 isolate->handle_scope_implementer()->SaveContext(isolate->context()); |
712 isolate->set_context(*env); | 712 isolate->set_context(*env); |
713 } | 713 } |
714 | 714 |
715 | 715 |
716 void Context::Exit() { | 716 void Context::Exit() { |
717 // TODO(dcarney): fix this once chrome is fixed. | 717 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
718 i::Isolate* isolate = i::Isolate::Current(); | |
719 i::Handle<i::Context> context = i::Handle<i::Context>::null(); | 718 i::Handle<i::Context> context = i::Handle<i::Context>::null(); |
720 ENTER_V8(isolate); | 719 ENTER_V8(isolate); |
721 if (!ApiCheck(isolate->handle_scope_implementer()->LeaveContext(context), | 720 if (!ApiCheck(isolate->handle_scope_implementer()->LeaveContext(context), |
722 "v8::Context::Exit()", | 721 "v8::Context::Exit()", |
723 "Cannot exit non-entered context")) { | 722 "Cannot exit non-entered context")) { |
724 return; | 723 return; |
725 } | 724 } |
726 // Content of 'last_context' could be NULL. | 725 // Content of 'last_context' could be NULL. |
727 i::Context* last_context = | 726 i::Context* last_context = |
728 isolate->handle_scope_implementer()->RestoreContext(); | 727 isolate->handle_scope_implementer()->RestoreContext(); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
802 | 801 |
803 | 802 |
804 // --- N e a n d e r --- | 803 // --- N e a n d e r --- |
805 | 804 |
806 | 805 |
807 // A constructor cannot easily return an error value, therefore it is necessary | 806 // A constructor cannot easily return an error value, therefore it is necessary |
808 // to check for a dead VM with ON_BAILOUT before constructing any Neander | 807 // to check for a dead VM with ON_BAILOUT before constructing any Neander |
809 // objects. To remind you about this there is no HandleScope in the | 808 // objects. To remind you about this there is no HandleScope in the |
810 // NeanderObject constructor. When you add one to the site calling the | 809 // NeanderObject constructor. When you add one to the site calling the |
811 // constructor you should check that you ensured the VM was not dead first. | 810 // constructor you should check that you ensured the VM was not dead first. |
812 NeanderObject::NeanderObject(int size) { | 811 NeanderObject::NeanderObject(v8::internal::Isolate* isolate, int size) { |
813 i::Isolate* isolate = i::Isolate::Current(); | |
814 EnsureInitializedForIsolate(isolate, "v8::Nowhere"); | 812 EnsureInitializedForIsolate(isolate, "v8::Nowhere"); |
815 ENTER_V8(isolate); | 813 ENTER_V8(isolate); |
816 value_ = isolate->factory()->NewNeanderObject(); | 814 value_ = isolate->factory()->NewNeanderObject(); |
817 i::Handle<i::FixedArray> elements = isolate->factory()->NewFixedArray(size); | 815 i::Handle<i::FixedArray> elements = isolate->factory()->NewFixedArray(size); |
818 value_->set_elements(*elements); | 816 value_->set_elements(*elements); |
819 } | 817 } |
820 | 818 |
821 | 819 |
822 int NeanderObject::size() { | 820 int NeanderObject::size() { |
823 return i::FixedArray::cast(value_->elements())->length(); | 821 return i::FixedArray::cast(value_->elements())->length(); |
824 } | 822 } |
825 | 823 |
826 | 824 |
827 NeanderArray::NeanderArray() : obj_(2) { | 825 NeanderArray::NeanderArray(v8::internal::Isolate* isolate) : obj_(isolate, 2) { |
828 obj_.set(0, i::Smi::FromInt(0)); | 826 obj_.set(0, i::Smi::FromInt(0)); |
829 } | 827 } |
830 | 828 |
831 | 829 |
832 int NeanderArray::length() { | 830 int NeanderArray::length() { |
833 return i::Smi::cast(obj_.get(0))->value(); | 831 return i::Smi::cast(obj_.get(0))->value(); |
834 } | 832 } |
835 | 833 |
836 | 834 |
837 i::Object* NeanderArray::get(int offset) { | 835 i::Object* NeanderArray::get(int offset) { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
874 that->set_tag(i::Smi::FromInt(type)); | 872 that->set_tag(i::Smi::FromInt(type)); |
875 } | 873 } |
876 | 874 |
877 | 875 |
878 static void TemplateSet(i::Isolate* isolate, | 876 static void TemplateSet(i::Isolate* isolate, |
879 v8::Template* templ, | 877 v8::Template* templ, |
880 int length, | 878 int length, |
881 v8::Handle<v8::Data>* data) { | 879 v8::Handle<v8::Data>* data) { |
882 i::Handle<i::Object> list(Utils::OpenHandle(templ)->property_list(), isolate); | 880 i::Handle<i::Object> list(Utils::OpenHandle(templ)->property_list(), isolate); |
883 if (list->IsUndefined()) { | 881 if (list->IsUndefined()) { |
884 list = NeanderArray().value(); | 882 list = NeanderArray(isolate).value(); |
885 Utils::OpenHandle(templ)->set_property_list(*list); | 883 Utils::OpenHandle(templ)->set_property_list(*list); |
886 } | 884 } |
887 NeanderArray array(list); | 885 NeanderArray array(list); |
888 array.add(isolate->factory()->NewNumberFromInt(length)); | 886 array.add(isolate->factory()->NewNumberFromInt(length)); |
889 for (int i = 0; i < length; i++) { | 887 for (int i = 0; i < length; i++) { |
890 i::Handle<i::Object> value = data[i].IsEmpty() ? | 888 i::Handle<i::Object> value = data[i].IsEmpty() ? |
891 i::Handle<i::Object>(isolate->factory()->undefined_value()) : | 889 i::Handle<i::Object>(isolate->factory()->undefined_value()) : |
892 Utils::OpenHandle(*data[i]); | 890 Utils::OpenHandle(*data[i]); |
893 array.add(value); | 891 array.add(value); |
894 } | 892 } |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1375 i::Handle<i::FunctionTemplateInfo> constructor = Utils::OpenHandle(*templ); | 1373 i::Handle<i::FunctionTemplateInfo> constructor = Utils::OpenHandle(*templ); |
1376 constructor->set_instance_template(*Utils::OpenHandle(object_template)); | 1374 constructor->set_instance_template(*Utils::OpenHandle(object_template)); |
1377 Utils::OpenHandle(object_template)->set_constructor(*constructor); | 1375 Utils::OpenHandle(object_template)->set_constructor(*constructor); |
1378 return constructor; | 1376 return constructor; |
1379 } | 1377 } |
1380 | 1378 |
1381 | 1379 |
1382 static inline void AddPropertyToTemplate( | 1380 static inline void AddPropertyToTemplate( |
1383 i::Handle<i::TemplateInfo> info, | 1381 i::Handle<i::TemplateInfo> info, |
1384 i::Handle<i::AccessorInfo> obj) { | 1382 i::Handle<i::AccessorInfo> obj) { |
1385 i::Handle<i::Object> list(info->property_accessors(), info->GetIsolate()); | 1383 i::Isolate* isolate = info->GetIsolate(); |
| 1384 i::Handle<i::Object> list(info->property_accessors(), isolate); |
1386 if (list->IsUndefined()) { | 1385 if (list->IsUndefined()) { |
1387 list = NeanderArray().value(); | 1386 list = NeanderArray(isolate).value(); |
1388 info->set_property_accessors(*list); | 1387 info->set_property_accessors(*list); |
1389 } | 1388 } |
1390 NeanderArray array(list); | 1389 NeanderArray array(list); |
1391 array.add(obj); | 1390 array.add(obj); |
1392 } | 1391 } |
1393 | 1392 |
1394 | 1393 |
1395 static inline i::Handle<i::TemplateInfo> GetTemplateInfo( | 1394 static inline i::Handle<i::TemplateInfo> GetTemplateInfo( |
1396 i::Isolate* isolate, | 1395 i::Isolate* isolate, |
1397 Template* template_obj) { | 1396 Template* template_obj) { |
(...skipping 4771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6169 } | 6168 } |
6170 | 6169 |
6171 | 6170 |
6172 bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) { | 6171 bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) { |
6173 i::Isolate* isolate = i::Isolate::Current(); | 6172 i::Isolate* isolate = i::Isolate::Current(); |
6174 EnsureInitializedForIsolate(isolate, "v8::V8::AddMessageListener()"); | 6173 EnsureInitializedForIsolate(isolate, "v8::V8::AddMessageListener()"); |
6175 ON_BAILOUT(isolate, "v8::V8::AddMessageListener()", return false); | 6174 ON_BAILOUT(isolate, "v8::V8::AddMessageListener()", return false); |
6176 ENTER_V8(isolate); | 6175 ENTER_V8(isolate); |
6177 i::HandleScope scope(isolate); | 6176 i::HandleScope scope(isolate); |
6178 NeanderArray listeners(isolate->factory()->message_listeners()); | 6177 NeanderArray listeners(isolate->factory()->message_listeners()); |
6179 NeanderObject obj(2); | 6178 NeanderObject obj(isolate, 2); |
6180 obj.set(0, *isolate->factory()->NewForeign(FUNCTION_ADDR(that))); | 6179 obj.set(0, *isolate->factory()->NewForeign(FUNCTION_ADDR(that))); |
6181 obj.set(1, data.IsEmpty() ? isolate->heap()->undefined_value() | 6180 obj.set(1, data.IsEmpty() ? isolate->heap()->undefined_value() |
6182 : *Utils::OpenHandle(*data)); | 6181 : *Utils::OpenHandle(*data)); |
6183 listeners.add(obj.value()); | 6182 listeners.add(obj.value()); |
6184 return true; | 6183 return true; |
6185 } | 6184 } |
6186 | 6185 |
6187 | 6186 |
6188 void V8::RemoveMessageListeners(MessageCallback that) { | 6187 void V8::RemoveMessageListeners(MessageCallback that) { |
6189 i::Isolate* isolate = i::Isolate::Current(); | 6188 i::Isolate* isolate = i::Isolate::Current(); |
(...skipping 1272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7462 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7461 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
7463 Address callback_address = | 7462 Address callback_address = |
7464 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7463 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
7465 VMState<EXTERNAL> state(isolate); | 7464 VMState<EXTERNAL> state(isolate); |
7466 ExternalCallbackScope call_scope(isolate, callback_address); | 7465 ExternalCallbackScope call_scope(isolate, callback_address); |
7467 callback(info); | 7466 callback(info); |
7468 } | 7467 } |
7469 | 7468 |
7470 | 7469 |
7471 } } // namespace v8::internal | 7470 } } // namespace v8::internal |
OLD | NEW |