Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index a06e0dbbbc640d07aabdd3938a9410741f2a2f74..76ed4d2a010c636dcd1130424e58438145ff59d4 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -548,8 +548,7 @@ v8::Handle<Primitive> Undefined() { |
if (!EnsureInitializedForIsolate(isolate, "v8::Undefined()")) { |
return v8::Handle<v8::Primitive>(); |
} |
- return v8::Handle<Primitive>(ToApi<Primitive>( |
- isolate->factory()->undefined_value())); |
+ return ToApiHandle<Primitive>(isolate->factory()->undefined_value()); |
} |
@@ -558,8 +557,7 @@ v8::Handle<Primitive> Null() { |
if (!EnsureInitializedForIsolate(isolate, "v8::Null()")) { |
return v8::Handle<v8::Primitive>(); |
} |
- return v8::Handle<Primitive>( |
- ToApi<Primitive>(isolate->factory()->null_value())); |
+ return ToApiHandle<Primitive>(isolate->factory()->null_value()); |
} |
@@ -568,8 +566,7 @@ v8::Handle<Boolean> True() { |
if (!EnsureInitializedForIsolate(isolate, "v8::True()")) { |
return v8::Handle<Boolean>(); |
} |
- return v8::Handle<Boolean>( |
- ToApi<Boolean>(isolate->factory()->true_value())); |
+ return ToApiHandle<Boolean>(isolate->factory()->true_value()); |
} |
@@ -578,8 +575,7 @@ v8::Handle<Boolean> False() { |
if (!EnsureInitializedForIsolate(isolate, "v8::False()")) { |
return v8::Handle<Boolean>(); |
} |
- return v8::Handle<Boolean>( |
- ToApi<Boolean>(isolate->factory()->false_value())); |
+ return ToApiHandle<Boolean>(isolate->factory()->false_value()); |
} |
@@ -949,7 +945,7 @@ Local<ObjectTemplate> FunctionTemplate::PrototypeTemplate() { |
result = Utils::OpenHandle(*ObjectTemplate::New()); |
Utils::OpenHandle(this)->set_prototype_template(*result); |
} |
- return Local<ObjectTemplate>(ToApi<ObjectTemplate>(result)); |
+ return ToApiHandle<ObjectTemplate>(result); |
} |
@@ -1044,8 +1040,7 @@ template<typename Operation> |
static Local<Operation> NewDescriptor( |
Isolate* isolate, |
const i::DeclaredAccessorDescriptorData& data, |
- Data* previous_descriptor |
- ) { |
+ Data* previous_descriptor) { |
i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
i::Handle<i::DeclaredAccessorDescriptor> previous = |
i::Handle<i::DeclaredAccessorDescriptor>(); |
@@ -1055,8 +1050,7 @@ static Local<Operation> NewDescriptor( |
} |
i::Handle<i::DeclaredAccessorDescriptor> descriptor = |
i::DeclaredAccessorDescriptor::Create(internal_isolate, data, previous); |
- return Local<Operation>( |
- reinterpret_cast<Operation*>(*Utils::ToLocal(descriptor))); |
+ return Utils::Convert<i::DeclaredAccessorDescriptor, Operation>(descriptor); |
} |
@@ -1297,13 +1291,14 @@ Local<ObjectTemplate> FunctionTemplate::InstanceTemplate() { |
|| EmptyCheck("v8::FunctionTemplate::InstanceTemplate()", this)) |
return Local<ObjectTemplate>(); |
ENTER_V8(isolate); |
- if (Utils::OpenHandle(this)->instance_template()->IsUndefined()) { |
+ i::Handle<i::FunctionTemplateInfo> handle = Utils::OpenHandle(this); |
+ if (handle->instance_template()->IsUndefined()) { |
Local<ObjectTemplate> templ = |
- ObjectTemplate::New(v8::Handle<FunctionTemplate>(this)); |
- Utils::OpenHandle(this)->set_instance_template(*Utils::OpenHandle(*templ)); |
+ ObjectTemplate::New(ToApiHandle<FunctionTemplate>(handle)); |
+ handle->set_instance_template(*Utils::OpenHandle(*templ)); |
} |
- i::Handle<i::ObjectTemplateInfo> result(i::ObjectTemplateInfo::cast( |
- Utils::OpenHandle(this)->instance_template())); |
+ i::Handle<i::ObjectTemplateInfo> result( |
+ i::ObjectTemplateInfo::cast(handle->instance_template())); |
return Utils::ToLocal(result); |
} |
@@ -1901,7 +1896,7 @@ Local<Script> Script::New(v8::Handle<String> source, |
raw_result = *result; |
} |
i::Handle<i::SharedFunctionInfo> result(raw_result, isolate); |
- return Local<Script>(ToApi<Script>(result)); |
+ return ToApiHandle<Script>(result); |
} |
@@ -1930,7 +1925,7 @@ Local<Script> Script::Compile(v8::Handle<String> source, |
isolate->factory()->NewFunctionFromSharedFunctionInfo( |
function, |
isolate->global_context()); |
- return Local<Script>(ToApi<Script>(result)); |
+ return ToApiHandle<Script>(result); |
} |
@@ -2773,7 +2768,7 @@ Local<String> Value::ToString() const { |
str = i::Execution::ToString(obj, &has_pending_exception); |
EXCEPTION_BAILOUT_CHECK(isolate, Local<String>()); |
} |
- return Local<String>(ToApi<String>(str)); |
+ return ToApiHandle<String>(str); |
} |
@@ -2793,7 +2788,7 @@ Local<String> Value::ToDetailString() const { |
str = i::Execution::ToDetailString(obj, &has_pending_exception); |
EXCEPTION_BAILOUT_CHECK(isolate, Local<String>()); |
} |
- return Local<String>(ToApi<String>(str)); |
+ return ToApiHandle<String>(str); |
} |
@@ -2813,14 +2808,14 @@ Local<v8::Object> Value::ToObject() const { |
val = i::Execution::ToObject(obj, &has_pending_exception); |
EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Object>()); |
} |
- return Local<v8::Object>(ToApi<Object>(val)); |
+ return ToApiHandle<Object>(val); |
} |
Local<Boolean> Value::ToBoolean() const { |
i::Handle<i::Object> obj = Utils::OpenHandle(this); |
if (obj->IsBoolean()) { |
- return Local<Boolean>(ToApi<Boolean>(obj)); |
+ return ToApiHandle<Boolean>(obj); |
} else { |
i::Isolate* isolate = i::Isolate::Current(); |
if (IsDeadCheck(isolate, "v8::Value::ToBoolean()")) { |
@@ -2830,7 +2825,7 @@ Local<Boolean> Value::ToBoolean() const { |
ENTER_V8(isolate); |
i::Handle<i::Object> val = |
isolate->factory()->ToBoolean(obj->BooleanValue()); |
- return Local<Boolean>(ToApi<Boolean>(val)); |
+ return ToApiHandle<Boolean>(val); |
} |
} |
@@ -2851,7 +2846,7 @@ Local<Number> Value::ToNumber() const { |
num = i::Execution::ToNumber(obj, &has_pending_exception); |
EXCEPTION_BAILOUT_CHECK(isolate, Local<Number>()); |
} |
- return Local<Number>(ToApi<Number>(num)); |
+ return ToApiHandle<Number>(num); |
} |
@@ -2869,7 +2864,7 @@ Local<Integer> Value::ToInteger() const { |
num = i::Execution::ToInteger(obj, &has_pending_exception); |
EXCEPTION_BAILOUT_CHECK(isolate, Local<Integer>()); |
} |
- return Local<Integer>(ToApi<Integer>(num)); |
+ return ToApiHandle<Integer>(num); |
} |
@@ -3099,7 +3094,7 @@ Local<Int32> Value::ToInt32() const { |
num = i::Execution::ToInt32(obj, &has_pending_exception); |
EXCEPTION_BAILOUT_CHECK(isolate, Local<Int32>()); |
} |
- return Local<Int32>(ToApi<Int32>(num)); |
+ return ToApiHandle<Int32>(num); |
} |
@@ -3117,7 +3112,7 @@ Local<Uint32> Value::ToUint32() const { |
num = i::Execution::ToUint32(obj, &has_pending_exception); |
EXCEPTION_BAILOUT_CHECK(isolate, Local<Uint32>()); |
} |
- return Local<Uint32>(ToApi<Uint32>(num)); |
+ return ToApiHandle<Uint32>(num); |
} |
@@ -5359,7 +5354,7 @@ static i::Handle<i::Context> CreateEnvironment( |
return env; |
} |
- |
+#ifdef V8_USE_UNSAFE_HANDLES |
Persistent<Context> v8::Context::New( |
v8::ExtensionConfiguration* extensions, |
v8::Handle<ObjectTemplate> global_template, |
@@ -5376,6 +5371,7 @@ Persistent<Context> v8::Context::New( |
if (env.is_null()) return Persistent<Context>(); |
return Persistent<Context>::New(external_isolate, Utils::ToLocal(env)); |
} |
+#endif |
Local<Context> v8::Context::New( |
@@ -6549,24 +6545,27 @@ void Isolate::SetObjectGroupId(const Persistent<Value>& object, |
UniqueId id) { |
i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); |
internal_isolate->global_handles()->SetObjectGroupId( |
- reinterpret_cast<i::Object**>(*object), id); |
+ Utils::OpenPersistent(object).location(), |
+ id); |
} |
void Isolate::SetReferenceFromGroup(UniqueId id, |
const Persistent<Value>& object) { |
i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); |
- internal_isolate->global_handles() |
- ->SetReferenceFromGroup(id, reinterpret_cast<i::Object**>(*object)); |
+ internal_isolate->global_handles()->SetReferenceFromGroup( |
+ id, |
+ Utils::OpenPersistent(object).location()); |
} |
void Isolate::SetReference(const Persistent<Object>& parent, |
const Persistent<Value>& child) { |
i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); |
+ i::Object** parent_location = Utils::OpenPersistent(parent).location(); |
internal_isolate->global_handles()->SetReference( |
- i::Handle<i::HeapObject>::cast(Utils::OpenHandle(*parent)).location(), |
- reinterpret_cast<i::Object**>(*child)); |
+ reinterpret_cast<i::HeapObject**>(parent_location), |
+ Utils::OpenPersistent(child).location()); |
} |
@@ -7171,12 +7170,12 @@ Handle<String> CpuProfileNode::GetFunctionName() const { |
const i::ProfileNode* node = reinterpret_cast<const i::ProfileNode*>(this); |
const i::CodeEntry* entry = node->entry(); |
if (!entry->has_name_prefix()) { |
- return Handle<String>(ToApi<String>( |
- isolate->factory()->InternalizeUtf8String(entry->name()))); |
+ return ToApiHandle<String>( |
+ isolate->factory()->InternalizeUtf8String(entry->name())); |
} else { |
- return Handle<String>(ToApi<String>(isolate->factory()->NewConsString( |
+ return ToApiHandle<String>(isolate->factory()->NewConsString( |
isolate->factory()->InternalizeUtf8String(entry->name_prefix()), |
- isolate->factory()->InternalizeUtf8String(entry->name())))); |
+ isolate->factory()->InternalizeUtf8String(entry->name()))); |
} |
} |
@@ -7185,8 +7184,8 @@ Handle<String> CpuProfileNode::GetScriptResourceName() const { |
i::Isolate* isolate = i::Isolate::Current(); |
IsDeadCheck(isolate, "v8::CpuProfileNode::GetScriptResourceName"); |
const i::ProfileNode* node = reinterpret_cast<const i::ProfileNode*>(this); |
- return Handle<String>(ToApi<String>(isolate->factory()->InternalizeUtf8String( |
- node->entry()->resource_name()))); |
+ return ToApiHandle<String>(isolate->factory()->InternalizeUtf8String( |
+ node->entry()->resource_name())); |
} |
@@ -7277,8 +7276,8 @@ Handle<String> CpuProfile::GetTitle() const { |
i::Isolate* isolate = i::Isolate::Current(); |
IsDeadCheck(isolate, "v8::CpuProfile::GetTitle"); |
const i::CpuProfile* profile = reinterpret_cast<const i::CpuProfile*>(this); |
- return Handle<String>(ToApi<String>(isolate->factory()->InternalizeUtf8String( |
- profile->title()))); |
+ return ToApiHandle<String>(isolate->factory()->InternalizeUtf8String( |
+ profile->title())); |
} |
@@ -7446,12 +7445,12 @@ Handle<Value> HeapGraphEdge::GetName() const { |
case i::HeapGraphEdge::kInternal: |
case i::HeapGraphEdge::kProperty: |
case i::HeapGraphEdge::kShortcut: |
- return Handle<String>(ToApi<String>( |
- isolate->factory()->InternalizeUtf8String(edge->name()))); |
+ return ToApiHandle<String>( |
+ isolate->factory()->InternalizeUtf8String(edge->name())); |
case i::HeapGraphEdge::kElement: |
case i::HeapGraphEdge::kHidden: |
- return Handle<Number>(ToApi<Number>( |
- isolate->factory()->NewNumberFromInt(edge->index()))); |
+ return ToApiHandle<Number>( |
+ isolate->factory()->NewNumberFromInt(edge->index())); |
default: UNREACHABLE(); |
} |
return v8::Undefined(); |
@@ -7490,8 +7489,8 @@ HeapGraphNode::Type HeapGraphNode::GetType() const { |
Handle<String> HeapGraphNode::GetName() const { |
i::Isolate* isolate = i::Isolate::Current(); |
IsDeadCheck(isolate, "v8::HeapGraphNode::GetName"); |
- return Handle<String>(ToApi<String>(isolate->factory()->InternalizeUtf8String( |
- ToInternal(this)->name()))); |
+ return ToApiHandle<String>( |
+ isolate->factory()->InternalizeUtf8String(ToInternal(this)->name())); |
} |
@@ -7528,9 +7527,9 @@ v8::Handle<v8::Value> HeapGraphNode::GetHeapValue() const { |
i::Isolate* isolate = i::Isolate::Current(); |
IsDeadCheck(isolate, "v8::HeapGraphNode::GetHeapValue"); |
i::Handle<i::HeapObject> object = ToInternal(this)->GetHeapObject(); |
- return v8::Handle<Value>(!object.is_null() ? |
- ToApi<Value>(object) : ToApi<Value>( |
- isolate->factory()->undefined_value())); |
+ return !object.is_null() ? |
+ ToApiHandle<Value>(object) : |
+ ToApiHandle<Value>(isolate->factory()->undefined_value()); |
} |
@@ -7569,8 +7568,8 @@ unsigned HeapSnapshot::GetUid() const { |
Handle<String> HeapSnapshot::GetTitle() const { |
i::Isolate* isolate = i::Isolate::Current(); |
IsDeadCheck(isolate, "v8::HeapSnapshot::GetTitle"); |
- return Handle<String>(ToApi<String>(isolate->factory()->InternalizeUtf8String( |
- ToInternal(this)->title()))); |
+ return ToApiHandle<String>( |
+ isolate->factory()->InternalizeUtf8String(ToInternal(this)->title())); |
} |