OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 | 77 |
78 | 78 |
79 #define EXCEPTION_BAILOUT_CHECK(isolate, value) \ | 79 #define EXCEPTION_BAILOUT_CHECK(isolate, value) \ |
80 do { \ | 80 do { \ |
81 i::HandleScopeImplementer* handle_scope_implementer = \ | 81 i::HandleScopeImplementer* handle_scope_implementer = \ |
82 (isolate)->handle_scope_implementer(); \ | 82 (isolate)->handle_scope_implementer(); \ |
83 handle_scope_implementer->DecrementCallDepth(); \ | 83 handle_scope_implementer->DecrementCallDepth(); \ |
84 if (has_pending_exception) { \ | 84 if (has_pending_exception) { \ |
85 if (handle_scope_implementer->CallDepthIsZero() && \ | 85 if (handle_scope_implementer->CallDepthIsZero() && \ |
86 (isolate)->is_out_of_memory()) { \ | 86 (isolate)->is_out_of_memory()) { \ |
87 if (!handle_scope_implementer->ignore_out_of_memory()) \ | 87 if (!(isolate)->ignore_out_of_memory()) \ |
88 i::V8::FatalProcessOutOfMemory(NULL); \ | 88 i::V8::FatalProcessOutOfMemory(NULL); \ |
89 } \ | 89 } \ |
90 bool call_depth_is_zero = handle_scope_implementer->CallDepthIsZero(); \ | 90 bool call_depth_is_zero = handle_scope_implementer->CallDepthIsZero(); \ |
91 (isolate)->OptionalRescheduleException(call_depth_is_zero); \ | 91 (isolate)->OptionalRescheduleException(call_depth_is_zero); \ |
92 return value; \ | 92 return value; \ |
93 } \ | 93 } \ |
94 } while (false) | 94 } while (false) |
95 | 95 |
96 | 96 |
97 #define API_ENTRY_CHECK(isolate, msg) \ | 97 #define API_ENTRY_CHECK(isolate, msg) \ |
(...skipping 4154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4252 } | 4252 } |
4253 | 4253 |
4254 static void* ExternalValueImpl(i::Handle<i::Object> obj) { | 4254 static void* ExternalValueImpl(i::Handle<i::Object> obj) { |
4255 return reinterpret_cast<void*>(i::Foreign::cast(*obj)->address()); | 4255 return reinterpret_cast<void*>(i::Foreign::cast(*obj)->address()); |
4256 } | 4256 } |
4257 | 4257 |
4258 | 4258 |
4259 Local<Value> v8::External::Wrap(void* data) { | 4259 Local<Value> v8::External::Wrap(void* data) { |
4260 i::Isolate* isolate = i::Isolate::Current(); | 4260 i::Isolate* isolate = i::Isolate::Current(); |
4261 STATIC_ASSERT(sizeof(data) == sizeof(i::Address)); | 4261 STATIC_ASSERT(sizeof(data) == sizeof(i::Address)); |
| 4262 EnsureInitializedForIsolate(isolate, "v8::External::Wrap()"); |
4262 LOG_API(isolate, "External::Wrap"); | 4263 LOG_API(isolate, "External::Wrap"); |
4263 EnsureInitializedForIsolate(isolate, "v8::External::Wrap()"); | |
4264 ENTER_V8(isolate); | 4264 ENTER_V8(isolate); |
4265 | 4265 |
4266 v8::Local<v8::Value> result = CanBeEncodedAsSmi(data) | 4266 v8::Local<v8::Value> result = CanBeEncodedAsSmi(data) |
4267 ? Utils::ToLocal(i::Handle<i::Object>(EncodeAsSmi(data))) | 4267 ? Utils::ToLocal(i::Handle<i::Object>(EncodeAsSmi(data))) |
4268 : v8::Local<v8::Value>(ExternalNewImpl(data)); | 4268 : v8::Local<v8::Value>(ExternalNewImpl(data)); |
4269 | 4269 |
4270 ASSERT_EQ(data, Unwrap(result)); | 4270 ASSERT_EQ(data, Unwrap(result)); |
4271 return result; | 4271 return result; |
4272 } | 4272 } |
4273 | 4273 |
(...skipping 23 matching lines...) Expand all Loading... |
4297 result = NULL; | 4297 result = NULL; |
4298 } | 4298 } |
4299 ASSERT_EQ(result, QuickUnwrap(wrapper)); | 4299 ASSERT_EQ(result, QuickUnwrap(wrapper)); |
4300 return result; | 4300 return result; |
4301 } | 4301 } |
4302 | 4302 |
4303 | 4303 |
4304 Local<External> v8::External::New(void* data) { | 4304 Local<External> v8::External::New(void* data) { |
4305 STATIC_ASSERT(sizeof(data) == sizeof(i::Address)); | 4305 STATIC_ASSERT(sizeof(data) == sizeof(i::Address)); |
4306 i::Isolate* isolate = i::Isolate::Current(); | 4306 i::Isolate* isolate = i::Isolate::Current(); |
| 4307 EnsureInitializedForIsolate(isolate, "v8::External::New()"); |
4307 LOG_API(isolate, "External::New"); | 4308 LOG_API(isolate, "External::New"); |
4308 EnsureInitializedForIsolate(isolate, "v8::External::New()"); | |
4309 ENTER_V8(isolate); | 4309 ENTER_V8(isolate); |
4310 return ExternalNewImpl(data); | 4310 return ExternalNewImpl(data); |
4311 } | 4311 } |
4312 | 4312 |
4313 | 4313 |
4314 void* External::Value() const { | 4314 void* External::Value() const { |
4315 if (IsDeadCheck(i::Isolate::Current(), "v8::External::Value()")) return 0; | 4315 if (IsDeadCheck(i::Isolate::Current(), "v8::External::Value()")) return 0; |
4316 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 4316 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
4317 return ExternalValueImpl(obj); | 4317 return ExternalValueImpl(obj); |
4318 } | 4318 } |
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4790 return Integer::New(static_cast<int32_t>(value)); | 4790 return Integer::New(static_cast<int32_t>(value)); |
4791 } | 4791 } |
4792 i::Isolate* isolate = i::Isolate::Current(); | 4792 i::Isolate* isolate = i::Isolate::Current(); |
4793 ENTER_V8(isolate); | 4793 ENTER_V8(isolate); |
4794 i::Handle<i::Object> result = isolate->factory()->NewNumber(value); | 4794 i::Handle<i::Object> result = isolate->factory()->NewNumber(value); |
4795 return Utils::IntegerToLocal(result); | 4795 return Utils::IntegerToLocal(result); |
4796 } | 4796 } |
4797 | 4797 |
4798 | 4798 |
4799 void V8::IgnoreOutOfMemoryException() { | 4799 void V8::IgnoreOutOfMemoryException() { |
4800 EnterIsolateIfNeeded()->handle_scope_implementer()->set_ignore_out_of_memory( | 4800 EnterIsolateIfNeeded()->set_ignore_out_of_memory(true); |
4801 true); | |
4802 } | 4801 } |
4803 | 4802 |
4804 | 4803 |
4805 bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) { | 4804 bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) { |
4806 i::Isolate* isolate = i::Isolate::Current(); | 4805 i::Isolate* isolate = i::Isolate::Current(); |
4807 EnsureInitializedForIsolate(isolate, "v8::V8::AddMessageListener()"); | 4806 EnsureInitializedForIsolate(isolate, "v8::V8::AddMessageListener()"); |
4808 ON_BAILOUT(isolate, "v8::V8::AddMessageListener()", return false); | 4807 ON_BAILOUT(isolate, "v8::V8::AddMessageListener()", return false); |
4809 ENTER_V8(isolate); | 4808 ENTER_V8(isolate); |
4810 i::HandleScope scope(isolate); | 4809 i::HandleScope scope(isolate); |
4811 NeanderArray listeners(isolate->factory()->message_listeners()); | 4810 NeanderArray listeners(isolate->factory()->message_listeners()); |
(...skipping 1225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6037 | 6036 |
6038 | 6037 |
6039 char* HandleScopeImplementer::Iterate(ObjectVisitor* v, char* storage) { | 6038 char* HandleScopeImplementer::Iterate(ObjectVisitor* v, char* storage) { |
6040 HandleScopeImplementer* scope_implementer = | 6039 HandleScopeImplementer* scope_implementer = |
6041 reinterpret_cast<HandleScopeImplementer*>(storage); | 6040 reinterpret_cast<HandleScopeImplementer*>(storage); |
6042 scope_implementer->IterateThis(v); | 6041 scope_implementer->IterateThis(v); |
6043 return storage + ArchiveSpacePerThread(); | 6042 return storage + ArchiveSpacePerThread(); |
6044 } | 6043 } |
6045 | 6044 |
6046 } } // namespace v8::internal | 6045 } } // namespace v8::internal |
OLD | NEW |