| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/api.h" | 5 #include "src/api.h" |
| 6 | 6 |
| 7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
| 8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
| 9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
| 10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 static inline bool IsExecutionTerminatingCheck(i::Isolate* isolate) { | 195 static inline bool IsExecutionTerminatingCheck(i::Isolate* isolate) { |
| 196 if (!isolate->IsInitialized()) return false; | 196 if (!isolate->IsInitialized()) return false; |
| 197 if (isolate->has_scheduled_exception()) { | 197 if (isolate->has_scheduled_exception()) { |
| 198 return isolate->scheduled_exception() == | 198 return isolate->scheduled_exception() == |
| 199 isolate->heap()->termination_exception(); | 199 isolate->heap()->termination_exception(); |
| 200 } | 200 } |
| 201 return false; | 201 return false; |
| 202 } | 202 } |
| 203 | 203 |
| 204 | 204 |
| 205 // --- S t a t i c s --- | |
| 206 | |
| 207 | |
| 208 static bool InitializeHelper(i::Isolate* isolate) { | |
| 209 // If the isolate has a function entry hook, it needs to re-build all its | |
| 210 // code stubs with entry hooks embedded, so let's deserialize a snapshot. | |
| 211 if (isolate == NULL || isolate->function_entry_hook() == NULL) { | |
| 212 if (i::Snapshot::Initialize()) | |
| 213 return true; | |
| 214 } | |
| 215 return i::V8::Initialize(NULL); | |
| 216 } | |
| 217 | |
| 218 | |
| 219 static inline bool EnsureInitializedForIsolate(i::Isolate* isolate, | |
| 220 const char* location) { | |
| 221 return (isolate != NULL && isolate->IsInitialized()) || | |
| 222 Utils::ApiCheck(InitializeHelper(isolate), | |
| 223 location, | |
| 224 "Error initializing V8"); | |
| 225 } | |
| 226 | |
| 227 | |
| 228 StartupDataDecompressor::StartupDataDecompressor() | 205 StartupDataDecompressor::StartupDataDecompressor() |
| 229 : raw_data(i::NewArray<char*>(V8::GetCompressedStartupDataCount())) { | 206 : raw_data(i::NewArray<char*>(V8::GetCompressedStartupDataCount())) { |
| 230 for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) { | 207 for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) { |
| 231 raw_data[i] = NULL; | 208 raw_data[i] = NULL; |
| 232 } | 209 } |
| 233 } | 210 } |
| 234 | 211 |
| 235 | 212 |
| 236 StartupDataDecompressor::~StartupDataDecompressor() { | 213 StartupDataDecompressor::~StartupDataDecompressor() { |
| 237 for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) { | 214 for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) { |
| (...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 | 716 |
| 740 // --- N e a n d e r --- | 717 // --- N e a n d e r --- |
| 741 | 718 |
| 742 | 719 |
| 743 // A constructor cannot easily return an error value, therefore it is necessary | 720 // A constructor cannot easily return an error value, therefore it is necessary |
| 744 // to check for a dead VM with ON_BAILOUT before constructing any Neander | 721 // to check for a dead VM with ON_BAILOUT before constructing any Neander |
| 745 // objects. To remind you about this there is no HandleScope in the | 722 // objects. To remind you about this there is no HandleScope in the |
| 746 // NeanderObject constructor. When you add one to the site calling the | 723 // NeanderObject constructor. When you add one to the site calling the |
| 747 // constructor you should check that you ensured the VM was not dead first. | 724 // constructor you should check that you ensured the VM was not dead first. |
| 748 NeanderObject::NeanderObject(v8::internal::Isolate* isolate, int size) { | 725 NeanderObject::NeanderObject(v8::internal::Isolate* isolate, int size) { |
| 749 EnsureInitializedForIsolate(isolate, "v8::Nowhere"); | |
| 750 ENTER_V8(isolate); | 726 ENTER_V8(isolate); |
| 751 value_ = isolate->factory()->NewNeanderObject(); | 727 value_ = isolate->factory()->NewNeanderObject(); |
| 752 i::Handle<i::FixedArray> elements = isolate->factory()->NewFixedArray(size); | 728 i::Handle<i::FixedArray> elements = isolate->factory()->NewFixedArray(size); |
| 753 value_->set_elements(*elements); | 729 value_->set_elements(*elements); |
| 754 } | 730 } |
| 755 | 731 |
| 756 | 732 |
| 757 int NeanderObject::size() { | 733 int NeanderObject::size() { |
| 758 return i::FixedArray::cast(value_->elements())->length(); | 734 return i::FixedArray::cast(value_->elements())->length(); |
| 759 } | 735 } |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 932 return Utils::ToLocal(obj); | 908 return Utils::ToLocal(obj); |
| 933 } | 909 } |
| 934 | 910 |
| 935 Local<FunctionTemplate> FunctionTemplate::New( | 911 Local<FunctionTemplate> FunctionTemplate::New( |
| 936 Isolate* isolate, | 912 Isolate* isolate, |
| 937 FunctionCallback callback, | 913 FunctionCallback callback, |
| 938 v8::Handle<Value> data, | 914 v8::Handle<Value> data, |
| 939 v8::Handle<Signature> signature, | 915 v8::Handle<Signature> signature, |
| 940 int length) { | 916 int length) { |
| 941 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 917 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 942 EnsureInitializedForIsolate(i_isolate, "v8::FunctionTemplate::New()"); | |
| 943 LOG_API(i_isolate, "FunctionTemplate::New"); | 918 LOG_API(i_isolate, "FunctionTemplate::New"); |
| 944 ENTER_V8(i_isolate); | 919 ENTER_V8(i_isolate); |
| 945 return FunctionTemplateNew( | 920 return FunctionTemplateNew( |
| 946 i_isolate, callback, data, signature, length, false); | 921 i_isolate, callback, data, signature, length, false); |
| 947 } | 922 } |
| 948 | 923 |
| 949 | 924 |
| 950 Local<Signature> Signature::New(Isolate* isolate, | 925 Local<Signature> Signature::New(Isolate* isolate, |
| 951 Handle<FunctionTemplate> receiver, int argc, | 926 Handle<FunctionTemplate> receiver, int argc, |
| 952 Handle<FunctionTemplate> argv[]) { | 927 Handle<FunctionTemplate> argv[]) { |
| 953 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 928 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 954 EnsureInitializedForIsolate(i_isolate, "v8::Signature::New()"); | |
| 955 LOG_API(i_isolate, "Signature::New"); | 929 LOG_API(i_isolate, "Signature::New"); |
| 956 ENTER_V8(i_isolate); | 930 ENTER_V8(i_isolate); |
| 957 i::Handle<i::Struct> struct_obj = | 931 i::Handle<i::Struct> struct_obj = |
| 958 i_isolate->factory()->NewStruct(i::SIGNATURE_INFO_TYPE); | 932 i_isolate->factory()->NewStruct(i::SIGNATURE_INFO_TYPE); |
| 959 i::Handle<i::SignatureInfo> obj = | 933 i::Handle<i::SignatureInfo> obj = |
| 960 i::Handle<i::SignatureInfo>::cast(struct_obj); | 934 i::Handle<i::SignatureInfo>::cast(struct_obj); |
| 961 if (!receiver.IsEmpty()) obj->set_receiver(*Utils::OpenHandle(*receiver)); | 935 if (!receiver.IsEmpty()) obj->set_receiver(*Utils::OpenHandle(*receiver)); |
| 962 if (argc > 0) { | 936 if (argc > 0) { |
| 963 i::Handle<i::FixedArray> args = i_isolate->factory()->NewFixedArray(argc); | 937 i::Handle<i::FixedArray> args = i_isolate->factory()->NewFixedArray(argc); |
| 964 for (int i = 0; i < argc; i++) { | 938 for (int i = 0; i < argc; i++) { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 | 1069 |
| 1096 | 1070 |
| 1097 Local<TypeSwitch> TypeSwitch::New(Handle<FunctionTemplate> type) { | 1071 Local<TypeSwitch> TypeSwitch::New(Handle<FunctionTemplate> type) { |
| 1098 Handle<FunctionTemplate> types[1] = { type }; | 1072 Handle<FunctionTemplate> types[1] = { type }; |
| 1099 return TypeSwitch::New(1, types); | 1073 return TypeSwitch::New(1, types); |
| 1100 } | 1074 } |
| 1101 | 1075 |
| 1102 | 1076 |
| 1103 Local<TypeSwitch> TypeSwitch::New(int argc, Handle<FunctionTemplate> types[]) { | 1077 Local<TypeSwitch> TypeSwitch::New(int argc, Handle<FunctionTemplate> types[]) { |
| 1104 i::Isolate* isolate = i::Isolate::Current(); | 1078 i::Isolate* isolate = i::Isolate::Current(); |
| 1105 EnsureInitializedForIsolate(isolate, "v8::TypeSwitch::New()"); | |
| 1106 LOG_API(isolate, "TypeSwitch::New"); | 1079 LOG_API(isolate, "TypeSwitch::New"); |
| 1107 ENTER_V8(isolate); | 1080 ENTER_V8(isolate); |
| 1108 i::Handle<i::FixedArray> vector = isolate->factory()->NewFixedArray(argc); | 1081 i::Handle<i::FixedArray> vector = isolate->factory()->NewFixedArray(argc); |
| 1109 for (int i = 0; i < argc; i++) | 1082 for (int i = 0; i < argc; i++) |
| 1110 vector->set(i, *Utils::OpenHandle(*types[i])); | 1083 vector->set(i, *Utils::OpenHandle(*types[i])); |
| 1111 i::Handle<i::Struct> struct_obj = | 1084 i::Handle<i::Struct> struct_obj = |
| 1112 isolate->factory()->NewStruct(i::TYPE_SWITCH_INFO_TYPE); | 1085 isolate->factory()->NewStruct(i::TYPE_SWITCH_INFO_TYPE); |
| 1113 i::Handle<i::TypeSwitchInfo> obj = | 1086 i::Handle<i::TypeSwitchInfo> obj = |
| 1114 i::Handle<i::TypeSwitchInfo>::cast(struct_obj); | 1087 i::Handle<i::TypeSwitchInfo>::cast(struct_obj); |
| 1115 obj->set_types(*vector); | 1088 obj->set_types(*vector); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1276 | 1249 |
| 1277 | 1250 |
| 1278 Local<ObjectTemplate> ObjectTemplate::New() { | 1251 Local<ObjectTemplate> ObjectTemplate::New() { |
| 1279 return New(i::Isolate::Current(), Local<FunctionTemplate>()); | 1252 return New(i::Isolate::Current(), Local<FunctionTemplate>()); |
| 1280 } | 1253 } |
| 1281 | 1254 |
| 1282 | 1255 |
| 1283 Local<ObjectTemplate> ObjectTemplate::New( | 1256 Local<ObjectTemplate> ObjectTemplate::New( |
| 1284 i::Isolate* isolate, | 1257 i::Isolate* isolate, |
| 1285 v8::Handle<FunctionTemplate> constructor) { | 1258 v8::Handle<FunctionTemplate> constructor) { |
| 1286 EnsureInitializedForIsolate(isolate, "v8::ObjectTemplate::New()"); | |
| 1287 LOG_API(isolate, "ObjectTemplate::New"); | 1259 LOG_API(isolate, "ObjectTemplate::New"); |
| 1288 ENTER_V8(isolate); | 1260 ENTER_V8(isolate); |
| 1289 i::Handle<i::Struct> struct_obj = | 1261 i::Handle<i::Struct> struct_obj = |
| 1290 isolate->factory()->NewStruct(i::OBJECT_TEMPLATE_INFO_TYPE); | 1262 isolate->factory()->NewStruct(i::OBJECT_TEMPLATE_INFO_TYPE); |
| 1291 i::Handle<i::ObjectTemplateInfo> obj = | 1263 i::Handle<i::ObjectTemplateInfo> obj = |
| 1292 i::Handle<i::ObjectTemplateInfo>::cast(struct_obj); | 1264 i::Handle<i::ObjectTemplateInfo>::cast(struct_obj); |
| 1293 InitializeTemplate(obj, Consts::OBJECT_TEMPLATE); | 1265 InitializeTemplate(obj, Consts::OBJECT_TEMPLATE); |
| 1294 if (!constructor.IsEmpty()) | 1266 if (!constructor.IsEmpty()) |
| 1295 obj->set_constructor(*Utils::OpenHandle(*constructor)); | 1267 obj->set_constructor(*Utils::OpenHandle(*constructor)); |
| 1296 obj->set_internal_field_count(i::Smi::FromInt(0)); | 1268 obj->set_internal_field_count(i::Smi::FromInt(0)); |
| (...skipping 1096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2393 bool StackFrame::IsConstructor() const { | 2365 bool StackFrame::IsConstructor() const { |
| 2394 return getBoolProperty(this, "isConstructor"); | 2366 return getBoolProperty(this, "isConstructor"); |
| 2395 } | 2367 } |
| 2396 | 2368 |
| 2397 | 2369 |
| 2398 // --- J S O N --- | 2370 // --- J S O N --- |
| 2399 | 2371 |
| 2400 Local<Value> JSON::Parse(Local<String> json_string) { | 2372 Local<Value> JSON::Parse(Local<String> json_string) { |
| 2401 i::Handle<i::String> string = Utils::OpenHandle(*json_string); | 2373 i::Handle<i::String> string = Utils::OpenHandle(*json_string); |
| 2402 i::Isolate* isolate = string->GetIsolate(); | 2374 i::Isolate* isolate = string->GetIsolate(); |
| 2403 EnsureInitializedForIsolate(isolate, "v8::JSON::Parse"); | |
| 2404 ENTER_V8(isolate); | 2375 ENTER_V8(isolate); |
| 2405 i::HandleScope scope(isolate); | 2376 i::HandleScope scope(isolate); |
| 2406 i::Handle<i::String> source = i::String::Flatten(string); | 2377 i::Handle<i::String> source = i::String::Flatten(string); |
| 2407 EXCEPTION_PREAMBLE(isolate); | 2378 EXCEPTION_PREAMBLE(isolate); |
| 2408 i::MaybeHandle<i::Object> maybe_result = | 2379 i::MaybeHandle<i::Object> maybe_result = |
| 2409 source->IsSeqOneByteString() ? i::JsonParser<true>::Parse(source) | 2380 source->IsSeqOneByteString() ? i::JsonParser<true>::Parse(source) |
| 2410 : i::JsonParser<false>::Parse(source); | 2381 : i::JsonParser<false>::Parse(source); |
| 2411 i::Handle<i::Object> result; | 2382 i::Handle<i::Object> result; |
| 2412 has_pending_exception = !maybe_result.ToHandle(&result); | 2383 has_pending_exception = !maybe_result.ToHandle(&result); |
| 2413 EXCEPTION_BAILOUT_CHECK(isolate, Local<Object>()); | 2384 EXCEPTION_BAILOUT_CHECK(isolate, Local<Object>()); |
| (...skipping 2470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4884 int String::Write(uint16_t* buffer, | 4855 int String::Write(uint16_t* buffer, |
| 4885 int start, | 4856 int start, |
| 4886 int length, | 4857 int length, |
| 4887 int options) const { | 4858 int options) const { |
| 4888 return WriteHelper(this, buffer, start, length, options); | 4859 return WriteHelper(this, buffer, start, length, options); |
| 4889 } | 4860 } |
| 4890 | 4861 |
| 4891 | 4862 |
| 4892 bool v8::String::IsExternal() const { | 4863 bool v8::String::IsExternal() const { |
| 4893 i::Handle<i::String> str = Utils::OpenHandle(this); | 4864 i::Handle<i::String> str = Utils::OpenHandle(this); |
| 4894 EnsureInitializedForIsolate(str->GetIsolate(), "v8::String::IsExternal()"); | |
| 4895 return i::StringShape(*str).IsExternalTwoByte(); | 4865 return i::StringShape(*str).IsExternalTwoByte(); |
| 4896 } | 4866 } |
| 4897 | 4867 |
| 4898 | 4868 |
| 4899 bool v8::String::IsExternalOneByte() const { | 4869 bool v8::String::IsExternalOneByte() const { |
| 4900 i::Handle<i::String> str = Utils::OpenHandle(this); | 4870 i::Handle<i::String> str = Utils::OpenHandle(this); |
| 4901 return i::StringShape(*str).IsExternalOneByte(); | 4871 return i::StringShape(*str).IsExternalOneByte(); |
| 4902 } | 4872 } |
| 4903 | 4873 |
| 4904 | 4874 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5073 i::V8::InitializePlatform(platform); | 5043 i::V8::InitializePlatform(platform); |
| 5074 } | 5044 } |
| 5075 | 5045 |
| 5076 | 5046 |
| 5077 void v8::V8::ShutdownPlatform() { | 5047 void v8::V8::ShutdownPlatform() { |
| 5078 i::V8::ShutdownPlatform(); | 5048 i::V8::ShutdownPlatform(); |
| 5079 } | 5049 } |
| 5080 | 5050 |
| 5081 | 5051 |
| 5082 bool v8::V8::Initialize() { | 5052 bool v8::V8::Initialize() { |
| 5083 i::Isolate* isolate = i::Isolate::UncheckedCurrent(); | 5053 i::V8::Initialize(); |
| 5084 if (isolate != NULL && isolate->IsInitialized()) { | 5054 return true; |
| 5085 return true; | |
| 5086 } | |
| 5087 return InitializeHelper(isolate); | |
| 5088 } | 5055 } |
| 5089 | 5056 |
| 5090 | 5057 |
| 5091 void v8::V8::SetEntropySource(EntropySource entropy_source) { | 5058 void v8::V8::SetEntropySource(EntropySource entropy_source) { |
| 5092 base::RandomNumberGenerator::SetEntropySource(entropy_source); | 5059 base::RandomNumberGenerator::SetEntropySource(entropy_source); |
| 5093 } | 5060 } |
| 5094 | 5061 |
| 5095 | 5062 |
| 5096 void v8::V8::SetReturnAddressLocationResolver( | 5063 void v8::V8::SetReturnAddressLocationResolver( |
| 5097 ReturnAddressLocationResolver return_address_resolver) { | 5064 ReturnAddressLocationResolver return_address_resolver) { |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5272 | 5239 |
| 5273 return env; | 5240 return env; |
| 5274 } | 5241 } |
| 5275 | 5242 |
| 5276 Local<Context> v8::Context::New( | 5243 Local<Context> v8::Context::New( |
| 5277 v8::Isolate* external_isolate, | 5244 v8::Isolate* external_isolate, |
| 5278 v8::ExtensionConfiguration* extensions, | 5245 v8::ExtensionConfiguration* extensions, |
| 5279 v8::Handle<ObjectTemplate> global_template, | 5246 v8::Handle<ObjectTemplate> global_template, |
| 5280 v8::Handle<Value> global_object) { | 5247 v8::Handle<Value> global_object) { |
| 5281 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); | 5248 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); |
| 5282 EnsureInitializedForIsolate(isolate, "v8::Context::New()"); | |
| 5283 LOG_API(isolate, "Context::New"); | 5249 LOG_API(isolate, "Context::New"); |
| 5284 ON_BAILOUT(isolate, "v8::Context::New()", return Local<Context>()); | 5250 ON_BAILOUT(isolate, "v8::Context::New()", return Local<Context>()); |
| 5285 i::HandleScope scope(isolate); | 5251 i::HandleScope scope(isolate); |
| 5286 ExtensionConfiguration no_extensions; | 5252 ExtensionConfiguration no_extensions; |
| 5287 if (extensions == NULL) extensions = &no_extensions; | 5253 if (extensions == NULL) extensions = &no_extensions; |
| 5288 i::Handle<i::Context> env = | 5254 i::Handle<i::Context> env = |
| 5289 CreateEnvironment(isolate, extensions, global_template, global_object); | 5255 CreateEnvironment(isolate, extensions, global_template, global_object); |
| 5290 if (env.is_null()) return Local<Context>(); | 5256 if (env.is_null()) return Local<Context>(); |
| 5291 return Utils::ToLocal(scope.CloseAndEscape(env)); | 5257 return Utils::ToLocal(scope.CloseAndEscape(env)); |
| 5292 } | 5258 } |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5403 ON_BAILOUT(i::Isolate::Current(), "v8::FunctionTemplate::HasInstanceOf()", | 5369 ON_BAILOUT(i::Isolate::Current(), "v8::FunctionTemplate::HasInstanceOf()", |
| 5404 return false); | 5370 return false); |
| 5405 i::Object* obj = *Utils::OpenHandle(*value); | 5371 i::Object* obj = *Utils::OpenHandle(*value); |
| 5406 return Utils::OpenHandle(this)->IsTemplateFor(obj); | 5372 return Utils::OpenHandle(this)->IsTemplateFor(obj); |
| 5407 } | 5373 } |
| 5408 | 5374 |
| 5409 | 5375 |
| 5410 Local<External> v8::External::New(Isolate* isolate, void* value) { | 5376 Local<External> v8::External::New(Isolate* isolate, void* value) { |
| 5411 STATIC_ASSERT(sizeof(value) == sizeof(i::Address)); | 5377 STATIC_ASSERT(sizeof(value) == sizeof(i::Address)); |
| 5412 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 5378 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 5413 EnsureInitializedForIsolate(i_isolate, "v8::External::New()"); | |
| 5414 LOG_API(i_isolate, "External::New"); | 5379 LOG_API(i_isolate, "External::New"); |
| 5415 ENTER_V8(i_isolate); | 5380 ENTER_V8(i_isolate); |
| 5416 i::Handle<i::JSObject> external = i_isolate->factory()->NewExternal(value); | 5381 i::Handle<i::JSObject> external = i_isolate->factory()->NewExternal(value); |
| 5417 return Utils::ExternalToLocal(external); | 5382 return Utils::ExternalToLocal(external); |
| 5418 } | 5383 } |
| 5419 | 5384 |
| 5420 | 5385 |
| 5421 void* External::Value() const { | 5386 void* External::Value() const { |
| 5422 return ExternalValue(*Utils::OpenHandle(this)); | 5387 return ExternalValue(*Utils::OpenHandle(this)); |
| 5423 } | 5388 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5478 | 5443 |
| 5479 | 5444 |
| 5480 template<typename Char> | 5445 template<typename Char> |
| 5481 inline Local<String> NewString(Isolate* v8_isolate, | 5446 inline Local<String> NewString(Isolate* v8_isolate, |
| 5482 const char* location, | 5447 const char* location, |
| 5483 const char* env, | 5448 const char* env, |
| 5484 const Char* data, | 5449 const Char* data, |
| 5485 String::NewStringType type, | 5450 String::NewStringType type, |
| 5486 int length) { | 5451 int length) { |
| 5487 i::Isolate* isolate = reinterpret_cast<internal::Isolate*>(v8_isolate); | 5452 i::Isolate* isolate = reinterpret_cast<internal::Isolate*>(v8_isolate); |
| 5488 EnsureInitializedForIsolate(isolate, location); | |
| 5489 LOG_API(isolate, env); | 5453 LOG_API(isolate, env); |
| 5490 if (length == 0 && type != String::kUndetectableString) { | 5454 if (length == 0 && type != String::kUndetectableString) { |
| 5491 return String::Empty(v8_isolate); | 5455 return String::Empty(v8_isolate); |
| 5492 } | 5456 } |
| 5493 ENTER_V8(isolate); | 5457 ENTER_V8(isolate); |
| 5494 if (length == -1) length = StringLength(data); | 5458 if (length == -1) length = StringLength(data); |
| 5495 // We do not expect this to fail. Change this if it does. | 5459 // We do not expect this to fail. Change this if it does. |
| 5496 i::Handle<i::String> result = NewString( | 5460 i::Handle<i::String> result = NewString( |
| 5497 isolate->factory(), | 5461 isolate->factory(), |
| 5498 type, | 5462 type, |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5541 "String::NewFromTwoByte", | 5505 "String::NewFromTwoByte", |
| 5542 data, | 5506 data, |
| 5543 type, | 5507 type, |
| 5544 length); | 5508 length); |
| 5545 } | 5509 } |
| 5546 | 5510 |
| 5547 | 5511 |
| 5548 Local<String> v8::String::Concat(Handle<String> left, Handle<String> right) { | 5512 Local<String> v8::String::Concat(Handle<String> left, Handle<String> right) { |
| 5549 i::Handle<i::String> left_string = Utils::OpenHandle(*left); | 5513 i::Handle<i::String> left_string = Utils::OpenHandle(*left); |
| 5550 i::Isolate* isolate = left_string->GetIsolate(); | 5514 i::Isolate* isolate = left_string->GetIsolate(); |
| 5551 EnsureInitializedForIsolate(isolate, "v8::String::New()"); | |
| 5552 LOG_API(isolate, "String::New(char)"); | 5515 LOG_API(isolate, "String::New(char)"); |
| 5553 ENTER_V8(isolate); | 5516 ENTER_V8(isolate); |
| 5554 i::Handle<i::String> right_string = Utils::OpenHandle(*right); | 5517 i::Handle<i::String> right_string = Utils::OpenHandle(*right); |
| 5555 // We do not expect this to fail. Change this if it does. | 5518 // We do not expect this to fail. Change this if it does. |
| 5556 i::Handle<i::String> result = isolate->factory()->NewConsString( | 5519 i::Handle<i::String> result = isolate->factory()->NewConsString( |
| 5557 left_string, right_string).ToHandleChecked(); | 5520 left_string, right_string).ToHandleChecked(); |
| 5558 return Utils::ToLocal(result); | 5521 return Utils::ToLocal(result); |
| 5559 } | 5522 } |
| 5560 | 5523 |
| 5561 | 5524 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 5574 return isolate->factory() | 5537 return isolate->factory() |
| 5575 ->NewExternalStringFromOneByte(resource) | 5538 ->NewExternalStringFromOneByte(resource) |
| 5576 .ToHandleChecked(); | 5539 .ToHandleChecked(); |
| 5577 } | 5540 } |
| 5578 | 5541 |
| 5579 | 5542 |
| 5580 Local<String> v8::String::NewExternal( | 5543 Local<String> v8::String::NewExternal( |
| 5581 Isolate* isolate, | 5544 Isolate* isolate, |
| 5582 v8::String::ExternalStringResource* resource) { | 5545 v8::String::ExternalStringResource* resource) { |
| 5583 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 5546 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 5584 EnsureInitializedForIsolate(i_isolate, "v8::String::NewExternal()"); | |
| 5585 LOG_API(i_isolate, "String::NewExternal"); | 5547 LOG_API(i_isolate, "String::NewExternal"); |
| 5586 ENTER_V8(i_isolate); | 5548 ENTER_V8(i_isolate); |
| 5587 CHECK(resource && resource->data()); | 5549 CHECK(resource && resource->data()); |
| 5588 i::Handle<i::String> result = NewExternalStringHandle(i_isolate, resource); | 5550 i::Handle<i::String> result = NewExternalStringHandle(i_isolate, resource); |
| 5589 i_isolate->heap()->external_string_table()->AddString(*result); | 5551 i_isolate->heap()->external_string_table()->AddString(*result); |
| 5590 return Utils::ToLocal(result); | 5552 return Utils::ToLocal(result); |
| 5591 } | 5553 } |
| 5592 | 5554 |
| 5593 | 5555 |
| 5594 bool v8::String::MakeExternal(v8::String::ExternalStringResource* resource) { | 5556 bool v8::String::MakeExternal(v8::String::ExternalStringResource* resource) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 5613 DCHECK(obj->IsExternalString()); | 5575 DCHECK(obj->IsExternalString()); |
| 5614 isolate->heap()->external_string_table()->AddString(*obj); | 5576 isolate->heap()->external_string_table()->AddString(*obj); |
| 5615 } | 5577 } |
| 5616 return result; | 5578 return result; |
| 5617 } | 5579 } |
| 5618 | 5580 |
| 5619 | 5581 |
| 5620 Local<String> v8::String::NewExternal( | 5582 Local<String> v8::String::NewExternal( |
| 5621 Isolate* isolate, v8::String::ExternalOneByteStringResource* resource) { | 5583 Isolate* isolate, v8::String::ExternalOneByteStringResource* resource) { |
| 5622 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 5584 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 5623 EnsureInitializedForIsolate(i_isolate, "v8::String::NewExternal()"); | |
| 5624 LOG_API(i_isolate, "String::NewExternal"); | 5585 LOG_API(i_isolate, "String::NewExternal"); |
| 5625 ENTER_V8(i_isolate); | 5586 ENTER_V8(i_isolate); |
| 5626 CHECK(resource && resource->data()); | 5587 CHECK(resource && resource->data()); |
| 5627 i::Handle<i::String> result = | 5588 i::Handle<i::String> result = |
| 5628 NewExternalOneByteStringHandle(i_isolate, resource); | 5589 NewExternalOneByteStringHandle(i_isolate, resource); |
| 5629 i_isolate->heap()->external_string_table()->AddString(*result); | 5590 i_isolate->heap()->external_string_table()->AddString(*result); |
| 5630 return Utils::ToLocal(result); | 5591 return Utils::ToLocal(result); |
| 5631 } | 5592 } |
| 5632 | 5593 |
| 5633 | 5594 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5666 if (isolate->string_tracker()->IsFreshUnusedString(obj)) return false; | 5627 if (isolate->string_tracker()->IsFreshUnusedString(obj)) return false; |
| 5667 int size = obj->Size(); // Byte size of the original string. | 5628 int size = obj->Size(); // Byte size of the original string. |
| 5668 if (size < i::ExternalString::kShortSize) return false; | 5629 if (size < i::ExternalString::kShortSize) return false; |
| 5669 i::StringShape shape(*obj); | 5630 i::StringShape shape(*obj); |
| 5670 return !shape.IsExternal(); | 5631 return !shape.IsExternal(); |
| 5671 } | 5632 } |
| 5672 | 5633 |
| 5673 | 5634 |
| 5674 Local<v8::Object> v8::Object::New(Isolate* isolate) { | 5635 Local<v8::Object> v8::Object::New(Isolate* isolate) { |
| 5675 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 5636 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 5676 EnsureInitializedForIsolate(i_isolate, "v8::Object::New()"); | |
| 5677 LOG_API(i_isolate, "Object::New"); | 5637 LOG_API(i_isolate, "Object::New"); |
| 5678 ENTER_V8(i_isolate); | 5638 ENTER_V8(i_isolate); |
| 5679 i::Handle<i::JSObject> obj = | 5639 i::Handle<i::JSObject> obj = |
| 5680 i_isolate->factory()->NewJSObject(i_isolate->object_function()); | 5640 i_isolate->factory()->NewJSObject(i_isolate->object_function()); |
| 5681 return Utils::ToLocal(obj); | 5641 return Utils::ToLocal(obj); |
| 5682 } | 5642 } |
| 5683 | 5643 |
| 5684 | 5644 |
| 5685 Local<v8::Value> v8::NumberObject::New(Isolate* isolate, double value) { | 5645 Local<v8::Value> v8::NumberObject::New(Isolate* isolate, double value) { |
| 5686 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 5646 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 5687 EnsureInitializedForIsolate(i_isolate, "v8::NumberObject::New()"); | |
| 5688 LOG_API(i_isolate, "NumberObject::New"); | 5647 LOG_API(i_isolate, "NumberObject::New"); |
| 5689 ENTER_V8(i_isolate); | 5648 ENTER_V8(i_isolate); |
| 5690 i::Handle<i::Object> number = i_isolate->factory()->NewNumber(value); | 5649 i::Handle<i::Object> number = i_isolate->factory()->NewNumber(value); |
| 5691 i::Handle<i::Object> obj = | 5650 i::Handle<i::Object> obj = |
| 5692 i::Object::ToObject(i_isolate, number).ToHandleChecked(); | 5651 i::Object::ToObject(i_isolate, number).ToHandleChecked(); |
| 5693 return Utils::ToLocal(obj); | 5652 return Utils::ToLocal(obj); |
| 5694 } | 5653 } |
| 5695 | 5654 |
| 5696 | 5655 |
| 5697 double v8::NumberObject::ValueOf() const { | 5656 double v8::NumberObject::ValueOf() const { |
| 5698 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 5657 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 5699 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); | 5658 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); |
| 5700 i::Isolate* isolate = jsvalue->GetIsolate(); | 5659 i::Isolate* isolate = jsvalue->GetIsolate(); |
| 5701 LOG_API(isolate, "NumberObject::NumberValue"); | 5660 LOG_API(isolate, "NumberObject::NumberValue"); |
| 5702 return jsvalue->value()->Number(); | 5661 return jsvalue->value()->Number(); |
| 5703 } | 5662 } |
| 5704 | 5663 |
| 5705 | 5664 |
| 5706 Local<v8::Value> v8::BooleanObject::New(bool value) { | 5665 Local<v8::Value> v8::BooleanObject::New(bool value) { |
| 5707 i::Isolate* isolate = i::Isolate::Current(); | 5666 i::Isolate* isolate = i::Isolate::Current(); |
| 5708 EnsureInitializedForIsolate(isolate, "v8::BooleanObject::New()"); | |
| 5709 LOG_API(isolate, "BooleanObject::New"); | 5667 LOG_API(isolate, "BooleanObject::New"); |
| 5710 ENTER_V8(isolate); | 5668 ENTER_V8(isolate); |
| 5711 i::Handle<i::Object> boolean(value | 5669 i::Handle<i::Object> boolean(value |
| 5712 ? isolate->heap()->true_value() | 5670 ? isolate->heap()->true_value() |
| 5713 : isolate->heap()->false_value(), | 5671 : isolate->heap()->false_value(), |
| 5714 isolate); | 5672 isolate); |
| 5715 i::Handle<i::Object> obj = | 5673 i::Handle<i::Object> obj = |
| 5716 i::Object::ToObject(isolate, boolean).ToHandleChecked(); | 5674 i::Object::ToObject(isolate, boolean).ToHandleChecked(); |
| 5717 return Utils::ToLocal(obj); | 5675 return Utils::ToLocal(obj); |
| 5718 } | 5676 } |
| 5719 | 5677 |
| 5720 | 5678 |
| 5721 bool v8::BooleanObject::ValueOf() const { | 5679 bool v8::BooleanObject::ValueOf() const { |
| 5722 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 5680 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 5723 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); | 5681 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); |
| 5724 i::Isolate* isolate = jsvalue->GetIsolate(); | 5682 i::Isolate* isolate = jsvalue->GetIsolate(); |
| 5725 LOG_API(isolate, "BooleanObject::BooleanValue"); | 5683 LOG_API(isolate, "BooleanObject::BooleanValue"); |
| 5726 return jsvalue->value()->IsTrue(); | 5684 return jsvalue->value()->IsTrue(); |
| 5727 } | 5685 } |
| 5728 | 5686 |
| 5729 | 5687 |
| 5730 Local<v8::Value> v8::StringObject::New(Handle<String> value) { | 5688 Local<v8::Value> v8::StringObject::New(Handle<String> value) { |
| 5731 i::Handle<i::String> string = Utils::OpenHandle(*value); | 5689 i::Handle<i::String> string = Utils::OpenHandle(*value); |
| 5732 i::Isolate* isolate = string->GetIsolate(); | 5690 i::Isolate* isolate = string->GetIsolate(); |
| 5733 EnsureInitializedForIsolate(isolate, "v8::StringObject::New()"); | |
| 5734 LOG_API(isolate, "StringObject::New"); | 5691 LOG_API(isolate, "StringObject::New"); |
| 5735 ENTER_V8(isolate); | 5692 ENTER_V8(isolate); |
| 5736 i::Handle<i::Object> obj = | 5693 i::Handle<i::Object> obj = |
| 5737 i::Object::ToObject(isolate, string).ToHandleChecked(); | 5694 i::Object::ToObject(isolate, string).ToHandleChecked(); |
| 5738 return Utils::ToLocal(obj); | 5695 return Utils::ToLocal(obj); |
| 5739 } | 5696 } |
| 5740 | 5697 |
| 5741 | 5698 |
| 5742 Local<v8::String> v8::StringObject::ValueOf() const { | 5699 Local<v8::String> v8::StringObject::ValueOf() const { |
| 5743 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 5700 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 5744 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); | 5701 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); |
| 5745 i::Isolate* isolate = jsvalue->GetIsolate(); | 5702 i::Isolate* isolate = jsvalue->GetIsolate(); |
| 5746 LOG_API(isolate, "StringObject::StringValue"); | 5703 LOG_API(isolate, "StringObject::StringValue"); |
| 5747 return Utils::ToLocal( | 5704 return Utils::ToLocal( |
| 5748 i::Handle<i::String>(i::String::cast(jsvalue->value()))); | 5705 i::Handle<i::String>(i::String::cast(jsvalue->value()))); |
| 5749 } | 5706 } |
| 5750 | 5707 |
| 5751 | 5708 |
| 5752 Local<v8::Value> v8::SymbolObject::New(Isolate* isolate, Handle<Symbol> value) { | 5709 Local<v8::Value> v8::SymbolObject::New(Isolate* isolate, Handle<Symbol> value) { |
| 5753 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 5710 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 5754 EnsureInitializedForIsolate(i_isolate, "v8::SymbolObject::New()"); | |
| 5755 LOG_API(i_isolate, "SymbolObject::New"); | 5711 LOG_API(i_isolate, "SymbolObject::New"); |
| 5756 ENTER_V8(i_isolate); | 5712 ENTER_V8(i_isolate); |
| 5757 i::Handle<i::Object> obj = i::Object::ToObject( | 5713 i::Handle<i::Object> obj = i::Object::ToObject( |
| 5758 i_isolate, Utils::OpenHandle(*value)).ToHandleChecked(); | 5714 i_isolate, Utils::OpenHandle(*value)).ToHandleChecked(); |
| 5759 return Utils::ToLocal(obj); | 5715 return Utils::ToLocal(obj); |
| 5760 } | 5716 } |
| 5761 | 5717 |
| 5762 | 5718 |
| 5763 Local<v8::Symbol> v8::SymbolObject::ValueOf() const { | 5719 Local<v8::Symbol> v8::SymbolObject::ValueOf() const { |
| 5764 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 5720 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 5765 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); | 5721 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); |
| 5766 i::Isolate* isolate = jsvalue->GetIsolate(); | 5722 i::Isolate* isolate = jsvalue->GetIsolate(); |
| 5767 LOG_API(isolate, "SymbolObject::SymbolValue"); | 5723 LOG_API(isolate, "SymbolObject::SymbolValue"); |
| 5768 return Utils::ToLocal( | 5724 return Utils::ToLocal( |
| 5769 i::Handle<i::Symbol>(i::Symbol::cast(jsvalue->value()))); | 5725 i::Handle<i::Symbol>(i::Symbol::cast(jsvalue->value()))); |
| 5770 } | 5726 } |
| 5771 | 5727 |
| 5772 | 5728 |
| 5773 Local<v8::Value> v8::Date::New(Isolate* isolate, double time) { | 5729 Local<v8::Value> v8::Date::New(Isolate* isolate, double time) { |
| 5774 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 5730 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 5775 EnsureInitializedForIsolate(i_isolate, "v8::Date::New()"); | |
| 5776 LOG_API(i_isolate, "Date::New"); | 5731 LOG_API(i_isolate, "Date::New"); |
| 5777 if (std::isnan(time)) { | 5732 if (std::isnan(time)) { |
| 5778 // Introduce only canonical NaN value into the VM, to avoid signaling NaNs. | 5733 // Introduce only canonical NaN value into the VM, to avoid signaling NaNs. |
| 5779 time = base::OS::nan_value(); | 5734 time = base::OS::nan_value(); |
| 5780 } | 5735 } |
| 5781 ENTER_V8(i_isolate); | 5736 ENTER_V8(i_isolate); |
| 5782 EXCEPTION_PREAMBLE(i_isolate); | 5737 EXCEPTION_PREAMBLE(i_isolate); |
| 5783 i::Handle<i::Object> obj; | 5738 i::Handle<i::Object> obj; |
| 5784 has_pending_exception = !i::Execution::NewDate( | 5739 has_pending_exception = !i::Execution::NewDate( |
| 5785 i_isolate, time).ToHandle(&obj); | 5740 i_isolate, time).ToHandle(&obj); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5831 if ((flags & RegExp::kIgnoreCase) != 0) flags_buf[num_flags++] = 'i'; | 5786 if ((flags & RegExp::kIgnoreCase) != 0) flags_buf[num_flags++] = 'i'; |
| 5832 DCHECK(num_flags <= static_cast<int>(arraysize(flags_buf))); | 5787 DCHECK(num_flags <= static_cast<int>(arraysize(flags_buf))); |
| 5833 return isolate->factory()->InternalizeOneByteString( | 5788 return isolate->factory()->InternalizeOneByteString( |
| 5834 i::Vector<const uint8_t>(flags_buf, num_flags)); | 5789 i::Vector<const uint8_t>(flags_buf, num_flags)); |
| 5835 } | 5790 } |
| 5836 | 5791 |
| 5837 | 5792 |
| 5838 Local<v8::RegExp> v8::RegExp::New(Handle<String> pattern, | 5793 Local<v8::RegExp> v8::RegExp::New(Handle<String> pattern, |
| 5839 Flags flags) { | 5794 Flags flags) { |
| 5840 i::Isolate* isolate = Utils::OpenHandle(*pattern)->GetIsolate(); | 5795 i::Isolate* isolate = Utils::OpenHandle(*pattern)->GetIsolate(); |
| 5841 EnsureInitializedForIsolate(isolate, "v8::RegExp::New()"); | |
| 5842 LOG_API(isolate, "RegExp::New"); | 5796 LOG_API(isolate, "RegExp::New"); |
| 5843 ENTER_V8(isolate); | 5797 ENTER_V8(isolate); |
| 5844 EXCEPTION_PREAMBLE(isolate); | 5798 EXCEPTION_PREAMBLE(isolate); |
| 5845 i::Handle<i::JSRegExp> obj; | 5799 i::Handle<i::JSRegExp> obj; |
| 5846 has_pending_exception = !i::Execution::NewJSRegExp( | 5800 has_pending_exception = !i::Execution::NewJSRegExp( |
| 5847 Utils::OpenHandle(*pattern), | 5801 Utils::OpenHandle(*pattern), |
| 5848 RegExpFlagsToString(flags)).ToHandle(&obj); | 5802 RegExpFlagsToString(flags)).ToHandle(&obj); |
| 5849 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::RegExp>()); | 5803 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::RegExp>()); |
| 5850 return Utils::ToLocal(i::Handle<i::JSRegExp>::cast(obj)); | 5804 return Utils::ToLocal(i::Handle<i::JSRegExp>::cast(obj)); |
| 5851 } | 5805 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 5868 #undef REGEXP_FLAG_ASSERT_EQ | 5822 #undef REGEXP_FLAG_ASSERT_EQ |
| 5869 | 5823 |
| 5870 v8::RegExp::Flags v8::RegExp::GetFlags() const { | 5824 v8::RegExp::Flags v8::RegExp::GetFlags() const { |
| 5871 i::Handle<i::JSRegExp> obj = Utils::OpenHandle(this); | 5825 i::Handle<i::JSRegExp> obj = Utils::OpenHandle(this); |
| 5872 return static_cast<RegExp::Flags>(obj->GetFlags().value()); | 5826 return static_cast<RegExp::Flags>(obj->GetFlags().value()); |
| 5873 } | 5827 } |
| 5874 | 5828 |
| 5875 | 5829 |
| 5876 Local<v8::Array> v8::Array::New(Isolate* isolate, int length) { | 5830 Local<v8::Array> v8::Array::New(Isolate* isolate, int length) { |
| 5877 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 5831 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 5878 EnsureInitializedForIsolate(i_isolate, "v8::Array::New()"); | |
| 5879 LOG_API(i_isolate, "Array::New"); | 5832 LOG_API(i_isolate, "Array::New"); |
| 5880 ENTER_V8(i_isolate); | 5833 ENTER_V8(i_isolate); |
| 5881 int real_length = length > 0 ? length : 0; | 5834 int real_length = length > 0 ? length : 0; |
| 5882 i::Handle<i::JSArray> obj = i_isolate->factory()->NewJSArray(real_length); | 5835 i::Handle<i::JSArray> obj = i_isolate->factory()->NewJSArray(real_length); |
| 5883 i::Handle<i::Object> length_obj = | 5836 i::Handle<i::Object> length_obj = |
| 5884 i_isolate->factory()->NewNumberFromInt(real_length); | 5837 i_isolate->factory()->NewNumberFromInt(real_length); |
| 5885 obj->set_length(*length_obj); | 5838 obj->set_length(*length_obj); |
| 5886 return Utils::ToLocal(obj); | 5839 return Utils::ToLocal(obj); |
| 5887 } | 5840 } |
| 5888 | 5841 |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6088 | 6041 |
| 6089 | 6042 |
| 6090 size_t v8::ArrayBuffer::ByteLength() const { | 6043 size_t v8::ArrayBuffer::ByteLength() const { |
| 6091 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this); | 6044 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this); |
| 6092 return static_cast<size_t>(obj->byte_length()->Number()); | 6045 return static_cast<size_t>(obj->byte_length()->Number()); |
| 6093 } | 6046 } |
| 6094 | 6047 |
| 6095 | 6048 |
| 6096 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, size_t byte_length) { | 6049 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, size_t byte_length) { |
| 6097 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6050 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 6098 EnsureInitializedForIsolate(i_isolate, "v8::ArrayBuffer::New(size_t)"); | |
| 6099 LOG_API(i_isolate, "v8::ArrayBuffer::New(size_t)"); | 6051 LOG_API(i_isolate, "v8::ArrayBuffer::New(size_t)"); |
| 6100 ENTER_V8(i_isolate); | 6052 ENTER_V8(i_isolate); |
| 6101 i::Handle<i::JSArrayBuffer> obj = | 6053 i::Handle<i::JSArrayBuffer> obj = |
| 6102 i_isolate->factory()->NewJSArrayBuffer(); | 6054 i_isolate->factory()->NewJSArrayBuffer(); |
| 6103 i::Runtime::SetupArrayBufferAllocatingData(i_isolate, obj, byte_length); | 6055 i::Runtime::SetupArrayBufferAllocatingData(i_isolate, obj, byte_length); |
| 6104 return Utils::ToLocal(obj); | 6056 return Utils::ToLocal(obj); |
| 6105 } | 6057 } |
| 6106 | 6058 |
| 6107 | 6059 |
| 6108 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, void* data, | 6060 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, void* data, |
| 6109 size_t byte_length) { | 6061 size_t byte_length) { |
| 6110 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6062 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 6111 EnsureInitializedForIsolate(i_isolate, "v8::ArrayBuffer::New(void*, size_t)"); | |
| 6112 LOG_API(i_isolate, "v8::ArrayBuffer::New(void*, size_t)"); | 6063 LOG_API(i_isolate, "v8::ArrayBuffer::New(void*, size_t)"); |
| 6113 ENTER_V8(i_isolate); | 6064 ENTER_V8(i_isolate); |
| 6114 i::Handle<i::JSArrayBuffer> obj = | 6065 i::Handle<i::JSArrayBuffer> obj = |
| 6115 i_isolate->factory()->NewJSArrayBuffer(); | 6066 i_isolate->factory()->NewJSArrayBuffer(); |
| 6116 i::Runtime::SetupArrayBuffer(i_isolate, obj, true, data, byte_length); | 6067 i::Runtime::SetupArrayBuffer(i_isolate, obj, true, data, byte_length); |
| 6117 return Utils::ToLocal(obj); | 6068 return Utils::ToLocal(obj); |
| 6118 } | 6069 } |
| 6119 | 6070 |
| 6120 | 6071 |
| 6121 Local<ArrayBuffer> v8::ArrayBufferView::Buffer() { | 6072 Local<ArrayBuffer> v8::ArrayBufferView::Buffer() { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6204 i::JSObject::GetElementsTransitionMap(obj, elements_kind); | 6155 i::JSObject::GetElementsTransitionMap(obj, elements_kind); |
| 6205 i::JSObject::SetMapAndElements(obj, map, elements); | 6156 i::JSObject::SetMapAndElements(obj, map, elements); |
| 6206 return obj; | 6157 return obj; |
| 6207 } | 6158 } |
| 6208 | 6159 |
| 6209 | 6160 |
| 6210 #define TYPED_ARRAY_NEW(Type, type, TYPE, ctype, size) \ | 6161 #define TYPED_ARRAY_NEW(Type, type, TYPE, ctype, size) \ |
| 6211 Local<Type##Array> Type##Array::New(Handle<ArrayBuffer> array_buffer, \ | 6162 Local<Type##Array> Type##Array::New(Handle<ArrayBuffer> array_buffer, \ |
| 6212 size_t byte_offset, size_t length) { \ | 6163 size_t byte_offset, size_t length) { \ |
| 6213 i::Isolate* isolate = Utils::OpenHandle(*array_buffer)->GetIsolate(); \ | 6164 i::Isolate* isolate = Utils::OpenHandle(*array_buffer)->GetIsolate(); \ |
| 6214 EnsureInitializedForIsolate(isolate, \ | |
| 6215 "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)"); \ | |
| 6216 LOG_API(isolate, \ | 6165 LOG_API(isolate, \ |
| 6217 "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)"); \ | 6166 "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)"); \ |
| 6218 ENTER_V8(isolate); \ | 6167 ENTER_V8(isolate); \ |
| 6219 if (!Utils::ApiCheck(length <= static_cast<size_t>(i::Smi::kMaxValue), \ | 6168 if (!Utils::ApiCheck(length <= static_cast<size_t>(i::Smi::kMaxValue), \ |
| 6220 "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)", \ | 6169 "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)", \ |
| 6221 "length exceeds max allowed value")) { \ | 6170 "length exceeds max allowed value")) { \ |
| 6222 return Local<Type##Array>(); \ | 6171 return Local<Type##Array>(); \ |
| 6223 } \ | 6172 } \ |
| 6224 i::Handle<i::JSTypedArray> obj = \ | 6173 i::Handle<i::JSTypedArray> obj = \ |
| 6225 NewTypedArray<ctype, v8::kExternal##Type##Array, \ | 6174 NewTypedArray<ctype, v8::kExternal##Type##Array, \ |
| 6226 i::EXTERNAL_##TYPE##_ELEMENTS>( \ | 6175 i::EXTERNAL_##TYPE##_ELEMENTS>( \ |
| 6227 isolate, array_buffer, byte_offset, length); \ | 6176 isolate, array_buffer, byte_offset, length); \ |
| 6228 return Utils::ToLocal##Type##Array(obj); \ | 6177 return Utils::ToLocal##Type##Array(obj); \ |
| 6229 } | 6178 } |
| 6230 | 6179 |
| 6231 | 6180 |
| 6232 TYPED_ARRAYS(TYPED_ARRAY_NEW) | 6181 TYPED_ARRAYS(TYPED_ARRAY_NEW) |
| 6233 #undef TYPED_ARRAY_NEW | 6182 #undef TYPED_ARRAY_NEW |
| 6234 | 6183 |
| 6235 Local<DataView> DataView::New(Handle<ArrayBuffer> array_buffer, | 6184 Local<DataView> DataView::New(Handle<ArrayBuffer> array_buffer, |
| 6236 size_t byte_offset, size_t byte_length) { | 6185 size_t byte_offset, size_t byte_length) { |
| 6237 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); | 6186 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); |
| 6238 i::Isolate* isolate = buffer->GetIsolate(); | 6187 i::Isolate* isolate = buffer->GetIsolate(); |
| 6239 EnsureInitializedForIsolate( | |
| 6240 isolate, "v8::DataView::New(void*, size_t, size_t)"); | |
| 6241 LOG_API(isolate, "v8::DataView::New(void*, size_t, size_t)"); | 6188 LOG_API(isolate, "v8::DataView::New(void*, size_t, size_t)"); |
| 6242 ENTER_V8(isolate); | 6189 ENTER_V8(isolate); |
| 6243 i::Handle<i::JSDataView> obj = isolate->factory()->NewJSDataView(); | 6190 i::Handle<i::JSDataView> obj = isolate->factory()->NewJSDataView(); |
| 6244 SetupArrayBufferView( | 6191 SetupArrayBufferView( |
| 6245 isolate, obj, buffer, byte_offset, byte_length); | 6192 isolate, obj, buffer, byte_offset, byte_length); |
| 6246 return Utils::ToLocal(obj); | 6193 return Utils::ToLocal(obj); |
| 6247 } | 6194 } |
| 6248 | 6195 |
| 6249 | 6196 |
| 6250 Local<Symbol> v8::Symbol::New(Isolate* isolate, Local<String> name) { | 6197 Local<Symbol> v8::Symbol::New(Isolate* isolate, Local<String> name) { |
| 6251 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6198 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 6252 EnsureInitializedForIsolate(i_isolate, "v8::Symbol::New()"); | |
| 6253 LOG_API(i_isolate, "Symbol::New()"); | 6199 LOG_API(i_isolate, "Symbol::New()"); |
| 6254 ENTER_V8(i_isolate); | 6200 ENTER_V8(i_isolate); |
| 6255 i::Handle<i::Symbol> result = i_isolate->factory()->NewSymbol(); | 6201 i::Handle<i::Symbol> result = i_isolate->factory()->NewSymbol(); |
| 6256 if (!name.IsEmpty()) result->set_name(*Utils::OpenHandle(*name)); | 6202 if (!name.IsEmpty()) result->set_name(*Utils::OpenHandle(*name)); |
| 6257 return Utils::ToLocal(result); | 6203 return Utils::ToLocal(result); |
| 6258 } | 6204 } |
| 6259 | 6205 |
| 6260 | 6206 |
| 6261 static i::Handle<i::Symbol> SymbolFor(i::Isolate* isolate, | 6207 static i::Handle<i::Symbol> SymbolFor(i::Isolate* isolate, |
| 6262 i::Handle<i::String> name, | 6208 i::Handle<i::String> name, |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6307 } | 6253 } |
| 6308 | 6254 |
| 6309 | 6255 |
| 6310 Local<Symbol> v8::Symbol::GetUnscopables(Isolate* isolate) { | 6256 Local<Symbol> v8::Symbol::GetUnscopables(Isolate* isolate) { |
| 6311 return GetWellKnownSymbol(isolate, "Symbol.unscopables"); | 6257 return GetWellKnownSymbol(isolate, "Symbol.unscopables"); |
| 6312 } | 6258 } |
| 6313 | 6259 |
| 6314 | 6260 |
| 6315 Local<Private> v8::Private::New(Isolate* isolate, Local<String> name) { | 6261 Local<Private> v8::Private::New(Isolate* isolate, Local<String> name) { |
| 6316 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6262 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 6317 EnsureInitializedForIsolate(i_isolate, "v8::Private::New()"); | |
| 6318 LOG_API(i_isolate, "Private::New()"); | 6263 LOG_API(i_isolate, "Private::New()"); |
| 6319 ENTER_V8(i_isolate); | 6264 ENTER_V8(i_isolate); |
| 6320 i::Handle<i::Symbol> symbol = i_isolate->factory()->NewPrivateSymbol(); | 6265 i::Handle<i::Symbol> symbol = i_isolate->factory()->NewPrivateSymbol(); |
| 6321 if (!name.IsEmpty()) symbol->set_name(*Utils::OpenHandle(*name)); | 6266 if (!name.IsEmpty()) symbol->set_name(*Utils::OpenHandle(*name)); |
| 6322 Local<Symbol> result = Utils::ToLocal(symbol); | 6267 Local<Symbol> result = Utils::ToLocal(symbol); |
| 6323 return v8::Handle<Private>(reinterpret_cast<Private*>(*result)); | 6268 return v8::Handle<Private>(reinterpret_cast<Private*>(*result)); |
| 6324 } | 6269 } |
| 6325 | 6270 |
| 6326 | 6271 |
| 6327 Local<Private> v8::Private::ForApi(Isolate* isolate, Local<String> name) { | 6272 Local<Private> v8::Private::ForApi(Isolate* isolate, Local<String> name) { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6379 return Integer::New(isolate, static_cast<int32_t>(value)); | 6324 return Integer::New(isolate, static_cast<int32_t>(value)); |
| 6380 } | 6325 } |
| 6381 ENTER_V8(internal_isolate); | 6326 ENTER_V8(internal_isolate); |
| 6382 i::Handle<i::Object> result = internal_isolate->factory()->NewNumber(value); | 6327 i::Handle<i::Object> result = internal_isolate->factory()->NewNumber(value); |
| 6383 return Utils::IntegerToLocal(result); | 6328 return Utils::IntegerToLocal(result); |
| 6384 } | 6329 } |
| 6385 | 6330 |
| 6386 | 6331 |
| 6387 bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) { | 6332 bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) { |
| 6388 i::Isolate* isolate = i::Isolate::Current(); | 6333 i::Isolate* isolate = i::Isolate::Current(); |
| 6389 EnsureInitializedForIsolate(isolate, "v8::V8::AddMessageListener()"); | |
| 6390 ON_BAILOUT(isolate, "v8::V8::AddMessageListener()", return false); | 6334 ON_BAILOUT(isolate, "v8::V8::AddMessageListener()", return false); |
| 6391 ENTER_V8(isolate); | 6335 ENTER_V8(isolate); |
| 6392 i::HandleScope scope(isolate); | 6336 i::HandleScope scope(isolate); |
| 6393 NeanderArray listeners(isolate->factory()->message_listeners()); | 6337 NeanderArray listeners(isolate->factory()->message_listeners()); |
| 6394 NeanderObject obj(isolate, 2); | 6338 NeanderObject obj(isolate, 2); |
| 6395 obj.set(0, *isolate->factory()->NewForeign(FUNCTION_ADDR(that))); | 6339 obj.set(0, *isolate->factory()->NewForeign(FUNCTION_ADDR(that))); |
| 6396 obj.set(1, data.IsEmpty() ? isolate->heap()->undefined_value() | 6340 obj.set(1, data.IsEmpty() ? isolate->heap()->undefined_value() |
| 6397 : *Utils::OpenHandle(*data)); | 6341 : *Utils::OpenHandle(*data)); |
| 6398 listeners.add(obj.value()); | 6342 listeners.add(obj.value()); |
| 6399 return true; | 6343 return true; |
| 6400 } | 6344 } |
| 6401 | 6345 |
| 6402 | 6346 |
| 6403 void V8::RemoveMessageListeners(MessageCallback that) { | 6347 void V8::RemoveMessageListeners(MessageCallback that) { |
| 6404 i::Isolate* isolate = i::Isolate::Current(); | 6348 i::Isolate* isolate = i::Isolate::Current(); |
| 6405 EnsureInitializedForIsolate(isolate, "v8::V8::RemoveMessageListener()"); | |
| 6406 ON_BAILOUT(isolate, "v8::V8::RemoveMessageListeners()", return); | 6349 ON_BAILOUT(isolate, "v8::V8::RemoveMessageListeners()", return); |
| 6407 ENTER_V8(isolate); | 6350 ENTER_V8(isolate); |
| 6408 i::HandleScope scope(isolate); | 6351 i::HandleScope scope(isolate); |
| 6409 NeanderArray listeners(isolate->factory()->message_listeners()); | 6352 NeanderArray listeners(isolate->factory()->message_listeners()); |
| 6410 for (int i = 0; i < listeners.length(); i++) { | 6353 for (int i = 0; i < listeners.length(); i++) { |
| 6411 if (listeners.get(i)->IsUndefined()) continue; // skip deleted ones | 6354 if (listeners.get(i)->IsUndefined()) continue; // skip deleted ones |
| 6412 | 6355 |
| 6413 NeanderObject listener(i::JSObject::cast(listeners.get(i))); | 6356 NeanderObject listener(i::JSObject::cast(listeners.get(i))); |
| 6414 i::Handle<i::Foreign> callback_obj(i::Foreign::cast(listener.get(0))); | 6357 i::Handle<i::Foreign> callback_obj(i::Foreign::cast(listener.get(0))); |
| 6415 if (callback_obj->foreign_address() == FUNCTION_ADDR(that)) { | 6358 if (callback_obj->foreign_address() == FUNCTION_ADDR(that)) { |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6668 if (params.entry_hook) { | 6611 if (params.entry_hook) { |
| 6669 isolate->set_function_entry_hook(params.entry_hook); | 6612 isolate->set_function_entry_hook(params.entry_hook); |
| 6670 } | 6613 } |
| 6671 if (params.code_event_handler) { | 6614 if (params.code_event_handler) { |
| 6672 isolate->InitializeLoggingAndCounters(); | 6615 isolate->InitializeLoggingAndCounters(); |
| 6673 isolate->logger()->SetCodeEventHandler(kJitCodeEventDefault, | 6616 isolate->logger()->SetCodeEventHandler(kJitCodeEventDefault, |
| 6674 params.code_event_handler); | 6617 params.code_event_handler); |
| 6675 } | 6618 } |
| 6676 SetResourceConstraints(v8_isolate, | 6619 SetResourceConstraints(v8_isolate, |
| 6677 const_cast<ResourceConstraints*>(¶ms.constraints)); | 6620 const_cast<ResourceConstraints*>(¶ms.constraints)); |
| 6621 if (params.enable_serializer) { |
| 6622 isolate->enable_serializer(); |
| 6623 } |
| 6624 // TODO(jochen): Once we got rid of Isolate::Current(), we can remove this. |
| 6625 Isolate::Scope isolate_scope(v8_isolate); |
| 6626 if (params.entry_hook || !i::Snapshot::Initialize(isolate)) { |
| 6627 // If the isolate has a function entry hook, it needs to re-build all its |
| 6628 // code stubs with entry hooks embedded, so don't deserialize a snapshot. |
| 6629 isolate->Init(NULL); |
| 6630 } |
| 6678 return v8_isolate; | 6631 return v8_isolate; |
| 6679 } | 6632 } |
| 6680 | 6633 |
| 6681 | 6634 |
| 6682 void Isolate::Dispose() { | 6635 void Isolate::Dispose() { |
| 6683 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | 6636 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); |
| 6684 if (!Utils::ApiCheck(!isolate->IsInUse(), | 6637 if (!Utils::ApiCheck(!isolate->IsInUse(), |
| 6685 "v8::Isolate::Dispose()", | 6638 "v8::Isolate::Dispose()", |
| 6686 "Disposing the isolate that is entered by a thread.")) { | 6639 "Disposing the isolate that is entered by a thread.")) { |
| 6687 return; | 6640 return; |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6970 DEFINE_ERROR(TypeError) | 6923 DEFINE_ERROR(TypeError) |
| 6971 DEFINE_ERROR(Error) | 6924 DEFINE_ERROR(Error) |
| 6972 | 6925 |
| 6973 #undef DEFINE_ERROR | 6926 #undef DEFINE_ERROR |
| 6974 | 6927 |
| 6975 | 6928 |
| 6976 // --- D e b u g S u p p o r t --- | 6929 // --- D e b u g S u p p o r t --- |
| 6977 | 6930 |
| 6978 bool Debug::SetDebugEventListener(EventCallback that, Handle<Value> data) { | 6931 bool Debug::SetDebugEventListener(EventCallback that, Handle<Value> data) { |
| 6979 i::Isolate* isolate = i::Isolate::Current(); | 6932 i::Isolate* isolate = i::Isolate::Current(); |
| 6980 EnsureInitializedForIsolate(isolate, "v8::Debug::SetDebugEventListener()"); | |
| 6981 ON_BAILOUT(isolate, "v8::Debug::SetDebugEventListener()", return false); | 6933 ON_BAILOUT(isolate, "v8::Debug::SetDebugEventListener()", return false); |
| 6982 ENTER_V8(isolate); | 6934 ENTER_V8(isolate); |
| 6983 i::HandleScope scope(isolate); | 6935 i::HandleScope scope(isolate); |
| 6984 i::Handle<i::Object> foreign = isolate->factory()->undefined_value(); | 6936 i::Handle<i::Object> foreign = isolate->factory()->undefined_value(); |
| 6985 if (that != NULL) { | 6937 if (that != NULL) { |
| 6986 foreign = isolate->factory()->NewForeign(FUNCTION_ADDR(that)); | 6938 foreign = isolate->factory()->NewForeign(FUNCTION_ADDR(that)); |
| 6987 } | 6939 } |
| 6988 isolate->debug()->SetEventListener(foreign, | 6940 isolate->debug()->SetEventListener(foreign, |
| 6989 Utils::OpenHandle(*data, true)); | 6941 Utils::OpenHandle(*data, true)); |
| 6990 return true; | 6942 return true; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 7009 | 6961 |
| 7010 | 6962 |
| 7011 void Debug::DebugBreakForCommand(Isolate* isolate, ClientData* data) { | 6963 void Debug::DebugBreakForCommand(Isolate* isolate, ClientData* data) { |
| 7012 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6964 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 7013 internal_isolate->debug()->EnqueueDebugCommand(data); | 6965 internal_isolate->debug()->EnqueueDebugCommand(data); |
| 7014 } | 6966 } |
| 7015 | 6967 |
| 7016 | 6968 |
| 7017 void Debug::SetMessageHandler(v8::Debug::MessageHandler handler) { | 6969 void Debug::SetMessageHandler(v8::Debug::MessageHandler handler) { |
| 7018 i::Isolate* isolate = i::Isolate::Current(); | 6970 i::Isolate* isolate = i::Isolate::Current(); |
| 7019 EnsureInitializedForIsolate(isolate, "v8::Debug::SetMessageHandler"); | |
| 7020 ENTER_V8(isolate); | 6971 ENTER_V8(isolate); |
| 7021 isolate->debug()->SetMessageHandler(handler); | 6972 isolate->debug()->SetMessageHandler(handler); |
| 7022 } | 6973 } |
| 7023 | 6974 |
| 7024 | 6975 |
| 7025 void Debug::SendCommand(Isolate* isolate, | 6976 void Debug::SendCommand(Isolate* isolate, |
| 7026 const uint16_t* command, | 6977 const uint16_t* command, |
| 7027 int length, | 6978 int length, |
| 7028 ClientData* client_data) { | 6979 ClientData* client_data) { |
| 7029 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6980 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7083 } | 7034 } |
| 7084 | 7035 |
| 7085 | 7036 |
| 7086 void Debug::ProcessDebugMessages() { | 7037 void Debug::ProcessDebugMessages() { |
| 7087 i::Isolate::Current()->debug()->ProcessDebugMessages(true); | 7038 i::Isolate::Current()->debug()->ProcessDebugMessages(true); |
| 7088 } | 7039 } |
| 7089 | 7040 |
| 7090 | 7041 |
| 7091 Local<Context> Debug::GetDebugContext() { | 7042 Local<Context> Debug::GetDebugContext() { |
| 7092 i::Isolate* isolate = i::Isolate::Current(); | 7043 i::Isolate* isolate = i::Isolate::Current(); |
| 7093 EnsureInitializedForIsolate(isolate, "v8::Debug::GetDebugContext()"); | |
| 7094 ENTER_V8(isolate); | 7044 ENTER_V8(isolate); |
| 7095 return Utils::ToLocal(i::Isolate::Current()->debug()->GetDebugContext()); | 7045 return Utils::ToLocal(i::Isolate::Current()->debug()->GetDebugContext()); |
| 7096 } | 7046 } |
| 7097 | 7047 |
| 7098 | 7048 |
| 7099 void Debug::SetLiveEditEnabled(Isolate* isolate, bool enable) { | 7049 void Debug::SetLiveEditEnabled(Isolate* isolate, bool enable) { |
| 7100 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); | 7050 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 7101 internal_isolate->debug()->set_live_edit_enabled(enable); | 7051 internal_isolate->debug()->set_live_edit_enabled(enable); |
| 7102 } | 7052 } |
| 7103 | 7053 |
| (...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7745 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7695 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7746 Address callback_address = | 7696 Address callback_address = |
| 7747 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7697 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7748 VMState<EXTERNAL> state(isolate); | 7698 VMState<EXTERNAL> state(isolate); |
| 7749 ExternalCallbackScope call_scope(isolate, callback_address); | 7699 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7750 callback(info); | 7700 callback(info); |
| 7751 } | 7701 } |
| 7752 | 7702 |
| 7753 | 7703 |
| 7754 } } // namespace v8::internal | 7704 } } // namespace v8::internal |
| OLD | NEW |